import type { Dispatch, SetStateAction } from "react"; import { useState } from "react"; import { z } from "zod"; import { Dialog } from "@calcom/features/components/controlled-dialog"; import { useLocale } from "@calcom/lib/hooks/useLocale"; import { trpc } from "@calcom/trpc/react"; import { MultiEmail } from "@calcom/ui/components/address"; import { Button } from "@calcom/ui/components/button"; import { DialogContent, DialogFooter, DialogHeader } from "@calcom/ui/components/dialog"; import { showToast } from "@calcom/ui/components/toast"; import { TriangleAlertIcon, UserPlusIcon } from "@coss/ui/icons"; interface IAddGuestsDialog { isOpenDialog: boolean; setIsOpenDialog: Dispatch>; bookingId: number; } export const AddGuestsDialog = (props: IAddGuestsDialog) => { const { t } = useLocale(); const ZAddGuestsInputSchema = z.array(z.string().email()).refine((emails) => { const uniqueEmails = new Set(emails); return uniqueEmails.size === emails.length; }); const { isOpenDialog, setIsOpenDialog, bookingId } = props; const utils = trpc.useUtils(); const [multiEmailValue, setMultiEmailValue] = useState([""]); const [isInvalidEmail, setIsInvalidEmail] = useState(false); const addGuestsMutation = trpc.viewer.bookings.addGuests.useMutation({ onSuccess: async () => { showToast(t("guests_added"), "success"); setIsOpenDialog(false); setMultiEmailValue([""]); utils.viewer.bookings.invalidate(); }, onError: (err) => { const message = `${err.data?.code}: ${t(err.message)}`; showToast(message || t("unable_to_add_guests"), "error"); }, }); const handleAdd = () => { if (multiEmailValue.length === 0) { return; } const validationResult = ZAddGuestsInputSchema.safeParse(multiEmailValue); if (validationResult.success) { const guests = multiEmailValue.map((email) => ({ email })); addGuestsMutation.mutate({ bookingId, guests }); } else { setIsInvalidEmail(true); } }; return (
{isInvalidEmail && (

{t("emails_must_be_unique_valid")}

)}
); };