src/lib/window-container-sidenav.service.ts
Properties |
Methods |
| Public add | ||||||
add(component: ContainerComponent)
|
||||||
|
Parameters :
Returns :
void
|
| Public getAll |
getAll()
|
|
Returns :
ContainerComponent[]
|
| Public remove | ||||||
remove(componentOrId: ContainerComponent | string)
|
||||||
|
Parameters :
Returns :
void
|
| Public add$ |
Default value : new Subject<ContainerComponent>()
|
| Public remove$ |
Default value : new Subject<ContainerComponent>()
|
import {
ComponentFactoryResolver,
Injectable,
Injector,
ViewContainerRef,
} from '@angular/core';
import { Subject } from 'rxjs';
import { Constructor } from '@rxap/utilities';
export interface ContainerComponent {
id: string;
component: Constructor;
viewContainerRef?: ViewContainerRef | null;
injector?: Injector | null;
componentFactoryResolver?: ComponentFactoryResolver | null;
}
@Injectable({ providedIn: 'root' })
export class WindowContainerSidenavService {
public add$ = new Subject<ContainerComponent>();
public remove$ = new Subject<ContainerComponent>();
private components = new Map<string, ContainerComponent>();
public add(component: ContainerComponent): void {
if (this.components.has(component.id)) {
this.remove$.next(component);
}
this.components.set(component.id, component);
this.add$.next(component);
}
public remove(componentOrId: ContainerComponent | string): void {
const id = typeof componentOrId === 'string' ? componentOrId : componentOrId.id;
if (this.components.has(id)) {
this.remove$.next(this.components.get(id)!);
this.components.delete(id);
}
}
public getAll(): ContainerComponent[] {
return Array.from(this.components.values());
}
}