Back

Emumba - formik basic implimenatation,validations

Copy Below Code View As A Text File Show Text Only Show API Edit Code
                            

import { Formik, useFormik } from 'formik'; import React from 'react'; const TestComponent = () => { const formik = useFormik({ initialValues: { email: "" }, onSubmit: values => { alert(JSON.stringify(values, null, 2)); } }); return ( <> {/* Method 1 */} <Formik initialValues={{}} validate={values => { console.log('values', values); const errors = {}; if (!values.name) { errors.name = 'Name is Required'; } return errors; }} onSubmit={(values, actions) => { console.log('values', values); console.log('actions', actions); }} > {/* --- {()=>{}} */} {({ values, errors, touched, handleChange, handleBlur, handleSubmit })=>( <form onSubmit={handleSubmit}> {console.log("error", errors)} <input type="text" name="name" onChange={handleChange} onBlur={handleBlur} values={values.name} /> {errors.name && touched.name && errors.name} <button type="submit">Submit</button> </form> )} </Formik> {/* Method 2 */} <form onSubmit={formik.handleSubmit}> <label htmlFor="email">Email Address</label> <input id="email" name="email" type="email" onChange={formik.handleChange} value={formik.values.email} /> <button type="submit">Submit</button> </form> </> ) } export default TestComponent; // Validations Example // We can below our customize validations in this way validate={async (values) => { try{ await validateYupSchema( values, CreateDialogSchema({ values, }), true, values ); }catch (err) { return yupToFormErrors(err); } return {}; }} return export const CreateDialogSchema = ({ values }) => { Yup.object().shape({ languages: Yup.array() .required("Language(s) are required") .min(1, "Language(s) are required"), subAccountIds: Yup.array() .nullable() .when(["mainOrSub"], { is: (mainOrSub) => !!mainOrSub, then: Yup.array().nullable().min(1, "Sub-Account ID is required"), }), departmentIds: Yup.array() .required() .min(1, `At least one Department is required`), keyoptInSmsMessage: Yup.string() .required("Opt-In SMS Response Key is Required") .test(smsResponseKey( responseKeys, "keyoptInSmsMessage" )), )} const smsResponseKey = (responseKeys,key="") => { return function (value = "") { const values = value.split(","); const rest = { ...responseKeys }; if (key && responseKeys.hasOwnProperty(key)) { delete rest[key]; } const filteredArr = Object.values(rest); if (values.some((value) => filteredArr?.map(v => v.toLowerCase()) .includes(value.toLowerCase()))) return this.createError({ message: "Response Key already exists", path: this.path, }); if (values.some((value) => !AlphaNumeric.test(value))) { return this.createError({ message: "Response Key should be alphanumeric", path: this.path, }); } return true; }; }; }