| 
									
										
										
										
											2021-10-07 09:39:47 -08:00
										 |  |  | import { useRoute, WritableComputedRef, computed, nextTick, useRouter } from "@nuxtjs/composition-api"; | 
					
						
							| 
									
										
										
										
											2021-09-09 08:51:29 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  | export function useRouterQuery(query: string) { | 
					
						
							|  |  |  |   const router = useRoute(); | 
					
						
							|  |  |  |   // TODO FUTURE: Remove when migrating to Vue 3
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   const param: WritableComputedRef<string> = computed({ | 
					
						
							|  |  |  |     get(): string { | 
					
						
							| 
									
										
										
										
											2021-10-07 09:39:47 -08:00
										 |  |  |       console.log("Get Query Change"); | 
					
						
							| 
									
										
										
										
											2022-01-16 03:38:11 +01:00
										 |  |  |       // @ts-ignore For some reason, this could also return an array
 | 
					
						
							| 
									
										
										
										
											2021-09-09 08:51:29 -08:00
										 |  |  |       return router.value?.query[query] || ""; | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     set(v: string): void { | 
					
						
							|  |  |  |       router.value.query[query] = v; | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return param; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2021-10-07 09:39:47 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  | export function useRouteQuery<T extends string | string[]>(name: string, defaultValue?: T) { | 
					
						
							|  |  |  |   const route = useRoute(); | 
					
						
							|  |  |  |   const router = useRouter(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return computed<any>({ | 
					
						
							|  |  |  |     get() { | 
					
						
							|  |  |  |       const data = route.value.query[name]; | 
					
						
							|  |  |  |       if (data == null) return defaultValue ?? null; | 
					
						
							|  |  |  |       return data; | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     set(v) { | 
					
						
							|  |  |  |       nextTick(() => { | 
					
						
							| 
									
										
										
										
											2021-11-08 21:12:13 -09:00
										 |  |  |         router.replace({ query: { ...route.value.query, [name]: v } }); | 
					
						
							| 
									
										
										
										
											2021-10-07 09:39:47 -08:00
										 |  |  |       }); | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | } |