Skip to content

Commit 8b30565

Browse files
fix(ui): fix non-nodes validation logic being applied to nodes invoke button
1 parent 52bd2bb commit 8b30565

File tree

1 file changed

+39
-37
lines changed

1 file changed

+39
-37
lines changed

invokeai/frontend/web/src/common/hooks/useIsReadyToInvoke.ts

Lines changed: 39 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -31,52 +31,54 @@ const selector = createSelector(
3131
reasons.push('No initial image selected');
3232
}
3333

34-
if (activeTabName === 'nodes' && nodes.shouldValidateGraph) {
35-
if (!nodes.nodes.length) {
36-
reasons.push('No nodes in graph');
37-
}
38-
39-
nodes.nodes.forEach((node) => {
40-
if (!isInvocationNode(node)) {
41-
return;
34+
if (activeTabName === 'nodes') {
35+
if (nodes.shouldValidateGraph) {
36+
if (!nodes.nodes.length) {
37+
reasons.push('No nodes in graph');
4238
}
4339

44-
const nodeTemplate = nodes.nodeTemplates[node.data.type];
45-
46-
if (!nodeTemplate) {
47-
// Node type not found
48-
reasons.push('Missing node template');
49-
return;
50-
}
51-
52-
const connectedEdges = getConnectedEdges([node], nodes.edges);
40+
nodes.nodes.forEach((node) => {
41+
if (!isInvocationNode(node)) {
42+
return;
43+
}
5344

54-
forEach(node.data.inputs, (field) => {
55-
const fieldTemplate = nodeTemplate.inputs[field.name];
56-
const hasConnection = connectedEdges.some(
57-
(edge) =>
58-
edge.target === node.id && edge.targetHandle === field.name
59-
);
45+
const nodeTemplate = nodes.nodeTemplates[node.data.type];
6046

61-
if (!fieldTemplate) {
62-
reasons.push('Missing field template');
47+
if (!nodeTemplate) {
48+
// Node type not found
49+
reasons.push('Missing node template');
6350
return;
6451
}
6552

66-
if (
67-
fieldTemplate.required &&
68-
field.value === undefined &&
69-
!hasConnection
70-
) {
71-
reasons.push(
72-
`${node.data.label || nodeTemplate.title} -> ${
73-
field.label || fieldTemplate.title
74-
} missing input`
53+
const connectedEdges = getConnectedEdges([node], nodes.edges);
54+
55+
forEach(node.data.inputs, (field) => {
56+
const fieldTemplate = nodeTemplate.inputs[field.name];
57+
const hasConnection = connectedEdges.some(
58+
(edge) =>
59+
edge.target === node.id && edge.targetHandle === field.name
7560
);
76-
return;
77-
}
61+
62+
if (!fieldTemplate) {
63+
reasons.push('Missing field template');
64+
return;
65+
}
66+
67+
if (
68+
fieldTemplate.required &&
69+
field.value === undefined &&
70+
!hasConnection
71+
) {
72+
reasons.push(
73+
`${node.data.label || nodeTemplate.title} -> ${
74+
field.label || fieldTemplate.title
75+
} missing input`
76+
);
77+
return;
78+
}
79+
});
7880
});
79-
});
81+
}
8082
} else {
8183
if (!model) {
8284
reasons.push('No model selected');

0 commit comments

Comments
 (0)