From d8efe32b87610897b06564da9529c82c8b01b53b Mon Sep 17 00:00:00 2001 From: Anthony Berg Date: Thu, 25 Apr 2024 13:13:39 +0100 Subject: [PATCH] feat(connector): move actions to separate screen --- XPlaneConnect | 2 +- .../src/desktopMain/kotlin/InterfaceState.kt | 2 + .../kotlin/tab/procedure/Actions.kt | 81 +++++++++++++++++++ .../kotlin/tab/procedure/CreateProcedure.kt | 44 ---------- .../kotlin/tab/procedure/ListProcedures.kt | 13 ++- 5 files changed, 94 insertions(+), 48 deletions(-) create mode 100644 connector/composeApp/src/desktopMain/kotlin/tab/procedure/Actions.kt diff --git a/XPlaneConnect b/XPlaneConnect index cfed89f..9018e28 160000 --- a/XPlaneConnect +++ b/XPlaneConnect @@ -1 +1 @@ -Subproject commit cfed89f7d5435027e9046987416d22bdaf174c85 +Subproject commit 9018e2898f075dd6ec3922cbc15919b0e4740784 diff --git a/connector/composeApp/src/desktopMain/kotlin/InterfaceState.kt b/connector/composeApp/src/desktopMain/kotlin/InterfaceState.kt index 33d26fd..4e8d8e0 100644 --- a/connector/composeApp/src/desktopMain/kotlin/InterfaceState.kt +++ b/connector/composeApp/src/desktopMain/kotlin/InterfaceState.kt @@ -3,6 +3,8 @@ import org.koin.core.component.KoinComponent class InterfaceState : KoinComponent { var simConnection: Boolean = false var projectId: Int? = null + var procedureId: Int? = null + val projectSelected: Boolean get() = projectId != null diff --git a/connector/composeApp/src/desktopMain/kotlin/tab/procedure/Actions.kt b/connector/composeApp/src/desktopMain/kotlin/tab/procedure/Actions.kt new file mode 100644 index 0000000..f1c85d6 --- /dev/null +++ b/connector/composeApp/src/desktopMain/kotlin/tab/procedure/Actions.kt @@ -0,0 +1,81 @@ +package tab.procedure + +import InterfaceState +import androidx.compose.foundation.layout.* +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.automirrored.outlined.ArrowBack +import androidx.compose.material.icons.outlined.Add +import androidx.compose.material3.* +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import cafe.adriel.voyager.core.screen.Screen +import cafe.adriel.voyager.navigator.LocalNavigator +import cafe.adriel.voyager.navigator.currentOrThrow +import org.koin.compose.koinInject + +class Actions : Screen { + @Composable + override fun Content() { + val navigator = LocalNavigator.currentOrThrow + val viewModel = koinInject() + val columnPadding = 24.dp + + // Checks if a project has been selected before viewing contents + if (viewModel.procedureId == null) { + navigator.pop() + } + + Scaffold( + topBar = { + IconButton( + onClick = { + navigator.pop() + viewModel.procedureId = null + } + ) { + Icon(Icons.AutoMirrored.Outlined.ArrowBack, "Back Arrow") + } + }, + ) { + Column( + modifier = Modifier + .fillMaxHeight() + .fillMaxWidth() + .verticalScroll(rememberScrollState()) + .padding(top = columnPadding, bottom = columnPadding), + horizontalAlignment = Alignment.CenterHorizontally, + ) { + Column( + Modifier.fillMaxWidth(0.7F), + verticalArrangement = Arrangement.spacedBy(24.dp) + ) { + Text( + text = "Edit Actions", + style = MaterialTheme.typography.headlineSmall + ) + + Button( + contentPadding = ButtonDefaults.ButtonWithIconContentPadding, + onClick = { + // TODO make checks + navigator.pop() + viewModel.procedureId = null + } + ) { + Icon(Icons.Outlined.Add, "Create Procedure", modifier = Modifier.size(18.dp)) + Spacer(Modifier.size(ButtonDefaults.IconSpacing)) + Text( + "Create", + style = MaterialTheme.typography.labelLarge, + color = MaterialTheme.colorScheme.onPrimary + ) + } + } + } + } + } +} diff --git a/connector/composeApp/src/desktopMain/kotlin/tab/procedure/CreateProcedure.kt b/connector/composeApp/src/desktopMain/kotlin/tab/procedure/CreateProcedure.kt index b4aca02..97ca6c3 100644 --- a/connector/composeApp/src/desktopMain/kotlin/tab/procedure/CreateProcedure.kt +++ b/connector/composeApp/src/desktopMain/kotlin/tab/procedure/CreateProcedure.kt @@ -32,11 +32,6 @@ class CreateProcedure : Screen { var procedureName by remember { mutableStateOf("") } var procedureDescription by remember { mutableStateOf("") } - // Actions - val actionTypeOptions = listOf("Switch", "Button", "Lever") - var actionType by remember { mutableStateOf(procedureTypeOptions[0]) } - var actionTypeExpanded by remember { mutableStateOf(false) } - Scaffold( topBar = { @@ -114,44 +109,6 @@ class CreateProcedure : Screen { } } - HorizontalDivider() - - Text( - text = "Actions", - style = MaterialTheme.typography.headlineSmall - ) - - ExposedDropdownMenuBox( - expanded = actionTypeExpanded, - onExpandedChange = { actionTypeExpanded = it } - ) { - TextField( - modifier = Modifier.menuAnchor(), - value = actionType, - onValueChange = {}, - readOnly = true, - singleLine = true, - label = { Text("Type") }, - trailingIcon = { ExposedDropdownMenuDefaults.TrailingIcon(expanded = actionTypeExpanded) }, - colors = ExposedDropdownMenuDefaults.textFieldColors() - ) - ExposedDropdownMenu( - expanded = actionTypeExpanded, - onDismissRequest = { actionTypeExpanded = false }, - ) { - actionTypeOptions.forEach { option -> - DropdownMenuItem( - text = { Text(option, style = MaterialTheme.typography.bodyLarge) }, - onClick = { - actionType = option - actionTypeExpanded = false - }, - contentPadding = ExposedDropdownMenuDefaults.ItemContentPadding, - ) - } - } - } - Button( contentPadding = ButtonDefaults.ButtonWithIconContentPadding, onClick = { @@ -159,7 +116,6 @@ class CreateProcedure : Screen { procedureName.isNotBlank() and procedureType.isNotBlank() and procedureDescription.isNotBlank() - // TODO add checks for actions ) { screenModel.createProcedure( procedureName = procedureName, diff --git a/connector/composeApp/src/desktopMain/kotlin/tab/procedure/ListProcedures.kt b/connector/composeApp/src/desktopMain/kotlin/tab/procedure/ListProcedures.kt index 7250531..fb36fc6 100644 --- a/connector/composeApp/src/desktopMain/kotlin/tab/procedure/ListProcedures.kt +++ b/connector/composeApp/src/desktopMain/kotlin/tab/procedure/ListProcedures.kt @@ -1,5 +1,6 @@ package tab.procedure +import InterfaceState import androidx.compose.foundation.VerticalScrollbar import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Box @@ -19,8 +20,10 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import cafe.adriel.voyager.core.screen.Screen import cafe.adriel.voyager.navigator.LocalNavigator +import cafe.adriel.voyager.navigator.Navigator import cafe.adriel.voyager.navigator.currentOrThrow import io.anthonyberg.connector.shared.entity.Procedure +import org.koin.compose.koinInject class ListProcedures ( private val procedures: List @@ -28,6 +31,8 @@ class ListProcedures ( @Composable override fun Content() { val navigator = LocalNavigator.currentOrThrow + val viewModel = koinInject() + val state = rememberLazyListState(0) Scaffold ( @@ -50,7 +55,7 @@ class ListProcedures ( ) { LazyColumn(state = state) { items(procedures) { procedure -> - procedureItem(procedure) + procedureItem(procedure, viewModel, navigator) } } VerticalScrollbar( @@ -67,13 +72,15 @@ class ListProcedures ( } @Composable - private fun procedureItem(procedure: Procedure) { + private fun procedureItem(procedure: Procedure, viewModel: InterfaceState, navigator: Navigator) { ListItem( modifier = Modifier .clickable( enabled = true, onClick = { - // TODO add procedure editor + viewModel.procedureId = procedure.id + + navigator.push(Actions()) } ), overlineContent = { Text(procedure.type) },