UNPKG

@ewb/reach-react

Version:
55 lines (54 loc) 2.03 kB
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 {};