Skip to content

Commit fe522a6

Browse files
author
nebarf
committed
use-http-request: allow to perform non-abortable requests
1 parent 40b4341 commit fe522a6

File tree

3 files changed

+37
-5
lines changed

3 files changed

+37
-5
lines changed

src/__tests__/use-http-request.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ describe('use-http-request', () => {
191191
expect(fetchHeaders).toEqual(defaultHttpReqConfig.reqOptions.headers);
192192
expect(fetchCredentials).toBeUndefined();
193193
expect(fetchBody).toBeNull();
194-
expect(fetchSignal).toBeInstanceOf(AbortSignal);
194+
expect(fetchSignal).toBeUndefined();
195195
});
196196

197197
test('should merge params provided on hook declaration with the ones provided on request run', async () => {

src/request/types.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,5 +19,6 @@ export interface UseHttpAbortableRequestReturn<HttpResponseT> {
1919

2020
export type UseHttpRequestReturn<HttpResponseT> = [
2121
HttpRequestState<HttpResponseT>,
22-
() => UseHttpAbortableRequestReturn<HttpResponseT>
22+
() => UseHttpAbortableRequestReturn<HttpResponseT>,
23+
() => Promise<HttpResponseT>
2324
];

src/request/use-http-request.ts

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ export const useHttpRequest = <HttpResponseT, HttpRequestBodyT = unknown>(
1212
/**
1313
* Grabs the "request" function from the http client.
1414
*/
15-
const { abortableRequest: httpClientAbortableRequest } = useHttpClient();
15+
const { abortableRequest: httpClientAbortableRequest, request: httpClientRequest } =
16+
useHttpClient();
1617

1718
// The state of the request.
1819
const [state, dispatch] = useReducer<Reducer<HttpRequestState<HttpResponseT>, HttpReqActionType>>(
@@ -89,7 +90,7 @@ export const useHttpRequest = <HttpResponseT, HttpRequestBodyT = unknown>(
8990
/**
9091
* Performs the http request allowing to abort it.
9192
*/
92-
const request = useCompareCallback(
93+
const abortableRequest = useCompareCallback(
9394
(
9495
paramsOverride?: Partial<PerformHttpRequestParams<HttpRequestBodyT, HttpResponseT>>
9596
): UseHttpAbortableRequestReturn<HttpResponseT> => {
@@ -119,6 +120,36 @@ export const useHttpRequest = <HttpResponseT, HttpRequestBodyT = unknown>(
119120
fastCompare
120121
);
121122

123+
/**
124+
* Performs the http request.
125+
*/
126+
const request = useCompareCallback(
127+
(
128+
paramsOverride?: Partial<PerformHttpRequestParams<HttpRequestBodyT, HttpResponseT>>
129+
): Promise<HttpResponseT> => {
130+
safelyDispatch(requestInit());
131+
132+
const mergedParams = paramsOverride
133+
? mergeParams(performHttpRequestParams, paramsOverride)
134+
: performHttpRequestParams;
135+
const reqResult = httpClientRequest<HttpResponseT, HttpRequestBodyT>(mergedParams);
136+
137+
// Listen request to be successfully resolved or reject and
138+
// update the state accordingly.
139+
reqResult
140+
.then((response) => {
141+
safelyDispatch(requestSuccess(response));
142+
})
143+
.catch((error) => {
144+
safelyDispatch(requestError(error));
145+
});
146+
147+
return reqResult;
148+
},
149+
[httpClientRequest, performHttpRequestParams, safelyDispatch],
150+
fastCompare
151+
);
152+
122153
/**
123154
* Keeps track of the mounting state of the component.
124155
*/
@@ -139,5 +170,5 @@ export const useHttpRequest = <HttpResponseT, HttpRequestBodyT = unknown>(
139170
fastCompare
140171
);
141172

142-
return [state, request];
173+
return [state, abortableRequest, request];
143174
};

0 commit comments

Comments
 (0)