Newer
Older
import React, { Component } from 'react';
import {
Menu,
Container,
Button,
Segment,
Visibility,
} from 'semantic-ui-react';
import { connect } from 'react-redux';
import KSZKlogo from './images/kszk_logo.svg';
const menuItems = [
{
text: 'Főoldal',
to: '/home',
prefix: <Image size='mini' src={KSZKlogo} style={{ marginRight: '1.5em' }} />,
},
{
text: 'Hírek',
to: '/news',
prefix: '',
},
{
text: 'Köreink',
to: '/groups',
prefix: '',
},
{
text: 'Ütemterv',
to: '/schedule',
prefix: '',
{
text: 'Statisztika',
to: '/statistics',
prefix: '',
},
{
text: 'Jelentkezések',
to: '/applications',
prefix: '',
permissionLevel: 3,
{
text: 'Házi feladatok',
to: '/homework',
prefix: '',
const FixedMenu = ({ user }) => (
<Menu fixed='top' size='large' pointing>
{menuItems.map((item, i) =>
(user.permission >= item.permissionLevel ||
(item.permissionLevel === 0)
?
<Menu.Item key={i} as={Link} to={item.to}>{item.text}</Menu.Item>
<Menu.Menu position='right'>
<Menu.Item className='item'>
{
user.id ?
<Button.Group>
<Button primary as={Link} to='/profile'>Profilom</Button>
<Button as='a' href='/api/v1/logout/'icon='sign out' />
<Button as='a' href='/api/v1/login/authsch/' >Bejelentkezés</Button>
</Menu.Menu>
</Menu>
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
class MobileContainer extends Component {
constructor(props) {
super(props);
this.state = {
sidebarVisible: false,
};
}
componentWillMount() {
this.props.getUserData();
}
render() {
const visible = this.state.sidebarVisible;
const { children, user } = this.props;
return(
<Responsive {...Responsive.onlyMobile}>
<Segment inverted textAlign='center' vertical>
<Container>
<Menu inverted secondary>
<Menu.Item onClick={visible ? this.handleHideClick : this.handleShowClick}><Icon name='sidebar'/></Menu.Item>
</Menu>
</Container>
</Segment>
<Sidebar.Pushable>
<Sidebar
as={Menu}
animation='overlay'
icon='labeled'
inverted
vertical
visible={visible}
width='thin'
>
{menuItems.map((item, i) =>
(this.props.user.permission >= item.permissionLevel ||
(item.permissionLevel === 0) ?
<Menu.Item key={i} as={Link} to={item.to} onClick={this.handleSidebarHide}>{item.prefix}{item.text}</Menu.Item>
:
null))}
</Sidebar>
<Sidebar.Pusher onClick={this.handleSidebarHide}>
{children}
</Sidebar.Pusher>
</Sidebar.Pushable>
</Responsive>);
}
handleShowClick = () => this.setState({ sidebarVisible: true })
handleHideClick = () => this.setState({ sidebarVisible: false })
handleSidebarHide = () => this.setState({ sidebarVisible: false })
}
class DesktopContainer extends Component {
constructor(props) {
super(props);
this.state = {
visible: false,
};
}
componentWillMount() {
this.props.getUserData();
}
hideFixedMenu() {
this.setState({ visible: false });
}
showFixedMenu() {
this.setState({ visible: true });
}
render() {
const { visible } = this.state.visible;
const { children, user } = this.props;
return (
<Responsive {...Responsive.onlyComputer}>
{visible ? <FixedMenu user={this.props.user} /> : null}
<Visibility
onBottomPassed={() => this.showFixedMenu()}
onBottomVisible={() => this.hideFixedMenu()}
once={false}
>
<Segment inverted textAlign='center' vertical>
<Container>
<Menu inverted secondary stackable 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>
:
<Menu.Item position='right'>
{
this.props.user.id ?
<Button as='a' href='/api/v1/logout/' icon='sign out' />
<Button as='a' href='/api/v1/login/authsch/' inverted>Bejelentkezés</Button>
</Menu.Item>
</Menu>
</Container>
</Segment>
</Visibility>
);
}
}
const Header = ({ children, user, getUserData }) => (
<div>
<DesktopContainer user={user} getUserData={getUserData}>{children}</DesktopContainer>
<MobileContainer user={user} getUserData={getUserData}>{children}</MobileContainer>
</div>
)
const mapStateToProps = ({ user }) => ({
user,
});
export default connect(mapStateToProps, { getUserData })(Header);