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;
})}
);
};
export default MainLayout;