diff --git a/npm/ng-packs/packages/core/src/lib/services/dom-strategy.service.ts b/npm/ng-packs/packages/core/src/lib/services/dom-strategy.service.ts new file mode 100644 index 0000000000..81041c939b --- /dev/null +++ b/npm/ng-packs/packages/core/src/lib/services/dom-strategy.service.ts @@ -0,0 +1,28 @@ +import { Inject, Injectable } from '@angular/core'; +import { DOCUMENT } from '@angular/common'; +import { DomStrategy } from '../strategies'; + +@Injectable({ providedIn: 'root' }) +export class DomStrategyService { + constructor(@Inject(DOCUMENT) private document: Document) {} + + afterElement(el: HTMLElement) { + return new DomStrategy(() => el, 'afterend'); + } + + beforeElement(el: HTMLElement) { + return new DomStrategy(() => el, 'beforebegin'); + } + + appendToBody() { + return new DomStrategy(() => this.document.body, 'beforeend'); + } + + appendToHead() { + return new DomStrategy(() => this.document.head, 'beforeend'); + } + + prependToHead() { + return new DomStrategy(() => this.document.head, 'afterbegin'); + } +} diff --git a/npm/ng-packs/packages/core/src/lib/strategies/dom.strategy.ts b/npm/ng-packs/packages/core/src/lib/strategies/dom.strategy.ts index 343e989b48..cfdd2b8b75 100644 --- a/npm/ng-packs/packages/core/src/lib/strategies/dom.strategy.ts +++ b/npm/ng-packs/packages/core/src/lib/strategies/dom.strategy.ts @@ -1,29 +1,31 @@ -import { inject, PLATFORM_ID } from '@angular/core'; -import { isPlatformBrowser, DOCUMENT } from '@angular/common'; - export class DomStrategy { - private readonly isBrowser: boolean; - constructor( - private targetFactory: () => HTMLElement, + private getTarget: () => HTMLElement, public position: InsertPosition = 'beforeend', - ) { - const platformId = inject(PLATFORM_ID); - this.isBrowser = isPlatformBrowser(platformId); - } + ) {} insertElement(element: T) { - if (this.isBrowser) { - const target = this.targetFactory(); + if (typeof document !== 'undefined') { + const target = this.getTarget(); target.insertAdjacentElement(this.position, element); } } } export const DOM_STRATEGY = { - AfterElement: (el: HTMLElement) => new DomStrategy(() => el, 'afterend'), - BeforeElement: (el: HTMLElement) => new DomStrategy(() => el, 'beforebegin'), - AppendToBody: () => new DomStrategy(() => inject(DOCUMENT).body, 'beforeend'), - AppendToHead: () => new DomStrategy(() => inject(DOCUMENT).head, 'beforeend'), - PrependToHead: () => new DomStrategy(() => inject(DOCUMENT).head, 'afterbegin'), + AfterElement(element: HTMLElement) { + return new DomStrategy(() => element, 'afterend'); + }, + AppendToBody() { + return new DomStrategy(() => document?.body, 'beforeend'); + }, + AppendToHead() { + return new DomStrategy(() => document?.head, 'beforeend'); + }, + BeforeElement(element: HTMLElement) { + return new DomStrategy(() => element, 'beforebegin'); + }, + PrependToHead() { + return new DomStrategy(() => document?.head, 'afterbegin'); + }, };