Merge branch 'develop' of https://github.com/finocd2la/TSUDesk into feature/news-ui

This commit is contained in:
Shcherbatykh Oleg
2026-02-27 11:03:07 +03:00
9 changed files with 74 additions and 78 deletions

View File

@@ -1,37 +1,32 @@
package ru.fincode.tsudesk.app.presentation.main package ru.fincode.tsudesk.presentation.main
import androidx.navigation.NavBackStackEntry import androidx.navigation.NavBackStackEntry
import androidx.navigation.NavDestination
import androidx.navigation.NavDestination.Companion.hasRoute
import ru.fincode.tsudesk.core.navigation.AppRoute import ru.fincode.tsudesk.core.navigation.AppRoute
import ru.fincode.tsudesk.core.navigation.TopLevelDestination import ru.fincode.tsudesk.core.navigation.TopLevelDestination
import ru.fincode.tsudesk.core.navigation.route
fun selectedTopLevel(entry: NavBackStackEntry?): TopLevelDestination { fun selectedTopLevel(entry: NavBackStackEntry?): TopLevelDestination {
if (entry == null) return TopLevelDestination.SCHEDULE val dest: NavDestination = entry?.destination ?: return TopLevelDestination.SCHEDULE
return runCatching { return when {
when (entry.route<AppRoute>()) { dest.hasRoute<AppRoute.Schedule>() || dest.hasRoute<AppRoute.ScheduleDetails>() ->
AppRoute.Schedule, TopLevelDestination.SCHEDULE
is AppRoute.ScheduleDetails -> TopLevelDestination.SCHEDULE
AppRoute.News, dest.hasRoute<AppRoute.News>() || dest.hasRoute<AppRoute.NewsDetails>() ->
is AppRoute.NewsDetails -> TopLevelDestination.NEWS TopLevelDestination.NEWS
AppRoute.Progress -> TopLevelDestination.PROGRESS dest.hasRoute<AppRoute.Progress>() ->
TopLevelDestination.PROGRESS
AppRoute.Settings -> TopLevelDestination.SETTINGS dest.hasRoute<AppRoute.Settings>() ->
TopLevelDestination.SETTINGS
else -> TopLevelDestination.SCHEDULE else -> TopLevelDestination.SCHEDULE
} }
}.getOrDefault(TopLevelDestination.SCHEDULE)
} }
fun shouldShowBottomBar(entry: NavBackStackEntry?): Boolean { fun shouldShowBottomBar(entry: NavBackStackEntry?): Boolean {
if (entry == null) return false val dest: NavDestination = entry?.destination ?: return false
return !dest.hasRoute<AppRoute.Splash>()
return runCatching {
when (entry.route<AppRoute>()) {
AppRoute.Splash -> false
else -> true
}
}.getOrDefault(true)
} }

View File

@@ -12,8 +12,6 @@ import androidx.navigation.compose.currentBackStackEntryAsState
import ru.fincode.core.ui.components.BottomBarItem import ru.fincode.core.ui.components.BottomBarItem
import ru.fincode.core.ui.components.TsudeskBottomBar import ru.fincode.core.ui.components.TsudeskBottomBar
import ru.fincode.tsudesk.R import ru.fincode.tsudesk.R
import ru.fincode.tsudesk.app.presentation.main.selectedTopLevel
import ru.fincode.tsudesk.app.presentation.main.shouldShowBottomBar
import ru.fincode.tsudesk.core.navigation.TopLevelDestination import ru.fincode.tsudesk.core.navigation.TopLevelDestination
import ru.fincode.tsudesk.core.navigation.navigateToTopLevel import ru.fincode.tsudesk.core.navigation.navigateToTopLevel

View File

