mirror of
https://github.com/qlik-oss/nebula.js.git
synced 2025-12-19 17:58:43 -05:00
* chore(deps): update dependency react-router-dom to v7 * chore: additions --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: caele <tsm@qlik.com>
43 lines
1.4 KiB
JavaScript
43 lines
1.4 KiB
JavaScript
import React, { useMemo, createContext, useContext, useEffect } from 'react';
|
|
import { useLocation, useNavigate } from 'react-router';
|
|
import { useInfo, useConnection, useCachedConnections } from '../hooks';
|
|
import storageFn from '../storage';
|
|
|
|
export const rootContextInitialValue = {
|
|
info: {},
|
|
};
|
|
|
|
export const RootContext = createContext(rootContextInitialValue);
|
|
|
|
export const useRootContext = () => {
|
|
const ctx = useContext(RootContext);
|
|
if (!ctx) throw new Error('RootContext not defined!');
|
|
return ctx;
|
|
};
|
|
|
|
export const RootContextProvider = ({ children }) => {
|
|
const location = useLocation();
|
|
const navigate = useNavigate();
|
|
const storage = useMemo(() => storageFn({}), []);
|
|
const { info, setInfo } = useInfo();
|
|
const cachedConnectionsData = useCachedConnections({ storage });
|
|
const connectionData = useConnection({ info, cachedConnectionsData });
|
|
|
|
useEffect(() => {
|
|
if (connectionData.error) navigate('/');
|
|
|
|
if (location.pathname === '/') {
|
|
connectionData.setActiveStep(0);
|
|
connectionData.setGlobal();
|
|
connectionData.setTreatAsDesktop(false);
|
|
}
|
|
}, [location.pathname, connectionData.error]);
|
|
|
|
const rootContextValue = useMemo(
|
|
() => ({ info, setInfo, ...connectionData, storage, cachedConnectionsData }),
|
|
[info, setInfo, connectionData, storage, cachedConnectionsData]
|
|
);
|
|
|
|
return <RootContext.Provider value={rootContextValue}>{children}</RootContext.Provider>;
|
|
};
|