UNPKG

@sms-frontend/components

Version:

SMS Design React UI Library.

78 lines (77 loc) 3.27 kB
/// <reference types="react" /> import Control from './control'; import { FieldError, FormProps, KeyType, FormValidateFn } from './interface'; declare type DeepPartial<T> = T extends string | number | bigint | boolean | null | undefined | symbol | Date ? T | undefined : T extends Array<infer U> ? Array<DeepPartial<U>> : T extends ReadonlyArray<infer U> ? ReadonlyArray<DeepPartial<U>> : { [K in keyof T]?: DeepPartial<T[K]>; }; /** * setFieldValue: setFieldsValue, setFieldValue, setFields * innerSetValue: such as Input change * reset: 重置 */ export declare type NotifyType = 'setFieldValue' | 'reset' | 'innerSetValue'; export declare type innerCallbackType = 'onValuesChange' | 'onSubmit' | 'onChange' | 'onSubmitFailed'; export declare type StoreChangeInfo<T> = { prev: any; field?: T | T[]; isFormList?: boolean; ignore?: boolean; changeValues?: { [key in KeyType]: unknown; }; data?: { errors?: FieldError; warnings?: React.ReactNode; touched?: boolean; }; }; declare class Store<FormData = any, FieldValue = FormData[keyof FormData], FieldKey extends KeyType = keyof FormData> { private registerFields; private touchedFields; private store; private initialValues; private callbacks; private triggerValuesChange; private triggerTouchChange; innerSetCallbacks: (values: Pick<FormProps<FormData, FieldValue, FieldKey>, innerCallbackType> & { onValidateFail?: (errors: { [key in FieldKey]: FieldError<FieldValue>; }) => void; }) => void; registerField: (item: Control<FormData, FieldValue, FieldKey>) => () => void; private getRegistedFields; getRegistedField: (field?: FieldKey) => Control<FormData, FieldValue, FieldKey>; private notify; innerSetInitialValues: (values: Partial<FormData>) => void; innerSetInitialValue: (field: FieldKey, value: FieldValue) => void; private _getIterativelyKeysByField; private _inTouchFields; private _popTouchField; private _pushTouchField; /** * * 内部使用,更新value,会同时触发onChange 和 onValuesChange * @options.isFormList 强制更新field对应的组件包括其子组件,form */ innerSetFieldValue: (field: FieldKey, value: FieldValue, options?: { isFormList?: boolean; ignore?: boolean; }) => void; innerGetStore: () => Partial<FormData>; getTouchedFields: () => FieldKey[]; setFieldValue: (field: FieldKey, value: FieldValue) => void; setFieldsValue: (values: DeepPartial<FormData>) => void; setFields: (obj: { [field in FieldKey]?: { value?: FieldValue; error?: FieldError<FieldValue>; touched?: boolean; warning?: React.ReactNode; }; }) => void; getFieldValue: (field: FieldKey) => FieldValue; getFieldError: (field: FieldKey) => FieldError<FieldValue> | null; getFieldsError: (fields?: FieldKey[]) => { [key in FieldKey]?: FieldError<FieldValue>; }; getFields: () => Partial<FormData>; getFieldsValue: (fields?: FieldKey[]) => Partial<FormData>; resetFields: (fieldKeys?: FieldKey | FieldKey[]) => void; validate: FormValidateFn<FormData, FieldValue, FieldKey>; submit: () => void; } export default Store;