| 
									
										
										
										
											2024-09-22 09:59:20 -05:00
										 |  |  | import { useReadOnlyActions, useStoreActions } from "./use-actions-factory"; | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  | import type { BoundT } from "./types"; | 
					
						
							|  |  |  | import type { BaseCRUDAPI, BaseCRUDAPIReadOnly } from "~/lib/api/base/base-clients"; | 
					
						
							|  |  |  | import type { QueryValue } from "~/lib/api/base/route"; | 
					
						
							| 
									
										
										
										
											2024-09-22 09:59:20 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  | export const useData = function <T extends BoundT>(defaultObject: T) { | 
					
						
							| 
									
										
										
										
											2024-09-22 09:59:20 -05:00
										 |  |  |   const data = reactive({ ...defaultObject }); | 
					
						
							|  |  |  |   function reset() { | 
					
						
							|  |  |  |     Object.assign(data, defaultObject); | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return { data, reset }; | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  | }; | 
					
						
							| 
									
										
										
										
											2024-09-22 09:59:20 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  | export const useReadOnlyStore = function <T extends BoundT>( | 
					
						
							| 
									
										
										
										
											2024-09-22 09:59:20 -05:00
										 |  |  |   store: Ref<T[]>, | 
					
						
							|  |  |  |   loading: Ref<boolean>, | 
					
						
							|  |  |  |   api: BaseCRUDAPIReadOnly<T>, | 
					
						
							| 
									
										
										
										
											2024-10-11 19:36:26 -05:00
										 |  |  |   params = {} as Record<string, QueryValue>, | 
					
						
							| 
									
										
										
										
											2024-09-22 09:59:20 -05:00
										 |  |  | ) { | 
					
						
							| 
									
										
										
										
											2024-10-11 19:36:26 -05:00
										 |  |  |   const storeActions = useReadOnlyActions(api, store, loading); | 
					
						
							| 
									
										
										
										
											2024-09-22 09:59:20 -05:00
										 |  |  |   const actions = { | 
					
						
							| 
									
										
										
										
											2024-10-11 19:36:26 -05:00
										 |  |  |     ...storeActions, | 
					
						
							|  |  |  |     async refresh() { | 
					
						
							|  |  |  |       return await storeActions.refresh(1, -1, params); | 
					
						
							|  |  |  |     }, | 
					
						
							| 
									
										
										
										
											2024-09-22 09:59:20 -05:00
										 |  |  |     flushStore() { | 
					
						
							|  |  |  |       store.value = []; | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-26 11:25:15 -05:00
										 |  |  |   if (!loading.value && !store.value.length) { | 
					
						
							| 
									
										
										
										
											2024-10-11 19:36:26 -05:00
										 |  |  |     const result = actions.getAll(1, -1, params); | 
					
						
							| 
									
										
										
										
											2024-09-22 09:59:20 -05:00
										 |  |  |     store.value = result.value || []; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return { store, actions }; | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  | }; | 
					
						
							| 
									
										
										
										
											2024-09-22 09:59:20 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  | export const useStore = function <T extends BoundT>( | 
					
						
							| 
									
										
										
										
											2024-09-22 09:59:20 -05:00
										 |  |  |   store: Ref<T[]>, | 
					
						
							|  |  |  |   loading: Ref<boolean>, | 
					
						
							|  |  |  |   api: BaseCRUDAPI<unknown, T, unknown>, | 
					
						
							| 
									
										
										
										
											2024-10-11 19:36:26 -05:00
										 |  |  |   params = {} as Record<string, QueryValue>, | 
					
						
							| 
									
										
										
										
											2024-09-22 09:59:20 -05:00
										 |  |  | ) { | 
					
						
							| 
									
										
										
										
											2024-10-11 19:36:26 -05:00
										 |  |  |   const storeActions = useStoreActions(api, store, loading); | 
					
						
							| 
									
										
										
										
											2024-09-22 09:59:20 -05:00
										 |  |  |   const actions = { | 
					
						
							| 
									
										
										
										
											2024-10-11 19:36:26 -05:00
										 |  |  |     ...storeActions, | 
					
						
							|  |  |  |     async refresh() { | 
					
						
							|  |  |  |       return await storeActions.refresh(1, -1, params); | 
					
						
							|  |  |  |     }, | 
					
						
							| 
									
										
										
										
											2024-09-22 09:59:20 -05:00
										 |  |  |     flushStore() { | 
					
						
							|  |  |  |       store = ref([]); | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-26 11:25:15 -05:00
										 |  |  |   if (!loading.value && !store.value.length) { | 
					
						
							| 
									
										
										
										
											2024-10-11 19:36:26 -05:00
										 |  |  |     const result = actions.getAll(1, -1, params); | 
					
						
							| 
									
										
										
										
											2024-09-22 09:59:20 -05:00
										 |  |  |     store.value = result.value || []; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return { store, actions }; | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  | }; |