| 
									
										
										
										
											2021-09-01 21:39:40 -08:00
										 |  |  | import { useAsyncKey } from "./use-utils"; | 
					
						
							| 
									
										
										
										
											2021-11-06 11:28:47 -08:00
										 |  |  | import { useUserApi } from "~/composables/api"; | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  | import type { ReadWebhook } from "~/lib/api/types/household"; | 
					
						
							| 
									
										
										
										
											2021-09-01 21:39:40 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  | export const useGroupWebhooks = function () { | 
					
						
							| 
									
										
										
										
											2021-11-06 11:28:47 -08:00
										 |  |  |   const api = useUserApi(); | 
					
						
							| 
									
										
										
										
											2021-09-01 21:39:40 -08:00
										 |  |  |   const loading = ref(false); | 
					
						
							|  |  |  |   const validForm = ref(true); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   const actions = { | 
					
						
							|  |  |  |     getAll() { | 
					
						
							|  |  |  |       loading.value = true; | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  |       const { data: units } = useAsyncData(useAsyncKey(), async () => { | 
					
						
							| 
									
										
										
										
											2021-09-01 21:39:40 -08:00
										 |  |  |         const { data } = await api.groupWebhooks.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-09-01 21:39:40 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |       loading.value = false; | 
					
						
							|  |  |  |       return units; | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     async refreshAll() { | 
					
						
							|  |  |  |       loading.value = true; | 
					
						
							|  |  |  |       const { data } = await api.groupWebhooks.getAll(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-06-25 14:39:38 -05:00
										 |  |  |       if (data && data.items) { | 
					
						
							|  |  |  |         webhooks.value = data.items; | 
					
						
							| 
									
										
										
										
											2021-09-01 21:39:40 -08:00
										 |  |  |       } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       loading.value = false; | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     async createOne() { | 
					
						
							|  |  |  |       loading.value = true; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       const payload = { | 
					
						
							|  |  |  |         enabled: false, | 
					
						
							|  |  |  |         name: "New Webhook", | 
					
						
							|  |  |  |         url: "", | 
					
						
							| 
									
										
										
										
											2022-06-17 13:25:47 -08:00
										 |  |  |         scheduledTime: "00:00", | 
					
						
							| 
									
										
										
										
											2021-09-01 21:39:40 -08:00
										 |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       const { data } = await api.groupWebhooks.createOne(payload); | 
					
						
							|  |  |  |       if (data) { | 
					
						
							|  |  |  |         this.refreshAll(); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       loading.value = false; | 
					
						
							|  |  |  |     }, | 
					
						
							| 
									
										
										
										
											2022-05-21 21:22:02 +02:00
										 |  |  |     async updateOne(updateData: ReadWebhook) { | 
					
						
							| 
									
										
										
										
											2021-09-01 21:39:40 -08:00
										 |  |  |       if (!updateData.id) { | 
					
						
							|  |  |  |         return; | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-06-17 13:25:47 -08:00
										 |  |  |       // Convert to UTC time
 | 
					
						
							|  |  |  |       const [hours, minutes] = updateData.scheduledTime.split(":"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       const newDt = new Date(); | 
					
						
							|  |  |  |       newDt.setHours(Number(hours)); | 
					
						
							|  |  |  |       newDt.setMinutes(Number(minutes)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       updateData.scheduledTime = `${pad(newDt.getUTCHours(), 2)}:${pad(newDt.getUTCMinutes(), 2)}`; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       const payload = { | 
					
						
							|  |  |  |         ...updateData, | 
					
						
							|  |  |  |         scheduledTime: updateData.scheduledTime, | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-09-01 21:39:40 -08:00
										 |  |  |       loading.value = true; | 
					
						
							| 
									
										
										
										
											2022-06-17 13:25:47 -08:00
										 |  |  |       const { data } = await api.groupWebhooks.updateOne(updateData.id, payload); | 
					
						
							| 
									
										
										
										
											2021-09-01 21:39:40 -08:00
										 |  |  |       if (data) { | 
					
						
							|  |  |  |         this.refreshAll(); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       loading.value = false; | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     async deleteOne(id: string | number) { | 
					
						
							|  |  |  |       loading.value = true; | 
					
						
							|  |  |  |       const { data } = await api.groupWebhooks.deleteOne(id); | 
					
						
							|  |  |  |       if (data) { | 
					
						
							|  |  |  |         this.refreshAll(); | 
					
						
							|  |  |  |       } | 
					
						
							| 
									
										
										
										
											2024-07-06 14:10:01 -05:00
										 |  |  |       loading.value = false; | 
					
						
							| 
									
										
										
										
											2021-09-01 21:39:40 -08:00
										 |  |  |     }, | 
					
						
							| 
									
										
										
										
											2024-07-06 14:10:01 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     async testOne(id: string | number) { | 
					
						
							|  |  |  |       loading.value = true; | 
					
						
							|  |  |  |       await api.groupWebhooks.testOne(id); | 
					
						
							|  |  |  |       loading.value = false; | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  |     }, | 
					
						
							| 
									
										
										
										
											2021-09-01 21:39:40 -08:00
										 |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   const webhooks = actions.getAll(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return { webhooks, actions, validForm }; | 
					
						
							|  |  |  | }; | 
					
						
							| 
									
										
										
										
											2022-06-17 13:25:47 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  | function pad(num: number, size: number) { | 
					
						
							|  |  |  |   let numStr = num.toString(); | 
					
						
							|  |  |  |   while (numStr.length < size) numStr = "0" + numStr; | 
					
						
							|  |  |  |   return numStr; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-03-21 20:45:27 +01:00
										 |  |  | export function timeUTC(time: string): Date { | 
					
						
							| 
									
										
										
										
											2022-06-17 13:25:47 -08:00
										 |  |  |   const [hours, minutes] = time.split(":"); | 
					
						
							|  |  |  |   const dt = new Date(); | 
					
						
							|  |  |  |   dt.setUTCMinutes(Number(minutes)); | 
					
						
							|  |  |  |   dt.setUTCHours(Number(hours)); | 
					
						
							| 
									
										
										
										
											2023-03-21 20:45:27 +01:00
										 |  |  |   return dt; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export function timeUTCToLocal(time: string): string { | 
					
						
							|  |  |  |   const dt = timeUTC(time); | 
					
						
							| 
									
										
										
										
											2022-06-17 13:25:47 -08:00
										 |  |  |   return `${pad(dt.getHours(), 2)}:${pad(dt.getMinutes(), 2)}`; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export function timeLocalToUTC(time: string) { | 
					
						
							|  |  |  |   const [hours, minutes] = time.split(":"); | 
					
						
							|  |  |  |   const dt = new Date(); | 
					
						
							|  |  |  |   dt.setHours(Number(hours)); | 
					
						
							|  |  |  |   dt.setMinutes(Number(minutes)); | 
					
						
							|  |  |  |   return `${pad(dt.getUTCHours(), 2)}:${pad(dt.getUTCMinutes(), 2)}`; | 
					
						
							|  |  |  | } |