1
0
Fork 1
mirror of https://github.com/thatmattlove/hyperglass.git synced 2026-01-17 08:48:05 +00:00
thatmattlove-hyperglass/hyperglass/ui/pages/_app.tsx
2023-04-13 23:05:05 -04:00

47 lines
1.3 KiB
TypeScript

import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
import { Switch, Case, Default } from 'react-if';
import { Meta, Layout } from '~/components';
import { HyperglassProvider } from '~/context';
import { LoadError, Loading } from '~/elements';
import { useHyperglassConfig } from '~/hooks';
import type { AppProps } from 'next/app';
const queryClient = new QueryClient();
const AppComponent = (props: AppProps) => {
const { Component, pageProps } = props;
const { data, error, isLoading, ready, refetch, showError, isLoadingInitial } =
useHyperglassConfig();
return (
<Switch>
<Case condition={isLoadingInitial}>
<Loading />
</Case>
<Case condition={showError}>
<LoadError error={error!} retry={refetch} inProgress={isLoading} />
</Case>
<Case condition={ready}>
<HyperglassProvider config={data!}>
<Meta />
<Layout>
<Component {...pageProps} />
</Layout>
</HyperglassProvider>
</Case>
<Default>
<LoadError error={error!} retry={refetch} inProgress={isLoading} />
</Default>
</Switch>
);
};
const App = (props: AppProps): JSX.Element => {
return (
<QueryClientProvider client={queryClient}>
<AppComponent {...props} />
</QueryClientProvider>
);
};
export default App;