WDSSiderTemplate.jsx 3.64 KB
import React from 'react';
import _ from 'lodash';
import { Layout, Menu, Avatar } from 'antd';
import history from '../../../history';

import { style } from './resources/style/jsx/siderStyle';

const SubMenu = Menu.SubMenu;
const { Sider } = Layout;

export default class SiderComponent extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      defaultMenu: [''],
      collapsed: false,
      current: '1',
      dataList: {}
    };
  }

  componentDidMount() {
    this.props.eventEmitter.on(this.props.actionEmitter.setMainMenu, data => {
      this.setState({ dataList: data, defaultMenu: this._getDefaultMenu() });
    });
  }

  componentWillUnmount() {
    this.props.eventEmitter.removeAllListeners(
      this.props.actionEmitter.setMainMenu,
      this.props.actionEmitter.setBreadcrumb
    );
  }

  _onCollapse = collapsed => {
    this.setState({ collapsed });
  };

  _handleClick = e => {
    const { eventEmitter } = this.props;
    eventEmitter.emit(this.props.actionEmitter.setBreadcrumb, e.keyPath);

    this.setState({
      current: e.keyPath[0]
    });

    history.push('/process' + _.join(_.reverse(e.keyPath), ''));
  };

  _getDefaultMenu = () => {
    let defaultMenu;
    this.props.eventEmitter.on(this.props.actionEmitter.setMainMenu, data => {
      _.forEach(data, value => {
        if (value.defaultMenu) {
          defaultMenu = value.path;
        }
      });
    });

    return [defaultMenu];
  };

  _getPageTitle = path => {
    let pageTitle;
    this.props.eventEmitter.on(this.props.actionEmitter.setMainMenu, data => {
      pageTitle = _.find(data, function(o) {
        return o.path === path;
      });
    });
    return _.isEmpty(pageTitle) ? pageTitle : null;
  };

  render() {
    return (
      <Sider
        width={250}
        collapsible
        collapsed={this.state.collapsed}
        onCollapse={this._onCollapse}
        style={style}
      >
        <Menu
          theme="dark"
          defaultSelectedKeys={this.state.defaultMenu}
          // defaultSelectedKeys={['/home']}
          mode="inline"
          onClick={this._handleClick}
        >
          {!_.isEmpty(this.state.dataList) &&
            // has menu
            this.state.dataList.map((menu, index) => {
              return !_.isEmpty(menu.submenuList) ? (
                // has menu and submenu
                // add Menu
                <SubMenu
                  key={menu.path}
                  title={
                    <span>
                      {/* add icon menu */}
                      <Avatar
                        src={menu.menuIcon}
                        className="anticon"
                        size={22}
                        shape="square"
                      />
                      <span>{menu.pageTitle}</span>
                    </span>
                  }
                >
                  {menu.submenuList.map((submenu, index) => {
                    return (
                      // add Submenu
                      <Menu.Item key={submenu.path}>
                        {submenu.pageTitle}
                      </Menu.Item>
                    );
                  })}
                </SubMenu>
              ) : (
                // has menu only
                // add Menu
                <Menu.Item key={menu.path}>
                  {/* add icon menu */}
                  <Avatar
                    src={menu.menuIcon}
                    className="anticon"
                    size={22}
                    shape="square"
                  />
                  <span>{menu.pageTitle}</span>
                </Menu.Item>
              );
            })}
        </Menu>
      </Sider>
    );
  }
}