Skip to content

Commit 1f67343

Browse files
committed
Remove kebab factory uses from devconsole plugin
1 parent df30df7 commit 1f67343

File tree

6 files changed

+89
-39
lines changed

6 files changed

+89
-39
lines changed

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

Lines changed: 33 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -450,28 +450,28 @@
450450
"provider": { "$codeRef": "bindingProvider.useBindingActionsProvider" }
451451
}
452452
},
453-
{
454-
"type": "console.action/resource-provider",
455-
"properties": {
456-
"model": {
457-
"version": "v1",
458-
"kind": "ClusterRoleBinding",
459-
"group": "rbac.authorization.k8s.io"
460-
},
461-
"provider": { "$codeRef": "bindingProvider.useBindingActionsProvider" }
462-
}
463-
},
464-
{
465-
"type": "console.action/resource-provider",
466-
"properties": {
467-
"model": {
468-
"version": "v1",
469-
"kind": "Build",
470-
"group": "build.openshift.io"
471-
},
472-
"provider": { "$codeRef": "buildProvider.useBuildActionsProvider" }
473-
}
474-
},
453+
{
454+
"type": "console.action/resource-provider",
455+
"properties": {
456+
"model": {
457+
"version": "v1",
458+
"kind": "ClusterRoleBinding",
459+
"group": "rbac.authorization.k8s.io"
460+
},
461+
"provider": { "$codeRef": "bindingProvider.useBindingActionsProvider" }
462+
}
463+
},
464+
{
465+
"type": "console.action/resource-provider",
466+
"properties": {
467+
"model": {
468+
"version": "v1",
469+
"kind": "Build",
470+
"group": "build.openshift.io"
471+
},
472+
"provider": { "$codeRef": "buildProvider.useBuildActionsProvider" }
473+
}
474+
},
475475
{
476476
"type": "console.action/resource-provider",
477477
"properties": {
@@ -1309,6 +1309,17 @@
13091309
},
13101310
"flags": { "required": ["OPENSHIFT_BUILD"] }
13111311
},
1312+
{
1313+
"type": "console.action/resource-provider",
1314+
"properties": {
1315+
"model": {
1316+
"group": "project.openshift.io",
1317+
"version": "v1",
1318+
"kind": "Project"
1319+
},
1320+
"provider": { "$codeRef": "projectProvider.useProjectActionsProvider" }
1321+
}
1322+
},
13121323
{
13131324
"type": "console.navigation/resource-ns",
13141325
"properties": {

frontend/packages/console-app/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
"perspectiveStateProvider": "src/actions/providers/perspective-state-provider.ts",
5353
"bindingProvider": "src/actions/providers/binding-provider.ts",
5454
"buildProvider": "src/actions/providers/build-provider.ts",
55+
"projectProvider": "src/actions/providers/project-provider.ts",
5556
"ClusterConfigurationPage": "src/components/cluster-configuration/ClusterConfigurationPage.tsx",
5657
"PreferredPerspectiveSelect": "src/components/user-preferences/perspective/PreferredPerspectiveSelect.tsx",
5758
"NamespaceDropdown": "src/components/user-preferences/namespace/NamespaceDropdown.tsx",
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import { useMemo } from 'react';
2+
import { useK8sModel } from '@console/dynamic-plugin-sdk/src/lib-core';
3+
import { K8sResourceKind, referenceFor } from '@console/internal/module/k8s';
4+
import { CommonActionCreator } from '../hooks/types';
5+
import { useCommonActions } from '../hooks/useCommonActions';
6+
7+
export const useProjectActionsProvider = (resource: K8sResourceKind) => {
8+
const [kindObj, inFlight] = useK8sModel(referenceFor(resource));
9+
const [actions, isReady] = useCommonActions(kindObj, resource, [
10+
CommonActionCreator.Edit,
11+
CommonActionCreator.Delete,
12+
] as const);
13+
const projectActions = useMemo(() => (isReady ? Object.values(actions) : []), [actions, isReady]);
14+
15+
return [projectActions, !inFlight, false];
16+
};

frontend/packages/dev-console/locales/en/devconsole.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -655,10 +655,11 @@
655655
"Chosen Cluster Roles": "Chosen Cluster Roles",
656656
" or <1>create a Project</1>": " or <1>create a Project</1>",
657657
" or <1>create a Namespace</1>": " or <1>create a Namespace</1>",
658-
"Overview": "Overview",
659-
"Details": "Details",
660658
"Projects": "Projects",
661659
"Project Details": "Project Details",
660+
"Actions": "Actions",
661+
"Overview": "Overview",
662+
"Details": "Details",
662663
"Select a Project to view its details<1></1>.": "Select a Project to view its details<1></1>.",
663664
"{{kindForRefPlural}} in {{apiVersionForRefPlural}}": "{{kindForRefPlural}} in {{apiVersionForRefPlural}}",
664665
"The server doesn't have a resource type {{missingType}}. Try refreshing the page if it was recently added.": "The server doesn't have a resource type {{missingType}}. Try refreshing the page if it was recently added.",

frontend/packages/dev-console/src/components/projects/details/ProjectDetailsPage.tsx

Lines changed: 32 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,15 @@ import { Trans, useTranslation } from 'react-i18next';
33
import { useParams } from 'react-router-dom-v5-compat';
44
import { ProjectDashboard } from '@console/internal/components/dashboard/project-dashboard/project-dashboard';
55
import { DetailsPage } from '@console/internal/components/factory';
6-
import { NamespaceDetails, projectMenuActions } from '@console/internal/components/namespace';
6+
import { NamespaceDetails } from '@console/internal/components/namespace';
77
import { withStartGuide } from '@console/internal/components/start-guide';
88
import { history, useAccessReview, Page } from '@console/internal/components/utils';
99
import { ProjectModel, RoleBindingModel } from '@console/internal/models';
10-
import { ALL_NAMESPACES_KEY } from '@console/shared';
10+
import { referenceForModel } from '@console/internal/module/k8s';
11+
import LazyActionMenu from '@console/shared/src/components/actions/LazyActionMenu';
12+
import { ActionMenuVariant } from '@console/shared/src/components/actions/types';
1113
import { DocumentTitle } from '@console/shared/src/components/document-title/DocumentTitle';
14+
import { ALL_NAMESPACES_KEY } from '@console/shared/src/constants';
1215
import NamespacedPage, { NamespacedPageVariants } from '../../NamespacedPage';
1316
import ProjectAccessPage from '../../project-access/ProjectAccessPage';
1417
import CreateProjectListPage, { CreateAProjectButton } from '../CreateProjectListPage';
@@ -25,6 +28,32 @@ const handleNamespaceChange = (newNamespace: string): void => {
2528
}
2629
};
2730

31+
const ProjectDetails = (props) => {
32+
const { t } = useTranslation();
33+
const { activeNamespace, pages } = props;
34+
return (
35+
<DetailsPage
36+
{...props}
37+
breadcrumbsFor={() => [
38+
{ name: t('devconsole~Projects'), path: '/project-details/all-namespaces' },
39+
{ name: t('devconsole~Project Details'), path: `/project-details/ns/${activeNamespace}` },
40+
]}
41+
name={activeNamespace}
42+
kind={referenceForModel(ProjectModel)}
43+
customActionMenu={(obj) => (
44+
<LazyActionMenu
45+
context={{ [referenceForModel(ProjectModel)]: obj }}
46+
variant={ActionMenuVariant.DROPDOWN}
47+
label={t('devconsole~Actions')}
48+
/>
49+
)}
50+
kindObj={ProjectModel}
51+
customData={{ activeNamespace, hideHeading: true }}
52+
pages={pages}
53+
/>
54+
);
55+
};
56+
2857
export const PageContents: React.FC<MonitoringPageProps> = ({ noProjectsAvailable, ...props }) => {
2958
const { t } = useTranslation();
3059
const params = useParams();
@@ -68,19 +97,7 @@ export const PageContents: React.FC<MonitoringPageProps> = ({ noProjectsAvailabl
6897
}
6998

7099
return !noProjectsAvailable && activeNamespace ? (
71-
<DetailsPage
72-
{...props}
73-
breadcrumbsFor={() => [
74-
{ name: t('devconsole~Projects'), path: '/project-details/all-namespaces' },
75-
{ name: t('devconsole~Project Details'), path: `/project-details/ns/${activeNamespace}` },
76-
]}
77-
name={activeNamespace}
78-
kind={ProjectModel.kind}
79-
kindObj={ProjectModel}
80-
menuActions={projectMenuActions}
81-
customData={{ activeNamespace, hideHeading: true }}
82-
pages={pages}
83-
/>
100+
<ProjectDetails {...props} activeNamespace={activeNamespace} pages={pages} />
84101
) : (
85102
<CreateProjectListPage title={t('devconsole~Project Details')}>
86103
{(openProjectModal) => (

frontend/packages/dev-console/src/components/projects/details/__tests__/ProjectDetailsPage.spec.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,10 @@ jest.mock('@console/internal/components/utils/rbac', () => ({
3030
useAccessReview: jest.fn(),
3131
}));
3232

33+
jest.mock('@console/internal/module/k8s', () => ({
34+
referenceForModel: jest.fn(),
35+
}));
36+
3337
jest.mock('@console/internal/models', () => ({
3438
ProjectModel: { kind: 'Project' },
3539
RoleBindingModel: {

0 commit comments

Comments
 (0)