minh-custom-hooks-release
Version:
My custom hooks for working easier while developing react web app
43 lines (42 loc) • 1.76 kB
TypeScript
export declare enum EnumTaskState {
IDLE = "IDLE",
PENDING = "PENDING",
SUCCESS = "SUCCESS",
FAIL = "FAIL",
CANCELED = "CANCELED"
}
export type UnwrapPromise<T> = T extends Promise<infer U> ? U : T;
export type TTaskType = (...args: any[]) => Promise<any>;
export type UseTaskProps<TTask extends TTaskType, TError extends any = any> = {
task: TTask;
startLoadingOnBeforeStart?: boolean;
onBeforeStart?: () => Promise<boolean>;
onInit?: (run: (...args: any[]) => any, cancel: () => void, reset: () => void) => void;
onSuccess?(data: UnwrapPromise<ReturnType<TTask>> | undefined, others: {
params: [...Parameters<TTask>];
}): void;
onError?(error: TError | undefined, others: {
params: [...Parameters<TTask>];
}): void;
onFinally?(others?: {
params: [...Parameters<TTask>];
}): void;
preserve?: boolean;
preserveWhenError?: boolean;
loadingAtInit?: boolean;
debounceTime?: number;
resetOnUnmount?: boolean;
};
export default function useTask<TTask extends (...args: any[]) => Promise<any>, TError extends any>({ task, startLoadingOnBeforeStart, onBeforeStart, onInit, onSuccess, onError, onFinally, preserve, preserveWhenError, loadingAtInit, debounceTime, resetOnUnmount, }: UseTaskProps<TTask, TError>): {
data: UnwrapPromise<ReturnType<TTask>> | undefined;
error: TError | undefined;
state: "IDLE" | "SUCCESS" | "CANCELED" | "PENDING" | "FAIL";
isIdle: boolean;
isLoading: boolean;
isSuccess: boolean;
isError: boolean;
run: (...args: Parameters<typeof task>) => void;
runAsync: (...args: Parameters<typeof task>) => Promise<UnwrapPromise<ReturnType<TTask>> | undefined>;
cancel: () => void;
reset: () => void;
};