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/react/components/presentational | |
parent | 294b3b241c2f28b1bbbe4ccb760981bcee8fab5b (diff) |
Menu: Split presentational and container
Diffstat (limited to 'src/client/react/components/presentational')
-rw-r--r-- | src/client/react/components/presentational/Menu.js | 96 | ||||
-rw-r--r-- | src/client/react/components/presentational/Menu.scss | 25 |
2 files changed, 121 insertions, 0 deletions
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/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; + } + } +} |