From 5eafd681c5cee3572e4cf93dcd8795d1bcf7dc65 Mon Sep 17 00:00:00 2001 From: Aleksey Novikov Date: Thu, 14 Nov 2024 00:28:02 +0300 Subject: [PATCH] #6022 Limit area for property grid drop-down Fixes #6022 --- functionalTests/designer/surface.ts | 22 +++++++++++++++++++ .../survey-creator-core/src/creator-base.ts | 4 +++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/functionalTests/designer/surface.ts b/functionalTests/designer/surface.ts index a435d972e3..00c18bd2aa 100644 --- a/functionalTests/designer/surface.ts +++ b/functionalTests/designer/surface.ts @@ -395,4 +395,26 @@ test("Check page adorner state is restored after shrink and stretch", async (t) await t.expect(Selector(".svc-page__content-actions #duplicate .svc-page-toolbar-item__title--with-icon").visible).notOk(); await t.resizeWindow(1920, 1080); await t.expect(Selector(".svc-page__content-actions #duplicate .svc-page-toolbar-item__title--with-icon").visible).ok(); +}); +test("Popup position", async (t) => { + const setCreatorTop = ClientFunction((top) => { + const el = document.getElementById("survey-creator") as HTMLElement; + el.style.top = top; + document.body.insertBefore(el, document.body.firstChild); + }); + await setCreatorTop("400px"); + + await t.resizeWindow(1400, 900); + await setJSON({ + "elements": [ + { + "type": "text", + "name": "q1" + } + ] + }); + await t.click('button[title="Survey settings"]'); + await t.click('[data-name="locale"]'); + await t.expect(ClientFunction(() => { return document.querySelector('[data-name="locale"] .sv-popup__container')?.getBoundingClientRect().top; })()).gte(400); + await setCreatorTop(0); }); \ No newline at end of file diff --git a/packages/survey-creator-core/src/creator-base.ts b/packages/survey-creator-core/src/creator-base.ts index f80b65b01c..ed7c1d33af 100644 --- a/packages/survey-creator-core/src/creator-base.ts +++ b/packages/survey-creator-core/src/creator-base.ts @@ -2293,7 +2293,9 @@ export class SurveyCreatorModel extends Base this.onPreviewSurveyCreated.fire(this, { survey: survey }); } - survey.onPopupVisibleChanged.add((_, options) => options.popup.getAreaCallback = () => this.rootElement); + survey.onPopupVisibleChanged.add((_, options) => { + if (!options.popup.getAreaCallback) options.popup.getAreaCallback = () => { return this.rootElement; }; + }); return survey; } private getSurveyInstanceCreatedArea(reason: string): string {