Change how parameters are displayed in task node (#827)

This commit is contained in:
Kerem Yilmaz
2024-09-13 07:47:57 -07:00
committed by GitHub
parent a5adfd3ead
commit d435f1bffa
2 changed files with 71 additions and 48 deletions

View File

@@ -5,18 +5,13 @@ import {
AccordionItem,
AccordionTrigger,
} from "@/components/ui/accordion";
import { Button } from "@/components/ui/button";
import { Checkbox } from "@/components/ui/checkbox";
import { Input } from "@/components/ui/input";
import { Label } from "@/components/ui/label";
import {
Popover,
PopoverContent,
PopoverTrigger,
} from "@/components/ui/popover";
import { Switch } from "@/components/ui/switch";
import { CodeEditor } from "@/routes/workflows/components/CodeEditor";
import { ListBulletIcon, MixerVerticalIcon } from "@radix-ui/react-icons";
import { useDeleteNodeCallback } from "@/routes/workflows/hooks/useDeleteNodeCallback";
import { ListBulletIcon } from "@radix-ui/react-icons";
import {
Edge,
Handle,
@@ -27,14 +22,13 @@ import {
useReactFlow,
} from "@xyflow/react";
import { useState } from "react";
import { AppNode } from "..";
import { getOutputParameterKey } from "../../workflowEditorUtils";
import { EditableNodeTitle } from "../components/EditableNodeTitle";
import { NodeActionMenu } from "../NodeActionMenu";
import { TaskNodeDisplayModeSwitch } from "./TaskNodeDisplayModeSwitch";
import { TaskNodeParametersPanel } from "./TaskNodeParametersPanel";
import type { TaskNode, TaskNodeDisplayMode } from "./types";
import { useDeleteNodeCallback } from "@/routes/workflows/hooks/useDeleteNodeCallback";
import { AppNode } from "..";
import { getOutputParameterKey } from "../../workflowEditorUtils";
function getPreviousNodeIds(
nodes: Array<AppNode>,
@@ -131,6 +125,15 @@ function TaskNode({ id, data }: NodeProps<TaskNode>) {
className="nopan"
/>
</div>
<div className="space-y-1">
<TaskNodeParametersPanel
availableOutputParameters={outputParameterKeys}
parameters={data.parameterKeys}
onParametersChange={(parameterKeys) => {
updateNodeData(id, { parameterKeys });
}}
/>
</div>
</>
);
@@ -172,6 +175,15 @@ function TaskNode({ id, data }: NodeProps<TaskNode>) {
className="nopan"
/>
</div>
<div className="space-y-1">
<TaskNodeParametersPanel
availableOutputParameters={outputParameterKeys}
parameters={data.parameterKeys}
onParametersChange={(parameterKeys) => {
updateNodeData(id, { parameterKeys });
}}
/>
</div>
</div>
</AccordionContent>
</AccordionItem>
@@ -419,28 +431,10 @@ function TaskNode({ id, data }: NodeProps<TaskNode>) {
}}
/>
</div>
<div className="flex justify-between">
<TaskNodeDisplayModeSwitch
value={displayMode}
onChange={setDisplayMode}
/>
<Popover>
<PopoverTrigger asChild>
<Button size="icon" variant="outline">
<MixerVerticalIcon />
</Button>
</PopoverTrigger>
<PopoverContent className="w-72">
<TaskNodeParametersPanel
availableOutputParameters={outputParameterKeys}
parameters={data.parameterKeys}
onParametersChange={(parameterKeys) => {
updateNodeData(id, { parameterKeys });
}}
/>
</PopoverContent>
</Popover>
</div>
<TaskNodeDisplayModeSwitch
value={displayMode}
onChange={setDisplayMode}
/>
{displayMode === "basic" && basicContent}
{displayMode === "advanced" && advancedContent}

View File

@@ -1,5 +1,13 @@
import { Checkbox } from "@/components/ui/checkbox";
import { useWorkflowParametersState } from "../../useWorkflowParametersState";
import { Label } from "@/components/ui/label";
import {
Tooltip,
TooltipContent,
TooltipProvider,
TooltipTrigger,
} from "@/components/ui/tooltip";
import { QuestionMarkCircledIcon } from "@radix-ui/react-icons";
type Props = {
availableOutputParameters: Array<string>;
@@ -16,34 +24,55 @@ function TaskNodeParametersPanel({
const keys = workflowParameters
.map((parameter) => parameter.key)
.concat(availableOutputParameters);
function toggleParameter(key: string) {
if (parameters.includes(key)) {
onParametersChange(
parameters.filter((parameterKey) => parameterKey !== key),
);
} else {
onParametersChange([...parameters, key]);
}
}
return (
<div className="space-y-4">
<header className="space-y-1">
<h1>Parameters</h1>
<span className="text-xs text-slate-300">
Check off the parameters you want to use in this task.
</span>
<header className="flex gap-2">
<h1 className="text-xs text-slate-300">Parameters</h1>
<TooltipProvider>
<Tooltip>
<TooltipTrigger>
<QuestionMarkCircledIcon className="h-4 w-4" />
</TooltipTrigger>
<TooltipContent>
Select the parameters that will be passed to the task.
</TooltipContent>
</Tooltip>
</TooltipProvider>
</header>
<div className="space-y-2">
<div className="flex flex-wrap gap-2">
{keys.map((key) => {
return (
<div
key={key}
className="flex items-center gap-2 rounded-sm bg-slate-elevation1 px-3 py-2"
className="flex cursor-pointer items-center gap-2 rounded-sm bg-slate-elevation1 px-3 py-2"
id={key}
>
<Checkbox
checked={parameters.includes(key)}
onCheckedChange={(checked) => {
if (checked) {
onParametersChange([...parameters, key]);
} else {
onParametersChange(
parameters.filter((parameterKey) => parameterKey !== key),
);
}
onCheckedChange={() => {
toggleParameter(key);
}}
/>
<span className="text-xs">{key}</span>
<Label
htmlFor={key}
className="cursor-pointer text-xs"
onClick={() => {
toggleParameter(key);
}}
>
{key}
</Label>
</div>
);
})}