Browse Source

分割节点有问题

feature/composer
TianYun 4 weeks ago
parent
commit
e691a20ea1
  1. 18
      src/components/__tests__/SplitGridNode.test.tsx
  2. 8
      src/components/nodes/SplitGridNode.tsx
  3. 1
      src/store/utils/__tests__/nodeDefaults.test.ts
  4. 1
      src/store/utils/nodeDefaults.ts
  5. 1
      src/types/nodes.ts

18
src/components/__tests__/SplitGridNode.test.tsx

@ -209,15 +209,27 @@ describe("SplitGridNode", () => {
expect(screen.queryByTestId("split-grid-settings-modal")).not.toBeInTheDocument(); expect(screen.queryByTestId("split-grid-settings-modal")).not.toBeInTheDocument();
}); });
it("should auto-open settings when not configured and no child nodes", () => { it("should auto-open settings for a freshly created split grid node", () => {
render( render(
<TestWrapper> <TestWrapper>
<SplitGridNode {...createNodeProps({ isConfigured: false, childNodeIds: [] })} /> <SplitGridNode {...createNodeProps({ shouldOpenSettingsOnCreate: true })} />
</TestWrapper> </TestWrapper>
); );
// Modal should be open automatically
expect(screen.getByTestId("split-grid-settings-modal")).toBeInTheDocument(); expect(screen.getByTestId("split-grid-settings-modal")).toBeInTheDocument();
expect(mockUpdateNodeData).toHaveBeenCalledWith("split-grid-node-1", {
shouldOpenSettingsOnCreate: false,
});
});
it("should not auto-open settings for loaded unconfigured split grid nodes", () => {
render(
<TestWrapper>
<SplitGridNode {...createNodeProps({ isConfigured: false, childNodeIds: [] })} />
</TestWrapper>
);
expect(screen.queryByTestId("split-grid-settings-modal")).not.toBeInTheDocument();
}); });
it("should not auto-open settings when already configured", () => { it("should not auto-open settings when already configured", () => {

8
src/components/nodes/SplitGridNode.tsx

@ -43,12 +43,14 @@ export function SplitGridNode({ id, data, selected }: NodeProps<SplitGridNodeTyp
} }
}, [connectedSourceImage, id, updateNodeData, nodeData.sourceImage]); }, [connectedSourceImage, id, updateNodeData, nodeData.sourceImage]);
// Show settings modal on first creation (when not configured) // Show settings only for freshly created nodes. Loaded workflows may contain
// unconfigured split grids and should not open dialogs when the node mounts.
useEffect(() => { useEffect(() => {
if (!nodeData.isConfigured && (!nodeData.childNodeIds || nodeData.childNodeIds.length === 0)) { if (nodeData.shouldOpenSettingsOnCreate) {
setShowSettings(true); setShowSettings(true);
updateNodeData(id, { shouldOpenSettingsOnCreate: false });
} }
}, [nodeData.isConfigured, nodeData.childNodeIds]); }, [id, nodeData.shouldOpenSettingsOnCreate, updateNodeData]);
const handleOpenSettings = useCallback(() => { const handleOpenSettings = useCallback(() => {
setShowSettings(true); setShowSettings(true);

1
src/store/utils/__tests__/nodeDefaults.test.ts

@ -193,6 +193,7 @@ describe("nodeDefaults utilities", () => {
expect(data).toHaveProperty("gridRows", 2); expect(data).toHaveProperty("gridRows", 2);
expect(data).toHaveProperty("gridCols", 3); expect(data).toHaveProperty("gridCols", 3);
expect(data).toHaveProperty("isConfigured", false); expect(data).toHaveProperty("isConfigured", false);
expect(data).toHaveProperty("shouldOpenSettingsOnCreate", true);
expect(data).toHaveProperty("status", "idle"); expect(data).toHaveProperty("status", "idle");
expect(data).toHaveProperty("error", null); expect(data).toHaveProperty("error", null);
}); });

1
src/store/utils/nodeDefaults.ts

@ -364,6 +364,7 @@ export const createDefaultNodeData = (type: NodeType): WorkflowNodeData => {
gridRows: 2, gridRows: 2,
gridCols: 3, gridCols: 3,
isConfigured: false, isConfigured: false,
shouldOpenSettingsOnCreate: true,
status: "idle", status: "idle",
error: null, error: null,
} as SplitGridNodeData; } as SplitGridNodeData;

1
src/types/nodes.ts

@ -542,6 +542,7 @@ export interface SplitGridNodeData extends BaseNodeData {
gridRows: number; gridRows: number;
gridCols: number; gridCols: number;
isConfigured: boolean; isConfigured: boolean;
shouldOpenSettingsOnCreate?: boolean;
status: NodeStatus; status: NodeStatus;
error: string | null; error: string | null;
} }

Loading…
Cancel
Save