import React from 'react'; import _ from 'lodash'; import {connect} from 'react-redux'; import {dispatch} from 'app/store'; import i18n from 'lib-app/i18n'; import Menu from 'core-components/menu'; class AdminPanelMenu extends React.Component { static contextTypes = { router: React.PropTypes.object }; static propTypes = { location: React.PropTypes.object }; render() { return (
); } getGroupsMenuProps() { return { items: this.getGroups(), selectedIndex: this.getGroupIndex(), onItemClick: this.onGroupClick.bind(this), tabbable: true, type: 'horizontal' }; } getGroupMenuProps() { return { items: this.getGroupItems(), selectedIndex: this.getGroupItemIndex(), onItemClick: this.onGroupItemClick.bind(this), tabbable: true, type: 'horizontal-list' }; } getGroups() { return this.getRoutes().map((group) => { return { content: {group.groupName}, icon: group.icon }; }); } getGroupItems() { const group = this.getRoutes()[this.getGroupIndex()]; return group.items.map((item) => { return { content: item.name }; }); } onGroupClick(index) { this.context.router.push(this.getRoutes()[index].path); } onGroupItemClick(index) { const group = this.getRoutes()[this.getGroupIndex()]; this.context.router.push(group.items[index].path); } getGroupItemIndex() { const group = this.getRoutes()[this.getGroupIndex()]; const pathname = this.props.location.pathname + this.props.location.search; return _.findIndex(group.items, {path: pathname}); } getGroupIndex() { const pathname = this.props.location.pathname; const groupIndex = _.findLastIndex(this.getRoutes(), (group) => { return _.includes(pathname, group.path); }); return (groupIndex === -1) ? 0 : groupIndex; } getCustomlists() { if(window.customTicketList){ return window.customTicketList.map((item, index) => { return { name: item.title, path: '/admin/panel/tickets/search-tickets?custom=' + index, level: 1 } }) } else { return []; } } getRoutes() { const customLists = this.getCustomlists(); return this.getItemsByFilteredByLevel(_.without([ { groupName: i18n('DASHBOARD'), path: '/admin/panel', icon: 'tachometer', level: 1, items: this.getItemsByFilteredByLevel([ /*{ name: i18n('STATISTICS'), path: '/admin/panel/stats', level: 1 },*/ { name: i18n('LAST_ACTIVITY'), path: '/admin/panel/activity', level: 1 } ]) }, { groupName: i18n('TICKETS'), path: '/admin/panel/tickets', icon: 'ticket', level: 1, items: this.getItemsByFilteredByLevel([ { name: i18n('MY_TICKETS'), path: '/admin/panel/tickets/my-tickets', level: 1 }, { name: i18n('NEW_TICKETS'), path: '/admin/panel/tickets/new-tickets', level: 1 }, { name: i18n('ALL_TICKETS'), path: '/admin/panel/tickets/all-tickets', level: 1 }, { name: i18n('CUSTOM_RESPONSES'), path: '/admin/panel/tickets/custom-responses', level: 2 }, ...customLists ]) }, this.props.config['user-system-enabled'] ? { groupName: i18n('USERS'), path: '/admin/panel/users', icon: 'user', level: 1, items: this.getItemsByFilteredByLevel([ { name: i18n('LIST_USERS'), path: '/admin/panel/users/list-users', level: 1 }, { name: i18n('BAN_USERS'), path: '/admin/panel/users/ban-users', level: 1 }, { name: i18n('CUSTOM_FIELDS'), path: '/admin/panel/users/custom-fields', level: 1 } ]) } : null, { groupName: i18n('ARTICLES'), path: '/admin/panel/articles', icon: 'book', level: 2, items: this.getItemsByFilteredByLevel([ { name: i18n('LIST_ARTICLES'), path: '/admin/panel/articles/list-articles', level: 2 } ]) }, { groupName: i18n('STAFF'), path: '/admin/panel/staff', icon: 'users', level: 3, items: this.getItemsByFilteredByLevel([ { name: i18n('STAFF_MEMBERS'), path: '/admin/panel/staff/staff-members', level: 3 }, { name: i18n('DEPARTMENTS'), path: '/admin/panel/staff/departments', level: 3 } ]) }, { groupName: i18n('SETTINGS'), path: '/admin/panel/settings', icon: 'cogs', level: 3, items: this.getItemsByFilteredByLevel([ { name: i18n('SYSTEM_PREFERENCES'), path: '/admin/panel/settings/system-preferences', level: 3 }, { name: i18n('ADVANCED_SETTINGS'), path: '/admin/panel/settings/advanced-settings', level: 3 }, { name: i18n('EMAIL_SETTINGS'), path: '/admin/panel/settings/email-settings', level: 3 }, { name: i18n('CUSTOM_TAGS'), path: '/admin/panel/settings/custom-tags', level: 3 } ]) } ], null)); } getItemsByFilteredByLevel(items) { return (this.props.level) ? _.filter(items, route => this.props.level >= route.level) : items; } } export default connect((store) => { return { level: store.session.userLevel, config: store.config }; })(AdminPanelMenu);