| 
									
										
										
										
											2025-06-30 05:13:42 -05:00
										 |  |  | import { useAdminApi } from "~/composables/api"; | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  | import type { UserIn, UserOut } from "~/lib/api/types/user"; | 
					
						
							| 
									
										
										
										
											2021-08-06 16:28:12 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  | /* | 
					
						
							| 
									
										
										
										
											2022-09-25 23:17:27 +00:00
										 |  |  | TODO: Potentially combine useAllUsers and useUser by delaying the get all users functionality | 
					
						
							| 
									
										
										
										
											2021-08-06 16:28:12 -08:00
										 |  |  | Unsure how this could work but still be clear and functional. Perhaps by passing arguments to the useUsers function | 
					
						
							|  |  |  | to control whether the object is substantiated... but some of the others rely on it being substantiated...Will come back to this. | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export const useAllUsers = function () { | 
					
						
							| 
									
										
										
										
											2025-06-30 05:13:42 -05:00
										 |  |  |   const api = useAdminApi(); | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  |   const asyncKey = String(Date.now()); | 
					
						
							|  |  |  |   const { data: users, refresh: refreshAllUsers } = useLazyAsyncData(asyncKey, async () => { | 
					
						
							| 
									
										
										
										
											2021-08-06 16:28:12 -08:00
										 |  |  |     const { data } = await api.users.getAll(); | 
					
						
							| 
									
										
										
										
											2022-06-25 14:39:38 -05:00
										 |  |  |     if (data) { | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  |       return data.items; | 
					
						
							| 
									
										
										
										
											2022-06-25 14:39:38 -05:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  |     else { | 
					
						
							|  |  |  |       return null; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   }); | 
					
						
							| 
									
										
										
										
											2021-08-06 16:28:12 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |   return { users, refreshAllUsers }; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export const useUser = function (refreshFunc: CallableFunction | null = null) { | 
					
						
							| 
									
										
										
										
											2025-06-30 05:13:42 -05:00
										 |  |  |   const api = useAdminApi(); | 
					
						
							| 
									
										
										
										
											2021-08-06 16:28:12 -08:00
										 |  |  |   const loading = ref(false); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   function getUser(id: string) { | 
					
						
							|  |  |  |     loading.value = true; | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  |     const user = useAsyncData(id, async () => { | 
					
						
							| 
									
										
										
										
											2021-08-06 16:28:12 -08:00
										 |  |  |       const { data } = await api.users.getOne(id); | 
					
						
							|  |  |  |       return data; | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  |     }); | 
					
						
							| 
									
										
										
										
											2021-08-06 16:28:12 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     loading.value = false; | 
					
						
							|  |  |  |     return user; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   async function createUser(payload: UserIn) { | 
					
						
							|  |  |  |     loading.value = true; | 
					
						
							|  |  |  |     const { data } = await api.users.createOne(payload); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     console.log(payload, data); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (refreshFunc) { | 
					
						
							|  |  |  |       refreshFunc(); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     loading.value = false; | 
					
						
							|  |  |  |     return data; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   async function deleteUser(id: string) { | 
					
						
							|  |  |  |     loading.value = true; | 
					
						
							|  |  |  |     const { data } = await api.users.deleteOne(id); | 
					
						
							|  |  |  |     loading.value = false; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (refreshFunc) { | 
					
						
							|  |  |  |       refreshFunc(); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return data; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-23 18:57:24 -09:00
										 |  |  |   async function updateUser(itemId: string, user: UserOut) { | 
					
						
							| 
									
										
										
										
											2021-08-06 16:28:12 -08:00
										 |  |  |     loading.value = true; | 
					
						
							| 
									
										
										
										
											2021-11-23 18:57:24 -09:00
										 |  |  |     const { data } = await api.users.updateOne(itemId, user); | 
					
						
							| 
									
										
										
										
											2021-08-06 16:28:12 -08:00
										 |  |  |     loading.value = false; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (refreshFunc) { | 
					
						
							|  |  |  |       refreshFunc(); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return data; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return { loading, getUser, deleteUser, updateUser, createUser }; | 
					
						
							|  |  |  | }; |