diff --git a/composeApp/src/commonMain/kotlin/com/example/mycrib/App.kt b/composeApp/src/commonMain/kotlin/com/example/mycrib/App.kt index 01bd58c..97c46ab 100644 --- a/composeApp/src/commonMain/kotlin/com/example/mycrib/App.kt +++ b/composeApp/src/commonMain/kotlin/com/example/mycrib/App.kt @@ -353,7 +353,10 @@ fun App( ) } - composable { + composable { backStackEntry -> + // Get refresh flag from saved state (set when returning from add/edit) + val shouldRefresh = backStackEntry.savedStateHandle.get("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() } ) diff --git a/composeApp/src/commonMain/kotlin/com/example/mycrib/ui/screens/ResidencesScreen.kt b/composeApp/src/commonMain/kotlin/com/example/mycrib/ui/screens/ResidencesScreen.kt index 87ce7ff..f79a435 100644 --- a/composeApp/src/commonMain/kotlin/com/example/mycrib/ui/screens/ResidencesScreen.kt +++ b/composeApp/src/commonMain/kotlin/com/example/mycrib/ui/screens/ResidencesScreen.kt @@ -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) { diff --git a/iosApp/iosApp/AddResidenceView.swift b/iosApp/iosApp/AddResidenceView.swift index ee09cf4..5fd642f 100644 --- a/iosApp/iosApp/AddResidenceView.swift +++ b/iosApp/iosApp/AddResidenceView.swift @@ -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 + ) } } diff --git a/iosApp/iosApp/Residence/ResidencesListView.swift b/iosApp/iosApp/Residence/ResidencesListView.swift index dad6a7b..d980e60 100644 --- a/iosApp/iosApp/Residence/ResidencesListView.swift +++ b/iosApp/iosApp/Residence/ResidencesListView.swift @@ -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: { diff --git a/iosApp/iosApp/ResidenceFormView.swift b/iosApp/iosApp/ResidenceFormView.swift index fa67465..1dd614f 100644 --- a/iosApp/iosApp/ResidenceFormView.swift +++ b/iosApp/iosApp/ResidenceFormView.swift @@ -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 } }