@@ -74,16 +74,51 @@ class ComposableNavigation(
7474 )
7575 )
7676
77+ private fun deselect (node : GraphNode ) {
78+ node.isActive.value = false
79+ for (child in node.children()) {
80+ deselect(child)
81+ }
82+ }
83+
84+ private fun deselectAllNodes () {
85+ deselect(root)
86+ }
87+
88+ private fun selectNode (
89+ currentNode : GraphNode ,
90+ targetNode : GraphNode ,
91+ pathToNode : List <GraphNode >
92+ ) {
93+ if (currentNode == targetNode) {
94+ currentNode.isActive.value = true
95+ pathToNode.forEach {
96+ it.isActive.value = true
97+ }
98+ return
99+ } else {
100+ for (child in currentNode.children()) {
101+ selectNode(child, targetNode, pathToNode + child)
102+ }
103+ }
104+
105+ }
106+
107+ private fun selectNode (nodeToSelect : GraphNode ) {
108+ deselectAllNodes()
109+ selectNode(root, nodeToSelect, emptyList())
110+ }
111+
77112 @SuppressWarnings(" LongMethod" )
78113 @Composable
79114 override fun View (modifier : Modifier ) {
80115 Page (
81116 modifier = modifier,
82117 title = " Composable" ,
83118 body = " With Appyx, navigation itself is composable, too.\n " +
84- " \n " +
85- " You can represent your app as a hierarchy of Nodes – " +
86- " each with their own UI, lifecycle and their own NavModels."
119+ " \n " +
120+ " You can represent your app as a hierarchy of Nodes – " +
121+ " each with their own UI, lifecycle and their own NavModels."
87122 ) {
88123 Column (
89124 modifier = Modifier
@@ -101,48 +136,27 @@ class ComposableNavigation(
101136 val intervalDelay: Long = 1600
102137
103138 while (true ) {
104- root.isActive.value = false
105- onboarding.isActive.value = false
106- o1.isActive.value = false
107- o2.isActive.value = false
108- o3.isActive.value = false
109- main.isActive.value = false
110- settings.isActive.value = false
111- profile.isActive.value = false
112- messages.isActive.value = false
113- people.isActive.value = false
114- chat.isActive.value = false
115139
116140 delay(startDelay)
117- root.isActive.value = true
118- onboarding.isActive.value = true
119- o1.isActive.value = true
141+ selectNode(o1)
142+
120143 delay(intervalDelay)
121- o1.isActive.value = false
122- o2.isActive.value = true
144+ selectNode(o2)
145+
123146 delay(intervalDelay)
124- o2.isActive.value = false
125- o3.isActive.value = true
147+ selectNode(o3)
126148
127149 delay(intervalDelay)
128- o3.isActive.value = false
129- onboarding.isActive.value = false
130- main.isActive.value = true
131- profile.isActive.value = true
150+ selectNode(profile)
132151
133152 delay(intervalDelay)
134- profile.isActive.value = false
135- messages.isActive.value = true
136- people.isActive.value = true
153+ selectNode(people)
137154
138155 delay(intervalDelay)
139- people.isActive.value = false
140- chat.isActive.value = true
156+ selectNode(chat)
141157
142158 delay(intervalDelay)
143- messages.isActive.value = false
144- chat.isActive.value = false
145- settings.isActive.value = true
159+ selectNode(settings)
146160
147161 delay(intervalDelay * 2 )
148162 }
0 commit comments