File

projects/wms-framework/src/lib/regionsframework/RegionViewRegistry.ts

Description

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.

Implements

IRegionViewRegistry

Index

Properties
Methods

Constructor

constructor(container: DependencyContainer)

Creates an instance of RegionViewRegistry.

Parameters :
Name Type Optional
container DependencyContainer No

Properties

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

Methods

GetContents
GetContents(regionName: string)

Returns the registered views for the given region

Parameters :
Name Type Optional
regionName string No
Returns : Iterable<unknown>

{Iterable}

RegisterViewWithRegion
RegisterViewWithRegion(regionName: string, viewCreationFunc: RuntimeTypeInfo | )

Registers a view for a region

Parameters :
Name Type Optional
regionName string No
viewCreationFunc RuntimeTypeInfo | No
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),
    ]);
  }
}

result-matching ""

    No results matching ""