import { SubmitHandler, useForm } from 'react-hook-form' import { CreateField } from '../interfaces/create' import { Box, Button, CircularProgress, Stack, TextField, Typography } from '@mui/material'; import { useEffect } from 'react'; interface Props { title?: string; submitHandler?: any; fields: CreateField[]; submitButtonText?: string; mutateHandler?: any; defaultValues?: {}; watchValues?: string[]; } function FormFields({ title = '', submitHandler, fields, submitButtonText = 'Сохранить', mutateHandler, defaultValues }: Props) { const getDefaultValues = (fields: CreateField[]) => { let result: { [key: string]: string | boolean } = {} fields.forEach((field: CreateField) => { result[field.key] = field.defaultValue || defaultValues?.[field.key as keyof {}] }) return result } const { register, handleSubmit, watch, formState: { errors, isSubmitting, dirtyFields } } = useForm({ defaultValues: getDefaultValues(fields) }) const onSubmit: SubmitHandler = async (data) => { try { await submitHandler?.(data).then(() => { mutateHandler?.() }) } catch (error) { console.error(error) } } return (
{title} {fields.map((field: CreateField) => { return ( { if (field.watch) { if (watch(field.watch) != val) { return field.watchMessage || '' } } } })} error={!!errors[field.key]} /> ) })}
) } export default FormFields