React hook form recipe
Code
_132import React, { useEffect, useState } from 'react';_132import { FormInput } from '@ef-global/backpack/FormInput';_132import { Form } from '@ef-global/backpack/Form';_132import { useForm } from 'react-hook-form';_132import { Button } from '@ef-global/backpack/Button';_132import axios from 'axios';_132import { FormGroup } from '@ef-global/backpack/FormGroup';_132import { FormSwitch } from '@ef-global/backpack/FormSwitch';_132import {_132 FormRadio,_132 FormRadioGroup,_132 FormRadioTile,_132} from '@ef-global/backpack/FormRadio';_132import {FormSelect, Option} from "@ef-global/backpack/FormSelect";_132import {FormPhoneInput} from "@ef-global/backpack/FormPhoneInput";_132_132export const ReactHookForm = () => {_132 const {register, handleSubmit, setValue, watch, control, formState, formState: {errors}} = useForm({mode: 'onChange'});_132 const [result, setResult] = useState(null)_132 const onSubmit = async data => {_132 await axios.post('/api/form-tester', data).then(res => setResult(JSON.stringify(res.data, null, 2)))_132 };_132_132 useEffect(() => {_132 register('radios', { required: true });_132 register('tiles', { required: true });_132 }, []);_132_132 return (_132 <>_132 <Form onSubmit={handleSubmit(onSubmit)} id={`react-hook-form`}>_132 <FormGroup>_132 <FormInput_132 type='text'_132 placeholder='Input text'_132 {...register('firstName', { required: true })}_132 />_132 </FormGroup>_132 <br />_132 <FormSwitch_132 {...register('switch', { required: true, pattern: /true/ })}_132 value={false}_132 onCheckedChange={(checked) => {_132 setValue('switch', checked);_132 }}_132 valid={!errors.switch}_132 >_132 Test switch_132 </FormSwitch>_132 <br />_132_132 <FormRadioGroup_132 onValueChange={(v) => {_132 setValue('radios', v, {_132 shouldValidate: true,_132 });_132 }}_132 valid={!errors.radios}_132 stack_132 tile_132 >_132 <FormRadio value={'radio0'} valid={!errors.radios}>_132 radio 0_132 </FormRadio>_132 <FormRadio value={'radio1'} valid={!errors.radios}>_132 radio 1_132 </FormRadio>_132 <FormRadio value={'radio2'} valid={!errors.radios}>_132 radio 2_132 </FormRadio>_132 <FormRadio value={'radio3'} valid={!errors.radios}>_132 radio 3_132 </FormRadio>_132 </FormRadioGroup>_132 <br />_132 <FormRadioGroup_132 onValueChange={(v) => {_132 setValue('tiles', v, {_132 shouldValidate: true,_132 });_132 }}_132 valid={!errors.tiles}_132 stack_132 tile_132 >_132 <FormRadioTile value={'tile0'} valid={!errors.tiles}>_132 tile 0_132 </FormRadioTile>_132 <FormRadioTile value={'tile1'} valid={!errors.tiles}>_132 tile 1_132 </FormRadioTile>_132 <FormRadioTile value={'tile2'} valid={!errors.tiles}>_132 tile 2_132 </FormRadioTile>_132 <FormRadioTile value={'tile3'} valid={!errors.tiles}>_132 tile 3_132 </FormRadioTile>_132 </FormRadioGroup>_132 <br />_132 {/* @ts-ignore */}_132 <FormSelect_132 placeholder={'Select'}_132 valid={!errors.select}_132 onValueChange={(value) => setValue('select', value)}_132 {...register('select', {required: true})}_132 >_132 <Option value={'1'}>1</Option>_132 <Option value={'2'}>2</Option>_132 <Option value={'3'}>3</Option>_132 <Option value={'4'}>4</Option>_132 </FormSelect>_132 <br/>_132 <br/>_132 <FormPhoneInput_132 floatingLabel={'Phone'}_132 valid={!errors.phone}_132 onValueChange={value => setValue('phone', value)}_132 {...register('phone')}_132 />_132 <br/>_132 <br/>_132 <Button as={'button'} variant={'primary'} type={`submit`}>Submit</Button>_132 </Form>_132 {result && (_132 <>_132 <h5 style={{ marginBottom: 0 }}>Result:</h5>_132 <pre style={{ marginTop: 10 }}>{result}</pre>_132 </>_132 )}_132 </>_132 );_132};