import { Formik, type FormikHelpers, type FormikSharedConfig, type FormikValues } from 'formik'; import type { ComponentType } from 'react'; import type { Schema } from 'yup'; import { useStyles } from './Form.styles'; import FormButtons from './FormButtons'; import Inputs from './Inputs'; import type { Group, InputProps } from './Inputs/models'; import { FormSection } from './Section/FormSection'; export enum GroupDirection { Horizontal = 'horizontal', Vertical = 'vertical' } export type FormProps = { Buttons?: ComponentType; areGroupsOpen?: boolean; children?: JSX.Element; className?: string; groupDirection?: GroupDirection; groups?: Array; groupsClassName?: string; initialValues: T; inputsClassName?: string; inputs: Array; isCollapsible?: boolean; isLoading?: boolean; submit: (values: T, bag: FormikHelpers) => void | Promise; validate?: (values: FormikValues) => void; validationSchema: Schema; } & Omit, 'isInitialValid'>; const Form = ({ children, className, groupsClassName, inputsClassName, areGroupsOpen, initialValues, validate, validationSchema, submit, groups, inputs, Buttons = FormButtons, isLoading = false, isCollapsible = false, groupDirection = GroupDirection.Vertical, ...formikSharedConfig }: FormProps): JSX.Element => { const { cx, classes } = useStyles(); if (isLoading) { return ( ); } return ( enableReinitialize initialValues={initialValues} onSubmit={submit} validate={validate} validationSchema={validationSchema} {...formikSharedConfig} >
{children}
); }; export { Form };