UNPKG

ngx-manage

Version:

- angular class descriptor and state

184 lines 16.9 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component } from '@angular/core'; import { Input } from '@angular/core'; import { TemplateService } from './template.service'; import { BaseValueType, BaseValueProp } from './descriptor'; export class BaseComponent { /** * @param {?} template */ constructor(template) { this.template = template; this.values = []; } /** * @return {?} */ ngOnInit() { // <pre>{{Value | json}}</pre> this.template.getTemplates().subscribe((/** * @param {?} message * @return {?} */ (message) => { if (message) { //console.log('subscribe',this); /** @type {?} */ const _base_ = message.Template[BaseValueType.Text]; this.error = message.Template[BaseValueType.Error]; this.descriptor = this._value !== undefined ? Object.getOwnPropertyDescriptor(this._value.__proto__.__proto__, message.Shema) : undefined; /** @type {?} */ var all = []; /** @type {?} */ const overwriteProp = this.owner ? this.owner.prop : undefined; if (this.descriptor && this.descriptor.value) { /** @type {?} */ const v = this.descriptor.value; for (var name of v.list) { /** @type {?} */ const descriptor = v.hash[name]; /** @type {?} */ let template; if (descriptor.param.type == BaseValueType.Custom && descriptor.param.template) { template = message.Template[descriptor.param.template]; } else { template = message.Template[descriptor.param.type]; } template = template || _base_; if (descriptor.param.prop !== BaseValueProp.None) { /** @type {?} */ let prop = descriptor.param.prop == BaseValueProp.Input ? (overwriteProp && overwriteProp == BaseValueProp.Disabled ? BaseValueProp.Disabled : descriptor.param.prop) : descriptor.param.prop; all.push({ value: { target: this._value, prop: prop, name: name, owner: this.owner, param: descriptor.param, uid: Math.random().toString(36).substring(2) + Date.now().toString(36), /** * @return {?} */ get value() { return this.target[this.name]; }, /** * @param {?} value * @return {?} */ set value(value) { this.target[this.name] = value; } }, template: template }); } } } this.values = all; } })); } /** * @return {?} */ ngAfterViewInit() { } } BaseComponent.decorators = [ { type: Component, args: [{ selector: 'ngx-base', template: "<table class=\"table table-scroll\">\n <tr *ngFor=\"let data of values\">\n <ng-template \n [ngIf]=\"data.template\" \n [ngTemplateOutlet]=\"data.template\" \n [ngTemplateOutletContext]=\"{ $implicit: data.value }\"\n >\n </ng-template>\n </tr>\n</table>\n<div *ngIf=\"values.length==0 && error\">\n <ng-template \n [ngIf]=\"error\" \n [ngTemplateOutlet]=\"error\" \n [ngTemplateOutletContext]=\"{ $implicit: _value }\"\n >\n </ng-template>\n</div>\n", styles: [""] }] } ]; /** @nocollapse */ BaseComponent.ctorParameters = () => [ { type: TemplateService } ]; BaseComponent.propDecorators = { _value: [{ type: Input, args: ['value',] }], owner: [{ type: Input, args: ['owner',] }] }; if (false) { /** @type {?} */ BaseComponent.prototype._value; /** @type {?} */ BaseComponent.prototype.owner; /** * @type {?} * @private */ BaseComponent.prototype.descriptor; /** @type {?} */ BaseComponent.prototype.values; /** @type {?} */ BaseComponent.prototype.error; /** * @type {?} * @private */ BaseComponent.prototype.template; } export class TemplateBaseComponent { constructor() { } /** * @param {?} value * @return {?} */ isDisabled(value) { return value.prop == BaseValueProp.Disabled; } /** * @param {?} value * @return {?} */ isHidden(value) { return value.prop == BaseValueProp.Hidden; } /** * @param {?} value * @return {?} */ isInput(value) { return value.prop == BaseValueProp.Input; } /** * @param {?} value * @return {?} */ isText(value) { return value.prop == BaseValueProp.Text; } /** * @return {?} */ ngOnInit() { this.disabled = this.Value.prop == BaseValueProp.Disabled; if (this.Value.prop == BaseValueProp.Input || this.Value.prop == BaseValueProp.Disabled) { this.type = "text"; } else if (this.Value.prop == BaseValueProp.Hidden) { this.type = "hidden"; } } } TemplateBaseComponent.propDecorators = { Value: [{ type: Input, args: ['value',] }], Owner: [{ type: Input, args: ['owner',] }] }; if (false) { /** @type {?} */ TemplateBaseComponent.prototype.Value; /** @type {?} */ TemplateBaseComponent.prototype.Owner; /** @type {?} */ TemplateBaseComponent.prototype.type; /** @type {?} */ TemplateBaseComponent.prototype.disabled; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtbWFuYWdlLyIsInNvdXJjZXMiOlsibGliL2Jhc2UvYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFHbEQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUd0QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckQsT0FBTyxFQUFFLGFBQWEsRUFBYSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFTdkUsTUFBTSxPQUFPLGFBQWE7Ozs7SUFReEIsWUFBb0IsUUFBd0I7UUFBeEIsYUFBUSxHQUFSLFFBQVEsQ0FBZ0I7UUFKckMsV0FBTSxHQUFjLEVBQUUsQ0FBQztJQU05QixDQUFDOzs7O0lBRUQsUUFBUTtRQUVOLCtCQUErQjtRQUUvQixJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDLFNBQVM7Ozs7UUFDcEMsQ0FBQyxPQUFPLEVBQUMsRUFBRTtZQUNQLElBQUcsT0FBTyxFQUNWOzs7c0JBRVEsTUFBTSxHQUFvQixPQUFPLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUM7Z0JBQ3BFLElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ25ELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sS0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7O29CQUNuSSxHQUFHLEdBQUcsRUFBRTs7c0JBQ04sYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFL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SztRQUVkLE9BQU8sS0FBSyxDQUFDLElBQUksSUFBRSxhQUFhLENBQUMsUUFBUSxDQUFDO0lBQzVDLENBQUM7Ozs7O0lBQ0QsUUFBUSxDQUFDLEtBQUs7UUFFWixPQUFPLEtBQUssQ0FBQyxJQUFJLElBQUUsYUFBYSxDQUFDLE1BQU0sQ0FBQztJQUMxQyxDQUFDOzs7OztJQUNELE9BQU8sQ0FBQyxLQUFLO1FBRVgsT0FBTyxLQUFLLENBQUMsSUFBSSxJQUFFLGFBQWEsQ0FBQyxLQUFLLENBQUM7SUFDekMsQ0FBQzs7Ozs7SUFDRCxNQUFNLENBQUMsS0FBSztRQUVWLE9BQU8sS0FBSyxDQUFDLElBQUksSUFBRSxhQUFhLENBQUMsSUFBSSxDQUFDO0lBQ3hDLENBQUM7Ozs7SUFDRCxRQUFRO1FBRU4sSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksSUFBRSxhQUFhLENBQUMsUUFBUSxDQUFDO1FBQ3hELElBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUUsYUFBYSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksSUFBRSxhQUFhLENBQUMsUUFBUSxFQUNsRjtZQUNFLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO1NBQ3BCO2FBQ0ksSUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksSUFBRSxhQUFhLENBQUMsTUFBTSxFQUM3QztZQUNFLElBQUksQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDO1NBQ3RCO0lBQ0gsQ0FBQzs7O29CQWpDQSxLQUFLLFNBQUMsT0FBTztvQkFDYixLQUFLLFNBQUMsT0FBTzs7OztJQURkLHNDQUE0Qjs7SUFDNUIsc0NBQW1DOztJQUNuQyxxQ0FBWTs7SUFDWix5Q0FBd0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgVGVtcGxhdGVTZXJ2aWNlIH0gZnJvbSAnLi90ZW1wbGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IEJhc2VWYWx1ZVR5cGUsIEJhc2VWYWx1ZSwgQmFzZVZhbHVlUHJvcCB9IGZyb20gJy4vZGVzY3JpcHRvcic7XG5cblxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZ3gtYmFzZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9iYXNlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYmFzZS5jb21wb25lbnQuY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG4gIEBJbnB1dCgndmFsdWUnKSBfdmFsdWUgOiBhbnk7XG4gIEBJbnB1dCgnb3duZXInKSBwdWJsaWMgb3duZXIgOiBhbnk7XG4gIHByaXZhdGUgZGVzY3JpcHRvcjpQcm9wZXJ0eURlc2NyaXB0b3I7XG4gIHB1YmxpYyB2YWx1ZXM6QXJyYXk8YW55PiA9IFtdO1xuICBcbiAgcHVibGljIGVycm9yOlRlbXBsYXRlUmVmPGFueT47XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSB0ZW1wbGF0ZTpUZW1wbGF0ZVNlcnZpY2UpIFxuICB7IFxuICB9XG5cbiAgbmdPbkluaXQoKSBcbiAge1xuICAgIC8vICA8cHJlPnt7VmFsdWUgfCBqc29ufX08L3ByZT5cblxuICAgIHRoaXMudGVtcGxhdGUuZ2V0VGVtcGxhdGVzKCkuc3Vic2NyaWJlKFxuICAgICAgKG1lc3NhZ2UpPT57XG4gICAgICAgICAgaWYobWVzc2FnZSlcbiAgICAgICAgICB7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdzdWJzY3JpYmUnLHRoaXMpO1xuICAgICAgICAgICAgY29uc3QgX2Jhc2VfOlRlbXBsYXRlUmVmPGFueT4gPSBtZXNzYWdlLlRlbXBsYXRlW0Jhc2VWYWx1ZVR5cGUuVGV4dF07XG4gICAgICAgICAgICB0aGlzLmVycm9yID0gbWVzc2FnZS5UZW1wbGF0ZVtCYXNlVmFsdWVUeXBlLkVycm9yXTtcbiAgICAgICAgICAgIHRoaXMuZGVzY3JpcHRvciA9IHRoaXMuX3ZhbHVlIT09dW5kZWZpbmVkID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzLl92YWx1ZS5fX3Byb3RvX18uX19wcm90b19fLG1lc3NhZ2UuU2hlbWEpIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgdmFyIGFsbCA9IFtdO1xuICAgICAgICAgICAgY29uc3Qgb3ZlcndyaXRlUHJvcCA9IHRoaXMub3duZXIgPyB0aGlzLm93bmVyLnByb3AgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgIGlmKHRoaXMuZGVzY3JpcHRvciAmJiB0aGlzLmRlc2NyaXB0b3IudmFsdWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNvbnN0IHYgPSB0aGlzLmRlc2NyaXB0b3IudmFsdWU7XG4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgICBmb3IodmFyIG5hbWUgb2Ygdi5saXN0KVxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVzY3JpcHRvcjpCYXNlVmFsdWUgPSB2Lmhhc2hbbmFtZV07XG4gICAgICAgICAgICAgICAgbGV0IHRlbXBsYXRlO1xuICAgICAgICAgICAgICAgIGlmKGRlc2NyaXB0b3IucGFyYW0udHlwZT09QmFzZVZhbHVlVHlwZS5DdXN0b20gJiYgZGVzY3JpcHRvci5wYXJhbS50ZW1wbGF0ZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICB0ZW1wbGF0ZSA9IG1lc3NhZ2UuVGVtcGxhdGVbZGVzY3JpcHRvci5wYXJhbS50ZW1wbGF0ZV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICB0ZW1wbGF0ZSA9IG1lc3NhZ2UuVGVtcGxhdGVbZGVzY3JpcHRvci5wYXJhbS50eXBlXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGVtcGxhdGUgPSB0ZW1wbGF0ZSB8fCBfYmFzZV87XG4gICAgICAgICAgICAgIFxuXG4gICAgICAgICAgICAgICAgaWYoZGVzY3JpcHRvci5wYXJhbS5wcm9wIT09QmFzZVZhbHVlUHJvcC5Ob25lKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGxldCBwcm9wID0gZGVzY3JpcHRvci5wYXJhbS5wcm9wPT1CYXNlVmFsdWVQcm9wLklucHV0ID9cbiAgICAgICAgICAgICAgICAgICAgKG92ZXJ3cml0ZVByb3AgJiYgb3ZlcndyaXRlUHJvcD09QmFzZVZhbHVlUHJvcC5EaXNhYmxlZCA/IEJhc2VWYWx1ZVByb3AuRGlzYWJsZWQgOiBkZXNjcmlwdG9yLnBhcmFtLnByb3ApXG4gICAgICAgICAgICAgICAgICAgIDogZGVzY3JpcHRvci5wYXJhbS5wcm9wO1xuICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICBhbGwucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlICAgICAgOiB7XG4gICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ICA6IHRoaXMuX3ZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgIHByb3AgICAgOiBwcm9wLFxuICAgICAgICAgICAgICAgICAgICAgIG5hbWUgICAgOiBuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgIG93bmVyICAgOiB0aGlzLm93bmVyLFxuICAgICAgICAgICAgICAgICAgICAgIHBhcmFtICAgOiBkZXNjcmlwdG9yLnBhcmFtLFxuICAgICAgICAgICAgICAgICAgICAgIHVpZCAgICAgOiBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMikgKyBEYXRlLm5vdygpLnRvU3RyaW5nKDM2KSxcbiAgICAgICAgICAgICAgICAgICAgICBnZXQgdmFsdWUoKSB7IHJldHVybiB0aGlzLnRhcmdldFt0aGlzLm5hbWVdfSxcbiAgICAgICAgICAgICAgICAgICAgICBzZXQgdmFsdWUodmFsdWUpIHsgXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGFyZ2V0W3RoaXMubmFtZV0gPSB2YWx1ZSBcbiAgICAgICAgICAgICAgICAgICAgICB9IFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZSAgIDogdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSBhbGw7XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdFxue1xuICBASW5wdXQoJ3ZhbHVlJykgVmFsdWUgOiBhbnk7XG4gIEBJbnB1dCgnb3duZXInKSBwdWJsaWMgT3duZXIgOiBhbnk7XG4gIHR5cGU6c3RyaW5nO1xuICBwdWJsaWMgZGlzYWJsZWQ6Qm9vbGVhbjtcblxuICBjb25zdHJ1Y3Rvcigpe31cbiAgaXNEaXNhYmxlZCh2YWx1ZSk6Qm9vbGVhblxuICB7XG4gICAgcmV0dXJuIHZhbHVlLnByb3A9PUJhc2VWYWx1ZVByb3AuRGlzYWJsZWQ7XG4gIH1cbiAgaXNIaWRkZW4odmFsdWUpOkJvb2xlYW5cbiAge1xuICAgIHJldHVybiB2YWx1ZS5wcm9wPT1CYXNlVmFsdWVQcm9wLkhpZGRlbjtcbiAgfVxuICBpc0lucHV0KHZhbHVlKTpCb29sZWFuXG4gIHtcbiAgICByZXR1cm4gdmFsdWUucHJvcD09QmFzZVZhbHVlUHJvcC5JbnB1dDtcbiAgfVxuICBpc1RleHQodmFsdWUpOkJvb2xlYW5cbiAge1xuICAgIHJldHVybiB2YWx1ZS5wcm9wPT1CYXNlVmFsdWVQcm9wLlRleHQ7XG4gIH1cbiAgbmdPbkluaXQoKSBcbiAge1xuICAgIHRoaXMuZGlzYWJsZWQgPSB0aGlzLlZhbHVlLnByb3A9PUJhc2VWYWx1ZVByb3AuRGlzYWJsZWQ7XG4gICAgaWYodGhpcy5WYWx1ZS5wcm9wPT1CYXNlVmFsdWVQcm9wLklucHV0IHx8IHRoaXMuVmFsdWUucHJvcD09QmFzZVZhbHVlUHJvcC5EaXNhYmxlZClcbiAgICB7XG4gICAgICB0aGlzLnR5cGUgPSBcInRleHRcIjtcbiAgICB9XG4gICAgZWxzZSBpZih0aGlzLlZhbHVlLnByb3A9PUJhc2VWYWx1ZVByb3AuSGlkZGVuKVxuICAgIHtcbiAgICAgIHRoaXMudHlwZSA9IFwiaGlkZGVuXCI7XG4gICAgfVxuICB9XG5cbn0iXX0=