import { useStepsForm as useStepsFormSF, UseStepsFormConfig, } from "sunflower-antd"; import { FormInstance, FormProps } from "antd"; import { HttpError, UseFormProps as UseFormPropsCore, BaseRecord, } from "@pankod/refine-core"; import { useForm, UseFormProps, UseFormReturnType } from "../useForm"; export type UseStepsFormFromSFReturnType = { current: number; gotoStep: (step: number) => void; stepsProps: { current: number; onChange: (currentStep: number) => void; }; formProps: FormProps; formLoading: boolean; defaultFormValuesLoading: boolean; formValues: {}; initialValues: {}; formResult: undefined; form: FormInstance; submit: (values?: TVariables) => Promise; }; export type UseStepsFormReturnType< TData extends BaseRecord = BaseRecord, TError extends HttpError = HttpError, TVariables = {}, > = UseFormReturnType & UseStepsFormFromSFReturnType; export type UseStepsFormProps< TData extends BaseRecord = BaseRecord, TError extends HttpError = HttpError, TVariables = {}, > = UseFormPropsCore & UseFormProps & UseStepsFormConfig; /** * `useStepsForm` hook allows you to split your form under an Ant Design based {@link https://ant.design/components/steps/ Steps} component and provides you with a few useful functionalities that will help you manage your form. * * @see {@link https://refine.dev/docs/ui-frameworks/antd/hooks/form/useStepsForm} for more details. * * @typeParam TData - Result data of the query extends {@link https://refine.dev/docs/api-references/interfaceReferences#baserecord `BaseRecord`} * @typeParam TError - Custom error object that extends {@link https://refine.dev/docs/api-references/interfaceReferences#httperror `HttpError`} * @typeParam TVariables - Values for params. default `{}` * * */ export const useStepsForm = < TData extends BaseRecord = BaseRecord, TError extends HttpError = HttpError, TVariables = {}, >( props: UseStepsFormProps = {}, ): UseStepsFormReturnType => { const useFormProps = useForm({ ...props }); const { form, formProps } = useFormProps; const stepsPropsSunflower = useStepsFormSF({ isBackValidate: false, form: form, submit: (values: any) => { formProps?.onFinish?.(values); }, ...props, }); return { ...useFormProps, ...stepsPropsSunflower, formProps: { ...stepsPropsSunflower.formProps, ...useFormProps.formProps, onValuesChange: formProps?.onValuesChange, onKeyUp: formProps?.onKeyUp, }, saveButtonProps: { ...useFormProps.saveButtonProps, onClick: () => stepsPropsSunflower.submit(), }, }; };