blob: 39d52b83e546109912a04670a30dbc2bb585b8dc [file] [log] [blame]
Derick Montaguea2988f42020-01-17 13:46:30 -06001<template>
2 <div>
Derick Montague75b48322019-12-06 01:24:41 -06003 <header id="page-header">
Derick Montague68592032020-04-04 14:02:34 -05004 <a role="link" class="link-skip-nav btn btn-light" href="#main-content">
5 {{ $t('appHeader.skipToContent') }}
6 </a>
7
8 <b-navbar
9 variant="dark"
10 type="dark"
11 :aria-label="$t('appHeader.applicationHeader')"
12 >
Yoshie Muranakadc04feb2019-12-04 08:41:22 -080013 <!-- Left aligned nav items -->
Yoshie Muranaka74f86872020-02-10 12:28:37 -080014 <b-button
Derick Montague68592032020-04-04 14:02:34 -050015 id="app-header-trigger"
Yoshie Muranaka74f86872020-02-10 12:28:37 -080016 class="nav-trigger"
17 aria-hidden="true"
18 title="Open navigation"
19 type="button"
20 variant="link"
Yoshie Muranaka74f86872020-02-10 12:28:37 -080021 @click="toggleNavigation"
22 >
23 <icon-close v-if="isNavigationOpen" />
24 <icon-menu v-if="!isNavigationOpen" />
25 </b-button>
Yoshie Muranakadc04feb2019-12-04 08:41:22 -080026 <b-navbar-nav>
Yoshie Muranakae0b76c32020-02-28 14:18:20 -080027 <b-nav-text>{{ $t('appHeader.bmcSystemManagement') }}</b-nav-text>
Yoshie Muranakab8b6f792019-12-03 14:47:32 -080028 </b-navbar-nav>
Yoshie Muranakadc04feb2019-12-04 08:41:22 -080029 <!-- Right aligned nav items -->
Yoshie Muranakab8b6f792019-12-03 14:47:32 -080030 <b-navbar-nav class="ml-auto">
Dixsie Wolmers13cdbcd2020-06-02 08:22:07 -050031 <b-nav-item to="/health/event-logs">
Derick Montague68592032020-04-04 14:02:34 -050032 {{ $t('appHeader.health') }}
33 <status-icon :status="healthStatusIcon" />
34 </b-nav-item>
Dixsie Wolmers13cdbcd2020-06-02 08:22:07 -050035 <b-nav-item to="/control/server-power-operations">
Derick Montague68592032020-04-04 14:02:34 -050036 {{ $t('appHeader.power') }}
37 <status-icon :status="hostStatusIcon" />
38 </b-nav-item>
39 <!-- Using LI elements instead of b-nav-item to support semantic button elements -->
40 <li class="nav-item">
41 <b-button id="app-header-refresh" variant="link" @click="refresh">
Yoshie Muranakae0b76c32020-02-28 14:18:20 -080042 {{ $t('appHeader.refresh') }}
Yoshie Muranakadc04feb2019-12-04 08:41:22 -080043 <icon-renew />
Derick Montague68592032020-04-04 14:02:34 -050044 </b-button>
45 </li>
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +053046 <li class="nav-item">
47 <b-dropdown id="app-header-user" variant="link" right>
48 <template v-slot:button-content>
49 <icon-avatar />
50 {{ username }}
51 </template>
52 <b-dropdown-item to="/profile-settings"
53 >{{ $t('appHeader.profileSettings') }}
54 </b-dropdown-item>
55 <b-dropdown-item @click="logout">{{
56 $t('appHeader.logOut')
57 }}</b-dropdown-item>
58 </b-dropdown>
Derick Montague68592032020-04-04 14:02:34 -050059 </li>
Yoshie Muranakab8b6f792019-12-03 14:47:32 -080060 </b-navbar-nav>
Derick Montaguea2988f42020-01-17 13:46:30 -060061 </b-navbar>
62 </header>
Yoshie Muranaka3be801a2020-04-21 11:34:56 -070063 <loading-bar />
Derick Montaguea2988f42020-01-17 13:46:30 -060064 </div>
65</template>
66
67<script>
Derick Montaguee2fd1562019-12-20 13:26:53 -060068import IconAvatar from '@carbon/icons-vue/es/user--avatar/20';
Yoshie Muranaka74f86872020-02-10 12:28:37 -080069import IconClose from '@carbon/icons-vue/es/close/20';
70import IconMenu from '@carbon/icons-vue/es/menu/20';
Derick Montaguee2fd1562019-12-20 13:26:53 -060071import IconRenew from '@carbon/icons-vue/es/renew/20';
72import StatusIcon from '../Global/StatusIcon';
Yoshie Muranaka3be801a2020-04-21 11:34:56 -070073import LoadingBar from '../Global/LoadingBar';
Yoshie Muranaka74f86872020-02-10 12:28:37 -080074
Derick Montaguea2988f42020-01-17 13:46:30 -060075export default {
Derick Montaguee2fd1562019-12-20 13:26:53 -060076 name: 'AppHeader',
Yoshie Muranaka3be801a2020-04-21 11:34:56 -070077 components: {
78 IconAvatar,
79 IconClose,
80 IconMenu,
81 IconRenew,
82 StatusIcon,
83 LoadingBar
84 },
Yoshie Muranaka74f86872020-02-10 12:28:37 -080085 data() {
86 return {
87 isNavigationOpen: false
88 };
89 },
Yoshie Muranakab8b6f792019-12-03 14:47:32 -080090 computed: {
Yoshie Muranakab8b6f792019-12-03 14:47:32 -080091 hostStatus() {
Derick Montaguee2fd1562019-12-20 13:26:53 -060092 return this.$store.getters['global/hostStatus'];
Yoshie Muranakadc04feb2019-12-04 08:41:22 -080093 },
Yoshie Muranaka1ace1d92020-02-06 13:47:28 -080094 healthStatus() {
95 return this.$store.getters['eventLog/healthStatus'];
96 },
Yoshie Muranakadc04feb2019-12-04 08:41:22 -080097 hostStatusIcon() {
98 switch (this.hostStatus) {
Derick Montaguee2fd1562019-12-20 13:26:53 -060099 case 'on':
100 return 'success';
101 case 'error':
102 return 'danger';
Yoshie Muranakaa3cbc652020-05-13 12:55:48 -0700103 case 'diagnosticMode':
104 return 'warning';
Derick Montaguee2fd1562019-12-20 13:26:53 -0600105 case 'off':
Yoshie Muranakadc04feb2019-12-04 08:41:22 -0800106 default:
Derick Montaguee2fd1562019-12-20 13:26:53 -0600107 return 'secondary';
Yoshie Muranakadc04feb2019-12-04 08:41:22 -0800108 }
Yoshie Muranaka1ace1d92020-02-06 13:47:28 -0800109 },
110 healthStatusIcon() {
111 switch (this.healthStatus) {
Yoshie Muranakace9a3ef2020-05-06 14:33:22 -0700112 case 'OK':
Yoshie Muranaka1ace1d92020-02-06 13:47:28 -0800113 return 'success';
Yoshie Muranakace9a3ef2020-05-06 14:33:22 -0700114 case 'Warning':
Yoshie Muranaka1ace1d92020-02-06 13:47:28 -0800115 return 'warning';
Yoshie Muranakace9a3ef2020-05-06 14:33:22 -0700116 case 'Critical':
Yoshie Muranaka1ace1d92020-02-06 13:47:28 -0800117 return 'danger';
118 default:
119 return 'secondary';
120 }
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530121 },
122 username() {
123 return this.$store.getters['global/username'];
Yoshie Muranakab8b6f792019-12-03 14:47:32 -0800124 }
125 },
Derick Montague09e45cd2020-01-23 15:45:57 -0600126 created() {
127 this.getHostInfo();
Yoshie Muranaka1ace1d92020-02-06 13:47:28 -0800128 this.getEvents();
Derick Montague09e45cd2020-01-23 15:45:57 -0600129 },
Yoshie Muranaka74f86872020-02-10 12:28:37 -0800130 mounted() {
131 this.$root.$on(
132 'change:isNavigationOpen',
133 isNavigationOpen => (this.isNavigationOpen = isNavigationOpen)
134 );
135 },
Yoshie Muranakab8b6f792019-12-03 14:47:32 -0800136 methods: {
137 getHostInfo() {
Derick Montaguee2fd1562019-12-20 13:26:53 -0600138 this.$store.dispatch('global/getHostStatus');
Derick Montaguee080a1a2019-12-04 16:30:08 -0600139 },
Yoshie Muranaka1ace1d92020-02-06 13:47:28 -0800140 getEvents() {
141 this.$store.dispatch('eventLog/getEventLogData');
142 },
Yoshie Muranakaeb154bb2020-02-07 12:18:45 -0800143 refresh() {
144 this.$emit('refresh');
145 },
Derick Montaguee080a1a2019-12-04 16:30:08 -0600146 logout() {
Derick Montaguec031b692020-02-12 15:55:42 -0600147 this.$store.dispatch('authentication/logout');
Yoshie Muranaka74f86872020-02-10 12:28:37 -0800148 },
149 toggleNavigation() {
150 this.$root.$emit('toggle:navigation');
Yoshie Muranakab8b6f792019-12-03 14:47:32 -0800151 }
Derick Montaguea2988f42020-01-17 13:46:30 -0600152 }
153};
154</script>
155
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530156<style lang="scss">
Derick Montague40865722020-04-13 17:01:19 -0500157@import 'src/assets/styles/helpers';
158
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530159.app-header {
160 .link-skip-nav {
161 position: absolute;
162 top: -60px;
163 left: 0.5rem;
164 z-index: $zindex-popover;
165 transition: $duration--moderate-01 $exit-easing--expressive;
166 &:focus {
167 top: 0.5rem;
168 transition-timing-function: $entrance-easing--expressive;
169 }
Derick Montague75b48322019-12-06 01:24:41 -0600170 }
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530171 .navbar-dark {
172 .navbar-text,
173 .nav-link,
174 .btn-link {
175 color: $white !important;
176 fill: currentColor;
177 }
Yoshie Muranaka74f86872020-02-10 12:28:37 -0800178 }
179
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530180 .nav-item {
Derick Montague7f970a12020-03-02 17:56:09 -0600181 fill: $light;
Yoshie Muranaka74f86872020-02-10 12:28:37 -0800182 }
183
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +0530184 .navbar {
185 padding: 0;
186 height: $header-height;
187
188 .btn-link {
189 padding: $spacer / 2;
190 }
191 }
192
193 .navbar-nav {
194 padding: 0 $spacer;
195 }
196
197 .nav-trigger {
198 fill: $light;
199 width: $header-height;
200 height: $header-height;
201 transition: none;
202
203 svg {
204 margin: 0;
205 }
206
207 &:hover {
208 fill: $light;
209 background-color: $dark;
210 }
211
212 @include media-breakpoint-up($responsive-layout-bp) {
213 display: none;
214 }
215 }
216
217 .dropdown {
218 .dropdown-menu {
219 margin-top: 7px;
220 }
Yoshie Muranakadc04feb2019-12-04 08:41:22 -0800221 }
222}
Yoshie Muranakab8b6f792019-12-03 14:47:32 -0800223</style>