FunctionRendition.ts
33 lines
| 984 B
| video/mp2t
|
TypeScriptLexer
cin
|
r65 | import { argumentNotNull } from "@implab/core-amd/safe"; | ||
cin
|
r96 | import { getItemDom } from "./Renderer"; | ||
cin
|
r65 | import { RenditionBase } from "./RenditionBase"; | ||
cin
|
r96 | import { IScope } from "./Scope"; | ||
cin
|
r65 | |||
export class FunctionRendition extends RenditionBase<Node> { | ||||
cin
|
r66 | private _component: (...args: any[]) => any; | ||
cin
|
r65 | |||
private _node: Node | undefined; | ||||
cin
|
r66 | constructor(component: (...args: any[]) => any) { | ||
cin
|
r65 | super(); | ||
argumentNotNull(component, "component"); | ||||
this._component = component; | ||||
} | ||||
cin
|
r96 | protected _create(attrs: object, children: any[], scope: IScope) { | ||
cin
|
r65 | const _attrs: any = attrs || {}; | ||
cin
|
r96 | const _children = children.map(x => getItemDom(x, scope)); | ||
this._node = getItemDom( | ||||
this._component.call(null, { ..._attrs, children: _children }), | ||||
scope | ||||
cin
|
r66 | ); | ||
cin
|
r65 | } | ||
cin
|
r66 | protected _getDomNode() { | ||
cin
|
r65 | if (!this._node) | ||
throw new Error("The instance of the widget isn't created"); | ||||
return this._node; | ||||
} | ||||
} | ||||