From 4ea5337886eec76ab28d6ac86c55016732bae0d4 Mon Sep 17 00:00:00 2001 From: ganfra Date: Wed, 4 Feb 2026 11:35:18 +0100 Subject: [PATCH] Ensure selected space filter gets update --- .../spacefilters/SpaceFiltersPresenter.kt | 21 +++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/spacefilters/SpaceFiltersPresenter.kt b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/spacefilters/SpaceFiltersPresenter.kt index 3e3e789de6..3b1eaddd30 100644 --- a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/spacefilters/SpaceFiltersPresenter.kt +++ b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/spacefilters/SpaceFiltersPresenter.kt @@ -10,12 +10,12 @@ package io.element.android.features.home.impl.spacefilters import androidx.compose.foundation.text.input.rememberTextFieldState import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import dev.zacsweers.metro.ContributesBinding -import dev.zacsweers.metro.Inject import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.di.SessionScope import io.element.android.libraries.featureflag.api.FeatureFlagService @@ -45,7 +45,6 @@ class SpaceFiltersPresenter( matrixClient.spaceService.spaceFiltersFlow.map { it.toImmutableList() } }.collectAsState(initial = persistentListOf()) - var selectionMode by remember { mutableStateOf(SelectionMode.Unselected) } fun handleUnselectedEvent(event: SpaceFiltersEvent.Unselected) { @@ -87,10 +86,20 @@ class SpaceFiltersPresenter( eventSink = ::handleSelectingEvent, ) } - is SelectionMode.Selected -> SpaceFiltersState.Selected( - selectedFilter = mode.filter, - eventSink = ::handleSelectedEvent, - ) + is SelectionMode.Selected -> { + // Keep in sync with the available filters if rooms are added/removed + val selectedFilter by remember { + derivedStateOf { + availableFilters + .firstOrNull { it.spaceRoom.roomId == mode.filter.spaceRoom.roomId } + ?: mode.filter + } + } + SpaceFiltersState.Selected( + selectedFilter = selectedFilter, + eventSink = ::handleSelectedEvent, + ) + } } } }