Fix residence list not refreshing after add/edit on iOS and Android

Fixed issue where adding or editing a residence didn't update the residence
list, requiring manual refresh to see changes.

iOS Changes:
- ResidencesListView: Added onResidenceCreated callback to AddResidenceView
  sheet that triggers loadMyResidences(forceRefresh: true)
- AddResidenceView: Added onResidenceCreated callback parameter
- ResidenceFormView: Added onSuccess callback that fires before dismissing
  in both create and update modes

Android Changes:
- ResidencesScreen: Added shouldRefresh parameter with LaunchedEffect that
  watches for changes and reloads residences when flag is true
- App.kt (ResidencesRoute): Read "refresh" flag from saved state handle
- App.kt (AddResidenceRoute): Set "refresh" flag in previous back stack
  entry before navigating back on residence created
- App.kt (EditResidenceRoute): Set "refresh" flag before navigating back
  on residence updated

Both platforms now properly refresh the residence list when:
- A new residence is added
- An existing residence is edited
- User joins a residence with code (already working)

🤖 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-17 09:38:31 -08:00
parent d777880d2b
commit 52afefc17e
5 changed files with 32 additions and 3 deletions

View File

@@ -353,7 +353,10 @@ fun App(
)
}
composable<ResidencesRoute> {
composable<ResidencesRoute> { backStackEntry ->
// Get refresh flag from saved state (set when returning from add/edit)
val shouldRefresh = backStackEntry.savedStateHandle.get<Boolean>("refresh") ?: false
ResidencesScreen(
onResidenceClick = { residenceId ->
navController.navigate(ResidenceDetailRoute(residenceId))
@@ -364,6 +367,7 @@ fun App(
onNavigateToProfile = {
navController.navigate(ProfileRoute)
},
shouldRefresh = shouldRefresh,
onLogout = {
// Clear token and lookups on logout
TokenStorage.clearToken()
@@ -383,6 +387,8 @@ fun App(
navController.popBackStack()
},
onResidenceCreated = {
// Set refresh flag before navigating back
navController.previousBackStackEntry?.savedStateHandle?.set("refresh", true)
navController.popBackStack()
}
)
@@ -419,6 +425,8 @@ fun App(
navController.popBackStack()
},
onResidenceUpdated = {
// Set refresh flag before navigating back
navController.previousBackStackEntry?.savedStateHandle?.set("refresh", true)
navController.popBackStack()
}
)

View File

@@ -34,6 +34,7 @@ fun ResidencesScreen(
onAddResidence: () -> Unit,
onLogout: () -> Unit,
onNavigateToProfile: () -> Unit = {},
shouldRefresh: Boolean = false,
viewModel: ResidenceViewModel = viewModel { ResidenceViewModel() }
) {
val myResidencesState by viewModel.myResidencesState.collectAsState()
@@ -44,6 +45,13 @@ fun ResidencesScreen(
viewModel.loadMyResidences()
}
// Refresh when shouldRefresh flag changes
LaunchedEffect(shouldRefresh) {
if (shouldRefresh) {
viewModel.loadMyResidences(forceRefresh = true)
}
}
// Handle refresh state
LaunchedEffect(myResidencesState) {
if (myResidencesState !is ApiResult.Loading) {

View File

@@ -3,9 +3,14 @@ import ComposeApp
struct AddResidenceView: View {
@Binding var isPresented: Bool
var onResidenceCreated: (() -> Void)?
var body: some View {
ResidenceFormView(existingResidence: nil, isPresented: $isPresented)
ResidenceFormView(
existingResidence: nil,
isPresented: $isPresented,
onSuccess: onResidenceCreated
)
}
}

View File

@@ -86,7 +86,12 @@ struct ResidencesListView: View {
}
}
.sheet(isPresented: $showingAddResidence) {
AddResidenceView(isPresented: $showingAddResidence)
AddResidenceView(
isPresented: $showingAddResidence,
onResidenceCreated: {
viewModel.loadMyResidences(forceRefresh: true)
}
)
}
.sheet(isPresented: $showingJoinResidence) {
JoinResidenceView(onJoined: {

View File

@@ -4,6 +4,7 @@ import ComposeApp
struct ResidenceFormView: View {
let existingResidence: Residence?
@Binding var isPresented: Bool
var onSuccess: (() -> Void)?
@StateObject private var viewModel = ResidenceViewModel()
@FocusState private var focusedField: Field?
@@ -301,6 +302,7 @@ struct ResidenceFormView: View {
// Edit mode
viewModel.updateResidence(id: residence.id, request: request) { success in
if success {
onSuccess?()
isPresented = false
}
}
@@ -308,6 +310,7 @@ struct ResidenceFormView: View {
// Add mode
viewModel.createResidence(request: request) { success in
if success {
onSuccess?()
isPresented = false
}
}