Skip to content

Commit 55e1475

Browse files
author
TEYSSANDIER Raphael
committed
feat: Add draft of menu
1 parent c3c838a commit 55e1475

File tree

3 files changed

+78
-1
lines changed

3 files changed

+78
-1
lines changed

FloconDesktop/composeApp/src/commonMain/kotlin/io/github/openflocon/flocondesktop/features/network/Navigation.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,19 @@ package io.github.openflocon.flocondesktop.features.network
33
import androidx.navigation3.runtime.EntryProviderBuilder
44
import io.github.openflocon.flocondesktop.features.network.list.view.NetworkScreen
55
import io.github.openflocon.navigation.FloconRoute
6+
import io.github.openflocon.navigation.scene.Menu
7+
import io.github.openflocon.navigation.scene.MenuScene
68
import kotlinx.serialization.Serializable
79

810
@Serializable
911
data object NetworkRoute : FloconRoute
1012

1113
fun EntryProviderBuilder<FloconRoute>.networkNavigation() {
12-
entry<NetworkRoute> {
14+
entry<NetworkRoute>(
15+
metadata = mapOf(
16+
MenuScene.MENU_KEY to Menu.HOME // TODO Change
17+
)
18+
) {
1319
NetworkScreen()
1420
}
1521
}

FloconDesktop/navigation/src/commonMain/kotlin/io/github/openflocon/navigation/FloconNavigation.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,17 @@ import androidx.compose.runtime.Composable
88
import androidx.compose.runtime.remember
99
import androidx.compose.ui.Modifier
1010
import androidx.navigation3.runtime.EntryProviderBuilder
11+
import androidx.navigation3.runtime.NavEntry
1112
import androidx.navigation3.runtime.entryProvider
1213
import androidx.navigation3.runtime.rememberSavedStateNavEntryDecorator
14+
import androidx.navigation3.scene.SinglePaneSceneStrategy
1315
import androidx.navigation3.scene.rememberSceneSetupNavEntryDecorator
1416
import androidx.navigation3.ui.NavDisplay
1517
import androidx.navigationevent.NavigationEventDispatcher
1618
import androidx.navigationevent.NavigationEventDispatcherOwner
1719
import androidx.navigationevent.compose.LocalNavigationEventDispatcherOwner
1820
import androidx.navigationevent.compose.NavigationEventDispatcherOwner
21+
import io.github.openflocon.navigation.scene.MenuSceneStrategy
1922

2023
@Composable
2124
fun FloconNavigation(
@@ -42,6 +45,8 @@ fun FloconNavigation(
4245
rememberSceneSetupNavEntryDecorator(),
4346
rememberSavedStateNavEntryDecorator()
4447
),
48+
sceneStrategy = MenuSceneStrategy()
49+
.then(SinglePaneSceneStrategy()),
4550
onBack = { navigationState.back(it) },
4651
entryProvider = entryProvider {
4752
entry<LoadingRoute> {
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package io.github.openflocon.navigation.scene
2+
3+
import androidx.compose.foundation.background
4+
import androidx.compose.foundation.layout.Box
5+
import androidx.compose.foundation.layout.Row
6+
import androidx.compose.foundation.layout.fillMaxHeight
7+
import androidx.compose.foundation.layout.width
8+
import androidx.compose.runtime.Composable
9+
import androidx.compose.ui.Modifier
10+
import androidx.compose.ui.graphics.Color
11+
import androidx.compose.ui.unit.dp
12+
import androidx.navigation3.runtime.NavEntry
13+
import androidx.navigation3.scene.Scene
14+
import androidx.navigation3.scene.SceneStrategy
15+
import io.github.openflocon.navigation.FloconRoute
16+
17+
enum class Menu {
18+
HOME,
19+
SETTINGS,
20+
ABOUT,
21+
}
22+
23+
class MenuScene(
24+
override val key: String,
25+
override val previousEntries: List<NavEntry<FloconRoute>>,
26+
private val entry: NavEntry<FloconRoute>
27+
) : Scene<FloconRoute> {
28+
override val entries: List<NavEntry<FloconRoute>> = listOf(entry)
29+
override val content: @Composable (() -> Unit) = {
30+
Row {
31+
Box(
32+
modifier = Modifier
33+
.width(300.dp)
34+
.fillMaxHeight()
35+
.background(Color.Blue)
36+
)
37+
entry.Content()
38+
}
39+
}
40+
41+
companion object {
42+
const val MENU_KEY = "menu"
43+
}
44+
}
45+
46+
class MenuSceneStrategy : SceneStrategy<FloconRoute> {
47+
48+
@Composable
49+
override fun calculateScene(
50+
entries: List<NavEntry<FloconRoute>>,
51+
onBack: (Int) -> Unit
52+
): Scene<FloconRoute>? {
53+
val lastEntry = entries.last()
54+
55+
return if (lastEntry.metadata.containsKey(MenuScene.MENU_KEY)) {
56+
MenuScene(
57+
key = MenuScene.MENU_KEY,
58+
previousEntries = entries.dropLast(1),
59+
entry = lastEntry
60+
)
61+
} else {
62+
null
63+
}
64+
}
65+
66+
}

0 commit comments

Comments
 (0)