@@ -21,7 +21,6 @@ import {
2121 ExtensionK8sGroupModel ,
2222} from '../module/k8s' ;
2323import { DetailsItem } from './utils/details-item' ;
24- import { Kebab , ResourceKebab } from './utils/kebab' ;
2524import { kindObj } from './utils/inject' ;
2625import { navFactory } from './utils/horizontal-nav' ;
2726import { ResourceLink } from './utils/resource-link' ;
@@ -51,8 +50,9 @@ import {
5150 ResolvedExtension ,
5251} from '@console/dynamic-plugin-sdk' ;
5352import LazyActionMenu from '@console/shared/src/components/actions/LazyActionMenu' ;
54-
55- const { common } = Kebab . factory ;
53+ import { useCommonResourceActions } from '@console/app/src/actions/hooks/useCommonResourceActions' ;
54+ import ActionMenu from '@console/shared/src/components/actions/menu/ActionMenu' ;
55+ import { ActionMenuVariant } from '@console/shared/src/components/actions/types' ;
5656
5757const tableColumnInfo = [ { id : 'name' } , { id : 'namespace' } , { id : 'created' } , { id : 'actions' } ] ;
5858
@@ -77,6 +77,20 @@ const getAdditionaPrinterColumnID = (column: CRDAdditionalPrinterColumn) => {
7777 return `apc-${ column . name } ` ;
7878} ;
7979
80+ type ResourceActionsMenuProps = {
81+ resource : K8sResourceKind ;
82+ } & Pick < React . ComponentProps < typeof ActionMenu > , 'variant' | 'appendTo' > ;
83+
84+ const ResourceActionsMenu : React . FC < ResourceActionsMenuProps > = ( {
85+ resource,
86+ variant,
87+ appendTo,
88+ } ) => {
89+ const common = useCommonResourceActions ( kindObj ( referenceFor ( resource ) ) , resource ) ;
90+ const menuActions = [ ...common ] ;
91+ return < ActionMenu actions = { menuActions } variant = { variant } appendTo = { appendTo } /> ;
92+ } ;
93+
8094const NamespaceCell : React . FCC < NamespaceCellProps > = ( { namespace } ) => {
8195 const { t } = useTranslation ( ) ;
8296 return namespace ? < ResourceLink kind = "Namespace" name = { namespace } /> : < > { t ( 'public~None' ) } </ > ;
@@ -176,7 +190,6 @@ const getDataViewRows = (
176190 return data . map ( ( { obj } ) => {
177191 const { name, namespace, creationTimestamp } = obj . metadata ;
178192 const kind = referenceFor ( obj ) || kinds [ 0 ] ;
179- const menuActions = [ ...common ] ;
180193
181194 const hasExtensionActions =
182195 resourceProviderExtensionsResolved && resourceProviderExtensions ?. length > 0 ;
@@ -214,7 +227,11 @@ const getDataViewRows = (
214227 { hasExtensionActions ? (
215228 < LazyActionMenu context = { { [ kind ] : obj } } />
216229 ) : (
217- < ResourceKebab actions = { menuActions } kind = { kind } resource = { obj } />
230+ < ResourceActionsMenu
231+ resource = { obj }
232+ variant = { ActionMenuVariant . KEBAB }
233+ appendTo = { document . getElementById ( 'popper-container' ) ?? document . body }
234+ />
218235 ) }
219236 </ >
220237 ) ,
@@ -375,9 +392,33 @@ DefaultPage.displayName = 'DefaultPage';
375392
376393export const DefaultDetailsPage : React . FC < React . ComponentProps < typeof DetailsPage > > = ( props ) => {
377394 const pages = [ navFactory . details ( DetailsForKind ) , navFactory . editYaml ( ) ] ;
378- const menuActions = [ ...common ] ;
379-
380- return < DetailsPage { ...props } menuActions = { menuActions } pages = { pages } /> ;
395+ const resourceProviderGuard = React . useCallback (
396+ ( e ) : e is ResourceActionProvider =>
397+ isResourceActionProvider ( e ) &&
398+ referenceForExtensionModel ( e . properties . model as ExtensionK8sGroupModel ) === props . kind ,
399+ [ props . kind ] ,
400+ ) ;
401+ const [ resourceProviderExtensions , resourceProviderExtensionsResolved ] = useResolvedExtensions <
402+ ResourceActionProvider
403+ > ( resourceProviderGuard ) ;
404+ const hasExtensionActions =
405+ resourceProviderExtensionsResolved && resourceProviderExtensions ?. length > 0 ;
406+ return (
407+ < DetailsPage
408+ { ...props }
409+ customActionMenu = { ( k8sObj , obj ) =>
410+ hasExtensionActions ? (
411+ < LazyActionMenu
412+ context = { { [ referenceFor ( obj ) ] : obj } }
413+ variant = { ActionMenuVariant . DROPDOWN }
414+ />
415+ ) : (
416+ < ResourceActionsMenu resource = { obj } variant = { ActionMenuVariant . DROPDOWN } />
417+ )
418+ }
419+ pages = { pages }
420+ />
421+ ) ;
381422} ;
382423DefaultDetailsPage . displayName = 'DefaultDetailsPage' ;
383424
0 commit comments