33
44import { Key , ReactNode } from 'react' ;
55
6- import { Flex , Item , TabList , TabPanels , Tabs } from '@geti/ui' ;
6+ import { Flex , Item , Picker , TabList , TabPanels , Tabs } from '@geti/ui' ;
77
8- import { CollapsedItemsPicker } from '../collapsed-items-picker/collapsed-items-picker.component' ;
98import { TabItem } from '../tabs/tabs.interface' ;
109
1110import classes from './managed-tabs.module.scss' ;
1211
13- export interface AddButtonConfig {
14- ariaLabel : string ;
15- tooltipText : string ;
16- onPress : ( ) => void ;
17- isLoading ?: boolean ;
18- isDisabled ?: boolean ;
19- id ?: string ;
20- }
21-
2212export interface OverflowConfig {
2313 maxVisibleTabs : number ;
2414 pickerAriaLabel : string ;
@@ -31,7 +21,7 @@ export interface ManagedTabsProps<T extends { id: string; name: string }> {
3121 selectedKey : string ;
3222 onSelectionChange : ( key : Key ) => void ;
3323 renderTabItem : ( item : T ) => ReactNode ;
34- renderTabPanel : ( item : T ) => ReactNode ;
24+ children ?: ReactNode ;
3525 addButton ?: ReactNode ;
3626 overflow ?: OverflowConfig ;
3727 orientation ?: 'horizontal' | 'vertical' ;
@@ -46,7 +36,7 @@ export const ManagedTabs = <T extends { id: string; name: string }>({
4636 selectedKey,
4737 onSelectionChange,
4838 renderTabItem,
49- renderTabPanel ,
39+ children ,
5040 addButton,
5141 overflow,
5242 orientation = 'vertical' ,
@@ -64,7 +54,6 @@ export const ManagedTabs = <T extends { id: string; name: string }>({
6454 id : item . id ,
6555 key : item . id ,
6656 name : item . name ,
67- children : renderTabPanel ( item ) ,
6857 originalItem : item ,
6958 } ) ) ;
7059
@@ -102,22 +91,28 @@ export const ManagedTabs = <T extends { id: string; name: string }>({
10291 </ Item >
10392 ) }
10493 </ TabList >
105- </ div >
10694
107- { overflow && collapsedItems . length > 0 && (
108- < CollapsedItemsPicker
109- items = { collapsedPickerItems }
110- ariaLabel = { overflow . pickerAriaLabel }
111- onSelectionChange = { overflow . onCollapsedItemSelect }
112- hasSelectedPinnedItem = { ! hasSelectedCollapsedItem }
113- numberOfCollapsedItems = { collapsedItems . length }
114- />
115- ) }
95+ { overflow && collapsedItems . length > 0 && (
96+ < Picker
97+ isQuiet
98+ items = { collapsedPickerItems }
99+ aria-label = { overflow . pickerAriaLabel }
100+ onSelectionChange = { ( key ) => overflow . onCollapsedItemSelect ( String ( key ) ) }
101+ placeholder = { `${ collapsedItems . length } more` }
102+ UNSAFE_className = { [
103+ classes . collapsedItemsPicker ,
104+ ! hasSelectedCollapsedItem ? classes . selected : '' ,
105+ ] . join ( ' ' ) }
106+ >
107+ { ( item ) => < Item > { item . name } </ Item > }
108+ </ Picker >
109+ ) }
110+ </ div >
116111
117112 { addButton && addButton }
118113 </ Flex >
119114
120- < TabPanels > { ( item : TabItem ) => < Item key = { item . key } > { item . children } </ Item > } </ TabPanels >
115+ < TabPanels > { ( item : TabItem ) => < Item key = { item . key } > { children } </ Item > } </ TabPanels >
121116 </ Tabs >
122117 </ Flex >
123118 ) ;
0 commit comments