Skip to content

Commit e3d453a

Browse files
committed
Remove kebab factory uses from default-resouce list and details pages
1 parent 86c7b34 commit e3d453a

File tree

3 files changed

+52
-17
lines changed

3 files changed

+52
-17
lines changed

frontend/packages/console-shared/src/components/actions/menu/ActionMenu.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ type ActionMenuProps = {
1414
variant?: ActionMenuVariant;
1515
label?: string;
1616
className?: string;
17+
appendTo?: React.ComponentProps<typeof Popper>['appendTo'];
1718
};
1819

1920
const ActionMenu: React.FC<ActionMenuProps> = ({
@@ -23,6 +24,7 @@ const ActionMenu: React.FC<ActionMenuProps> = ({
2324
variant = ActionMenuVariant.KEBAB,
2425
label,
2526
className,
27+
appendTo,
2628
}) => {
2729
const isKebabVariant = variant === ActionMenuVariant.KEBAB;
2830
const [isVisible, setVisible] = useSafetyFirst(isKebabVariant);
@@ -103,7 +105,7 @@ const ActionMenu: React.FC<ActionMenuProps> = ({
103105
popper={menu}
104106
placement="bottom-end"
105107
isVisible={isOpen}
106-
appendTo={containerRef.current}
108+
appendTo={appendTo || containerRef.current}
107109
/>
108110
</div>
109111
)

frontend/packages/metal3-plugin/src/components/modals/PowerOffHostModal.tsx

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -167,14 +167,6 @@ const isPowerOffSafe = (status: string) => {
167167
return safeStates.includes(status);
168168
};
169169

170-
export type PowerOffHostModalProps1 = {
171-
host: BareMetalHostKind;
172-
nodeName: string;
173-
status: StatusProps;
174-
cancel?: () => void;
175-
close?: () => void;
176-
};
177-
178170
export type PowerOffHostModalProps = {
179171
host: BareMetalHostKind;
180172
nodeName: string;

frontend/public/components/default-resource.tsx

Lines changed: 49 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ import {
2121
ExtensionK8sGroupModel,
2222
} from '../module/k8s';
2323
import { DetailsItem } from './utils/details-item';
24-
import { Kebab, ResourceKebab } from './utils/kebab';
2524
import { kindObj } from './utils/inject';
2625
import { navFactory } from './utils/horizontal-nav';
2726
import { ResourceLink } from './utils/resource-link';
@@ -51,8 +50,9 @@ import {
5150
ResolvedExtension,
5251
} from '@console/dynamic-plugin-sdk';
5352
import 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

5757
const 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+
8094
const 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

376393
export 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
};
382423
DefaultDetailsPage.displayName = 'DefaultDetailsPage';
383424

0 commit comments

Comments
 (0)