Skip to content

Commit cd63458

Browse files
authored
Merge pull request #458 from contentstack/disable-scroll-when-field-modifer-is-active
Disable scroll when field modifer is active
2 parents d2c1c70 + 12be298 commit cd63458

6 files changed

Lines changed: 50 additions & 1 deletion

File tree

src/visualBuilder/components/FieldLocationAppList.tsx

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { VisualBuilderPostMessageEvents } from "../utils/types/postMessage.types
44
import visualBuilderPostMessage from "../utils/visualBuilderPostMessage";
55
import { visualBuilderStyles } from "../visualBuilder.style";
66
import classNames from "classnames";
7+
import { CslpData } from "../../utils/cslpdata";
78

89
interface App {
910
app_installation_uid: string;
@@ -30,6 +31,9 @@ interface FieldLocationAppListProps {
3031
apps: App[];
3132
position: "left" | "right";
3233
toolbarRef: React.RefObject<HTMLDivElement>;
34+
domEditStack:CslpData[]
35+
setDisplayAllApps: (displayAllApps: boolean) => void;
36+
displayAllApps: boolean;
3337
}
3438

3539
const normalize = (text: string) =>
@@ -42,6 +46,8 @@ export const FieldLocationAppList = ({
4246
apps,
4347
position,
4448
toolbarRef,
49+
domEditStack,
50+
setDisplayAllApps,
4551
}: FieldLocationAppListProps) => {
4652
const remainingApps = apps.filter((app, index) => index !== 0);
4753
const [search, setSearch] = useState("");
@@ -63,8 +69,10 @@ export const FieldLocationAppList = ({
6369
{
6470
app: app,
6571
position: toolbarRef.current?.getBoundingClientRect(),
72+
DomEditStack:domEditStack
6673
}
6774
);
75+
setDisplayAllApps(false);
6876
};
6977

7078
return (

src/visualBuilder/components/FieldLocationIcon.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,22 @@ import React, { useRef } from "preact/compat";
66
import { LoadingIcon } from "./icons/loading";
77
import { VisualBuilderPostMessageEvents } from "../utils/types/postMessage.types";
88
import visualBuilderPostMessage from "../utils/visualBuilderPostMessage";
9+
import { CslpData } from "../../utils/cslpdata";
910

1011
export const FieldLocationIcon = ({
1112
fieldLocationData,
1213
multipleFieldToolbarButtonClasses,
1314
handleMoreIconClick,
1415
moreButtonRef,
1516
toolbarRef,
17+
domEditStack
1618
}: {
1719
fieldLocationData: any;
1820
multipleFieldToolbarButtonClasses: any;
1921
handleMoreIconClick: () => void;
2022
moreButtonRef: any;
2123
toolbarRef: any;
24+
domEditStack:CslpData[]
2225
}) => {
2326

2427

@@ -32,6 +35,7 @@ export const FieldLocationIcon = ({
3235
visualBuilderPostMessage?.send(VisualBuilderPostMessageEvents.FIELD_LOCATION_SELECTED_APP, {
3336
app,
3437
position: toolbarRef.current?.getBoundingClientRect(),
38+
DomEditStack:domEditStack
3539
});
3640
};
3741

src/visualBuilder/components/FieldToolbar.tsx

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { CslpData } from "../../cslp/types/cslp.types";
2+
import { CslpData as CslpDataUtil } from "../../utils/cslpdata";
23
import getChildrenDirection from "../utils/getChildrenDirection";
34
import {
45
ALLOWED_MODAL_EDITABLE_FIELD,
@@ -195,6 +196,9 @@ function FieldToolbarComponent(
195196
// }
196197
}
197198

199+
const domEditStack=getDOMEditStack(eventDetails.editableElement) as CslpDataUtil[]
200+
201+
198202
const invertTooltipPosition =
199203
targetElement.getBoundingClientRect().top <= TOOLTIP_TOP_EDGE_BUFFER;
200204

@@ -570,6 +574,7 @@ function FieldToolbarComponent(
570574
handleMoreIconClick={handleMoreIconClick}
571575
moreButtonRef={moreButtonRef}
572576
toolbarRef={toolbarRef}
577+
domEditStack={domEditStack}
573578
/>
574579
</>
575580
</div>
@@ -579,6 +584,9 @@ function FieldToolbarComponent(
579584
toolbarRef={toolbarRef}
580585
apps={fieldLocationData?.apps || ([] as any[])}
581586
position={appListPosition}
587+
domEditStack={domEditStack}
588+
setDisplayAllApps={setDisplayAllApps}
589+
displayAllApps={displayAllApps}
582590
/>
583591
)}
584592
</div>

src/visualBuilder/components/__test__/FieldLocationAppList.test.tsx

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,17 +145,29 @@ describe("FieldLocationAppList", () => {
145145
});
146146

147147
it("should send event when app is clicked", () => {
148-
render(<FieldLocationAppList apps={mockApps} position="right" toolbarRef={mockToolbarRef} />);
148+
const mockSetDisplayAllApps = vi.fn();
149+
render(<FieldLocationAppList apps={mockApps} position="right" toolbarRef={mockToolbarRef} domEditStack={[]} setDisplayAllApps={mockSetDisplayAllApps} displayAllApps={true} />);
149150

150151
const secondApp = screen.getByText("Second App");
151152
fireEvent.click(secondApp);
152153

153154
expect(visualBuilderPostMessage?.send).toHaveBeenCalledWith("field-location-selected-app", {
154155
app: mockApps[1],
155156
position: { top: 0, left: 0, right: 100, bottom: 50, width: 100, height: 50, x: 0, y: 0 },
157+
DomEditStack: []
156158
});
157159
});
158160

161+
it("should close the app list when an app is selected", () => {
162+
const mockSetDisplayAllApps = vi.fn();
163+
render(<FieldLocationAppList apps={mockApps} position="right" toolbarRef={mockToolbarRef} domEditStack={[]} setDisplayAllApps={mockSetDisplayAllApps} displayAllApps={true} />);
164+
165+
const secondApp = screen.getByText("Second App");
166+
fireEvent.click(secondApp);
167+
168+
expect(mockSetDisplayAllApps).toHaveBeenCalledWith(false);
169+
});
170+
159171

160172

161173

src/visualBuilder/index.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -367,6 +367,22 @@ export class VisualBuilder {
367367
VisualBuilderPostMessageEvents.SEND_VARIANT_AND_LOCALE
368368
);
369369

370+
visualBuilderPostMessage?.on<{
371+
scroll: boolean
372+
}>(
373+
VisualBuilderPostMessageEvents.TOGGLE_SCROLL,
374+
(event) => {
375+
if (!event.data.scroll) {
376+
document.body.style.overflow = 'hidden'
377+
} else {
378+
document.body.style.overflow = 'auto'
379+
}
380+
}
381+
);
382+
383+
384+
385+
370386
useHideFocusOverlayPostMessageEvent({
371387
overlayWrapper: this.overlayWrapper,
372388
visualBuilderContainer: this.visualBuilderContainer,

src/visualBuilder/utils/types/postMessage.types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,4 +50,5 @@ export enum VisualBuilderPostMessageEvents {
5050
COLLAB_THREADS_REMOVE = "collab-threads-remove",
5151
COLLAB_THREAD_REOPEN = "collab-thread-reopen",
5252
COLLAB_THREAD_HIGHLIGHT = "collab-thread-highlight",
53+
TOGGLE_SCROLL = "toggle-scroll",
5354
}

0 commit comments

Comments
 (0)