diff --git a/src/components/TestDetailsModal.tsx b/src/components/TestDetailsModal.tsx
index 8631ab59..c6dced5b 100644
--- a/src/components/TestDetailsModal.tsx
+++ b/src/components/TestDetailsModal.tsx
@@ -25,7 +25,7 @@ import { TestStatus } from "../types/testStatus";
import { useHistory, Prompt } from "react-router-dom";
import { IgnoreArea } from "../types/ignoreArea";
import { KonvaEventObject } from "konva/types/Node";
-import { Close, Add, Delete, Save, WarningRounded } from "@material-ui/icons";
+import { Close, Add, Delete, Save, WarningRounded, LayersClear } from "@material-ui/icons";
import { TestRunDetails } from "./TestRunDetails";
import useImage from "use-image";
import { routes } from "../constants";
@@ -330,7 +330,7 @@ const TestDetailsModal: React.FunctionComponent<{
selectedRectId && deleteIgnoreArea(selectedRectId)
}
@@ -338,6 +338,18 @@ const TestDetailsModal: React.FunctionComponent<{
+
+
+
+ setIgnoreAreas([])
+ }
+ >
+
+
+
+
= (
props: BaseComponentProps
@@ -14,9 +15,12 @@ export const BulkOperation: React.FunctionComponent = (
const [approveDialogOpen, setApproveDialogOpen] = React.useState(false);
const [rejectDialogOpen, setRejectDialogOpen] = React.useState(false);
const [deleteDialogOpen, setDeleteDialogOpen] = React.useState(false);
+ const [clearIgnoreDialogOpen, setClearIgnoreDialogOpen] = React.useState(false);
+ const [isProcessing, setIsProcessing] = React.useState(false);
- const rows: Record = props.state.selection;
- const count = Object.keys(rows).length;
+ const allRows: InternalRowsState = props.state.rows;
+ const selectedRows: Record = props.state.selection;
+ const count = Object.keys(selectedRows).length;
const toggleApproveDialogOpen = () => {
setApproveDialogOpen(!approveDialogOpen);
@@ -27,21 +31,30 @@ export const BulkOperation: React.FunctionComponent = (
const toggleDeleteDialogOpen = () => {
setDeleteDialogOpen(!deleteDialogOpen);
};
+ const toggleClearIgnoreDialogOpen = () => {
+ setClearIgnoreDialogOpen(!clearIgnoreDialogOpen);
+ };
const getTitle = () => {
+ if (clearIgnoreDialogOpen) {
+ return "Clear Ignore Area For Selected Items";
+ }
return submitButtonText() + " Test Runs";
};
const submitButtonText = (): string => {
- if (deleteDialogOpen) {
- return "Delete";
- }
if (approveDialogOpen) {
return "Approve";
}
if (rejectDialogOpen) {
return "Reject";
}
+ if (deleteDialogOpen) {
+ return "Delete";
+ }
+ if (clearIgnoreDialogOpen) {
+ return "Clear";
+ }
return "";
};
@@ -55,6 +68,9 @@ export const BulkOperation: React.FunctionComponent = (
if (rejectDialogOpen) {
return toggleRejectDialogOpen();
}
+ if (clearIgnoreDialogOpen) {
+ return toggleClearIgnoreDialogOpen();
+ }
};
const isRowEligibleForApproveOrReject = (id: string) => {
@@ -72,6 +88,9 @@ export const BulkOperation: React.FunctionComponent = (
if (isRowEligibleForApproveOrReject(id)) {
processApproveReject(id);
}
+ if (clearIgnoreDialogOpen) {
+ testRunService.setIgnoreAreas(id, []);
+ }
};
const processApproveReject = (id: string) => {
@@ -90,6 +109,9 @@ export const BulkOperation: React.FunctionComponent = (
if (approveDialogOpen) {
return toggleApproveDialogOpen();
}
+ if (clearIgnoreDialogOpen) {
+ return toggleClearIgnoreDialogOpen();
+ }
return toggleRejectDialogOpen();
};
@@ -116,27 +138,37 @@ export const BulkOperation: React.FunctionComponent = (
+
+
+
+
+
+
+
{`Are you sure you want to ${submitButtonText().toLowerCase()} ${count} items?`}
+
+ {`Are you sure you want to ${submitButtonText().toLowerCase()} ${count} items?`}
+
}
onSubmit={() => {
- enqueueSnackbar(
- "Wait for the confirmation message until operation is completed.",
- {
- variant: "info",
- }
- );
-
+ setIsProcessing(true);
Promise.all(
- Object.keys(rows).map((id: string) => processAction(id))
+ Object.keys(selectedRows).map((id: string) => processAction(id))
)
.then(() => {
+ setIsProcessing(false);
enqueueSnackbar(`${count} test runs processed.`, {
variant: "success",
});
@@ -149,6 +181,7 @@ export const BulkOperation: React.FunctionComponent = (
closeModal();
}}
/>
+ { isProcessing && }
>
);
};