@ewb/reach-react
Version:
React Resource and Fetch stuff
55 lines (54 loc) • 2.03 kB
TypeScript
import { ChangeEvent, Dispatch, SetStateAction } from 'react';
import { IReachOptions } from '@ewb/reach';
export interface IUseCrudProps<T extends object, RET = T> {
idKey: keyof T;
subPath?: string;
disableAutoSave?: boolean;
initWithGet?: boolean;
reachOptions?: Omit<IReachOptions, 'method' | 'data'>;
dontSetStateOnPost?: boolean;
alwaysPatch?: boolean;
alwaysPost?: boolean;
forcePatch?: (keyof T)[];
}
declare type IUseCrudMeta<T extends object> = {
[key in keyof T]?: any;
};
export interface IUseCrudState<T extends object, E> {
path: string;
busy: boolean;
data: Partial<T>;
initialData: Partial<T>;
edited: Edited<T>;
meta: IUseCrudMeta<T>;
dirty: boolean;
error?: E;
}
declare type Edited<T> = {
[key in keyof T]?: boolean;
};
export interface IUseCrudActions {
read: () => Promise<void>;
delete: () => Promise<void>;
}
declare type ValidEvents = HTMLInputElement | HTMLTextAreaElement;
export declare type IUseCrudSetFn<T extends object> = <K extends keyof T>(key: K, disableAutosave?: boolean) => (event: ChangeEvent<ValidEvents> | T[K], meta?: any) => void;
export declare type IUseCrudSaveFn<T> = () => Promise<T | null>;
export declare type IUseCrudSetDataFn<T extends object> = (data: Partial<T>, meta?: IUseCrudMeta<T>, isEdited?: boolean) => void;
export declare type IUseCrudRet<T extends object, E, RET = T> = [
IUseCrudState<T, E>,
IUseCrudSetFn<T>,
IUseCrudSaveFn<RET>,
IUseCrudSetDataFn<T>,
IUseCrudActions,
Dispatch<SetStateAction<IUseCrudState<T, E>>>
] & {
state: IUseCrudState<T, E>;
set: IUseCrudSetFn<T>;
save: IUseCrudSaveFn<RET>;
setData: IUseCrudSetDataFn<T>;
actions: IUseCrudActions;
setState: Dispatch<SetStateAction<IUseCrudState<T, E>>>;
};
export declare function useCrud<T extends object, E = any, RET = T>(path: string, data: Partial<T>, props: IUseCrudProps<T>): IUseCrudRet<T, E, RET>;
export {};