import React, { useState, useMemo, useRef, useEffect } from 'react';
import { Switch, Route, Redirect, useHistory } from 'react-router-dom';
import { Layout, Menu, Breadcrumb, Spin } from '@arco-design/web-react';
import cs from 'classnames';
import {
IconDashboard,
IconSettings,
IconExclamationCircle,
IconMenuFold,
IconMenuUnfold,
IconIdcard,
IconCompass,
IconRobot,
IconScan,
IconUserGroup,
IconSafe,
} from '@arco-design/web-react/icon';
import { useSelector } from 'react-redux';
import qs from 'query-string';
import NProgress from 'nprogress';
import Navbar from './components/NavBar';
import Footer from './components/Footer';
import useRoute, { IRoute } from '@/routes';
import { isArray } from './utils/is';
import useLocale from './utils/useLocale';
import getUrlParams from './utils/getUrlParams';
import lazyload from './utils/lazyload';
import { GlobalState } from './store';
import styles from './style/layout.module.less';
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 'card':
return ;
case 'crm':
return ;
case 'ai':
return ;
case 'nfc':
return ;
case 'team':
return ;
case 'settings-biz':
return ;
case 'platform':
return ;
case 'exception':
return ;
default:
return
;
}
}
const KEEP_IGNORED_ROUTES = new Set([
'crm/lead-profile',
'exception/403',
'exception/404',
'exception/500',
]);
function getFlattenRoutes(routes) {
const mod = import.meta.glob('./pages/**/[a-z[]*.tsx');
const res = [];
function travel(_routes, parentIgnored = false) {
_routes.forEach((route) => {
const ignored = parentIgnored || !!route.ignore;
if (isArray(route.children) && route.children.length) {
travel(route.children, ignored);
return;
}
if (!route.key) {
return;
}
if (ignored && !KEEP_IGNORED_ROUTES.has(route.key)) {
return;
}
try {
route.component = lazyload(mod[`./pages/${route.key}/index.tsx`]);
res.push(route);
} catch (e) {
console.log(route.key);
console.error(e);
}
});
}
travel(routes);
return res;
}
function PageLayout() {
const urlParams = getUrlParams();
const history = useHistory();
const pathname = history.location.pathname;
const currentComponent = qs.parseUrl(pathname).url.slice(1);
const locale = useLocale();
const { settings, userLoading, userInfo } = useSelector(
(state: GlobalState) => state
);
const [routes, defaultRoute] = useRoute(userInfo?.permissions, {
isSuper: userInfo?.isSuper,
role: userInfo?.role,
tenantId: userInfo?.tenantId,
});
const defaultSelectedKeys = [currentComponent || defaultRoute];
const paths = (currentComponent || defaultRoute).split('/');
const defaultOpenKeys = paths.slice(0, paths.length - 1);
const [breadcrumb, setBreadCrumb] = useState([]);
const [collapsed, setCollapsed] = useState(false);
const [selectedKeys, setSelectedKeys] =
useState(defaultSelectedKeys);
const [openKeys, setOpenKeys] = useState(defaultOpenKeys);
const routeMap = useRef