adds instance group warnings

This commit is contained in:
Alex Corey
2021-03-18 09:52:37 -04:00
parent 652e7a500b
commit 06ce1c2a92
6 changed files with 56 additions and 5 deletions

View File

@@ -258,6 +258,7 @@ function ToolbarDeleteButton({
onClose={() => toggleModal(false)} onClose={() => toggleModal(false)}
actions={[ actions={[
<Button <Button
ouiaId="delete-modal-confirm"
key="delete" key="delete"
variant="danger" variant="danger"
aria-label={i18n._(t`confirm delete`)} aria-label={i18n._(t`confirm delete`)}

View File

@@ -16,6 +16,7 @@ import {
import useRequest, { useDismissableError } from '../../../util/useRequest'; import useRequest, { useDismissableError } from '../../../util/useRequest';
import { jsonToYaml, isJsonString } from '../../../util/yaml'; import { jsonToYaml, isJsonString } from '../../../util/yaml';
import { InstanceGroupsAPI } from '../../../api'; import { InstanceGroupsAPI } from '../../../api';
import { relatedResourceDeleteRequests } from '../../../util/getRelatedResourceDeleteDetails';
function ContainerGroupDetails({ instanceGroup, i18n }) { function ContainerGroupDetails({ instanceGroup, i18n }) {
const { id, name } = instanceGroup; const { id, name } = instanceGroup;
@@ -34,7 +35,10 @@ function ContainerGroupDetails({ instanceGroup, i18n }) {
); );
const { error, dismissError } = useDismissableError(deleteError); const { error, dismissError } = useDismissableError(deleteError);
const deleteDetailsRequests = relatedResourceDeleteRequests.instanceGroup(
instanceGroup,
i18n
);
return ( return (
<CardBody> <CardBody>
<DetailList> <DetailList>
@@ -101,6 +105,10 @@ function ContainerGroupDetails({ instanceGroup, i18n }) {
modalTitle={i18n._(t`Delete instance group`)} modalTitle={i18n._(t`Delete instance group`)}
onConfirm={deleteInstanceGroup} onConfirm={deleteInstanceGroup}
isDisabled={isLoading} isDisabled={isLoading}
deleteDetailsRequests={deleteDetailsRequests}
deleteMessage={i18n._(
t`This container group is currently being by other resources. Are you sure you want to delete it?`
)}
> >
{i18n._(t`Delete`)} {i18n._(t`Delete`)}
</DeleteButton> </DeleteButton>

View File

@@ -16,6 +16,7 @@ import {
} from '../../../components/DetailList'; } from '../../../components/DetailList';
import useRequest, { useDismissableError } from '../../../util/useRequest'; import useRequest, { useDismissableError } from '../../../util/useRequest';
import { InstanceGroupsAPI } from '../../../api'; import { InstanceGroupsAPI } from '../../../api';
import { relatedResourceDeleteRequests } from '../../../util/getRelatedResourceDeleteDetails';
const Unavailable = styled.span` const Unavailable = styled.span`
color: var(--pf-global--danger-color--200); color: var(--pf-global--danger-color--200);
@@ -38,7 +39,10 @@ function InstanceGroupDetails({ instanceGroup, i18n }) {
); );
const { error, dismissError } = useDismissableError(deleteError); const { error, dismissError } = useDismissableError(deleteError);
const deleteDetailsRequests = relatedResourceDeleteRequests.instanceGroup(
instanceGroup,
i18n
);
const verifyInstanceGroup = item => { const verifyInstanceGroup = item => {
if (item.is_isolated) { if (item.is_isolated) {
return ( return (
@@ -142,6 +146,10 @@ function InstanceGroupDetails({ instanceGroup, i18n }) {
modalTitle={i18n._(t`Delete instance group`)} modalTitle={i18n._(t`Delete instance group`)}
onConfirm={deleteInstanceGroup} onConfirm={deleteInstanceGroup}
isDisabled={isLoading} isDisabled={isLoading}
deleteDetailsRequests={deleteDetailsRequests}
deleteMessage={i18n._(
t`This instance group is currently being by other resources. Are you sure you want to delete it?`
)}
> >
{i18n._(t`Delete`)} {i18n._(t`Delete`)}
</DeleteButton> </DeleteButton>

View File

@@ -17,7 +17,7 @@ import ErrorDetail from '../../../components/ErrorDetail';
import AlertModal from '../../../components/AlertModal'; import AlertModal from '../../../components/AlertModal';
import DatalistToolbar from '../../../components/DataListToolbar'; import DatalistToolbar from '../../../components/DataListToolbar';
import AddDropDownButton from '../../../components/AddDropDownButton'; import AddDropDownButton from '../../../components/AddDropDownButton';
import { relatedResourceDeleteRequests } from '../../../util/getRelatedResourceDeleteDetails';
import InstanceGroupListItem from './InstanceGroupListItem'; import InstanceGroupListItem from './InstanceGroupListItem';
const QS_CONFIG = getQSConfig('instance-group', { const QS_CONFIG = getQSConfig('instance-group', {
@@ -186,7 +186,10 @@ function InstanceGroupList({ i18n }) {
? `${match.url}/container_group/${item.id}/details` ? `${match.url}/container_group/${item.id}/details`
: `${match.url}/${item.id}/details`; : `${match.url}/${item.id}/details`;
}; };
const deleteDetailsRequests = relatedResourceDeleteRequests.instanceGroup(
selected[0],
i18n
);
return ( return (
<> <>
<PageSection> <PageSection>
@@ -218,6 +221,11 @@ function InstanceGroupList({ i18n }) {
itemsToDelete={modifiedSelected} itemsToDelete={modifiedSelected}
pluralizedItemName={i18n._(t`Instance Groups`)} pluralizedItemName={i18n._(t`Instance Groups`)}
errorMessage={errorMessageDelete} errorMessage={errorMessageDelete}
deleteDetailsRequests={deleteDetailsRequests}
deleteMessage={i18n._(
'{numItemsToDelete, plural, one {This instance group is currently being by other resources. Are you sure you want to delete it?} other {Deleting these instance groups could impact other resources that rely on them. Are you sure you want to delete anyway?}}',
{ numItemsToDelete: selected.length }
)}
/>, />,
]} ]}
/> />

View File

@@ -6,10 +6,18 @@ import {
waitForElement, waitForElement,
} from '../../../../testUtils/enzymeHelpers'; } from '../../../../testUtils/enzymeHelpers';
import { InstanceGroupsAPI } from '../../../api'; import {
InstanceGroupsAPI,
OrganizationsAPI,
InventoriesAPI,
UnifiedJobTemplatesAPI,
} from '../../../api';
import InstanceGroupList from './InstanceGroupList'; import InstanceGroupList from './InstanceGroupList';
jest.mock('../../../api/models/InstanceGroups'); jest.mock('../../../api/models/InstanceGroups');
jest.mock('../../../api/models/Organizations');
jest.mock('../../../api/models/Inventories');
jest.mock('../../../api/models/UnifiedJobTemplates');
const instanceGroups = { const instanceGroups = {
data: { data: {
@@ -44,6 +52,9 @@ const instanceGroups = {
}; };
const options = { data: { actions: { POST: true } } }; const options = { data: { actions: { POST: true } } };
OrganizationsAPI.read.mockResolvedValue({ data: { count: 0 } });
InventoriesAPI.read.mockResolvedValue({ data: { count: 0 } });
UnifiedJobTemplatesAPI.read.mockResolvedValue({ data: { count: 0 } });
describe('<InstanceGroupList />', () => { describe('<InstanceGroupList />', () => {
let wrapper; let wrapper;

View File

@@ -283,4 +283,19 @@ export const relatedResourceDeleteRequests = {
label: [i18n._(t`Workflow Job Template Nodes`)], label: [i18n._(t`Workflow Job Template Nodes`)],
}, },
], ],
instanceGroup: (selected, i18n) => [
{
request: () => OrganizationsAPI.read({ instance_groups: selected.id }),
label: i18n._(t`Organizations`),
},
{
request: () => InventoriesAPI.read({ instance_groups: selected.id }),
label: i18n._(t`Inventories`),
},
{
request: () =>
UnifiedJobTemplatesAPI.read({ instance_groups: selected.id }),
label: i18n._(t`Templates`),
},
],
}; };