Formik recipe
Code
_153import { FormikErrors, useFormik } from 'formik';_153import { Form } from '@ef-global/backpack/Form';_153import { FormInput } from '@ef-global/backpack/FormInput';_153import { Button } from '@ef-global/backpack/Button';_153import { FormSwitch } from '@ef-global/backpack/FormSwitch';_153import axios from 'axios';_153import React, { useState } from 'react';_153import {_153 FormRadio,_153 FormRadioGroup,_153 FormRadioTile,_153} from '@ef-global/backpack/FormRadio';_153import { FormSelect, Option } from '@ef-global/backpack/FormSelect';_153import { FormPhoneInput } from '@ef-global/backpack/FormPhoneInput';_153_153interface FormFields {_153 firstName: string;_153 switch: 'off' | 'on';_153 radios: '' | 'radio1' | 'radio2' | 'radio3';_153 tiles: '' | 'tile1' | 'tile2' | 'tile3';_153 select: string;_153 phone: string;_153}_153_153export const FormikRecipe = () => {_153 const [result, setResult] = useState(null);_153_153 const formik = useFormik({_153 initialValues: {_153 firstName: '',_153 switch: 'off',_153 radios: '',_153 tiles: '',_153 select: '',_153 phone: '',_153 },_153 validate: (values: FormFields) => {_153 let errors: FormikErrors<FormFields> = {};_153 if (!values.firstName) {_153 errors.firstName = 'Required';_153 }_153_153 if (!values.switch || values.switch === 'off') {_153 errors.switch = 'Required';_153 }_153_153 if (!values.radios) {_153 errors.radios = 'Required';_153 }_153_153 if (!values.tiles) {_153 errors.tiles = 'Required';_153 }_153_153 if (!values.select) {_153 errors.select = 'Required';_153 }_153_153 if (!values.phone) {_153 errors.phone = 'Required';_153 }_153_153 return errors;_153 },_153 onSubmit: async (values) => {_153 await axios_153 .post('/api/form-tester', values)_153 .then((res) => setResult(JSON.stringify(res.data, null, 2)));_153 },_153 });_153_153 return (_153 <>_153 <Form onSubmit={formik.handleSubmit}>_153 <FormInput_153 type={'text'}_153 name={'firstName'}_153 placeholder={'First name'}_153 onChange={formik.handleChange}_153 value={formik.values.firstName}_153 valid={!Boolean(formik.errors.firstName)}_153 />_153 <br />_153 <FormSwitch_153 name={'switch'}_153 checked={formik.values.switch === 'on'}_153 onCheckedChange={async (checked) =>_153 formik.setFieldValue('switch', checked ? 'on' : 'off')_153 }_153 value={formik.values.switch}_153 valid={!Boolean(formik.errors.switch)}_153 />_153 <br />_153 <FormRadioGroup_153 name={'radios'}_153 onValueChange={async (value) => formik.setFieldValue('radios', value)}_153 >_153 <FormRadio value={'radio1'}>radio 1</FormRadio>_153 <FormRadio value={'radio2'}>radio 2</FormRadio>_153 <FormRadio value={'radio3'}>radio 3</FormRadio>_153 </FormRadioGroup>_153 <br />_153 <FormRadioGroup_153 name={'tiles'}_153 onValueChange={async (value) => formik.setFieldValue('tiles', value)}_153 tile_153 stack_153 >_153 <FormRadioTile value={'tile1'} valid={!Boolean(formik.errors.tiles)}>_153 tile 1_153 </FormRadioTile>_153 <FormRadioTile value={'tile2'} valid={!Boolean(formik.errors.tiles)}>_153 tile 2_153 </FormRadioTile>_153 <FormRadioTile value={'tile3'} valid={!Boolean(formik.errors.tiles)}>_153 tile 3_153 </FormRadioTile>_153 </FormRadioGroup>_153 <br />_153 <FormSelect_153 placeholder={'Select'}_153 name={'select'}_153 valid={!Boolean(formik.errors.select)}_153 onValueChange={async (value) => formik.setFieldValue('select', value)}_153 >_153 <Option value={'1'}>1</Option>_153 <Option value={'2'}>2</Option>_153 <Option value={'3'}>3</Option>_153 <Option value={'4'}>4</Option>_153 </FormSelect>_153 <br />_153 <br />_153 <FormPhoneInput_153 name={'phone'}_153 floatingLabel={'Phone'}_153 valid={!Boolean(formik.errors.phone)}_153 onValueChange={async (value) => formik.setFieldValue('phone', value)}_153 />_153 <br />_153 <br />_153 <Button as={'button'} type={'submit'} variant={'primary'}>_153 Submit_153 </Button>_153 </Form>_153 {result && (_153 <>_153 <h5 style={{ marginBottom: 0 }}>Result:</h5>_153 <pre style={{ marginTop: 10 }}>{result}</pre>_153 </>_153 )}_153 </>_153 );_153};