state-management-utilities
Version:
State management utilities
248 lines (247 loc) • 11.8 kB
TypeScript
import { Hydrated } from "../center";
import { TypeStateManagerConfigs } from "../state-manager";
import { ReactStateManager } from "./state-manager";
import { ReactStoreManager } from "./store";
export declare class ReactFormManager<DataType extends Record<string, any>, ErrorType = string[] | undefined | null, Meta = Record<string, any>> {
protected _config: ReactFormManagerConfig<DataType, ErrorType, Meta>;
protected readonly _KEYS: (keyof Required<DataType>)[];
protected _fields: {
[Key in keyof Required<DataType>]: Entities<DataType[Key], ErrorType>;
};
get fields(): Readonly<{
[Key in keyof Required<DataType>]: Entities<DataType[Key], ErrorType>;
}>;
get KEYS(): (keyof Required<DataType>)[];
get meta(): Meta;
get hooks(): Readonly<{
useField: <Key extends keyof DataType>(name: Key) => {
value: DataType[Key];
setValue: (newValue: DataType[Key]) => void;
error: { [Key_1 in keyof DataType]?: ErrorType | undefined; }[Key];
setError: (newState: { [Key_1 in keyof DataType]?: ErrorType | undefined; }[Key]) => void;
touched: { [Key_2 in keyof DataType]?: boolean | undefined; }[Key];
setTouched: (newState: { [Key_2 in keyof DataType]?: boolean | undefined; }[Key]) => void;
modified: { [Key_3 in keyof DataType]?: boolean | undefined; }[Key];
setModified: (newState: { [Key_3 in keyof DataType]?: boolean | undefined; }[Key]) => void;
setAsTouched: () => void;
setAsModified: () => void;
_setValue: (newState: DataType[Key]) => void;
};
useData: () => [state: DataType, setState: (newValue: DataType) => void];
useErrors: () => [state: { [Key in keyof DataType]?: ErrorType | undefined; }, setState: (newValue: { [Key in keyof DataType]?: ErrorType | undefined; }) => void];
useTouched: () => [state: { [Key in keyof DataType]?: boolean | undefined; }, setState: (newValue: { [Key in keyof DataType]?: boolean | undefined; }) => void];
useModified: () => [state: { [Key in keyof DataType]?: boolean | undefined; }, setState: (newValue: { [Key in keyof DataType]?: boolean | undefined; }) => void];
useForm: () => {
data: DataType;
setData: (newValue: DataType) => void;
errors: { [Key in keyof DataType]?: ErrorType | undefined; };
setErrors: (newValue: { [Key in keyof DataType]?: ErrorType | undefined; }) => void;
touched: { [Key in keyof DataType]?: boolean | undefined; };
setTouched: (newValue: { [Key in keyof DataType]?: boolean | undefined; }) => void;
modified: { [Key in keyof DataType]?: boolean | undefined; };
setModified: (newValue: { [Key in keyof DataType]?: boolean | undefined; }) => void;
};
useIsModified: () => [isModified: boolean];
useIsTouched: () => [isTouched: boolean];
useHasErrors: () => [hasErrors: boolean];
}>;
protected readonly _truthyValues: {
[Key in keyof Required<DataType>]: true;
};
protected readonly _falsyValues: {
[Key in keyof Required<DataType>]: false;
};
protected readonly _data: ReactStoreManager<DataType>;
get data(): { [Key in keyof Required<DataType>]: ReactStateManager<DataType[Key]>; };
protected readonly _errors: ReactStoreManager<{
[Key in keyof DataType]?: ErrorType;
}>;
get errors(): { [Key_1 in keyof Required<{ [Key in keyof DataType]?: ErrorType | undefined; }>]: ReactStateManager<{ [Key in keyof DataType]?: ErrorType | undefined; }[Key_1]>; };
protected readonly _touched: ReactStoreManager<{
[Key in keyof DataType]?: boolean;
}>;
get touched(): { [Key_1 in keyof Required<{ [Key in keyof DataType]?: boolean | undefined; }>]: ReactStateManager<{ [Key in keyof DataType]?: boolean | undefined; }[Key_1]>; };
protected readonly _modified: ReactStoreManager<{
[Key in keyof DataType]?: boolean;
}>;
get modified(): { [Key_1 in keyof Required<{ [Key in keyof DataType]?: boolean | undefined; }>]: ReactStateManager<{ [Key in keyof DataType]?: boolean | undefined; }[Key_1]>; };
get value(): {
data: DataType;
errors: {
[Key in keyof DataType]: ErrorType | undefined;
};
touched: {
[Key in keyof DataType]: boolean | undefined;
};
modified: {
[Key in keyof DataType]: boolean | undefined;
};
};
set value(newValues: {
data?: Partial<DataType>;
errors?: {
[Key in keyof DataType]?: ErrorType | undefined;
};
touched?: {
[Key in keyof DataType]?: boolean | undefined;
};
modified?: {
[Key in keyof DataType]?: boolean | undefined;
};
});
update(updater: {
data?: Partial<DataType>;
errors?: {
[Key in keyof DataType]?: ErrorType | undefined;
};
touched?: {
[Key in keyof DataType]?: boolean | undefined;
};
modified?: {
[Key in keyof DataType]?: boolean | undefined;
};
} | ((prev: {
data: DataType;
errors: {
[Key in keyof DataType]: ErrorType | undefined;
};
touched: {
[Key in keyof DataType]: boolean | undefined;
};
modified: {
[Key in keyof DataType]: boolean | undefined;
};
}) => {
data?: Partial<DataType>;
errors?: {
[Key in keyof DataType]?: ErrorType | undefined;
};
touched?: {
[Key in keyof DataType]?: boolean | undefined;
};
modified?: {
[Key in keyof DataType]?: boolean | undefined;
};
})): this;
protected readonly _validators: {
[Key in keyof Required<DataType>]: (value: any) => void;
} | undefined;
protected readonly _hooks: Readonly<{
useField: <Key extends keyof DataType>(name: Key) => {
value: DataType[Key];
setValue: (newValue: DataType[Key]) => void;
error: { [Key_1 in keyof DataType]?: ErrorType | undefined; }[Key];
setError: (newState: { [Key_1 in keyof DataType]?: ErrorType | undefined; }[Key]) => void;
touched: { [Key_2 in keyof DataType]?: boolean | undefined; }[Key];
setTouched: (newState: { [Key_2 in keyof DataType]?: boolean | undefined; }[Key]) => void;
modified: { [Key_3 in keyof DataType]?: boolean | undefined; }[Key];
setModified: (newState: { [Key_3 in keyof DataType]?: boolean | undefined; }[Key]) => void;
setAsTouched: () => void;
setAsModified: () => void;
_setValue: (newState: DataType[Key]) => void;
};
useData: () => [state: DataType, setState: (newValue: DataType) => void];
useErrors: () => [state: { [Key in keyof DataType]?: ErrorType | undefined; }, setState: (newValue: { [Key in keyof DataType]?: ErrorType | undefined; }) => void];
useTouched: () => [state: { [Key in keyof DataType]?: boolean | undefined; }, setState: (newValue: { [Key in keyof DataType]?: boolean | undefined; }) => void];
useModified: () => [state: { [Key in keyof DataType]?: boolean | undefined; }, setState: (newValue: { [Key in keyof DataType]?: boolean | undefined; }) => void];
useForm: () => {
data: DataType;
setData: (newValue: DataType) => void;
errors: { [Key in keyof DataType]?: ErrorType | undefined; };
setErrors: (newValue: { [Key in keyof DataType]?: ErrorType | undefined; }) => void;
touched: { [Key in keyof DataType]?: boolean | undefined; };
setTouched: (newValue: { [Key in keyof DataType]?: boolean | undefined; }) => void;
modified: { [Key in keyof DataType]?: boolean | undefined; };
setModified: (newValue: { [Key in keyof DataType]?: boolean | undefined; }) => void;
};
useIsModified: () => [isModified: boolean];
useIsTouched: () => [isTouched: boolean];
useHasErrors: () => [hasErrors: boolean];
}>;
reset(resetValues?: {
data?: Partial<DataType>;
modified?: {
[Key in keyof DataType]?: boolean;
};
touched?: {
[Key in keyof DataType]?: boolean;
};
errors?: {
[Key in keyof DataType]?: ErrorType;
};
}): void;
setAllAsTouched(): void;
setAllAsUntouched(): void;
setAllAsModified(): void;
setAllAsUnmodified(): void;
getModifiedValues({ defaultFields, }?: {
defaultFields: (keyof Required<DataType>)[];
}): Partial<DataType>;
get hasErrors(): boolean;
get isModified(): boolean;
get isTouched(): boolean;
hydrate(value: {
data: DataType;
errors?: {
[Key in keyof DataType]?: ErrorType | undefined;
};
touched?: {
[Key in keyof DataType]?: boolean | undefined;
};
modified?: {
[Key in keyof DataType]?: boolean | undefined;
};
}): {
update: (record: Hydrated["data"]) => void;
value: {
data: DataType;
errors?: { [Key in keyof DataType]?: ErrorType | undefined; };
touched?: { [Key in keyof DataType]?: boolean | undefined; };
modified?: { [Key in keyof DataType]?: boolean | undefined; };
};
};
fulfill(): Promise<any>;
constructor(initialValues: {
[Key in keyof Required<DataType>]: DataType[Key];
}, _config?: ReactFormManagerConfig<DataType, ErrorType, Meta>);
}
export declare function form<DataType extends Record<string, any>, ErrorType = string[] | undefined | null, Meta = Record<string, any>>(initialValues: {
[Key in keyof Required<DataType>]: DataType[Key];
}, config?: ReactFormManagerConfig<DataType, ErrorType, Meta>): ReactFormManager<DataType, ErrorType, Meta>;
declare class Entities<DataType, ErrorType> {
readonly data: ReactStateManager<DataType>;
readonly error: ReactStateManager<ErrorType | undefined>;
readonly modified: ReactStateManager<boolean | undefined>;
readonly touched: ReactStateManager<boolean | undefined>;
constructor(data: ReactStateManager<DataType>, error: ReactStateManager<ErrorType | undefined>, modified: ReactStateManager<boolean | undefined>, touched: ReactStateManager<boolean | undefined>);
get values(): EntitiesType<DataType, ErrorType>;
set values(values: EntitiesType<DataType, ErrorType>);
update(updater: (prev: EntitiesType<DataType, ErrorType>) => EntitiesType<DataType, ErrorType>): this;
}
type EntitiesType<DataType, ErrorType> = {
data: DataType;
error: ErrorType | undefined;
modified: boolean | undefined;
touched: boolean | undefined;
};
export type ReactFormManagerConfig<DataType extends Record<string, any>, ErrorType = string[] | undefined | null, Meta = Record<string, any>> = {
uid: string;
getValidator?: (fieldName: keyof DataType, form: ReactFormManager<DataType, ErrorType>) => (value: any) => void;
onReset?: () => void;
hasError?: (error: ErrorType | undefined) => boolean;
meta?: Meta;
errors?: {
[Key in keyof DataType]?: StateConfig<ErrorType | undefined>;
};
touched?: {
[Key in keyof DataType]?: StateConfig<boolean | undefined>;
};
modified?: {
[Key in keyof DataType]?: StateConfig<boolean | undefined>;
};
data?: {
[Key in keyof DataType]?: StateConfig<DataType[Key]>;
};
};
type StateConfig<DataType> = Omit<TypeStateManagerConfigs<DataType>, "uid">;
export {};