feat(connector): add tab navigation to SimulatorTest

This commit is contained in:
Anthony 2024-05-01 12:13:41 +01:00
parent 02ab50f9ad
commit 92b14d872f
4 changed files with 103 additions and 6 deletions

View File

@ -20,6 +20,7 @@ import cafe.adriel.voyager.core.screen.Screen
import cafe.adriel.voyager.koin.getScreenModel import cafe.adriel.voyager.koin.getScreenModel
import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.LocalNavigator
import cafe.adriel.voyager.navigator.currentOrThrow import cafe.adriel.voyager.navigator.currentOrThrow
import cafe.adriel.voyager.navigator.tab.LocalTabNavigator
import connector.composeapp.generated.resources.Res import connector.composeapp.generated.resources.Res
import connector.composeapp.generated.resources.expand_more_24px import connector.composeapp.generated.resources.expand_more_24px
import io.anthonyberg.connector.shared.entity.Procedure import io.anthonyberg.connector.shared.entity.Procedure
@ -27,6 +28,7 @@ import org.jetbrains.compose.resources.ExperimentalResourceApi
import org.jetbrains.compose.resources.painterResource import org.jetbrains.compose.resources.painterResource
import org.koin.compose.koinInject import org.koin.compose.koinInject
import tab.LoadingScreen import tab.LoadingScreen
import tab.test.SimulatorTest
class ListProcedures ( class ListProcedures (
private val procedures: List<Procedure> private val procedures: List<Procedure>
@ -129,6 +131,8 @@ class ListProcedures (
expanded: Boolean, expanded: Boolean,
onDismissRequest: () -> Unit onDismissRequest: () -> Unit
) { ) {
val tabNavigator = LocalTabNavigator.current
DropdownMenu( DropdownMenu(
expanded = expanded, expanded = expanded,
onDismissRequest = onDismissRequest, onDismissRequest = onDismissRequest,
@ -146,7 +150,9 @@ class ListProcedures (
DropdownMenuItem( DropdownMenuItem(
text = { Text("Run Test") }, text = { Text("Run Test") },
onClick = { /* TODO add logic */ }, onClick = {
tabNavigator.current = SimulatorTest
},
leadingIcon = { leadingIcon = {
Icon(Icons.Outlined.PlayArrow, "Run Procedure Tests") Icon(Icons.Outlined.PlayArrow, "Run Procedure Tests")
}, },

View File

@ -0,0 +1,29 @@
package tab.test
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import cafe.adriel.voyager.navigator.tab.Tab
import cafe.adriel.voyager.navigator.tab.TabOptions
object RunTest : Tab {
private fun readResolve(): Any = RunTest
override val options: TabOptions
@Composable
get() {
val title = "Run Test"
return remember {
TabOptions(
index = 0u,
title = title,
)
}
}
@Composable
override fun Content() {
Text("Simulator Running Tests...")
}
}

View File

@ -1,10 +1,12 @@
package tab.test package tab.test
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.material3.Text import androidx.compose.foundation.layout.padding
import androidx.compose.material3.*
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import cafe.adriel.voyager.navigator.tab.Tab import androidx.compose.ui.Modifier
import cafe.adriel.voyager.navigator.tab.TabOptions import androidx.compose.ui.text.style.TextOverflow
import cafe.adriel.voyager.navigator.tab.*
import connector.composeapp.generated.resources.Res import connector.composeapp.generated.resources.Res
import connector.composeapp.generated.resources.check_box_24px import connector.composeapp.generated.resources.check_box_24px
import org.jetbrains.compose.resources.ExperimentalResourceApi import org.jetbrains.compose.resources.ExperimentalResourceApi
@ -29,10 +31,41 @@ object SimulatorTest : Tab {
} }
} }
@OptIn(ExperimentalMaterial3Api::class)
@Composable @Composable
override fun Content() { override fun Content() {
Column { TabNavigator(RunTest) {
Text("Simulator Test") val tabNavigator = LocalTabNavigator.current
Scaffold(
topBar = {
SecondaryTabRow(selectedTabIndex = tabNavigator.current.options.index.toInt()) {
TabItem(RunTest)
TabItem(TestResult)
}
},
content = { innerPadding ->
Column(
modifier = Modifier.padding(innerPadding)
) {
CurrentTab()
}
}
)
} }
}
@Composable
private fun TabItem(
tab: Tab
) {
val tabNavigator = LocalTabNavigator.current
Tab(
text = { Text(text = tab.options.title, maxLines = 2, overflow = TextOverflow.Ellipsis) },
selected = tabNavigator.current == tab,
onClick = { tabNavigator.current = tab }
)
} }
} }

View File

@ -0,0 +1,29 @@
package tab.test
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import cafe.adriel.voyager.navigator.tab.Tab
import cafe.adriel.voyager.navigator.tab.TabOptions
object TestResult : Tab {
private fun readResolve(): Any = TestResult
override val options: TabOptions
@Composable
get() {
val title = "Test Result"
return remember {
TabOptions(
index = 1u,
title = title,
)
}
}
@Composable
override fun Content() {
Text("Test Results")
}
}