mirror of
				https://github.com/smyalygames/checklist-tester.git
				synced 2025-11-04 15:59:48 +01:00 
			
		
		
		
	feat(connector): add DropdownMenu to each procedure
This commit is contained in:
		
							parent
							
								
									cd0f16828c
								
							
						
					
					
						commit
						225378dfb9
					
				@ -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="M480,615L240,375L296,319L480,503L664,319L720,375L480,615Z"/>
 | 
			
		||||
</vector>
 | 
			
		||||
@ -3,28 +3,28 @@ package tab.procedure
 | 
			
		||||
import InterfaceState
 | 
			
		||||
import androidx.compose.foundation.VerticalScrollbar
 | 
			
		||||
import androidx.compose.foundation.clickable
 | 
			
		||||
import androidx.compose.foundation.layout.Box
 | 
			
		||||
import androidx.compose.foundation.layout.Column
 | 
			
		||||
import androidx.compose.foundation.layout.fillMaxHeight
 | 
			
		||||
import androidx.compose.foundation.layout.fillMaxWidth
 | 
			
		||||
import androidx.compose.foundation.layout.*
 | 
			
		||||
import androidx.compose.foundation.lazy.LazyColumn
 | 
			
		||||
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.automirrored.filled.KeyboardArrowRight
 | 
			
		||||
import androidx.compose.material.icons.outlined.Add
 | 
			
		||||
import androidx.compose.material.icons.outlined.Edit
 | 
			
		||||
import androidx.compose.material.icons.outlined.PlayArrow
 | 
			
		||||
import androidx.compose.material3.*
 | 
			
		||||
import androidx.compose.runtime.Composable
 | 
			
		||||
import androidx.compose.runtime.collectAsState
 | 
			
		||||
import androidx.compose.runtime.getValue
 | 
			
		||||
import androidx.compose.runtime.*
 | 
			
		||||
import androidx.compose.ui.Alignment
 | 
			
		||||
import androidx.compose.ui.Modifier
 | 
			
		||||
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 connector.composeapp.generated.resources.Res
 | 
			
		||||
import connector.composeapp.generated.resources.expand_more_24px
 | 
			
		||||
import io.anthonyberg.connector.shared.entity.Procedure
 | 
			
		||||
import org.jetbrains.compose.resources.ExperimentalResourceApi
 | 
			
		||||
import org.jetbrains.compose.resources.painterResource
 | 
			
		||||
import org.koin.compose.koinInject
 | 
			
		||||
import tab.LoadingScreen
 | 
			
		||||
 | 
			
		||||
@ -86,21 +86,71 @@ class ListProcedures (
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @OptIn(ExperimentalResourceApi::class)
 | 
			
		||||
    @Composable
 | 
			
		||||
    private fun procedureItem(procedure: Procedure, viewModel: InterfaceState, screenModel: ActionsScreenModel) {
 | 
			
		||||
        ListItem(
 | 
			
		||||
        var expanded by remember { mutableStateOf(false) }
 | 
			
		||||
 | 
			
		||||
        Box(
 | 
			
		||||
            modifier = Modifier
 | 
			
		||||
                .clickable(
 | 
			
		||||
                    enabled = true,
 | 
			
		||||
                    onClick = {
 | 
			
		||||
                        viewModel.procedureId = procedure.id
 | 
			
		||||
                        screenModel.getActions()
 | 
			
		||||
                    }
 | 
			
		||||
                ),
 | 
			
		||||
            overlineContent = { Text(procedure.type) },
 | 
			
		||||
            headlineContent = { Text(procedure.name) },
 | 
			
		||||
            trailingContent = { Icon(Icons.AutoMirrored.Filled.KeyboardArrowRight, "Open Procedure") }
 | 
			
		||||
        )
 | 
			
		||||
                .fillMaxSize()
 | 
			
		||||
                .wrapContentSize(Alignment.TopEnd)
 | 
			
		||||
        ) {
 | 
			
		||||
            ListItem(
 | 
			
		||||
                modifier = Modifier
 | 
			
		||||
                    .clickable(
 | 
			
		||||
                        enabled = true,
 | 
			
		||||
                        onClick = {
 | 
			
		||||
                            expanded = true
 | 
			
		||||
                        }
 | 
			
		||||
                    ),
 | 
			
		||||
                overlineContent = { Text(procedure.type) },
 | 
			
		||||
                headlineContent = { Text(procedure.name) },
 | 
			
		||||
                trailingContent = { Icon(painterResource(Res.drawable.expand_more_24px), "Open Procedure Menu") }
 | 
			
		||||
            )
 | 
			
		||||
 | 
			
		||||
            procedureMenu(
 | 
			
		||||
                procedure = procedure,
 | 
			
		||||
                viewModel = viewModel,
 | 
			
		||||
                screenModel = screenModel,
 | 
			
		||||
                expanded = expanded,
 | 
			
		||||
                onDismissRequest = { expanded = false }
 | 
			
		||||
            )
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        HorizontalDivider()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Composable
 | 
			
		||||
    private fun procedureMenu(
 | 
			
		||||
        procedure: Procedure,
 | 
			
		||||
        viewModel: InterfaceState,
 | 
			
		||||
        screenModel: ActionsScreenModel,
 | 
			
		||||
        expanded: Boolean,
 | 
			
		||||
        onDismissRequest: () -> Unit
 | 
			
		||||
    ) {
 | 
			
		||||
        DropdownMenu(
 | 
			
		||||
            expanded = expanded,
 | 
			
		||||
            onDismissRequest = onDismissRequest,
 | 
			
		||||
        ) {
 | 
			
		||||
            DropdownMenuItem(
 | 
			
		||||
                text = { Text("Edit") },
 | 
			
		||||
                onClick = {
 | 
			
		||||
                    viewModel.procedureId = procedure.id
 | 
			
		||||
                    screenModel.getActions()
 | 
			
		||||
                },
 | 
			
		||||
                leadingIcon = {
 | 
			
		||||
                    Icon(Icons.Outlined.Edit, "Edit Procedure")
 | 
			
		||||
                },
 | 
			
		||||
            )
 | 
			
		||||
 | 
			
		||||
            DropdownMenuItem(
 | 
			
		||||
                text = { Text("Run Test") },
 | 
			
		||||
                onClick = { /* TODO add logic */ },
 | 
			
		||||
                leadingIcon = {
 | 
			
		||||
                    Icon(Icons.Outlined.PlayArrow, "Run Procedure Tests")
 | 
			
		||||
                },
 | 
			
		||||
            )
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user