minh-custom-hooks-release
Version:
My custom hooks for working easier while developing react web app
34 lines (33 loc) • 1.56 kB
TypeScript
import { DependencyList } from 'react';
import { UnwrapPromise } from './useTask';
export type UseTaskEffectProps<TTask extends (...args: []) => Promise<any>, TError extends any = any> = {
task: TTask;
deps: DependencyList | string | number;
enabled?: boolean;
immediateFirstFetch?: boolean;
loadingAtInit?: boolean;
startLoadingOnBeforeStart?: boolean;
onBeforeStart?: () => Promise<boolean>;
onInit?: (refetch: () => any, cancel: () => void, reset: () => void) => void;
onSuccess?(data: UnwrapPromise<ReturnType<TTask>> | undefined): void;
onError?(error: TError | undefined): void;
onFinally?(): void;
preserve?: boolean;
preserveWhenError?: boolean;
debounceTime?: number;
resetOnUnmount?: boolean;
};
export default function useTaskEffect<TTask extends (...args: []) => Promise<any>, TError extends any>({ task, onBeforeStart, onInit, onSuccess, onError, onFinally, preserve, preserveWhenError, deps, enabled, loadingAtInit, startLoadingOnBeforeStart, debounceTime, resetOnUnmount, immediateFirstFetch, }: UseTaskEffectProps<TTask, TError>): {
data: UnwrapPromise<ReturnType<TTask>> | undefined;
error: TError | undefined;
state: "IDLE" | "SUCCESS" | "CANCELED" | "PENDING" | "FAIL";
isIdle: boolean;
isLoading: boolean;
isSuccess: boolean;
isError: boolean;
isEnabled: boolean;
refetch: () => void;
refetchAsync: (() => Promise<UnwrapPromise<ReturnType<TTask>> | undefined>) | (() => Promise<void>);
cancel: () => void;
reset: () => void;
};