carbon-components-angular
Version:
Next generation components
85 lines • 10.3 kB
JavaScript
import { Injectable } from "@angular/core";
import * as i0 from "@angular/core";
/**
* Singleton service used to register the container for out-of-flow components to insert into.
* Also used to insert/remove components from that view.
*/
export class PlaceholderService {
constructor() {
/**
* Main `ViewContainerRef` to insert components into
*/
this.viewContainerRef = null;
/**
* Map of id's to secondary `ViewContainerRef`s
*/
this.viewContainerMap = new Map();
}
/**
* Used by `Placeholder` to register view-container reference.
*/
registerViewContainerRef(vcRef, id) {
if (id) {
this.viewContainerMap.set(id, vcRef);
}
else {
this.viewContainerRef = vcRef;
}
}
/**
* Creates and returns component in the view.
*/
createComponent(component, injector, id) {
if (id) {
if (!this.viewContainerMap.has(id)) {
console.error(`No view container with id ${id} found`);
return;
}
return this.viewContainerMap.get(id).createComponent(component, { index: this.viewContainerMap.size, injector });
}
if (!this.viewContainerRef) {
console.error("No view container defined! Likely due to a missing `cds-placeholder`");
return;
}
return this.viewContainerRef.createComponent(component, { index: this.viewContainerRef.length, injector });
}
destroyComponent(component) {
component.destroy();
}
hasComponentRef(component, id) {
if (id) {
return !(this.viewContainerMap.get(id).indexOf(component.hostView) < 0);
}
return !(this.viewContainerRef.indexOf(component.hostView) < 0);
}
hasPlaceholderRef(id) {
if (id) {
return this.viewContainerMap.has(id);
}
return !!this.viewContainerRef;
}
appendElement(element, id) {
if (id) {
return this.viewContainerMap.get(id).element.nativeElement.appendChild(element);
}
return this.viewContainerRef.element.nativeElement.appendChild(element);
}
removeElement(element, id) {
if (id) {
return this.viewContainerMap.get(id).element.nativeElement.removeChild(element);
}
return this.viewContainerRef.element.nativeElement.removeChild(element);
}
hasElement(element, id) {
if (id) {
return this.viewContainerMap.get(id).element.nativeElement.contains(element);
}
return this.viewContainerRef.element.nativeElement.contains(element);
}
}
PlaceholderService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PlaceholderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
PlaceholderService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PlaceholderService });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PlaceholderService, decorators: [{
type: Injectable
}] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhY2Vob2xkZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wbGFjZWhvbGRlci9wbGFjZWhvbGRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUtBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRTNDOzs7R0FHRztBQUVILE1BQU0sT0FBTyxrQkFBa0I7SUFEL0I7UUFFQzs7V0FFRztRQUNPLHFCQUFnQixHQUFxQixJQUFJLENBQUM7UUFDcEQ7O1dBRUc7UUFDTyxxQkFBZ0IsR0FBK0IsSUFBSSxHQUFHLEVBQUUsQ0FBQztLQXFFbkU7SUFwRUE7O09BRUc7SUFDSCx3QkFBd0IsQ0FBQyxLQUF1QixFQUFFLEVBQVE7UUFDekQsSUFBSSxFQUFFLEVBQUU7WUFDUCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztTQUNyQzthQUFNO1lBQ04sSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztTQUM5QjtJQUNGLENBQUM7SUFFRDs7T0FFRztJQUNILGVBQWUsQ0FBQyxTQUE0QixFQUFFLFFBQWtCLEVBQUUsRUFBUTtRQUN6RSxJQUFJLEVBQUUsRUFBRTtZQUNQLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFO2dCQUNuQyxPQUFPLENBQUMsS0FBSyxDQUFDLDZCQUE2QixFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUN2RCxPQUFPO2FBQ1A7WUFDRCxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsZUFBZSxDQUFDLFNBQWdCLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1NBQ3hIO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUMzQixPQUFPLENBQUMsS0FBSyxDQUFDLHNFQUFzRSxDQUFDLENBQUM7WUFDdEYsT0FBTztTQUNQO1FBQ0QsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLFNBQWdCLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ25ILENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxTQUE0QjtRQUM1QyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVELGVBQWUsQ0FBQyxTQUE0QixFQUFFLEVBQVE7UUFDckQsSUFBSSxFQUFFLEVBQUU7WUFDUCxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDeEU7UUFFRCxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQsaUJBQWlCLENBQUMsRUFBUTtRQUN6QixJQUFJLEVBQUUsRUFBRTtZQUNQLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUNyQztRQUNELE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUNoQyxDQUFDO0lBRUQsYUFBYSxDQUFDLE9BQW9CLEVBQUUsRUFBUTtRQUMzQyxJQUFJLEVBQUUsRUFBRTtZQUNQLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUNoRjtRQUNELE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRCxhQUFhLENBQUMsT0FBb0IsRUFBRSxFQUFRO1FBQzNDLElBQUksRUFBRSxFQUFFO1lBQ1AsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ2hGO1FBQ0QsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVELFVBQVUsQ0FBQyxPQUFvQixFQUFFLEVBQVE7UUFDeEMsSUFBSSxFQUFFLEVBQUU7WUFDUCxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDN0U7UUFDRCxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN0RSxDQUFDOzsrR0E1RVcsa0JBQWtCO21IQUFsQixrQkFBa0I7MkZBQWxCLGtCQUFrQjtrQkFEOUIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdENvbXBvbmVudFJlZixcblx0Vmlld0NvbnRhaW5lclJlZixcblx0SW5qZWN0b3Jcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuXG4vKipcbiAqIFNpbmdsZXRvbiBzZXJ2aWNlIHVzZWQgdG8gcmVnaXN0ZXIgdGhlIGNvbnRhaW5lciBmb3Igb3V0LW9mLWZsb3cgY29tcG9uZW50cyB0byBpbnNlcnQgaW50by5cbiAqIEFsc28gdXNlZCB0byBpbnNlcnQvcmVtb3ZlIGNvbXBvbmVudHMgZnJvbSB0aGF0IHZpZXcuXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBQbGFjZWhvbGRlclNlcnZpY2Uge1xuXHQvKipcblx0ICogTWFpbiBgVmlld0NvbnRhaW5lclJlZmAgdG8gaW5zZXJ0IGNvbXBvbmVudHMgaW50b1xuXHQgKi9cblx0cHJvdGVjdGVkIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYgPSBudWxsO1xuXHQvKipcblx0ICogTWFwIG9mIGlkJ3MgdG8gc2Vjb25kYXJ5IGBWaWV3Q29udGFpbmVyUmVmYHNcblx0ICovXG5cdHByb3RlY3RlZCB2aWV3Q29udGFpbmVyTWFwOiBNYXA8YW55LCBWaWV3Q29udGFpbmVyUmVmPiA9IG5ldyBNYXAoKTtcblx0LyoqXG5cdCAqIFVzZWQgYnkgYFBsYWNlaG9sZGVyYCB0byByZWdpc3RlciB2aWV3LWNvbnRhaW5lciByZWZlcmVuY2UuXG5cdCAqL1xuXHRyZWdpc3RlclZpZXdDb250YWluZXJSZWYodmNSZWY6IFZpZXdDb250YWluZXJSZWYsIGlkPzogYW55KTogdm9pZCB7XG5cdFx0aWYgKGlkKSB7XG5cdFx0XHR0aGlzLnZpZXdDb250YWluZXJNYXAuc2V0KGlkLCB2Y1JlZik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMudmlld0NvbnRhaW5lclJlZiA9IHZjUmVmO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGFuZCByZXR1cm5zIGNvbXBvbmVudCBpbiB0aGUgdmlldy5cblx0ICovXG5cdGNyZWF0ZUNvbXBvbmVudChjb21wb25lbnQ6IENvbXBvbmVudFJlZjxhbnk+LCBpbmplY3RvcjogSW5qZWN0b3IsIGlkPzogYW55KTogQ29tcG9uZW50UmVmPGFueT4ge1xuXHRcdGlmIChpZCkge1xuXHRcdFx0aWYgKCF0aGlzLnZpZXdDb250YWluZXJNYXAuaGFzKGlkKSkge1xuXHRcdFx0XHRjb25zb2xlLmVycm9yKGBObyB2aWV3IGNvbnRhaW5lciB3aXRoIGlkICR7aWR9IGZvdW5kYCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzLnZpZXdDb250YWluZXJNYXAuZ2V0KGlkKS5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50IGFzIGFueSwgeyBpbmRleDogdGhpcy52aWV3Q29udGFpbmVyTWFwLnNpemUsIGluamVjdG9yIH0pO1xuXHRcdH1cblx0XHRpZiAoIXRoaXMudmlld0NvbnRhaW5lclJlZikge1xuXHRcdFx0Y29uc29sZS5lcnJvcihcIk5vIHZpZXcgY29udGFpbmVyIGRlZmluZWQhIExpa2VseSBkdWUgdG8gYSBtaXNzaW5nIGBjZHMtcGxhY2Vob2xkZXJgXCIpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChjb21wb25lbnQgYXMgYW55LCB7IGluZGV4OiB0aGlzLnZpZXdDb250YWluZXJSZWYubGVuZ3RoLCBpbmplY3RvciB9KTtcblx0fVxuXG5cdGRlc3Ryb3lDb21wb25lbnQoY29tcG9uZW50OiBDb21wb25lbnRSZWY8YW55Pikge1xuXHRcdGNvbXBvbmVudC5kZXN0cm95KCk7XG5cdH1cblxuXHRoYXNDb21wb25lbnRSZWYoY29tcG9uZW50OiBDb21wb25lbnRSZWY8YW55PiwgaWQ/OiBhbnkpIHtcblx0XHRpZiAoaWQpIHtcblx0XHRcdHJldHVybiAhKHRoaXMudmlld0NvbnRhaW5lck1hcC5nZXQoaWQpLmluZGV4T2YoY29tcG9uZW50Lmhvc3RWaWV3KSA8IDApO1xuXHRcdH1cblxuXHRcdHJldHVybiAhKHRoaXMudmlld0NvbnRhaW5lclJlZi5pbmRleE9mKGNvbXBvbmVudC5ob3N0VmlldykgPCAwKTtcblx0fVxuXG5cdGhhc1BsYWNlaG9sZGVyUmVmKGlkPzogYW55KSB7XG5cdFx0aWYgKGlkKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy52aWV3Q29udGFpbmVyTWFwLmhhcyhpZCk7XG5cdFx0fVxuXHRcdHJldHVybiAhIXRoaXMudmlld0NvbnRhaW5lclJlZjtcblx0fVxuXG5cdGFwcGVuZEVsZW1lbnQoZWxlbWVudDogSFRNTEVsZW1lbnQsIGlkPzogYW55KTogSFRNTEVsZW1lbnQge1xuXHRcdGlmIChpZCkge1xuXHRcdFx0cmV0dXJuIHRoaXMudmlld0NvbnRhaW5lck1hcC5nZXQoaWQpLmVsZW1lbnQubmF0aXZlRWxlbWVudC5hcHBlbmRDaGlsZChlbGVtZW50KTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMudmlld0NvbnRhaW5lclJlZi5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQoZWxlbWVudCk7XG5cdH1cblxuXHRyZW1vdmVFbGVtZW50KGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBpZD86IGFueSk6IEhUTUxFbGVtZW50IHtcblx0XHRpZiAoaWQpIHtcblx0XHRcdHJldHVybiB0aGlzLnZpZXdDb250YWluZXJNYXAuZ2V0KGlkKS5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQucmVtb3ZlQ2hpbGQoZWxlbWVudCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLnZpZXdDb250YWluZXJSZWYuZWxlbWVudC5uYXRpdmVFbGVtZW50LnJlbW92ZUNoaWxkKGVsZW1lbnQpO1xuXHR9XG5cblx0aGFzRWxlbWVudChlbGVtZW50OiBIVE1MRWxlbWVudCwgaWQ/OiBhbnkpOiBib29sZWFuIHtcblx0XHRpZiAoaWQpIHtcblx0XHRcdHJldHVybiB0aGlzLnZpZXdDb250YWluZXJNYXAuZ2V0KGlkKS5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZWxlbWVudCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLnZpZXdDb250YWluZXJSZWYuZWxlbWVudC5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGVsZW1lbnQpO1xuXHR9XG59XG4iXX0=