conditional inside conditional (#4362)

This commit is contained in:
Celal Zamanoglu
2025-12-23 21:10:35 +03:00
committed by GitHub
parent b81865b0b5
commit a3e5399de5
2 changed files with 6 additions and 51 deletions

View File

@@ -11,14 +11,6 @@ import { WorkflowBlockNode } from "../nodes";
import { WorkflowBlockIcon } from "../nodes/WorkflowBlockIcon";
import { AddNodeProps } from "../Workspace";
import { Input } from "@/components/ui/input";
import { useNodes } from "@xyflow/react";
import { AppNode } from "../nodes";
import {
Tooltip,
TooltipContent,
TooltipProvider,
TooltipTrigger,
} from "@/components/ui/tooltip";
const enableCodeBlock =
import.meta.env.VITE_ENABLE_CODE_BLOCK?.toLowerCase() === "true";
@@ -287,7 +279,6 @@ function WorkflowNodeLibraryPanel({
onNodeClick,
first,
}: Props) {
const nodes = useNodes() as Array<AppNode>;
const workflowPanelData = useWorkflowPanelStore(
(state) => state.workflowPanelState.data,
);
@@ -300,27 +291,6 @@ function WorkflowNodeLibraryPanel({
const [search, setSearch] = useState("");
const inputRef = useRef<HTMLInputElement>(null);
// Determine parent context to check if certain blocks should be disabled
const parentNode = workflowPanelData?.parent
? nodes.find((n) => n.id === workflowPanelData.parent)
: null;
const parentType = parentNode?.type;
// Check if a node type should be disabled based on parent context
const isBlockDisabled = (
nodeType: NonNullable<WorkflowBlockNode["type"]>,
): { disabled: boolean; reason: string } => {
// Disable conditional inside conditional
if (nodeType === "conditional" && parentType === "conditional") {
return {
disabled: true,
reason:
"We're working on supporting nested conditionals. Soon you'll be able to use this feature!",
};
}
return { disabled: false, reason: "" };
};
useEffect(() => {
// Focus the input when the panel becomes active
if (workflowPanelActive && inputRef.current) {
@@ -416,17 +386,11 @@ function WorkflowNodeLibraryPanel({
<div className="space-y-2">
{filteredItems.length > 0 ? (
filteredItems.map((item) => {
const { disabled, reason } = isBlockDisabled(item.nodeType);
const itemContent = (
<div
key={item.nodeType}
className={`flex items-center justify-between rounded-sm bg-slate-elevation4 p-4 ${
disabled
? "cursor-not-allowed opacity-50"
: "cursor-pointer hover:bg-slate-elevation5"
}`}
className={`flex items-center justify-between rounded-sm bg-slate-elevation4 p-4 ${"cursor-pointer hover:bg-slate-elevation5"}`}
onClick={() => {
if (disabled) return;
onNodeClick({
nodeType: item.nodeType,
next: workflowPanelData?.next ?? null,
@@ -457,20 +421,6 @@ function WorkflowNodeLibraryPanel({
</div>
);
// Wrap with tooltip if disabled
if (disabled) {
return (
<TooltipProvider key={item.nodeType}>
<Tooltip>
<TooltipTrigger asChild>{itemContent}</TooltipTrigger>
<TooltipContent side="right">
<p className="max-w-xs">{reason}</p>
</TooltipContent>
</Tooltip>
</TooltipProvider>
);
}
return itemContent;
})
) : (

View File

@@ -1925,6 +1925,11 @@ function findNextBlockLabel(
return null;
}
// If this node itself is a conditional, prefer its own merge label
if (currentNode.type === "conditional") {
return currentNode.data.mergeLabel ?? null;
}
const conditionalNodeId = currentNode.data.conditionalNodeId;
if (!conditionalNodeId) {
return null;