From d013c9a47f1bb50c7cc018c560cf5f9eb96d1868 Mon Sep 17 00:00:00 2001 From: rlacko <rlacko@sch.bme.hu> Date: Thu, 6 Feb 2020 20:30:35 +0100 Subject: [PATCH] #67 Less item in arrow menu in larger screen --- src/components/Header.js | 159 ++++++++++++++++++++++++++------------- 1 file changed, 108 insertions(+), 51 deletions(-) diff --git a/src/components/Header.js b/src/components/Header.js index 3fa0d27..e8d4f19 100644 --- a/src/components/Header.js +++ b/src/components/Header.js @@ -87,61 +87,118 @@ class Header extends Component { this.setState({ isOpen: false }); } + renderHeader(inHeader, hasArrowMenu) { + let renderedItemNum = 0 + let current = 0 + let maxNum = 0 + if(this.props.user.id) { + maxNum = menuItems.filter(item => { + return this.props.user.permission >= item.permissionLevel + }).length + } else { + maxNum = 3 + } + + return ( + <Segment inverted textAlign='center' vertical> + <Container> + <Menu inverted secondary size='large'> + {/* Default Menu items */} + {menuItems.map((item, i) => { + if (item.permissionLevel === 0) { + renderedItemNum += 1 + return ( + <Menu.Item key={i} as={Link} to={item.to}> + {item.prefix}{item.text} + </Menu.Item> + ) + }else { + return null + } + }) + } + {/* After default menu items */} + {menuItems.map((item, i) => { + + if (this.props.user.permission >= item.permissionLevel + && item.permissionLevel > 0 + && renderedItemNum < inHeader + && current < i) { + renderedItemNum += 1 + current = i + return ( + <Menu.Item key={i} as={Link} to={item.to}> + {item.prefix}{item.text} + </Menu.Item> + ) + } else { + return null + } + }) + } + {/* Arrow menu */} + { this.props.user.id && (current + 1) < maxNum ? + <Popup flowing hoverable inverted + trigger={ + <Menu.Item> + <Icon name='angle down' size='large' /> + </Menu.Item> + } + position='top center' + > + <Menu inverted secondary size='large'> + {menuItems.map((item, i) => { + return (this.props.user.permission >= item.permissionLevel + && item.permissionLevel > 0 + && current < i ? + <Menu.Item key={i} as={Link} to={item.to}> + {item.prefix}{item.text} + </Menu.Item> + : null + )}) + } + </Menu> + </Popup> + : null + } + {/* Login Button */} + <Menu.Item position='right'> + {this.props.user.id ? + <Button.Group> + <Button inverted as={Link} to='/profile'>Profilom</Button> + <Button as='a' href='/api/v1/logout/' icon='sign out' /> + </Button.Group> + : + <Button as='a' href='/api/v1/login/authsch/' inverted>BejelentkezĂŠs</Button> + } + </Menu.Item> + </Menu> + </Container> + </Segment> + ) + } + render() { return ( <div> {/* Tablet, Computer, ... view */} - <Responsive minWidth={600} > - <Segment inverted textAlign='center' vertical> - <Container> - <Menu inverted secondary size='large'> - {/* Menu items */} - {menuItems.map((item, i) => - (item.permissionLevel === 0 ? - <Menu.Item key={i} as={Link} to={item.to}> - {item.prefix}{item.text} - </Menu.Item> - : null - )) - } - {/* Arrow menu */} - { this.props.user.id ? - <Popup flowing hoverable inverted - trigger={ - <Menu.Item> - <Icon name='angle down' size='large' /> - </Menu.Item> - } - position='top center' - > - <Menu inverted secondary size='large'> - {menuItems.map((item, i) => - (this.props.user.permission >= item.permissionLevel - && item.permissionLevel > 0 ? - <Menu.Item key={i} as={Link} to={item.to}> - {item.prefix}{item.text} - </Menu.Item> - : null - )) - } - </Menu> - </Popup> - : null - } - {/* Login Button */} - <Menu.Item position='right'> - {this.props.user.id ? - <Button.Group> - <Button inverted as={Link} to='/profile'>Profilom</Button> - <Button as='a' href='/api/v1/logout/' icon='sign out' /> - </Button.Group> - : - <Button as='a' href='/api/v1/login/authsch/' inverted>BejelentkezĂŠs</Button> - } - </Menu.Item> - </Menu> - </Container> - </Segment> + <Responsive minWidth={600} maxWidth={700}> + {this.renderHeader(3)} + </Responsive> + <Responsive minWidth={701} maxWidth={800}> + {this.renderHeader(4)} + </Responsive> + <Responsive minWidth={801} maxWidth={1000}> + {this.renderHeader(5)} + </Responsive> + <Responsive minWidth={1001} maxWidth={1100}> + {this.renderHeader(6)} + </Responsive> + <Responsive minWidth={1101} maxWidth={1200}> + {this.renderHeader(7)} + </Responsive> + <Responsive minWidth={1201}> + {this.renderHeader(8)} </Responsive> {/* Mobile view */} <Responsive maxWidth={599}> -- GitLab