From 445463a605f5f327f897b23a9b4504939358d0df Mon Sep 17 00:00:00 2001 From: OlegIvaniv Date: Mon, 19 Dec 2022 17:42:30 +0100 Subject: [PATCH] fix(editor): Correctly display trigger nodes without actions and with related regular node in the "On App Events" category (#4976) Fix an issue where trigger nodes without action and with related regular node wouldn't show in the "On App Events" category --- packages/editor-ui/src/stores/nodeCreator.ts | 53 ++++++++++++-------- 1 file changed, 31 insertions(+), 22 deletions(-) diff --git a/packages/editor-ui/src/stores/nodeCreator.ts b/packages/editor-ui/src/stores/nodeCreator.ts index 86a3246c6..f2d3cdf31 100644 --- a/packages/editor-ui/src/stores/nodeCreator.ts +++ b/packages/editor-ui/src/stores/nodeCreator.ts @@ -305,31 +305,40 @@ export const useNodeCreatorStore = defineStore(STORES.NODE_CREATOR, { return nodesWithActions; }, mergedAppNodes(): INodeTypeDescription[] { - const mergedNodes = this.visibleNodesWithActions.reduce( - (acc: Record, node: INodeTypeDescription) => { - const clonedNode = deepCopy(node); - const isCoreNode = node.codex?.categories?.includes(CORE_NODES_CATEGORY); - const actions = node.actions || []; - // Do not merge core nodes - const normalizedName = isCoreNode - ? node.name - : node.name.toLowerCase().replace('trigger', ''); - const existingNode = acc[normalizedName]; + const mergedNodes = [...this.visibleNodesWithActions] + // Sort triggers so they are always on top and when later get merged + // they won't be disacrded if they have the same name as a core node which doesn't contain actions + .sort((a, b) => { + if (a.group.includes('trigger')) return -1; + if (b.group.includes('trigger')) return 1; - if (existingNode) existingNode.actions?.push(...actions); - else acc[normalizedName] = clonedNode; + return 0; + }) + .reduce( + (acc: Record, node: INodeTypeDescription) => { + const clonedNode = deepCopy(node); + const isCoreNode = node.codex?.categories?.includes(CORE_NODES_CATEGORY); + const actions = node.actions || []; + // Do not merge core nodes + const normalizedName = isCoreNode + ? node.name + : node.name.toLowerCase().replace('trigger', ''); + const existingNode = acc[normalizedName]; - if (!isCoreNode) { - acc[normalizedName].displayName = node.displayName.replace('Trigger', ''); - } + if (existingNode) existingNode.actions?.push(...actions); + else acc[normalizedName] = clonedNode; - acc[normalizedName].actions = filterSinglePlaceholderAction( - acc[normalizedName].actions || [], - ); - return acc; - }, - {}, - ); + if (!isCoreNode) { + acc[normalizedName].displayName = node.displayName.replace('Trigger', ''); + } + + acc[normalizedName].actions = filterSinglePlaceholderAction( + acc[normalizedName].actions || [], + ); + return acc; + }, + {}, + ); return Object.values(mergedNodes); }, getNodeTypesWithManualTrigger: