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() + } + > + + + +