Skip to content

Commit

Permalink
work for #8129 Popup submenu
Browse files Browse the repository at this point in the history
  • Loading branch information
OlgaLarina committed May 8, 2024
1 parent 3eca7cf commit 23996a0
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 45 deletions.
1 change: 0 additions & 1 deletion src/popup-dropdown-view-model.ts
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,6 @@ export class PopupDropdownViewModel extends PopupBaseViewModel {
targetElementRect,
width,
this.model.horizontalPosition,
this.model.verticalPosition,
DomWindowHelper.getInnerWidth()
);
}
Expand Down
9 changes: 4 additions & 5 deletions src/utils/popup.ts
Original file line number Diff line number Diff line change
Expand Up @@ -125,8 +125,8 @@ export class PopupUtils {
): VerticalPosition {
if (verticalPosition === "middle") return verticalPosition;

let deltaTop = height - (targetRect.top + (horizontalPosition === "center" ? targetRect.height : 0));
let deltaBottom = height + targetRect.bottom - (horizontalPosition === "center" ? targetRect.height : 0) - windowHeight;
let deltaTop = height - (targetRect.top + (horizontalPosition !== "center" ? targetRect.height : 0));
let deltaBottom = height + targetRect.bottom - (horizontalPosition !== "center" ? targetRect.height : 0) - windowHeight;
if (deltaTop > 0 && deltaBottom <= 0 && verticalPosition == "top") {
verticalPosition = "bottom";
} else if (deltaBottom > 0 && deltaTop <= 0 && verticalPosition == "bottom") {
Expand All @@ -141,13 +141,12 @@ export class PopupUtils {
targetRect: ClientRect,
width: number,
horizontalPosition: HorizontalPosition,
verticalPosition: VerticalPosition,
windowWidth: number
): HorizontalPosition {
if (horizontalPosition === "center") return horizontalPosition;

let deltaLeft = width - (targetRect.left + (verticalPosition === "middle" ? targetRect.width : 0));
let deltaRight = width + targetRect.right - (verticalPosition === "middle" ? targetRect.width : 0) - windowWidth;
let deltaLeft = width - targetRect.left;
let deltaRight = width + targetRect.right - windowWidth;
if (deltaLeft > 0 && deltaRight <= 0 && horizontalPosition == "left") {
horizontalPosition = "right";
} else if (deltaRight > 0 && deltaLeft <= 0 && horizontalPosition == "right") {
Expand Down
59 changes: 20 additions & 39 deletions tests/components/popuptests.ts
Original file line number Diff line number Diff line change
Expand Up @@ -760,7 +760,7 @@ QUnit.test("Check calculatePosition with window size method", (assert) => {
let verticalPosition = PopupUtils.updateVerticalPosition(
targetRect,
100,
"left",
"center",
"bottom",
windowHeight
);
Expand All @@ -774,7 +774,7 @@ QUnit.test("Check calculatePosition with window size method", (assert) => {
verticalPosition = PopupUtils.updateVerticalPosition(
targetRect,
100,
"left",
"center",
"top",
windowHeight
);
Expand All @@ -788,7 +788,7 @@ QUnit.test("Check calculatePosition with window size method", (assert) => {
verticalPosition = PopupUtils.updateVerticalPosition(
targetRect,
300,
"left",
"center",
"top",
windowHeight
);
Expand All @@ -802,7 +802,7 @@ QUnit.test("Check calculatePosition with window size method", (assert) => {
verticalPosition = PopupUtils.updateVerticalPosition(
targetRect,
300,
"left",
"center",
"top",
windowHeight
);
Expand All @@ -816,7 +816,7 @@ QUnit.test("Check calculatePosition with window size method", (assert) => {
verticalPosition = PopupUtils.updateVerticalPosition(
targetRect,
60,
"center",
"left",
"top",
windowHeight
);
Expand All @@ -828,7 +828,7 @@ QUnit.test("Check calculatePosition with window size method", (assert) => {
verticalPosition = PopupUtils.updateVerticalPosition(
targetRect,
100,
"center",
"left",
"top",
windowHeight
);
Expand All @@ -843,7 +843,7 @@ QUnit.test("Check calculatePosition with window size method", (assert) => {
verticalPosition = PopupUtils.updateVerticalPosition(
targetRect,
40,
"center",
"left",
"bottom",
windowHeight
);
Expand All @@ -855,7 +855,7 @@ QUnit.test("Check calculatePosition with window size method", (assert) => {
verticalPosition = PopupUtils.updateVerticalPosition(
targetRect,
100,
"center",
"left",
"bottom",
windowHeight
);
Expand All @@ -869,7 +869,7 @@ QUnit.test("Check calculatePosition with window size method", (assert) => {
verticalPosition = PopupUtils.updateVerticalPosition(
targetRect,
300,
"center",
"left",
"top",
windowHeight
);
Expand All @@ -883,7 +883,7 @@ QUnit.test("Check calculatePosition with window size method", (assert) => {
verticalPosition = PopupUtils.updateVerticalPosition(
targetRect,
300,
"center",
"left",
"top",
windowHeight
);
Expand All @@ -904,48 +904,29 @@ QUnit.test("Check calculatePosition with window size method", (assert) => {
right: 270,
};
let windowWidth = 300;
let horizontalPosition = PopupUtils.updateHorizontalPosition(targetRect, 100, "right", "top", windowWidth);
let horizontalPosition = PopupUtils.updateHorizontalPosition(targetRect, 100, "right", windowWidth);
assert.deepEqual(horizontalPosition, "left", "horizontal position is changed to top cause doesn't fit in right");

horizontalPosition = PopupUtils.updateHorizontalPosition(targetRect, 25, "right", windowWidth);
assert.deepEqual(horizontalPosition, "right", "right horizontal position is not changed");

targetRect.left = 50;
targetRect.right = 70;
horizontalPosition = PopupUtils.updateHorizontalPosition(targetRect, 100, "left", "top", windowWidth);
horizontalPosition = PopupUtils.updateHorizontalPosition(targetRect, 100, "left", windowWidth);
assert.deepEqual(horizontalPosition, "right", "horizontal position is changed to bottom cause doesn't fit in left");

horizontalPosition = PopupUtils.updateHorizontalPosition(targetRect, 40, "left", windowWidth);
assert.deepEqual(horizontalPosition, "left", "left horizontal position is not changed");

targetRect.left = 200;
targetRect.right = 220;
horizontalPosition = PopupUtils.updateHorizontalPosition(targetRect, 300, "left", "top", windowWidth);
horizontalPosition = PopupUtils.updateHorizontalPosition(targetRect, 300, "left", windowWidth);
assert.deepEqual(horizontalPosition, "left", "both directions do not fit: result left");

targetRect.left = 100;
targetRect.right = 120;
horizontalPosition = PopupUtils.updateHorizontalPosition(targetRect, 300, "left", "top", windowWidth);
horizontalPosition = PopupUtils.updateHorizontalPosition(targetRect, 300, "left", windowWidth);
assert.deepEqual(horizontalPosition, "right", "both directions do not fit: result right");

targetRect.left = 50;
targetRect.right = 70;
horizontalPosition = PopupUtils.updateHorizontalPosition(targetRect, 60, "left", "middle", windowWidth);
assert.deepEqual(horizontalPosition, "left", "with pointer: left horizontal position is not changed");

horizontalPosition = PopupUtils.updateHorizontalPosition(targetRect, 100, "left", "middle", windowWidth);
assert.deepEqual(horizontalPosition, "right", "with pointer: left horizontal position is changed to right");

targetRect.left = 250;
targetRect.right = 270;
horizontalPosition = PopupUtils.updateHorizontalPosition(targetRect, 40, "right", "middle", windowWidth);
assert.deepEqual(horizontalPosition, "right", "with pointer: right horizontal position is not changed");
horizontalPosition = PopupUtils.updateHorizontalPosition(targetRect, 100, "right", "middle", windowWidth);
assert.deepEqual(horizontalPosition, "left", "with pointer: right horizontal position is changed to left");

targetRect.left = 200;
targetRect.right = 220;
horizontalPosition = PopupUtils.updateHorizontalPosition(targetRect, 300, "left", "middle", windowWidth);
assert.deepEqual(horizontalPosition, "left", "with pointer: both directions do not fit: result left");

targetRect.left = 100;
targetRect.right = 120;
horizontalPosition = PopupUtils.updateHorizontalPosition(targetRect, 300, "left", "middle", windowWidth);
assert.deepEqual(horizontalPosition, "right", "with pointer: both directions do not fit: result right");
});

QUnit.test("Check getCorrectedVerticalDimensions if both directions do not fit", (assert) => {
Expand Down

0 comments on commit 23996a0

Please sign in to comment.