@cmk/fe_utils
Version:
frontend utility library
82 lines (80 loc) • 3.27 kB
TypeScript
import { ReactNode } from 'react';
import { CustomFieldDefinition } from './CustomField';
import { GenericInputFieldProps, InputFieldType } from '../../inputs/types';
import { FormDataType } from '../types';
export type FormFieldType = InputFieldType | 'inject' | 'array' | 'object' | 'string-array';
type Width12 = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12;
type InputFieldLayoutProps = {
width12?: Width12 | {
xs: Width12;
sm?: Width12;
md?: Width12;
lg?: Width12;
xl?: Width12;
};
fillWidth?: boolean;
_prop_type?: string;
form?: {
defaultValue?: unknown;
showInArrayList?: boolean;
};
valueTransformer?: (formData: Record<string, unknown>) => unknown;
changeValueToFormDataTransformer?: (currentFormData: Record<string, unknown>, newValue: unknown) => Record<string, unknown>;
};
type ArrayInputFieldProps = {
type: 'array';
name: string;
enableDeleteFirst?: boolean;
form?: {
defaultValue?: unknown;
showInArrayList?: boolean;
};
label?: string;
};
type ObjectInputFieldProps = {
type: 'object';
name: string;
};
type StringArrayInputFieldProps = {
type: 'string-array';
name: string;
label: string;
enableDeleteFirst?: boolean;
};
export type StaticFieldDefinition<Type extends FormFieldType = FormFieldType> = InputFieldLayoutProps & {
type: Type;
} & (Type extends 'inject' ? CustomFieldDefinition<any, any> : Type extends InputFieldType ? Omit<GenericInputFieldProps<Type>, 'name' | 'value' | 'onChange'> & {
name: string;
} : Type extends 'array' ? ArrayInputFieldProps : Type extends 'object' ? ObjectInputFieldProps : Type extends 'string-array' ? StringArrayInputFieldProps : never);
export type DynamicFieldDefinition<Type extends FormFieldType = FormFieldType> = Omit<StaticFieldDefinition<Type>, 'disabled' | 'required' | 'options' | 'error' | 'helperText' | 'invisible' | 'hidden'> & {
disabled?: boolean | ((formData: FormDataType, rootFormData: FormDataType) => boolean);
required?: boolean | ((formData: FormDataType, rootFormData: FormDataType) => boolean);
options?: any[] | ((formData: FormDataType, rootFormData: FormDataType) => any[]);
error?: boolean | ((formData: FormDataType, rootFormData: FormDataType) => boolean);
helperText?: ReactNode | ((formData: FormDataType, rootFormData: FormDataType) => ReactNode);
invisible?: boolean | ((formData: FormDataType, rootFormData: FormDataType) => boolean);
hidden?: boolean | ((formData: FormDataType, rootFormData: FormDataType) => boolean);
};
export type FieldProps = {
formData: FormDataType;
onChangeFormData: any;
rootFormData: FormDataType;
onChangeFormDataRoot: any;
_path: (string | number)[];
onBeforeChange?: any;
showError?: boolean;
field: DynamicFieldDefinition<InputFieldType | 'inject'>;
files?: {
[key: string]: {
file: File;
filename: string;
}[];
};
onFileChange?: any;
fieldProps?: Partial<GenericInputFieldProps>;
useChangeCompleted?: boolean;
fields: any;
subforms: any;
};
export declare const Field: (props: FieldProps) => import("react/jsx-runtime").JSX.Element | null;
export {};