import { useState } from "react"; import { Controller, useForm } from "react-hook-form"; import dayjs from "@calcom/dayjs"; import { useHasTeamPlan } from "@calcom/lib/hooks/useHasPaidPlan"; import { useLocale } from "@calcom/lib/hooks/useLocale"; import { trpc } from "@calcom/trpc/react"; import useMeQuery from "@calcom/trpc/react/hooks/useMeQuery"; import { Button, DateRangePicker, Dialog, DialogContent, DialogFooter, DialogHeader, Select, showToast, Switch, TextArea, UpgradeTeamsBadge, } from "@calcom/ui"; import type { BookingRedirectForm } from "@calcom/web/pages/settings/my-account/out-of-office"; export const CreateOrEditOutOfOfficeEntryModal = ({ openModal, closeModal, currentlyEditingOutOfOfficeEntry, }: { openModal: boolean; closeModal: () => void; currentlyEditingOutOfOfficeEntry: BookingRedirectForm | null; }) => { const { t } = useLocale(); const utils = trpc.useUtils(); const { data: listMembers } = trpc.viewer.teams.listMembers.useQuery({}); const me = useMeQuery(); const memberListOptions: { value: number; label: string; }[] = listMembers ?.filter((member) => me?.data?.id !== member.id) .map((member) => ({ value: member.id, label: member.name || "", })) || []; type Option = { value: number; label: string }; const { data: outOfOfficeReasonList } = trpc.viewer.outOfOfficeReasonList.useQuery(); const reasonList = (outOfOfficeReasonList || []).map((reason) => ({ label: `${reason.emoji} ${reason.userId === null ? t(reason.reason) : reason.reason}`, value: reason.id, })); const [profileRedirect, setProfileRedirect] = useState(!!currentlyEditingOutOfOfficeEntry?.toTeamUserId); const { hasTeamPlan } = useHasTeamPlan(); const { handleSubmit, setValue, control, register } = useForm({ defaultValues: currentlyEditingOutOfOfficeEntry ? currentlyEditingOutOfOfficeEntry : { dateRange: { startDate: dayjs().utc().startOf("d").toDate(), endDate: dayjs().utc().add(1, "d").endOf("d").toDate(), }, offset: dayjs().utcOffset(), toTeamUserId: null, reasonId: 1, }, }); const createOrEditOutOfOfficeEntry = trpc.viewer.outOfOfficeCreateOrUpdate.useMutation({ onSuccess: () => { showToast( currentlyEditingOutOfOfficeEntry ? t("success_edited_entry_out_of_office") : t("success_entry_created"), "success" ); utils.viewer.outOfOfficeEntriesList.invalidate(); closeModal(); }, onError: (error) => { showToast(t(error.message), "error"); }, }); return ( { event.preventDefault(); }}>
{ createOrEditOutOfOfficeEntry.mutate(data); })}>

{t("dates")}

( { onChange(values); }} /> )} />
{/* Reason Select */}

{t("reason")}

( className="mb-0 mt-1 text-white" name="reason" data-testid="reason_select" value={reasonList.find((reason) => reason.value === value)} placeholder={t("ooo_select_reason")} options={reasonList} onChange={(selectedOption) => { if (selectedOption?.value) { onChange(selectedOption.value); } }} /> )} />
{/* Notes input */}

{t("notes")}