import { useRouter } from "next/navigation"; import { useState } from "react"; import { useLocale } from "@calcom/lib/hooks/useLocale"; import { HttpError } from "@calcom/lib/http-error"; import { trpc } from "@calcom/trpc/react"; import cn from "@calcom/ui/classNames"; import { Button } from "@calcom/ui/components/button"; import { Dialog, DialogContent, DialogFooter } from "@calcom/ui/components/dialog"; import { Icon } from "@calcom/ui/components/icon"; import type { IconName } from "@calcom/ui/components/icon"; import { RadioGroup, Radio, RadioIndicator } from "@calcom/ui/components/radio"; import { showToast } from "@calcom/ui/components/toast"; type WorkflowOptionCardProps = { title: string; description: string; icon?: IconName; isSelected: boolean; onClick: () => void; iconWrapperClassName?: string; image?: string; value: "scratch" | "calai"; }; function WorkflowOptionCard(props: WorkflowOptionCardProps) { const { title, description, icon, isSelected, onClick, image, iconWrapperClassName, value } = props; return (
{image ? ( ) : (

{title}

{description}

); } type WorkflowCreationDialogProps = { open: boolean; onOpenChange: (open: boolean) => void; teamId?: number; onSuccess?: () => void; }; export function WorkflowCreationDialog({ open, onOpenChange, teamId, onSuccess, }: WorkflowCreationDialogProps) { const { t } = useLocale(); const router = useRouter(); const [selectedOption, setSelectedOption] = useState<"scratch" | "calai">("scratch"); const [isLoading, setIsLoading] = useState(false); const handleOptionChange = (value: string) => { if (value === "scratch" || value === "calai") { setSelectedOption(value); } }; const createMutation = trpc.viewer.workflows.create.useMutation({ onSuccess: async ({ workflow }) => { onOpenChange(false); if (onSuccess) { onSuccess(); } else { router.replace(`/workflows/${workflow.id}`); } }, onError: (err) => { if (err instanceof HttpError) { const message = `${err.statusCode}: ${err.message}`; showToast(message, "error"); } if (err.data?.code === "UNAUTHORIZED") { const message = `${err.data.code}: ${t("unauthorized_create_workflow")}`; showToast(message, "error"); } }, }); const handleContinue = () => { if (selectedOption === "scratch") { createMutation.mutate({ teamId }); } else if (selectedOption === "calai") { setIsLoading(true); const queryParams = new URLSearchParams({ action: "calAi", templateWorkflowId: "wf-11", ...(teamId && { teamId: teamId.toString() }), }); router.push(`/workflow/new?${queryParams.toString()}`); setIsLoading(false); } }; return (
setSelectedOption("scratch")} iconWrapperClassName="bg-muted" value="scratch" /> setSelectedOption("calai")} iconWrapperClassName="bg-[#2A2947]" value="calai" />
); } export function useWorkflowCreation() { const [showDialog, setShowDialog] = useState(false); const [pendingTeamId, setPendingTeamId] = useState(undefined); const openDialog = (teamId?: number) => { setPendingTeamId(teamId); setShowDialog(true); }; return { showDialog, setShowDialog, pendingTeamId, openDialog, }; }