Skip to content

Commit 739d5b2

Browse files
authored
refactor: cache filtered sessions and speakers between recompositions (#369)
1 parent d5bba3c commit 739d5b2

File tree

2 files changed

+13
-6
lines changed

2 files changed

+13
-6
lines changed

shared/ui/src/commonMain/kotlin/com/androidmakers/ui/agenda/AgendaPager.kt

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import androidx.compose.material3.Text
1212
import androidx.compose.material3.pulltorefresh.PullToRefreshBox
1313
import androidx.compose.material3.pulltorefresh.rememberPullToRefreshState
1414
import androidx.compose.runtime.Composable
15+
import androidx.compose.runtime.remember
1516
import androidx.compose.runtime.rememberCoroutineScope
1617
import androidx.compose.ui.Modifier
1718
import com.androidmakers.ui.common.EmptyLayout
@@ -68,18 +69,23 @@ fun AgendaPager(
6869
state = pagerState,
6970
) { page ->
7071
val pullRefreshState = rememberPullToRefreshState()
72+
val day = days[page]
73+
val sessionsPerStartTime = remember(day, sessionFilters) {
74+
day.sessions
75+
.filter(sessionFilters)
76+
.groupBy { it.startDate.formatShortTime() }
77+
}
7178

7279
PullToRefreshBox(
7380
isRefreshing = isRefreshing,
7481
onRefresh = onRefresh,
7582
state = pullRefreshState
7683
) {
77-
val sessions = days[page].sessions.filter(sessionFilters)
78-
if (sessions.isEmpty()) {
84+
if (sessionsPerStartTime.isEmpty()) {
7985
EmptyLayout()
8086
} else {
8187
AgendaColumn(
82-
sessionsPerStartTime = sessions.groupBy { it.startDate.formatShortTime() },
88+
sessionsPerStartTime = sessionsPerStartTime,
8389
onSessionClick = onSessionClick,
8490
onApplyForAppClinicClick = onApplyForAppClinicClick,
8591
onSessionBookmark = onSessionBookmark

shared/ui/src/commonMain/kotlin/com/androidmakers/ui/speakers/SpeakerListScreen.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -69,12 +69,13 @@ fun SpeakerScreen(
6969
}
7070

7171
is Lce.Content -> {
72-
7372
var text by rememberSaveable { mutableStateOf("") }
7473
var expanded by rememberSaveable { mutableStateOf(false) }
75-
val content = (state as Lce.Content<SpeakersUiState>).content
7674

77-
val filteredSpeakers = content.speakers.filter { it.name?.contains(text, ignoreCase = true) == true }
75+
val speakers = (state as Lce.Content<SpeakersUiState>).content.speakers
76+
val filteredSpeakers = remember(speakers, text) {
77+
speakers.filter { it.name?.contains(text, ignoreCase = true) == true }
78+
}
7879

7980
var searchHeight by remember { mutableStateOf(56.dp) }
8081

0 commit comments

Comments
 (0)