File

src/app/shared/widgets/widget.metadata.registry.ts

Index

Widget inputs
Widget outputs
Properties
Methods

Properties

Private Static widgets
widgets: literal type
Type : literal type
Default value : {}

Methods

Static getOrCreateWidgetDescriptor
getOrCreateWidgetDescriptor(target: any)
Parameters :
Name Type Optional
target any no
Returns : WidgetMetadata
Static getWidgetDescriptor
getWidgetDescriptor(id: string)
Parameters :
Name Type Optional
id string no
Returns : WidgetMetadata
Static registerWidget
registerWidget(target: any)
Parameters :
Name Type Optional
target any no
Returns : void
import { WidgetMetadata } from "./index";

declare var window: any;
declare var Reflect: any;

const NM_WIDGET_DESCRIPTOR = "nm:widget-descriptor";

export function registerWidgetComponents(widgets: any | any[]) {
  if (window.$widgets == null) {
    window.$widgets = [];
  }

  if (Array.isArray(widgets)) {
    window.$widgets.push(...widgets);
  } else {
    window.$widgets.push(widgets);
  }
}

export class NmWidgetMetadataRegistry {
  private static widgets: { [key: string]: WidgetMetadata } = {};

  static getOrCreateWidgetDescriptor(target: any): WidgetMetadata {
    if (!Reflect.hasOwnMetadata(NM_WIDGET_DESCRIPTOR, target)) {
      let descriptor: WidgetMetadata;

      // clone parent class's meta data configuration
      if (Reflect.hasMetadata(NM_WIDGET_DESCRIPTOR, target)) {
        let parent = Reflect.getMetadata(NM_WIDGET_DESCRIPTOR, target);
        descriptor = Object.assign({}, parent);
        descriptor.inputs = Object.assign({}, parent.inputs);
        descriptor.outputs = Object.assign({}, parent.outputs);
      } else {
        descriptor = {
          inputs: {},
          outputs: {},
        };
      }

      Reflect.defineMetadata(NM_WIDGET_DESCRIPTOR, descriptor, target);
    }

    return Reflect.getOwnMetadata(NM_WIDGET_DESCRIPTOR, target);
  }

  static registerWidget(target: any) {
    let descriptor = NmWidgetMetadataRegistry.getOrCreateWidgetDescriptor(
      target
    );

    if (!descriptor) {
      throw new Error("no descriptor found for " + JSON.stringify(target));
    }

    NmWidgetMetadataRegistry.widgets[descriptor.widgetId] = descriptor;
  }

  static getWidgetDescriptor(id: string): WidgetMetadata {
    return NmWidgetMetadataRegistry.widgets[id];
  }
}

results matching ""

    No results matching ""