import { useSession } from "next-auth/react"; import { useForm } from "react-hook-form"; import { checkAdminOrOwner } from "@calcom/features/auth/lib/checkAdminOrOwner"; import { useLocale } from "@calcom/lib/hooks/useLocale"; import { trpc } from "@calcom/trpc/react"; import { Button } from "@calcom/ui/components/button"; import { Dialog, DialogContent, DialogFooter, DialogHeader } from "@calcom/ui/components/dialog"; import { Form, TextField } from "@calcom/ui/components/form"; import { showToast } from "@calcom/ui/components/toast"; import { useDataTable } from "@calcom/features/data-table/hooks"; import type { CombinedFilterSegment } from "@calcom/features/data-table/lib/types"; type FormValues = { name: string; }; export function DuplicateSegmentDialog({ segment, onClose, }: { segment: CombinedFilterSegment; onClose: () => void; }) { const { t } = useLocale(); const form = useForm({ defaultValues: { name: "", }, }); const { setSegmentId } = useDataTable(); const utils = trpc.useUtils(); const session = useSession(); const isAdminOrOwner = checkAdminOrOwner(session.data?.user?.org?.role); const { mutate: createSegment, isPending } = trpc.viewer.filterSegments.create.useMutation({ onSuccess: ({ id }) => { utils.viewer.filterSegments.list.invalidate(); showToast(t("filter_segment_duplicated"), "success"); setSegmentId({ id, type: "user" }); onClose(); }, onError: () => { showToast(t("error_duplicating_filter_segment"), "error"); }, }); const handleSubmit = (data: FormValues) => { if (!segment) { return; } if (segment.type === "user") { const { type: _type, id: _id, name: _name, team: _team, teamId, ...rest } = segment; if (segment.scope === "TEAM" && isAdminOrOwner) { createSegment({ ...rest, teamId: teamId ?? 0, scope: "TEAM", name: data.name, }); } else { createSegment({ ...rest, scope: "USER", name: data.name, }); } } else if (segment.type === "system") { const { type: _type, ...rest } = segment; createSegment({ ...rest, scope: "USER", name: data.name, }); } }; return ( { if (!open) { onClose(); } }}>
); }