Dark Mode

Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Skeptick/input-mask-compose

Repository files navigation

input-mask-compose

Biblioteka dlia formatirovaniia vvodimykh pol'zovatelem znachenii s podderzhkoi Compose Multiplatform.

Ispol'zovanie

kotlin {
sourceSets {
commonMain {
dependencies {
implementation("io.github.skeptick.inputmask:inputmask-core:0.0.7")
implementation("io.github.skeptick.inputmask:inputmask-compose:0.0.7")
}
}
}
}

Podderzhivaemye platformy

core podderzhivaet vse targety Kotlin, compose vse targety Compose Multiplatform.

Ideia

Sintaksis masok vdokhnovlion nebezyzvestnoi bibliotekoi ot RedMadRobot ( Android, iOS ), no realizatsiia gorazdo bolee primitivnaia. V chastnosti, ne podderzhivaiutsia <> maski.

Ob'iavlenie masok

Detal'nee v dokumentatsii RedMadRobot.

Verkhneurovnevo:

  • v [] opisyvaem to, chto ozhidaem ot pol'zovatelia
  • v {} liubye simvoly, kotorye khotim poluchit' v izvlekaemom znachenii
  • vse simvoly za predelami [] i {} budut vstavleny v protsesse formatirovaniia, no ne popadut v izvlekaemoe znachenie

V [] podderzhivaiutsia sleduiushchie simvoly:

  • 0 - obiazatel'naia tsifra
  • 9 - optsional'naia tsifra
  • A - obiazatel'naia bukva
  • a - optsional'naia bukva
  • _ - obiazatel'naia bukva ili tsifra
  • - - optsional'naia bukva ili tsifra
  • ... - neogranichennoe kolichestvo tsifr ili bukv
    • esli pered ... stoit 0 ili 9, to budut ozhidat'sia tsifrovye simvoly
    • esli pered ... stoit A ili a, to budut ozhidat'sia bukvennye simvoly
    • esli pered ... stoit _ ili -, ili ne stoit nichego, to budut ozhidat'sia bukvy ili tsifry

Sozdanie maski

val inputMask = InputMasks.getOrCreate("+{7} ([000]) [000]-[0000]")

Podderzhivaetsia sozdanie s pomoshch'iu prostogo DSL:

val inputMask = InputMasks.build {
fixedChar('+', extracted = false)
fixedChar('7', extracted = true)
fixedChar(' ', extracted = false)
fixedChar('(', extracted = false)
repeat(3) { singleDigit(required = true) }
fixedChar(')', extracted = false)
fixedChar(' ', extracted = false)
repeat(3) { singleDigit(required = true) }
fixedChar('-', extracted = false)
repeat(4) { singleDigit(required = true) }
}

Ispol'zovanie

val result = inputMask.format("9001234567")
result.isComplete // -> true
result.formattedValue // -> +7 (900) 123-4567
result.extractedValue // -> 79001234567

Obratite vnimanie na parametr replacePrefix:

inputMask.format("79001234567", replacePrefix = true) // => "+7 (900) 123-4567"
inputMask.format("79001234567", replacePrefix = false) // => "+7 (790) 012-3456"

Ispol'zovanie v Compose

Artefakt compose postavliaet imlementatsii VisualTransformation dlia TextField prinimaiushchikh String ili TextFieldValue:

var text by remember { mutableStateOf("") }
val visualTransformation = rememberInputMaskVisualTransformation("[000]-[000]")

BasicTextField(
value = text,
onValueChange = { text = visualTransformation.sanitize(it) },
visualTransformation = visualTransformation,
)

Spetsial'naia variatsiia dlia formatirovaniia telefona, obrabatyvaiushchaia vstavku v pole vvoda nomera kak s kodom strany, tak i bez:

var text by remember { mutableStateOf("") }
val mask = "+{7} ([000]) [000]-[0000]"
val visualTransformation = rememberPhoneInputMaskVisualTransformation(mask)

BasicTextField(
value = value,
onValueChange = { text = visualTransformation.sanitize(it) },
visualTransformation = visualTransformation,
)

Obratite vnimanie, chto esli maska mozhet izmenit'sia v protsesse vvoda (naprimer, pol'zovateliu predostavliaetsia vozmozhnost' vybrat' stranu vo vremia avtorizatsii), to nuzhno takzhe obnovit' znachenie:

BasicTextField(
value = remember(text, mask) { visualTransformation.sanitize(value) },
// ...
)

Dlia polei vvoda, postroennykh vokrug TextFieldState est' implementatsii InputTransformation i OutputTransformation:

val textFieldState = remember { TextFieldState() }
val mask = "[000]-[000]"

BasicTextField(
state = textFieldState,
inputTransformation = rememberInputMaskInputTransformation(mask),
outputTransformation = rememberInputMaskOutputTransformation(mask),
)

I spetsial'naia variatsiia InputTransformation dlia telefonnykh nomerov:

BasicTextField(
// ...
inputTransformation = rememberPhoneInputMaskInputTransformation(mask),
// ...
)

About

No description, website, or topics provided.

Resources

Readme

License

Apache-2.0 license

Stars

Watchers

Forks

Packages

Contributors

Languages