|
| 1 | +import {View} from 'ui/core/view'; |
| 2 | +import {TypeId, ViewClass} from 'nativescript-angular/element-registry'; |
| 3 | + |
| 4 | +var elementMap: Map<string, TypeId> = new Map<string, TypeId>(); |
| 5 | + |
| 6 | +export function registerElement(elementName: string, typeId: TypeId): void { |
| 7 | + if (elementMap.has(elementName)) { |
| 8 | + throw new Error(`Element for ${elementName} already registered.`); |
| 9 | + } else { |
| 10 | + elementMap.set(elementName, typeId); |
| 11 | + elementMap.set(elementName.toLowerCase(), typeId); |
| 12 | + } |
| 13 | +} |
| 14 | + |
| 15 | +export function getViewClass(elementName: string): ViewClass { |
| 16 | + console.log('getViewClass: ' + elementName); |
| 17 | + let typeId = elementMap.get(elementName) || |
| 18 | + elementMap.get(elementName.toLowerCase()); |
| 19 | + if (!typeId) { |
| 20 | + throw new TypeError(`No known component for element ${elementName}.`); |
| 21 | + } |
| 22 | + try { |
| 23 | + let module = require(typeId.moduleName); |
| 24 | + return module[typeId.className]; |
| 25 | + } catch (e) { |
| 26 | + throw new TypeError(`Could not load type: ${typeId.moduleName}.${typeId.className}. |
| 27 | +
|
| 28 | +${e}`); |
| 29 | + } |
| 30 | +} |
| 31 | + |
| 32 | +export function isKnownView(elementName: string): boolean { |
| 33 | + return elementMap.has(elementName) || |
| 34 | + elementMap.has(elementName.toLowerCase()); |
| 35 | +} |
| 36 | + |
| 37 | +//Register default NativeScript components |
| 38 | +registerElement("Button", {className: "Button", moduleName: "ui/button"}); |
| 39 | +registerElement("Label", {className: "Label", moduleName: "ui/label"}); |
| 40 | +registerElement("TextField", {className: "TextField", moduleName: "ui/text-field"}); |
| 41 | +registerElement("TextView", {className: "TextView", moduleName: "ui/text-view"}); |
| 42 | +registerElement("Switch", {className: "Switch", moduleName: "ui/switch"}); |
| 43 | +registerElement("StackLayout", {className: "StackLayout", moduleName: "ui/layouts/stack-layout"}); |
| 44 | +registerElement("DockLayout", {className: "DockLayout", moduleName: "ui/layouts/dock-layout"}); |
0 commit comments