Skip to content

Commit 4a52cd3

Browse files
authored
fix: TestRunDetails. Fix creating ignored areas for scaled imaged (#304)
1 parent a373f86 commit 4a52cd3

File tree

3 files changed

+33
-12
lines changed

3 files changed

+33
-12
lines changed

src/components/DrawArea.tsx

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { FunctionComponent } from "react";
1+
import React, { FunctionComponent, useEffect } from "react";
22
import { Stage, Layer, Image } from "react-konva";
33
import Rectangle, { MIN_RECT_SIDE_PIXEL } from "./Rectangle";
44
import { IgnoreArea } from "../types/ignoreArea";
@@ -47,6 +47,10 @@ interface IDrawArea {
4747
{ x: number; y: number },
4848
React.Dispatch<React.SetStateAction<{ x: number; y: number }>>
4949
];
50+
stageScrollPosState: [
51+
{ x: number; y: number },
52+
React.Dispatch<React.SetStateAction<{ x: number; y: number }>>
53+
];
5054
stageScaleState: [number, React.Dispatch<React.SetStateAction<number>>];
5155
drawModeState: [boolean, React.Dispatch<React.SetStateAction<boolean>>];
5256
}
@@ -65,26 +69,34 @@ export const DrawArea: FunctionComponent<IDrawArea> = ({
6569
stageOffsetState,
6670
stageInitPosState,
6771
stagePosState,
72+
stageScrollPosState,
6873
drawModeState,
6974
}) => {
7075
const classes = useStyles();
7176
const [stageInitPos, setStageInitPos] = stageInitPosState;
7277
const [stageOffset, setStageOffset] = stageOffsetState;
7378
const [stagePos, setStagePos] = stagePosState;
79+
const [stageScollPos, setStageScrollPos] = stageScrollPosState;
7480
const [stageScale, setStageScale] = stageScaleState;
7581
const [isDrag, setIsDrag] = React.useState(false);
7682

7783
const [isDrawMode, setIsDrawMode] = drawModeState;
7884
const [isDrawing, setIsDrawing] = React.useState(isDrawMode);
7985
const [image, imageStatus] = imageState;
8086

87+
const scrollContainerRef = React.useRef<HTMLDivElement>(null);
88+
89+
useEffect(() => {
90+
scrollContainerRef.current?.scrollTo(stageScollPos.x, stageScollPos.y);
91+
}, [stageScollPos]);
92+
8193
const handleContentMousedown = (e: any) => {
8294
if (!isDrawMode) return;
8395

8496
const newArea: IgnoreArea = {
8597
id: Date.now().toString(),
86-
x: Math.round((e.evt.layerX - stageOffset.x) / stageScale),
87-
y: Math.round((e.evt.layerY - stageOffset.y) / stageScale),
98+
x: e.evt.offsetX,
99+
y: e.evt.offsetY,
88100
width: MIN_RECT_SIDE_PIXEL,
89101
height: MIN_RECT_SIDE_PIXEL,
90102
};
@@ -105,14 +117,11 @@ export const DrawArea: FunctionComponent<IDrawArea> = ({
105117

106118
if (isDrawing) {
107119
// update the current rectangle's width and height based on the mouse position + stage scale
108-
const mouseX = (e.evt.layerX - stageOffset.x) / stageScale;
109-
const mouseY = (e.evt.layerY - stageOffset.y) / stageScale;
110-
111120
const newShapesList = ignoreAreas.map((i) => {
112121
if (i.id === selectedRectId) {
113122
// new width and height
114-
i.width = Math.max(Math.round(mouseX - i.x), MIN_RECT_SIDE_PIXEL);
115-
i.height = Math.max(Math.round(mouseY - i.y), MIN_RECT_SIDE_PIXEL);
123+
i.width = Math.max(Math.round(e.evt.offsetX - i.x), MIN_RECT_SIDE_PIXEL);
124+
i.height = Math.max(Math.round(e.evt.offsetY - i.y), MIN_RECT_SIDE_PIXEL);
116125
return i;
117126
}
118127
return i;
@@ -138,7 +147,15 @@ export const DrawArea: FunctionComponent<IDrawArea> = ({
138147
)}
139148
{(!imageName || imageStatus === "failed") && <NoImagePlaceholder />}
140149
{imageName && imageStatus === "loaded" && (
141-
<div className={classes.canvasContainer}>
150+
<div className={classes.canvasContainer}
151+
ref={scrollContainerRef}
152+
onScroll={(event) => {
153+
setStageScrollPos({
154+
x: (event.target as HTMLElement).scrollLeft,
155+
y:(event.target as HTMLElement).scrollTop
156+
});
157+
}}
158+
>
142159
<div className={classes.imageDetailsContainer}>
143160
<ImageDetails
144161
type={type}
@@ -187,7 +204,7 @@ export const DrawArea: FunctionComponent<IDrawArea> = ({
187204
e.evt.preventDefault();
188205
const scaleBy = 1.04;
189206
const newScale =
190-
e.evt.deltaY > 0
207+
e.evt.deltaY < 0
191208
? stageScale * scaleBy
192209
: stageScale / scaleBy;
193210
setStageScale(newScale);

src/components/TestDetailsDialog/TestDetailsModal.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ const TestDetailsModal: React.FunctionComponent<{
7777
const stageScaleBy = 1.2;
7878
const [stageScale, setStageScale] = React.useState(1);
7979
const [stagePos, setStagePos] = React.useState(defaultStagePos);
80+
const [stageScrollPos, setStageScrollPos] = React.useState(defaultStagePos);
8081
const [stageInitPos, setStageInitPos] = React.useState(defaultStagePos);
8182
const [stageOffset, setStageOffset] = React.useState(defaultStagePos);
8283
const [processing, setProcessing] = React.useState(false);
@@ -431,7 +432,7 @@ const TestDetailsModal: React.FunctionComponent<{
431432
<Box
432433
overflow="hidden"
433434
minHeight="65%"
434-
className={classes.drawAreaContainer}
435+
className={classes.drawAreaContainer}
435436
>
436437
<Grid container style={{ height: "100%" }}>
437438
<Grid item xs={6} className={classes.drawAreaItem}>
@@ -448,6 +449,7 @@ const TestDetailsModal: React.FunctionComponent<{
448449
onStageClick={removeSelection}
449450
stageScaleState={[stageScale, setStageScale]}
450451
stagePosState={[stagePos, setStagePos]}
452+
stageScrollPosState={[stageScrollPos, setStageScrollPos]}
451453
stageInitPosState={[stageInitPos, setStageInitPos]}
452454
stageOffsetState={[stageOffset, setStageOffset]}
453455
drawModeState={[false, setIsDrawMode]}
@@ -468,6 +470,7 @@ const TestDetailsModal: React.FunctionComponent<{
468470
onStageClick={removeSelection}
469471
stageScaleState={[stageScale, setStageScale]}
470472
stagePosState={[stagePos, setStagePos]}
473+
stageScrollPosState={[stageScrollPos, setStageScrollPos]}
471474
stageInitPosState={[stageInitPos, setStageInitPos]}
472475
stageOffsetState={[stageOffset, setStageOffset]}
473476
drawModeState={[isDrawMode, setIsDrawMode]}
@@ -486,6 +489,7 @@ const TestDetailsModal: React.FunctionComponent<{
486489
onStageClick={removeSelection}
487490
stageScaleState={[stageScale, setStageScale]}
488491
stagePosState={[stagePos, setStagePos]}
492+
stageScrollPosState={[stageScrollPos, setStageScrollPos]}
489493
stageInitPosState={[stageInitPos, setStageInitPos]}
490494
stageOffsetState={[stageOffset, setStageOffset]}
491495
drawModeState={[isDrawMode, setIsDrawMode]}

src/components/TestRunList/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ const TestRunList: React.FunctionComponent = () => {
139139
rows={testRuns}
140140
columns={columnsDef}
141141
pageSize={pageSize}
142-
rowsPerPageOptions={[10, 20, 30]}
142+
rowsPerPageOptions={[10, 30, 100]}
143143
onPageSizeChange={(newPageSize) => setPageSize(newPageSize)}
144144
pagination
145145
loading={loading}

0 commit comments

Comments
 (0)