From 733991d92c3e7ad8cc5f8754cc9aab0fbddb898a Mon Sep 17 00:00:00 2001 From: Joren Broekema Date: Fri, 27 Sep 2019 12:05:31 +0200 Subject: [PATCH] fix(overlays): fix contentNodes for local and global overlays Co-authored by: Thijs Louisse --- .../overlays/docs/GlobalOverlayController.md | 4 +- .../docs/OverlaySystemImplementation.md | 2 +- packages/overlays/index.js | 5 +- .../overlays/src/BaseOverlayController.js | 16 ++---- ...Controller.js => BottomSheetController.js} | 7 ++- .../overlays/src/GlobalOverlayController.js | 33 +++++++++++- .../overlays/src/LocalOverlayController.js | 12 +++++ packages/overlays/src/globalOverlaysStyle.js | 4 ++ ...eet.stories.js => bottom-sheet.stories.js} | 19 ++++--- .../stories/dynamic-overlay.stories.js | 11 ++-- packages/overlays/stories/index.stories.js | 2 +- .../BaseOverlayController.suite.js | 15 ------ ....test.js => BottomSheetController.test.js} | 8 +-- .../test/GlobalOverlayController.test.js | 44 ++++++++++++++++ .../test/LocalOverlayController.test.js | 52 ++++++++++++++++++- 15 files changed, 178 insertions(+), 56 deletions(-) rename packages/overlays/src/{BottomsheetController.js => BottomSheetController.js} (61%) rename packages/overlays/stories/{bottomsheet.stories.js => bottom-sheet.stories.js} (59%) rename packages/overlays/test/{BottomsheetController.test.js => BottomSheetController.test.js} (77%) diff --git a/packages/overlays/docs/GlobalOverlayController.md b/packages/overlays/docs/GlobalOverlayController.md index b71fad00a..361a3a83f 100644 --- a/packages/overlays/docs/GlobalOverlayController.md +++ b/packages/overlays/docs/GlobalOverlayController.md @@ -26,12 +26,12 @@ const myCtrl = overlays.add( ); ``` -### BottomsheetController +### BottomSheetController A specific extension of GlobalOverlayController configured to create accessible dialogs at the bottom of the screen. ```js -import { BottomsheetController } from '@lion/overlays'; +import { BottomSheetController } from '@lion/overlays'; ``` ### ModalDialogController diff --git a/packages/overlays/docs/OverlaySystemImplementation.md b/packages/overlays/docs/OverlaySystemImplementation.md index 57992a5c7..3408a99cb 100644 --- a/packages/overlays/docs/OverlaySystemImplementation.md +++ b/packages/overlays/docs/OverlaySystemImplementation.md @@ -159,7 +159,7 @@ TODO: }, ``` -### Bottomsheet Controller +### BottomSheetController ```js { diff --git a/packages/overlays/index.js b/packages/overlays/index.js index 8c1e18018..f915299db 100644 --- a/packages/overlays/index.js +++ b/packages/overlays/index.js @@ -2,7 +2,10 @@ export { DynamicOverlayController } from './src/DynamicOverlayController.js'; export { GlobalOverlayController } from './src/GlobalOverlayController.js'; export { globalOverlaysStyle } from './src/globalOverlaysStyle.js'; export { LocalOverlayController } from './src/LocalOverlayController.js'; -export { BottomsheetController } from './src/BottomsheetController.js'; +export { BottomSheetController } from './src/BottomSheetController.js'; export { ModalDialogController } from './src/ModalDialogController.js'; export { overlays } from './src/overlays.js'; export { OverlaysManager } from './src/OverlaysManager.js'; + +// deprecated +export { BottomSheetController as BottomsheetController } from './src/BottomSheetController.js'; diff --git a/packages/overlays/src/BaseOverlayController.js b/packages/overlays/src/BaseOverlayController.js index b29c94f17..5a1dc3c1a 100644 --- a/packages/overlays/src/BaseOverlayController.js +++ b/packages/overlays/src/BaseOverlayController.js @@ -133,7 +133,7 @@ export class BaseOverlayController { switchOut() {} // eslint-disable-next-line class-methods-use-this - contentTemplateUpdated() {} + onContentUpdated() {} __setupContent(params) { if (params.contentTemplate && params.contentNode) { @@ -175,23 +175,15 @@ export class BaseOverlayController { if (this.isShown) { render(this.contentTemplate(this.contentData), this.content); this.__contentNode = this.content.firstElementChild; - this.contentTemplateUpdated(); + this.onContentUpdated(); } else { render(html``, this.content); this.__contentNode = undefined; } } - __showHideViaCss() { - if (!this.contentNode) { - return; - } - if (this.isShown) { - this.contentNode.style.display = 'inline-block'; - } else { - this.contentNode.style.display = 'none'; - } - } + // eslint-disable-next-line class-methods-use-this + __showHideViaCss() {} // TODO: this method has to be removed when EventTarget polyfill is available on IE11 __fakeExtendsEventTarget() { diff --git a/packages/overlays/src/BottomsheetController.js b/packages/overlays/src/BottomSheetController.js similarity index 61% rename from packages/overlays/src/BottomsheetController.js rename to packages/overlays/src/BottomSheetController.js index 12e2c2dc1..d55c24a28 100644 --- a/packages/overlays/src/BottomsheetController.js +++ b/packages/overlays/src/BottomSheetController.js @@ -1,6 +1,6 @@ import { GlobalOverlayController } from './GlobalOverlayController.js'; -export class BottomsheetController extends GlobalOverlayController { +export class BottomSheetController extends GlobalOverlayController { constructor(params) { super({ hasBackdrop: true, @@ -13,4 +13,9 @@ export class BottomsheetController extends GlobalOverlayController { ...params, }); } + + onContentUpdated() { + super.onContentUpdated(); + this.contentNode.classList.add('global-overlays__overlay--bottom-sheet'); + } } diff --git a/packages/overlays/src/GlobalOverlayController.js b/packages/overlays/src/GlobalOverlayController.js index f9236363d..b2994f1bc 100644 --- a/packages/overlays/src/GlobalOverlayController.js +++ b/packages/overlays/src/GlobalOverlayController.js @@ -85,10 +85,29 @@ export class GlobalOverlayController extends BaseOverlayController { this.__enableFeatures(); } - contentTemplateUpdated() { + onContentUpdated() { this.contentNode.classList.add('global-overlays__overlay'); } + get contentNode() { + return this.__contentNode; + } + + set contentNode(node) { + const wrapper = document.createElement('div'); + wrapper.appendChild(node); + + this.__contentNode = node; + this.content = wrapper; + this.onContentUpdated(); + + // setting a contentNode means hide/show with css + this.__showHideMode = 'css'; + if (this.isShown === false) { + this.content.style.display = 'none'; + } + } + /** * Hides the overlay. */ @@ -115,6 +134,18 @@ export class GlobalOverlayController extends BaseOverlayController { this.defaultHideDone(); } + __showHideViaCss() { + if (!this.contentNode) { + return; + } + + if (this.isShown) { + this.content.style.display = ''; + } else { + this.content.style.display = 'none'; + } + } + /** * Sets up flags. */ diff --git a/packages/overlays/src/LocalOverlayController.js b/packages/overlays/src/LocalOverlayController.js index c27498135..4dcef03eb 100644 --- a/packages/overlays/src/LocalOverlayController.js +++ b/packages/overlays/src/LocalOverlayController.js @@ -239,6 +239,18 @@ export class LocalOverlayController extends BaseOverlayController { } } + __showHideViaCss() { + if (!this.contentNode) { + return; + } + + if (this.isShown) { + this.contentNode.style.display = 'inline-block'; + } else { + this.contentNode.style.display = 'none'; + } + } + // ********************************************************************************************** // FEATURE - hidesOnOutsideClick // ********************************************************************************************** diff --git a/packages/overlays/src/globalOverlaysStyle.js b/packages/overlays/src/globalOverlaysStyle.js index f9667c9b2..8953ec3ae 100644 --- a/packages/overlays/src/globalOverlaysStyle.js +++ b/packages/overlays/src/globalOverlaysStyle.js @@ -65,6 +65,10 @@ export const globalOverlaysStyle = css` align-items: center; } + .global-overlays__overlay--bottom-sheet { + width: 100%; + } + .global-overlays.global-overlays--blocking-opened .global-overlays__overlay { display: none; } diff --git a/packages/overlays/stories/bottomsheet.stories.js b/packages/overlays/stories/bottom-sheet.stories.js similarity index 59% rename from packages/overlays/stories/bottomsheet.stories.js rename to packages/overlays/stories/bottom-sheet.stories.js index 266796eb4..20816d240 100644 --- a/packages/overlays/stories/bottomsheet.stories.js +++ b/packages/overlays/stories/bottom-sheet.stories.js @@ -1,24 +1,23 @@ import { storiesOf, html } from '@open-wc/demoing-storybook'; import { css } from '@lion/core'; -import { overlays, BottomsheetController } from '../index.js'; +import { overlays, BottomSheetController } from '../index.js'; -const bottomsheetDemoStyle = css` +const bottomSheetDemoStyle = css` .demo-overlay { - width: 100%; background-color: white; border: 1px solid lightgrey; text-align: center; } `; -storiesOf('Global Overlay System|Bottomsheet', module).add('Default', () => { - const bottomsheetCtrl = overlays.add( - new BottomsheetController({ +storiesOf('Global Overlay System|BottomSheet', module).add('Default', () => { + const bottomSheetCtrl = overlays.add( + new BottomSheetController({ contentTemplate: () => html`
-

Bottomsheet

- +

BottomSheet

+
`, }), @@ -26,11 +25,11 @@ storiesOf('Global Overlay System|Bottomsheet', module).add('Default', () => { return html` Anchor 1