import React from 'react'; import invariant from 'tiny-invariant'; import { Endpoint, Method } from './endpoint'; import { LazyRequestConfig, useLazyRequest } from './lazy-request-hook'; export type RequestConfig = Readonly< LazyRequestConfig & { skip?: boolean, } > export function useRequest, V = Record, P = void>( endpoint: Endpoint, config?: RequestConfig, ) { invariant( endpoint.method !== Method.DELETE, `You cannot use useRequest with ${endpoint.method} method` ); const [handler, state] = useLazyRequest(endpoint, config); const skip = React.useMemo(() => config?.skip ?? false, [config]); React.useEffect( () => { if (!skip) { handler(); } }, [skip, handler] ); return state; }