From 989994369325c3a0da9a0a193913ac7e5e15a48a Mon Sep 17 00:00:00 2001 From: Malay Kumar Date: Sun, 5 Oct 2025 22:15:56 +0530 Subject: [PATCH] 2227 - Refactor/Code cleanup WorkflowNodesTabs to reduce duplication --- .../components/WorkflowNodesTabs.tsx | 196 +++++++++--------- 1 file changed, 101 insertions(+), 95 deletions(-) diff --git a/client/src/pages/platform/workflow-editor/components/WorkflowNodesTabs.tsx b/client/src/pages/platform/workflow-editor/components/WorkflowNodesTabs.tsx index 127aba616cb..8923acf48c8 100644 --- a/client/src/pages/platform/workflow-editor/components/WorkflowNodesTabs.tsx +++ b/client/src/pages/platform/workflow-editor/components/WorkflowNodesTabs.tsx @@ -28,6 +28,46 @@ interface WorkflowNodesTabsProps { triggerComponentDefinitions: Array; } +interface WorkflowNodesTabContentProps { + emptyMessage: string; + items: Array | undefined; + itemsDraggable: boolean; + onItemClick?: (clickedItem: ClickedDefinitionType) => void; + selectedComponentName?: string; + tabValue: string; +} + +const WorkflowNodesTabContent = ({ + emptyMessage, + items, + itemsDraggable, + onItemClick, + selectedComponentName, + tabValue, +}: WorkflowNodesTabContentProps) => { + return ( + + +
    + {(!items || items.length === 0) && ( + {emptyMessage} + )} + + {items?.map((item) => ( + onItemClick && onItemClick(item as ClickedDefinitionType)} + key={item.name} + node={item as DefinitionType} + selected={tabValue === 'components' ? selectedComponentName === item.name : undefined} + /> + ))} +
+
+
+ ); +}; + const WorkflowNodesTabs = ({ actionComponentDefinitions, clusterElementComponentDefinitions, @@ -123,6 +163,35 @@ const WorkflowNodesTabs = ({ setActiveView, ]); + const tabContentConfigs = useMemo( + () => ({ + clusterElements: { + emptyMessage: 'No cluster element components found.', + items: availableClusterElements, + }, + components: { + emptyMessage: + filterState.activeView === 'all' ? 'No action components found.' : 'No filtered components found.', + items: filteredComponents, + }, + taskDispatchers: { + emptyMessage: 'No flow controls found.', + items: availableTaskDispatchers, + }, + triggers: { + emptyMessage: 'No trigger components found.', + items: availableTriggers, + }, + }), + [ + availableTriggers, + filteredComponents, + availableTaskDispatchers, + availableClusterElements, + filterState.activeView, + ] + ); + return (
@@ -167,110 +236,47 @@ const WorkflowNodesTabs = ({ )} {!hideClusterElementComponents && ( - - -
    - {!clusterElementComponentDefinitions?.length && ( - - No cluster element components found. - - )} - - {availableClusterElements?.map((clusterElementDefinition, index) => ( - - onItemClick && onItemClick(clusterElementDefinition as ClickedDefinitionType) - } - key={index} - node={clusterElementDefinition} - /> - ))} -
-
-
+ )} {!hideTriggerComponents && ( - - -
    - {!triggerComponentDefinitions.length && ( - - No trigger components found. - - )} - - {availableTriggers.map((triggerDefinition) => ( - - onItemClick && onItemClick(triggerDefinition as ClickedDefinitionType) - } - key={triggerDefinition.name} - node={triggerDefinition as DefinitionType} - /> - ))} -
-
-
+ )} {!hideActionComponents && ( - - -
    - {actionComponentDefinitions.length === 0 && filterState.activeView === 'all' && ( - - No action components found. - - )} - - {filteredComponents?.length === 0 && filterState.activeView === 'filtered' && ( - - No filtered components found. - - )} - - {filteredComponents?.map((componentDefinition) => ( - - onItemClick && onItemClick(componentDefinition as ClickedDefinitionType) - } - key={componentDefinition.name} - node={componentDefinition as DefinitionType} - selected={selectedComponentName === componentDefinition.name} - /> - ))} -
-
-
+ )} {!hideTaskDispatchers && ( - - -
    - {!taskDispatcherDefinitions.length && ( - - No flow controls found. - - )} - - {availableTaskDispatchers.map((taskDispatcherDefinition) => ( - - onItemClick && onItemClick(taskDispatcherDefinition as ClickedDefinitionType) - } - key={taskDispatcherDefinition.name} - node={taskDispatcherDefinition as DefinitionType} - /> - ))} -
-
-
+ )} );