diff --git a/core/src/components/action-sheet/action-sheet.tsx b/core/src/components/action-sheet/action-sheet.tsx index 38e67459b1..5c8630d833 100644 --- a/core/src/components/action-sheet/action-sheet.tsx +++ b/core/src/components/action-sheet/action-sheet.tsx @@ -117,7 +117,7 @@ export class ActionSheet implements ComponentInterface, OverlayInterface { return present(this, 'actionSheetEnter', iosEnterAnimation, mdEnterAnimation); } - constructor() { + connectedCallback() { prepareOverlay(this.el); } diff --git a/core/src/components/alert/alert.tsx b/core/src/components/alert/alert.tsx index 5c6ddaee2c..a2793528d4 100644 --- a/core/src/components/alert/alert.tsx +++ b/core/src/components/alert/alert.tsx @@ -167,7 +167,7 @@ export class Alert implements ComponentInterface, OverlayInterface { }) as AlertInput); } - constructor() { + connectedCallback() { prepareOverlay(this.el); } diff --git a/core/src/components/loading/loading.tsx b/core/src/components/loading/loading.tsx index 536d97341c..1e32fcdb9f 100644 --- a/core/src/components/loading/loading.tsx +++ b/core/src/components/loading/loading.tsx @@ -111,7 +111,7 @@ export class Loading implements ComponentInterface, OverlayInterface { */ @Event({ eventName: 'ionLoadingDidDismiss' }) didDismiss!: EventEmitter; - constructor() { + connectedCallback() { prepareOverlay(this.el); } diff --git a/core/src/components/modal/modal.tsx b/core/src/components/modal/modal.tsx index 0ef2eacb0a..714ea3f346 100644 --- a/core/src/components/modal/modal.tsx +++ b/core/src/components/modal/modal.tsx @@ -130,7 +130,7 @@ export class Modal implements ComponentInterface, OverlayInterface { } } - constructor() { + connectedCallback() { prepareOverlay(this.el); } diff --git a/core/src/components/picker/picker.tsx b/core/src/components/picker/picker.tsx index cb793c887d..83041163b0 100644 --- a/core/src/components/picker/picker.tsx +++ b/core/src/components/picker/picker.tsx @@ -100,7 +100,7 @@ export class Picker implements ComponentInterface, OverlayInterface { */ @Event({ eventName: 'ionPickerDidDismiss' }) didDismiss!: EventEmitter; - constructor() { + connectedCallback() { prepareOverlay(this.el); } diff --git a/core/src/components/popover/popover.tsx b/core/src/components/popover/popover.tsx index f658cc74e0..f7fbd61887 100644 --- a/core/src/components/popover/popover.tsx +++ b/core/src/components/popover/popover.tsx @@ -115,7 +115,7 @@ export class Popover implements ComponentInterface, OverlayInterface { */ @Event({ eventName: 'ionPopoverDidDismiss' }) didDismiss!: EventEmitter; - constructor() { + connectedCallback() { prepareOverlay(this.el); } diff --git a/core/src/components/toast/toast.tsx b/core/src/components/toast/toast.tsx index 423d70a8af..09d74dabbb 100644 --- a/core/src/components/toast/toast.tsx +++ b/core/src/components/toast/toast.tsx @@ -126,7 +126,7 @@ export class Toast implements ComponentInterface, OverlayInterface { */ @Event({ eventName: 'ionToastDidDismiss' }) didDismiss!: EventEmitter; - constructor() { + connectedCallback() { prepareOverlay(this.el); } diff --git a/core/src/utils/overlays.ts b/core/src/utils/overlays.ts index 0fdd9e7f55..cff746ec8d 100644 --- a/core/src/utils/overlays.ts +++ b/core/src/utils/overlays.ts @@ -31,8 +31,10 @@ export const popoverController = /*@__PURE__*/createController('ion-toast'); export const prepareOverlay = (el: T) => { - const doc = document; - connectListeners(doc); + /* tslint:disable-next-line */ + if (typeof document !== 'undefined') { + connectListeners(document); + } const overlayIndex = lastId++; el.overlayIndex = overlayIndex; if (!el.hasAttribute('id')) { @@ -41,20 +43,23 @@ export const prepareOverlay = (el: T) => { }; export const createOverlay = (tagName: string, opts: object | undefined): Promise => { - return customElements.whenDefined(tagName).then(() => { - const doc = document; - const element = doc.createElement(tagName) as HTMLIonOverlayElement; - element.classList.add('overlay-hidden'); + /* tslint:disable-next-line */ + if (typeof customElements !== 'undefined') { + return customElements.whenDefined(tagName).then(() => { + const element = document.createElement(tagName) as HTMLIonOverlayElement; + element.classList.add('overlay-hidden'); - // convert the passed in overlay options into props - // that get passed down into the new overlay - Object.assign(element, opts); + // convert the passed in overlay options into props + // that get passed down into the new overlay + Object.assign(element, opts); - // append the overlay element to the document body - getAppRoot(doc).appendChild(element); + // append the overlay element to the document body + getAppRoot(document).appendChild(element); - return element.componentOnReady() as any; - }); + return element.componentOnReady() as any; + }); + } + return Promise.resolve() as any; }; export const connectListeners = (doc: Document) => {