Skip to content

Commit 69ffc01

Browse files
committed
Remove kebab factory uses from resourceQuota and pod-list pages
1 parent 2243c06 commit 69ffc01

File tree

6 files changed

+149
-56
lines changed

6 files changed

+149
-56
lines changed

frontend/packages/console-app/console-extensions.json

Lines changed: 40 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -432,7 +432,9 @@
432432
"kind": "VolumeAttributesClass",
433433
"group": "storage.k8s.io"
434434
},
435-
"provider": { "$codeRef": "volumeAttributesClassProvider.useVolumeAttributesClassActionsProvider" }
435+
"provider": {
436+
"$codeRef": "volumeAttributesClassProvider.useVolumeAttributesClassActionsProvider"
437+
}
436438
},
437439
"flags": {
438440
"required": ["VAC_PLATFORM_SUPPORT"]
@@ -528,6 +530,41 @@
528530
"provider": { "$codeRef": "prometheusProvider.usePrometheusActionsProvider" }
529531
}
530532
},
533+
{
534+
"type": "console.action/resource-provider",
535+
"properties": {
536+
"model": {
537+
"group": "",
538+
"version": "v1",
539+
"kind": "ResourceQuota"
540+
},
541+
"provider": { "$codeRef": "defaultProvider.useDefaultActionsProvider" }
542+
}
543+
},
544+
{
545+
"type": "console.action/resource-provider",
546+
"properties": {
547+
"model": {
548+
"group": "quota.openshift.io",
549+
"version": "v1",
550+
"kind": "ClusterResourceQuota"
551+
},
552+
"provider": { "$codeRef": "defaultProvider.useDefaultActionsProvider" }
553+
}
554+
},
555+
{
556+
"type": "console.action/resource-provider",
557+
"properties": {
558+
"model": {
559+
"group": "quota.openshift.io",
560+
"version": "v1",
561+
"kind": "AppliedClusterResourceQuota"
562+
},
563+
"provider": {
564+
"$codeRef": "appliedClusterResourceQuotaProvider.useAppliedClusterResourceQuotaActionsProvider"
565+
}
566+
}
567+
},
531568
{
532569
"type": "console.page/route",
533570
"properties": {
@@ -1286,8 +1323,8 @@
12861323
"kind": "VolumeAttributesClass"
12871324
}
12881325
},
1289-
"flags": {
1290-
"required": ["VAC_PLATFORM_SUPPORT"]
1326+
"flags": {
1327+
"required": ["VAC_PLATFORM_SUPPORT"]
12911328
}
12921329
},
12931330
{

frontend/packages/console-app/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@
9999
"customResourceDefinitionProvider": "src/actions/providers/custom-resource-definition-provider.ts",
100100
"machineConfigPoolProvider": "src/actions/providers/machine-config-pool-provider.ts",
101101
"serviceMonitorProvider": "src/actions/providers/service-monitor-provider.ts",
102+
"appliedClusterResourceQuotaProvider": "src/actions/providers/applied-cluster-resource-quota-provider.ts",
102103
"userProvider": "src/actions/providers/user-provider.ts"
103104
}
104105
}
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
import { useMemo } from 'react';
2+
import { useTranslation } from 'react-i18next';
3+
import { useNavigate } from 'react-router-dom-v5-compat';
4+
import { Action } from '@console/dynamic-plugin-sdk';
5+
import { asAccessReview } from '@console/internal/components/utils/rbac';
6+
import { AppliedClusterResourceQuotaModel } from '@console/internal/models';
7+
import { K8sResourceKind, referenceFor, referenceForModel } from '@console/internal/module/k8s';
8+
import { useK8sModel } from '@console/shared/src/hooks/useK8sModel';
9+
import { CommonActionCreator } from '../hooks/types';
10+
import { useCommonActions } from '../hooks/useCommonActions';
11+
12+
const useEditAppliedClusterResourceQuotaActions = (
13+
resource: K8sResourceKind,
14+
namespace: string,
15+
) => {
16+
const { t } = useTranslation();
17+
const navigate = useNavigate();
18+
const factory = useMemo(
19+
() => ({
20+
editResourceQuota: () => ({
21+
id: 'edit-resource-quota',
22+
label: t('public~Edit AppliedClusterResourceQuota'),
23+
cta: () =>
24+
navigate(
25+
`/k8s/ns/${namespace}/${referenceForModel(AppliedClusterResourceQuotaModel)}/${
26+
resource?.metadata?.name
27+
}/yaml`,
28+
),
29+
accessReview: asAccessReview(AppliedClusterResourceQuotaModel, resource, 'update'),
30+
}),
31+
}),
32+
[t, resource, navigate, namespace],
33+
);
34+
35+
const action = useMemo<Action[]>(() => [factory.editResourceQuota()], [factory]);
36+
return action;
37+
};
38+
39+
export const useAppliedClusterResourceQuotaActionsProvider = (data: {
40+
quota: K8sResourceKind;
41+
namespace: string;
42+
}) => {
43+
const { quota, namespace } = data;
44+
const [kindObj, inFlight] = useK8sModel(referenceFor(quota));
45+
const [editLabelsAction, isLabelActionReady] = useCommonActions(kindObj, quota, [
46+
CommonActionCreator.ModifyLabels,
47+
] as const);
48+
const [editAnnotationsAction, isAnnotationActionReady] = useCommonActions(kindObj, quota, [
49+
CommonActionCreator.ModifyAnnotations,
50+
] as const);
51+
const [editDeleteAction, isDeleteActionReady] = useCommonActions(kindObj, quota, [
52+
CommonActionCreator.Delete,
53+
] as const);
54+
const editLabels = useMemo(() => (isLabelActionReady ? Object.values(editLabelsAction) : []), [
55+
editLabelsAction,
56+
isLabelActionReady,
57+
]);
58+
const editAnnotations = useMemo(
59+
() => (isAnnotationActionReady ? Object.values(editAnnotationsAction) : []),
60+
[editAnnotationsAction, isAnnotationActionReady],
61+
);
62+
const deleteQuota = useMemo(() => (isDeleteActionReady ? Object.values(editDeleteAction) : []), [
63+
editDeleteAction,
64+
isDeleteActionReady,
65+
]);
66+
const editAppliedClusterResourceQuotaActions = useEditAppliedClusterResourceQuotaActions(
67+
quota,
68+
namespace,
69+
);
70+
const resourceQuotaActions = useMemo(
71+
() => [
72+
...editLabels,
73+
...editAnnotations,
74+
...editAppliedClusterResourceQuotaActions,
75+
...deleteQuota,
76+
],
77+
[editLabels, editAnnotations, editAppliedClusterResourceQuotaActions, deleteQuota],
78+
);
79+
return [resourceQuotaActions, !inFlight, false];
80+
};

