1a2988f40SDerick Montague<template> 2a2988f40SDerick Montague <div> 36859203cSDerick Montague <header id="page-header"> 46859203cSDerick Montague <a role="link" class="link-skip-nav btn btn-light" href="#main-content"> 5e0b76c33SYoshie Muranaka {{ $t('appHeader.skipToContent') }} 6dc04feb5SYoshie Muranaka </a> 76859203cSDerick Montague 86859203cSDerick Montague <b-navbar 96859203cSDerick Montague variant="dark" 106859203cSDerick Montague type="dark" 116859203cSDerick Montague :aria-label="$t('appHeader.applicationHeader')" 126859203cSDerick Montague > 13dc04feb5SYoshie Muranaka <!-- Left aligned nav items --> 1474f8687dSYoshie Muranaka <b-button 156859203cSDerick Montague id="app-header-trigger" 1674f8687dSYoshie Muranaka class="nav-trigger" 1774f8687dSYoshie Muranaka aria-hidden="true" 1874f8687dSYoshie Muranaka title="Open navigation" 1974f8687dSYoshie Muranaka type="button" 2074f8687dSYoshie Muranaka variant="link" 2174f8687dSYoshie Muranaka @click="toggleNavigation" 2274f8687dSYoshie Muranaka > 2374f8687dSYoshie Muranaka <icon-close v-if="isNavigationOpen" /> 2474f8687dSYoshie Muranaka <icon-menu v-if="!isNavigationOpen" /> 2574f8687dSYoshie Muranaka </b-button> 26dc04feb5SYoshie Muranaka <b-navbar-nav> 27e0b76c33SYoshie Muranaka <b-nav-text>{{ $t('appHeader.bmcSystemManagement') }}</b-nav-text> 28b8b6f791SYoshie Muranaka </b-navbar-nav> 29dc04feb5SYoshie Muranaka <!-- Right aligned nav items --> 30b8b6f791SYoshie Muranaka <b-navbar-nav class="ml-auto"> 31*13cdbcdaSDixsie Wolmers <b-nav-item to="/health/event-logs"> 32e0b76c33SYoshie Muranaka {{ $t('appHeader.health') }} 331ace1d91SYoshie Muranaka <status-icon :status="healthStatusIcon" /> 34b8b6f791SYoshie Muranaka </b-nav-item> 35*13cdbcdaSDixsie Wolmers <b-nav-item to="/control/server-power-operations"> 36e0b76c33SYoshie Muranaka {{ $t('appHeader.power') }} 37dc04feb5SYoshie Muranaka <status-icon :status="hostStatusIcon" /> 38b8b6f791SYoshie Muranaka </b-nav-item> 396859203cSDerick Montague <!-- Using LI elements instead of b-nav-item to support semantic button elements --> 406859203cSDerick Montague <li class="nav-item"> 416859203cSDerick Montague <b-button id="app-header-refresh" variant="link" @click="refresh"> 42e0b76c33SYoshie Muranaka {{ $t('appHeader.refresh') }} 43dc04feb5SYoshie Muranaka <icon-renew /> 446859203cSDerick Montague </b-button> 456859203cSDerick Montague </li> 466859203cSDerick Montague <li> 476859203cSDerick Montague <b-button id="app-header-logout" variant="link" @click="logout"> 48e0b76c33SYoshie Muranaka {{ $t('appHeader.logOut') }} 49dc04feb5SYoshie Muranaka <icon-avatar /> 506859203cSDerick Montague </b-button> 516859203cSDerick Montague </li> 52b8b6f791SYoshie Muranaka </b-navbar-nav> 53a2988f40SDerick Montague </b-navbar> 54a2988f40SDerick Montague </header> 553be801aaSYoshie Muranaka <loading-bar /> 56a2988f40SDerick Montague </div> 57a2988f40SDerick Montague</template> 58a2988f40SDerick Montague 59a2988f40SDerick Montague<script> 60e2fd1567SDerick Montagueimport IconAvatar from '@carbon/icons-vue/es/user--avatar/20'; 6174f8687dSYoshie Muranakaimport IconClose from '@carbon/icons-vue/es/close/20'; 6274f8687dSYoshie Muranakaimport IconMenu from '@carbon/icons-vue/es/menu/20'; 63e2fd1567SDerick Montagueimport IconRenew from '@carbon/icons-vue/es/renew/20'; 64e2fd1567SDerick Montagueimport StatusIcon from '../Global/StatusIcon'; 653be801aaSYoshie Muranakaimport LoadingBar from '../Global/LoadingBar'; 6674f8687dSYoshie Muranaka 67a2988f40SDerick Montagueexport default { 68e2fd1567SDerick Montague name: 'AppHeader', 693be801aaSYoshie Muranaka components: { 703be801aaSYoshie Muranaka IconAvatar, 713be801aaSYoshie Muranaka IconClose, 723be801aaSYoshie Muranaka IconMenu, 733be801aaSYoshie Muranaka IconRenew, 743be801aaSYoshie Muranaka StatusIcon, 753be801aaSYoshie Muranaka LoadingBar 763be801aaSYoshie Muranaka }, 7774f8687dSYoshie Muranaka data() { 7874f8687dSYoshie Muranaka return { 7974f8687dSYoshie Muranaka isNavigationOpen: false 8074f8687dSYoshie Muranaka }; 8174f8687dSYoshie Muranaka }, 82b8b6f791SYoshie Muranaka computed: { 83b8b6f791SYoshie Muranaka hostStatus() { 84e2fd1567SDerick Montague return this.$store.getters['global/hostStatus']; 85dc04feb5SYoshie Muranaka }, 861ace1d91SYoshie Muranaka healthStatus() { 871ace1d91SYoshie Muranaka return this.$store.getters['eventLog/healthStatus']; 881ace1d91SYoshie Muranaka }, 89dc04feb5SYoshie Muranaka hostStatusIcon() { 90dc04feb5SYoshie Muranaka switch (this.hostStatus) { 91e2fd1567SDerick Montague case 'on': 92e2fd1567SDerick Montague return 'success'; 93e2fd1567SDerick Montague case 'error': 94e2fd1567SDerick Montague return 'danger'; 95a3cbc659SYoshie Muranaka case 'diagnosticMode': 96a3cbc659SYoshie Muranaka return 'warning'; 97e2fd1567SDerick Montague case 'off': 98dc04feb5SYoshie Muranaka default: 99e2fd1567SDerick Montague return 'secondary'; 100dc04feb5SYoshie Muranaka } 1011ace1d91SYoshie Muranaka }, 1021ace1d91SYoshie Muranaka healthStatusIcon() { 1031ace1d91SYoshie Muranaka switch (this.healthStatus) { 104ce9a3ef3SYoshie Muranaka case 'OK': 1051ace1d91SYoshie Muranaka return 'success'; 106ce9a3ef3SYoshie Muranaka case 'Warning': 1071ace1d91SYoshie Muranaka return 'warning'; 108ce9a3ef3SYoshie Muranaka case 'Critical': 1091ace1d91SYoshie Muranaka return 'danger'; 1101ace1d91SYoshie Muranaka default: 1111ace1d91SYoshie Muranaka return 'secondary'; 1121ace1d91SYoshie Muranaka } 113b8b6f791SYoshie Muranaka } 114b8b6f791SYoshie Muranaka }, 11509e45cd4SDerick Montague created() { 11609e45cd4SDerick Montague this.getHostInfo(); 1171ace1d91SYoshie Muranaka this.getEvents(); 11809e45cd4SDerick Montague }, 11974f8687dSYoshie Muranaka mounted() { 12074f8687dSYoshie Muranaka this.$root.$on( 12174f8687dSYoshie Muranaka 'change:isNavigationOpen', 12274f8687dSYoshie Muranaka isNavigationOpen => (this.isNavigationOpen = isNavigationOpen) 12374f8687dSYoshie Muranaka ); 12474f8687dSYoshie Muranaka }, 125b8b6f791SYoshie Muranaka methods: { 126b8b6f791SYoshie Muranaka getHostInfo() { 127e2fd1567SDerick Montague this.$store.dispatch('global/getHostStatus'); 128e080a1a7SDerick Montague }, 1291ace1d91SYoshie Muranaka getEvents() { 1301ace1d91SYoshie Muranaka this.$store.dispatch('eventLog/getEventLogData'); 1311ace1d91SYoshie Muranaka }, 132eb154bbcSYoshie Muranaka refresh() { 133eb154bbcSYoshie Muranaka this.$emit('refresh'); 134eb154bbcSYoshie Muranaka }, 135e080a1a7SDerick Montague logout() { 136c031b698SDerick Montague this.$store.dispatch('authentication/logout'); 13774f8687dSYoshie Muranaka }, 13874f8687dSYoshie Muranaka toggleNavigation() { 13974f8687dSYoshie Muranaka this.$root.$emit('toggle:navigation'); 140b8b6f791SYoshie Muranaka } 141a2988f40SDerick Montague } 142a2988f40SDerick Montague}; 143a2988f40SDerick Montague</script> 144a2988f40SDerick Montague 145b8b6f791SYoshie Muranaka<style lang="scss" scoped> 14640865726SDerick Montague@import 'src/assets/styles/helpers'; 14740865726SDerick Montague 14875b48321SDerick Montague.link-skip-nav { 14975b48321SDerick Montague position: absolute; 15075b48321SDerick Montague top: -60px; 15175b48321SDerick Montague left: 0.5rem; 15274f8687dSYoshie Muranaka z-index: $zindex-popover; 15374f8687dSYoshie Muranaka transition: $duration--moderate-01 $exit-easing--expressive; 15475b48321SDerick Montague &:focus { 15575b48321SDerick Montague top: 0.5rem; 15674f8687dSYoshie Muranaka transition-timing-function: $entrance-easing--expressive; 15775b48321SDerick Montague } 15875b48321SDerick Montague} 1591ace1d91SYoshie Muranaka.navbar-dark { 1601ace1d91SYoshie Muranaka .navbar-text, 1616859203cSDerick Montague .nav-link, 1626859203cSDerick Montague .btn-link { 1631ace1d91SYoshie Muranaka color: $white !important; 1646859203cSDerick Montague fill: currentColor; 1651ace1d91SYoshie Muranaka } 1661ace1d91SYoshie Muranaka} 1676859203cSDerick Montague 168dc04feb5SYoshie Muranaka.nav-item { 169dc04feb5SYoshie Muranaka fill: $light; 170dc04feb5SYoshie Muranaka} 17174f8687dSYoshie Muranaka 17274f8687dSYoshie Muranaka.navbar { 17374f8687dSYoshie Muranaka padding: 0; 17474f8687dSYoshie Muranaka height: $header-height; 17574f8687dSYoshie Muranaka overflow: hidden; 1766859203cSDerick Montague 1776859203cSDerick Montague .btn-link { 1786859203cSDerick Montague padding: $spacer / 2; 1796859203cSDerick Montague } 18074f8687dSYoshie Muranaka} 18174f8687dSYoshie Muranaka 18274f8687dSYoshie Muranaka.navbar-nav { 18374f8687dSYoshie Muranaka padding: 0 $spacer; 18474f8687dSYoshie Muranaka} 18574f8687dSYoshie Muranaka 18674f8687dSYoshie Muranaka.nav-trigger { 1877f970a1fSDerick Montague fill: $light; 18874f8687dSYoshie Muranaka width: $header-height; 18974f8687dSYoshie Muranaka height: $header-height; 19074f8687dSYoshie Muranaka transition: none; 19174f8687dSYoshie Muranaka 19274f8687dSYoshie Muranaka svg { 19374f8687dSYoshie Muranaka margin: 0; 19474f8687dSYoshie Muranaka } 19574f8687dSYoshie Muranaka 19674f8687dSYoshie Muranaka &:hover { 1977f970a1fSDerick Montague fill: $light; 1987f970a1fSDerick Montague background-color: $dark; 19974f8687dSYoshie Muranaka } 20074f8687dSYoshie Muranaka 20174f8687dSYoshie Muranaka @include media-breakpoint-up($responsive-layout-bp) { 20274f8687dSYoshie Muranaka display: none; 20374f8687dSYoshie Muranaka } 204dc04feb5SYoshie Muranaka} 205b8b6f791SYoshie Muranaka</style> 206