Skip to content
This repository has been archived by the owner on Nov 11, 2023. It is now read-only.

Commit

Permalink
Make request options asyncable
Browse files Browse the repository at this point in the history
  • Loading branch information
fabien0102 committed Dec 13, 2019
1 parent c11818e commit d10cbe4
Show file tree
Hide file tree
Showing 6 changed files with 16 additions and 15 deletions.
6 changes: 3 additions & 3 deletions src/Context.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ export interface RestfulReactProviderProps<T = any> {
/**
* Options passed to the fetch request.
*/
requestOptions?: (() => Partial<RequestInit>) | Partial<RequestInit>;
requestOptions?: (() => Partial<RequestInit> | Promise<Partial<RequestInit>>) | Partial<RequestInit>;
/**
* Trigger on each error.
* For `Get` and `Mutation` calls, you can also call `retry` to retry the exact same request.
Expand Down Expand Up @@ -48,7 +48,7 @@ export interface InjectedProps {
}

export default class RestfulReactProvider<T> extends React.Component<RestfulReactProviderProps<T>> {
static displayName = "RestfulProviderContext";
public static displayName = "RestfulProviderContext";

public render() {
const { children, ...value } = this.props;
Expand All @@ -69,4 +69,4 @@ export default class RestfulReactProvider<T> extends React.Component<RestfulReac
}
}

export const RestfulReactConsumer = Context.Consumer;
export const RestfulReactConsumer = Context.Consumer;
9 changes: 5 additions & 4 deletions src/Get.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -204,20 +204,21 @@ class ContextlessGet<TData, TError, TQueryParams> extends React.Component<
this.abortController.abort();
}

public getRequestOptions = (
public getRequestOptions = async (
extraOptions?: Partial<RequestInit>,
extraHeaders?: boolean | { [key: string]: string },
) => {
const { requestOptions } = this.props;

if (typeof requestOptions === "function") {
const options = (await requestOptions()) || {};
return {
...extraOptions,
...requestOptions(),
...options,
headers: new Headers({
...(typeof extraHeaders !== "boolean" ? extraHeaders : {}),
...(extraOptions || {}).headers,
...(requestOptions() || {}).headers,
...options.headers,
}),
};
}
Expand Down Expand Up @@ -254,7 +255,7 @@ class ContextlessGet<TData, TError, TQueryParams> extends React.Component<
return url;
};

const request = new Request(makeRequestPath(), this.getRequestOptions(thisRequestOptions));
const request = new Request(makeRequestPath(), await this.getRequestOptions(thisRequestOptions));
try {
const response = await fetch(request, { signal: this.signal });
const { data, responseError } = await processResponse(response);
Expand Down
2 changes: 1 addition & 1 deletion src/Mutate.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,7 @@ class ContextlessMutate<TData, TError, TQueryParams, TRequestBody> extends React
headers: {
"content-type": typeof body === "object" ? "application/json" : "text/plain",
...(typeof providerRequestOptions === "function"
? providerRequestOptions().headers
? (await providerRequestOptions()).headers
: (providerRequestOptions || {}).headers),
...(mutateRequestOptions ? mutateRequestOptions.headers : {}),
},
Expand Down
6 changes: 3 additions & 3 deletions src/Poll.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -219,7 +219,7 @@ class ContextlessPoll<TData, TError, TQueryParams> extends React.Component<
// If we should keep going,
const { base, path, interval, wait } = this.props;
const { lastPollIndex } = this.state;
const requestOptions = this.getRequestOptions();
const requestOptions = await this.getRequestOptions();

let url = composeUrl(base!, "", path);

Expand Down Expand Up @@ -343,13 +343,13 @@ function Poll<TData = any, TError = any, TQueryParams = { [key: string]: any }>(
// Compose Contexts to allow for URL nesting
return (
<RestfulReactConsumer>
{contextProps => {
{async contextProps => {
const contextRequestOptions =
typeof contextProps.requestOptions === "function"
? contextProps.requestOptions()
: contextProps.requestOptions || {};
const propsRequestOptions =
typeof props.requestOptions === "function" ? props.requestOptions() : props.requestOptions || {};
typeof props.requestOptions === "function" ? await props.requestOptions() : props.requestOptions || {};

return (
<ContextlessPoll
Expand Down
4 changes: 2 additions & 2 deletions src/useGet.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -87,10 +87,10 @@ async function _fetchData<TData, TError, TQueryParams>(
}

const requestOptions =
(typeof props.requestOptions === "function" ? props.requestOptions() : props.requestOptions) || {};
(typeof props.requestOptions === "function" ? await props.requestOptions() : props.requestOptions) || {};

const contextRequestOptions =
(typeof context.requestOptions === "function" ? context.requestOptions() : context.requestOptions) || {};
(typeof context.requestOptions === "function" ? await context.requestOptions() : context.requestOptions) || {};

const request = new Request(
resolvePath(base, path, { ...context.queryParams, ...queryParams }),
Expand Down
4 changes: 2 additions & 2 deletions src/useMutate.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -78,10 +78,10 @@ export function useMutate<
const signal = abortController.current.signal;

const propsRequestOptions =
(typeof props.requestOptions === "function" ? props.requestOptions() : props.requestOptions) || {};
(typeof props.requestOptions === "function" ? await props.requestOptions() : props.requestOptions) || {};

const contextRequestOptions =
(typeof context.requestOptions === "function" ? context.requestOptions() : context.requestOptions) || {};
(typeof context.requestOptions === "function" ? await context.requestOptions() : context.requestOptions) || {};

const options: RequestInit = {
method: verb,
Expand Down

0 comments on commit d10cbe4

Please sign in to comment.