Add alert for org. delete.

This commit is contained in:
Alex Corey
2019-03-25 11:30:40 -04:00
parent cc0fd6beb6
commit de55ec1688
5 changed files with 178 additions and 28 deletions

View File

@@ -282,6 +282,13 @@
.orgListAlert-actionBtn{
margin:0 10px;
}
.orgListDetete-progressBar{
padding-right: 32px;
}
.orgListDelete-progressBar-noShow{
display: none;
padding-right: 32px;
}
.awx-c-form-action-group {
float: right;

View File

@@ -4,11 +4,7 @@ import { Trans, t } from '@lingui/macro';
import {
Badge,
Checkbox,
Button,
} from '@patternfly/react-core';
import {
TrashAltIcon,
} from '@patternfly/react-icons';
import {
Link
} from 'react-router-dom';

View File

@@ -16,8 +16,11 @@ import {
PageSection,
PageSectionVariants,
Title,
Button
Button,
Progress,
ProgressVariant
} from '@patternfly/react-core';
import { CubesIcon } from '@patternfly/react-icons';
import DataListToolbar from '../../../components/DataListToolbar';
import OrganizationListItem from '../components/OrganizationListItem';
@@ -57,7 +60,10 @@ class OrganizationsList extends Component {
results: [],
selected: [],
isModalOpen: false,
orgsToDelete: []
orgsToDelete: [],
orgsDeleted: [],
deleteSuccess: false,
};
this.onSearch = this.onSearch.bind(this);
@@ -137,7 +143,12 @@ class OrganizationsList extends Component {
}
handleClearOrgsToDelete () {
this.setState(({ isModalOpen }) => ({ isModalOpen: !isModalOpen, orgsToDelete: [] }));
this.setState({
isModalOpen: false,
orgsDeleted: [],
deleteSuccess: false,
orgsToDelete: []
});
this.onSelectAll();
}
@@ -163,20 +174,24 @@ class OrganizationsList extends Component {
}
async handleOrgDelete (event) {
const { orgsToDelete } = this.state;
const { orgsToDelete, orgsDeleted } = this.state;
const { api } = this.props;
try {
const deleteOrgsApiCalls = [];
this.setState({ deleteStarted: true });
orgsToDelete.forEach((org) => {
deleteOrgsApiCalls.push(api.destroyOrganization(org.id));
});
await Promise.all(deleteOrgsApiCalls);
} finally {
this.handleClearOrgsToDelete();
const queryParams = this.getQueryParams();
this.fetchOrganizations(queryParams);
}
orgsToDelete.forEach(async (org) => {
try {
const res = await api.destroyOrganization(org.id);
this.setState({
orgsDeleted: orgsDeleted.concat(res)
});
} catch {
this.setState({ deleteSuccess: false });
} finally {
this.setState({ deleteSuccess: true });
const queryParams = this.getQueryParams();
this.fetchOrganizations(queryParams);
}
});
event.preventDefault();
}
@@ -245,9 +260,12 @@ class OrganizationsList extends Component {
const {
count,
error,
deleteSuccess,
deleteStarted,
loading,
noInitialResults,
orgsToDelete,
orgsDeleted,
page,
pageCount,
page_size,
@@ -266,7 +284,6 @@ class OrganizationsList extends Component {
{ isModalOpen && (
<Modal
className="orgListAlert"
width="50%"
title={warningTitle}
isOpen={isModalOpen}
style={{ width: '1000px' }}
@@ -276,16 +293,30 @@ class OrganizationsList extends Component {
{warningMsg}
<br />
{orgsToDelete.map((org) => (
<strong key={org.id}>
{org.name}
<span key={org.id}>
<strong>
{org.name}
</strong>
<br />
</strong>
</span>
))}
<div className={deleteStarted ? 'orgListDetete-progressBar' : 'orgListDelete-progressBar-noShow'}>
<Progress
value={deleteSuccess ? 100 : 67}
variant={deleteStarted ? ProgressVariant.success : ProgressVariant.danger}
/>
</div>
<br />
<span className="awx-c-form-action-group">
<Button className="orgListAlert-actionBtn" keys="cancel" variant="secondary" aria-label="cancel-delete" onClick={this.handleClearOrgsToDelete}>Cancel</Button>
<Button className="orgListAlert-actionBtn" keys="cancel" variant="danger" aria-label="confirm-delete" onClick={this.handleOrgDelete}>Delete</Button>
</span>
<div className="awx-c-form-action-group">
{orgsDeleted.length
? <Button className="orgListAlert-actionBtn" keys="cancel" variant="primary" aria-label="close-delete" onClick={this.handleClearOrgsToDelete}>Close</Button>
: (
<span>
<Button className="orgListAlert-actionBtn" keys="cancel" variant="secondary" aria-label="cancel-delete" onClick={this.handleClearOrgsToDelete}>Cancel</Button>
<Button className="orgListAlert-actionBtn" keys="cancel" variant="danger" aria-label="confirm-delete" onClick={this.handleOrgDelete}>Delete</Button>
</span>
)}
</div>
</Modal>
)}
{noInitialResults && (