blob: 4c858e81a28ee1d8c5afec226946ae3027d21e89 [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 }">
4 <nav ref="nav">
5 <b-nav vertical>
6 <b-nav-item to="/"><icon-overview />Overview</b-nav-item>
Derick Montague42c19892020-01-17 16:10:34 -06007
Yoshie Muranaka74f86872020-02-10 12:28:37 -08008 <li class="nav-item">
9 <b-button v-b-toggle.health-menu variant="link">
10 <icon-health />Health
11 <icon-expand class="icon-expand" />
12 </b-button>
13 <b-collapse id="health-menu" tag="ul" class="nav-item__nav">
14 <b-nav-item href="javascript:void(0)">Event Log</b-nav-item>
15 <b-nav-item href="javascript:void(0)">Hardware Status</b-nav-item>
16 <b-nav-item href="javascript:void(0)">Sensors</b-nav-item>
17 </b-collapse>
18 </li>
Derick Montague42c19892020-01-17 16:10:34 -060019
Yoshie Muranaka74f86872020-02-10 12:28:37 -080020 <li class="nav-item">
21 <b-button v-b-toggle.control-menu variant="link">
22 <icon-control />Control
23 <icon-expand class="icon-expand" />
24 </b-button>
25 <b-collapse id="control-menu" tag="ul" class="nav-item__nav">
26 <b-nav-item href="javascript:void(0)">
27 Manage power usage
28 </b-nav-item>
Yoshie Muranakac11d3892020-02-19 08:07:40 -080029 <b-nav-item to="/control/reboot-bmc">Reboot BMC</b-nav-item>
Yoshie Muranaka74f86872020-02-10 12:28:37 -080030 <b-nav-item href="javascript:void(0)">Server LED</b-nav-item>
31 <b-nav-item href="javascript:void(0)">
32 Server power operations
33 </b-nav-item>
34 </b-collapse>
35 </li>
Yoshie Muranaka71ac2302019-12-26 11:43:36 -080036
Yoshie Muranaka74f86872020-02-10 12:28:37 -080037 <li class="nav-item">
38 <b-button v-b-toggle.configuration-menu variant="link">
39 <icon-configuration />Configuration
40 <icon-expand class="icon-expand" />
41 </b-button>
42 <b-collapse id="configuration-menu" tag="ul" class="nav-item__nav">
43 <b-nav-item href="javascript:void(0)">Firmware</b-nav-item>
44 <b-nav-item href="javascript:void(0)">
45 Network settings
46 </b-nav-item>
47 <b-nav-item href="javascript:void(0)">SNMP settings</b-nav-item>
48 </b-collapse>
49 </li>
Derick Montague42c19892020-01-17 16:10:34 -060050
Yoshie Muranaka74f86872020-02-10 12:28:37 -080051 <li class="nav-item">
52 <b-button v-b-toggle.access-control-menu variant="link">
53 <icon-access-control />Access Control
54 <icon-expand class="icon-expand" />
55 </b-button>
56 <b-collapse id="access-control-menu" tag="ul" class="nav-item__nav">
57 <b-nav-item href="javascript:void(0)">LDAP</b-nav-item>
58 <b-nav-item to="/access-control/local-user-management">
59 Local user management
60 </b-nav-item>
61 <b-nav-item href="javascript:void(0)">
62 SSL Certificates
63 </b-nav-item>
64 </b-collapse>
65 </li>
66 </b-nav>
67 </nav>
68 </div>
69 <transition name="fade">
70 <div
71 v-if="isNavigationOpen"
72 class="nav-overlay"
73 @click="toggleIsOpen"
74 ></div>
75 </transition>
76 </div>
Derick Montaguea2988f42020-01-17 13:46:30 -060077</template>
78
79<script>
Yoshie Muranaka71ac2302019-12-26 11:43:36 -080080import IconAnalytics from '@carbon/icons-vue/es/analytics/16';
81import IconDataCheck from '@carbon/icons-vue/es/data--check/16';
82import IconSettingsAdjust from '@carbon/icons-vue/es/settings--adjust/16';
83import IconSettings from '@carbon/icons-vue/es/settings/16';
84import IconPassword from '@carbon/icons-vue/es/password/16';
85import IconChevronUp from '@carbon/icons-vue/es/chevron--up/16';
Derick Montaguea2988f42020-01-17 13:46:30 -060086
87export default {
Derick Montaguee2fd1562019-12-20 13:26:53 -060088 name: 'AppNavigation',
Derick Montague42c19892020-01-17 16:10:34 -060089 components: {
Yoshie Muranaka71ac2302019-12-26 11:43:36 -080090 iconOverview: IconAnalytics,
91 iconHealth: IconDataCheck,
92 iconControl: IconSettingsAdjust,
93 iconConfiguration: IconSettings,
94 iconAccessControl: IconPassword,
95 iconExpand: IconChevronUp
Yoshie Muranaka74f86872020-02-10 12:28:37 -080096 },
97 data() {
98 return {
99 isNavigationOpen: false
100 };
101 },
102 watch: {
103 $route: function() {
104 this.isNavigationOpen = false;
105 },
106 isNavigationOpen: function(isNavigationOpen) {
107 this.$root.$emit('change:isNavigationOpen', isNavigationOpen);
108 }
109 },
110 mounted() {
111 this.$root.$on('toggle:navigation', () => this.toggleIsOpen());
112 },
113 methods: {
114 toggleIsOpen() {
115 this.isNavigationOpen = !this.isNavigationOpen;
116 }
Derick Montague42c19892020-01-17 16:10:34 -0600117 }
Derick Montaguea2988f42020-01-17 13:46:30 -0600118};
119</script>
Derick Montague42c19892020-01-17 16:10:34 -0600120
Yoshie Muranaka71ac2302019-12-26 11:43:36 -0800121<style scoped lang="scss">
122svg {
123 fill: $gray-900;
124 margin-left: 0 !important; //!important overriding button specificity
125 vertical-align: text-bottom;
126 &:not(.icon-expand) {
127 margin-right: $spacer;
128 }
129}
130
131.nav {
Yoshie Muranaka71ac2302019-12-26 11:43:36 -0800132 padding-top: $spacer;
133}
134
135.nav-item__nav {
Derick Montague42c19892020-01-17 16:10:34 -0600136 list-style: none;
137 padding-left: 0;
Yoshie Muranaka71ac2302019-12-26 11:43:36 -0800138 margin-left: 0;
139
140 .nav-link {
141 padding-left: $spacer * 4;
142
143 &:not(.nav-link--current) {
144 font-weight: normal;
145 }
146 }
147}
148
149.btn-link {
150 width: 100%;
151 text-align: left;
152 text-decoration: none !important;
153 border-radius: 0;
154
155 &.collapsed {
156 .icon-expand {
157 transform: rotate(180deg);
158 }
159 }
Yoshie Muranaka71ac2302019-12-26 11:43:36 -0800160}
161
162.icon-expand {
163 float: right;
164 margin-top: $spacer / 4;
165}
166
167.btn-link,
168.nav-link {
169 position: relative;
170 font-weight: $headings-font-weight;
171 padding-left: $spacer; // defining consistent padding for links and buttons
172 padding-right: $spacer;
173 color: $gray-900 !important; //using important to avoid styling states
174
175 &:hover {
176 background-color: $gray-300;
177 }
Yoshie Muranaka9f5cea82020-02-04 09:30:00 -0800178
179 &:focus {
180 box-shadow: $btn-focus-box-shadow;
181 }
Yoshie Muranaka71ac2302019-12-26 11:43:36 -0800182}
183
184.nav-link--current {
185 font-weight: $headings-font-weight;
186 background-color: $gray-300;
187
188 &::before {
189 content: '';
190 position: absolute;
191 top: 0;
192 bottom: 0;
193 left: 0;
194 width: 4px;
195 background-color: $primary;
196 }
Derick Montague42c19892020-01-17 16:10:34 -0600197}
Yoshie Muranaka74f86872020-02-10 12:28:37 -0800198
199.nav-container {
200 position: fixed;
201 width: $navigation-width;
202 top: $header-height;
203 bottom: 0;
204 left: 0;
205 z-index: $zindex-fixed;
206 overflow-y: auto;
207 background-color: $gray-200;
208 transform: translateX(-$navigation-width);
209 transition: transform $exit-easing--productive $duration--moderate-02;
210
211 &.open {
212 transform: translateX(0);
213 transition-timing-function: $entrance-easing--productive;
214 }
215
216 @include media-breakpoint-up($responsive-layout-bp) {
217 transition-duration: $duration--fast-01;
218 transform: translateX(0);
219 }
220}
221
222.nav-overlay {
223 position: fixed;
224 top: $header-height;
225 bottom: 0;
226 left: 0;
227 right: 0;
228 z-index: $zindex-fixed - 1;
229 background-color: $black;
230 opacity: 0.5;
231
232 &.fade-enter-active {
233 transition: opacity $duration--moderate-02 $entrance-easing--productive;
234 }
235
236 &.fade-leave-active {
237 transition: opacity $duration--fast-02 $exit-easing--productive;
238 }
239
240 &.fade-enter,
241 &.fade-leave-to {
242 opacity: 0;
243 }
244
245 @include media-breakpoint-up($responsive-layout-bp) {
246 display: none;
247 }
248}
Derick Montague42c19892020-01-17 16:10:34 -0600249</style>