add confirm while delete
This commit is contained in:
		
							parent
							
								
									6b81860960
								
							
						
					
					
						commit
						43a5d8193d
					
				@ -102,7 +102,7 @@
 | 
				
			|||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "OK" : {
 | 
					    "OK" : {
 | 
				
			||||||
      "comment" : "Profile update alert button",
 | 
					      "comment" : "Common OK\nProfile update alert button",
 | 
				
			||||||
      "localizations" : {
 | 
					      "localizations" : {
 | 
				
			||||||
        "en" : {
 | 
					        "en" : {
 | 
				
			||||||
          "stringUnit" : {
 | 
					          "stringUnit" : {
 | 
				
			||||||
@ -386,6 +386,9 @@
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    "Добавление новых блокировок появится позже." : {
 | 
				
			||||||
 | 
					      "comment" : "Add blocked user placeholder message"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
    "Другое" : {
 | 
					    "Другое" : {
 | 
				
			||||||
      "localizations" : {
 | 
					      "localizations" : {
 | 
				
			||||||
        "en" : {
 | 
					        "en" : {
 | 
				
			||||||
@ -1268,6 +1271,9 @@
 | 
				
			|||||||
    },
 | 
					    },
 | 
				
			||||||
    "Открыть правила" : {
 | 
					    "Открыть правила" : {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "Отмена" : {
 | 
				
			||||||
 | 
					      "comment" : "Common cancel"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "Отображаемое имя" : {
 | 
					    "Отображаемое имя" : {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -1609,6 +1615,9 @@
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    "Пользователь \"%1$@\" будет удалён из списка заблокированных." : {
 | 
				
			||||||
 | 
					      "comment" : "Unblock confirmation message"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
    "Пользователь Системы 1" : {
 | 
					    "Пользователь Системы 1" : {
 | 
				
			||||||
      "comment" : "Тестовая подмена офф аккаунта",
 | 
					      "comment" : "Тестовая подмена офф аккаунта",
 | 
				
			||||||
      "extractionState" : "manual",
 | 
					      "extractionState" : "manual",
 | 
				
			||||||
@ -1828,7 +1837,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "Разблокировать" : {
 | 
					    "Разблокировать" : {
 | 
				
			||||||
 | 
					      "comment" : "Unblock confirmation action"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "Разрешить пересылку сообщений" : {
 | 
					    "Разрешить пересылку сообщений" : {
 | 
				
			||||||
      "localizations" : {
 | 
					      "localizations" : {
 | 
				
			||||||
@ -2027,6 +2036,9 @@
 | 
				
			|||||||
    "Скопировать" : {
 | 
					    "Скопировать" : {
 | 
				
			||||||
      "comment" : "Search placeholder copy"
 | 
					      "comment" : "Search placeholder copy"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    "Скоро" : {
 | 
				
			||||||
 | 
					      "comment" : "Add blocked user placeholder title"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
    "Скоро появится мини-игра, где можно заработать очки для кастомизации профиля. Следите за обновлениями!" : {
 | 
					    "Скоро появится мини-игра, где можно заработать очки для кастомизации профиля. Следите за обновлениями!" : {
 | 
				
			||||||
      "comment" : "Concept tab placeholder description"
 | 
					      "comment" : "Concept tab placeholder description"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
@ -2206,6 +2218,9 @@
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    "Удалить из заблокированных?" : {
 | 
				
			||||||
 | 
					      "comment" : "Unblock confirmation title"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
    "Удалить чат (скоро)" : {
 | 
					    "Удалить чат (скоро)" : {
 | 
				
			||||||
      "localizations" : {
 | 
					      "localizations" : {
 | 
				
			||||||
        "en" : {
 | 
					        "en" : {
 | 
				
			||||||
 | 
				
			|||||||
@ -4,6 +4,9 @@ struct BlockedUsersView: View {
 | 
				
			|||||||
    @State private var blockedUsers: [BlockedUser] = []
 | 
					    @State private var blockedUsers: [BlockedUser] = []
 | 
				
			||||||
    @State private var isLoading = false
 | 
					    @State private var isLoading = false
 | 
				
			||||||
    @State private var loadError: String?
 | 
					    @State private var loadError: String?
 | 
				
			||||||
 | 
					    @State private var showAddBlockedUserAlert = false
 | 
				
			||||||
 | 
					    @State private var pendingUnblock: BlockedUser?
 | 
				
			||||||
 | 
					    @State private var showUnblockConfirmation = false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private let blockedUsersService = BlockedUsersService()
 | 
					    private let blockedUsersService = BlockedUsersService()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -37,26 +40,57 @@ struct BlockedUsersView: View {
 | 
				
			|||||||
                                }
 | 
					                                }
 | 
				
			||||||
                            }
 | 
					                            }
 | 
				
			||||||
                            Spacer()
 | 
					                            Spacer()
 | 
				
			||||||
                            Button(role: .destructive) {
 | 
					 | 
				
			||||||
                                unblock(user)
 | 
					 | 
				
			||||||
                            } label: {
 | 
					 | 
				
			||||||
                                Text(NSLocalizedString("Разблокировать", comment: ""))
 | 
					 | 
				
			||||||
                            }
 | 
					 | 
				
			||||||
                            .buttonStyle(.borderless)
 | 
					 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                        .padding(.vertical, 4)
 | 
					                        .padding(.vertical, 4)
 | 
				
			||||||
 | 
					                        .swipeActions(edge: .trailing) {
 | 
				
			||||||
 | 
					                            Button(role: .destructive) {
 | 
				
			||||||
 | 
					                                pendingUnblock = user
 | 
				
			||||||
 | 
					                                showUnblockConfirmation = true
 | 
				
			||||||
 | 
					                            } label: {
 | 
				
			||||||
 | 
					                                Label(NSLocalizedString("Разблокировать", comment: ""), systemImage: "person.crop.circle.badge.xmark")
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        .navigationTitle(NSLocalizedString("Заблокированные", comment: ""))
 | 
					        .navigationTitle(NSLocalizedString("Заблокированные", comment: ""))
 | 
				
			||||||
        .navigationBarTitleDisplayMode(.inline)
 | 
					        .navigationBarTitleDisplayMode(.inline)
 | 
				
			||||||
 | 
					        .toolbar {
 | 
				
			||||||
 | 
					            ToolbarItem(placement: .navigationBarTrailing) {
 | 
				
			||||||
 | 
					                Button {
 | 
				
			||||||
 | 
					                    showAddBlockedUserAlert = true
 | 
				
			||||||
 | 
					                } label: {
 | 
				
			||||||
 | 
					                    Image(systemName: "plus")
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
        .task {
 | 
					        .task {
 | 
				
			||||||
            await loadBlockedUsers()
 | 
					            await loadBlockedUsers()
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        .refreshable {
 | 
					        .refreshable {
 | 
				
			||||||
            await loadBlockedUsers()
 | 
					            await loadBlockedUsers()
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        .alert(NSLocalizedString("Скоро", comment: "Add blocked user placeholder title"), isPresented: $showAddBlockedUserAlert) {
 | 
				
			||||||
 | 
					            Button(NSLocalizedString("OK", comment: "Common OK"), role: .cancel) {}
 | 
				
			||||||
 | 
					        } message: {
 | 
				
			||||||
 | 
					            Text(NSLocalizedString("Добавление новых блокировок появится позже.", comment: "Add blocked user placeholder message"))
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        .confirmationDialog(
 | 
				
			||||||
 | 
					            NSLocalizedString("Удалить из заблокированных?", comment: "Unblock confirmation title"),
 | 
				
			||||||
 | 
					            isPresented: $showUnblockConfirmation,
 | 
				
			||||||
 | 
					            presenting: pendingUnblock
 | 
				
			||||||
 | 
					        ) { user in
 | 
				
			||||||
 | 
					            Button(NSLocalizedString("Разблокировать", comment: "Unblock confirmation action"), role: .destructive) {
 | 
				
			||||||
 | 
					                unblock(user)
 | 
				
			||||||
 | 
					                pendingUnblock = nil
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            Button(NSLocalizedString("Отмена", comment: "Common cancel"), role: .cancel) {
 | 
				
			||||||
 | 
					                pendingUnblock = nil
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        } message: { user in
 | 
				
			||||||
 | 
					            Text(String(format: NSLocalizedString("Пользователь \"%1$@\" будет удалён из списка заблокированных.", comment: "Unblock confirmation message"), user.displayName))
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private var emptyState: some View {
 | 
					    private var emptyState: some View {
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user