mirror of
https://github.com/openMF/mifos-mobile.git
synced 2026-02-06 11:26:51 +00:00
fix(core-ui): ensure dropdown menu items are visible on iOS (#3092)
This commit is contained in:
parent
16d6edeefe
commit
6f052759ee
@ -9,23 +9,20 @@
|
||||
*/
|
||||
package org.mifos.mobile.core.ui.component
|
||||
|
||||
import androidx.compose.foundation.interaction.MutableInteractionSource
|
||||
import androidx.compose.foundation.interaction.collectIsPressedAsState
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.heightIn
|
||||
import androidx.compose.material3.DropdownMenu
|
||||
import androidx.compose.material3.DropdownMenuItem
|
||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||
import androidx.compose.material3.ExposedDropdownMenuBox
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.MenuAnchorType
|
||||
import androidx.compose.material3.OutlinedTextField
|
||||
import androidx.compose.material3.OutlinedTextFieldDefaults
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.LaunchedEffect
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.saveable.rememberSaveable
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Modifier
|
||||
@ -40,6 +37,7 @@ import org.mifos.mobile.core.designsystem.theme.MifosMobileTheme
|
||||
import org.mifos.mobile.core.ui.utils.DevicePreview
|
||||
import template.core.base.designsystem.theme.KptTheme
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
fun MifosDropDownTextField(
|
||||
onClick: (Int, String) -> Unit,
|
||||
@ -52,23 +50,23 @@ fun MifosDropDownTextField(
|
||||
selectedOption: String? = null,
|
||||
) {
|
||||
var expanded by rememberSaveable { mutableStateOf(false) }
|
||||
val interactionSource = remember { MutableInteractionSource() }
|
||||
val isPressed by interactionSource.collectIsPressedAsState()
|
||||
|
||||
LaunchedEffect(key1 = isPressed) {
|
||||
if (isPressed) expanded = true && isEnabled
|
||||
}
|
||||
|
||||
Box(
|
||||
modifier = modifier.alpha(if (!isEnabled) 0.4f else 1f),
|
||||
ExposedDropdownMenuBox(
|
||||
expanded = expanded && isEnabled,
|
||||
onExpandedChange = {
|
||||
if (isEnabled) {
|
||||
expanded = !expanded
|
||||
}
|
||||
},
|
||||
modifier = modifier.alpha(if (!isEnabled) 0.4f else 1f).fillMaxWidth(),
|
||||
) {
|
||||
OutlinedTextField(
|
||||
value = selectedOption ?: "",
|
||||
onValueChange = { },
|
||||
label = { Text(stringResource(labelResId)) },
|
||||
interactionSource = interactionSource,
|
||||
modifier = Modifier
|
||||
.fillMaxWidth(),
|
||||
.fillMaxWidth()
|
||||
.menuAnchor(MenuAnchorType.PrimaryNotEditable, true),
|
||||
readOnly = true,
|
||||
enabled = isEnabled,
|
||||
textStyle = KptTheme.typography.labelMedium,
|
||||
@ -95,12 +93,11 @@ fun MifosDropDownTextField(
|
||||
),
|
||||
)
|
||||
|
||||
DropdownMenu(
|
||||
ExposedDropdownMenu(
|
||||
expanded = expanded && isEnabled,
|
||||
modifier = Modifier
|
||||
.fillMaxWidth(0.92f)
|
||||
.heightIn(max = DesignToken.sizes.dropDownMenuHeightInDp200),
|
||||
onDismissRequest = { expanded = false },
|
||||
modifier = Modifier
|
||||
.heightIn(max = DesignToken.sizes.dropDownMenuHeightInDp200),
|
||||
) {
|
||||
optionsList.forEachIndexed { index, item ->
|
||||
DropdownMenuItem(
|
||||
@ -115,6 +112,7 @@ fun MifosDropDownTextField(
|
||||
}
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
fun MifosDropDownDoubleTextField(
|
||||
onClick: (Int, Pair<String, String>) -> Unit,
|
||||
@ -127,23 +125,23 @@ fun MifosDropDownDoubleTextField(
|
||||
selectedOption: String? = null,
|
||||
) {
|
||||
var expanded by rememberSaveable { mutableStateOf(false) }
|
||||
val interactionSource = remember { MutableInteractionSource() }
|
||||
val isPressed by interactionSource.collectIsPressedAsState()
|
||||
|
||||
LaunchedEffect(key1 = isPressed) {
|
||||
if (isPressed) expanded = true && isEnabled
|
||||
}
|
||||
|
||||
Box(
|
||||
modifier = modifier.alpha(if (!isEnabled) 0.4f else 1f),
|
||||
ExposedDropdownMenuBox(
|
||||
expanded = expanded && isEnabled,
|
||||
onExpandedChange = {
|
||||
if (isEnabled) {
|
||||
expanded = !expanded
|
||||
}
|
||||
},
|
||||
modifier = modifier.alpha(if (!isEnabled) 0.4f else 1f).fillMaxWidth(),
|
||||
) {
|
||||
OutlinedTextField(
|
||||
value = selectedOption ?: "",
|
||||
onValueChange = { },
|
||||
label = { Text(stringResource(labelResId)) },
|
||||
interactionSource = interactionSource,
|
||||
modifier = Modifier
|
||||
.fillMaxWidth(),
|
||||
.fillMaxWidth()
|
||||
.menuAnchor(MenuAnchorType.PrimaryNotEditable, true),
|
||||
readOnly = true,
|
||||
enabled = isEnabled,
|
||||
textStyle = KptTheme.typography.labelSmall,
|
||||
@ -170,12 +168,11 @@ fun MifosDropDownDoubleTextField(
|
||||
),
|
||||
)
|
||||
|
||||
DropdownMenu(
|
||||
ExposedDropdownMenu(
|
||||
expanded = expanded && isEnabled,
|
||||
modifier = Modifier
|
||||
.fillMaxWidth(0.92f)
|
||||
.heightIn(max = DesignToken.sizes.dropDownMenuHeightInDp200),
|
||||
onDismissRequest = { expanded = false },
|
||||
modifier = Modifier
|
||||
.heightIn(max = DesignToken.sizes.dropDownMenuHeightInDp200),
|
||||
) {
|
||||
optionsList.forEachIndexed { index, item ->
|
||||
DropdownMenuItem(
|
||||
@ -189,7 +186,6 @@ fun MifosDropDownDoubleTextField(
|
||||
Text(text = item.second)
|
||||
}
|
||||
},
|
||||
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user