diff --git a/core/src/components/input-shims/hacks/common.ts b/core/src/components/input-shims/hacks/common.ts index a7d22828d5..6395c3061b 100644 --- a/core/src/components/input-shims/hacks/common.ts +++ b/core/src/components/input-shims/hacks/common.ts @@ -40,7 +40,7 @@ function removeClone(componentEl: HTMLElement, inputEl: HTMLElement) { if (componentEl && componentEl.parentElement) { const clonedInputEles = componentEl.parentElement.querySelectorAll('.cloned-input'); for (let i = 0; i < clonedInputEles.length; i++) { - clonedInputEles[i].parentNode.removeChild(clonedInputEles[i]); + clonedInputEles[i].remove(); } componentEl.style.pointerEvents = ''; } diff --git a/core/src/components/modal/modal.tsx b/core/src/components/modal/modal.tsx index 06bbab64fe..f3af9a1026 100644 --- a/core/src/components/modal/modal.tsx +++ b/core/src/components/modal/modal.tsx @@ -2,7 +2,7 @@ import { Component, Element, Event, EventEmitter, Listen, Method, Prop } from '@ import { Animation, AnimationBuilder, Config, FrameworkDelegate } from '../../index'; import { createThemedClasses, getClassMap } from '../../utils/theme'; -import { BACKDROP, OverlayEventDetail, OverlayInterface, attachComponent, dismiss, eventMethod, present } from '../../utils/overlays'; +import { BACKDROP, OverlayEventDetail, OverlayInterface, attachComponent, detachComponent, dismiss, eventMethod, present } from '../../utils/overlays'; import iosEnterAnimation from './animations/ios.enter'; import iosLeaveAnimation from './animations/ios.leave'; @@ -186,7 +186,8 @@ export class Modal implements OverlayInterface { */ @Method() dismiss(data?: any, role?: string): Promise { - return dismiss(this, data, role, 'modalLeave', iosLeaveAnimation, mdLeaveAnimation); + return dismiss(this, data, role, 'modalLeave', iosLeaveAnimation, mdLeaveAnimation) + .then(() => detachComponent(this.delegate, this.usersElement)); } /** diff --git a/core/src/components/popover/popover.tsx b/core/src/components/popover/popover.tsx index c82b7ece07..9858df6388 100644 --- a/core/src/components/popover/popover.tsx +++ b/core/src/components/popover/popover.tsx @@ -2,7 +2,7 @@ import { Component, Element, Event, EventEmitter, Listen, Method, Prop } from '@ import { Animation, AnimationBuilder, Config, FrameworkDelegate } from '../../index'; import { createThemedClasses, getClassMap } from '../../utils/theme'; -import { BACKDROP, OverlayEventDetail, OverlayInterface, attachComponent, dismiss, eventMethod, present } from '../../utils/overlays'; +import { BACKDROP, OverlayEventDetail, OverlayInterface, attachComponent, detachComponent, dismiss, eventMethod, present } from '../../utils/overlays'; import iosEnterAnimation from './animations/ios.enter'; import iosLeaveAnimation from './animations/ios.leave'; @@ -196,7 +196,8 @@ export class Popover implements OverlayInterface { */ @Method() dismiss(data?: any, role?: string): Promise { - return dismiss(this, data, role, 'popoverLeave', iosLeaveAnimation, mdLeaveAnimation, this.ev); + return dismiss(this, data, role, 'popoverLeave', iosLeaveAnimation, mdLeaveAnimation, this.ev) + .then(() => detachComponent(this.delegate, this.usersElement)); } /** diff --git a/core/src/components/ripple-effect/ripple-effect.tsx b/core/src/components/ripple-effect/ripple-effect.tsx index bde9092ec5..3ec29e4ec5 100644 --- a/core/src/components/ripple-effect/ripple-effect.tsx +++ b/core/src/components/ripple-effect/ripple-effect.tsx @@ -82,7 +82,7 @@ export class RippleEffect { style.animationDuration = duration + 'ms'; this.el.appendChild(div); - setTimeout(() => this.el.removeChild(div), duration + 50); + setTimeout(() => div.remove(), duration + 50); }); } } diff --git a/core/src/utils/overlays.ts b/core/src/utils/overlays.ts index 3b238cede5..90eda5bb86 100644 --- a/core/src/utils/overlays.ts +++ b/core/src/utils/overlays.ts @@ -98,9 +98,7 @@ export function dismiss( return overlayAnimation(overlay, animationBuilder, overlay.el, opts).then(() => { overlay.didDismiss.emit({data, role}); - if (overlay.el.parentNode) { - overlay.el.parentNode.removeChild(overlay.el); - } + overlay.el.remove(); }); } @@ -154,6 +152,17 @@ export function attachComponent(delegate: FrameworkDelegate, container: Element, return Promise.resolve(el); } +export function detachComponent(delegate: FrameworkDelegate, element: HTMLElement) { + if (element) { + if (delegate) { + const container = element.parentElement; + return delegate.removeViewFromDom(container, element); + } + element.remove(); + } + return Promise.resolve(); +} + export function eventMethod(element: HTMLElement, eventName: string, callback?: (detail: T) => void): Promise { let resolve: Function; const promise = new Promise(r => resolve = r);