@arco-design/web-react
Version:
Arco Design React UI Library.
96 lines (95 loc) • 3.83 kB
TypeScript
import React from 'react';
import Control from './control';
import { FieldError, FormProps, FieldState, KeyType, SubmitStatus, FormValidateFn } from './interface';
export declare type DeepPartial<T> = T extends object ? {
[P in keyof T]?: DeepPartial<T[P]>;
} : T;
/**
* 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 submitStatus;
private registerFields;
private registerWatchers;
private registerStateWatchers;
private registerFormWatchers;
private touchedFields;
private store;
private initialValues;
private callbacks;
private notifyWatchers;
private notifyFormWatcher;
private notifyStateWatchers;
private triggerValuesChange;
private triggerTouchChange;
innerCollectFormState: () => void;
innerSetCallbacks: (values: Pick<FormProps<FormData, FieldValue, FieldKey>, innerCallbackType> & {
onValidateFail?: (errors: { [key in FieldKey]: FieldError<FieldValue>; }) => void;
}) => void;
registerFormWatcher: (item: any) => () => void;
registerStateWatcher: (item: any) => () => void;
registerWatcher: (item: any) => () => void;
registerField: (item: Control<FormData, FieldValue, FieldKey>) => () => void;
private getRegisteredFields;
getRegisteredField: (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>;
innerGetStoreStatus: () => {
submitStatus: SubmitStatus;
};
innerGetFieldValue: (field: FieldKey) => any;
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>;
private toggleSubmitStatus;
submit: () => void;
getFieldsState: (fields?: FieldKey[]) => { [key in FieldKey]?: FieldState<FieldValue>; };
clearFields: (fieldKeys?: FieldKey | FieldKey[]) => void;
}
export default Store;