mirror of
https://github.com/smyalygames/checklist-tester.git
synced 2025-07-07 15:31:01 +02:00
feat(connector): add layout for action screen
This commit is contained in:
parent
ad70ec5add
commit
87350ff1ec
@ -0,0 +1,10 @@
|
|||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="24dp"
|
||||||
|
android:height="24dp"
|
||||||
|
android:viewportWidth="960"
|
||||||
|
android:viewportHeight="960"
|
||||||
|
android:tint="?attr/colorControlNormal">
|
||||||
|
<path
|
||||||
|
android:fillColor="#FFFFFF"
|
||||||
|
android:pathData="M840,280L840,760Q840,793 816.5,816.5Q793,840 760,840L200,840Q167,840 143.5,816.5Q120,793 120,760L120,200Q120,167 143.5,143.5Q167,120 200,120L680,120L840,280ZM760,314L646,200L200,200Q200,200 200,200Q200,200 200,200L200,760Q200,760 200,760Q200,760 200,760L760,760Q760,760 760,760Q760,760 760,760L760,314ZM480,720Q530,720 565,685Q600,650 600,600Q600,550 565,515Q530,480 480,480Q430,480 395,515Q360,550 360,600Q360,650 395,685Q430,720 480,720ZM240,400L600,400L600,240L240,240L240,400ZM200,314L200,760Q200,760 200,760Q200,760 200,760L200,760Q200,760 200,760Q200,760 200,760L200,200Q200,200 200,200Q200,200 200,200L200,200L200,314Z"/>
|
||||||
|
</vector>
|
@ -1,28 +1,42 @@
|
|||||||
package tab.procedure
|
package tab.procedure
|
||||||
|
|
||||||
import InterfaceState
|
import InterfaceState
|
||||||
|
import androidx.compose.foundation.VerticalScrollbar
|
||||||
import androidx.compose.foundation.layout.*
|
import androidx.compose.foundation.layout.*
|
||||||
import androidx.compose.foundation.rememberScrollState
|
import androidx.compose.foundation.lazy.LazyColumn
|
||||||
import androidx.compose.foundation.verticalScroll
|
import androidx.compose.foundation.lazy.items
|
||||||
|
import androidx.compose.foundation.lazy.rememberLazyListState
|
||||||
|
import androidx.compose.foundation.rememberScrollbarAdapter
|
||||||
import androidx.compose.material.icons.Icons
|
import androidx.compose.material.icons.Icons
|
||||||
import androidx.compose.material.icons.automirrored.outlined.ArrowBack
|
import androidx.compose.material.icons.automirrored.outlined.ArrowBack
|
||||||
import androidx.compose.material.icons.outlined.Add
|
import androidx.compose.material.icons.outlined.Add
|
||||||
import androidx.compose.material3.*
|
import androidx.compose.material3.*
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.runtime.mutableStateListOf
|
||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import cafe.adriel.voyager.core.screen.Screen
|
import cafe.adriel.voyager.core.screen.Screen
|
||||||
import cafe.adriel.voyager.navigator.LocalNavigator
|
import cafe.adriel.voyager.navigator.LocalNavigator
|
||||||
|
import cafe.adriel.voyager.navigator.Navigator
|
||||||
import cafe.adriel.voyager.navigator.currentOrThrow
|
import cafe.adriel.voyager.navigator.currentOrThrow
|
||||||
|
import connector.composeapp.generated.resources.Res
|
||||||
|
import connector.composeapp.generated.resources.save_24px
|
||||||
|
import org.jetbrains.compose.resources.ExperimentalResourceApi
|
||||||
|
import org.jetbrains.compose.resources.painterResource
|
||||||
import org.koin.compose.koinInject
|
import org.koin.compose.koinInject
|
||||||
|
|
||||||
class Actions : Screen {
|
class Actions : Screen {
|
||||||
|
private val columnPadding = 24.dp
|
||||||
|
private val itemPadding = 24.dp
|
||||||
|
|
||||||
|
private var inputs = mutableStateListOf(1)
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
override fun Content() {
|
override fun Content() {
|
||||||
val navigator = LocalNavigator.currentOrThrow
|
val navigator = LocalNavigator.currentOrThrow
|
||||||
val viewModel = koinInject<InterfaceState>()
|
val viewModel = koinInject<InterfaceState>()
|
||||||
val columnPadding = 24.dp
|
val state = rememberLazyListState(0)
|
||||||
|
|
||||||
// Checks if a project has been selected before viewing contents
|
// Checks if a project has been selected before viewing contents
|
||||||
if (viewModel.procedureId == null) {
|
if (viewModel.procedureId == null) {
|
||||||
@ -45,37 +59,106 @@ class Actions : Screen {
|
|||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.fillMaxHeight()
|
.fillMaxHeight()
|
||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
.verticalScroll(rememberScrollState())
|
|
||||||
.padding(top = columnPadding, bottom = columnPadding),
|
.padding(top = columnPadding, bottom = columnPadding),
|
||||||
horizontalAlignment = Alignment.CenterHorizontally,
|
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,
|
Box(
|
||||||
onClick = {
|
modifier = Modifier.fillMaxWidth(0.7F),
|
||||||
// TODO make checks
|
) {
|
||||||
navigator.pop()
|
LazyColumn(
|
||||||
viewModel.procedureId = null
|
state = state,
|
||||||
}
|
verticalArrangement = Arrangement.spacedBy(itemPadding)
|
||||||
) {
|
) {
|
||||||
Icon(Icons.Outlined.Add, "Create Procedure", modifier = Modifier.size(18.dp))
|
|
||||||
Spacer(Modifier.size(ButtonDefaults.IconSpacing))
|
item {
|
||||||
Text(
|
Header()
|
||||||
"Create",
|
}
|
||||||
style = MaterialTheme.typography.labelLarge,
|
|
||||||
color = MaterialTheme.colorScheme.onPrimary
|
items(
|
||||||
)
|
items = inputs,
|
||||||
|
key = { input -> input }
|
||||||
|
) { item ->
|
||||||
|
ActionItem(item)
|
||||||
|
}
|
||||||
|
|
||||||
|
item {
|
||||||
|
Footer(navigator, viewModel)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
VerticalScrollbar(
|
||||||
|
modifier = Modifier
|
||||||
|
.align(Alignment.CenterEnd)
|
||||||
|
.fillMaxHeight(),
|
||||||
|
adapter = rememberScrollbarAdapter(
|
||||||
|
scrollState = state,
|
||||||
|
),
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
private fun Header() {
|
||||||
|
Text(
|
||||||
|
text = "Edit Actions",
|
||||||
|
style = MaterialTheme.typography.headlineSmall
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
private fun ActionItem(item: Int) {
|
||||||
|
Column (
|
||||||
|
verticalArrangement = Arrangement.spacedBy(itemPadding)
|
||||||
|
) {
|
||||||
|
Text(text = "Action $item")
|
||||||
|
|
||||||
|
HorizontalDivider()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@OptIn(ExperimentalResourceApi::class)
|
||||||
|
@Composable
|
||||||
|
private fun Footer(navigator: Navigator, viewModel: InterfaceState) {
|
||||||
|
Row (
|
||||||
|
Modifier.fillMaxWidth(),
|
||||||
|
horizontalArrangement = Arrangement.SpaceBetween
|
||||||
|
) {
|
||||||
|
// Add Step
|
||||||
|
FilledTonalButton(
|
||||||
|
contentPadding = ButtonDefaults.ButtonWithIconContentPadding,
|
||||||
|
onClick = {
|
||||||
|
// TODO make this a proper data array for each item in checklist
|
||||||
|
inputs += inputs.last() + 1
|
||||||
|
}
|
||||||
|
) {
|
||||||
|
Icon(Icons.Outlined.Add, "Add", modifier = Modifier.size(18.dp))
|
||||||
|
Spacer(Modifier.size(ButtonDefaults.IconSpacing))
|
||||||
|
Text(
|
||||||
|
"Add Step",
|
||||||
|
style = MaterialTheme.typography.labelLarge,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Save
|
||||||
|
Button(
|
||||||
|
contentPadding = ButtonDefaults.ButtonWithIconContentPadding,
|
||||||
|
onClick = {
|
||||||
|
// TODO make checks
|
||||||
|
// TODO save to database
|
||||||
|
navigator.pop()
|
||||||
|
viewModel.procedureId = null
|
||||||
|
}
|
||||||
|
) {
|
||||||
|
Icon(painterResource(Res.drawable.save_24px), "Save", modifier = Modifier.size(18.dp))
|
||||||
|
Spacer(Modifier.size(ButtonDefaults.IconSpacing))
|
||||||
|
Text(
|
||||||
|
"Save",
|
||||||
|
style = MaterialTheme.typography.labelLarge,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user