/* global window */ /* global document */ import React from 'react' import PropTypes from 'prop-types' import {withRouter, connect} from 'umi' import { AppLayout } from 'components' import { enquireScreen, unenquireScreen } from 'enquire-js' import store from 'store' import classnames from 'classnames' import { app_config } from 'config' import { theme } from 'core/libs/style' import * as antd from 'antd' import * as Icons from 'components/Icons' import styles from './PrimaryLayout.less' const contextMenuList = [ { key: "inspect_element", title: "Inspect", icon: } ] const { Content } = antd.Layout const { Sider, Overlay, ContextMenu } = AppLayout const isActive = (key) => { return key? key.active : false } const currentTheme = theme.get() @withRouter @connect(({ app, loading }) => ({ app, loading })) class PrimaryLayout extends React.Component { constructor(props) { super(props) this.state = { collapsed: app_config.default_collapse_sider ? true : false, isMobile: false }, this.handleContextMenu = window.addEventListener("contextmenu", (e) => { e.preventDefault() window.contextMenu.open({ xPos: e.clientX, yPos: e.clientY, fragment: this.generateContextMenu() }) },false ) window.DarkMode = isActive(currentTheme["darkmode"])? true : false window.contextMenu = this.props.app.contextMenu window.contextMenu.toogle = () => { this.props.dispatch({ type: "app/updateState", payload: {contextMenu: {...this.props.app.contextMenu, visible: !this.props.app.contextMenu.visible} } }) } window.contextMenu.open = (payload) => { if (!payload) return false const fragment = payload.fragment || null const xPos = payload.xPos || null const yPos = payload.yPos || null this.props.dispatch({ type: "app/updateState", payload: {contextMenu: {...this.props.app.contextMenu, xPos, yPos, fragment, visible: true}} }) } } handleContextMenuActions = { inspect_element: (e) =>{ this.props.dispatch({ type: "app/ipcInvoke", payload: { key: "inspectElement", payload: { x: e.clientX, y: e.clientY } } }) } } generateContextMenu() { return contextMenuList.map((e) => { return(
{e.icon}{e.title}
) }) } componentDidMount() { this.handleContextMenu this.enquireHandler = enquireScreen(mobile => { const { isMobile } = this.state if (isMobile !== mobile) { this.setState({ isMobile: mobile, }) } }) } componentWillUnmount() { window.removeEventListener("contextmenu", this.handleContextMenu) unenquireScreen(this.enquireHandler) } onCollapseChange = () => { const fromStore = store.get('collapsed') this.setState({ collapsed: !this.state.collapsed }) store.set('collapsed', !fromStore) } render() { const { location, dispatch, children, app } = this.props const { collapsed, isMobile } = this.state const { onCollapseChange } = this const { contextMenu } = app const app_theme = isActive(currentTheme["darkmode"])? "dark" : null const breakpoint = { xs: '480px', sm: '576px', md: '768px', lg: '992px', xl: '1200px', xxl: '1600px', } const SiderProps = { breakpoint, isMobile, collapsed, onCollapseChange, app_theme } const OverlayProps = { breakpoint, isMobile, app_theme } return ( {isActive(currentTheme['backgroundImage']) ?
: null}
{children? children : null}
) } } PrimaryLayout.propTypes = { children: PropTypes.element.isRequired, location: PropTypes.object, dispatch: PropTypes.func, app: PropTypes.object, loading: PropTypes.object, } export default PrimaryLayout