UNPKG

@itexpert-dev/base-universal-table

Version:

base universal table for build tables

206 lines 9.93 kB
"use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); Object.defineProperty(exports, "__esModule", { value: true }); var key_value_storage_1 = require("@itexpert-dev/key-value-storage"); var rxjs_1 = require("rxjs"); var universalTableDataPreprocessors_1 = require("./universalTableDataPreprocessors"); var core_1 = require("@angular/core"); var IUniversalTableCtrl_1 = require("../../../contracts/IUniversalTableCtrl"); var IUniversalTableCellPosition_1 = require("../../../contracts/IUniversalTableCellPosition"); var IUniversalTableHeaderData_1 = require("../../../contracts/IUniversalTableHeaderData"); var UniversalTableCtrl = (function (_super) { __extends(UniversalTableCtrl, _super); function UniversalTableCtrl(initParams, config) { var _this = _super.call(this) || this; _this.headers = new rxjs_1.ReplaySubject(1); _this.rows = new rxjs_1.ReplaySubject(1); /** * @desc object for ui bind handlers and templates * @type {IUniversalTableViewScope} */ _this.viewScope = { headers: _this.headers.map(function (next) { return _this.dataPreprocessors.parseHeaders(next.viewFields, next.metadata); }), rows: _this.rows.map(function (next) { return _this.dataPreprocessors.parseData(next.viewFields, next); }), totalResult: 0 }; _this.stateStream = new rxjs_1.ReplaySubject(1); /** * @desc ctrl instance components for render UI * @type {IUniversalTableComponents} */ _this.tableComponents = {}; //storage for refs in template for inject components _this.viewContainerRefs = new key_value_storage_1.KeyValueStorage(); _this.dataPreprocessors = universalTableDataPreprocessors_1.UniversalTableDataPreprocessors; _this.config = config; _this.initParams = initParams; _this.currentState = {}; _this.stateStream.subscribe(function (next) { Object.assign(_this.currentState, next); }); _this.updateCurrentState({ isInit: false }); //fix empty components map if (!_this.initParams.hasOwnProperty('componentsMap')) { _this.initParams.componentsMap = {}; } //apply local config by default and init config Object.assign(_this.tableComponents, _this.config.getDefaultComponents(), _this.initParams.componentsMap); Object.assign(_this.currentState, _this.config.getDefaultInitTableState(), _this.initParams.initState); return _this; } UniversalTableCtrl.prototype.updateCurrentState = function (state) { this.stateStream.next(Object.assign({}, this.currentState, state)); }; UniversalTableCtrl.prototype.resolveInit = function () { this.updateCurrentState({ isInit: true }); }; ; UniversalTableCtrl.prototype.getRequireFields = function (state, request) { var requireFields; if (!state.hasOwnProperty('viewFields') || state.viewFields === null) { if (!state.hasOwnProperty('fields') || state.fields === null) { if (this.currentState === null || !this.currentState.hasOwnProperty('fields')) { requireFields = []; Object.keys(request.metadata).map(function (key) { return requireFields.push(key); }); } else { requireFields = this.currentState.fields; } } else { requireFields = state.fields; } } else { requireFields = state.viewFields; } return requireFields; }; UniversalTableCtrl.prototype.updateState = function (state, options) { var _this = this; if (state === void 0) { state = {}; } if (options === void 0) { options = { enableStateDiff: true }; } var newState = {}; if (options.enableStateDiff === true) { var diff_1 = {}; var anyDiff_1 = false; Object.keys(state).map(function (key) { var val = state[key]; if (_this.currentState[key] !== val) { anyDiff_1 = true; diff_1[key] = val; } }); if (anyDiff_1) { return this.setState(Object.assign({}, this.currentState, diff_1)); } else { return rxjs_1.Observable.empty(); } } else { Object.assign(newState, this.currentState, state); } return this.setState(newState); }; UniversalTableCtrl.prototype.setState = function (state) { var _this = this; this.updateCurrentState({ isUpdate: true }); var query = { fields: state.fields, filter: state.filter, limit: state.limit, offset: state.offset, sort: state.sort }; return this.initParams .getDataMethod(query) .map(function (next) { return Object.assign(next, { state: Object.assign(state, { totalResult: next.totalResult }) }); }) .map(function (next) { var result = Object.assign(next, { viewFields: _this.getRequireFields(next.state, next) }); return result; }) .do(function (next) { _this.headers.next(next); _this.rows.next(next); _this.updateCurrentState(Object.assign(next.state, { isUpdate: false })); }) .pluck('state'); }; UniversalTableCtrl.prototype.printContainer = function (container, componentFactoryResolver, parentInjector) { var componentKey = this.tableComponents.container; var componentFactory = this.config.componentsStorage.getComponent(componentKey); var injector = core_1.ReflectiveInjector.resolveAndCreate([{ provide: IUniversalTableCtrl_1.IUniversalTableCtrl, useValue: this }], parentInjector); var component = componentFactoryResolver.resolveComponentFactory(componentFactory); container.createComponent(component, 0, injector); }; UniversalTableCtrl.prototype.printPaginator = function (container, componentFactoryResolver, parentInjector) { var componentKey = this.tableComponents.paginator; var componentFactory = this.config.componentsStorage.getComponent(componentKey); var injector = core_1.ReflectiveInjector.resolveAndCreate([{ provide: IUniversalTableCtrl_1.IUniversalTableCtrl, useValue: this }], parentInjector); var component = componentFactoryResolver.resolveComponentFactory(componentFactory); container.createComponent(component, 0, injector); }; UniversalTableCtrl.prototype.printCell = function (container, componentFactoryResolver, parentInjector, cellPosition) { var componentKey = this.tableComponents.cell; var componentFactory = this.config.componentsStorage.getComponent(componentKey); var injector = core_1.ReflectiveInjector.resolveAndCreate([{ provide: IUniversalTableCtrl_1.IUniversalTableCtrl, useValue: this }, { provide: IUniversalTableCellPosition_1.IUniversalTableCellPosition, useValue: cellPosition }], parentInjector); var component = componentFactoryResolver.resolveComponentFactory(componentFactory); container.createComponent(component, 0, injector); }; UniversalTableCtrl.prototype.printGrid = function (container, componentFactoryResolver, parentInjector) { var componentKey = this.tableComponents.grid; var componentFactory = this.config.componentsStorage.getComponent(componentKey); var injector = core_1.ReflectiveInjector.resolveAndCreate([{ provide: IUniversalTableCtrl_1.IUniversalTableCtrl, useValue: this }], parentInjector); var component = componentFactoryResolver.resolveComponentFactory(componentFactory); container.createComponent(component, 0, injector); }; UniversalTableCtrl.prototype.printHeader = function (container, componentFactoryResolver, parentInjector, headerData) { var componentKey = this.tableComponents.headers; var componentFactory = this.config.componentsStorage.getComponent(componentKey); var injector = core_1.ReflectiveInjector.resolveAndCreate([{ provide: IUniversalTableCtrl_1.IUniversalTableCtrl, useValue: this }, { provide: IUniversalTableHeaderData_1.IUniversalTableHeaderData, useValue: headerData }], parentInjector); var component = componentFactoryResolver.resolveComponentFactory(componentFactory); container.createComponent(component, 0, injector); }; return UniversalTableCtrl; }(IUniversalTableCtrl_1.IUniversalTableCtrl)); exports.UniversalTableCtrl = UniversalTableCtrl; //# sourceMappingURL=universalTableCtrl.js.map