Harden iOS app with audit fixes, UI consistency, and sheet race condition fixes
Applies verified fixes from deep audit (concurrency, performance, security, accessibility), standardizes CRUD form buttons to Add/Save pattern, removes .drawingGroup() that broke search bar TextFields, and converts vulnerable .sheet(isPresented:) + if-let patterns to safe presentation to prevent blank white modals. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -276,7 +276,7 @@ struct ContractorFormSheet: View {
|
||||
if viewModel.isCreating || viewModel.isUpdating {
|
||||
ProgressView()
|
||||
} else {
|
||||
Text(contractor == nil ? L10n.Contractors.addButton : L10n.Common.save)
|
||||
Text(contractor == nil ? L10n.Common.add : L10n.Common.save)
|
||||
.bold()
|
||||
}
|
||||
}
|
||||
@@ -297,6 +297,12 @@ struct ContractorFormSheet: View {
|
||||
residenceViewModel.loadMyResidences()
|
||||
loadContractorData()
|
||||
}
|
||||
.onChange(of: residenceViewModel.selectedResidence?.id) { _, _ in
|
||||
if let residence = residenceViewModel.selectedResidence,
|
||||
residence.id == selectedResidenceId {
|
||||
selectedResidenceName = residence.name
|
||||
}
|
||||
}
|
||||
.handleErrors(
|
||||
error: viewModel.errorMessage,
|
||||
onRetry: { saveContractor() }
|
||||
@@ -440,11 +446,7 @@ struct ContractorFormSheet: View {
|
||||
if let residenceId = contractor.residenceId {
|
||||
selectedResidenceId = residenceId.int32Value
|
||||
if let selectedResidenceId {
|
||||
ComposeApp.ResidenceViewModel().getResidence(id: selectedResidenceId, onResult: { result in
|
||||
if let success = result as? ApiResultSuccess<ResidenceResponse> {
|
||||
self.selectedResidenceName = success.data?.name
|
||||
}
|
||||
})
|
||||
residenceViewModel.getResidence(id: selectedResidenceId)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user