form-conductor icon indicating copy to clipboard operation
form-conductor copied to clipboard

Can we use it in custom input?

Open rifkyhaekal opened this issue 2 years ago • 1 comments

I have my custom text field input, like below: `form(RegisterRequestDto::class) { Column( modifier = Modifier .fillMaxWidth() .constrainAs(contentColumn) { top.linkTo(parent.top) bottom.linkTo(button.top, margin = (200).dp) start.linkTo(parent.start) end.linkTo(parent.end) } ) { field(fieldClass = RegisterRequestDto::name) { InputTextField( labelValue = stringResource(id = R.string.text_name), onTextChanged = { registerViewModel.onTriggerEvent(RegisterEvent.NameChanged(it)) } ) } LargeSpacer() field(fieldClass = RegisterRequestDto::email) { InputTextField( labelValue = stringResource(id = R.string.text_email), onTextChanged = { registerViewModel.onTriggerEvent(RegisterEvent.EmailChanged(it)) } ) } LargeSpacer() field(fieldClass = RegisterRequestDto::password) { PasswordTextField( labelValue = stringResource(id = R.string.text_password), onTextChanged = { registerViewModel.onTriggerEvent(RegisterEvent.PasswordChanged(it)) } ) } LargeSpacer() field(fieldClass = RegisterRequestDto::confirmPassword) { PasswordTextField( labelValue = stringResource(id = R.string.text_confirm_password), onTextChanged = { registerViewModel.onTriggerEvent( RegisterEvent.ConfirmPasswordChanged( it ) ) } ) } }

            ButtonView(
                value = stringResource(id = R.string.text_register),
                onButtonClicked = {
                    registerViewModel.onTriggerEvent(RegisterEvent.DoRegister)
                    navigator.openLogin()
                },
                isEnabled = this.formState.value is FormResult.Success,
                modifier = Modifier
                    .constrainAs(button) {
                        bottom.linkTo(parent.bottom)
                        start.linkTo(parent.start)
                        end.linkTo(parent.end)
                    }
            )
        }
    }`
    

Is i'm doing it correctly? Because the validation is not working

rifkyhaekal avatar Sep 30 '23 08:09 rifkyhaekal

Hello @rifkyhaekal! Apologies for a late reply!

I just checked the code you used and seems like it's missing the part where we actually update the field's value when input changes.

By design, the implementation should look something like this:

// ...
field(fieldClass = RegisterRequestDto::name) {
    InputTextField(
        labelValue = stringResource(id = R.string.text_name),
        onTextChanged = { 
            setField(it)
            registerViewModel.onTriggerEvent(RegisterEvent.NameChanged(it)) 
        }
    )
}
// ...

This will allow the form/field's state to be updated and validated.

You can check the details in the documentation here!

Hope that helps xD

NaingAungLuu avatar Sep 11 '24 03:09 NaingAungLuu