Skip to content

Commit f2fb0b5

Browse files
committed
Migrate DeleteHPAModal and ConsolePluginModal from createModalLauncher to useOverlay
1 parent 028a5ff commit f2fb0b5

7 files changed

Lines changed: 119 additions & 91 deletions

File tree

Lines changed: 57 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { useMemo } from 'react';
22
import i18next from 'i18next';
33
import { Action } from '@console/dynamic-plugin-sdk';
4+
import { useOverlay } from '@console/dynamic-plugin-sdk/src/app/modal-support/useOverlay';
45
import { useK8sWatchResources } from '@console/internal/components/utils/k8s-watch-hook';
56
import { HorizontalPodAutoscalerModel } from '@console/internal/models';
67
import {
@@ -14,84 +15,23 @@ import {
1415
ClusterServiceVersionModel,
1516
ClusterServiceVersionKind,
1617
} from '@console/operator-lifecycle-manager';
17-
import deleteHPAModal from '@console/shared/src/components/hpa/DeleteHPAModal';
18+
import DeleteHPAModalProvider from '@console/shared/src/components/hpa/DeleteHPAModal';
1819
import { isHelmResource } from '@console/shared/src/utils/helm-utils';
1920
import { doesHpaMatch } from '@console/shared/src/utils/hpa-utils';
2021
import { isOperatorBackedService } from '@console/shared/src/utils/operator-utils';
21-
import { ResourceActionFactory } from './types';
2222

2323
const hpaRoute = (
2424
{ metadata: { name = '', namespace = '' } = {} }: K8sResourceCommon,
2525
kind: K8sKind,
2626
) => `/workload-hpa/ns/${namespace}/${referenceForModel(kind)}/${name}`;
2727

28-
export const HpaActionFactory: ResourceActionFactory = {
29-
AddHorizontalPodAutoScaler: (kind: K8sKind, obj: K8sResourceKind) => ({
30-
id: 'add-hpa',
31-
label: i18next.t('console-app~Add HorizontalPodAutoscaler'),
32-
cta: { href: hpaRoute(obj, kind) },
33-
insertBefore: 'add-pdb',
34-
accessReview: {
35-
group: HorizontalPodAutoscalerModel.apiGroup,
36-
resource: HorizontalPodAutoscalerModel.plural,
37-
namespace: obj.metadata?.namespace,
38-
verb: 'create',
39-
},
40-
}),
41-
EditHorizontalPodAutoScaler: (kind: K8sKind, obj: K8sResourceCommon) => ({
42-
id: 'edit-hpa',
43-
label: i18next.t('console-app~Edit HorizontalPodAutoscaler'),
44-
cta: { href: hpaRoute(obj, kind) },
45-
insertBefore: 'add-pdb',
46-
accessReview: {
47-
group: HorizontalPodAutoscalerModel.apiGroup,
48-
resource: HorizontalPodAutoscalerModel.plural,
49-
namespace: obj.metadata?.namespace,
50-
verb: 'update',
51-
},
52-
}),
53-
DeleteHorizontalPodAutoScaler: (
54-
kind: K8sKind,
55-
obj: K8sResourceCommon,
56-
relatedHPA: HorizontalPodAutoscalerKind,
57-
) => ({
58-
id: 'delete-hpa',
59-
label: i18next.t('console-app~Remove HorizontalPodAutoscaler'),
60-
insertBefore: 'delete-pdb',
61-
cta: () => {
62-
deleteHPAModal({
63-
workload: obj,
64-
hpa: relatedHPA,
65-
});
66-
},
67-
accessReview: {
68-
group: HorizontalPodAutoscalerModel.apiGroup,
69-
resource: HorizontalPodAutoscalerModel.plural,
70-
namespace: obj.metadata?.namespace,
71-
verb: 'delete',
72-
},
73-
}),
74-
};
75-
76-
export const getHpaActions = (
77-
kind: K8sKind,
78-
obj: K8sResourceKind,
79-
relatedHPAs: K8sResourceKind[],
80-
): Action[] => {
81-
if (relatedHPAs.length === 0) return [HpaActionFactory.AddHorizontalPodAutoScaler(kind, obj)];
82-
83-
return [
84-
HpaActionFactory.EditHorizontalPodAutoScaler(kind, obj),
85-
HpaActionFactory.DeleteHorizontalPodAutoScaler(kind, obj, relatedHPAs[0]),
86-
];
87-
};
88-
8928
type DeploymentActionExtraResources = {
9029
hpas: HorizontalPodAutoscalerKind[];
9130
csvs: ClusterServiceVersionKind[];
9231
};
9332

9433
export const useHPAActions = (kindObj: K8sKind, resource: K8sResourceKind) => {
34+
const launchOverlay = useOverlay();
9535
const namespace = resource?.metadata?.namespace;
9636

9737
const watchedResources = useMemo(
@@ -123,9 +63,61 @@ export const useHPAActions = (kindObj: K8sKind, resource: K8sResourceKind) => {
12363
[extraResources.csvs.data, resource],
12464
);
12565

66+
const actions = useMemo<Action[]>(() => {
67+
if (!supportsHPA) return [];
68+
69+
if (relatedHPAs.length === 0) {
70+
return [
71+
{
72+
id: 'add-hpa',
73+
label: i18next.t('console-app~Add HorizontalPodAutoscaler'),
74+
cta: { href: hpaRoute(resource, kindObj) },
75+
insertBefore: 'add-pdb',
76+
accessReview: {
77+
group: HorizontalPodAutoscalerModel.apiGroup,
78+
resource: HorizontalPodAutoscalerModel.plural,
79+
namespace: resource.metadata?.namespace,
80+
verb: 'create',
81+
},
82+
},
83+
];
84+
}
85+
return [
86+
{
87+
id: 'edit-hpa',
88+
label: i18next.t('console-app~Edit HorizontalPodAutoscaler'),
89+
cta: { href: hpaRoute(resource, kindObj) },
90+
insertBefore: 'add-pdb',
91+
accessReview: {
92+
group: HorizontalPodAutoscalerModel.apiGroup,
93+
resource: HorizontalPodAutoscalerModel.plural,
94+
namespace: resource.metadata?.namespace,
95+
verb: 'update',
96+
},
97+
},
98+
{
99+
id: 'delete-hpa',
100+
label: i18next.t('console-app~Remove HorizontalPodAutoscaler'),
101+
insertBefore: 'delete-pdb',
102+
cta: () => {
103+
launchOverlay(DeleteHPAModalProvider, {
104+
workload: resource,
105+
hpa: relatedHPAs[0],
106+
});
107+
},
108+
accessReview: {
109+
group: HorizontalPodAutoscalerModel.apiGroup,
110+
resource: HorizontalPodAutoscalerModel.plural,
111+
namespace: resource.metadata?.namespace,
112+
verb: 'delete',
113+
},
114+
},
115+
];
116+
}, [kindObj, relatedHPAs, resource, supportsHPA, launchOverlay]);
117+
126118
const result = useMemo<[Action[], HorizontalPodAutoscalerKind[]]>(() => {
127-
return [supportsHPA ? getHpaActions(kindObj, resource, relatedHPAs) : [], relatedHPAs];
128-
}, [kindObj, relatedHPAs, resource, supportsHPA]);
119+
return [actions, relatedHPAs];
120+
}, [actions, relatedHPAs]);
129121

130122
return result;
131123
};

