package com.ustadmobile.libuicompose.components import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Box import androidx.compose.foundation.text.KeyboardActions import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.material.LocalTextStyle import androidx.compose.material3.OutlinedTextField import androidx.compose.material3.TextFieldColors import androidx.compose.material3.OutlinedTextFieldDefaults import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.draw.alpha import androidx.compose.ui.graphics.Shape import androidx.compose.ui.input.pointer.PointerIcon import androidx.compose.ui.input.pointer.pointerHoverIcon import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.input.VisualTransformation import com.ustadmobile.libuicompose.util.ext.testTagIfNotNull /** * TextField by default will not handle onClick events. This is a workaround. */ @Composable fun UstadClickableTextField( value: String, onClick: () -> Unit, onValueChange: (String) -> Unit, modifier: Modifier = Modifier, enabled: Boolean = true, readOnly: Boolean = false, textStyle: TextStyle = LocalTextStyle.current, label: @Composable (() -> Unit)? = null, placeholder: @Composable (() -> Unit)? = null, leadingIcon: @Composable (() -> Unit)? = null, trailingIcon: @Composable (() -> Unit)? = null, isError: Boolean = false, visualTransformation: VisualTransformation = VisualTransformation.None, keyboardOptions: KeyboardOptions = KeyboardOptions.Default, keyboardActions: KeyboardActions = KeyboardActions.Default, singleLine: Boolean = false, maxLines: Int = Int.MAX_VALUE, shape: Shape = OutlinedTextFieldDefaults.shape, colors: TextFieldColors = OutlinedTextFieldDefaults.colors(), supportingText: @Composable (() -> Unit)? = null, clickableTestTag: String? = null, ) { Box { OutlinedTextField( value = value, onValueChange = onValueChange, modifier = modifier, enabled = enabled, readOnly = readOnly, textStyle = textStyle, label = label, placeholder = placeholder, leadingIcon = leadingIcon, trailingIcon = trailingIcon, isError = isError, visualTransformation = visualTransformation, keyboardOptions = keyboardOptions, keyboardActions = keyboardActions, singleLine = singleLine, maxLines = maxLines, shape = shape, colors = colors, supportingText = supportingText, ) Box( modifier = Modifier.matchParentSize() .pointerHoverIcon(PointerIcon.Hand) .alpha(0f) .clickable(onClick = onClick) .testTagIfNotNull(clickableTestTag) ) } }