"use client"; import { callServerPromise } from "./callServerPromise"; import { LoadingIcon } from "@/components/LoadingIcon"; import AutoForm, { AutoFormSubmit } from "@/components/ui/auto-form"; import { Button } from "@/components/ui/button"; import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, DialogTrigger, } from "@/components/ui/dialog"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; import { Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { getInputsFromWorkflow } from "@/lib/getInputsFromWorkflow"; import { createRun } from "@/server/createRun"; import { createDeployments } from "@/server/curdDeploments"; import type { getMachines } from "@/server/curdMachine"; import type { findFirstTableWithVersion } from "@/server/findFirstTableWithVersion"; import { Copy, MoreVertical, Play } from "lucide-react"; import { parseAsInteger, useQueryState } from "next-usequerystate"; import { useMemo, useState } from "react"; import { toast } from "sonner"; import { z } from "zod"; export function VersionSelect({ workflow, }: { workflow: Awaited>; }) { const [version, setVersion] = useQueryState("version", { defaultValue: workflow?.versions[0].version?.toString() ?? "", }); return ( ); } export function MachineSelect({ machines, }: { machines: Awaited>; }) { const [machine, setMachine] = useQueryState("machine", { defaultValue: machines?.[0].id ?? "", }); return ( ); } export function RunWorkflowButton({ workflow, machines, }: { workflow: Awaited>; machines: Awaited>; }) { const [version] = useQueryState("version", { defaultValue: workflow?.versions[0].version ?? 1, ...parseAsInteger, }); const [machine] = useQueryState("machine", { defaultValue: machines[0].id ?? "", }); const [isLoading, setIsLoading] = useState(false); const [values, setValues] = useState>({}); const [open, setOpen] = useState(false); const schema = useMemo(() => { const workflow_version = getWorkflowVersionFromVersionIndex( workflow, version ); const inputs = getInputsFromWorkflow(workflow_version); if (!inputs) return null; return z.object({ ...Object.fromEntries( inputs?.map((x) => { return [x?.input_id, z.string().optional()]; }) ), }); }, [version]); const runWorkflow = async () => { console.log(values); const val = Object.keys(values).length > 0 ? values : undefined; const workflow_version_id = workflow?.versions.find( (x) => x.version === version )?.id; console.log(workflow_version_id); if (!workflow_version_id) return; setIsLoading(true); try { const origin = window.location.origin; await callServerPromise( createRun(origin, workflow_version_id, machine, val, true) ); // console.log(res.json()); setIsLoading(false); } catch (error) { setIsLoading(false); } setOpen(false); }; return ( Run inputs Run your workflow with custom inputs {/*
*/} {schema && (
Run {isLoading ? : }
)} {!schema && ( )} {/*
*/} {/*
{view}
*/}
); } export function CreateDeploymentButton({ workflow, machines, }: { workflow: Awaited>; machines: Awaited>; }) { const [version] = useQueryState("version", { defaultValue: workflow?.versions[0].version ?? 1, ...parseAsInteger, }); const [machine] = useQueryState("machine", { defaultValue: machines[0].id ?? "", }); const [isLoading, setIsLoading] = useState(false); const workflow_version_id = workflow?.versions.find( (x) => x.version === version )?.id; return ( { if (!workflow_version_id) return; setIsLoading(true); await callServerPromise( createDeployments( workflow.id, workflow_version_id, machine, "production" ) ); setIsLoading(false); }} > Production { if (!workflow_version_id) return; setIsLoading(true); await callServerPromise( createDeployments( workflow.id, workflow_version_id, machine, "staging" ) ); setIsLoading(false); }} > Staging ); } export function CopyWorkflowVersion({ workflow, }: { workflow: Awaited>; }) { const [version] = useQueryState("version", { defaultValue: workflow?.versions[0].version ?? 1, ...parseAsInteger, }); const workflow_version = workflow?.versions.find( (x) => x.version === version ); return ( { navigator.clipboard.writeText( JSON.stringify(workflow_version?.workflow) ); toast("Copied to clipboard"); }} > Copy (JSON) { navigator.clipboard.writeText( JSON.stringify(workflow_version?.workflow_api) ); toast("Copied to clipboard"); }} > Copy API (JSON) ); } export function getWorkflowVersionFromVersionIndex( workflow: Awaited>, version: number ) { const workflow_version = workflow?.versions.find((x) => x.version == version); return workflow_version; }