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 (
);
}
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,
};
}