@@ -2,7 +2,6 @@ package ru.fincode.tsudesk.presentation.main
import androidx.annotation.StringRes import androidx.annotation.StringRes
import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.graphics.painter.Painter
import androidx.compose.ui.graphics.vector.ImageVector
import ru.fincode.tsudesk.core.navigation.TopLevelDestination import ru.fincode.tsudesk.core.navigation.TopLevelDestination
data class TopLevelItem( data class TopLevelItem(

View File

@@ -1,19 +1,18 @@
package ru.fincode.tsudesk.presentation.navigation package ru.fincode.tsudesk.presentation.navigation
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.navigation.NavHostController import androidx.navigation.NavHostController
import androidx.navigation.compose.NavHost import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable import androidx.navigation.compose.composable
import androidx.navigation.compose.navigation import androidx.navigation.compose.rememberNavController
import ru.fincode.tsudesk.presentation.main.MainScaffold
import ru.fincode.tsudesk.core.navigation.AppRoute import ru.fincode.tsudesk.core.navigation.AppRoute
import ru.fincode.tsudesk.core.navigation.navigateRoute import ru.fincode.tsudesk.core.navigation.navigateRoute
import ru.fincode.tsudesk.presentation.main.MainScaffold
import ru.fincode.tsudesk.feature.schedule.presentation.screen.ScheduleRoute import ru.fincode.tsudesk.feature.schedule.presentation.screen.ScheduleRoute
import ru.fincode.tsudesk.feature.splash.presentation.screen.SplashRoute import ru.fincode.tsudesk.feature.splash.presentation.screen.SplashRoute
@Composable @Composable
fun AppNavHost( fun AppNavHost(
navController: NavHostController, navController: NavHostController,
@@ -33,51 +32,50 @@ fun AppNavHost(
) )
} }
navigation<AppRoute.Main>(startDestination = AppRoute.Schedule) { composable<AppRoute.Main> {
val tabsNavController = rememberNavController()
composable<AppRoute.Schedule> { MainScaffold(
MainScaffold(navController) { innerModifier -> navController = tabsNavController
ScheduleRoute( ) { innerModifier ->
modifier = innerModifier, MainTabsNavHost(
// onOpenDetails = { lessonId -> navController = tabsNavController,
// navController.navigateRoute(AppRoute.ScheduleDetails(lessonId)) modifier = innerModifier
// } )
)
}
} }
composable<AppRoute.News> {
MainScaffold(navController) { innerModifier: Modifier ->
// NewsScreen(
// modifier = innerModifier,
// onOpenDetails = { id ->
// navController.navigateRoute(AppRoute.NewsDetails(id))
// }
// )
}
}
composable<AppRoute.Progress> {
MainScaffold(navController) { innerModifier: Modifier ->
// ProgressScreen(modifier = innerModifier)
}
}
composable<AppRoute.Settings> {
MainScaffold(navController) { innerModifier ->
// SettingsRoute(modifier = innerModifier)
}
}
//
// composable<AppRoute.ScheduleDetails> { entry ->
// val args = entry.route<AppRoute.ScheduleDetails>()
// ScheduleDetailsScreen(lessonId = args.lessonId)
// }
//
// composable<AppRoute.NewsDetails> { entry ->
// val args = entry.route<AppRoute.NewsDetails>()
// NewsDetailsScreen(id = args.id)
// }
} }
} }
}
@Composable
private fun MainTabsNavHost(
navController: NavHostController,
modifier: Modifier = Modifier,
) {
NavHost(
navController = navController,
startDestination = AppRoute.Schedule,
modifier = modifier
) {
composable<AppRoute.Schedule> {
ScheduleRoute(modifier = Modifier.fillMaxSize())
}
composable<AppRoute.News> {
NewsRoute(modifier = Modifier.fillMaxSize())
}
composable<AppRoute.Progress> {
// ProgressRoute(modifier = Modifier)
}
composable<AppRoute.Settings> {
// SettingsRoute(modifier = Modifier)
}
}
}
@Composable
fun NewsRoute(modifier: Modifier) {
TODO("Not yet implemented")
} }

View File

@@ -13,7 +13,6 @@ import ru.fincode.tsudesk.core.database.api.schedule.ScheduleDao
LessonCacheEntity::class LessonCacheEntity::class
], ],
version = 2, version = 2,
exportSchema = true
) )
@TypeConverters(StringListConverter::class) @TypeConverters(StringListConverter::class)
abstract class AppDatabase : RoomDatabase() { abstract class AppDatabase : RoomDatabase() {

View File

@@ -1,18 +1,25 @@
package ru.fincode.tsudesk.feature.schedule.presentation.navigation package ru.fincode.tsudesk.feature.schedule.presentation.navigation
import androidx.compose.ui.Modifier
import androidx.navigation.NavGraphBuilder import androidx.navigation.NavGraphBuilder
import androidx.navigation.compose.composable import androidx.navigation.compose.composable
import ru.fincode.tsudesk.core.navigation.AppRoute import ru.fincode.tsudesk.core.navigation.AppRoute
import ru.fincode.tsudesk.feature.schedule.presentation.screen.ScheduleRoute import ru.fincode.tsudesk.feature.schedule.presentation.screen.ScheduleRoute
fun NavGraphBuilder.scheduleGraph( fun NavGraphBuilder.scheduleGraph(
modifier: Modifier = Modifier,
// на будущее:
// onOpenDetails: (lessonId: Long) -> Unit,
) { ) {
composable<AppRoute.Schedule> { composable<AppRoute.Schedule> {
ScheduleRoute() ScheduleRoute(
modifier = modifier,
// onOpenDetails = onOpenDetails
)
} }
// composable<AppRoute.ScheduleDetails> { backStackEntry -> // composable<AppRoute.ScheduleDetails> { entry ->
// val args = backStackEntry.toRoute<AppRoute.ScheduleDetails>() // val args = entry.toRoute<AppRoute.ScheduleDetails>()
// ScheduleDetailsRoute(lessonId = args.lessonId) // ScheduleDetailsRoute(lessonId = args.lessonId)
// } // }
} }

View File

@@ -1,4 +1,4 @@
package ru.fincode.tsudesk.feature.schedule.presentation package ru.fincode.tsudesk.feature.schedule.presentation.screen
sealed interface ScheduleAction { sealed interface ScheduleAction {