Skip to content
Snippets Groups Projects
Select Git revision
  • 54683eb04a4656fc4ad37f9bf265524c4947cb80
  • master default protected
2 results

deploy.sh

Blame
  • WorkspaceMenu.js 4.17 KiB
    import React, { Component } from 'react';
    import { compose } from 'redux';
    import Menu from '@material-ui/core/Menu';
    import Divider from '@material-ui/core/Divider';
    import ListItemIcon from '@material-ui/core/ListItemIcon';
    import MenuItem from '@material-ui/core/MenuItem';
    import Typography from '@material-ui/core/Typography';
    import SaveAltIcon from '@material-ui/icons/SaveAlt';
    import SettingsIcon from '@material-ui/icons/Settings';
    import ViewHeadlineIcon from '@material-ui/icons/ViewHeadline';
    import { withStyles } from '@material-ui/core/styles';
    import { connect } from 'react-redux';
    import PropTypes from 'prop-types';
    import ConnectedWindowList from './WindowList';
    import ConnectedWorkspaceSettings from './WorkspaceSettings';
    import ConnectedWorkspaceExport from './WorkspaceExport';
    
    /**
     */
    export class WorkspaceMenu extends Component {
      /**
       * constructor -
       */
      constructor(props) {
        super(props);
        this.state = {
          windowList: {},
          settings: {},
          exportWorkspace: {},
        };
        this.handleMenuItemClick = this.handleMenuItemClick.bind(this);
        this.handleMenuItemClose = this.handleMenuItemClose.bind(this);
      }
    
      /**
       * @private
       */
      handleMenuItemClick(item, event) {
        const obj = {};
        obj[item] = {};
        obj[item].open = true;
        obj[item].anchorEl = event.currentTarget;
        this.setState(obj);
      }
    
      /**
       * @private
       */
      handleMenuItemClose(item) {
        return (event) => {
          const obj = {};
          obj[item] = {};
          obj[item].open = false;
          obj[item].anchorEl = null;
          this.setState(obj);
        };
      }
    
      /**
       * render
       * @return
       */
      render() {
        const { handleClose, anchorEl } = this.props;
        const { windowList, settings, exportWorkspace } = this.state;
    
        return (
          <>
            <Menu id="workspace-menu" anchorEl={anchorEl} open={Boolean(anchorEl)} onClose={handleClose}>
              <MenuItem
                aria-haspopup="true"
                onClick={(e) => { this.handleMenuItemClick('windowList', e); handleClose(e); }}
                aria-owns={windowList.anchorEl ? 'window-list-menu' : undefined}
              >
                <ListItemIcon>
                  <ViewHeadlineIcon />
                </ListItemIcon>
                <Typography varient="inherit">List all open windows</Typography>
              </MenuItem>
              <Divider />
              <MenuItem
                aria-haspopup="true"
                onClick={(e) => { this.handleMenuItemClick('settings', e); handleClose(e); }}
                aria-owns={settings.AnchorEl ? 'workspace-settings' : undefined}
              >
                <ListItemIcon>
                  <SettingsIcon />
                </ListItemIcon>
                <Typography varient="inherit">Settings</Typography>
              </MenuItem>
              <MenuItem
                aria-haspopup="true"
                onClick={(e) => { this.handleMenuItemClick('exportWorkspace', e); handleClose(e); }}
                aria-owns={exportWorkspace.AnchorEl ? 'workspace-export' : undefined}
              >
                <ListItemIcon>
                  <SaveAltIcon />
                </ListItemIcon>
                <Typography varient="inherit">Download/export workspace</Typography>
              </MenuItem>
            </Menu>
            <ConnectedWindowList
              anchorEl={windowList.anchorEl}
              open={Boolean(windowList.anchorEl)}
              handleClose={this.handleMenuItemClose('windowList')}
            />
            <ConnectedWorkspaceSettings
              open={Boolean(settings.open)}
              handleClose={this.handleMenuItemClose('settings')}
            />
            <ConnectedWorkspaceExport
              open={Boolean(exportWorkspace.open)}
              handleClose={this.handleMenuItemClose('exportWorkspace')}
            />
          </>
        );
      }
    }
    
    WorkspaceMenu.propTypes = {
      handleClose: PropTypes.func.isRequired,
      anchorEl: PropTypes.object, // eslint-disable-line react/forbid-prop-types
    };
    
    WorkspaceMenu.defaultProps = {
      anchorEl: null,
    };
    
    /**
     * mapDispatchToProps - used to hook up connect to action creators
     * @memberof ManifestListItem
     * @private
     */
    const mapDispatchToProps = {};
    
    /**
     * @private
     */
    const styles = theme => ({
    });
    
    
    const enhance = compose(
      connect(null, mapDispatchToProps),
      withStyles(styles),
      // further HOC go here
    );
    
    export default enhance(WorkspaceMenu);