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:
@@ -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()
|
||||
}
|
||||
)
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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: {
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user