Coverage Summary for Class: SurferDropdownKt (com.georgeci.moneysurfer.uikit.components)

Class Class, % Method, % Branch, % Line, % Instruction, %
SurferDropdownKt 100% (1/1) 66.7% (6/9) 66.7% (12/18) 75.9% (22/29) 81% (440/543)


 package com.georgeci.moneysurfer.uikit.components
 
 import androidx.compose.foundation.layout.fillMaxWidth
 import androidx.compose.material3.DropdownMenuItem
 import androidx.compose.material3.ExperimentalMaterial3Api
 import androidx.compose.material3.ExposedDropdownMenuAnchorType
 import androidx.compose.material3.ExposedDropdownMenuBox
 import androidx.compose.material3.ExposedDropdownMenuDefaults
 import androidx.compose.material3.OutlinedTextField
 import androidx.compose.material3.Text
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.mutableStateOf
 import androidx.compose.runtime.remember
 import androidx.compose.ui.Modifier
 
 @OptIn(ExperimentalMaterial3Api::class)
 @Composable
 fun <T> SurferDropdown(
     items: List<T>,
     selected: T?,
     label: String,
     itemName: (T) -> String,
     onItemSelected: (T) -> Unit,
     modifier: Modifier = Modifier,
 ) {
     val expanded = remember { mutableStateOf(false) }
 
     ExposedDropdownMenuBox(
         expanded = expanded.value,
         onExpandedChange = { expanded.value = it },
         modifier = modifier,
     ) {
         OutlinedTextField(
             value = selected?.let(itemName).orEmpty(),
             onValueChange = {},
             readOnly = true,
             label = { Text(label) },
             trailingIcon = { ExposedDropdownMenuDefaults.TrailingIcon(expanded = expanded.value) },
             modifier = Modifier
                 .fillMaxWidth()
                 .menuAnchor(ExposedDropdownMenuAnchorType.PrimaryNotEditable),
         )
         ExposedDropdownMenu(
             expanded = expanded.value,
             onDismissRequest = { expanded.value = false },
         ) {
             items.forEach { item ->
                 DropdownMenuItem(
                     text = { Text(itemName(item)) },
                     onClick = {
                         onItemSelected(item)
                         expanded.value = false
                     },
                 )
             }
         }
     }
 }