diff --git a/ElementX/Sources/Screens/HomeScreen/HomeScreenViewModel.swift b/ElementX/Sources/Screens/HomeScreen/HomeScreenViewModel.swift index 11bd0d3aad..9840f249f6 100644 --- a/ElementX/Sources/Screens/HomeScreen/HomeScreenViewModel.swift +++ b/ElementX/Sources/Screens/HomeScreen/HomeScreenViewModel.swift @@ -79,13 +79,16 @@ class HomeScreenViewModel: HomeScreenViewModelType, HomeScreenViewModelProtocol return } - roomSummaryProvider.statePublisher + // Combine together the state and the room list to correctly compute the view state if + // data is present in the room list "cold cache" + Publishers.CombineLatest(roomSummaryProvider.statePublisher, + roomSummaryProvider.roomListPublisher) .receive(on: DispatchQueue.main) - .sink { [weak self] state in + .sink { [weak self] state, rooms in guard let self else { return } - let isLoadingData = !state.isLoaded - let hasNoRooms = (state.isLoaded && state.totalNumberOfRooms == 0) + let isLoadingData = !state.isLoaded && rooms.isEmpty + let hasNoRooms = (state.isLoaded && state.totalNumberOfRooms == 0 && rooms.isEmpty) var roomListMode = self.state.roomListMode if isLoadingData { diff --git a/ElementX/Sources/Services/Room/RoomSummary/RoomSummaryProvider.swift b/ElementX/Sources/Services/Room/RoomSummary/RoomSummaryProvider.swift index 1984bf8894..cb10e102d8 100644 --- a/ElementX/Sources/Services/Room/RoomSummary/RoomSummaryProvider.swift +++ b/ElementX/Sources/Services/Room/RoomSummary/RoomSummaryProvider.swift @@ -85,6 +85,9 @@ class RoomSummaryProvider: RoomSummaryProviderProtocol { buildSummaryForRoomListEntry(roomListEntry) } + // Manually call it here as the didSet doesn't work from constructors + roomListSubject.send(rooms) + let stateUpdatesSubscriptionResult = try roomList.loadingState(listener: RoomListStateObserver { [weak self] state in guard let self else { return } MXLog.info("\(name): Received state update: \(state)")