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:
Trey t
2025-11-10 10:42:37 -06:00
parent 872a7df86f
commit 29b4c99f08
3 changed files with 121 additions and 0 deletions

View File

@@ -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 {