| 
									
										
										
										
											2021-07-31 14:45:28 -08:00
										 |  |  | <template> | 
					
						
							| 
									
										
										
										
											2021-08-23 12:24:38 -08:00
										 |  |  |   <v-navigation-drawer :value="value" clipped app width="240px"> | 
					
						
							| 
									
										
										
										
											2021-08-01 19:24:47 -08:00
										 |  |  |     <!-- User Profile --> | 
					
						
							|  |  |  |     <template v-if="$auth.user"> | 
					
						
							| 
									
										
										
										
											2021-08-31 14:39:02 -08:00
										 |  |  |       <v-list-item two-line to="/user/profile" exact> | 
					
						
							| 
									
										
										
										
											2021-08-01 19:24:47 -08:00
										 |  |  |         <v-list-item-avatar color="accent" class="white--text"> | 
					
						
							|  |  |  |           <v-img :src="require(`~/static/account.png`)" /> | 
					
						
							|  |  |  |         </v-list-item-avatar> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         <v-list-item-content> | 
					
						
							|  |  |  |           <v-list-item-title> {{ $auth.user.fullName }}</v-list-item-title> | 
					
						
							|  |  |  |           <v-list-item-subtitle> {{ $auth.user.admin ? $t("user.admin") : $t("user.user") }}</v-list-item-subtitle> | 
					
						
							|  |  |  |         </v-list-item-content> | 
					
						
							|  |  |  |       </v-list-item> | 
					
						
							|  |  |  |       <v-divider></v-divider> | 
					
						
							|  |  |  |     </template> | 
					
						
							| 
									
										
										
										
											2021-08-06 16:28:12 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-01 19:24:47 -08:00
										 |  |  |     <!-- Primary Links --> | 
					
						
							| 
									
										
										
										
											2021-08-23 12:24:38 -08:00
										 |  |  |     <template v-if="topLink"> | 
					
						
							|  |  |  |       <v-list nav dense> | 
					
						
							|  |  |  |         <template v-for="nav in topLink"> | 
					
						
							|  |  |  |           <!-- Multi Items --> | 
					
						
							|  |  |  |           <v-list-group | 
					
						
							|  |  |  |             v-if="nav.children && ($auth.loggedIn || !nav.restricted)" | 
					
						
							|  |  |  |             :key="nav.title + 'multi-item'" | 
					
						
							|  |  |  |             v-model="dropDowns[nav.title]" | 
					
						
							|  |  |  |             color="primary" | 
					
						
							|  |  |  |             :prepend-icon="nav.icon" | 
					
						
							|  |  |  |           > | 
					
						
							|  |  |  |             <template #activator> | 
					
						
							|  |  |  |               <v-list-item-title>{{ nav.title }}</v-list-item-title> | 
					
						
							|  |  |  |             </template> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-31 14:39:02 -08:00
										 |  |  |             <v-list-item v-for="child in nav.children" :key="child.title" exact :to="child.to"> | 
					
						
							| 
									
										
										
										
											2021-08-23 12:24:38 -08:00
										 |  |  |               <v-list-item-icon> | 
					
						
							|  |  |  |                 <v-icon>{{ child.icon }}</v-icon> | 
					
						
							|  |  |  |               </v-list-item-icon> | 
					
						
							|  |  |  |               <v-list-item-title>{{ child.title }}</v-list-item-title> | 
					
						
							|  |  |  |             </v-list-item> | 
					
						
							|  |  |  |             <v-divider class="mb-4"></v-divider> | 
					
						
							|  |  |  |           </v-list-group> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           <!-- Single Item --> | 
					
						
							|  |  |  |           <v-list-item-group | 
					
						
							|  |  |  |             v-else-if="$auth.loggedIn || !nav.restricted" | 
					
						
							|  |  |  |             :key="nav.title + 'single-item'" | 
					
						
							|  |  |  |             v-model="secondarySelected" | 
					
						
							|  |  |  |             color="primary" | 
					
						
							|  |  |  |           > | 
					
						
							| 
									
										
										
										
											2021-08-31 14:39:02 -08:00
										 |  |  |             <v-list-item exact link :to="nav.to"> | 
					
						
							| 
									
										
										
										
											2021-08-23 12:24:38 -08:00
										 |  |  |               <v-list-item-icon> | 
					
						
							|  |  |  |                 <v-icon>{{ nav.icon }}</v-icon> | 
					
						
							|  |  |  |               </v-list-item-icon> | 
					
						
							|  |  |  |               <v-list-item-title>{{ nav.title }}</v-list-item-title> | 
					
						
							|  |  |  |             </v-list-item> | 
					
						
							|  |  |  |           </v-list-item-group> | 
					
						
							|  |  |  |         </template> | 
					
						
							|  |  |  |       </v-list> | 
					
						
							|  |  |  |     </template> | 
					
						
							| 
									
										
										
										
											2021-08-01 19:24:47 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     <!-- Secondary Links --> | 
					
						
							|  |  |  |     <template v-if="secondaryLinks"> | 
					
						
							| 
									
										
										
										
											2021-08-06 16:28:12 -08:00
										 |  |  |       <v-subheader v-if="secondaryHeader" class="pb-0">{{ secondaryHeader }}</v-subheader> | 
					
						
							| 
									
										
										
										
											2021-08-01 19:24:47 -08:00
										 |  |  |       <v-divider></v-divider> | 
					
						
							| 
									
										
										
										
											2021-08-31 14:39:02 -08:00
										 |  |  |       <v-list nav dense exact> | 
					
						
							| 
									
										
										
										
											2021-08-06 16:28:12 -08:00
										 |  |  |         <template v-for="nav in secondaryLinks"> | 
					
						
							|  |  |  |           <!-- Multi Items --> | 
					
						
							|  |  |  |           <v-list-group | 
					
						
							|  |  |  |             v-if="nav.children" | 
					
						
							|  |  |  |             :key="nav.title + 'multi-item'" | 
					
						
							|  |  |  |             v-model="dropDowns[nav.title]" | 
					
						
							|  |  |  |             color="primary" | 
					
						
							|  |  |  |             :prepend-icon="nav.icon" | 
					
						
							|  |  |  |           > | 
					
						
							|  |  |  |             <template #activator> | 
					
						
							|  |  |  |               <v-list-item-title>{{ nav.title }}</v-list-item-title> | 
					
						
							|  |  |  |             </template> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-31 14:39:02 -08:00
										 |  |  |             <v-list-item v-for="child in nav.children" :key="child.title" exact :to="child.to"> | 
					
						
							| 
									
										
										
										
											2021-08-06 16:28:12 -08:00
										 |  |  |               <v-list-item-icon> | 
					
						
							|  |  |  |                 <v-icon>{{ child.icon }}</v-icon> | 
					
						
							|  |  |  |               </v-list-item-icon> | 
					
						
							|  |  |  |               <v-list-item-title>{{ child.title }}</v-list-item-title> | 
					
						
							|  |  |  |             </v-list-item> | 
					
						
							| 
									
										
										
										
											2021-08-23 12:24:38 -08:00
										 |  |  |             <v-divider class="mb-4"></v-divider> | 
					
						
							| 
									
										
										
										
											2021-08-06 16:28:12 -08:00
										 |  |  |           </v-list-group> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           <!-- Single Item --> | 
					
						
							|  |  |  |           <v-list-item-group v-else :key="nav.title + 'single-item'" v-model="secondarySelected" color="primary"> | 
					
						
							| 
									
										
										
										
											2021-08-31 14:39:02 -08:00
										 |  |  |             <v-list-item exact link :to="nav.to"> | 
					
						
							| 
									
										
										
										
											2021-08-06 16:28:12 -08:00
										 |  |  |               <v-list-item-icon> | 
					
						
							|  |  |  |                 <v-icon>{{ nav.icon }}</v-icon> | 
					
						
							|  |  |  |               </v-list-item-icon> | 
					
						
							|  |  |  |               <v-list-item-title>{{ nav.title }}</v-list-item-title> | 
					
						
							|  |  |  |             </v-list-item> | 
					
						
							|  |  |  |           </v-list-item-group> | 
					
						
							|  |  |  |         </template> | 
					
						
							| 
									
										
										
										
											2021-08-01 19:24:47 -08:00
										 |  |  |       </v-list> | 
					
						
							|  |  |  |     </template> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <!-- Bottom Navigation Links --> | 
					
						
							|  |  |  |     <template v-if="bottomLinks"> | 
					
						
							|  |  |  |       <v-list class="fixedBottom" nav dense> | 
					
						
							|  |  |  |         <v-list-item-group v-model="bottomSelected" color="primary"> | 
					
						
							|  |  |  |           <v-list-item | 
					
						
							|  |  |  |             v-for="nav in bottomLinks" | 
					
						
							|  |  |  |             :key="nav.title" | 
					
						
							| 
									
										
										
										
											2021-08-31 14:39:02 -08:00
										 |  |  |             exact | 
					
						
							| 
									
										
										
										
											2021-08-01 19:24:47 -08:00
										 |  |  |             link | 
					
						
							|  |  |  |             :to="nav.to || null" | 
					
						
							|  |  |  |             :href="nav.href || null" | 
					
						
							|  |  |  |             :target="nav.href ? '_blank' : null" | 
					
						
							|  |  |  |           > | 
					
						
							|  |  |  |             <v-list-item-icon> | 
					
						
							|  |  |  |               <v-icon>{{ nav.icon }}</v-icon> | 
					
						
							|  |  |  |             </v-list-item-icon> | 
					
						
							|  |  |  |             <v-list-item-title>{{ nav.title }}</v-list-item-title> | 
					
						
							|  |  |  |           </v-list-item> | 
					
						
							|  |  |  |         </v-list-item-group> | 
					
						
							|  |  |  |       </v-list> | 
					
						
							|  |  |  |     </template> | 
					
						
							|  |  |  |   </v-navigation-drawer> | 
					
						
							| 
									
										
										
										
											2021-07-31 14:45:28 -08:00
										 |  |  | </template> | 
					
						
							|  |  |  |    | 
					
						
							|  |  |  | <script lang="ts"> | 
					
						
							| 
									
										
										
										
											2021-08-01 19:24:47 -08:00
										 |  |  | import { defineComponent } from "@nuxtjs/composition-api"; | 
					
						
							|  |  |  | import { SidebarLinks } from "~/types/application-types"; | 
					
						
							| 
									
										
										
										
											2021-07-31 14:45:28 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  | export default defineComponent({ | 
					
						
							| 
									
										
										
										
											2021-08-01 19:24:47 -08:00
										 |  |  |   props: { | 
					
						
							|  |  |  |     value: { | 
					
						
							|  |  |  |       type: Boolean, | 
					
						
							|  |  |  |       default: null, | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     user: { | 
					
						
							|  |  |  |       type: Object, | 
					
						
							|  |  |  |       default: null, | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     topLink: { | 
					
						
							|  |  |  |       type: Array as () => SidebarLinks, | 
					
						
							|  |  |  |       required: true, | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     secondaryLinks: { | 
					
						
							|  |  |  |       type: Array as () => SidebarLinks, | 
					
						
							|  |  |  |       required: false, | 
					
						
							|  |  |  |       default: null, | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     bottomLinks: { | 
					
						
							|  |  |  |       type: Array as () => SidebarLinks, | 
					
						
							|  |  |  |       required: false, | 
					
						
							|  |  |  |       default: null, | 
					
						
							|  |  |  |     }, | 
					
						
							| 
									
										
										
										
											2021-08-06 16:28:12 -08:00
										 |  |  |     secondaryHeader: { | 
					
						
							|  |  |  |       type: String, | 
					
						
							|  |  |  |       default: null, | 
					
						
							|  |  |  |     }, | 
					
						
							| 
									
										
										
										
											2021-08-01 19:24:47 -08:00
										 |  |  |   }, | 
					
						
							| 
									
										
										
										
											2021-07-31 14:45:28 -08:00
										 |  |  |   setup() { | 
					
						
							| 
									
										
										
										
											2021-08-01 19:24:47 -08:00
										 |  |  |     return {}; | 
					
						
							|  |  |  |   }, | 
					
						
							|  |  |  |   data() { | 
					
						
							|  |  |  |     return { | 
					
						
							| 
									
										
										
										
											2021-08-06 16:28:12 -08:00
										 |  |  |       dropDowns: {}, | 
					
						
							| 
									
										
										
										
											2021-08-01 19:24:47 -08:00
										 |  |  |       topSelected: null, | 
					
						
							|  |  |  |       secondarySelected: null, | 
					
						
							|  |  |  |       bottomSelected: null, | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  |   }, | 
					
						
							|  |  |  | }); | 
					
						
							| 
									
										
										
										
											2021-07-31 14:45:28 -08:00
										 |  |  | </script> | 
					
						
							|  |  |  |    | 
					
						
							| 
									
										
										
										
											2021-08-01 19:24:47 -08:00
										 |  |  | <style> | 
					
						
							|  |  |  | .fixedBottom { | 
					
						
							|  |  |  |   position: fixed !important; | 
					
						
							|  |  |  |   bottom: 0 !important; | 
					
						
							|  |  |  |   width: 100%; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @media print { | 
					
						
							|  |  |  |   .no-print { | 
					
						
							|  |  |  |     display: none; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | </style> |