Files
nebula.js/commands/serve/web/contexts/RootContext.jsx
renovate[bot] 5cde83c607 chore(deps): update dependency react-router-dom to v7 (#1644)
* 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>
2024-12-27 14:54:55 +01:00

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>;
};