]>
Commit | Line | Data |
---|---|---|
1 | import { Component, ElementRef, Input, OnChanges, ViewChild } from '@angular/core' | |
2 | import { CustomMarkupService } from './custom-markup.service' | |
3 | ||
4 | @Component({ | |
5 | selector: 'my-custom-markup-container', | |
6 | templateUrl: './custom-markup-container.component.html' | |
7 | }) | |
8 | export class CustomMarkupContainerComponent implements OnChanges { | |
9 | @ViewChild('contentWrapper', { static: true }) contentWrapper: ElementRef<HTMLInputElement> | |
10 | ||
11 | @Input() content: string | HTMLDivElement | |
12 | ||
13 | displayed = false | |
14 | ||
15 | constructor ( | |
16 | private customMarkupService: CustomMarkupService | |
17 | ) { } | |
18 | ||
19 | async ngOnChanges () { | |
20 | await this.rebuild() | |
21 | } | |
22 | ||
23 | private async rebuild () { | |
24 | if (this.content instanceof HTMLDivElement) { | |
25 | return this.loadElement(this.content) | |
26 | } | |
27 | ||
28 | const { rootElement, componentsLoaded } = await this.customMarkupService.buildElement(this.content) | |
29 | await componentsLoaded | |
30 | ||
31 | return this.loadElement(rootElement) | |
32 | } | |
33 | ||
34 | private loadElement (el: HTMLDivElement) { | |
35 | this.contentWrapper.nativeElement.appendChild(el) | |
36 | ||
37 | this.displayed = true | |
38 | } | |
39 | } |