From 19247ac343d848739769700df9ceeae4229d0d38 Mon Sep 17 00:00:00 2001 From: Cliff Li <lic@student.ethz.ch> Date: Sat, 17 Mar 2018 15:44:57 +0100 Subject: [PATCH] Working navbar using Tabs --- src/views/layout.js | 98 ++++++++++++++++++++++++++++++--------------- 1 file changed, 65 insertions(+), 33 deletions(-) diff --git a/src/views/layout.js b/src/views/layout.js index e3ac3df1..34618109 100644 --- a/src/views/layout.js +++ b/src/views/layout.js @@ -2,43 +2,75 @@ import m from 'mithril'; import { checkLogin, isLoggedIn, logout } from '../models/auth'; import { Tabs } from '../components'; -const defaultTabs = [ - { label: 'AMIV', href: '/', oncreate: m.route.link }, - { label: 'Events', href: '/events', oncreate: m.route.link }, - { label: 'Studienunterlagen', href: '/studydocuments', oncreate: m.route.link }, - { label: 'Jobs', href: '/jobs', oncreate: m.route.link }, -]; +const defaultTabs = ['AMIV', 'Events', 'Studienunterlagen', 'Jobs']; +const tabsLoggedOut = ['Login']; +const tabsLoggedIn = ['Profil', 'Logout']; -const tabsLoggedOut = () => [ - { - label: 'Login', - href: '/login', - oncreate: m.route.link, - }, -]; +const gotoRoute = route => { + const current = m.route.get(); + if (current !== route) m.route.set(route); +}; + +export default class Layout { + constructor() { + checkLogin(); + this.setTabs(); + this.selectedTabIndex = 0; + this.wasLoggedIn = isLoggedIn(); + } + + setTabs() { + const tabOptions = isLoggedIn() ? tabsLoggedIn : tabsLoggedOut; + this.tabs = [...defaultTabs, ...tabOptions]; + } -const tabsLoggedIn = () => [ - { label: 'Profil', href: '/profile', oncreate: m.route.link }, - { - label: 'Logout', - events: { - onclick: () => { - logout().then(() => { - m.route.set('/'); - }); - return false; - }, - }, - }, -]; + selectTab(tabIndex) { + const tabString = this.tabs[tabIndex]; + switch (tabString) { + case 'AMIV': + gotoRoute('/'); + break; + case 'Events': + gotoRoute('/events'); + break; + case 'Studienunterlagen': + gotoRoute('/studydocuments'); + break; + case 'Jobs': + gotoRoute('/jobs'); + break; + case 'Profil': + gotoRoute('/profile'); + break; + case 'Logout': + gotoRoute('/'); + logout(); + break; + case 'Login': + gotoRoute('/login'); + break; + default: + console.log('Tab not known!'); + } + } + + onupdate() { + if (this.wasLoggedIn !== isLoggedIn()) this.selectedTabIndex = 0; + this.wasLoggedIn = isLoggedIn(); + this.setTabs(); + this.selectTab(this.selectedTabIndex); + } -module.exports = { - oninit: checkLogin, view(vnode) { - const tabOptions = isLoggedIn() ? tabsLoggedIn(vnode) : tabsLoggedOut(vnode); return m('div', [ - m(Tabs, { tabs: [...defaultTabs, ...tabOptions] }), + m(Tabs, { + onChange: ({ index }) => { + this.selectedTabIndex = index; + }, + tabs: this.tabs.map(tab => ({ label: tab })), + selectedTab: this.selectedTabIndex, + }), m('main', vnode.children), ]); - }, -}; + } +} -- GitLab