You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
import*asyupfrom'yup';// Email
email: yup.string().email('Invalid email address').required('Email is required')// Password with requirements
password: yup.string().min(8,'Must be at least 8 characters').matches(/[a-z]/,'Must contain lowercase letter').matches(/[A-Z]/,'Must contain uppercase letter').matches(/[0-9]/,'Must contain number').required('Password is required')// Confirm password
confirmPassword: yup.string().oneOf([yup.ref('password')],'Passwords must match').required('Please confirm password')// Phone number
phone: yup.string().matches(/^\+?[1-9]\d{1,14}$/,'Invalid phone number').required('Phone is required')// Optional field with validation when present
website: yup.string().url('Must be a valid URL').nullable()// Number with range
quantity: yup.number().min(1,'Minimum 1').max(100,'Maximum 100').required('Quantity required')// Array with minimum items
tags: yup.array().of(yup.string()).min(1,'Select at least one tag')
Conditional Validation
constschema=yup.object({hasCompany: yup.boolean(),companyName: yup.string().when('hasCompany',{is: true,then: (schema)=>schema.required('Company name required'),otherwise: (schema)=>schema.nullable(),}),});
constEditItemForm=({ item }: {item: Item})=>{const[updateItem]=useUpdateItemMutation({onCompleted: ()=>toast.success({title: 'Saved'}),onError: (error)=>{console.error('updateItem failed:',error);toast.error({title: 'Save failed'});},});constformik=useFormik({initialValues: {name: item.name,description: item.description??'',},enableReinitialize: true,// Update when item prop changes
validationSchema,onSubmit: async(values)=>{awaitupdateItem({variables: {id: item.id,input: values},});},});// Track if form has changesconsthasChanges=formik.dirty;return(<VStackgap="$4">{/* Form fields */}<ButtononPress={formik.handleSubmit}isDisabled={!hasChanges||!formik.isValid||formik.isSubmitting}isLoading={formik.isSubmitting}>
Save Changes
</Button></VStack>);};
Form State Helpers
const{
values,// Current form values
errors,// Validation errors
touched,// Fields that have been touched
isValid,// Form passes validation
isSubmitting,// Submit in progress
dirty,// Values differ from initial
handleSubmit,// Submit handler
handleChange,// Change handler
handleBlur,// Blur handler
setFieldValue,// Set single field
setFieldTouched,// Mark field touched
resetForm,// Reset to initial values
setSubmitting,// Control submitting state}=formik;