Skip to content

Commit

Permalink
refactor(types): CData -> BodyData (rename)
Browse files Browse the repository at this point in the history
keep CData (deprecated)
  • Loading branch information
wangcch committed Mar 22, 2023
1 parent 84a3084 commit 5f26f42
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 49 deletions.
26 changes: 13 additions & 13 deletions src/request.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,20 +18,20 @@ export interface Resource<TPayload, D = any> extends AxiosRequestConfig<D> {

export type Request<T = any, D = any> = (...args: any[]) => Resource<T, D>;

export type Payload<TRequest extends Request> = ReturnType<TRequest>["payload"];
export type CData<TRequest extends Request> = ReturnType<TRequest>["data"];
export type Payload<T extends Request> = ReturnType<T>["payload"];
export type BodyData<T extends Request> = ReturnType<T>["data"];
/** @deprecated No longer use. Use `BodyData` instead */
export type CData<T extends Request> = BodyData<T>;

export interface RequestFactory<TRequest extends Request> {
(...args: Parameters<TRequest>): {
export interface RequestFactory<T extends Request> {
(...args: Parameters<T>): {
cancel: Canceler;
ready: () => Promise<
[Payload<TRequest>, AxiosResponse<Payload<TRequest>, CData<TRequest>>]
>;
ready: () => Promise<[Payload<T>, AxiosResponse<Payload<T>, BodyData<T>>]>;
};
}

export interface RequestDispatcher<TRequest extends Request> {
(...args: Parameters<TRequest>): Canceler;
export interface RequestDispatcher<T extends Request> {
(...args: Parameters<T>): Canceler;
}

// Normalize the error response returned from our hooks
Expand All @@ -47,12 +47,12 @@ export interface RequestError<
original: E;
}

export type RequestCallbackFn<TRequest extends Request> = {
export type RequestCallbackFn<T extends Request> = {
onCompleted?: (
data: Payload<TRequest>,
response: AxiosResponse<CData<TRequest>>,
data: Payload<T>,
response: AxiosResponse<BodyData<T>>,
) => void;
onError?: (err?: RequestError<Payload<TRequest>, CData<TRequest>>) => void;
onError?: (err?: RequestError<Payload<T>, BodyData<T>>) => void;
};

export function request<T, D = any>(
Expand Down
30 changes: 14 additions & 16 deletions src/useRequest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import type {
RequestCallbackFn,
Request,
Payload,
CData,
BodyData,
} from "./request";
import { createRequestError } from "./request";
import { RequestContext } from "./requestContext";
Expand All @@ -33,10 +33,10 @@ export type UseRequestResult<TRequest extends Request> = [
},
];

export function useRequest<TRequest extends Request>(
fn: TRequest,
options?: UseRequestOptions<TRequest>,
): UseRequestResult<TRequest> {
export function useRequest<T extends Request>(
fn: T,
options?: UseRequestOptions<T>,
): UseRequestResult<T> {
const getMountedState = useMountedState();
const RequestConfig = useContext(RequestContext);
const axiosInstance = options?.instance || RequestConfig.instance || axios;
Expand All @@ -63,7 +63,7 @@ export function useRequest<TRequest extends Request>(
const callFn = useRefFn(fn);

const request = useCallback(
(...args: Parameters<TRequest>) => {
(...args: Parameters<T>) => {
const config = callFn.current(...args);
const source = axios.CancelToken.source();

Expand All @@ -72,15 +72,13 @@ export function useRequest<TRequest extends Request>(
setSources((prevSources) => [...prevSources, source]);
}
return axiosInstance({ ...config, cancelToken: source.token })
.then(
(response: AxiosResponse<Payload<TRequest>, CData<TRequest>>) => {
removeCancelToken(source.token);

onCompletedRef.current?.(response.data, response);
return [response.data, response];
},
)
.catch((err: AxiosError<Payload<TRequest>, CData<TRequest>>) => {
.then((response: AxiosResponse<Payload<T>, BodyData<T>>) => {
removeCancelToken(source.token);

onCompletedRef.current?.(response.data, response);
return [response.data, response];
})
.catch((err: AxiosError<Payload<T>, BodyData<T>>) => {
removeCancelToken(source.token);

const error = customCreateReqError
Expand All @@ -90,7 +88,7 @@ export function useRequest<TRequest extends Request>(
onErrorRef.current?.(error);

throw error;
}) as Promise<[Payload<TRequest>, AxiosResponse<CData<TRequest>>]>;
}) as Promise<[Payload<T>, AxiosResponse<BodyData<T>>]>;
};

return {
Expand Down
37 changes: 17 additions & 20 deletions src/useResource.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import type { Canceler, AxiosResponse } from "axios";
import { useRequest } from "./useRequest";
import type {
Payload,
CData,
BodyData,
RequestError,
Request,
RequestDispatcher,
Expand All @@ -24,12 +24,12 @@ const REQUEST_CLEAR_MESSAGE =

type RequestState<TRequest extends Request> = {
data?: Payload<TRequest>;
response?: AxiosResponse<CData<TRequest>>;
error?: RequestError<Payload<TRequest>, CData<TRequest>>;
response?: AxiosResponse<BodyData<TRequest>>;
error?: RequestError<Payload<TRequest>, BodyData<TRequest>>;
isLoading?: boolean;

/** @deprecated Use `response` instead */
other?: AxiosResponse<CData<TRequest>>;
other?: AxiosResponse<BodyData<TRequest>>;
};

export type UseResourceResult<TRequest extends Request> = [
Expand Down Expand Up @@ -69,7 +69,7 @@ type Action<T, D = any> =

function getNextState<TRequest extends Request>(
state: RequestState<TRequest>,
action: Action<Payload<TRequest>, CData<TRequest>>,
action: Action<Payload<TRequest>, BodyData<TRequest>>,
): RequestState<TRequest> {
const response = action.type === "success" ? action.response : state.response;

Expand All @@ -83,21 +83,18 @@ function getNextState<TRequest extends Request>(
};
}

export function useResource<TRequest extends Request>(
fn: TRequest,
requestParams?: Parameters<TRequest> | false,
options?: UseResourceOptions<TRequest>,
): UseResourceResult<TRequest> {
export function useResource<T extends Request>(
fn: T,
requestParams?: Parameters<T> | false,
options?: UseResourceOptions<T>,
): UseResourceResult<T> {
const getMountedState = useMountedState();
const RequestConfig =
useContext<RequestContextValue<Payload<TRequest>>>(RequestContext);
useContext<RequestContextValue<Payload<T>>>(RequestContext);

const fnOptions = useMemo(() => {
try {
return fn(...(requestParams || [])) as Resource<
Payload<TRequest>,
CData<TRequest>
>;
return fn(...(requestParams || [])) as Resource<Payload<T>, BodyData<T>>;
} catch (error) {
return undefined;
}
Expand Down Expand Up @@ -149,12 +146,12 @@ export function useResource<TRequest extends Request>(
});
const [state, dispatch] = useReducer(getNextState, {
data: cacheData,
isLoading: getDefaultStateLoading<TRequest>(requestParams, options?.filter),
isLoading: getDefaultStateLoading<T>(requestParams, options?.filter),
...options?.defaultState,
});

const request = useCallback(
(...args: Parameters<TRequest>) => {
(...args: Parameters<T>) => {
clear(REQUEST_CLEAR_MESSAGE);
const { ready, cancel } = createRequest(...args);

Expand All @@ -171,7 +168,7 @@ export function useResource<TRequest extends Request>(
requestCache.set(cacheKey, data);
}
} catch (e) {
const error = e as RequestError<Payload<TRequest>, CData<TRequest>>;
const error = e as RequestError<Payload<T>, BodyData<T>>;
if (getMountedState() && !error.isCancel) {
dispatch({ type: "error", error });
}
Expand All @@ -188,7 +185,7 @@ export function useResource<TRequest extends Request>(

const refresh = useCallback(
() => {
const _args = (requestParams || []) as Parameters<TRequest>;
const _args = (requestParams || []) as Parameters<T>;
const _filter =
typeof filterRefFn.current === "function"
? filterRefFn.current(..._args)
Expand Down Expand Up @@ -224,7 +221,7 @@ export function useResource<TRequest extends Request>(
clear(message);
};

const result: UseResourceResult<TRequest> = [
const result: UseResourceResult<T> = [
{ ...state, cancel },
request,
refresh,
Expand Down

0 comments on commit 5f26f42

Please sign in to comment.