57 lines
1.6 KiB
Kotlin
57 lines
1.6 KiB
Kotlin
package dev.beefers.vendetta.manager.utils
|
|
|
|
import androidx.annotation.StringRes
|
|
import androidx.compose.runtime.Composable
|
|
import androidx.compose.ui.graphics.vector.ImageVector
|
|
import androidx.compose.ui.graphics.vector.rememberVectorPainter
|
|
import androidx.compose.ui.res.stringResource
|
|
import cafe.adriel.voyager.core.screen.Screen
|
|
import cafe.adriel.voyager.navigator.Navigator
|
|
import cafe.adriel.voyager.navigator.tab.Tab
|
|
import cafe.adriel.voyager.navigator.tab.TabOptions
|
|
import com.google.accompanist.pager.ExperimentalPagerApi
|
|
import dev.beefers.vendetta.manager.ui.screen.home.HomeScreen
|
|
import dev.beefers.vendetta.manager.ui.screen.main.LocalPagerState
|
|
import dev.beefers.vendetta.manager.ui.screen.settings.SettingsScreen
|
|
|
|
enum class MainTab(val tab: ManagerTab) {
|
|
HOME(HomeScreen()),
|
|
SETTINGS(SettingsScreen())
|
|
}
|
|
|
|
@OptIn(ExperimentalPagerApi::class)
|
|
@Composable
|
|
fun Tab.TabOptions(
|
|
@StringRes title: Int,
|
|
selectedIcon: ImageVector,
|
|
unselectedIcon: ImageVector
|
|
): TabOptions {
|
|
val pagerState = LocalPagerState.current
|
|
val selected = MainTab.values()[pagerState.currentPage].tab == this
|
|
val selectedIconPainter = rememberVectorPainter(
|
|
image = selectedIcon
|
|
)
|
|
val unelectedIconPainter = rememberVectorPainter(
|
|
image = unselectedIcon
|
|
)
|
|
|
|
return TabOptions(
|
|
0u,
|
|
stringResource(title),
|
|
if (selected) selectedIconPainter else unelectedIconPainter
|
|
)
|
|
}
|
|
|
|
tailrec fun Navigator.navigate(screen: Screen) {
|
|
if (level == 0)
|
|
push(screen)
|
|
else
|
|
this.parent!!.navigate(screen)
|
|
}
|
|
|
|
interface ManagerTab : Tab {
|
|
|
|
@Composable
|
|
fun Actions()
|
|
|
|
} |