Dont use a advanced handler for sources with thin screens

This commit is contained in:
Syer10
2022-03-06 21:55:42 -05:00
parent 90aaa4f2c6
commit 9136d60dcc
4 changed files with 36 additions and 20 deletions

View File

@@ -32,12 +32,18 @@ class SourceScreen(val source: Source) : Screen {
val filterVM = viewModel {
instantiate<SourceFiltersViewModel>(SourceFiltersViewModel.Params(source.id))
}
val navigator = LocalNavigator.currentOrThrow
val sourcesNavigator = LocalSourcesNavigator.current
val navigator = LocalNavigator.currentOrThrow
SourceScreenContent(
source = source,
onMangaClick = { navigator push MangaScreen(it) },
onCloseSourceTabClick = sourcesNavigator::remove,
onCloseSourceTabClick = if (sourcesNavigator != null) {
{ sourcesNavigator.remove(it) }
} else {
{
navigator.pop()
}
},
onSourceSettingsClick = { navigator push SourceSettingsScreen(it) },
displayMode = sourceVM.displayMode.collectAsState().value,
gridColumns = sourceVM.gridColumns.collectAsState().value,

View File

@@ -58,18 +58,19 @@ fun SourcesMenu(
closeTab: (Source) -> Unit
) {
val homeScreen = remember { SourceHomeScreen() }
SourcesNavigator(
homeScreen,
removeSource = closeTab,
selectSource = selectTab
) { navigator ->
LaunchedEffect(selectedSourceTab) {
navigator.current = if (selectedSourceTab == null) {
homeScreen
} else SourceScreen(selectedSourceTab)
}
BoxWithConstraints {
if (maxWidth > 720.dp) {
BoxWithConstraints {
if (maxWidth > 720.dp) {
SourcesNavigator(
homeScreen,
removeSource = closeTab,
selectSource = selectTab
) { navigator ->
LaunchedEffect(selectedSourceTab) {
navigator.current = if (selectedSourceTab == null) {
homeScreen
} else SourceScreen(selectedSourceTab)
}
Row {
SourcesSideMenu(
sourceTabs = sourceTabs,
@@ -82,9 +83,9 @@ fun SourcesMenu(
CurrentSource()
}
} else {
CurrentSource()
}
} else {
homeScreen.Content()
}
}
}

View File

@@ -16,11 +16,12 @@ import ca.gosyer.data.models.Source
import ca.gosyer.ui.sources.browse.SourceScreen
import ca.gosyer.ui.sources.home.SourceHomeScreen
import cafe.adriel.voyager.navigator.Navigator
import cafe.adriel.voyager.navigator.currentOrThrow
typealias SourcesNavigatorContent = @Composable (sourcesNavigator: SourcesNavigator) -> Unit
val LocalSourcesNavigator: ProvidableCompositionLocal<SourcesNavigator> =
staticCompositionLocalOf { error("SourcesNavigator not initialized") }
val LocalSourcesNavigator: ProvidableCompositionLocal<SourcesNavigator?> =
staticCompositionLocalOf { null }
@Composable
fun SourcesNavigator(
@@ -66,7 +67,7 @@ class SourcesNavigator internal constructor(
@Composable
fun CurrentSource() {
val sourcesNavigator = LocalSourcesNavigator.current
val sourcesNavigator = LocalSourcesNavigator.currentOrThrow
val currentSource = sourcesNavigator.current
sourcesNavigator.stateHolder.SaveableStateProvider(currentSource.key) {

View File

@@ -8,12 +8,15 @@ package ca.gosyer.ui.sources.home
import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import ca.gosyer.ui.sources.browse.SourceScreen
import ca.gosyer.ui.sources.components.LocalSourcesNavigator
import ca.gosyer.ui.sources.home.components.SourceHomeScreenContent
import ca.gosyer.uicore.vm.viewModel
import cafe.adriel.voyager.core.screen.Screen
import cafe.adriel.voyager.core.screen.ScreenKey
import cafe.adriel.voyager.core.screen.uniqueScreenKey
import cafe.adriel.voyager.navigator.LocalNavigator
import cafe.adriel.voyager.navigator.currentOrThrow
class SourceHomeScreen : Screen {
@@ -23,8 +26,13 @@ class SourceHomeScreen : Screen {
override fun Content() {
val vm = viewModel<SourceHomeScreenViewModel>()
val sourcesNavigator = LocalSourcesNavigator.current
val navigator = LocalNavigator.currentOrThrow
SourceHomeScreenContent(
onAddSource = sourcesNavigator::select,
onAddSource = if (sourcesNavigator != null) {
sourcesNavigator::select
} else {
{ navigator push SourceScreen(it) }
},
isLoading = vm.isLoading.collectAsState().value,
sources = vm.sources.collectAsState().value,
languages = vm.languages.collectAsState().value,