fix: offset while pasting widget from mouse position in Desktop mode (#19230)

## Description

The canvas used to calculate the mouse position and grid props gets
truncated in Desktop mode because of the size of the browser. So using
drop target to calculate the values whose size does not change.

Fixes #18710


Media



https://user-images.githubusercontent.com/71900764/209565076-e18ee424-bdd4-4410-a82a-d8d06f7cbac9.mp4



## Type of change
- Bug fix (non-breaking change which fixes an issue)

## How Has This Been Tested?
- Manual
Was unable to add cypress test for the same, It does not seem to be
recognising mouse positions while verifying positions

### Test Plan
> Add Testsmith test cases links that relate to this PR

### Issues raised during DP testing
> Link issues raised during DP testing for better visiblity and tracking
(copy link from comments dropped on this PR)


## Checklist:
### Dev activity
- [x] My code follows the style guidelines of this project
- [x] I have performed a self-review of my own code
- [ ] I have commented my code, particularly in hard-to-understand areas
- [ ] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [x] New and existing unit tests pass locally with my changes
- [ ] PR is being merged under a feature flag


### QA activity:
- [ ] Test plan has been approved by relevant developers
- [ ] Test plan has been peer reviewed by QA
- [ ] Cypress test cases have been added and approved by either SDET or
manual QA
- [ ] Organized project review call with relevant stakeholders after
Round 1/2 of QA
- [ ] Added Test Plan Approved label after reveiwing all Cypress test
This commit is contained in:
rahulramesha 2022-12-29 16:37:54 +05:30 committed by GitHub
parent 1de045d9d8
commit 351c5a382d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 15 additions and 16 deletions

View File

@ -1,8 +1,8 @@
export function getStickyCanvasName(widgetId: string) {
export function getSlidingArenaName(widgetId: string) {
return `div-selection-${widgetId}`;
}
export function getSlidingCanvasName(widgetId: string) {
export function getStickyCanvasName(widgetId: string) {
return `canvas-selection-${widgetId}`;
}

View File

@ -23,8 +23,8 @@ import { getIsDraggingForSelection } from "selectors/canvasSelectors";
import { StickyCanvasArena } from "./StickyCanvasArena";
import { getAbsolutePixels } from "utils/helpers";
import {
getSlidingCanvasName,
getStickyCanvasName,
getSlidingArenaName,
} from "constants/componentClassNameConstants";
export interface SelectedArenaDimensions {
@ -482,10 +482,10 @@ export function CanvasSelectionArena({
return shouldShow ? (
<StickyCanvasArena
canExtend={canExtend}
canvasId={getSlidingCanvasName(widgetId)}
canvasId={getStickyCanvasName(widgetId)}
canvasPadding={canvasPadding}
getRelativeScrollingParent={getNearestParentCanvas}
id={getStickyCanvasName(widgetId)}
id={getSlidingArenaName(widgetId)}
ref={canvasRef}
showCanvas={shouldShow}
snapColSpace={snapColumnSpace}

View File

@ -139,7 +139,7 @@ import { WidgetSpace } from "constants/CanvasEditorConstants";
import { reflow } from "reflow";
import { getBottomMostRow } from "reflow/reflowUtils";
import { flashElementsById } from "utils/helpers";
import { getSlidingCanvasName } from "constants/componentClassNameConstants";
import { getSlidingArenaName } from "constants/componentClassNameConstants";
import { builderURL } from "RouteBuilder";
import history from "utils/history";
import { updateMultipleWidgetProperties } from "actions/widgetActions";
@ -1106,9 +1106,7 @@ function* getNewPositionsBasedOnSelectedWidgets(
const containerId = getContainerIdForCanvas(parentId);
const containerWidget = canvasWidgets[containerId];
const canvasDOM = document.querySelector(
`#${getSlidingCanvasName(parentId)}`,
);
const canvasDOM = document.querySelector(`#${getSlidingArenaName(parentId)}`);
if (!canvasDOM || !containerWidget) return {};

View File

@ -44,8 +44,8 @@ import {
} from "reflow/reflowTypes";
import {
getBaseWidgetClassName,
getSlidingCanvasName,
getStickyCanvasName,
getSlidingArenaName,
POSITIONED_WIDGET,
} from "constants/componentClassNameConstants";
import { getContainerWidgetSpacesSelector } from "selectors/editorSelectors";
@ -705,7 +705,7 @@ export function getMousePositions(
//get DOM of the overall canvas including it's total scroll height
const stickyCanvasDOM = document.querySelector(
`#${getStickyCanvasName(canvasId)}`,
`#${getSlidingArenaName(canvasId)}`,
);
if (!stickyCanvasDOM) return;
@ -780,7 +780,7 @@ export function getDefaultCanvas(canvasWidgets: CanvasWidgetsReduxState) {
canvasId: MAIN_CONTAINER_WIDGET_ID,
containerWidget: canvasWidgets[MAIN_CONTAINER_WIDGET_ID],
canvasDOM: document.querySelector(
`#${getSlidingCanvasName(MAIN_CONTAINER_WIDGET_ID)}`,
`#${getSlidingArenaName(MAIN_CONTAINER_WIDGET_ID)}`,
),
};
}
@ -795,7 +795,7 @@ export function getDefaultCanvas(canvasWidgets: CanvasWidgetsReduxState) {
export function getContainerIdForCanvas(canvasId: string) {
if (canvasId === MAIN_CONTAINER_WIDGET_ID) return canvasId;
const selector = `#${getSlidingCanvasName(canvasId)}`;
const selector = `#${getStickyCanvasName(canvasId)}`;
const canvasDOM = document.querySelector(selector);
if (!canvasDOM) return "";
//check for positionedWidget parent
@ -821,11 +821,12 @@ export function getCanvasIdForContainer(layoutWidget: WidgetProps) {
)}`;
const containerDOM = document.querySelector(selector);
if (!containerDOM) return {};
const dropTargetDOM = containerDOM.querySelector(".t--drop-target");
const canvasDOM = containerDOM.getElementsByTagName("canvas");
return {
canvasId: canvasDOM ? canvasDOM[0]?.id.split("-")[2] : undefined,
canvasDOM: canvasDOM[0],
canvasId: canvasDOM ? canvasDOM[0].id.split("-")[2] : undefined,
canvasDOM: dropTargetDOM,
};
}
@ -1647,7 +1648,7 @@ export function getParentColumnSpace(
const containerWidget = canvasWidgets[containerId];
const canvasDOM = document.querySelector(
`#${getSlidingCanvasName(pastingIntoWidgetId)}`,
`#${getStickyCanvasName(pastingIntoWidgetId)}`,
);
if (!canvasDOM || !containerWidget) return;