"use client"; import { NotificationChannels, NotificationPriorities, NotificationTargetGroups, NotificationTypes, } from "@/constants/enums"; import { useCompanyFullList, useGetAllCustomers, useGetUsersQuery, } from "@/hooks/queries"; import { useCreateNotificationQuery } from "@/hooks/queries/useNotificationQueries"; import { TCreateNotificationCredentials } from "@/lib/api/types/NotificationHistory"; import { ILabelValue } from "@/types/shared"; import { getEnumAsArray } from "@/utils/shared"; import { useRouter } from "next/navigation"; import { ChangeEvent, useState } from "react"; import { SubmitHandler, useForm } from "react-hook-form"; const useCreateNotificationFormPresenter = () => { const [recipient, setRecipient] = useState(null); const { register, formState: { errors }, handleSubmit, watch, setValue, reset, control, } = useForm(); const router = useRouter(); const { data: companies } = useCompanyFullList(); const { data: users } = useGetUsersQuery(); const { data: customers } = useGetAllCustomers(); const { mutate } = useCreateNotificationQuery(() => { router.back(); reset(); }); const onSubmit: SubmitHandler = (data) => { const credentials = { ...data, schedule_at: data.schedule_at || 0, }; mutate({ credentials }); }; const handleCancel = () => { reset(); router.back(); }; const onSelectTarget = (event: ChangeEvent): void => { const type = event.target.value as NotificationTargetGroups; const recipientMaps: Partial< Record | null> > = { [NotificationTargetGroups.SPECIFIC_COMPANY]: companies?.data.companies?.map((company) => ({ label: company.name, value: company.id, })) ?? null, [NotificationTargetGroups.SPECIFIC_ROLE]: [ { label: "Admin", value: "admin" }, { label: "Analyst", value: "analyst" }, ], [NotificationTargetGroups.SPECIFIC_USERS]: users?.data.users?.map((user) => ({ label: user.full_name ?? "", value: user.id, })) ?? null, [NotificationTargetGroups.SPECIFIC_CUSTOMER]: customers?.data.customers?.map((customer) => ({ label: customer.full_name, value: customer.id, })) ?? null, }; setRecipient(recipientMaps[type] ?? null); }; return { handleSubmit, watch, priorities: getEnumAsArray(NotificationPriorities), handleCancel, router, setValue, reset, register, errors, onSelectTarget, onSubmit, control, recipient, targets: getEnumAsArray(NotificationTargetGroups), types: getEnumAsArray(NotificationTypes), channels: getEnumAsArray(NotificationChannels), }; }; export default useCreateNotificationFormPresenter;