/** * Ant Design Pro v4 use `@ant-design/pro-layout` to handle Layout. * You can view component api by: * https://github.com/ant-design/ant-design-pro-layout */ import ProLayout, { MenuDataItem, BasicLayoutProps as ProLayoutProps, Settings, DefaultFooter, SettingDrawer } from "@ant-design/pro-layout"; import React, { useEffect } from "react"; import Link from "umi/link"; import { Dispatch } from "redux"; import { connect } from "dva"; import { Icon } from "antd"; import { formatMessage } from "umi-plugin-react/locale"; import Authorized from "@/utils/Authorized"; import RightContent from "@/components/GlobalHeader/RightContent"; import { ConnectState } from "@/models/connect"; import { isAntDesignPro } from "@/utils/utils"; import logo from "../assets/logo.svg"; export interface BasicLayoutProps extends ProLayoutProps { breadcrumbNameMap: { [path: string]: MenuDataItem; }; settings: Settings; dispatch: Dispatch; } export type BasicLayoutContext = { [K in "location"]: BasicLayoutProps[K] } & { breadcrumbNameMap: { [path: string]: MenuDataItem; }; }; /** * use Authorized check all menu item */ const menuDataRender = (menuList: MenuDataItem[]): MenuDataItem[] => menuList.map(item => { const localItem = { ...item, children: item.children ? menuDataRender(item.children) : [] }; return Authorized.check(item.authority, localItem, null) as MenuDataItem; }); const defaultFooterDom = ( , href: "https://github.com/ant-design/ant-design-pro", blankTarget: true }, { key: "Ant Design", title: "Ant Design", href: "https://ant.design", blankTarget: true } ]} /> ); const footerRender: BasicLayoutProps["footerRender"] = () => { if (!isAntDesignPro()) { return defaultFooterDom; } return ( <> {defaultFooterDom}
netlify logo
); }; const BasicLayout: React.FC = props => { const { dispatch, children, settings } = props; const [settingss, setSettingss] = useState({}); /** * constructor */ useEffect(() => { if (dispatch) { dispatch({ type: "user/fetchCurrent" }); dispatch({ type: "settings/getSetting" }); } }, []); /** * init variables */ const handleMenuCollapse = (payload: boolean): void => { if (dispatch) { dispatch({ type: "global/changeLayoutCollapsed", payload }); } }; return ( <> { if (menuItemProps.isUrl) { return defaultDom; } return {defaultDom}; }} breadcrumbRender={(routers = []) => [ { path: "/", breadcrumbName: formatMessage({ id: "menu.home", defaultMessage: "Home" }) }, ...routers ]} itemRender={(route, params, routes, paths) => { const first = routes.indexOf(route) === 0; return first ? ( {route.breadcrumbName} ) : ( {route.breadcrumbName} ); }} footerRender={footerRender} menuDataRender={menuDataRender} formatMessage={formatMessage} rightContentRender={rightProps => } {...props} {...settings} > {children} setSettingss(config)} /> ); }; export default connect(({ global, settings }: ConnectState) => ({ collapsed: global.collapsed, settings }))(BasicLayout);