diff --git a/presentation/src/jvmMain/kotlin/ca/gosyer/ui/sources/browse/SourceScreen.kt b/presentation/src/jvmMain/kotlin/ca/gosyer/ui/sources/browse/SourceScreen.kt index f99ff0aa..31649c53 100644 --- a/presentation/src/jvmMain/kotlin/ca/gosyer/ui/sources/browse/SourceScreen.kt +++ b/presentation/src/jvmMain/kotlin/ca/gosyer/ui/sources/browse/SourceScreen.kt @@ -32,12 +32,18 @@ class SourceScreen(val source: Source) : Screen { val filterVM = viewModel { instantiate(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, diff --git a/presentation/src/jvmMain/kotlin/ca/gosyer/ui/sources/components/SourcesMenu.kt b/presentation/src/jvmMain/kotlin/ca/gosyer/ui/sources/components/SourcesMenu.kt index 96478772..c16f2a60 100644 --- a/presentation/src/jvmMain/kotlin/ca/gosyer/ui/sources/components/SourcesMenu.kt +++ b/presentation/src/jvmMain/kotlin/ca/gosyer/ui/sources/components/SourcesMenu.kt @@ -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() } } } diff --git a/presentation/src/jvmMain/kotlin/ca/gosyer/ui/sources/components/SourcesNavigator.kt b/presentation/src/jvmMain/kotlin/ca/gosyer/ui/sources/components/SourcesNavigator.kt index 07869dae..d4706901 100644 --- a/presentation/src/jvmMain/kotlin/ca/gosyer/ui/sources/components/SourcesNavigator.kt +++ b/presentation/src/jvmMain/kotlin/ca/gosyer/ui/sources/components/SourcesNavigator.kt @@ -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 = - staticCompositionLocalOf { error("SourcesNavigator not initialized") } +val LocalSourcesNavigator: ProvidableCompositionLocal = + 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) { diff --git a/presentation/src/jvmMain/kotlin/ca/gosyer/ui/sources/home/SourceHomeScreen.kt b/presentation/src/jvmMain/kotlin/ca/gosyer/ui/sources/home/SourceHomeScreen.kt index 589818dd..cb43a7cb 100644 --- a/presentation/src/jvmMain/kotlin/ca/gosyer/ui/sources/home/SourceHomeScreen.kt +++ b/presentation/src/jvmMain/kotlin/ca/gosyer/ui/sources/home/SourceHomeScreen.kt @@ -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() 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,