diff --git a/src/components/TestDetailsModal.tsx b/src/components/TestDetailsModal.tsx
index 2b88a6aa..3cc2a2ec 100644
--- a/src/components/TestDetailsModal.tsx
+++ b/src/components/TestDetailsModal.tsx
@@ -12,14 +12,18 @@ import {
Tooltip,
Select,
MenuItem,
+ LinearProgress,
} from "@material-ui/core";
import { ToggleButton } from "@material-ui/lab";
import { useHotkeys } from "react-hotkeys-hook";
import { TestRun } from "../types";
-import { testRunService, staticService } from "../services";
+import {
+ testRunService,
+ staticService,
+} from "../services";
import { TestStatus } from "../types/testStatus";
import { useHistory, Prompt } from "react-router-dom";
-import { IgnoreArea } from "../types/ignoreArea";
+import { IgnoreArea, UpdateIgnoreAreaDto } from "../types/ignoreArea";
import { KonvaEventObject } from "konva/types/Node";
import {
Close,
@@ -28,6 +32,7 @@ import {
Save,
WarningRounded,
LayersClear,
+ Collections,
} from "@material-ui/icons";
import { TestRunDetails } from "./TestRunDetails";
import useImage from "use-image";
@@ -72,6 +77,7 @@ const TestDetailsModal: React.FunctionComponent<{
const [stagePos, setStagePos] = React.useState(defaultStagePos);
const [stageInitPos, setStageInitPos] = React.useState(defaultStagePos);
const [stageOffset, setStageOffset] = React.useState(defaultStagePos);
+ const [processing, setProcessing] = React.useState(false);
const [image, imageStatus] = useImage(
staticService.getImage(testRun.imageName)
@@ -167,9 +173,9 @@ const TestDetailsModal: React.FunctionComponent<{
const fitStageToScreen = () => {
const scale = image
? Math.min(
- stageWidth < image.width ? stageWidth / image.width : 1,
- stageHeigth < image.height ? stageHeigth / image.height : 1
- )
+ stageWidth < image.width ? stageWidth / image.width : 1,
+ stageHeigth < image.height ? stageHeigth / image.height : 1
+ )
: 1;
setStageScale(scale);
resetPositioin();
@@ -180,6 +186,30 @@ const TestDetailsModal: React.FunctionComponent<{
setStageOffset(defaultStagePos);
};
+ const applyIgnoreArea = () => {
+ let newIgnoreArea = ignoreAreas.find((area) => selectedRectId! === area.id);
+ if (newIgnoreArea) {
+ setProcessing(true);
+ testRunService.getList(testRun.buildId).then(
+ (testRuns: TestRun[]) => {
+ let allIds = testRuns.map((item) => item.id);
+ let data: UpdateIgnoreAreaDto = { ids: allIds, ignoreAreas: [newIgnoreArea!] };
+ testRunService.addIgnoreAreas(data).then(() => {
+ setProcessing(false);
+ setSelectedRectId(undefined);
+ enqueueSnackbar("Ignore areas are updated in all images in this build.", {
+ variant: "success",
+ });
+ });
+ }).catch((error) => {
+ enqueueSnackbar("There was an error : " + error, { variant: "error" });
+ setProcessing(false);
+ });
+ } else {
+ enqueueSnackbar("There was an error determining which ignore area to apply.", { variant: "error" });
+ }
+ };
+
React.useEffect(() => {
setIgnoreAreas(JSON.parse(testRun.ignoreAreas));
}, [testRun]);
@@ -235,10 +265,10 @@ const TestDetailsModal: React.FunctionComponent<{
)}
{(testRun.status === TestStatus.unresolved ||
testRun.status === TestStatus.new) && (
-
-
-
- )}
+
+
+
+ )}
@@ -247,6 +277,7 @@ const TestDetailsModal: React.FunctionComponent<{
+ {(processing) && }
@@ -318,6 +349,18 @@ const TestDetailsModal: React.FunctionComponent<{
+
+
+
+ applyIgnoreArea()
+ }
+ >
+
+
+
+