Skip to content

Commit 42ee95e

Browse files
fix(ui): fix non-nodes validation logic being applied to nodes invoke button (#4457)
## What type of PR is this? (check all applicable) - [ ] Refactor - [ ] Feature - [x] Bug Fix - [ ] Optimization - [ ] Documentation Update - [ ] Community Node Submission ## Have you discussed this change with the InvokeAI team? - [x] Yes - [ ] No, because: ## Description fix(ui): fix non-nodes validation logic being applied to nodes invoke button For example, if you had an invalid controlnet setup, it would prevent you from invoking on nodes, when node validation was disabled. ## Related Tickets & Documents <!-- For pull requests that relate or close an issue, please include them below. For example having the text: "closes #1234" would connect the current pull request to issue 1234. And when we merge the pull request, Github will automatically close the issue. --> - Closes https://discord.com/channels/1020123559063990373/1028661664519831552/1148431783289966603
2 parents 6b850d5 + b008fd4 commit 42ee95e

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)