import { usePathname } from "next/navigation"; import { useState } from "react"; import { useAppContextWithSchema } from "@calcom/app-store/EventTypeAppContext"; import AppCard from "@calcom/app-store/_components/AppCard"; import useIsAppEnabled from "@calcom/app-store/_utils/useIsAppEnabled"; import type { EventTypeAppCardComponent } from "@calcom/app-store/types"; import { WEBAPP_URL } from "@calcom/lib/constants"; import { useLocale } from "@calcom/lib/hooks/useLocale"; import { SchedulingType } from "@calcom/prisma/enums"; import { Alert } from "@calcom/ui/components/alert"; import { Button } from "@calcom/ui/components/button"; import { InputField, Label } from "@calcom/ui/components/form"; import { Select } from "@calcom/ui/components/form"; import { Switch } from "@calcom/ui/components/form"; import { Section } from "@calcom/ui/components/section"; import { showToast } from "@calcom/ui/components/toast"; import { SalesforceRecordEnum } from "../lib/enums"; import type { appDataSchema } from "../zod"; import WriteToObjectSettings, { BookingActionEnum } from "./components/WriteToObjectSettings"; const EventTypeAppCard: EventTypeAppCardComponent = function EventTypeAppCard({ app, eventType }) { const pathname = usePathname(); const { getAppData, setAppData, disabled } = useAppContextWithSchema(); const { enabled, updateEnabled } = useIsAppEnabled(app); const isRoundRobinLeadSkipEnabled = getAppData("roundRobinLeadSkip"); const roundRobinSkipCheckRecordOn = getAppData("roundRobinSkipCheckRecordOn") ?? SalesforceRecordEnum.CONTACT; const ifFreeEmailDomainSkipOwnerCheck = getAppData("ifFreeEmailDomainSkipOwnerCheck") ?? false; const isSkipContactCreationEnabled = getAppData("skipContactCreation"); const createLeadIfAccountNull = getAppData("createLeadIfAccountNull"); const createNewContactUnderAccount = getAppData("createNewContactUnderAccount"); const createEventOn = getAppData("createEventOn") ?? SalesforceRecordEnum.CONTACT; const onBookingWriteToEventObject = getAppData("onBookingWriteToEventObject") ?? false; const onBookingWriteToEventObjectMap = getAppData("onBookingWriteToEventObjectMap") ?? {}; const createEventOnLeadCheckForContact = getAppData("createEventOnLeadCheckForContact") ?? false; const onBookingChangeRecordOwner = getAppData("onBookingChangeRecordOwner") ?? false; const onBookingChangeRecordOwnerName = getAppData("onBookingChangeRecordOwnerName") ?? []; const sendNoShowAttendeeData = getAppData("sendNoShowAttendeeData") ?? false; const sendNoShowAttendeeDataField = getAppData("sendNoShowAttendeeDataField") ?? ""; const onBookingWriteToRecord = getAppData("onBookingWriteToRecord") ?? false; const onBookingWriteToRecordFields = getAppData("onBookingWriteToRecordFields") ?? {}; const ignoreGuests = getAppData("ignoreGuests") ?? false; const roundRobinSkipFallbackToLeadOwner = getAppData("roundRobinSkipFallbackToLeadOwner") ?? false; const onCancelWriteToEventRecord = getAppData("onCancelWriteToEventRecord") ?? false; const onCancelWriteToEventRecordFields = getAppData("onCancelWriteToEventRecordFields") ?? {}; const { t } = useLocale(); const recordOptions = [ { label: t("contact"), value: SalesforceRecordEnum.CONTACT }, { label: t("salesforce_lead"), value: SalesforceRecordEnum.LEAD }, { label: t("salesforce_contact_under_account"), value: SalesforceRecordEnum.ACCOUNT }, ]; const [createEventOnSelectedOption, setCreateEventOnSelectedOption] = useState( recordOptions.find((option) => option.value === createEventOn) ?? recordOptions[0] ); const checkOwnerOptions = [ { label: t("contact"), value: SalesforceRecordEnum.CONTACT }, { label: t("salesforce_lead"), value: SalesforceRecordEnum.LEAD }, { label: t("account"), value: SalesforceRecordEnum.ACCOUNT }, ]; const [checkOwnerSelectedOption, setCheckOwnerSelectedOption] = useState( checkOwnerOptions.find((option) => option.value === roundRobinSkipCheckRecordOn) ?? checkOwnerOptions[0] ); const [newOnBookingWriteToEventObjectField, setNewOnBookingWriteToEventObjectField] = useState({ field: "", value: "", }); // Used when creating events under leads or contacts under account const CreateContactUnderAccount = () => { return ( { setAppData("createNewContactUnderAccount", checked); }} /> ); }; return ( { updateEnabled(e); }} switchChecked={enabled} hideSettingsIcon> { if (e) { setCheckOwnerSelectedOption(e); setAppData("roundRobinSkipCheckRecordOn", e.value); } }} /> ) : null} <> {isRoundRobinLeadSkipEnabled ? ( <> {checkOwnerSelectedOption.value === SalesforceRecordEnum.CONTACT ? ( { setAppData("roundRobinSkipFallbackToLeadOwner", checked); }} /> ) : null} { setAppData("ifFreeEmailDomainSkipOwnerCheck", checked); }} /> ) : null} ) : null} { setAppData("onCancelWriteToEventRecord", checked); }} updateWriteToObjectData={(data) => setAppData("onCancelWriteToEventRecordFields", data)} /> { setAppData("sendNoShowAttendeeData", checked); }} /> {sendNoShowAttendeeData ? ( setAppData("sendNoShowAttendeeDataField", e.target.value)} /> ) : null} ); }; export default EventTypeAppCard;