Browse Source

fix run button and global modal state issues

handoff-20260429-1057
shrimbly 7 months ago
parent
commit
10a96a8ae1
  1. 3
      src/components/nodes/BaseNode.tsx
  2. 1
      src/components/nodes/NanoBananaNode.tsx
  3. 11
      src/components/nodes/PromptNode.tsx
  4. 19
      src/store/workflowStore.ts

3
src/components/nodes/BaseNode.tsx

@ -336,7 +336,8 @@ export function BaseNode({
<div className="relative ml-2 shrink-0 group">
<button
onClick={onRun}
className="nodrag nopan p-0.5 rounded transition-all duration-200 ease-in-out text-neutral-500 group-hover:text-neutral-200 border border-neutral-600 flex items-center overflow-hidden group-hover:pr-2"
disabled={isExecuting}
className="nodrag nopan p-0.5 rounded transition-all duration-200 ease-in-out text-neutral-500 group-hover:text-neutral-200 border border-neutral-600 flex items-center overflow-hidden group-hover:pr-2 disabled:opacity-50 disabled:cursor-not-allowed"
title="Run this node"
>
<svg className="w-3.5 h-3.5 flex-shrink-0" fill="currentColor" viewBox="0 0 24 24">

1
src/components/nodes/NanoBananaNode.tsx

@ -154,6 +154,7 @@ export function NanoBananaNode({ id, data, selected }: NodeProps<NanoBananaNodeT
onCommentChange={(comment) => updateNodeData(id, { comment: comment || undefined })}
onRun={handleRegenerate}
selected={selected}
isExecuting={isRunning}
hasError={nodeData.status === "error"}
>
{/* Image input - accepts multiple connections */}

11
src/components/nodes/PromptNode.tsx

@ -13,7 +13,8 @@ type PromptNodeType = Node<PromptNodeData, "prompt">;
export function PromptNode({ id, data, selected }: NodeProps<PromptNodeType>) {
const nodeData = data;
const updateNodeData = useWorkflowStore((state) => state.updateNodeData);
const setIsModalOpen = useWorkflowStore((state) => state.setIsModalOpen);
const incrementModalCount = useWorkflowStore((state) => state.incrementModalCount);
const decrementModalCount = useWorkflowStore((state) => state.decrementModalCount);
const [isModalOpenLocal, setIsModalOpenLocal] = useState(false);
const handleChange = useCallback(
@ -25,13 +26,13 @@ export function PromptNode({ id, data, selected }: NodeProps<PromptNodeType>) {
const handleOpenModal = useCallback(() => {
setIsModalOpenLocal(true);
setIsModalOpen(true);
}, [setIsModalOpen]);
incrementModalCount();
}, [incrementModalCount]);
const handleCloseModal = useCallback(() => {
setIsModalOpenLocal(false);
setIsModalOpen(false);
}, [setIsModalOpen]);
decrementModalCount();
}, [decrementModalCount]);
const handleSubmitModal = useCallback(
(prompt: string) => {

19
src/store/workflowStore.ts

@ -88,8 +88,10 @@ interface WorkflowStore {
setNodeGroupId: (nodeId: string, groupId: string | undefined) => void;
// UI State
openModalCount: number;
isModalOpen: boolean;
setIsModalOpen: (isOpen: boolean) => void;
incrementModalCount: () => void;
decrementModalCount: () => void;
// Execution
isRunning: boolean;
@ -322,6 +324,7 @@ export const useWorkflowStore = create<WorkflowStore>((set, get) => ({
edgeStyle: "curved" as EdgeStyle,
clipboard: null,
groups: {},
openModalCount: 0,
isModalOpen: false,
isRunning: false,
currentNodeId: null,
@ -345,8 +348,18 @@ export const useWorkflowStore = create<WorkflowStore>((set, get) => ({
set({ edgeStyle: style });
},
setIsModalOpen: (isOpen: boolean) => {
set({ isModalOpen: isOpen });
incrementModalCount: () => {
set((state) => {
const newCount = state.openModalCount + 1;
return { openModalCount: newCount, isModalOpen: newCount > 0 };
});
},
decrementModalCount: () => {
set((state) => {
const newCount = Math.max(0, state.openModalCount - 1);
return { openModalCount: newCount, isModalOpen: newCount > 0 };
});
},
addNode: (type: NodeType, position: XYPosition) => {

Loading…
Cancel
Save