@applicaster/zapp-react-native-utils
Version:
Applicaster Zapp React Native utilities package
46 lines (38 loc) • 1.28 kB
text/typescript
import { RequestBuilder } from "@applicaster/zapp-pipes-v2-client";
import * as React from "react";
import { useInflatedUrl } from "@applicaster/zapp-react-native-utils/reactHooks/feed/useInflatedUrl";
import { reactHooksLogger } from "../logger";
export const logger = reactHooksLogger.addSubsystem("build-pipes-url");
type PipesBuildRequestObject = {
url: string;
requestParams?: AxiosRequestConfig | null;
error?: Error;
};
export function useBuildPipesUrl({
url,
mapping = {},
requestBuilder = new RequestBuilder(),
}): PipesBuildRequestObject {
const [requestParams, setRequestParams] = React.useState<object | null>(null);
const [error, setError] = React.useState(null);
const inflatedUrl = useInflatedUrl({ feedUrl: url, mapping });
const buildRequest = async (_url) => {
try {
const result = await requestBuilder.build(_url);
setRequestParams(result);
} catch (e) {
setError(e);
logger.error({ message: e.message, data: { url: inflatedUrl } });
}
};
React.useEffect(() => {
if (inflatedUrl && !requestParams) {
buildRequest(inflatedUrl);
}
}, [inflatedUrl]);
return {
url: inflatedUrl || "",
requestParams, // TODO should it be: || {} ?
error: error || undefined,
};
}