11import React from 'react' ;
22
33import type { Column } from '../../components/PaginatedTable' ;
4+ import { getPileNameColumn } from '../../components/nodesColumns/columns' ;
45import {
6+ NODES_COLUMNS_IDS ,
57 isMonitoringUserNodesColumn ,
8+ isSortableNodesColumn ,
69 isViewerUserNodesColumn ,
710} from '../../components/nodesColumns/constants' ;
811import type { NodesColumnId } from '../../components/nodesColumns/constants' ;
12+ import { useBridgeModeEnabled } from '../../store/reducers/capabilities/hooks' ;
913import type { NodesPreparedEntity } from '../../store/reducers/nodes/types' ;
1014import type { AdditionalNodesProps } from '../../types/additionalProps' ;
1115import type { NodesGroupByField } from '../../types/api/nodes' ;
@@ -50,21 +54,71 @@ export function Nodes({
5054 selectedColumnsKey = NODES_TABLE_SELECTED_COLUMNS_LS_KEY ,
5155 groupByParams = ALL_NODES_GROUP_BY_PARAMS ,
5256} : NodesProps ) {
57+ const bridgeModeEnabled = useBridgeModeEnabled ( ) ;
58+
59+ const columnsWithPile = React . useMemo ( ( ) => {
60+ if ( ! bridgeModeEnabled ) {
61+ return columns ;
62+ }
63+
64+ const hasPile = columns . some ( ( c ) => c . name === NODES_COLUMNS_IDS . PileName ) ;
65+ if ( hasPile ) {
66+ return columns ;
67+ }
68+
69+ const pileColumn = getPileNameColumn < NodesPreparedEntity > ( ) ;
70+ // Type trick above is irrelevant at runtime; cast to any and enhance with sortable
71+ const enhancedPileColumn = {
72+ ...pileColumn ,
73+ sortable : isSortableNodesColumn ( NODES_COLUMNS_IDS . PileName ) ,
74+ } as ( typeof columns ) [ number ] ;
75+
76+ const rackIndex = columns . findIndex ( ( c ) => c . name === NODES_COLUMNS_IDS . Rack ) ;
77+ const dcIndex = columns . findIndex ( ( c ) => c . name === NODES_COLUMNS_IDS . DC ) ;
78+ let insertIndex = columns . length ;
79+ if ( rackIndex !== - 1 ) {
80+ insertIndex = rackIndex ;
81+ } else if ( dcIndex !== - 1 ) {
82+ insertIndex = dcIndex + 1 ;
83+ }
84+
85+ const next = columns . slice ( ) ;
86+ next . splice ( insertIndex , 0 , enhancedPileColumn ) ;
87+ return next ;
88+ } , [ bridgeModeEnabled , columns ] ) ;
89+
90+ const effectiveDefaultColumns = React . useMemo ( ( ) => {
91+ if ( ! bridgeModeEnabled ) {
92+ return defaultColumnsIds ;
93+ }
94+ return defaultColumnsIds . includes ( NODES_COLUMNS_IDS . PileName )
95+ ? defaultColumnsIds
96+ : [ ...defaultColumnsIds , NODES_COLUMNS_IDS . PileName ] ;
97+ } , [ bridgeModeEnabled , defaultColumnsIds ] ) ;
5398 const isUserAllowedToMakeChanges = useIsUserAllowedToMakeChanges ( ) ;
5499 const isViewerUser = useIsViewerUser ( ) ;
55100
56101 const preparedColumns = React . useMemo ( ( ) => {
57102 if ( isUserAllowedToMakeChanges ) {
58- return columns ;
103+ return columnsWithPile ;
59104 }
60- const filteredColumns = columns . filter (
105+ const filteredColumns = columnsWithPile . filter (
61106 ( column ) => ! isMonitoringUserNodesColumn ( column . name ) ,
62107 ) ;
63108 if ( isViewerUser ) {
64109 return filteredColumns ;
65110 }
66111 return filteredColumns . filter ( ( column ) => ! isViewerUserNodesColumn ( column . name ) ) ;
67- } , [ columns , isUserAllowedToMakeChanges , isViewerUser ] ) ;
112+ } , [ columnsWithPile , isUserAllowedToMakeChanges , isViewerUser ] ) ;
113+
114+ const effectiveGroupByParams = React . useMemo ( ( ) => {
115+ if ( ! bridgeModeEnabled || ! groupByParams ) {
116+ return groupByParams ;
117+ }
118+ return groupByParams . includes ( 'PileName' )
119+ ? groupByParams
120+ : ( [ ...groupByParams , 'PileName' ] as NodesGroupByField [ ] ) ;
121+ } , [ bridgeModeEnabled , groupByParams ] ) ;
68122
69123 return (
70124 < PaginatedNodes
@@ -73,10 +127,10 @@ export function Nodes({
73127 scrollContainerRef = { scrollContainerRef }
74128 withPeerRoleFilter = { withPeerRoleFilter }
75129 columns = { preparedColumns }
76- defaultColumnsIds = { defaultColumnsIds }
130+ defaultColumnsIds = { effectiveDefaultColumns }
77131 requiredColumnsIds = { requiredColumnsIds }
78132 selectedColumnsKey = { selectedColumnsKey }
79- groupByParams = { groupByParams }
133+ groupByParams = { effectiveGroupByParams }
80134 />
81135 ) ;
82136}
0 commit comments