frontend/packages/console-app/src/components/console-operator/ConsoleOperatorConfig.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import { useSelector } from 'react-redux';
1919
import { Link } from 'react-router-dom';
2020
import { useLocation } from 'react-router-dom-v5-compat';
2121
import { useAccessReview, WatchK8sResource } from '@console/dynamic-plugin-sdk';
22+
import { useOverlay } from '@console/dynamic-plugin-sdk/src/app/modal-support/useOverlay';
2223
import {
2324
getGroupVersionKindForModel,
2425
getReferenceForModel,
@@ -43,7 +44,7 @@ import {
4344
import { RootState } from '@console/internal/redux';
4445
import { usePluginInfo } from '@console/plugin-sdk/src/api/usePluginInfo';
4546
import PaneBody from '@console/shared/src/components/layout/PaneBody';
46-
import { consolePluginModal } from '@console/shared/src/components/modals/ConsolePluginModal';
47+
import ConsolePluginModalProvider from '@console/shared/src/components/modals/ConsolePluginModal';
4748
import {
4849
GreenCheckCircleIcon,
4950
YellowExclamationTriangleIcon,
@@ -97,6 +98,7 @@ export const ConsolePluginEnabledStatus: FC<ConsolePluginEnabledStatusProps> = (
9798
enabled,
9899
}) => {
99100
const { t } = useTranslation();
101+
const launchOverlay = useOverlay();
100102

101103
const {
102104
consoleOperatorConfig,
@@ -116,7 +118,7 @@ export const ConsolePluginEnabledStatus: FC<ConsolePluginEnabledStatusProps> = (
116118
type="button"
117119
isInline
118120
onClick={() =>
119-
consolePluginModal({
121+
launchOverlay(ConsolePluginModalProvider, {
120122
consoleOperatorConfig,
121123
pluginName,
122124
trusted: false,

frontend/packages/console-shared/src/components/hpa/DeleteHPAModal.tsx

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,13 @@ import { Form } from '@patternfly/react-core';
44
import { ExclamationTriangleIcon } from '@patternfly/react-icons/dist/esm/icons/exclamation-triangle-icon';
55
import { t_global_icon_color_status_warning_default as warningColor } from '@patternfly/react-tokens';
66
import { useTranslation } from 'react-i18next';
7+
import { OverlayComponent } from '@console/dynamic-plugin-sdk/src/app/modal-support/OverlayProvider';
78
import {
8-
createModalLauncher,
99
ModalBody,
1010
ModalComponentProps,
1111
ModalSubmitFooter,
1212
ModalTitle,
13+
ModalWrapper,
1314
} from '@console/internal/components/factory/modal';
1415
import { LoadingInline } from '@console/internal/components/utils/status-box';
1516
import { HorizontalPodAutoscalerModel } from '@console/internal/models';
@@ -24,7 +25,7 @@ type DeleteHPAModalProps = ModalComponentProps & {
2425
workload: K8sResourceCommon;
2526
};
2627

27-
const DeleteHPAModal: FC<DeleteHPAModalProps> = ({ close, hpa, workload }) => {
28+
const DeleteHPAModal: FC<DeleteHPAModalProps> = ({ close, cancel, hpa, workload }) => {
2829
const [submitError, setSubmitError] = useState<string>(null);
2930
const [isSubmitting, setIsSubmitting] = useState<boolean>(false);
3031
const { t } = useTranslation();
@@ -82,11 +83,26 @@ const DeleteHPAModal: FC<DeleteHPAModalProps> = ({ close, hpa, workload }) => {
8283
submitText={t('console-shared~Remove')}
8384
submitDanger
8485
submitDisabled={!!submitError}
85-
cancel={close}
86+
cancel={cancel}
8687
/>
8788
</div>
8889
</Form>
8990
);
9091
};
9192

92-
export default createModalLauncher(DeleteHPAModal);
93+
const DeleteHPAModalProvider: OverlayComponent<Omit<DeleteHPAModalProps, 'close' | 'cancel'>> = (
94+
props,
95+
) => {
96+
return (
97+
<ModalWrapper blocking onClose={props.closeOverlay}>
98+
<DeleteHPAModal
99+
close={props.closeOverlay}
100+
cancel={props.closeOverlay}
101+
hpa={props.hpa}
102+
workload={props.workload}
103+
/>
104+
</ModalWrapper>
105+
);
106+
};
107+
108+
export default DeleteHPAModalProvider;
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export { default as deleteHPAModal } from './DeleteHPAModal';
1+
export { default as DeleteHPAModalProvider } from './DeleteHPAModal';

frontend/packages/console-shared/src/components/modals/ConsolePluginModal.tsx

Lines changed: 32 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
import { useState } from 'react';
2-
import { Form } from '@patternfly/react-core';
32
import { useTranslation } from 'react-i18next';
3+
import { OverlayComponent } from '@console/dynamic-plugin-sdk/src/app/modal-support/OverlayProvider';
44
import {
5-
createModalLauncher,
65
ModalTitle,
76
ModalBody,
87
ModalSubmitFooter,
8+
ModalWrapper,
99
} from '@console/internal/components/factory/modal';
1010
import { ConsoleOperatorConfigModel } from '@console/internal/models';
1111
import { k8sPatch, K8sResourceKind } from '@console/internal/module/k8s';
@@ -48,19 +48,17 @@ export const ConsolePluginModal = (props: ConsolePluginModalProps) => {
4848
'console-shared~This console plugin provides a custom interface that can be included in the console. Updating the enablement of this console plugin will prompt for the console to be refreshed once it has been updated. Make sure you trust this console plugin before enabling.',
4949
)}
5050
</p>
51-
<Form>
52-
<ConsolePluginRadioInputs
53-
autofocus
54-
name={pluginName}
55-
enabled={enabled}
56-
onChange={setEnabled}
57-
/>
58-
<ConsolePluginWarning
59-
previouslyEnabled={previouslyEnabled}
60-
enabled={enabled}
61-
trusted={trusted}
62-
/>
63-
</Form>
51+
<ConsolePluginRadioInputs
52+
autofocus
53+
name={pluginName}
54+
enabled={enabled}
55+
onChange={setEnabled}
56+
/>
57+
<ConsolePluginWarning
58+
previouslyEnabled={previouslyEnabled}
59+
enabled={enabled}
60+
trusted={trusted}
61+
/>
6462
</ModalBody>
6563
<ModalSubmitFooter
6664
errorMessage={errorMessage}
@@ -73,7 +71,25 @@ export const ConsolePluginModal = (props: ConsolePluginModalProps) => {
7371
);
7472
};
7573

76-
export const consolePluginModal = createModalLauncher(ConsolePluginModal);
74+
const ConsolePluginModalProvider: OverlayComponent<Omit<
75+
ConsolePluginModalProps,
76+
'close' | 'cancel'
77+
>> = (props) => {
78+
return (
79+
<ModalWrapper blocking onClose={props.closeOverlay}>
80+
<ConsolePluginModal
81+
close={props.closeOverlay}
82+
cancel={props.closeOverlay}
83+
consoleOperatorConfig={props.consoleOperatorConfig}
84+
csvPluginsCount={props.csvPluginsCount}
85+
pluginName={props.pluginName}
86+
trusted={props.trusted}
87+
/>
88+
</ModalWrapper>
89+
);
90+
};
91+
92+
export default ConsolePluginModalProvider;
7793

7894
export type ConsolePluginModalProps = {
7995
consoleOperatorConfig: K8sResourceKind;

frontend/packages/console-shared/src/components/modals/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
export const consolePluginModal = (props) =>
22
import('./ConsolePluginModal' /* webpackChunkName: "shared-modals" */).then((m) =>
3-
m.consolePluginModal(props),
3+
m.default(props),
44
);
55

66
export const deleteResourceModal = (props) =>

frontend/packages/operator-lifecycle-manager/src/components/clusterserviceversion.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import {
3030
useAccessReviewAllowed,
3131
useAccessReview,
3232
} from '@console/dynamic-plugin-sdk';
33+
import { useOverlay } from '@console/dynamic-plugin-sdk/src/app/modal-support/useOverlay';
3334
import { getGroupVersionKindForModel } from '@console/dynamic-plugin-sdk/src/lib-core';
3435
import { Conditions, ConditionTypes } from '@console/internal/components/conditions';
3536
import { ResourceEventStream } from '@console/internal/components/events';
@@ -77,7 +78,7 @@ import { DocumentTitle } from '@console/shared/src/components/document-title/Doc
7778
import { withFallback } from '@console/shared/src/components/error';
7879
import PaneBody from '@console/shared/src/components/layout/PaneBody';
7980
import { ExternalLink } from '@console/shared/src/components/links/ExternalLink';
80-
import { consolePluginModal } from '@console/shared/src/components/modals';
81+
import ConsolePluginModalProvider from '@console/shared/src/components/modals/ConsolePluginModal';
8182
import { RedExclamationCircleIcon } from '@console/shared/src/components/status/icons';
8283
import { CONSOLE_OPERATOR_CONFIG_NAME } from '@console/shared/src/constants';
8384
import { useActiveNamespace } from '@console/shared/src/hooks/redux-selectors';
@@ -239,6 +240,7 @@ const ManagedNamespaces: FC<ManagedNamespacesProps> = ({ obj }) => {
239240
};
240241

241242
const ConsolePlugins: FC<ConsolePluginsProps> = ({ csvPlugins, trusted }) => {
243+
const launchOverlay = useOverlay();
242244
const console: WatchK8sResource = {
243245
kind: referenceForModel(ConsoleOperatorConfigModel),
244246
isList: false,
@@ -273,7 +275,7 @@ const ConsolePlugins: FC<ConsolePluginsProps> = ({ csvPlugins, trusted }) => {
273275
type="button"
274276
isInline
275277
onClick={() =>
276-
consolePluginModal({
278+
launchOverlay(ConsolePluginModalProvider, {
277279
consoleOperatorConfig,
278280
pluginName,
279281
trusted,

0 commit comments

Comments
 (0)