import { type DefaultValues, type FieldErrors } from 'react-hook-form'; import { useForm } from '../useForm'; import type { AutoSaveStrategy, ChangeStepReason, WizardStep, WizardStepId } from './types'; export type UseFormWizardParams> = { /** * Значения полей формы по умолчанию */ defaultValues?: DefaultValues; /** * Идентификатор начального шага */ initialStepId?: WizardStepId; /** * Стратегия автосохранения формы * - `changeStep` — автосохранение при смене шага. * - `changeValues` — автосохранение при изменении значения поля. * @default `changeStep` */ autoSaveStrategy?: AutoSaveStrategy; /** * Если true, форма будет недоступна для редактирования. */ isDisabled?: boolean; /** * Массив шагов формы. * @example * const steps = [ * { id: 1, label: 'Step 1', component: StepOneComponent }, * { id: 2, label: 'Step 2', component: StepTwoComponent } * ]; */ steps: WizardStep[]; /** * Функция, вызываемая при смене шага. * Если при переходе на следующий возвращает promise, то переход будет заблокирован до завершения promise * @param nextStepId - Идентификатор шага, на который происходит переход. * @param options - Объект с дополнительными параметрами смены шага. * @param options.reason - Причина смены шага. * @param options.autosavePromise - Promise автосохранения. Используется, если необходимо дождаться автосохранения для перехода на следующий шаг * @example * onChangeStep: (nextStepId, { reason, autosavePromise }) => { * if (reason === 'nextStep') { * // переход на следующий шаг будет заблокирован, пока не произошло автосохранение * return autosavePromise; * } * } */ onChangeStep?: (nextStepId: WizardStepId, meta: { reason: ChangeStepReason; autosavePromise?: Promise; }) => void | Promise; /** * Функция, вызываемая при автосохранение формы. * @param formValues - Значения формы. */ onAutoSave?: (formValues: Partial) => Promise; /** * Функция,вызываемая при возникновении ошибок во время операции авто-сохранения */ onAutoSaveError?: (error: Error) => void; /** * Функция, вызываемая при отправке формы. * @param formValues - Значения формы. */ onSubmit: (formValues: TFormValues) => void | Promise; }; /** * Тип, описывающий возвращаемые значения из useFormWizard. * @template TFormValues - Тип значений формы. */ export type UseFormWizardResult> = { /** * Объект формы, возвращаемый из useForm. */ form: ReturnType>; /** * Идентификатор текущего шага. */ currentStepId: WizardStepId; /** * Указывает, является ли текущий шаг первым. */ isFirstStep: boolean; /** * Указывает, является ли текущий шаг последним. */ isLastStep: boolean; /** * Массив шагов, которые нужно отобразить. */ steps: WizardStep[]; /** * Функция для установки любого текущего шага */ setCurrentStepId: (stepId: WizardStepId) => void; /** * Функция для установки любого текущего шага по индексу. * Используется для быстрого возврата на предыдущие шаги */ onClickStep: (index: number) => void; /** * Функция для перехода на предыдущий шаг. */ onPrevStep: () => void; /** * Функция для отправки формы. */ onSubmit: (formValues: TFormValues) => void | Promise; /** * Функция вызывается если есть ошибка валидации при отправке формы или при переходе на следующий шаг */ onSubmitError: (errors: FieldErrors) => void; }; /** * Хук useFormWizard предназначен для управления многошаговыми формами. * * @example * const allSteps = [ * { id: 1, label: 'Step 1', component: StepOneComponent }, * { id: 2, label: 'Step 2', component: StepTwoComponent } * ]; * * const handleSubmit = (formValues) => {} * * const formWizardProps = useFormWizard({ steps: allSteps, onSubmit: handleSubmit}); * * */ export declare const useFormWizard: >({ initialStepId, defaultValues, isDisabled, steps, autoSaveStrategy, onChangeStep, onAutoSave, onSubmit, onAutoSaveError, }: UseFormWizardParams) => UseFormWizardResult;