Skip to content

Commit 3370052

Browse files
fix(ui): restore deduping logic in node field element selectors
This is required for some publishing functionality
1 parent 325dacd commit 3370052

File tree

2 files changed

+9
-5
lines changed

2 files changed

+9
-5
lines changed

invokeai/frontend/web/src/features/nodes/components/sidePanel/workflow/publish.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { $templates } from 'features/nodes/store/nodesSlice';
66
import {
77
selectNodes,
88
selectNodesSlice,
9-
selectWorkflowFormNodeFieldFieldIdentifiers,
9+
selectWorkflowFormNodeFieldFieldIdentifiersDeduped,
1010
selectWorkflowId,
1111
} from 'features/nodes/store/selectors';
1212
import type { Templates } from 'features/nodes/store/types';
@@ -54,7 +54,7 @@ export const useIsValidationRunInProgress = () => {
5454
};
5555

5656
export const selectFieldIdentifiersWithInvocationTypes = createSelector(
57-
selectWorkflowFormNodeFieldFieldIdentifiers,
57+
selectWorkflowFormNodeFieldFieldIdentifiersDeduped,
5858
selectNodesSlice,
5959
(fieldIdentifiers, nodes) => {
6060
const result: FieldIdentiferWithLabelAndType[] = [];

invokeai/frontend/web/src/features/nodes/store/selectors.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import type { Selector } from '@reduxjs/toolkit';
22
import { createSelector } from '@reduxjs/toolkit';
33
import type { RootState } from 'app/store/store';
4+
import { uniqBy } from 'es-toolkit/compat';
45
import { getElement } from 'features/nodes/components/sidePanel/builder/form-manipulation';
56
import type { NodesState } from 'features/nodes/store/types';
67
import type { FieldInputInstance } from 'features/nodes/types/field';
@@ -93,13 +94,16 @@ export const selectFormInitialValues = createNodesSelector((workflow) => workflo
9394
export const selectNodeFieldElements = createNodesSelector((workflow) =>
9495
Object.values(workflow.form.elements).filter(isNodeFieldElement)
9596
);
96-
export const selectWorkflowFormNodeFieldFieldIdentifiers = createSelector(
97+
export const selectWorkflowFormNodeFieldFieldIdentifiersDeduped = createSelector(
9798
selectNodeFieldElements,
98-
(nodeFieldElements) => nodeFieldElements.map((el) => el.data.fieldIdentifier)
99+
(nodeFieldElements) =>
100+
uniqBy(nodeFieldElements, (el) => `${el.data.fieldIdentifier.nodeId}-${el.data.fieldIdentifier.fieldName}`).map(
101+
(el) => el.data.fieldIdentifier
102+
)
99103
);
100104

101105
export const buildSelectElement = (id: string) => createNodesSelector((workflow) => workflow.form?.elements[id]);
102106
export const buildSelectWorkflowFormNodeExists = (nodeId: string, fieldName: string) =>
103-
createSelector(selectWorkflowFormNodeFieldFieldIdentifiers, (identifiers) =>
107+
createSelector(selectWorkflowFormNodeFieldFieldIdentifiersDeduped, (identifiers) =>
104108
identifiers.some((identifier) => identifier.nodeId === nodeId && identifier.fieldName === fieldName)
105109
);

0 commit comments

Comments
 (0)