mirror of
https://github.com/Myzel394/NumberHub.git
synced 2025-06-26 04:00:37 +02:00
Top bar is not collapsable anymore and Unit groups are not sticky.
This commit is contained in:
parent
d10b3b04ac
commit
b7021b99bc
@ -18,8 +18,6 @@
|
|||||||
|
|
||||||
package com.sadellie.unitto.screens.second
|
package com.sadellie.unitto.screens.second
|
||||||
|
|
||||||
import androidx.compose.foundation.layout.Column
|
|
||||||
import androidx.compose.foundation.layout.ColumnScope
|
|
||||||
import androidx.compose.foundation.layout.padding
|
import androidx.compose.foundation.layout.padding
|
||||||
import androidx.compose.foundation.lazy.LazyColumn
|
import androidx.compose.foundation.lazy.LazyColumn
|
||||||
import androidx.compose.foundation.lazy.LazyListState
|
import androidx.compose.foundation.lazy.LazyListState
|
||||||
@ -30,6 +28,9 @@ import androidx.compose.material3.TopAppBarDefaults
|
|||||||
import androidx.compose.material3.rememberTopAppBarScrollState
|
import androidx.compose.material3.rememberTopAppBarScrollState
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.LaunchedEffect
|
import androidx.compose.runtime.LaunchedEffect
|
||||||
|
import androidx.compose.runtime.getValue
|
||||||
|
import androidx.compose.runtime.mutableStateOf
|
||||||
|
import androidx.compose.runtime.saveable.rememberSaveable
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.input.nestedscroll.nestedScroll
|
import androidx.compose.ui.input.nestedscroll.nestedScroll
|
||||||
import androidx.compose.ui.platform.LocalFocusManager
|
import androidx.compose.ui.platform.LocalFocusManager
|
||||||
@ -65,13 +66,17 @@ private fun BasicUnitListScreen(
|
|||||||
navigateUp: () -> Unit,
|
navigateUp: () -> Unit,
|
||||||
selectAction: (AbstractUnit) -> Unit,
|
selectAction: (AbstractUnit) -> Unit,
|
||||||
viewModel: SecondViewModel,
|
viewModel: SecondViewModel,
|
||||||
chipsRow: @Composable ColumnScope.(UnitGroup?, (UnitGroup) -> Unit, LazyListState) -> Unit = {_,_,_->},
|
chipsRow: @Composable (UnitGroup?, LazyListState) -> Unit = {_, _->},
|
||||||
unitsListItem: @Composable (AbstractUnit, (AbstractUnit) -> Unit) -> Unit,
|
unitsListItem: @Composable (AbstractUnit, (AbstractUnit) -> Unit) -> Unit,
|
||||||
noBrokenCurrencies: Boolean,
|
noBrokenCurrencies: Boolean,
|
||||||
title: String,
|
title: String,
|
||||||
) {
|
) {
|
||||||
val uiState = viewModel.uiState
|
val uiState = viewModel.uiState
|
||||||
val scrollBehavior = TopAppBarDefaults.enterAlwaysScrollBehavior(rememberTopAppBarScrollState())
|
val currentUnitGroup: UnitGroup? by rememberSaveable {
|
||||||
|
viewModel.setSelectedChip(currentUnit.group)
|
||||||
|
mutableStateOf(currentUnit.group)
|
||||||
|
}
|
||||||
|
val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarScrollState())
|
||||||
val focusManager = LocalFocusManager.current
|
val focusManager = LocalFocusManager.current
|
||||||
val chipsRowLazyListState = rememberLazyListState()
|
val chipsRowLazyListState = rememberLazyListState()
|
||||||
|
|
||||||
@ -96,31 +101,25 @@ private fun BasicUnitListScreen(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
) { paddingValues ->
|
) { paddingValues ->
|
||||||
Column(
|
LazyColumn(Modifier.padding(paddingValues)) {
|
||||||
Modifier.padding(paddingValues)
|
stickyHeader {
|
||||||
) {
|
chipsRow(
|
||||||
chipsRow(
|
viewModel.uiState.chosenUnitGroup,
|
||||||
uiState.chosenUnitGroup,
|
chipsRowLazyListState
|
||||||
{
|
)
|
||||||
viewModel.toggleSelectedChip(it)
|
}
|
||||||
viewModel.loadUnitsToShow(noBrokenCurrencies)
|
if (uiState.unitsToShow.isEmpty()) {
|
||||||
},
|
item { SearchPlaceholder() }
|
||||||
chipsRowLazyListState
|
return@LazyColumn
|
||||||
)
|
}
|
||||||
LazyColumn {
|
uiState.unitsToShow.forEach { (unitGroup, listOfUnits) ->
|
||||||
if (uiState.unitsToShow.isEmpty()) {
|
item { Header(text = stringResource(id = unitGroup.res)) }
|
||||||
item { SearchPlaceholder() }
|
items(items = listOfUnits, key = { it.unitId }) { unit ->
|
||||||
return@LazyColumn
|
unitsListItem(unit) {
|
||||||
}
|
selectAction(it)
|
||||||
uiState.unitsToShow.forEach { (unitGroup, listOfUnits) ->
|
viewModel.onSearchQueryChange("")
|
||||||
stickyHeader { Header(text = stringResource(id = unitGroup.res)) }
|
focusManager.clearFocus(true)
|
||||||
items(items = listOfUnits, key = { it.unitId }) { unit ->
|
navigateUp()
|
||||||
unitsListItem(unit) {
|
|
||||||
selectAction(it)
|
|
||||||
viewModel.onSearchQueryChange("")
|
|
||||||
focusManager.clearFocus(true)
|
|
||||||
navigateUp()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -129,12 +128,11 @@ private fun BasicUnitListScreen(
|
|||||||
|
|
||||||
// This block is called only once on initial composition
|
// This block is called only once on initial composition
|
||||||
LaunchedEffect(Unit) {
|
LaunchedEffect(Unit) {
|
||||||
viewModel.setSelectedChip(currentUnit.group)
|
|
||||||
/**
|
/**
|
||||||
* Telling viewModel that it needs to update the list
|
* Telling viewModel that it needs to update the list
|
||||||
*/
|
*/
|
||||||
viewModel.loadUnitsToShow(noBrokenCurrencies)
|
viewModel.loadUnitsToShow(noBrokenCurrencies)
|
||||||
currentUnit.group.let {
|
currentUnitGroup?.let {
|
||||||
chipsRowLazyListState.animateScrollToItem(ALL_UNIT_GROUPS.indexOf(it))
|
chipsRowLazyListState.animateScrollToItem(ALL_UNIT_GROUPS.indexOf(it))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -159,10 +157,13 @@ fun LeftSideScreen(
|
|||||||
navigateUp = navigateUp,
|
navigateUp = navigateUp,
|
||||||
selectAction = selectAction,
|
selectAction = selectAction,
|
||||||
viewModel = viewModel,
|
viewModel = viewModel,
|
||||||
chipsRow = { chosenUnitGroup, selectUnitGroupAction, lazyListState ->
|
chipsRow = { unitGroup, lazyListState ->
|
||||||
ChipsRow(
|
ChipsRow(
|
||||||
chosenUnitGroup = chosenUnitGroup,
|
chosenUnitGroup = unitGroup,
|
||||||
selectAction = selectUnitGroupAction,
|
selectAction = {
|
||||||
|
viewModel.toggleSelectedChip(it)
|
||||||
|
viewModel.loadUnitsToShow(true)
|
||||||
|
},
|
||||||
lazyListState = lazyListState
|
lazyListState = lazyListState
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
|
@ -64,6 +64,7 @@ fun ChipsRow(
|
|||||||
) {
|
) {
|
||||||
val chipShape = RoundedCornerShape(8.dp)
|
val chipShape = RoundedCornerShape(8.dp)
|
||||||
LazyRow(
|
LazyRow(
|
||||||
|
modifier = Modifier.background(MaterialTheme.colorScheme.background),
|
||||||
state = lazyListState,
|
state = lazyListState,
|
||||||
contentPadding = PaddingValues(8.dp),
|
contentPadding = PaddingValues(8.dp),
|
||||||
horizontalArrangement = Arrangement.spacedBy(8.dp)
|
horizontalArrangement = Arrangement.spacedBy(8.dp)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user