From c12b366994eeb2cd960ede1948e6e99f1127c292 Mon Sep 17 00:00:00 2001 From: Noah Loomans Date: Tue, 26 Jun 2018 22:40:40 +0200 Subject: Menu: Split presentational and container --- src/client/react/components/container/Menu.js | 74 +---------------- src/client/react/components/container/Menu.scss | 25 ------ src/client/react/components/presentational/Menu.js | 96 ++++++++++++++++++++++ .../react/components/presentational/Menu.scss | 25 ++++++ 4 files changed, 122 insertions(+), 98 deletions(-) delete mode 100644 src/client/react/components/container/Menu.scss create mode 100644 src/client/react/components/presentational/Menu.js create mode 100644 src/client/react/components/presentational/Menu.scss 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 ( -
- - - - )} - onSelected={(event) => { - // Send the `data-type` of the selected - this.onItemSelected(event.detail.item.dataset.type); - }} - > - - - Voeg label toe - - - - Maak favoriet - -
- - - Lokaal zoeken - - - - Oud rooster gebruiken - - -
- ); - } -} +import Menu from '../presentational/Menu'; const mapStateToProps = (state, { match, location, history }) => ({ user: userFromMatch(match), diff --git a/src/client/react/components/container/Menu.scss b/src/client/react/components/container/Menu.scss deleted file mode 100644 index 3d84507..0000000 --- a/src/client/react/components/container/Menu.scss +++ /dev/null @@ -1,25 +0,0 @@ -.Menu { - .mdc-menu-anchor { - height: 100%; - } - - .mdc-button { - height: 100%; - min-width: unset; - color: black; - - &::before, &::after { - background-color: black; - } - - i { - font-size: 24px; - } - } - - .mdc-list-item { - i { - padding-right: 8px; - } - } -} 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 . + * + */ + +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 ( +
+ + + + )} + onSelected={(event) => { + // Send the `data-type` of the selected + this.onItemSelected(event.detail.item.dataset.type); + }} + > + + + Voeg label toe + + + + Maak favoriet + +
+ + + Lokaal zoeken + + + + Oud rooster gebruiken + + +
+ ); + } +} + +export default Menu; diff --git a/src/client/react/components/presentational/Menu.scss b/src/client/react/components/presentational/Menu.scss new file mode 100644 index 0000000..3d84507 --- /dev/null +++ b/src/client/react/components/presentational/Menu.scss @@ -0,0 +1,25 @@ +.Menu { + .mdc-menu-anchor { + height: 100%; + } + + .mdc-button { + height: 100%; + min-width: unset; + color: black; + + &::before, &::after { + background-color: black; + } + + i { + font-size: 24px; + } + } + + .mdc-list-item { + i { + padding-right: 8px; + } + } +} -- cgit v1.1