import React, { useState, ReactNode, useRef, useEffect } from 'react';
import { Layout, Menu, Breadcrumb, Spin } from '@arco-design/web-react';
import cs from 'classnames';
import {
IconDashboard,
IconList,
IconSettings,
IconFile,
IconApps,
IconCheckCircle,
IconExclamationCircle,
IconUser,
IconMenuFold,
IconMenuUnfold
} from '@arco-design/web-react/icon';
import { useSelector } from 'react-redux';
import { useRouter } from 'next/router';
import Link from 'next/link';
import qs from 'query-string';
import Navbar from '../components/NavBar';
import Footer from '../components/Footer';
import useRoute, { IRoute } from '@/routes';
import useLocale from '@/utils/useLocale';
import { GlobalState } from '@/store';
import getUrlParams from '@/utils/getUrlParams';
import styles from '@/style/layout.module.less';
import NoAccess from '@/pages/exception/403';
const MenuItem = Menu.Item;
const SubMenu = Menu.SubMenu;
const Sider = Layout.Sider;
const Content = Layout.Content;
function getIconFromKey(key) {
switch (key) {
case 'dashboard':
return ;
case 'list':
return ;
case 'form':
return ;
case 'profile':
return ;
case 'visualization':
return ;
case 'result':
return ;
case 'exception':
return ;
case 'user':
return ;
default:
return
;
}
}
function PageLayout({ children }: { children: ReactNode }) {
const urlParams = getUrlParams();
const router = useRouter();
const pathname = router.pathname;
const currentComponent = qs.parseUrl(pathname).url.slice(1);
const locale = useLocale();
const { userInfo, settings, userLoading } = useSelector(
(state: GlobalState) => state
);
const [collapsed, setCollapsed] = useState(false);
const [routes, defaultRoute] = useRoute(userInfo?.permissions);
const defaultSelectedKeys = [currentComponent || defaultRoute];
const paths = (currentComponent || defaultRoute).split('/');
const defaultOpenKeys = paths.slice(0, paths.length - 1);
const [selectedKeys, setSelectedKeys] =
useState(defaultSelectedKeys);
const [openKeys, setOpenKeys] = useState(defaultOpenKeys);
const navbarHeight = 60;
const menuWidth = collapsed ? 48 : settings?.menuWidth;
const showNavbar = settings?.navbar && urlParams.navbar !== false;
const showMenu = settings?.menu && urlParams.menu !== false;
const showFooter = settings?.footer && urlParams.footer !== false;
const routeMap = useRef