diff --git a/connector/composeApp/src/desktopMain/kotlin/tab/procedure/ListProcedures.kt b/connector/composeApp/src/desktopMain/kotlin/tab/procedure/ListProcedures.kt index 6a3cce6..4d1a87e 100644 --- a/connector/composeApp/src/desktopMain/kotlin/tab/procedure/ListProcedures.kt +++ b/connector/composeApp/src/desktopMain/kotlin/tab/procedure/ListProcedures.kt @@ -20,6 +20,7 @@ import cafe.adriel.voyager.core.screen.Screen import cafe.adriel.voyager.koin.getScreenModel import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.currentOrThrow +import cafe.adriel.voyager.navigator.tab.LocalTabNavigator import connector.composeapp.generated.resources.Res import connector.composeapp.generated.resources.expand_more_24px 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.koin.compose.koinInject import tab.LoadingScreen +import tab.test.SimulatorTest class ListProcedures ( private val procedures: List @@ -129,6 +131,8 @@ class ListProcedures ( expanded: Boolean, onDismissRequest: () -> Unit ) { + val tabNavigator = LocalTabNavigator.current + DropdownMenu( expanded = expanded, onDismissRequest = onDismissRequest, @@ -146,7 +150,9 @@ class ListProcedures ( DropdownMenuItem( text = { Text("Run Test") }, - onClick = { /* TODO add logic */ }, + onClick = { + tabNavigator.current = SimulatorTest + }, leadingIcon = { Icon(Icons.Outlined.PlayArrow, "Run Procedure Tests") }, diff --git a/connector/composeApp/src/desktopMain/kotlin/tab/test/RunTest.kt b/connector/composeApp/src/desktopMain/kotlin/tab/test/RunTest.kt new file mode 100644 index 0000000..9a94f6d --- /dev/null +++ b/connector/composeApp/src/desktopMain/kotlin/tab/test/RunTest.kt @@ -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...") + } +} diff --git a/connector/composeApp/src/desktopMain/kotlin/tab/test/SimulatorTest.kt b/connector/composeApp/src/desktopMain/kotlin/tab/test/SimulatorTest.kt index eb62063..f0bb2f4 100644 --- a/connector/composeApp/src/desktopMain/kotlin/tab/test/SimulatorTest.kt +++ b/connector/composeApp/src/desktopMain/kotlin/tab/test/SimulatorTest.kt @@ -1,10 +1,12 @@ package tab.test 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.remember -import cafe.adriel.voyager.navigator.tab.Tab -import cafe.adriel.voyager.navigator.tab.TabOptions +import androidx.compose.ui.Modifier +import androidx.compose.ui.text.style.TextOverflow +import cafe.adriel.voyager.navigator.tab.* import connector.composeapp.generated.resources.Res import connector.composeapp.generated.resources.check_box_24px import org.jetbrains.compose.resources.ExperimentalResourceApi @@ -29,10 +31,41 @@ object SimulatorTest : Tab { } } + @OptIn(ExperimentalMaterial3Api::class) @Composable override fun Content() { - Column { - Text("Simulator Test") + TabNavigator(RunTest) { + 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 } + ) } } diff --git a/connector/composeApp/src/desktopMain/kotlin/tab/test/TestResult.kt b/connector/composeApp/src/desktopMain/kotlin/tab/test/TestResult.kt new file mode 100644 index 0000000..55c1f5c --- /dev/null +++ b/connector/composeApp/src/desktopMain/kotlin/tab/test/TestResult.kt @@ -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") + } +}