ems-web-app-view-container
Version:
This angular.io module includes a component and service that can be used to render nested view containers that transition between screens (e.g., a tab container).
41 lines • 6.22 kB
JavaScript
import { Injectable } from '@angular/core';
import { BehaviorSubject } from 'rxjs';
import * as i0 from "@angular/core";
export class ViewContainerService {
constructor() {
this.viewSource = new BehaviorSubject(null);
this.view = this.viewSource.asObservable();
this.manifest = {};
}
registerView(containerId, viewId, template) {
this.manifest[`${containerId}${ViewContainerService.DELIMITER}${viewId}`] = { viewId, containerId, template };
}
setCurrentView(viewId, containerId) {
const qualifiedId = this.getQualifiedId(viewId, containerId);
let view = this.manifest[qualifiedId ?? ""];
if (!view && containerId)
view = { containerId, viewId, template: null }; //clears the view
this.viewSource.next(view ?? null);
}
getQualifiedId(viewId, containerId) {
if (containerId)
return `${containerId}${ViewContainerService.DELIMITER}${viewId}`;
const regex = new RegExp(`^.*?${ViewContainerService.DELIMITER}(.*?)$`, "gim");
for (let prop in this.manifest) {
const parsedViewId = prop.replace(regex, "$1");
if (parsedViewId === viewId)
return prop;
}
return null;
}
}
ViewContainerService.DELIMITER = "---"; //used to separate container id from view id in lookup; should be something that wouldn't appear in a supplied id
ViewContainerService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: ViewContainerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
ViewContainerService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: ViewContainerService, providedIn: 'root' });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: ViewContainerService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root'
}]
}] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlldy1jb250YWluZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvdmlldy1jb250YWluZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFlLE1BQU0sZUFBZSxDQUFDO0FBQ3hELE9BQU8sRUFBdUIsZUFBZSxFQUFrQixNQUFNLE1BQU0sQ0FBQzs7QUFNNUUsTUFBTSxPQUFPLG9CQUFvQjtJQUhqQztRQU9VLGVBQVUsR0FBZ0MsSUFBSSxlQUFlLENBQWEsSUFBSSxDQUFDLENBQUM7UUFDakYsU0FBSSxHQUEyQixJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzlELGFBQVEsR0FBMEIsRUFBRSxDQUFDO0tBMEI3QztJQXhCUSxZQUFZLENBQUMsV0FBbUIsRUFBRSxNQUFjLEVBQUUsUUFBMEI7UUFDakYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLFdBQVcsR0FBRyxvQkFBb0IsQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLENBQUM7SUFDaEgsQ0FBQztJQUVNLGNBQWMsQ0FBQyxNQUFxQixFQUFFLFdBQW9CO1FBQy9ELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQzdELElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzVDLElBQUcsQ0FBQyxJQUFJLElBQUksV0FBVztZQUFFLElBQUksR0FBRyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsaUJBQWlCO1FBQzFGLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRU8sY0FBYyxDQUFDLE1BQXFCLEVBQUUsV0FBb0I7UUFDaEUsSUFBRyxXQUFXO1lBQUUsT0FBTyxHQUFHLFdBQVcsR0FBRyxvQkFBb0IsQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUM7UUFFbEYsTUFBTSxLQUFLLEdBQUcsSUFBSSxNQUFNLENBQUMsT0FBTyxvQkFBb0IsQ0FBQyxTQUFTLFFBQVEsRUFBQyxLQUFLLENBQUMsQ0FBQztRQUM5RSxLQUFJLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDN0IsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDL0MsSUFBRyxZQUFZLEtBQUssTUFBTTtnQkFBRSxPQUFPLElBQUksQ0FBQztTQUN6QztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzs7QUEzQmEsOEJBQVMsR0FBVyxLQUFNLENBQUEsQ0FBQyxpSEFBaUg7aUhBRi9JLG9CQUFvQjtxSEFBcEIsb0JBQW9CLGNBRm5CLE1BQU07MkZBRVAsb0JBQW9CO2tCQUhoQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCBCZWhhdmlvclN1YmplY3QsIHRocm93RXJyb3IsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJVmlldyB9IGZyb20gXCIuL3ZpZXctY29udGFpbmVyLmludGVyZmFjZXNcIjtcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgVmlld0NvbnRhaW5lclNlcnZpY2Uge1xuXG4gIHB1YmxpYyBzdGF0aWMgREVMSU1JVEVSOiBzdHJpbmcgPSBcIi0tLVwiOyAvL3VzZWQgdG8gc2VwYXJhdGUgY29udGFpbmVyIGlkIGZyb20gdmlldyBpZCBpbiBsb29rdXA7IHNob3VsZCBiZSBzb21ldGhpbmcgdGhhdCB3b3VsZG4ndCBhcHBlYXIgaW4gYSBzdXBwbGllZCBpZFxuXG4gIHByaXZhdGUgdmlld1NvdXJjZTogQmVoYXZpb3JTdWJqZWN0PElWaWV3fG51bGw+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJVmlld3xudWxsPihudWxsKTtcbiAgcHVibGljIHZpZXc6IE9ic2VydmFibGU8SVZpZXd8bnVsbD4gPSB0aGlzLnZpZXdTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XG4gIHB1YmxpYyBtYW5pZmVzdDogUmVjb3JkPHN0cmluZywgSVZpZXc+ID0ge307XG5cbiAgcHVibGljIHJlZ2lzdGVyVmlldyhjb250YWluZXJJZDogc3RyaW5nLCB2aWV3SWQ6IHN0cmluZywgdGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4pIHtcbiAgICB0aGlzLm1hbmlmZXN0W2Ake2NvbnRhaW5lcklkfSR7Vmlld0NvbnRhaW5lclNlcnZpY2UuREVMSU1JVEVSfSR7dmlld0lkfWBdID0geyB2aWV3SWQsIGNvbnRhaW5lcklkLCB0ZW1wbGF0ZSB9O1xuICB9XG5cbiAgcHVibGljIHNldEN1cnJlbnRWaWV3KHZpZXdJZDogc3RyaW5nIHwgbnVsbCwgY29udGFpbmVySWQ/OiBzdHJpbmcpIHtcbiAgICBjb25zdCBxdWFsaWZpZWRJZCA9IHRoaXMuZ2V0UXVhbGlmaWVkSWQodmlld0lkLCBjb250YWluZXJJZCk7XG4gICAgbGV0IHZpZXcgPSB0aGlzLm1hbmlmZXN0W3F1YWxpZmllZElkID8/IFwiXCJdO1xuICAgIGlmKCF2aWV3ICYmIGNvbnRhaW5lcklkKSB2aWV3ID0geyBjb250YWluZXJJZCwgdmlld0lkLCB0ZW1wbGF0ZTogbnVsbCB9OyAvL2NsZWFycyB0aGUgdmlld1xuICAgIHRoaXMudmlld1NvdXJjZS5uZXh0KHZpZXcgPz8gbnVsbCk7XG4gIH1cblxuICBwcml2YXRlIGdldFF1YWxpZmllZElkKHZpZXdJZDogc3RyaW5nIHwgbnVsbCwgY29udGFpbmVySWQ/OiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZihjb250YWluZXJJZCkgcmV0dXJuIGAke2NvbnRhaW5lcklkfSR7Vmlld0NvbnRhaW5lclNlcnZpY2UuREVMSU1JVEVSfSR7dmlld0lkfWA7XG4gICAgXG4gICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKGBeLio/JHtWaWV3Q29udGFpbmVyU2VydmljZS5ERUxJTUlURVJ9KC4qPykkYCxcImdpbVwiKTtcbiAgICBmb3IobGV0IHByb3AgaW4gdGhpcy5tYW5pZmVzdCkge1xuICAgICAgY29uc3QgcGFyc2VkVmlld0lkID0gcHJvcC5yZXBsYWNlKHJlZ2V4LCBcIiQxXCIpO1xuICAgICAgaWYocGFyc2VkVmlld0lkID09PSB2aWV3SWQpIHJldHVybiBwcm9wO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cblxufVxuIl19