Skip to content
Snippets Groups Projects
layout.js 1.78 KiB
import m from 'mithril';
import { checkLogin, isLoggedIn, logout } from '../models/auth';
import { Tabs } from '../components';

const defaultTabs = ['AMIV', 'Events', 'Studienunterlagen', 'Jobs'];
const tabsLoggedOut = ['Login'];
const tabsLoggedIn = ['Profil', 'Logout'];

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];
  }

  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();
    }
  }

  view(vnode) {
    return m('div#amiv-container', [
      m(Tabs, {
        onChange: ({ index }) => {
          this.selectedTabIndex = index;
          this.selectTab(index);
        },
        tabs: this.tabs.map(tab => ({ label: tab })),
        selectedTab: this.selectedTabIndex,
      }),
      m('main', vnode.children),
    ]);
  }
}