| 
									
										
										
										
											2021-11-22 20:10:48 -09:00
										 |  |  | import { useAsyncKey } from "../use-utils"; | 
					
						
							|  |  |  | import { useUserApi } from "~/composables/api"; | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  | import type { VForm } from "~/types/vuetify"; | 
					
						
							|  |  |  | import type { RecipeTool } from "~/lib/api/types/recipe"; | 
					
						
							| 
									
										
										
										
											2021-11-22 20:10:48 -09:00
										 |  |  | 
 | 
					
						
							|  |  |  | export const useTools = function (eager = true) { | 
					
						
							| 
									
										
										
										
											2022-02-13 12:23:42 -09:00
										 |  |  |   const workingToolData = reactive<RecipeTool>({ | 
					
						
							|  |  |  |     id: "", | 
					
						
							| 
									
										
										
										
											2021-11-22 20:10:48 -09:00
										 |  |  |     name: "", | 
					
						
							| 
									
										
										
										
											2021-12-11 15:54:28 -09:00
										 |  |  |     slug: "", | 
					
						
							| 
									
										
										
										
											2021-11-22 20:10:48 -09:00
										 |  |  |   }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   const api = useUserApi(); | 
					
						
							|  |  |  |   const loading = ref(false); | 
					
						
							|  |  |  |   const validForm = ref(false); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   const actions = { | 
					
						
							|  |  |  |     getAll() { | 
					
						
							|  |  |  |       loading.value = true; | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  |       const units = useAsyncData(useAsyncKey(), async () => { | 
					
						
							| 
									
										
										
										
											2021-11-22 20:10:48 -09:00
										 |  |  |         const { data } = await api.tools.getAll(); | 
					
						
							| 
									
										
										
										
											2022-06-25 14:39:38 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |         if (data) { | 
					
						
							|  |  |  |           return data.items; | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  |         } | 
					
						
							|  |  |  |         else { | 
					
						
							| 
									
										
										
										
											2022-06-25 14:39:38 -05:00
										 |  |  |           return null; | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  |       }); | 
					
						
							| 
									
										
										
										
											2021-11-22 20:10:48 -09:00
										 |  |  | 
 | 
					
						
							|  |  |  |       loading.value = false; | 
					
						
							|  |  |  |       return units; | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     async refreshAll() { | 
					
						
							|  |  |  |       loading.value = true; | 
					
						
							|  |  |  |       const { data } = await api.tools.getAll(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       if (data) { | 
					
						
							| 
									
										
										
										
											2022-06-25 14:39:38 -05:00
										 |  |  |         tools.value = data.items; | 
					
						
							| 
									
										
										
										
											2021-11-22 20:10:48 -09:00
										 |  |  |       } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       loading.value = false; | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     async createOne(domForm: VForm | null = null) { | 
					
						
							|  |  |  |       if (domForm && !domForm.validate()) { | 
					
						
							|  |  |  |         validForm.value = false; | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       loading.value = true; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       const { data } = await api.tools.createOne(workingToolData); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       if (data) { | 
					
						
							|  |  |  |         tools.value?.push(data); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       domForm?.reset(); | 
					
						
							|  |  |  |       this.reset(); | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     async updateOne() { | 
					
						
							|  |  |  |       loading.value = true; | 
					
						
							|  |  |  |       const { data } = await api.tools.updateOne(workingToolData.id, workingToolData); | 
					
						
							|  |  |  |       if (data) { | 
					
						
							|  |  |  |         tools.value?.push(data); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       this.reset(); | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     async deleteOne(id: number) { | 
					
						
							|  |  |  |       loading.value = true; | 
					
						
							|  |  |  |       await api.tools.deleteOne(id); | 
					
						
							|  |  |  |       this.reset(); | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     reset() { | 
					
						
							|  |  |  |       workingToolData.name = ""; | 
					
						
							| 
									
										
										
										
											2022-02-13 12:23:42 -09:00
										 |  |  |       workingToolData.id = ""; | 
					
						
							| 
									
										
										
										
											2021-11-22 20:10:48 -09:00
										 |  |  |       loading.value = false; | 
					
						
							|  |  |  |       validForm.value = true; | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   const tools = (() => { | 
					
						
							|  |  |  |     if (eager) { | 
					
						
							|  |  |  |       return actions.getAll(); | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  |     } | 
					
						
							|  |  |  |     else { | 
					
						
							| 
									
										
										
										
											2021-11-22 20:10:48 -09:00
										 |  |  |       return ref([]); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   })(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return { | 
					
						
							|  |  |  |     tools, | 
					
						
							|  |  |  |     actions, | 
					
						
							|  |  |  |     workingToolData, | 
					
						
							|  |  |  |     loading, | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | }; |