Skip to content

Commit d101674

Browse files
Merge pull request #15940 from rhamilto/CONSOLE-5012-3
CONSOLE-5012: Additional modal migrations to overlay pattern
2 parents 1a68f54 + cf10b70 commit d101674

9 files changed

Lines changed: 72 additions & 34 deletions

File tree

frontend/packages/console-app/src/actions/hooks/useDeploymentActions.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import {
1616
k8sCreate,
1717
K8sModel,
1818
} from '@console/internal/module/k8s';
19-
import { resourceLimitsModal } from '../../components/modals/resource-limits';
19+
import { LazyResourceLimitsModalOverlay } from '../../components/modals/resource-limits';
2020
import { DeploymentActionCreator, ActionObject } from './types';
2121

2222
const restartRollout = (model: K8sModel | undefined, obj: K8sResourceKind | undefined) => {
@@ -171,7 +171,7 @@ export const useDeploymentActions = <T extends readonly DeploymentActionCreator[
171171
id: 'edit-resource-limits',
172172
label: t('console-app~Edit resource limits'),
173173
cta: () =>
174-
resourceLimitsModal({
174+
launchModal(LazyResourceLimitsModalOverlay, {
175175
model: kind,
176176
resource,
177177
}),

frontend/packages/console-app/src/actions/hooks/usePDBActions.ts

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,12 @@ import { useMemo } from 'react';
22
import * as _ from 'lodash';
33
import { useTranslation } from 'react-i18next';
44
import { Action } from '@console/dynamic-plugin-sdk';
5+
import { useOverlay } from '@console/dynamic-plugin-sdk/src/app/modal-support/useOverlay';
56
import { useDeepCompareMemoize } from '@console/dynamic-plugin-sdk/src/utils/k8s/hooks/useDeepCompareMemoize';
67
import { useK8sWatchResource } from '@console/internal/components/utils/k8s-watch-hook';
78
import { asAccessReview } from '@console/internal/components/utils/rbac';
89
import { K8sPodControllerKind, K8sModel, referenceFor } from '@console/internal/module/k8s';
9-
import { deletePDBModal } from '../../components/pdb/modals';
10+
import { LazyDeletePDBModalOverlay } from '../../components/pdb/modals';
1011
import { PodDisruptionBudgetKind } from '../../components/pdb/types';
1112
import { getPDBResource } from '../../components/pdb/utils/get-pdb-resources';
1213
import { PodDisruptionBudgetModel } from '../../models';
@@ -42,6 +43,7 @@ export const usePDBActions = (
4243
const namespace = resource?.metadata?.namespace;
4344
const memoizedFilterActions = useDeepCompareMemoize(filterActions);
4445
const { t } = useTranslation();
46+
const launchModal = useOverlay();
4547
const watchedResource = useMemo(
4648
() => ({
4749
isList: true,
@@ -88,16 +90,15 @@ export const usePDBActions = (
8890
id: 'delete-pdb',
8991
label: t('console-app~Remove PodDisruptionBudget'),
9092
insertBefore: 'edit-resource-limits',
91-
cta: () => {
92-
deletePDBModal({
93+
cta: () =>
94+
launchModal(LazyDeletePDBModalOverlay, {
9395
workloadName: resource.metadata.name,
9496
pdb: matchedPDB,
95-
});
96-
},
97+
}),
9798
accessReview: asAccessReview(kindObj, resource, 'delete'),
9899
}),
99100
};
100-
}, [loaded, kindObj, resource, matchedPDB, t]);
101+
}, [loaded, kindObj, resource, matchedPDB, t, launchModal]);
101102

102103
const actions = useMemo<Action[]>(() => {
103104
if (!loaded || !kindObj || !resource) return [];

frontend/packages/console-app/src/components/modals/resource-limits/ResourceLimitsModalLauncher.tsx

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@ import { TFunction } from 'i18next';
44
import { useTranslation } from 'react-i18next';
55
import * as yup from 'yup';
66
import { limitsValidationSchema } from '@console/dev-console/src/components/import/validation-schema';
7-
import { createModalLauncher, ModalComponentProps } from '@console/internal/components/factory';
7+
import { OverlayComponent } from '@console/dynamic-plugin-sdk/src/app/modal-support/OverlayProvider';
8+
import { ModalComponentProps, ModalWrapper } from '@console/internal/components/factory';
89
import { K8sKind, k8sPatch, K8sResourceKind } from '@console/internal/module/k8s';
910
import { getLimitsDataFromResource, getResourceLimitsData } from '@console/shared/src';
1011
import ResourceLimitsModal from './ResourceLimitsModal';
1112

1213
export type ResourceLimitsModalLauncherProps = {
1314
model: K8sKind;
1415
resource: K8sResourceKind;
15-
close?: () => void;
1616
} & ModalComponentProps;
1717

1818
const rlValidationSchema = (t: TFunction) =>
@@ -60,6 +60,14 @@ const ResourceLimitsModalLauncher: FC<ResourceLimitsModalLauncherProps> = (props
6060
);
6161
};
6262

63-
export const resourceLimitsModal = createModalLauncher(
64-
(props: ResourceLimitsModalLauncherProps) => <ResourceLimitsModalLauncher {...props} />,
63+
export const ResourceLimitsModalOverlay: OverlayComponent<ResourceLimitsModalLauncherProps> = (
64+
props,
65+
) => (
66+
<ModalWrapper blocking onClose={props.closeOverlay}>
67+
<ResourceLimitsModalLauncher
68+
{...props}
69+
close={props.closeOverlay}
70+
cancel={props.closeOverlay}
71+
/>
72+
</ModalWrapper>
6573
);
Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,10 @@
1-
export const resourceLimitsModal = (props) =>
2-
import(
3-
'./ResourceLimitsModalLauncher' /* webpackChunkName: "resource-limits-modal" */
4-
).then((m) => m.resourceLimitsModal(props));
1+
import { lazy } from 'react';
2+
3+
// Lazy-loaded OverlayComponent for Resource Limits Modal
4+
export const LazyResourceLimitsModalOverlay = lazy(() =>
5+
import('./ResourceLimitsModalLauncher' /* webpackChunkName: "resource-limits-modal" */).then(
6+
(m) => ({
7+
default: m.ResourceLimitsModalOverlay,
8+
}),
9+
),
10+
);

frontend/packages/console-app/src/components/nodes/menu-actions.tsx

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { useMemo } from 'react';
22
import { useTranslation } from 'react-i18next';
33
import { useCommonResourceActions } from '@console/app/src/actions//hooks/useCommonResourceActions';
44
import { Action } from '@console/dynamic-plugin-sdk';
5+
import { useOverlay } from '@console/dynamic-plugin-sdk/src/app/modal-support/useOverlay';
56
import { useK8sModel } from '@console/dynamic-plugin-sdk/src/lib-core';
67
import { k8sUpdateResource } from '@console/dynamic-plugin-sdk/src/utils/k8s';
78
import { asAccessReview } from '@console/internal/components/utils/rbac';
@@ -14,7 +15,7 @@ import {
1415
} from '@console/internal/module/k8s';
1516
import { isNodeUnschedulable } from '@console/shared/src/selectors/node';
1617
import { makeNodeSchedulable } from '../../k8s/requests/nodes';
17-
import { createConfigureUnschedulableModal } from './modals';
18+
import { LazyConfigureUnschedulableModalOverlay } from './modals';
1819

1920
const updateCSR = (csr: CertificateSigningRequestKind, type: 'Approved' | 'Denied') => {
2021
const approvedCSR = {
@@ -47,6 +48,7 @@ export const denyCSR = (csr: CertificateSigningRequestKind) => updateCSR(csr, 'D
4748
export const useNodeActions: ExtensionHook<Action[], NodeKind> = (obj) => {
4849
const [kindObj, inFlight] = useK8sModel(referenceFor(obj));
4950
const { t } = useTranslation();
51+
const launchModal = useOverlay();
5052
const deleteMessage = useMemo(
5153
() => (
5254
<p>
@@ -71,14 +73,14 @@ export const useNodeActions: ExtensionHook<Action[], NodeKind> = (obj) => {
7173
actions.push({
7274
id: 'mark-as-unschedulable',
7375
label: t('console-app~Mark as unschedulable'),
74-
cta: () => createConfigureUnschedulableModal({ resource: obj }),
76+
cta: () => launchModal(LazyConfigureUnschedulableModalOverlay, { resource: obj }),
7577
accessReview: asAccessReview(kindObj, obj, 'patch'),
7678
});
7779
}
7880

7981
actions.push(...commonActions);
8082
return actions;
81-
}, [kindObj, obj, t, commonActions]);
83+
}, [kindObj, obj, t, commonActions, launchModal]);
8284

8385
return [nodeActions, !inFlight, undefined];
8486
};

frontend/packages/console-app/src/components/nodes/modals/ConfigureUnschedulableModal.tsx

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
11
import type { FC } from 'react';
22
import { useTranslation } from 'react-i18next';
3+
import { OverlayComponent } from '@console/dynamic-plugin-sdk/src/app/modal-support/OverlayProvider';
34
import {
45
ModalTitle,
56
ModalBody,
67
ModalSubmitFooter,
7-
createModalLauncher,
8+
ModalComponentProps,
9+
ModalWrapper,
810
} from '@console/internal/components/factory/modal';
911
import { NodeKind } from '@console/internal/module/k8s';
1012
import { usePromiseHandler } from '@console/shared/src/hooks/promise-handler';
1113
import { makeNodeUnschedulable } from '../../../k8s/requests/nodes';
1214

1315
type ConfigureUnschedulableModalProps = {
1416
resource: NodeKind;
15-
cancel?: () => void;
16-
close?: () => void;
17-
};
17+
} & ModalComponentProps;
1818

1919
const ConfigureUnschedulableModal: FC<ConfigureUnschedulableModalProps> = ({
2020
resource,
@@ -48,4 +48,14 @@ const ConfigureUnschedulableModal: FC<ConfigureUnschedulableModalProps> = ({
4848
);
4949
};
5050

51-
export default createModalLauncher(ConfigureUnschedulableModal);
51+
export const ConfigureUnschedulableModalOverlay: OverlayComponent<ConfigureUnschedulableModalProps> = (
52+
props,
53+
) => (
54+
<ModalWrapper blocking onClose={props.closeOverlay}>
55+
<ConfigureUnschedulableModal
56+
{...props}
57+
cancel={props.closeOverlay}
58+
close={props.closeOverlay}
59+
/>
60+
</ModalWrapper>
61+
);
Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
1-
import { NodeKind } from '@console/internal/module/k8s';
1+
import { lazy } from 'react';
22

3-
export const createConfigureUnschedulableModal = (props: { resource: NodeKind }) =>
3+
// Lazy-loaded OverlayComponent for Configure Unschedulable Modal
4+
export const LazyConfigureUnschedulableModalOverlay = lazy(() =>
45
import(
56
'./ConfigureUnschedulableModal' /* webpackChunkName: "configure-unschedulable-modal" */
6-
).then((m) => m.default(props));
7+
).then((m) => ({
8+
default: m.ConfigureUnschedulableModalOverlay,
9+
})),
10+
);

frontend/packages/console-app/src/components/pdb/modals/DeletePDBModal.tsx

Lines changed: 7 additions & 2 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, Trans } 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 { k8sKill } from '@console/internal/module/k8s';
@@ -72,7 +73,11 @@ const DeletePDBModal: FC<DeletePDBModalProps> = ({ close, pdb, workloadName }) =
7273
);
7374
};
7475

75-
export const deletePDBModal = createModalLauncher(DeletePDBModal);
76+
export const DeletePDBModalOverlay: OverlayComponent<DeletePDBModalProps> = (props) => (
77+
<ModalWrapper blocking onClose={props.closeOverlay}>
78+
<DeletePDBModal {...props} close={props.closeOverlay} />
79+
</ModalWrapper>
80+
);
7681

7782
export type DeletePDBModalProps = ModalComponentProps & {
7883
pdb: PodDisruptionBudgetKind;
Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1-
import { DeletePDBModalProps } from './DeletePDBModal';
1+
import { lazy } from 'react';
22

3-
export const deletePDBModal = (props: DeletePDBModalProps) =>
4-
import('./DeletePDBModal' /* webpackChunkName: "shared-modals" */).then((m) =>
5-
m.deletePDBModal(props),
6-
);
3+
// Lazy-loaded OverlayComponent for Delete PDB Modal
4+
export const LazyDeletePDBModalOverlay = lazy(() =>
5+
import('./DeletePDBModal' /* webpackChunkName: "delete-pdb-modal" */).then((m) => ({
6+
default: m.DeletePDBModalOverlay,
7+
})),
8+
);

0 commit comments

Comments
 (0)