123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- import React, { Suspense } from 'react';
- import { Routes, Route, Navigate } from 'react-router-dom';
- import {
- accessErrorPage,
- clusterPath,
- errorPage,
- getNonExactPath,
- clusterNewConfigPath,
- } from 'lib/paths';
- import PageLoader from 'components/common/PageLoader/PageLoader';
- import Dashboard from 'components/Dashboard/Dashboard';
- import ClusterPage from 'components/ClusterPage/ClusterPage';
- import { ThemeProvider } from 'styled-components';
- import theme from 'theme/theme';
- import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
- import { showServerError } from 'lib/errorHandling';
- import { Toaster } from 'react-hot-toast';
- import GlobalCSS from 'components/globalCss';
- import * as S from 'components/App.styled';
- import ClusterConfigForm from 'widgets/ClusterConfigForm';
- import ConfirmationModal from './common/ConfirmationModal/ConfirmationModal';
- import { ConfirmContextProvider } from './contexts/ConfirmContext';
- import { GlobalSettingsProvider } from './contexts/GlobalSettingsContext';
- import ErrorPage from './ErrorPage/ErrorPage';
- import { UserInfoRolesAccessProvider } from './contexts/UserInfoRolesAccessContext';
- import PageContainer from './PageContainer/PageContainer';
- const queryClient = new QueryClient({
- defaultOptions: {
- queries: {
- suspense: true,
- },
- mutations: {
- onError(error) {
- showServerError(error as Response);
- },
- },
- },
- });
- const App: React.FC = () => {
- return (
- <QueryClientProvider client={queryClient}>
- <ThemeProvider theme={theme}>
- <Suspense fallback={<PageLoader />}>
- <GlobalSettingsProvider>
- <UserInfoRolesAccessProvider>
- <ConfirmContextProvider>
- <GlobalCSS />
- <S.Layout>
- <PageContainer>
- <Routes>
- {['/', '/ui', '/ui/clusters'].map((path) => (
- <Route
- key="Home" // optional: avoid full re-renders on route changes
- path={path}
- element={<Dashboard />}
- />
- ))}
- <Route
- path={getNonExactPath(clusterNewConfigPath)}
- element={<ClusterConfigForm />}
- />
- <Route
- path={getNonExactPath(clusterPath())}
- element={<ClusterPage />}
- />
- <Route
- path={accessErrorPage}
- element={
- <ErrorPage status={403} text="Access is Denied" />
- }
- />
- <Route path={errorPage} element={<ErrorPage />} />
- <Route
- path="*"
- element={<Navigate to={errorPage} replace />}
- />
- </Routes>
- </PageContainer>
- <Toaster position="bottom-right" />
- </S.Layout>
- <ConfirmationModal />
- </ConfirmContextProvider>
- </UserInfoRolesAccessProvider>
- </GlobalSettingsProvider>
- </Suspense>
- </ThemeProvider>
- </QueryClientProvider>
- );
- };
- export default App;
|