1a2988f40SDerick Montague<template> 2a2988f40SDerick Montague <div> 3dc04feb5SYoshie Muranaka <a class="link-skip-nav btn btn-light" href="#main-content"> 4e0b76c33SYoshie Muranaka {{ $t('appHeader.skipToContent') }} 5dc04feb5SYoshie Muranaka </a> 675b48321SDerick Montague <header id="page-header"> 774f8687dSYoshie Muranaka <b-navbar variant="dark" type="dark"> 8dc04feb5SYoshie Muranaka <!-- Left aligned nav items --> 974f8687dSYoshie Muranaka <b-button 1074f8687dSYoshie Muranaka class="nav-trigger" 1174f8687dSYoshie Muranaka aria-hidden="true" 1274f8687dSYoshie Muranaka title="Open navigation" 1374f8687dSYoshie Muranaka type="button" 1474f8687dSYoshie Muranaka variant="link" 1574f8687dSYoshie Muranaka :aria-expanded="isNavigationOpen" 1674f8687dSYoshie Muranaka :class="{ 'nav-open': isNavigationOpen }" 1774f8687dSYoshie Muranaka @click="toggleNavigation" 1874f8687dSYoshie Muranaka > 1974f8687dSYoshie Muranaka <icon-close v-if="isNavigationOpen" /> 2074f8687dSYoshie Muranaka <icon-menu v-if="!isNavigationOpen" /> 2174f8687dSYoshie Muranaka </b-button> 22dc04feb5SYoshie Muranaka <b-navbar-nav> 23e0b76c33SYoshie Muranaka <b-nav-text>{{ $t('appHeader.bmcSystemManagement') }}</b-nav-text> 24b8b6f791SYoshie Muranaka </b-navbar-nav> 25dc04feb5SYoshie Muranaka <!-- Right aligned nav items --> 26b8b6f791SYoshie Muranaka <b-navbar-nav class="ml-auto"> 27b8b6f791SYoshie Muranaka <b-nav> 28b8b6f791SYoshie Muranaka <b-nav-item> 29e0b76c33SYoshie Muranaka {{ $t('appHeader.health') }} 301ace1d91SYoshie Muranaka <status-icon :status="healthStatusIcon" /> 31b8b6f791SYoshie Muranaka </b-nav-item> 32b8b6f791SYoshie Muranaka <b-nav-item> 33e0b76c33SYoshie Muranaka {{ $t('appHeader.power') }} 34dc04feb5SYoshie Muranaka <status-icon :status="hostStatusIcon" /> 35b8b6f791SYoshie Muranaka </b-nav-item> 36eb154bbcSYoshie Muranaka <b-nav-item @click="refresh"> 37e0b76c33SYoshie Muranaka {{ $t('appHeader.refresh') }} 38dc04feb5SYoshie Muranaka <icon-renew /> 39dc04feb5SYoshie Muranaka </b-nav-item> 40dc04feb5SYoshie Muranaka <b-nav-item @click="logout"> 41e0b76c33SYoshie Muranaka {{ $t('appHeader.logOut') }} 42dc04feb5SYoshie Muranaka <icon-avatar /> 43b8b6f791SYoshie Muranaka </b-nav-item> 44b8b6f791SYoshie Muranaka </b-nav> 45b8b6f791SYoshie Muranaka </b-navbar-nav> 46a2988f40SDerick Montague </b-navbar> 47a2988f40SDerick Montague </header> 48a2988f40SDerick Montague </div> 49a2988f40SDerick Montague</template> 50a2988f40SDerick Montague 51a2988f40SDerick Montague<script> 52e2fd1567SDerick Montagueimport IconAvatar from '@carbon/icons-vue/es/user--avatar/20'; 5374f8687dSYoshie Muranakaimport IconClose from '@carbon/icons-vue/es/close/20'; 5474f8687dSYoshie Muranakaimport IconMenu from '@carbon/icons-vue/es/menu/20'; 55e2fd1567SDerick Montagueimport IconRenew from '@carbon/icons-vue/es/renew/20'; 56e2fd1567SDerick Montagueimport StatusIcon from '../Global/StatusIcon'; 5774f8687dSYoshie Muranaka 58a2988f40SDerick Montagueexport default { 59e2fd1567SDerick Montague name: 'AppHeader', 6074f8687dSYoshie Muranaka components: { IconAvatar, IconClose, IconMenu, IconRenew, StatusIcon }, 6174f8687dSYoshie Muranaka data() { 6274f8687dSYoshie Muranaka return { 6374f8687dSYoshie Muranaka isNavigationOpen: false 6474f8687dSYoshie Muranaka }; 6574f8687dSYoshie Muranaka }, 66b8b6f791SYoshie Muranaka computed: { 67b8b6f791SYoshie Muranaka hostStatus() { 68e2fd1567SDerick Montague return this.$store.getters['global/hostStatus']; 69dc04feb5SYoshie Muranaka }, 701ace1d91SYoshie Muranaka healthStatus() { 711ace1d91SYoshie Muranaka return this.$store.getters['eventLog/healthStatus']; 721ace1d91SYoshie Muranaka }, 73dc04feb5SYoshie Muranaka hostStatusIcon() { 74dc04feb5SYoshie Muranaka switch (this.hostStatus) { 75e2fd1567SDerick Montague case 'on': 76e2fd1567SDerick Montague return 'success'; 77e2fd1567SDerick Montague case 'error': 78e2fd1567SDerick Montague return 'danger'; 79e2fd1567SDerick Montague case 'off': 80dc04feb5SYoshie Muranaka default: 81e2fd1567SDerick Montague return 'secondary'; 82dc04feb5SYoshie Muranaka } 831ace1d91SYoshie Muranaka }, 841ace1d91SYoshie Muranaka healthStatusIcon() { 851ace1d91SYoshie Muranaka switch (this.healthStatus) { 861ace1d91SYoshie Muranaka case 'good': 871ace1d91SYoshie Muranaka return 'success'; 881ace1d91SYoshie Muranaka case 'warning': 891ace1d91SYoshie Muranaka return 'warning'; 901ace1d91SYoshie Muranaka case 'critical': 911ace1d91SYoshie Muranaka return 'danger'; 921ace1d91SYoshie Muranaka default: 931ace1d91SYoshie Muranaka return 'secondary'; 941ace1d91SYoshie Muranaka } 95b8b6f791SYoshie Muranaka } 96b8b6f791SYoshie Muranaka }, 9709e45cd4SDerick Montague created() { 9809e45cd4SDerick Montague this.getHostInfo(); 991ace1d91SYoshie Muranaka this.getEvents(); 10009e45cd4SDerick Montague }, 10174f8687dSYoshie Muranaka mounted() { 10274f8687dSYoshie Muranaka this.$root.$on( 10374f8687dSYoshie Muranaka 'change:isNavigationOpen', 10474f8687dSYoshie Muranaka isNavigationOpen => (this.isNavigationOpen = isNavigationOpen) 10574f8687dSYoshie Muranaka ); 10674f8687dSYoshie Muranaka }, 107b8b6f791SYoshie Muranaka methods: { 108b8b6f791SYoshie Muranaka getHostInfo() { 109e2fd1567SDerick Montague this.$store.dispatch('global/getHostStatus'); 110e080a1a7SDerick Montague }, 1111ace1d91SYoshie Muranaka getEvents() { 1121ace1d91SYoshie Muranaka this.$store.dispatch('eventLog/getEventLogData'); 1131ace1d91SYoshie Muranaka }, 114eb154bbcSYoshie Muranaka refresh() { 115eb154bbcSYoshie Muranaka this.$emit('refresh'); 116eb154bbcSYoshie Muranaka }, 117e080a1a7SDerick Montague logout() { 118c031b698SDerick Montague this.$store.dispatch('authentication/logout'); 11974f8687dSYoshie Muranaka }, 12074f8687dSYoshie Muranaka toggleNavigation() { 12174f8687dSYoshie Muranaka this.$root.$emit('toggle:navigation'); 122b8b6f791SYoshie Muranaka } 123a2988f40SDerick Montague } 124a2988f40SDerick Montague}; 125a2988f40SDerick Montague</script> 126a2988f40SDerick Montague 127b8b6f791SYoshie Muranaka<style lang="scss" scoped> 12875b48321SDerick Montague.link-skip-nav { 12975b48321SDerick Montague position: absolute; 13075b48321SDerick Montague top: -60px; 13175b48321SDerick Montague left: 0.5rem; 13274f8687dSYoshie Muranaka z-index: $zindex-popover; 13374f8687dSYoshie Muranaka transition: $duration--moderate-01 $exit-easing--expressive; 13475b48321SDerick Montague &:focus { 13575b48321SDerick Montague top: 0.5rem; 13674f8687dSYoshie Muranaka transition-timing-function: $entrance-easing--expressive; 13775b48321SDerick Montague } 13875b48321SDerick Montague} 1391ace1d91SYoshie Muranaka.navbar-dark { 1401ace1d91SYoshie Muranaka .navbar-text, 1411ace1d91SYoshie Muranaka .nav-link { 1421ace1d91SYoshie Muranaka color: $white !important; 1431ace1d91SYoshie Muranaka } 1441ace1d91SYoshie Muranaka} 145dc04feb5SYoshie Muranaka.nav-item { 146dc04feb5SYoshie Muranaka fill: $light; 147dc04feb5SYoshie Muranaka} 14874f8687dSYoshie Muranaka 14974f8687dSYoshie Muranaka.navbar { 15074f8687dSYoshie Muranaka padding: 0; 15174f8687dSYoshie Muranaka height: $header-height; 15274f8687dSYoshie Muranaka overflow: hidden; 15374f8687dSYoshie Muranaka} 15474f8687dSYoshie Muranaka 15574f8687dSYoshie Muranaka.navbar-nav { 15674f8687dSYoshie Muranaka padding: 0 $spacer; 15774f8687dSYoshie Muranaka} 15874f8687dSYoshie Muranaka 15974f8687dSYoshie Muranaka.nav-trigger { 160*7f970a1fSDerick Montague fill: $light; 16174f8687dSYoshie Muranaka width: $header-height; 16274f8687dSYoshie Muranaka height: $header-height; 16374f8687dSYoshie Muranaka transition: none; 16474f8687dSYoshie Muranaka 16574f8687dSYoshie Muranaka svg { 16674f8687dSYoshie Muranaka margin: 0; 16774f8687dSYoshie Muranaka } 16874f8687dSYoshie Muranaka 16974f8687dSYoshie Muranaka &:hover { 170*7f970a1fSDerick Montague fill: $light; 171*7f970a1fSDerick Montague background-color: $dark; 17274f8687dSYoshie Muranaka } 17374f8687dSYoshie Muranaka 17474f8687dSYoshie Muranaka @include media-breakpoint-up($responsive-layout-bp) { 17574f8687dSYoshie Muranaka display: none; 17674f8687dSYoshie Muranaka } 177dc04feb5SYoshie Muranaka} 178b8b6f791SYoshie Muranaka</style> 179