import { zodResolver } from "@hookform/resolvers/zod"; import type { Dispatch, SetStateAction } from "react"; import { useForm } from "react-hook-form"; import { z } from "zod"; import type { EventLocationType } from "@calcom/app-store/locations"; import { getEventLocationType } from "@calcom/app-store/locations"; import { useLocale } from "@calcom/lib/hooks/useLocale"; import { trpc } from "@calcom/trpc/react"; import { showToast, Dialog, DialogContent, Form, TextField, DialogFooter, Button, DialogClose, } from "@calcom/ui"; import { AlertCircle } from "@calcom/ui/components/icon"; type LocationTypeSetLinkDialogFormProps = { link?: string; type: EventLocationType["type"]; }; export function AppSetDefaultLinkDialog({ locationType, setLocationType, onSuccess, }: { locationType: EventLocationType & { slug: string }; setLocationType: Dispatch>; onSuccess: () => void; }) { const { t } = useLocale(); const eventLocationTypeOptions = getEventLocationType(locationType.type); const form = useForm({ resolver: zodResolver( z.object({ link: z.string().regex(new RegExp(eventLocationTypeOptions?.urlRegExp ?? "")) }) ), }); const updateDefaultAppMutation = trpc.viewer.updateUserDefaultConferencingApp.useMutation({ onSuccess: () => { onSuccess(); }, onError: () => { showToast(`Invalid App Link Format`, "error"); }, }); return ( setLocationType(undefined)}>
{ updateDefaultAppMutation.mutate({ appSlug: locationType.slug, appLink: values.link, }); setLocationType(undefined); }}> <>
); }