78 lines
2.4 KiB
Kotlin
78 lines
2.4 KiB
Kotlin
package co.electriccoin.zcash.ui.design.component
|
|
|
|
import androidx.compose.foundation.layout.Row
|
|
import androidx.compose.foundation.layout.padding
|
|
import androidx.compose.foundation.text.ClickableText
|
|
import androidx.compose.material3.Checkbox
|
|
import androidx.compose.runtime.Composable
|
|
import androidx.compose.runtime.mutableStateOf
|
|
import androidx.compose.runtime.remember
|
|
import androidx.compose.runtime.saveable.rememberSaveable
|
|
import androidx.compose.ui.Alignment
|
|
import androidx.compose.ui.Modifier
|
|
import androidx.compose.ui.platform.testTag
|
|
import androidx.compose.ui.text.AnnotatedString
|
|
import androidx.compose.ui.tooling.preview.Preview
|
|
import co.electriccoin.zcash.ui.design.theme.ZcashTheme
|
|
|
|
@Preview
|
|
@Composable
|
|
private fun ComposablePreview() {
|
|
val checkBoxState = remember { mutableStateOf(false) }
|
|
ZcashTheme(forceDarkMode = false) {
|
|
CheckBox(
|
|
onCheckedChange = { checkBoxState.value = it },
|
|
text = "test",
|
|
checked = checkBoxState.value,
|
|
checkBoxTestTag = null
|
|
)
|
|
}
|
|
}
|
|
|
|
@Composable
|
|
fun CheckBox(
|
|
onCheckedChange: (Boolean) -> Unit,
|
|
text: String,
|
|
modifier: Modifier = Modifier,
|
|
checked: Boolean = false,
|
|
checkBoxTestTag: String? = null
|
|
) {
|
|
Row(
|
|
verticalAlignment = Alignment.CenterVertically,
|
|
modifier = modifier
|
|
) {
|
|
val checkBoxModifier =
|
|
Modifier
|
|
.padding(
|
|
top = ZcashTheme.dimens.spacingTiny,
|
|
bottom = ZcashTheme.dimens.spacingTiny,
|
|
end = ZcashTheme.dimens.spacingTiny
|
|
)
|
|
.then(
|
|
if (checkBoxTestTag != null) {
|
|
Modifier.testTag(checkBoxTestTag)
|
|
} else {
|
|
Modifier
|
|
}
|
|
)
|
|
val (checkedState, setCheckedState) = rememberSaveable { mutableStateOf(checked) }
|
|
Checkbox(
|
|
checked = checkedState,
|
|
onCheckedChange = {
|
|
setCheckedState(it)
|
|
onCheckedChange(it)
|
|
},
|
|
enabled = true,
|
|
modifier = checkBoxModifier
|
|
)
|
|
ClickableText(
|
|
onClick = {
|
|
setCheckedState(!checkedState)
|
|
onCheckedChange(!checkedState)
|
|
},
|
|
text = AnnotatedString(text),
|
|
style = ZcashTheme.extendedTypography.checkboxText
|
|
)
|
|
}
|
|
}
|