import React, { useCallback } from 'react'; import { Switch, Redirect } from 'react-router-dom'; import { NotificationContainer } from 'react-notifications'; import { createMuiTheme, ThemeProvider } from '@material-ui/core/styles'; import classNames from 'classnames'; import { useQuery, gql } from '@apollo/client'; import { Audits } from '@frontegg/react-audits'; import { ProtectedRoute, Profile, SSO, Team } from '@frontegg/react-auth'; import { WebhookComponent, ConnectivityPage } from '@frontegg/react-connectivity'; import { Alert } from '../../Components/Alert'; import Sidebar from '../../Components/Sidebar'; import NavBar from '../../Components/NavBar'; import { NotificationContext, NotificationContextType } from '../../Components/NotificationContext'; import FormPage from './FormPage'; import SliderPage from './SliderPage'; import DatePickerPage from './DatePickerPage'; import SwitchPage from './SwitchPage'; import Table from './TablePage'; import Dashboard from './Dashboard'; import UIScreenPage from './UIScreenPage'; import Badges from './UIScreenPage/UIElementsPages/Badges'; import Dropdowns from './UIScreenPage/UIElementsPages/Dropdowns'; import Buttons from './UIScreenPage/UIElementsPages/Buttons'; import Paginations from './UIScreenPage/UIElementsPages/Paginations'; import Images from './UIScreenPage/UIElementsPages/Images'; import Lists from './UIScreenPage/UIElementsPages/Lists'; import ProgressBars from './UIScreenPage/UIElementsPages/ProgressBars'; import Alerts from './UIScreenPage/UIElementsPages/Alerts'; import Notifications from './UIScreenPage/UIElementsPages/Notifications'; import Tabs from './UIScreenPage/UIElementsPages/Tabs'; import Typography from './UIScreenPage/UIElementsPages/Typography'; import BreadcrumbsPage from './UIScreenPage/UIElementsPages/Breadcrumbs'; import { APIManagement } from './APIManagement'; import { MOCK_REQUESTS } from './mockRequests'; import { routes } from '../../routes'; import { Anomalies } from './Anomalies'; import { Services } from './Services'; import 'react-notifications/lib/notifications.css'; import './MainLayout.scss'; const REQUESTS = gql` query { requests { id tenantId url userAgent statusCode createdAt } } `; const TeamManagement = () => { return ; }; const AuditsPage = () => { return ; }; const Connectivity = () => { return ; }; const Webhooks = () => { return ; }; const Sso = () => { return ; }; const ProfilePage = () => { return ; }; const MainDashboard = () => { const { loading, error, data } = useQuery(REQUESTS); if (loading) { return

Loading...

; } if (error) { console.error(error); } const requests = data?.requests.length ? data.requests : MOCK_REQUESTS; return ; }; const MainLayout: React.FC = () => { const getWindowDimensions = () => { const { innerWidth: width, innerHeight: height } = window; return { width, height, }; }; const [fixedSidebar, setFixSidebar] = React.useState(true); const handleFixSidebar = (event: React.ChangeEvent) => { setFixSidebar(!fixedSidebar); }; const [fixedNavbar, setFixNavbar] = React.useState(false); const handlesFixNavbar = (event: React.ChangeEvent) => { setFixNavbar(!fixedNavbar); }; const [collapsed, collapse] = React.useState(false); const handleCollapse = (event: React.ChangeEvent) => { collapse(!collapsed); }; const [windowDimensions, setWindowDimensions] = React.useState(getWindowDimensions()); const [hovered] = React.useState(false); const context = React.useContext(NotificationContext); const [scrolled, setScrolled] = React.useState(false); const handleScroll = useCallback(() => { if (window.pageYOffset === 0) { setScrolled(false); } if (window.pageYOffset > 0 && !scrolled) { setScrolled(true); } }, [scrolled]); const handleResize = useCallback(() => { setWindowDimensions(getWindowDimensions()); }, []); React.useEffect(() => { window.addEventListener('scroll', handleScroll); window.addEventListener('resize', handleResize); return () => { window.removeEventListener('scroll', handleScroll); window.removeEventListener('resize', handleResize); }; }, [handleScroll, handleResize]); React.useEffect(() => { collapse(windowDimensions.width < 768); }, [windowDimensions]); const switches = [ { label: 'Fix sidebar', state: [fixedSidebar, setFixSidebar], }, { label: 'Fix navbar', state: [fixedNavbar, setFixNavbar], }, ]; const [palletType, setPalletType] = React.useState<'light' | 'dark' | 'navbar' | 'sidebar'>('light'); const palette = palletType === 'navbar' || palletType === 'sidebar' ? 'light' : palletType; const darkTheme = createMuiTheme({ palette: { type: palette, primary: { main: '#2196f3', }, }, }); React.useEffect(() => { document.getElementById('root')?.classList.add('theme-light'); }, []); const handleThemeChange = (value: 'light' | 'dark' | 'navbar' | 'sidebar') => { setPalletType(value); document.getElementById('root')!.className = ''; document.getElementById('root')?.classList.add(`theme-${value}`); }; const handleChangeNavbar = (value: string, param: string, theme: string) => { document.getElementById('root')?.classList.add(`theme-${theme}`); const app: HTMLElement | null = document.querySelector('.app'); app?.style.setProperty(param, value); }; const navBarClassName = !collapsed || (hovered && fixedSidebar) ? 'expanded' : 'collapsed'; const sideBarClassName = !collapsed || (getWindowDimensions().width > 767 && hovered && fixedSidebar) ? 'expanded' : 'collapsed'; return (
{Object.entries(context.notifications).map(([key, value]) => { if (value.position === 'fixed-bottom') { return ( {value.text} ); } return null; })}
{Object.entries(context.notifications).map(([key, value]) => { if (value.position === 'fixed-top') { return ( {value.text} ); } return null; })}
{Object.entries(context.notifications).map(([key, value]) => { if (value.position === 'top') { return ( {value.text} ); } return null; })}
} /> ( )} />
); }; export default MainLayout;