From 121e1562fa0896f5e91732e4f9bea270c941a59c Mon Sep 17 00:00:00 2001 From: Thijs Louisse Date: Sat, 4 Jul 2020 18:50:22 +0200 Subject: [PATCH 1/2] fix(overlays): only teardown when overlayCtrl defined --- packages/overlays/src/OverlayMixin.js | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/packages/overlays/src/OverlayMixin.js b/packages/overlays/src/OverlayMixin.js index c8cae95dd..5c687dd94 100644 --- a/packages/overlays/src/OverlayMixin.js +++ b/packages/overlays/src/OverlayMixin.js @@ -158,6 +158,10 @@ export const OverlayMixin = dedupeMixin( super.disconnectedCallback(); } + if (!this._overlayCtrl) { + return; + } + this._overlayDisconnectComplete = new Promise((resolve, reject) => { this.__resolveOverlayDisconnectComplete = resolve; this.__rejectOverlayDisconnectComplete = reject; @@ -168,16 +172,14 @@ export const OverlayMixin = dedupeMixin( this.__resolveOverlayDisconnectComplete(); }); - if (this._overlayCtrl) { - // We need to prevent that we create a setup/teardown cycle during startup, where it - // is common that the overlay system moves around nodes. Therefore, we make the - // teardown async, so that it only happens when we are permanently disconnecting from dom - this._overlayDisconnectComplete - .then(() => { - this._teardownOverlayCtrl(); - }) - .catch(() => {}); - } + // We need to prevent that we create a setup/teardown cycle during startup, where it + // is common that the overlay system moves around nodes. Therefore, we make the + // teardown async, so that it only happens when we are permanently disconnecting from dom + this._overlayDisconnectComplete + .then(() => { + this._teardownOverlayCtrl(); + }) + .catch(() => {}); } get _overlayInvokerNode() { From e571de808a5811fe08492d273445ac179fdbb6e7 Mon Sep 17 00:00:00 2001 From: Thijs Louisse Date: Mon, 6 Jul 2020 19:25:15 +0200 Subject: [PATCH 2/2] chore: mitigate browser errors WTR --- packages/form-core/src/form-group/FormGroupMixin.js | 9 +++++++-- packages/overlays/src/OverlayController.js | 8 ++++++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/packages/form-core/src/form-group/FormGroupMixin.js b/packages/form-core/src/form-group/FormGroupMixin.js index 4e2cfc103..1439f6766 100644 --- a/packages/form-core/src/form-group/FormGroupMixin.js +++ b/packages/form-core/src/form-group/FormGroupMixin.js @@ -304,9 +304,14 @@ export const FormGroupMixin = dedupeMixin( _anyFormElementHasFeedbackFor(state) { return Object.keys(this.formElements).some(name => { if (Array.isArray(this.formElements[name])) { - return this.formElements[name].some(el => !!el.hasFeedbackFor.includes(state)); + return this.formElements[name].some(el => { + return Boolean(el.hasFeedbackFor && el.hasFeedbackFor.includes(state)); + }); } - return !!this.formElements[name].hasFeedbackFor.includes(state); + return Boolean( + this.formElements[name].hasFeedbackFor && + this.formElements[name].hasFeedbackFor.includes(state), + ); }); } diff --git a/packages/overlays/src/OverlayController.js b/packages/overlays/src/OverlayController.js index 6dd8e612a..a15d0e2cc 100644 --- a/packages/overlays/src/OverlayController.js +++ b/packages/overlays/src/OverlayController.js @@ -290,6 +290,10 @@ export class OverlayController { } } + if (!this._renderTarget) { + return; + } + if (this.__isContentNodeProjected && this.placementMode === 'local') { // We add the contentNode in its slot, so that it will be projected by contentWrapperNode this._renderTarget.appendChild(this.contentNode); @@ -635,7 +639,7 @@ export class OverlayController { this.__hasActiveBackdrop = false; break; case 'teardown': - if (!this.backdropNode) { + if (!this.backdropNode || !this.backdropNode.parentNode) { return; } this.backdropNode.parentNode.removeChild(this.backdropNode); @@ -685,7 +689,7 @@ export class OverlayController { this.__hasActiveBackdrop = false; break; case 'teardown': - if (!backdropNode) { + if (!backdropNode || !backdropNode.parentNode) { return; } if (animation && this.__backDropAnimation) {