fix(ui): restore deduping logic in node field element selectors

This is required for some publishing functionality
This commit is contained in:
psychedelicious
2025-08-11 22:47:16 +10:00
parent 325dacd29c
commit 3370052e54
2 changed files with 9 additions and 5 deletions

View File

@@ -6,7 +6,7 @@ import { $templates } from 'features/nodes/store/nodesSlice';
import {
selectNodes,
selectNodesSlice,
selectWorkflowFormNodeFieldFieldIdentifiers,
selectWorkflowFormNodeFieldFieldIdentifiersDeduped,
selectWorkflowId,
} from 'features/nodes/store/selectors';
import type { Templates } from 'features/nodes/store/types';
@@ -54,7 +54,7 @@ export const useIsValidationRunInProgress = () => {
};
export const selectFieldIdentifiersWithInvocationTypes = createSelector(
selectWorkflowFormNodeFieldFieldIdentifiers,
selectWorkflowFormNodeFieldFieldIdentifiersDeduped,
selectNodesSlice,
(fieldIdentifiers, nodes) => {
const result: FieldIdentiferWithLabelAndType[] = [];

View File

@@ -1,6 +1,7 @@
import type { Selector } from '@reduxjs/toolkit';
import { createSelector } from '@reduxjs/toolkit';
import type { RootState } from 'app/store/store';
import { uniqBy } from 'es-toolkit/compat';
import { getElement } from 'features/nodes/components/sidePanel/builder/form-manipulation';
import type { NodesState } from 'features/nodes/store/types';
import type { FieldInputInstance } from 'features/nodes/types/field';
@@ -93,13 +94,16 @@ export const selectFormInitialValues = createNodesSelector((workflow) => workflo
export const selectNodeFieldElements = createNodesSelector((workflow) =>
Object.values(workflow.form.elements).filter(isNodeFieldElement)
);
export const selectWorkflowFormNodeFieldFieldIdentifiers = createSelector(
export const selectWorkflowFormNodeFieldFieldIdentifiersDeduped = createSelector(
selectNodeFieldElements,
(nodeFieldElements) => nodeFieldElements.map((el) => el.data.fieldIdentifier)
(nodeFieldElements) =>
uniqBy(nodeFieldElements, (el) => `${el.data.fieldIdentifier.nodeId}-${el.data.fieldIdentifier.fieldName}`).map(
(el) => el.data.fieldIdentifier
)
);
export const buildSelectElement = (id: string) => createNodesSelector((workflow) => workflow.form?.elements[id]);
export const buildSelectWorkflowFormNodeExists = (nodeId: string, fieldName: string) =>
createSelector(selectWorkflowFormNodeFieldFieldIdentifiers, (identifiers) =>
createSelector(selectWorkflowFormNodeFieldFieldIdentifiersDeduped, (identifiers) =>
identifiers.some((identifier) => identifier.nodeId === nodeId && identifier.fieldName === fieldName)
);