No Beagle é possível realizar Operações do tipo soma, subtração, etc, utilizando o contexto e a DSL, mas você também pode criar a sua própria operação ou ‘Custom Operation’.
Para registrar sua operação customizada, é necessário usar o método createOperation que recebe como parâmetros:
String
com o nome da operação;Array<out Any?>
, contendo os parâmetros necessários de acordo com a operação customizada.O exemplo abaixo mostra a operação isValidCpf
e o texto do componente Text
varia de acordo com o resultado da verificação, veja como:
fun isValidCpf(param: Array<out String?>) : Bind.Expression<Boolean> {
param.filterNotNull().map { value ->
if (value.isEmpty()) return expressionOf("@{${false}}")
val numbers = arrayListOf<Int>()
value.filter { it.isDigit() }.forEach {
numbers.add(it.toString().toInt())
}
if (numbers.size != 11) return expressionOf("@{${false}}")
for (n in 0..9) {
val digits = arrayListOf<Int>()
repeat((0..10).count()) { digits.add(n) }
if (numbers == digits) return expressionOf("@{${false}}")
}
val dv1 = ((0..8).sumOf { (it + 1) * numbers[it] }).rem(11).let {
if (it >= 10) 0 else it
}
val dv2 = ((0..8).sumOf { it * numbers[it] }.let { (it + (dv1 * 9)).rem(11) }).let {
if (it >= 10) 0 else it
}
return expressionOf("@{${numbers[9] == dv1 && numbers[10] == dv2}}")
}
return createOperation("isValidCpf", arrayOf(param))
}
No exemplo acima a operação customizada criada valida um CPF e retorna se o resultado foi válido ou não. Para isso, as validações necessárias foram feitas e depois o método createOperation retornou com o nome da operação e o parâmetro esperado. O resultado foi:
fun screen() = Screen(
navigationBar = NavigationBar(title = "Custom operation", showBackButton = true),
child = Container(
context = ContextData("cpf", "00000000000"),
children = listOf(
Button(
text = "CPF atual: @{cpf}",
onPress = listOf(
SetContext(contextId = "cpf", value = "42249625000")
)
),
Text(
condition(
isValidCpf(arrayOf("@{cpf}")),
constant("cpf is valid"), constant("cpf is not valid")
)
)
)
)
)
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.