import { HTMLAttributes, ReactNode } from "react";
import { AutocompleteRenderOptionState, SxProps, Theme } from "@mui/material";
import * as Yup from "yup";
import { Control, UnpackNestedValue, UseFormReset, UseFormReturn, UseFormSetValue } from "react-hook-form";
import dayjs from "dayjs";
export declare type DefaultFormModalType = "string" | "textarea" | "number" | "select" | "password" | "multiple-select" | "async-select" | "date-time-picker";
export interface DefaultFormModelProps {
type: DefaultFormModalType;
label: string | ReactNode;
name?: string;
sx?: SxProps;
}
export declare type DefaultOptionsProps = {
label: string;
value: string;
};
interface OptionsFormModelProps extends DefaultFormModelProps {
options: DefaultOptionsProps[];
}
interface NumberFormModelProps extends DefaultFormModelProps {
suffix?: string;
decimalScale?: number;
prefix?: string;
allowNegative?: boolean;
}
interface MultipleSelectFormModelProps extends DefaultFormModelProps {
options: string[];
limitTags?: number;
mappingLabel?: string;
}
interface AsyncSelectFormModelProps extends DefaultFormModelProps {
options: K[];
setInputValue: any;
setValue: any;
setOptions: any;
getOptionLabel: (option: K) => string;
renderOption?: (props: HTMLAttributes, option: K, state: AutocompleteRenderOptionState) => ReactNode;
isOptionEqualToValue: (option: K, value: K) => boolean;
}
interface DateTimePickerProps extends DefaultFormModelProps {
minDateTime?: dayjs.Dayjs;
inputFormat?: string;
}
interface TextAreaFormProps extends DefaultFormModelProps {
rows?: number;
}
export declare type FormModelProps = ({
type: "select";
} & OptionsFormModelProps) | ({
type: "number";
} & NumberFormModelProps) | ({
type: "multiple-select";
} & MultipleSelectFormModelProps) | ({
type: "async-select";
} & AsyncSelectFormModelProps) | ({
type: "date-time-picker";
} & DateTimePickerProps) | ({
type: "textarea";
} & TextAreaFormProps) | ({
type: "string" | "password";
} & DefaultFormModelProps);
export declare type FormModel = {
[key: string]: FormModelProps;
};
export declare type FormButtonProps = {
control: Control;
currentValue: UnpackNestedValue;
setValue: UseFormSetValue;
reset: UseFormReset;
};
export declare type FormBaseProps = {
formModel: FormModel;
onFinish: (values: UnpackNestedValue) => void;
initialValue?: T;
formButton?: ((props: FormButtonProps) => ReactNode) | ReactNode;
validationSchema?: Yup.SchemaOf;
form?: UseFormReturn;
breakpoints?: {
[Key: string]: number;
};
enableReInitialValue?: boolean;
};
export {};