blob: 2b773a0440a414fa92dd3d690146dadbb098c679 [file] [log] [blame]
Derick Montaguea2988f42020-01-17 13:46:30 -06001<template>
Yoshie Muranaka74f86872020-02-10 12:28:37 -08002 <div>
3 <div class="nav-container" :class="{ open: isNavigationOpen }">
Derick Montague68592032020-04-04 14:02:34 -05004 <nav ref="nav" :aria-label="$t('appNavigation.primaryNavigation')">
Yoshie Muranaka74f86872020-02-10 12:28:37 -08005 <b-nav vertical>
Yoshie Muranakae0b76c32020-02-28 14:18:20 -08006 <b-nav-item to="/">
7 <icon-overview />
8 {{ $t('appNavigation.overview') }}
9 </b-nav-item>
Derick Montague42c19892020-01-17 16:10:34 -060010
Yoshie Muranaka74f86872020-02-10 12:28:37 -080011 <li class="nav-item">
12 <b-button v-b-toggle.health-menu variant="link">
Yoshie Muranaka9fc3f902020-03-04 10:36:57 -080013 <icon-health />
14 {{ $t('appNavigation.health') }}
Yoshie Muranaka74f86872020-02-10 12:28:37 -080015 <icon-expand class="icon-expand" />
16 </b-button>
17 <b-collapse id="health-menu" tag="ul" class="nav-item__nav">
Yoshie Muranaka6f102342020-05-05 09:45:39 -070018 <b-nav-item to="/health/event-logs">
19 {{ $t('appNavigation.eventLogs') }}
Yoshie Muranakae0b76c32020-02-28 14:18:20 -080020 </b-nav-item>
Yoshie Muranaka56ee7692020-05-28 13:28:29 -070021 <b-nav-item to="/health/hardware-status">
Yoshie Muranakae0b76c32020-02-28 14:18:20 -080022 {{ $t('appNavigation.hardwareStatus') }}
23 </b-nav-item>
Yoshie Muranaka30abccb2020-03-11 12:44:24 -070024 <b-nav-item to="/health/sensors">
Yoshie Muranakae0b76c32020-02-28 14:18:20 -080025 {{ $t('appNavigation.sensors') }}
26 </b-nav-item>
Yoshie Muranaka74f86872020-02-10 12:28:37 -080027 </b-collapse>
28 </li>
Derick Montague42c19892020-01-17 16:10:34 -060029
Yoshie Muranaka74f86872020-02-10 12:28:37 -080030 <li class="nav-item">
31 <b-button v-b-toggle.control-menu variant="link">
Yoshie Muranakae0b76c32020-02-28 14:18:20 -080032 <icon-control />
33 {{ $t('appNavigation.control') }}
Yoshie Muranaka74f86872020-02-10 12:28:37 -080034 <icon-expand class="icon-expand" />
35 </b-button>
36 <b-collapse id="control-menu" tag="ul" class="nav-item__nav">
Mateusz Gapski632de222020-07-09 09:21:33 +020037 <b-nav-item to="/control/kvm">
38 {{ $t('appNavigation.kvm') }}
39 </b-nav-item>
Sukanya Pandey9055d982020-03-31 17:37:53 +053040 <b-nav-item to="/control/manage-power-usage">
Yoshie Muranakae0b76c32020-02-28 14:18:20 -080041 {{ $t('appNavigation.managePowerUsage') }}
Yoshie Muranaka74f86872020-02-10 12:28:37 -080042 </b-nav-item>
Yoshie Muranakae0b76c32020-02-28 14:18:20 -080043 <b-nav-item to="/control/reboot-bmc">
44 {{ $t('appNavigation.rebootBmc') }}
45 </b-nav-item>
Sukanya Pandey96f69ca2020-05-20 15:32:57 +053046 <b-nav-item to="/control/serial-over-lan">
47 {{ $t('appNavigation.serialOverLan') }}
48 </b-nav-item>
SurenNeware090c2d42020-04-01 14:07:27 +053049 <b-nav-item to="/control/server-led">
Yoshie Muranakae0b76c32020-02-28 14:18:20 -080050 {{ $t('appNavigation.serverLed') }}
51 </b-nav-item>
Yoshie Muranakafa1512b2020-02-25 15:54:07 -080052 <b-nav-item to="/control/server-power-operations">
Yoshie Muranakae0b76c32020-02-28 14:18:20 -080053 {{ $t('appNavigation.serverPowerOperations') }}
Yoshie Muranaka74f86872020-02-10 12:28:37 -080054 </b-nav-item>
55 </b-collapse>
56 </li>
Yoshie Muranaka71ac2302019-12-26 11:43:36 -080057
Yoshie Muranaka74f86872020-02-10 12:28:37 -080058 <li class="nav-item">
59 <b-button v-b-toggle.configuration-menu variant="link">
Yoshie Muranakae0b76c32020-02-28 14:18:20 -080060 <icon-configuration />
61 {{ $t('appNavigation.configuration') }}
Yoshie Muranaka74f86872020-02-10 12:28:37 -080062 <icon-expand class="icon-expand" />
63 </b-button>
64 <b-collapse id="configuration-menu" tag="ul" class="nav-item__nav">
Dixsie Wolmers739e4592020-06-05 07:00:06 -050065 <b-nav-item to="/configuration/date-time-settings">
66 {{ $t('appNavigation.dateTimeSettings') }}
67 </b-nav-item>
Yoshie Muranaka74f86872020-02-10 12:28:37 -080068 <b-nav-item href="javascript:void(0)">
Yoshie Muranakae0b76c32020-02-28 14:18:20 -080069 {{ $t('appNavigation.firmware') }}
Yoshie Muranaka74f86872020-02-10 12:28:37 -080070 </b-nav-item>
Dixsie Wolmersbb81d552020-02-26 19:52:28 -060071 <b-nav-item to="/configuration/network-settings">
Yoshie Muranakae0b76c32020-02-28 14:18:20 -080072 {{ $t('appNavigation.networkSettings') }}
73 </b-nav-item>
74 <b-nav-item href="javascript:void(0)">
75 {{ $t('appNavigation.snmpSettings') }}
76 </b-nav-item>
Yoshie Muranaka74f86872020-02-10 12:28:37 -080077 </b-collapse>
78 </li>
Derick Montague42c19892020-01-17 16:10:34 -060079
Yoshie Muranaka74f86872020-02-10 12:28:37 -080080 <li class="nav-item">
81 <b-button v-b-toggle.access-control-menu variant="link">
Yoshie Muranakae0b76c32020-02-28 14:18:20 -080082 <icon-access-control />
83 {{ $t('appNavigation.accessControl') }}
Yoshie Muranaka74f86872020-02-10 12:28:37 -080084 <icon-expand class="icon-expand" />
85 </b-button>
86 <b-collapse id="access-control-menu" tag="ul" class="nav-item__nav">
Yoshie Muranakac4e38ab2020-04-09 12:41:27 -070087 <b-nav-item to="/access-control/ldap">
Yoshie Muranakae0b76c32020-02-28 14:18:20 -080088 {{ $t('appNavigation.ldap') }}
89 </b-nav-item>
Yoshie Muranaka74f86872020-02-10 12:28:37 -080090 <b-nav-item to="/access-control/local-user-management">
Yoshie Muranakae0b76c32020-02-28 14:18:20 -080091 {{ $t('appNavigation.localUserManagement') }}
Yoshie Muranaka74f86872020-02-10 12:28:37 -080092 </b-nav-item>
Yoshie Muranaka37393812020-03-24 15:25:24 -070093 <b-nav-item to="/access-control/ssl-certificates">
Yoshie Muranakae0b76c32020-02-28 14:18:20 -080094 {{ $t('appNavigation.sslCertificates') }}
Yoshie Muranaka74f86872020-02-10 12:28:37 -080095 </b-nav-item>
96 </b-collapse>
97 </li>
98 </b-nav>
99 </nav>
100 </div>
101 <transition name="fade">
102 <div
103 v-if="isNavigationOpen"
Derick Montaguead2ceb62020-04-24 18:11:04 -0500104 id="nav-overlay"
Yoshie Muranaka74f86872020-02-10 12:28:37 -0800105 class="nav-overlay"
106 @click="toggleIsOpen"
107 ></div>
108 </transition>
109 </div>
Derick Montaguea2988f42020-01-17 13:46:30 -0600110</template>
111
112<script>
Yoshie Muranaka71ac2302019-12-26 11:43:36 -0800113import IconAnalytics from '@carbon/icons-vue/es/analytics/16';
114import IconDataCheck from '@carbon/icons-vue/es/data--check/16';
115import IconSettingsAdjust from '@carbon/icons-vue/es/settings--adjust/16';
116import IconSettings from '@carbon/icons-vue/es/settings/16';
117import IconPassword from '@carbon/icons-vue/es/password/16';
118import IconChevronUp from '@carbon/icons-vue/es/chevron--up/16';
Derick Montaguea2988f42020-01-17 13:46:30 -0600119
120export default {
Derick Montaguee2fd1562019-12-20 13:26:53 -0600121 name: 'AppNavigation',
Derick Montague42c19892020-01-17 16:10:34 -0600122 components: {
Yoshie Muranaka71ac2302019-12-26 11:43:36 -0800123 iconOverview: IconAnalytics,
124 iconHealth: IconDataCheck,
125 iconControl: IconSettingsAdjust,
126 iconConfiguration: IconSettings,
127 iconAccessControl: IconPassword,
128 iconExpand: IconChevronUp
Yoshie Muranaka74f86872020-02-10 12:28:37 -0800129 },
130 data() {
131 return {
132 isNavigationOpen: false
133 };
134 },
135 watch: {
136 $route: function() {
137 this.isNavigationOpen = false;
138 },
139 isNavigationOpen: function(isNavigationOpen) {
140 this.$root.$emit('change:isNavigationOpen', isNavigationOpen);
141 }
142 },
143 mounted() {
144 this.$root.$on('toggle:navigation', () => this.toggleIsOpen());
145 },
146 methods: {
147 toggleIsOpen() {
148 this.isNavigationOpen = !this.isNavigationOpen;
149 }
Derick Montague42c19892020-01-17 16:10:34 -0600150 }
Derick Montaguea2988f42020-01-17 13:46:30 -0600151};
152</script>
Derick Montague42c19892020-01-17 16:10:34 -0600153
Yoshie Muranaka71ac2302019-12-26 11:43:36 -0800154<style scoped lang="scss">
Derick Montague40865722020-04-13 17:01:19 -0500155@import 'src/assets/styles/helpers';
156
Yoshie Muranaka71ac2302019-12-26 11:43:36 -0800157svg {
Derick Montague66f903f2020-02-28 11:22:31 -0600158 fill: currentColor;
159 height: 1.2rem;
160 width: 1.2rem;
Yoshie Muranaka71ac2302019-12-26 11:43:36 -0800161 margin-left: 0 !important; //!important overriding button specificity
162 vertical-align: text-bottom;
163 &:not(.icon-expand) {
164 margin-right: $spacer;
165 }
166}
167
168.nav {
SurenNeware057232b2020-06-08 20:53:26 +0530169 padding-top: $spacer / 4;
170 @include media-breakpoint-up($responsive-layout-bp) {
171 padding-top: $spacer;
172 }
Yoshie Muranaka71ac2302019-12-26 11:43:36 -0800173}
174
175.nav-item__nav {
Derick Montague42c19892020-01-17 16:10:34 -0600176 list-style: none;
177 padding-left: 0;
Yoshie Muranaka71ac2302019-12-26 11:43:36 -0800178 margin-left: 0;
179
Yoshie Muranaka85358ed2020-05-18 10:05:36 -0700180 .nav-item {
181 outline: none;
182 }
183
Yoshie Muranaka71ac2302019-12-26 11:43:36 -0800184 .nav-link {
185 padding-left: $spacer * 4;
Yoshie Muranaka85358ed2020-05-18 10:05:36 -0700186 outline: none;
Yoshie Muranaka71ac2302019-12-26 11:43:36 -0800187
188 &:not(.nav-link--current) {
189 font-weight: normal;
190 }
191 }
192}
193
194.btn-link {
195 width: 100%;
196 text-align: left;
197 text-decoration: none !important;
198 border-radius: 0;
199
200 &.collapsed {
201 .icon-expand {
202 transform: rotate(180deg);
203 }
204 }
Yoshie Muranaka71ac2302019-12-26 11:43:36 -0800205}
206
207.icon-expand {
208 float: right;
209 margin-top: $spacer / 4;
210}
211
212.btn-link,
213.nav-link {
214 position: relative;
215 font-weight: $headings-font-weight;
216 padding-left: $spacer; // defining consistent padding for links and buttons
217 padding-right: $spacer;
Yoshie Muranaka01da8182020-07-08 15:46:43 -0700218 color: theme-color('secondary');
Yoshie Muranaka71ac2302019-12-26 11:43:36 -0800219
220 &:hover {
Yoshie Muranaka01da8182020-07-08 15:46:43 -0700221 background-color: gray('300');
222 color: theme-color('dark');
Yoshie Muranaka71ac2302019-12-26 11:43:36 -0800223 }
Yoshie Muranaka9f5cea82020-02-04 09:30:00 -0800224
225 &:focus {
226 box-shadow: $btn-focus-box-shadow;
Yoshie Muranaka01da8182020-07-08 15:46:43 -0700227 color: theme-color('dark');
Yoshie Muranaka9f5cea82020-02-04 09:30:00 -0800228 }
Yoshie Muranaka71ac2302019-12-26 11:43:36 -0800229}
230
Derick Montague66f903f2020-02-28 11:22:31 -0600231.nav-link--current,
232.nav-link--current:hover,
233.nav-link--current:focus {
Yoshie Muranaka71ac2302019-12-26 11:43:36 -0800234 font-weight: $headings-font-weight;
Yoshie Muranaka01da8182020-07-08 15:46:43 -0700235 background-color: theme-color('secondary');
236 color: theme-color('light');
Derick Montague66f903f2020-02-28 11:22:31 -0600237 cursor: default;
Yoshie Muranaka71ac2302019-12-26 11:43:36 -0800238
239 &::before {
240 content: '';
241 position: absolute;
242 top: 0;
243 bottom: 0;
244 left: 0;
245 width: 4px;
Yoshie Muranaka01da8182020-07-08 15:46:43 -0700246 background-color: theme-color('primary');
Yoshie Muranaka71ac2302019-12-26 11:43:36 -0800247 }
Derick Montague42c19892020-01-17 16:10:34 -0600248}
Yoshie Muranaka74f86872020-02-10 12:28:37 -0800249
250.nav-container {
251 position: fixed;
252 width: $navigation-width;
253 top: $header-height;
254 bottom: 0;
255 left: 0;
256 z-index: $zindex-fixed;
257 overflow-y: auto;
Yoshie Muranaka01da8182020-07-08 15:46:43 -0700258 background-color: gray('200');
Yoshie Muranaka74f86872020-02-10 12:28:37 -0800259 transform: translateX(-$navigation-width);
260 transition: transform $exit-easing--productive $duration--moderate-02;
SurenNeware057232b2020-06-08 20:53:26 +0530261 @include media-breakpoint-down(md) {
262 z-index: $zindex-fixed + 2;
263 }
Yoshie Muranaka74f86872020-02-10 12:28:37 -0800264
Derick Montague74466b82020-06-28 10:17:32 -0500265 &.open,
266 &:focus-within {
Yoshie Muranaka74f86872020-02-10 12:28:37 -0800267 transform: translateX(0);
268 transition-timing-function: $entrance-easing--productive;
269 }
270
271 @include media-breakpoint-up($responsive-layout-bp) {
272 transition-duration: $duration--fast-01;
273 transform: translateX(0);
274 }
275}
276
277.nav-overlay {
278 position: fixed;
279 top: $header-height;
280 bottom: 0;
281 left: 0;
282 right: 0;
SurenNeware057232b2020-06-08 20:53:26 +0530283 z-index: $zindex-fixed + 1;
Yoshie Muranaka74f86872020-02-10 12:28:37 -0800284 background-color: $black;
285 opacity: 0.5;
286
287 &.fade-enter-active {
288 transition: opacity $duration--moderate-02 $entrance-easing--productive;
289 }
290
291 &.fade-leave-active {
292 transition: opacity $duration--fast-02 $exit-easing--productive;
293 }
294
295 &.fade-enter,
296 &.fade-leave-to {
297 opacity: 0;
298 }
299
300 @include media-breakpoint-up($responsive-layout-bp) {
301 display: none;
302 }
303}
Derick Montague42c19892020-01-17 16:10:34 -0600304</style>