88 lines
2.3 KiB
JavaScript
88 lines
2.3 KiB
JavaScript
import React, { useEffect, useState } from "react";
|
|
import ComposeComponents from "~/lib/react/ComposeComponents";
|
|
|
|
import { ApolloProvider } from "@apollo/client";
|
|
|
|
import createApolloClient from "~/network/apollo";
|
|
|
|
// import createAxios from "~/network/axios";
|
|
import createKy from "~/network/ky";
|
|
|
|
import network from "~/network";
|
|
|
|
import env from "~/env";
|
|
|
|
import Loader from "~/components/Loader";
|
|
|
|
import * as store from "~/stores";
|
|
|
|
import getRetryMaxAttempts from "./getRetryMaxAttemps";
|
|
|
|
import { createLogger } from "~/lib/logger";
|
|
import { NETWORK_SCOPES } from "~/lib/logger/scopes";
|
|
|
|
const { useNetworkState, networkActions } = store;
|
|
|
|
const networkProvidersLogger = createLogger({
|
|
module: NETWORK_SCOPES.APOLLO,
|
|
feature: "NetworkProviders",
|
|
});
|
|
|
|
const initializeNewApolloClient = (reload) => {
|
|
if (reload) {
|
|
const { apolloClient } = network;
|
|
apolloClient.stop();
|
|
apolloClient.clearStore();
|
|
}
|
|
|
|
network.apolloClient = createApolloClient({
|
|
store,
|
|
GRAPHQL_URL: env.GRAPHQL_URL,
|
|
GRAPHQL_WS_URL: env.GRAPHQL_WS_URL,
|
|
getRetryMaxAttempts,
|
|
});
|
|
};
|
|
initializeNewApolloClient();
|
|
|
|
// const oaFilesAxios = createAxios({ baseURL: env.OA_FILES_URL });
|
|
// network.oaFilesAxios = oaFilesAxios;
|
|
const oaFilesKy = createKy({ prefixUrl: env.OA_FILES_URL + "/" }, { store });
|
|
network.oaFilesKy = oaFilesKy;
|
|
|
|
export default function NetworkProviders({ children }) {
|
|
const [key, setKey] = useState(0);
|
|
|
|
const networkState = useNetworkState(["initialized", "triggerReload"]);
|
|
useEffect(() => {
|
|
if (networkState.triggerReload) {
|
|
networkProvidersLogger.debug("Network triggerReload received", {
|
|
reloadId: store.getAuthState()?.reloadId,
|
|
hasUserToken: !!store.getAuthState()?.userToken,
|
|
});
|
|
initializeNewApolloClient(true);
|
|
setKey((prevKey) => prevKey + 1);
|
|
}
|
|
}, [networkState.triggerReload]);
|
|
|
|
useEffect(() => {
|
|
if (key > 0) {
|
|
networkProvidersLogger.debug("Network reloaded", {
|
|
reloadId: store.getAuthState()?.reloadId,
|
|
hasUserToken: !!store.getAuthState()?.userToken,
|
|
});
|
|
networkActions.onReload();
|
|
}
|
|
}, [key]);
|
|
|
|
if (!networkState.initialized) {
|
|
return <Loader />;
|
|
}
|
|
|
|
const providers = [[ApolloProvider, { client: network.apolloClient }]];
|
|
|
|
return (
|
|
<ComposeComponents key={key} components={providers}>
|
|
{children}
|
|
</ComposeComponents>
|
|
);
|
|
}
|