| 
									
										
										
										
											2021-07-31 14:00:28 -08:00
										 |  |  | <template> | 
					
						
							| 
									
										
										
										
											2024-08-22 10:14:32 -05:00
										 |  |  |   <v-app v-if="ready" dark> | 
					
						
							| 
									
										
										
										
											2021-08-23 12:24:38 -08:00
										 |  |  |     <v-card-title> | 
					
						
							|  |  |  |       <slot> | 
					
						
							|  |  |  |         <h1 class="mx-auto">{{ $t("page.404-page-not-found") }}</h1> | 
					
						
							|  |  |  |       </slot> | 
					
						
							|  |  |  |     </v-card-title> | 
					
						
							|  |  |  |     <div class="d-flex justify-space-around"> | 
					
						
							|  |  |  |       <div class="d-flex align-center"> | 
					
						
							|  |  |  |         <p class="primary--text">4</p> | 
					
						
							|  |  |  |         <v-icon color="primary" class="mx-auto mb-0" size="200"> | 
					
						
							|  |  |  |           {{ $globals.icons.primary }} | 
					
						
							|  |  |  |         </v-icon> | 
					
						
							|  |  |  |         <p class="primary--text">4</p> | 
					
						
							|  |  |  |       </div> | 
					
						
							|  |  |  |     </div> | 
					
						
							|  |  |  |     <v-card-actions> | 
					
						
							|  |  |  |       <v-spacer></v-spacer> | 
					
						
							|  |  |  |       <slot name="actions"> | 
					
						
							|  |  |  |         <v-btn v-for="(button, index) in buttons" :key="index" nuxt :to="button.to" color="primary"> | 
					
						
							|  |  |  |           <v-icon left> {{ button.icon }} </v-icon> | 
					
						
							|  |  |  |           {{ button.text }} | 
					
						
							|  |  |  |         </v-btn> | 
					
						
							|  |  |  |       </slot> | 
					
						
							|  |  |  |       <v-spacer></v-spacer> | 
					
						
							|  |  |  |     </v-card-actions> | 
					
						
							| 
									
										
										
										
											2024-04-04 11:56:27 -05:00
										 |  |  |   </v-app> | 
					
						
							| 
									
										
										
										
											2021-07-31 14:00:28 -08:00
										 |  |  | </template> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-09 07:15:23 +01:00
										 |  |  | <script lang="ts"> | 
					
						
							| 
									
										
										
										
											2023-11-05 19:07:02 -06:00
										 |  |  | import { defineComponent, ref, useContext, useMeta, useRoute, useRouter } from "@nuxtjs/composition-api"; | 
					
						
							| 
									
										
										
										
											2022-01-09 07:15:23 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | export default defineComponent({ | 
					
						
							| 
									
										
										
										
											2021-10-07 09:39:47 -08:00
										 |  |  |   layout: "basic", | 
					
						
							| 
									
										
										
										
											2021-07-31 14:00:28 -08:00
										 |  |  |   props: { | 
					
						
							|  |  |  |     error: { | 
					
						
							|  |  |  |       type: Object, | 
					
						
							| 
									
										
										
										
											2021-08-01 19:24:47 -08:00
										 |  |  |       default: null, | 
					
						
							|  |  |  |     }, | 
					
						
							| 
									
										
										
										
											2021-07-31 14:00:28 -08:00
										 |  |  |   }, | 
					
						
							| 
									
										
										
										
											2022-01-09 07:15:23 +01:00
										 |  |  |   setup(props) { | 
					
						
							| 
									
										
										
										
											2023-11-05 19:07:02 -06:00
										 |  |  |     const { $auth, $globals, i18n } = useContext(); | 
					
						
							|  |  |  |     const ready = ref(false); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     const route = useRoute(); | 
					
						
							|  |  |  |     const router = useRouter(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     async function insertGroupSlugIntoRoute() { | 
					
						
							|  |  |  |       const groupSlug = ref($auth.user?.groupSlug); | 
					
						
							|  |  |  |       if (!groupSlug.value) { | 
					
						
							|  |  |  |         return; | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       let replaceRoute = false; | 
					
						
							|  |  |  |       let routeVal = route.value.fullPath || "/"; | 
					
						
							|  |  |  |       if (routeVal[0] !== "/") { | 
					
						
							|  |  |  |         routeVal = `/${routeVal}`; | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       // replace "recipe" in URL with "r"
 | 
					
						
							|  |  |  |       if (routeVal.includes("/recipe/")) { | 
					
						
							|  |  |  |         replaceRoute = true; | 
					
						
							|  |  |  |         routeVal = routeVal.replace("/recipe/", "/r/"); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       // insert groupSlug into URL
 | 
					
						
							|  |  |  |       const routeComponents = routeVal.split("/"); | 
					
						
							|  |  |  |       if (routeComponents.length < 2 || routeComponents[1].toLowerCase() !== "g") { | 
					
						
							|  |  |  |         replaceRoute = true; | 
					
						
							|  |  |  |         routeVal = `/g/${groupSlug.value}${routeVal}`; | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       if (replaceRoute) { | 
					
						
							|  |  |  |         await router.replace(routeVal); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-08-22 10:14:32 -05:00
										 |  |  |     async function handle404() { | 
					
						
							|  |  |  |       const normalizedRoute = route.value.fullPath.replace(/\/$/, ""); | 
					
						
							|  |  |  |       const newRoute = normalizedRoute.replace(/^\/group\/(mealplan|members|notifiers|webhooks)(\/.*)?$/, "/household/$1$2"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       if (newRoute !== normalizedRoute) { | 
					
						
							|  |  |  |         await router.replace(newRoute); | 
					
						
							|  |  |  |       } else { | 
					
						
							|  |  |  |         await insertGroupSlugIntoRoute(); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       ready.value = true; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-11-05 19:07:02 -06:00
										 |  |  |     if (props.error.statusCode === 404) { | 
					
						
							| 
									
										
										
										
											2024-08-22 10:14:32 -05:00
										 |  |  |       handle404(); | 
					
						
							| 
									
										
										
										
											2023-11-05 19:07:02 -06:00
										 |  |  |     } else { | 
					
						
							|  |  |  |       ready.value = true; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2022-08-15 23:55:51 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     useMeta({ | 
					
						
							|  |  |  |       title: | 
					
						
							|  |  |  |         props.error.statusCode === 404 | 
					
						
							|  |  |  |           ? (i18n.t("page.404-not-found") as string) | 
					
						
							|  |  |  |           : (i18n.t("page.an-error-occurred") as string), | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-09 07:15:23 +01:00
										 |  |  |     const buttons = [ | 
					
						
							|  |  |  |       { icon: $globals.icons.home, to: "/", text: i18n.t("general.home") }, | 
					
						
							|  |  |  |     ]; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-07-31 14:00:28 -08:00
										 |  |  |     return { | 
					
						
							| 
									
										
										
										
											2022-01-09 07:15:23 +01:00
										 |  |  |       buttons, | 
					
						
							| 
									
										
										
										
											2023-11-05 19:07:02 -06:00
										 |  |  |       ready, | 
					
						
							| 
									
										
										
										
											2022-08-15 23:55:51 +02:00
										 |  |  |     }; | 
					
						
							| 
									
										
										
										
											2021-08-23 12:24:38 -08:00
										 |  |  |   }, | 
					
						
							| 
									
										
										
										
											2022-01-09 07:15:23 +01:00
										 |  |  |   // Needed for useMeta
 | 
					
						
							|  |  |  |   head: {}, | 
					
						
							|  |  |  | }); | 
					
						
							| 
									
										
										
										
											2021-07-31 14:00:28 -08:00
										 |  |  | </script> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | <style scoped> | 
					
						
							|  |  |  | h1 { | 
					
						
							|  |  |  |   font-size: 20px; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2021-08-23 12:24:38 -08:00
										 |  |  | p { | 
					
						
							|  |  |  |   padding-bottom: 0 !important; | 
					
						
							|  |  |  |   margin-bottom: 0 !important; | 
					
						
							|  |  |  |   font-size: 200px; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2021-07-31 14:00:28 -08:00
										 |  |  | </style> |