@itexpert-dev/base-universal-table
Version:
base universal table for build tables
206 lines • 9.93 kB
JavaScript
;
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