frontend/public/components/pod-list.tsx

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,6 @@ import { sortResourceByValue } from './factory/Table/sort';
5454
import { PROMETHEUS_BASE_PATH, PROMETHEUS_TENANCY_BASE_PATH } from './graphs/consts';
5555
import { PodTraffic } from './pod-traffic';
5656
import { useK8sWatchResource } from './utils/k8s-watch-hook';
57-
import { Kebab } from './utils/kebab';
5857
import { LabelList } from './utils/label-list';
5958
import { OwnerReferences } from './utils/owner-references';
6059
import { ResourceLink, resourcePath } from './utils/resource-link';
@@ -97,8 +96,6 @@ const fetchPodMetrics = (namespace: string): Promise<UIActions.PodMetrics> => {
9796
return Promise.all(promises).then((data: unknown[]) => _.assign({}, ...data));
9897
};
9998

100-
export const menuActions = [...(Kebab.factory.common || [])];
101-
10299
const tableColumnInfo = [
103100
{ id: 'name' },
104101
{ id: 'namespace' },

frontend/public/components/resource-quota.jsx

Lines changed: 27 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ import { FLAGS } from '@console/shared/src/constants/common';
1818
import { YellowExclamationTriangleIcon } from '@console/shared/src/components/status/icons';
1919
import { DASH } from '@console/shared/src/constants/ui';
2020
import { DetailsPage, MultiListPage } from './factory';
21-
import { Kebab, ResourceKebab } from './utils/kebab';
2221
import { SectionHeading } from './utils/headings';
2322
import { navFactory } from './utils/horizontal-nav';
2423
import { ResourceLink } from './utils/resource-link';
@@ -54,32 +53,8 @@ import {
5453
actionsCellProps,
5554
cellIsStickyProps,
5655
} from '@console/app/src/components/data-view/ConsoleDataView';
57-
58-
const { common } = Kebab.factory;
59-
60-
const resourceQuotaMenuActions = [...common];
61-
const clusterResourceQuotaMenuActions = [...common];
62-
const appliedClusterResourceQuotaMenuActions = (namespace) => [
63-
Kebab.factory.ModifyLabels,
64-
Kebab.factory.ModifyAnnotations,
65-
(kind, obj) => {
66-
return {
67-
// t('public~Edit AppliedClusterResourceQuota')
68-
labelKey: 'public~Edit AppliedClusterResourceQuota',
69-
href: `/k8s/ns/${namespace}/${referenceForModel(AppliedClusterResourceQuotaModel)}/${
70-
obj.metadata.name
71-
}/yaml`,
72-
accessReview: {
73-
group: kind.apiGroup,
74-
resource: kind.plural,
75-
name: obj.metadata.name,
76-
namespace,
77-
verb: 'update',
78-
},
79-
};
80-
},
81-
Kebab.factory.Delete,
82-
];
56+
import LazyActionMenu from '@console/shared/src/components/actions/LazyActionMenu';
57+
import { ActionMenuVariant } from '@console/shared/src/components/actions/types';
8358

8459
const isClusterQuota = (quota) => !quota.metadata.namespace;
8560

@@ -88,16 +63,17 @@ const appliedClusterQuotaReference = referenceForModel(AppliedClusterResourceQuo
8863

8964
const quotaActions = (quota, namespace = undefined) => {
9065
if (quota.metadata.namespace) {
91-
return resourceQuotaMenuActions;
66+
return <LazyActionMenu context={{ [referenceForModel(ResourceQuotaModel)]: quota }} />;
9267
}
9368

9469
if (quota.kind === 'ClusterResourceQuota') {
95-
return clusterResourceQuotaMenuActions;
70+
return <LazyActionMenu context={{ [clusterQuotaReference]: quota }} />;
9671
}
9772

9873
if (quota.kind === 'AppliedClusterResourceQuota') {
99-
return appliedClusterResourceQuotaMenuActions(namespace);
74+
return <LazyActionMenu context={{ [appliedClusterQuotaReference]: { quota, namespace } }} />;
10075
}
76+
return null;
10177
};
10278

10379
export const getQuotaResourceTypes = (quota) => {
@@ -479,14 +455,7 @@ const getResourceQuotaDataViewRows = (data, columns, namespace) => {
479455
cell: <Timestamp timestamp={metadata.creationTimestamp} />,
480456
},
481457
[resourceQuotaTableColumnInfo[6].id]: {
482-
cell: (
483-
<ResourceKebab
484-
customData={namespace}
485-
actions={quotaActions(obj, namespace)}
486-
kind={resourceKind}
487-
resource={obj}
488-
/>
489-
),
458+
cell: quotaActions(obj, namespace),
490459
props: actionsCellProps,
491460
},
492461
};
@@ -549,14 +518,7 @@ const getAppliedClusterResourceQuotaDataViewRows = (data, columns, namespace) =>
549518
cell: <Timestamp timestamp={metadata.creationTimestamp} />,
550519
},
551520
[appliedClusterResourceQuotaTableColumnInfo[5].id]: {
552-
cell: (
553-
<ResourceKebab
554-
customData={namespace}
555-
actions={quotaActions(obj, namespace)}
556-
kind={appliedClusterQuotaReference}
557-
resource={obj}
558-
/>
559-
),
521+
cell: quotaActions(obj, namespace),
560522
props: actionsCellProps,
561523
},
562524
};
@@ -851,19 +813,35 @@ export const ResourceQuotasDetailsPage = (props) => {
851813
return (
852814
<DetailsPage
853815
{...props}
854-
menuActions={resourceQuotaMenuActions}
816+
kind={referenceForModel(ResourceQuotaModel)}
817+
customActionMenu={(k8sObj, obj) => (
818+
<LazyActionMenu
819+
context={{ [referenceForModel(ResourceQuotaModel)]: obj }}
820+
variant={ActionMenuVariant.DROPDOWN}
821+
/>
822+
)}
855823
pages={[navFactory.details(Details), navFactory.editYaml()]}
856824
/>
857825
);
858826
};
859827

