From bca25bc41e31793d5a587471e2433a0d4185a861 Mon Sep 17 00:00:00 2001 From: ka9de Date: Wed, 28 Aug 2024 13:59:48 +0200 Subject: [PATCH] fix(ui/overlays): overlay growing margin (#2331) --- .changeset/avoid-growing-margin.md | 5 ++++ .../overlays/src/OverlayController.js | 4 +++ .../overlays/test/OverlayController.test.js | 29 +++++++++++++++++++ 3 files changed, 38 insertions(+) create mode 100644 .changeset/avoid-growing-margin.md diff --git a/.changeset/avoid-growing-margin.md b/.changeset/avoid-growing-margin.md new file mode 100644 index 000000000..9aaaf61f6 --- /dev/null +++ b/.changeset/avoid-growing-margin.md @@ -0,0 +1,5 @@ +--- +'@lion/ui': patch +--- + +fix: [overlays] avoid growing margin when using `preventsScroll: false` diff --git a/packages/ui/components/overlays/src/OverlayController.js b/packages/ui/components/overlays/src/OverlayController.js index 99991fd27..3fc64f01e 100644 --- a/packages/ui/components/overlays/src/OverlayController.js +++ b/packages/ui/components/overlays/src/OverlayController.js @@ -788,6 +788,10 @@ export class OverlayController extends EventTarget { * @protected */ _keepBodySize({ phase }) { + if (!this.preventsScroll) { + return; + } + switch (phase) { case 'before-show': this.__bodyClientWidth = document.body.clientWidth; diff --git a/packages/ui/components/overlays/test/OverlayController.test.js b/packages/ui/components/overlays/test/OverlayController.test.js index 898adbe40..3978d2fe9 100644 --- a/packages/ui/components/overlays/test/OverlayController.test.js +++ b/packages/ui/components/overlays/test/OverlayController.test.js @@ -1781,4 +1781,33 @@ describe('OverlayController', () => { ); }); }); + + describe('run _keepBodySize only with scroll prevention', () => { + /** + * @type {OverlayController} + */ + const overlayControllerNoPrevent = new OverlayController({ + ...withLocalTestConfig(), + preventsScroll: false, + }); + + const overlayControllerPreventsScroll = new OverlayController({ + ...withLocalTestConfig(), + preventsScroll: true, + }); + + it('should not run with scroll prevention', async () => { + await overlayControllerNoPrevent.show(); + + expect(overlayControllerNoPrevent.__bodyMarginRightInline).to.equal(undefined); + expect(overlayControllerNoPrevent.__bodyMarginRight).to.equal(undefined); + }); + + it('should run with scroll prevention', async () => { + await overlayControllerPreventsScroll.show(); + + expect(overlayControllerPreventsScroll.__bodyMarginRightInline).to.not.equal(undefined); + expect(overlayControllerPreventsScroll.__bodyMarginRight).to.not.equal(undefined); + }); + }); });