@@ -78,6 +78,9 @@ import { AppDetailsTabs } from '../v2/appDetails/appDetails.store'
78
78
import { unauthorizedInfoText } from '../ResourceBrowser/ResourceList/ClusterSelector'
79
79
import './clusterNodes.scss'
80
80
import ResourceBrowserActionMenu from '../ResourceBrowser/ResourceList/ResourceBrowserActionMenu'
81
+ import { importComponentFromFELibrary } from '@Components/common'
82
+
83
+ const REDFISH_NODE_UI_TABS = importComponentFromFELibrary ( 'REDFISH_NODE_UI_TABS' , [ ] , 'function' )
81
84
82
85
const NodeDetails = ( { addTab, lowercaseKindToResourceGroupMap, updateTabUrl } : ClusterListType ) => {
83
86
const { clusterId, node } = useParams < { clusterId : string ; nodeType : string ; node : string } > ( )
@@ -152,20 +155,36 @@ const NodeDetails = ({ addTab, lowercaseKindToResourceGroupMap, updateTabUrl }:
152
155
getData ( patchData )
153
156
} , [ node ] )
154
157
158
+ const getSanitizedNodeTabId = ( id : string ) => id . toLowerCase ( ) . replace ( ' ' , '-' )
159
+
160
+ // id will be populated into url
161
+ const NODE_TABS_INFO : ( Pick < TabProps , 'label' | 'icon' > & { id : string } ) [ ] = [
162
+ {
163
+ id : getSanitizedNodeTabId ( NODE_DETAILS_TABS . summary ) ,
164
+ label : NODE_DETAILS_TABS . summary ,
165
+ } ,
166
+ {
167
+ id : getSanitizedNodeTabId ( NODE_DETAILS_TABS . yaml ) ,
168
+ label : NODE_DETAILS_TABS . yaml ,
169
+ icon : Edit ,
170
+ } ,
171
+ {
172
+ id : getSanitizedNodeTabId ( NODE_DETAILS_TABS . nodeConditions ) ,
173
+ label : NODE_DETAILS_TABS . nodeConditions ,
174
+ } ,
175
+ ...REDFISH_NODE_UI_TABS ,
176
+ ]
177
+
155
178
useEffect ( ( ) => {
156
- if ( queryParams . has ( 'tab' ) ) {
157
- const tab = queryParams . get ( 'tab' ) . replace ( '-' , ' ' )
158
- if ( tab === NODE_DETAILS_TABS . summary . toLowerCase ( ) ) {
159
- setSelectedTabIndex ( 0 )
160
- } else if ( tab === NODE_DETAILS_TABS . yaml . toLowerCase ( ) ) {
161
- setSelectedTabIndex ( 1 )
162
- } else if ( tab === NODE_DETAILS_TABS . nodeConditions . toLowerCase ( ) ) {
163
- setSelectedTabIndex ( 2 )
164
- }
179
+ const tab = queryParams . get ( 'tab' )
180
+ const tabIndex = NODE_TABS_INFO . findIndex ( ( tabDetails ) => tabDetails . id === tab )
181
+
182
+ if ( tabIndex !== - 1 ) {
183
+ setSelectedTabIndex ( tabIndex )
165
184
} else {
166
185
replace ( {
167
186
pathname : location . pathname ,
168
- search : `?tab=${ NODE_DETAILS_TABS . summary . toLowerCase ( ) } ` ,
187
+ search : `?tab=${ getSanitizedNodeTabId ( NODE_DETAILS_TABS . summary ) } ` ,
169
188
} )
170
189
}
171
190
} , [ location . search ] )
@@ -182,58 +201,26 @@ const NodeDetails = ({ addTab, lowercaseKindToResourceGroupMap, updateTabUrl }:
182
201
const changeNodeTab = ( e ) : void => {
183
202
const _tabIndex = Number ( e . currentTarget . dataset . tabIndex )
184
203
if ( node !== AUTO_SELECT . value ) {
185
- let _searchParam = '?tab='
186
- if ( _tabIndex === 0 ) {
187
- _searchParam += NODE_DETAILS_TABS . summary . toLowerCase ( )
188
- } else if ( _tabIndex === 1 ) {
189
- _searchParam += NODE_DETAILS_TABS . yaml . toLowerCase ( )
190
- } else if ( _tabIndex === 2 ) {
191
- _searchParam += NODE_DETAILS_TABS . nodeConditions . toLowerCase ( ) . replace ( ' ' , '-' )
192
- }
204
+ const selectedTab = NODE_TABS_INFO [ _tabIndex ] ?. id || ''
205
+ const _searchParam = `?tab=${ selectedTab } `
206
+
193
207
updateTabUrl ( {
194
208
url : `${ location . pathname } ${ _searchParam } ` ,
195
209
} )
196
210
}
197
211
}
198
212
199
213
const renderNodeDetailsTabs = ( ) : JSX . Element => {
200
- const tabs : TabProps [ ] = [
201
- {
202
- id : NODE_DETAILS_TABS . summary ,
203
- label : NODE_DETAILS_TABS . summary ,
204
- tabType : 'navLink' ,
205
- props : {
206
- to : `?tab=${ NODE_DETAILS_TABS . summary . toLowerCase ( ) } ` ,
207
- onClick : changeNodeTab ,
208
- isActive : ( _ , { search } ) => search === `?tab=${ NODE_DETAILS_TABS . summary . toLowerCase ( ) } ` ,
209
- [ 'data-tab-index' ] : 0 ,
210
- } ,
214
+ const tabs : TabProps [ ] = NODE_TABS_INFO . map ( ( tabDetails , index ) => ( {
215
+ ...tabDetails ,
216
+ tabType : 'navLink' ,
217
+ props : {
218
+ to : `?tab=${ tabDetails . id } ` ,
219
+ onClick : changeNodeTab ,
220
+ isActive : ( _ , { search } ) => search === `?tab=${ tabDetails . id } ` ,
221
+ [ 'data-tab-index' ] : index ,
211
222
} ,
212
- {
213
- id : NODE_DETAILS_TABS . yaml ,
214
- label : NODE_DETAILS_TABS . yaml ,
215
- tabType : 'navLink' ,
216
- icon : Edit ,
217
- props : {
218
- to : `?tab=${ NODE_DETAILS_TABS . yaml . toLowerCase ( ) } ` ,
219
- onClick : changeNodeTab ,
220
- isActive : ( _ , { search } ) => search === `?tab=${ NODE_DETAILS_TABS . yaml . toLowerCase ( ) } ` ,
221
- [ 'data-tab-index' ] : 1 ,
222
- } ,
223
- } ,
224
- {
225
- id : NODE_DETAILS_TABS . nodeConditions ,
226
- label : NODE_DETAILS_TABS . nodeConditions ,
227
- tabType : 'navLink' ,
228
- props : {
229
- to : `?tab=${ NODE_DETAILS_TABS . nodeConditions . toLowerCase ( ) . replace ( ' ' , '-' ) } ` ,
230
- onClick : changeNodeTab ,
231
- isActive : ( _ , { search } ) =>
232
- search === `?tab=${ NODE_DETAILS_TABS . nodeConditions . toLowerCase ( ) . replace ( ' ' , '-' ) } ` ,
233
- [ 'data-tab-index' ] : 2 ,
234
- } ,
235
- } ,
236
- ]
223
+ } ) )
237
224
238
225
return (
239
226
< div className = "pl-20 dc__border-bottom flex dc__gap-16" >
@@ -799,8 +786,7 @@ const NodeDetails = ({ addTab, lowercaseKindToResourceGroupMap, updateTabUrl }:
799
786
}
800
787
}
801
788
802
- const nodeControls = ( ) => {
803
- return (
789
+ const nodeControls = ( ) => (
804
790
< div className = "fw-6 flex dc__content-space flex-grow-1 mr-12" >
805
791
< div className = "flex left" >
806
792
< span className = "flex left fw-6 cb-5 fs-12 cursor" onClick = { openDebugTerminal } >
@@ -816,7 +802,6 @@ const NodeDetails = ({ addTab, lowercaseKindToResourceGroupMap, updateTabUrl }:
816
802
</ span >
817
803
</ div >
818
804
)
819
- }
820
805
821
806
const renderSummary = ( ) : JSX . Element | null => {
822
807
if ( ! nodeDetail ) {
0 commit comments