Ensure selected space filter gets update

This commit is contained in:
ganfra 2026-02-04 11:35:18 +01:00
parent 53e82c0116
commit 4ea5337886

View file

@ -10,12 +10,12 @@ package io.element.android.features.home.impl.spacefilters
import androidx.compose.foundation.text.input.rememberTextFieldState import androidx.compose.foundation.text.input.rememberTextFieldState
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.derivedStateOf
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue import androidx.compose.runtime.setValue
import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.ContributesBinding
import dev.zacsweers.metro.Inject
import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.architecture.Presenter
import io.element.android.libraries.di.SessionScope import io.element.android.libraries.di.SessionScope
import io.element.android.libraries.featureflag.api.FeatureFlagService import io.element.android.libraries.featureflag.api.FeatureFlagService
@ -45,7 +45,6 @@ class SpaceFiltersPresenter(
matrixClient.spaceService.spaceFiltersFlow.map { it.toImmutableList() } matrixClient.spaceService.spaceFiltersFlow.map { it.toImmutableList() }
}.collectAsState(initial = persistentListOf()) }.collectAsState(initial = persistentListOf())
var selectionMode by remember { mutableStateOf<SelectionMode>(SelectionMode.Unselected) } var selectionMode by remember { mutableStateOf<SelectionMode>(SelectionMode.Unselected) }
fun handleUnselectedEvent(event: SpaceFiltersEvent.Unselected) { fun handleUnselectedEvent(event: SpaceFiltersEvent.Unselected) {
@ -87,10 +86,20 @@ class SpaceFiltersPresenter(
eventSink = ::handleSelectingEvent, eventSink = ::handleSelectingEvent,
) )
} }
is SelectionMode.Selected -> SpaceFiltersState.Selected( is SelectionMode.Selected -> {
selectedFilter = mode.filter, // Keep in sync with the available filters if rooms are added/removed
eventSink = ::handleSelectedEvent, val selectedFilter by remember {
) derivedStateOf {
availableFilters
.firstOrNull { it.spaceRoom.roomId == mode.filter.spaceRoom.roomId }
?: mode.filter
}
}
SpaceFiltersState.Selected(
selectedFilter = selectedFilter,
eventSink = ::handleSelectedEvent,
)
}
} }
} }
} }