860828
export const AppliedClusterResourceQuotasDetailsPage = (props) => {
861829
const params = useParams();
862-
const actions = appliedClusterResourceQuotaMenuActions(params?.ns);
863830
return (
864831
<DetailsPage
865832
{...props}
866-
menuActions={actions}
833+
kind={appliedClusterQuotaReference}
834+
customActionMenu={(k8sObj, obj) => (
835+
<LazyActionMenu
836+
context={{
837+
[appliedClusterQuotaReference]: {
838+
quota: obj,
839+
namespace: params?.ns,
840+
},
841+
}}
842+
variant={ActionMenuVariant.DROPDOWN}
843+
/>
844+
)}
867845
pages={[navFactory.details(Details), navFactory.editYaml()]}
868846
/>
869847
);

frontend/public/locales/en/public.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1230,7 +1230,6 @@
12301230
"Recently used": "Recently used",
12311231
"No results found": "No results found",
12321232
"Clear input value": "Clear input value",
1233-
"Edit AppliedClusterResourceQuota": "Edit AppliedClusterResourceQuota",
12341233
"{{count}} resource reached quota_one": "{{count}} resource reached quota",
12351234
"{{count}} resource reached quota_other": "{{count}} resource reached quotas",
12361235
"none are at quota": "none are at quota",
@@ -1718,6 +1717,7 @@
17181717
"Cancel build": "Cancel build",
17191718
"Impersonate Group {{name}}": "Impersonate Group {{name}}",
17201719
"Edit Machine count": "Edit Machine count",
1720+
"Edit AppliedClusterResourceQuota": "Edit AppliedClusterResourceQuota",
17211721
"Start build": "Start build",
17221722
"Start last run": "Start last run",
17231723
"Pause updates": "Pause updates",

0 commit comments

Comments
 (0)