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();
});
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(
<TestWrapper>
<SplitGridNode {...createNodeProps({ isConfigured: false, childNodeIds: [] })} />
<SplitGridNode {...createNodeProps({ shouldOpenSettingsOnCreate: true })} />
</TestWrapper>
);
// Modal should be open automatically
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", () => {

8
src/components/nodes/SplitGridNode.tsx

@ -43,12 +43,14 @@ export function SplitGridNode({ id, data, selected }: NodeProps<SplitGridNodeTyp
}
}, [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(() => {
if (!nodeData.isConfigured && (!nodeData.childNodeIds || nodeData.childNodeIds.length === 0)) {
if (nodeData.shouldOpenSettingsOnCreate) {
setShowSettings(true);
updateNodeData(id, { shouldOpenSettingsOnCreate: false });
}
}, [nodeData.isConfigured, nodeData.childNodeIds]);
}, [id, nodeData.shouldOpenSettingsOnCreate, updateNodeData]);
const handleOpenSettings = useCallback(() => {
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("gridCols", 3);
expect(data).toHaveProperty("isConfigured", false);
expect(data).toHaveProperty("shouldOpenSettingsOnCreate", true);
expect(data).toHaveProperty("status", "idle");
expect(data).toHaveProperty("error", null);
});

1
src/store/utils/nodeDefaults.ts

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

1
src/types/nodes.ts

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

Loading…
Cancel
Save