<template> <div id="app" :key="localeKey" class="tw-flex tw-flex-col tw-min-h-screen" > <app-header :modules="modules" :user="user" /> <div class="tw-flex-1 tw-flex tw-my-8"> <router-view :modules="modules" :user="user" /> </div> <app-footer :modules="modules" /> </div> </template> <script> import 'bootstrap/dist/css/bootstrap.css' import 'bootstrap-vue/dist/bootstrap-vue.css' import {translationVm} from '@/plugins/translation' import header from './components/Header.vue' import footer from './components/Footer.vue' export default { name: 'App', components: { 'app-header': header, 'app-footer': footer }, computed: { userOIDC() { return this.$store.state.auth.userOIDC }, user() { return this.$store.state.auth.user }, localeKey: () => translationVm.activeLocale, modules: function () { // Logged out let modules = {} // All icons used are taken from the Tango Project, which put them into public domain: // http://tango.freedesktop.org if (this.user.logged_in === true) { modules = (this.user.steeringUser && this.user.steeringUser.is_superuser) // Super user ? { main: [ { icon: '/assets/applications-multimedia.png', slug: 'shows', title: this.$t('navigation.shows') }, { icon: '/assets/audio-x-generic.png', slug: 'files', title: this.$t('navigation.filesPlaylists') }, { icon: '/assets/x-office-calendar.png', slug: 'calendar', title: this.$t('navigation.calendar') }, ], footer: [ { slug: 'settings', title: this.$t('navigation.settings'), }, ] } // Regular user : { main: [ { icon: '/assets/applications-multimedia.png', slug: 'shows', title: this.$t('navigation.shows') }, { icon: '/assets/audio-x-generic.png', slug: 'files', title: this.$t('navigation.filesPlaylists') }, ], footer: [] } } return modules }, }, created() { this.$store.dispatch('auth/oidcInit') }, methods: { signIn() { this.$store.dispatch('auth/signinRedirect') }, signOut() { this.$store.dispatch('auth/signoutRedirect') }, } } </script> <style> html, body { min-height: 100vh; } #app { color: #2e3436; } /* #app .content-width { margin: auto; width: 920px; max-width: 920px; } */ </style>