chore(UI): Use remember getUiModel (#1605)
* use remember getUiModel * update headerIndexes to use remember for state management * Refactor LibraryUpdateErrorScreen to improve state management * Move header index calculation from the screen model to the presentation layer. * Optimize UI model and header index memoization using `remember(state)`. * Remove redundant `LaunchedEffect` and simplify scroll-to-index logic. * Refactor LibraryUpdateErrorScreen to enhance state management with derivedStateOf
This commit is contained in:
parent
bf9b663581
commit
d8eb71e004
3 changed files with 19 additions and 19 deletions
|
|
@ -25,7 +25,6 @@ import androidx.compose.material3.Surface
|
|||
import androidx.compose.material3.TopAppBarScrollBehavior
|
||||
import androidx.compose.material3.surfaceColorAtElevation
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.LaunchedEffect
|
||||
import androidx.compose.runtime.derivedStateOf
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableStateListOf
|
||||
|
|
@ -39,6 +38,7 @@ import androidx.compose.ui.platform.LocalHapticFeedback
|
|||
import androidx.compose.ui.unit.dp
|
||||
import eu.kanade.presentation.components.AppBar
|
||||
import eu.kanade.presentation.components.AppBarActions
|
||||
import eu.kanade.presentation.libraryUpdateError.components.LibraryUpdateErrorUiModel
|
||||
import eu.kanade.presentation.libraryUpdateError.components.libraryUpdateErrorUiItems
|
||||
import eu.kanade.presentation.manga.components.Button
|
||||
import eu.kanade.tachiyomi.ui.libraryUpdateError.LibraryUpdateErrorItem
|
||||
|
|
@ -75,31 +75,33 @@ fun LibraryUpdateErrorScreen(
|
|||
val scope = rememberCoroutineScope()
|
||||
val listState = rememberLazyListState()
|
||||
|
||||
val headerIndexes = remember { mutableStateOf<List<Int>>(emptyList()) }
|
||||
LaunchedEffect(state) {
|
||||
headerIndexes.value = state.getHeaderIndexes()
|
||||
val uiModels = remember(state) { state.getUiModel() }
|
||||
val headerIndexes = remember(state) {
|
||||
uiModels.withIndex()
|
||||
.filter { it.value is LibraryUpdateErrorUiModel.Header }
|
||||
.map { it.index }
|
||||
}
|
||||
|
||||
val enableScrollToTop by remember {
|
||||
val enableScrollToTop by remember(listState) {
|
||||
derivedStateOf {
|
||||
listState.firstVisibleItemIndex > 0
|
||||
}
|
||||
}
|
||||
|
||||
val enableScrollToBottom by remember {
|
||||
val enableScrollToBottom by remember(listState) {
|
||||
derivedStateOf {
|
||||
listState.canScrollForward
|
||||
}
|
||||
}
|
||||
|
||||
val enableScrollToPrevious by remember {
|
||||
val enableScrollToPrevious by remember(headerIndexes, listState) {
|
||||
derivedStateOf {
|
||||
headerIndexes.value.any { it < listState.firstVisibleItemIndex }
|
||||
headerIndexes.any { it < listState.firstVisibleItemIndex }
|
||||
}
|
||||
}
|
||||
val enableScrollToNext by remember {
|
||||
val enableScrollToNext by remember(headerIndexes, listState) {
|
||||
derivedStateOf {
|
||||
headerIndexes.value.any { it > listState.firstVisibleItemIndex }
|
||||
headerIndexes.any { it > listState.firstVisibleItemIndex }
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -141,7 +143,7 @@ fun LibraryUpdateErrorScreen(
|
|||
scrollToPrevious = {
|
||||
scope.launch {
|
||||
listState.scrollToItem(
|
||||
state.getHeaderIndexes()
|
||||
headerIndexes
|
||||
.filter { it < listState.firstVisibleItemIndex }
|
||||
.maxOrNull() ?: 0,
|
||||
)
|
||||
|
|
@ -150,7 +152,7 @@ fun LibraryUpdateErrorScreen(
|
|||
scrollToNext = {
|
||||
scope.launch {
|
||||
listState.scrollToItem(
|
||||
state.getHeaderIndexes()
|
||||
headerIndexes
|
||||
.filter { it > listState.firstVisibleItemIndex }
|
||||
.minOrNull() ?: 0,
|
||||
)
|
||||
|
|
@ -173,7 +175,7 @@ fun LibraryUpdateErrorScreen(
|
|||
state = listState,
|
||||
) {
|
||||
libraryUpdateErrorUiItems(
|
||||
uiModels = state.getUiModel(),
|
||||
uiModels = uiModels,
|
||||
selectionMode = state.selectionMode,
|
||||
onErrorSelected = onErrorSelected,
|
||||
onClick = onClick,
|
||||
|
|
|
|||
|
|
@ -112,6 +112,9 @@ fun UpdateScreen(
|
|||
else -> {
|
||||
val scope = rememberCoroutineScope()
|
||||
var isRefreshing by remember { mutableStateOf(false) }
|
||||
// KMK -->
|
||||
val uiModels = remember(state.items) { state.getUiModel() }
|
||||
// KMK <--
|
||||
|
||||
PullRefresh(
|
||||
refreshing = isRefreshing,
|
||||
|
|
@ -134,8 +137,8 @@ fun UpdateScreen(
|
|||
updatesLastUpdatedItem(lastUpdated)
|
||||
|
||||
updatesUiItems(
|
||||
uiModels = state.getUiModel(),
|
||||
// KMK -->
|
||||
uiModels = uiModels,
|
||||
expandedState = state.expandedState,
|
||||
collapseToggle = collapseToggle,
|
||||
usePanoramaCover = usePanoramaCover,
|
||||
|
|
|
|||
|
|
@ -189,11 +189,6 @@ data class LibraryUpdateErrorScreenState(
|
|||
}
|
||||
return uiModels
|
||||
}
|
||||
|
||||
fun getHeaderIndexes(): List<Int> = getUiModel()
|
||||
.withIndex()
|
||||
.filter { it.value is LibraryUpdateErrorUiModel.Header }
|
||||
.map { it.index }
|
||||
}
|
||||
|
||||
@Immutable
|
||||
|
|
|
|||
Loading…
Reference in a new issue