diff options
| author | Noah Loomans <noahloomans@gmail.com> | 2018-06-26 22:40:40 +0200 | 
|---|---|---|
| committer | Noah Loomans <noahloomans@gmail.com> | 2018-06-26 22:40:40 +0200 | 
| commit | c12b366994eeb2cd960ede1948e6e99f1127c292 (patch) | |
| tree | db9b03c13f38c446c9c10c071f27cbff36c0124a /src/client | |
| parent | 294b3b241c2f28b1bbbe4ccb760981bcee8fab5b (diff) | |
Menu: Split presentational and container
Diffstat (limited to 'src/client')
| -rw-r--r-- | src/client/react/components/container/Menu.js | 74 | ||||
| -rw-r--r-- | src/client/react/components/presentational/Menu.js | 96 | ||||
| -rw-r--r-- | src/client/react/components/presentational/Menu.scss (renamed from src/client/react/components/container/Menu.scss) | 0 | 
3 files changed, 97 insertions, 73 deletions
diff --git a/src/client/react/components/container/Menu.js b/src/client/react/components/container/Menu.js index 85fa785..7e5abd0 100644 --- a/src/client/react/components/container/Menu.js +++ b/src/client/react/components/container/Menu.js @@ -18,83 +18,11 @@   *   */ -import React from 'react';  import { connect } from 'react-redux';  import { withRouter } from 'react-router-dom'; -import { PropTypes } from 'prop-types'; -import { Button, ButtonIcon } from 'rmwc/Button'; -import { SimpleMenu, MenuItem } from 'rmwc/Menu'; -import { Icon } from 'rmwc/Icon'; -import users from '../../users';  import { makeSetUser, userFromMatch } from '../../lib/url'; -import './Menu.scss'; - -class Menu extends React.Component { -  static propTypes = { -    setUser: PropTypes.func.isRequired, -    user: PropTypes.string, -    showRoomFinder: PropTypes.func.isRequired, -  } - -  static defaultProps = { -    user: null, -  } - -  onItemSelected(index) { -    switch (index) { -      case 'room_finder': { -        const { setUser, user, showRoomFinder } = this.props; - -        if (user == null || users.byId[user].type !== 'r') { -          // We are not currently viewing a room, correct the situation. -          setUser(users.allRoomIds[0]); -        } - -        showRoomFinder(); -        break; -      } -      default: -        // No default -    } -  } - -  render() { -    return ( -      <div className="Menu"> -        <SimpleMenu -          handle={( -            <Button> -              <ButtonIcon use="more_vert" /> -            </Button> -          )} -          onSelected={(event) => { -            // Send the `data-type` of the selected <MenuItem /> -            this.onItemSelected(event.detail.item.dataset.type); -          }} -        > -          <MenuItem data-type="add_label"> -            <Icon use="bookmark_border" /> -            Voeg label toe -          </MenuItem> -          <MenuItem data-type="make_favorite"> -            <Icon use="star_border" /> -            Maak favoriet -          </MenuItem> -          <div className="mdc-list-divider" role="separator" /> -          <MenuItem data-type="room_finder"> -            <Icon use="location_searching" /> -            Lokaal zoeken -          </MenuItem> -          <MenuItem data-type="use_legacy_schedule"> -            <Icon use="launch" /> -            Oud rooster gebruiken -          </MenuItem> -        </SimpleMenu> -      </div> -    ); -  } -} +import Menu from '../presentational/Menu';  const mapStateToProps = (state, { match, location, history }) => ({    user: userFromMatch(match), diff --git a/src/client/react/components/presentational/Menu.js b/src/client/react/components/presentational/Menu.js new file mode 100644 index 0000000..d43c1d3 --- /dev/null +++ b/src/client/react/components/presentational/Menu.js @@ -0,0 +1,96 @@ +/** + * Copyright (C) 2018 Noah Loomans + * + * This file is part of rooster.hetmml.nl. + * + * rooster.hetmml.nl is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * rooster.hetmml.nl is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with rooster.hetmml.nl.  If not, see <http://www.gnu.org/licenses/>. + * + */ + +import React from 'react'; +import { PropTypes } from 'prop-types'; +import { Button, ButtonIcon } from 'rmwc/Button'; +import { SimpleMenu, MenuItem } from 'rmwc/Menu'; +import { Icon } from 'rmwc/Icon'; +import users from '../../users'; + +import './Menu.scss'; + +class Menu extends React.Component { +  static propTypes = { +    user: PropTypes.string, +    setUser: PropTypes.func.isRequired, +    showRoomFinder: PropTypes.func.isRequired, +  } + +  static defaultProps = { +    user: null, +  } + +  onItemSelected(index) { +    switch (index) { +      case 'room_finder': { +        const { setUser, user, showRoomFinder } = this.props; + +        if (user == null || users.byId[user].type !== 'r') { +          // We are not currently viewing a room, correct the situation. +          setUser(users.allRoomIds[0]); +        } + +        showRoomFinder(); +        break; +      } +      default: +        // No default +    } +  } + +  render() { +    return ( +      <div className="Menu"> +        <SimpleMenu +          handle={( +            <Button> +              <ButtonIcon use="more_vert" /> +            </Button> +          )} +          onSelected={(event) => { +            // Send the `data-type` of the selected <MenuItem /> +            this.onItemSelected(event.detail.item.dataset.type); +          }} +        > +          <MenuItem data-type="add_label"> +            <Icon use="bookmark_border" /> +            Voeg label toe +          </MenuItem> +          <MenuItem data-type="make_favorite"> +            <Icon use="star_border" /> +            Maak favoriet +          </MenuItem> +          <div className="mdc-list-divider" role="separator" /> +          <MenuItem data-type="room_finder"> +            <Icon use="location_searching" /> +            Lokaal zoeken +          </MenuItem> +          <MenuItem data-type="use_legacy_schedule"> +            <Icon use="launch" /> +            Oud rooster gebruiken +          </MenuItem> +        </SimpleMenu> +      </div> +    ); +  } +} + +export default Menu; diff --git a/src/client/react/components/container/Menu.scss b/src/client/react/components/presentational/Menu.scss index 3d84507..3d84507 100644 --- a/src/client/react/components/container/Menu.scss +++ b/src/client/react/components/presentational/Menu.scss  | 
