This commit is contained in:
Sad Ellie 2024-01-31 15:09:50 +03:00
parent 087ba19b1f
commit a88aa9081a
3 changed files with 10 additions and 9 deletions

View File

@ -21,16 +21,17 @@ package com.sadellie.unitto.core.ui.common.textfield
import androidx.compose.ui.platform.ClipboardManager import androidx.compose.ui.platform.ClipboardManager
import androidx.compose.ui.text.AnnotatedString import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.text.input.TextFieldValue import androidx.compose.ui.text.input.TextFieldValue
import com.sadellie.unitto.core.base.Token
/** /**
* Copy value to clipboard without grouping symbols. * Copy value to clipboard with fractional symbols.
* *
* Example: * Example:
* "123.456,789" will be copied as "123456,789" * "123456.789" will be copied as "123456,789"
* *
* @param value Formatted value that has grouping symbols. * @param value Internal [TextFieldValue] without formatting with [Token.Digit.dot] as fractional.
*/ */
internal fun ClipboardManager.copyWithoutGrouping( internal fun ClipboardManager.copyWithFractional(
value: TextFieldValue, value: TextFieldValue,
formatterSymbols: FormatterSymbols formatterSymbols: FormatterSymbols
) = this.setText( ) = this.setText(
@ -38,7 +39,7 @@ internal fun ClipboardManager.copyWithoutGrouping(
value.annotatedString value.annotatedString
.subSequence(value.selection) .subSequence(value.selection)
.text .text
.replace(formatterSymbols.grouping, "") .replace(Token.Digit.dot, formatterSymbols.fractional)
) )
) )

View File

@ -62,7 +62,7 @@ fun FixedInputTextField(
val expressionInteractionSource = remember(expression) { MutableInteractionSource() } val expressionInteractionSource = remember(expression) { MutableInteractionSource() }
LaunchedEffect(expressionInteractionSource) { LaunchedEffect(expressionInteractionSource) {
expressionInteractionSource.interactions.collect { expressionInteractionSource.interactions.collect {
if (it is PressInteraction.Release) onClick(expression.clearAndFilterExpression(formatterSymbols)) if (it is PressInteraction.Release) onClick(value)
} }
} }
@ -71,7 +71,7 @@ fun FixedInputTextField(
LocalTextToolbar provides UnittoTextToolbar( LocalTextToolbar provides UnittoTextToolbar(
view = LocalView.current, view = LocalView.current,
copyCallback = { copyCallback = {
clipboardManager.copyWithoutGrouping(expressionValue, formatterSymbols) clipboardManager.copyWithFractional(expressionValue, formatterSymbols)
expressionValue = expressionValue.copy(selection = TextRange(expressionValue.selection.end)) expressionValue = expressionValue.copy(selection = TextRange(expressionValue.selection.end))
} }
) )

View File

@ -73,7 +73,7 @@ fun ExpressionTextField(
val expressionTransformer = remember(formatterSymbols) { ExpressionTransformer(formatterSymbols) } val expressionTransformer = remember(formatterSymbols) { ExpressionTransformer(formatterSymbols) }
fun copyCallback() { fun copyCallback() {
clipboardManager.copyWithoutGrouping(value, formatterSymbols) clipboardManager.copyWithFractional(value, formatterSymbols)
onCursorChange(TextRange(value.selection.end)) onCursorChange(TextRange(value.selection.end))
} }
@ -90,7 +90,7 @@ fun ExpressionTextField(
pasteCallback(clipboardManager.getText()?.text?.clearAndFilterExpression(formatterSymbols) ?: "") pasteCallback(clipboardManager.getText()?.text?.clearAndFilterExpression(formatterSymbols) ?: "")
}, },
cutCallback = { cutCallback = {
clipboardManager.copyWithoutGrouping(value, formatterSymbols) clipboardManager.copyWithFractional(value, formatterSymbols)
cutCallback() cutCallback()
} }
) )