import type { FieldValues } from 'react-hook-form'; import { useState } from 'react'; import type { FormerProps } from './Former.types'; export type UseFormerStateProps = Pick< FormerProps, 'onChange' | 'onClose' | 'opened' | 'primeData' | 'request' | 'values' >; export const useFormerState = ( options?: Partial> ) => { const [state, setState] = useState>({ onChange: options?.onChange, onClose: options?.onClose ?? (() => setState((cv) => ({ ...cv, opened: false }))), opened: options?.opened ?? false, primeData: options?.primeData ?? options?.values, request: options?.request ?? 'insert', values: options?.values, }); const updateState = (updates: Partial>) => { setState((prev) => ({ ...prev, ...updates })); }; const { onChange, onClose, opened, ...formerProps } = state; return { former: { ...formerProps, onChange }, formerWrapper: { onClose, opened } as { onClose: Required>['onClose']; opened: Required>['opened']; }, open: (request: UseFormerStateProps['request'], data: UseFormerStateProps['values']) => { setState((cv) => ({ ...cv, opened: true, primeData: data, request, values: data })); }, updateState, }; };