Skip to content
Snippets Groups Projects
Commit d6c57e99 authored by Jonas Broeckmann's avatar Jonas Broeckmann
Browse files

Fix stuck indicator

parent 85e3a8f8
No related branches found
No related tags found
No related merge requests found
......@@ -237,72 +237,82 @@ class OverviewContent(provider: ScreenModelProvider<OverviewScreenModel>) : AppS
fun Overview(
model: OverviewScreenModel,
modifier: Modifier = Modifier
) = PullToRefreshBox(
isRefreshing = false,
onRefresh = { model.refreshMonth(model.currentMonth) },
modifier.fillMaxSize()
) {
LaunchedEffect(Unit) {
model.keepMonthDataUpToDate()
}
Column {
MonthSelection(
model,
Modifier
.align(Alignment.CenterHorizontally)
.padding(horizontal = 16.dp, vertical = 8.dp)
)
when (val data = model.dataForMonthState(model.currentMonth).value) {
is RichData.Loading -> BoxCenter(Modifier.fillMaxSize()) {
CircularProgressIndicator(data.progress)
}
is RichData.Data -> Column {
synchronizePagerState(
pagerState = model.pagerState,
property = model::currentMonth
)
HorizontalKeyedPager(state = model.pagerState) { key ->
BoxCenter(Modifier.fillMaxWidth()) {
val pagerData = model.dataForMonthState(key).dataOrNull
if (pagerData != null) CalendarForMonth(
pagerData,
onClick = model::onClickDate,
Modifier
.padding(horizontal = 32.dp)
.padding(bottom = 8.dp)
)
// Bad fix because "isRefreshing = false" results in indicator not disappearing
var isRefreshingQuickFix by remember { mutableStateOf(false) }
PullToRefreshBox(
isRefreshing = isRefreshingQuickFix.also { isRefreshingQuickFix = false },
onRefresh = {
isRefreshingQuickFix = true
model.refreshMonth(model.currentMonth)
},
modifier.fillMaxSize()
) {
LaunchedEffect(Unit) {
model.keepMonthDataUpToDate()
}
Column {
MonthSelection(
model,
Modifier
.align(Alignment.CenterHorizontally)
.padding(horizontal = 16.dp, vertical = 8.dp)
)
when (val data = model.dataForMonthState(model.currentMonth).value) {
is RichData.Loading -> BoxCenter(Modifier.fillMaxSize()) {
CircularProgressIndicator(data.progress)
}
is RichData.Data -> Column {
synchronizePagerState(
pagerState = model.pagerState,
property = model::currentMonth
)
HorizontalKeyedPager(state = model.pagerState) { key ->
BoxCenter(Modifier.fillMaxWidth()) {
val pagerData = model.dataForMonthState(key).dataOrNull
if (pagerData != null) CalendarForMonth(
pagerData,
onClick = model::onClickDate,
Modifier
.padding(horizontal = 32.dp)
.padding(bottom = 8.dp)
)
}
}
HorizontalDivider()
val scrollState = rememberScrollState()
MonthContent(
model,
Modifier
.weight(1f)
.verticalScroll(scrollState)
)
LaunchedEffect(model.currentMonth) {
scrollState.animateScrollTo(0)
}
}
HorizontalDivider()
val scrollState = rememberScrollState()
MonthContent(
model,
Modifier
.weight(1f)
.verticalScroll(scrollState)
is RichData.Error -> FailureRetryScreen(
message = "Failed to fetch data",
Modifier.fillMaxSize(),
exceptions = data.exceptions,
onRetry = { model.refreshMonth(model.currentMonth) }
)
LaunchedEffect(model.currentMonth) {
scrollState.animateScrollTo(0)
}
else -> {}
}
is RichData.Error -> FailureRetryScreen(
message = "Failed to fetch data",
Modifier.fillMaxSize(),
exceptions = data.exceptions,
onRetry = { model.refreshMonth(model.currentMonth) }
)
else -> { }
}
}
model.enterWorkingHoursState?.let { subVM ->
val sheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true)
ModalBottomSheet(
onDismissRequest = { model.enterWorkingHoursState = null },
sheetState = sheetState
) {
EnterWorkingHoursForm(subVM)
if (model.enterDone) LaunchedEffect(Unit) {
launch { sheetState.hide() }.invokeOnCompletion { model.enterWorkingHoursState = null }
model.enterWorkingHoursState?.let { subVM ->
val sheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true)
ModalBottomSheet(
onDismissRequest = { model.enterWorkingHoursState = null },
sheetState = sheetState
) {
EnterWorkingHoursForm(subVM)
if (model.enterDone) LaunchedEffect(Unit) {
launch { sheetState.hide() }.invokeOnCompletion { model.enterWorkingHoursState = null }
}
}
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment