projects/wms-framework/src/lib/regionsframework/RegionViewRegistry.ts
Registry to keep views being assigned to a region
This class is going to hold a reference to view/region relations even if a region has not been created.
Properties |
|
Methods |
constructor(container: DependencyContainer)
|
||||||
Creates an instance of RegionViewRegistry.
Parameters :
|
Private content |
Default value : new SimpleDictionary<string, SimpleList<() => unknown>>()
|
ContentRegistered |
Type : SubscriptionEvent<void>
|
Default value : new SubscriptionEvent()
|
Event to determine if the content of the registry changed |
GetContents | ||||||
GetContents(regionName: string)
|
||||||
Returns the registered views for the given region
Parameters :
Returns :
Iterable<unknown>
{Iterable |
RegisterViewWithRegion | |||||||||
RegisterViewWithRegion(regionName: string, viewCreationFunc: RuntimeTypeInfo | )
|
|||||||||
Registers a view for a region
Parameters :
Returns :
void
|
import { DependencyContainer, inject, injectable } from 'tsyringe';
import { iuSelect, SimpleList } from '../baseframework/collections';
import { RuntimeTypeInfo } from '../baseframework/ReflectionSupport';
import { SimpleDictionary } from '../baseframework/SimpleDictionary';
import { SubscriptionEvent } from '../utils/SubscriptionEvent';
import { ViewRegisteredEventArgs } from './events/ViewRegisteredEventArgs';
import { containerInjectionToken } from './injectionTokens';
import { IRegionViewRegistry } from './IRegionViewRegistry';
/**
* Registry to keep views being assigned to a region
*
* This class is going to hold a reference to view/region relations even
* if a region has not been created.
*
* @export
* @class RegionViewRegistry
* @implements {IRegionViewRegistry}
* @wType Microsoft.Practices.Prism.Regions.RegionViewRegistry
*/
@injectable()
export class RegionViewRegistry implements IRegionViewRegistry {
private content = new SimpleDictionary<string, SimpleList<() => unknown>>();
/**
* Creates an instance of RegionViewRegistry.
* @param {DependencyContainer} container
* @memberof RegionViewRegistry
*/
constructor(
@inject(containerInjectionToken) private container: DependencyContainer
) {}
/**
* Event to determine if the content of the registry changed
*
* @type {SubscriptionEvent<any>}
* @memberof RegionViewRegistry
* @wIgnore
*/
ContentRegistered: SubscriptionEvent<
(sender: unknown, args: ViewRegisteredEventArgs) => void
> = new SubscriptionEvent();
/**
* Returns the registered views for the given region
*
* @param {string} regionName
* @return {*} {Iterable<unknown>}
* @memberof RegionViewRegistry
*/
GetContents(regionName: string): Iterable<unknown> {
if (this.content.containsKey(regionName)) {
return iuSelect((f) => f(), this.content.getItem(regionName));
} else {
return [];
}
}
/**
* Registers a view for a region
*
* @param {string} regionName
* @param {(RuntimeTypeInfo | (() => unknown))} viewCreationFunc
* @memberof RegionViewRegistry
*/
RegisterViewWithRegion(
regionName: string,
viewCreationFunc: RuntimeTypeInfo | (() => unknown)
): void {
let views: SimpleList<() => unknown>;
let getContentDelegate: () => unknown;
if (this.content.containsKey(regionName)) {
views = this.content.getItem(regionName);
} else {
views = new SimpleList();
this.content.setItem(regionName, views);
}
getContentDelegate =
viewCreationFunc instanceof RuntimeTypeInfo
? () => this.container.resolve(viewCreationFunc.JSType)
: viewCreationFunc;
views.add(getContentDelegate);
this.ContentRegistered.fire([
this,
new ViewRegisteredEventArgs(regionName, getContentDelegate),
]);
}
}