Add residence deletion functionality for iOS and Android
- Add delete residence button to iOS ResidenceDetailView (primary owners only) - Add delete confirmation alert for iOS with destructive action - Implement deleteResidence API call in iOS with navigation on success - Add delete residence button to Android ResidenceDetailScreen (primary owners only) - Add delete confirmation dialog for Android with error-colored button - Add deleteResidenceState to ResidenceViewModel with StateFlow - Implement deleteResidence() and resetDeleteResidenceState() in ViewModel - Add LaunchedEffect to handle delete success (navigates back) and errors - Display delete button with red/error styling on both platforms - Restrict delete functionality to primary owners only 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -16,6 +16,9 @@ struct ResidenceDetailView: View {
|
||||
@State private var selectedTaskForComplete: TaskDetail?
|
||||
@State private var hasAppeared = false
|
||||
@State private var showReportAlert = false
|
||||
@State private var showDeleteConfirmation = false
|
||||
@State private var isDeleting = false
|
||||
@Environment(\.dismiss) private var dismiss
|
||||
|
||||
var body: some View {
|
||||
ZStack {
|
||||
@@ -134,6 +137,16 @@ struct ResidenceDetailView: View {
|
||||
}) {
|
||||
Image(systemName: "plus")
|
||||
}
|
||||
|
||||
// Delete button - only show for primary owners
|
||||
if let residence = viewModel.selectedResidence, residence.isPrimaryOwner {
|
||||
Button(action: {
|
||||
showDeleteConfirmation = true
|
||||
}) {
|
||||
Image(systemName: "trash")
|
||||
.foregroundStyle(.red)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.sheet(isPresented: $showAddTask) {
|
||||
@@ -189,6 +202,14 @@ struct ResidenceDetailView: View {
|
||||
} message: {
|
||||
Text(viewModel.reportMessage ?? "")
|
||||
}
|
||||
.alert("Delete Residence", isPresented: $showDeleteConfirmation) {
|
||||
Button("Cancel", role: .cancel) { }
|
||||
Button("Delete", role: .destructive) {
|
||||
deleteResidence()
|
||||
}
|
||||
} message: {
|
||||
Text("Are you sure you want to delete this residence? This action cannot be undone.")
|
||||
}
|
||||
.onAppear {
|
||||
loadResidenceData()
|
||||
}
|
||||
@@ -224,6 +245,29 @@ struct ResidenceDetailView: View {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private func deleteResidence() {
|
||||
guard let token = TokenStorage.shared.getToken() else { return }
|
||||
|
||||
isDeleting = true
|
||||
|
||||
let residenceApi = ResidenceApi(client: ApiClient_iosKt.createHttpClient())
|
||||
residenceApi.deleteResidence(token: token, id: residenceId) { result, error in
|
||||
DispatchQueue.main.async {
|
||||
self.isDeleting = false
|
||||
|
||||
if result is ApiResultSuccess<KotlinUnit> {
|
||||
// Navigate back to residence list
|
||||
self.dismiss()
|
||||
} else if let errorResult = result as? ApiResultError {
|
||||
// Show error message
|
||||
self.viewModel.errorMessage = errorResult.message
|
||||
} else if let error = error {
|
||||
self.viewModel.errorMessage = error.localizedDescription
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#Preview {
|
||||
|
||||
Reference in New Issue
Block a user