@catull/igniteui-angular
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
98 lines • 12.6 kB
JavaScript
import { __decorate, __extends, __values } from "tslib";
import { TransactionType } from './transaction';
import { Injectable } from '@angular/core';
import { IgxTransactionService } from './igx-transaction';
import { DataUtil } from '../../data-operations/data-util';
import { cloneValue } from '../../core/utils';
/** @experimental @hidden */
var IgxHierarchicalTransactionService = /** @class */ (function (_super) {
__extends(IgxHierarchicalTransactionService, _super);
function IgxHierarchicalTransactionService() {
return _super !== null && _super.apply(this, arguments) || this;
}
IgxHierarchicalTransactionService.prototype.getAggregatedChanges = function (mergeChanges) {
var _this = this;
var result = [];
this._states.forEach(function (state, key) {
var value = mergeChanges ? _this.mergeValues(state.recordRef, state.value) : cloneValue(state.value);
_this.clearArraysFromObject(value);
result.push({ id: key, path: state.path, newValue: value, type: state.type });
});
return result;
};
IgxHierarchicalTransactionService.prototype.updateState = function (states, transaction, recordRef) {
_super.prototype.updateState.call(this, states, transaction, recordRef);
// if transaction has no path, e.g. flat data source, get out
if (!transaction.path) {
return;
}
var currentState = states.get(transaction.id);
if (currentState) {
currentState.path = transaction.path;
}
// if transaction has path, Hierarchical data source, and it is DELETE
// type transaction for all child rows remove ADD states and update
// transaction type and value of UPDATE states
if (transaction.type === TransactionType.DELETE) {
states.forEach(function (v, k) {
if (v.path && v.path.indexOf(transaction.id) !== -1) {
switch (v.type) {
case TransactionType.ADD:
states.delete(k);
break;
case TransactionType.UPDATE:
states.get(k).type = TransactionType.DELETE;
states.get(k).value = null;
}
}
});
}
};
/**
* Applies all transactions over the provided data
* @param data Data source to update
* @param primaryKey Primary key of the hierarchical data
* @param childDataKey Kye of child data collection
* @param id Optional record id to commit transactions for
*/
IgxHierarchicalTransactionService.prototype.commit = function (data, primaryKey, childDataKey, id) {
if (childDataKey !== undefined) {
var transactions = this.getAggregatedChanges(true);
if (id !== undefined) {
transactions = transactions.filter(function (t) { return t.id === id; });
}
DataUtil.mergeHierarchicalTransactions(data, transactions, childDataKey, primaryKey, true);
}
else {
_super.prototype.commit.call(this, data, id);
}
this.clear(id);
};
// TODO: remove this method. Force cloning to strip child arrays when needed instead
IgxHierarchicalTransactionService.prototype.clearArraysFromObject = function (obj) {
var e_1, _a;
if (obj) {
try {
for (var _b = __values(Object.keys(obj)), _c = _b.next(); !_c.done; _c = _b.next()) {
var prop = _c.value;
if (Array.isArray(obj[prop])) {
delete obj[prop];
}
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
}
finally { if (e_1) throw e_1.error; }
}
}
};
IgxHierarchicalTransactionService = __decorate([
Injectable()
], IgxHierarchicalTransactionService);
return IgxHierarchicalTransactionService;
}(IgxTransactionService));
export { IgxHierarchicalTransactionService };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWd4LWhpZXJhcmNoaWNhbC10cmFuc2FjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2lnbml0ZXVpLWFuZ3VsYXIvIiwic291cmNlcyI6WyJsaWIvc2VydmljZXMvdHJhbnNhY3Rpb24vaWd4LWhpZXJhcmNoaWNhbC10cmFuc2FjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUE4QyxlQUFlLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDM0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTlDLDRCQUE0QjtBQUU1QjtJQUNZLHFEQUEyQjtJQUR2Qzs7SUEyRUEsQ0FBQztJQXhFVSxnRUFBb0IsR0FBM0IsVUFBNEIsWUFBcUI7UUFBakQsaUJBUUM7UUFQRyxJQUFNLE1BQU0sR0FBUSxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBQyxLQUFRLEVBQUUsR0FBUTtZQUNwQyxJQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLEtBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEcsS0FBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2xDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVB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QXFCLEdBMEVoQztTQTNFWSxpQ0FBaUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIaWVyYXJjaGljYWxUcmFuc2FjdGlvbiwgSGllcmFyY2hpY2FsU3RhdGUsIFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSWd4VHJhbnNhY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi9pZ3gtdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgRGF0YVV0aWwgfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZGF0YS11dGlsJztcbmltcG9ydCB7IGNsb25lVmFsdWUgfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzJztcblxuLyoqIEBleHBlcmltZW50YWwgQGhpZGRlbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIElneEhpZXJhcmNoaWNhbFRyYW5zYWN0aW9uU2VydmljZTxUIGV4dGVuZHMgSGllcmFyY2hpY2FsVHJhbnNhY3Rpb24sIFMgZXh0ZW5kcyBIaWVyYXJjaGljYWxTdGF0ZT5cbiAgICBleHRlbmRzIElneFRyYW5zYWN0aW9uU2VydmljZTxULCBTPiB7XG5cbiAgICBwdWJsaWMgZ2V0QWdncmVnYXRlZENoYW5nZXMobWVyZ2VDaGFuZ2VzOiBib29sZWFuKTogVFtdIHtcbiAgICAgICAgY29uc3QgcmVzdWx0OiBUW10gPSBbXTtcbiAgICAgICAgdGhpcy5fc3RhdGVzLmZvckVhY2goKHN0YXRlOiBTLCBrZXk6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBtZXJnZUNoYW5nZXMgPyB0aGlzLm1lcmdlVmFsdWVzKHN0YXRlLnJlY29yZFJlZiwgc3RhdGUudmFsdWUpIDogY2xvbmVWYWx1ZShzdGF0ZS52YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLmNsZWFyQXJyYXlzRnJvbU9iamVjdCh2YWx1ZSk7XG4gICAgICAgICAgICByZXN1bHQucHVzaCh7IGlkOiBrZXksIHBhdGg6IHN0YXRlLnBhdGgsIG5ld1ZhbHVlOiB2YWx1ZSwgdHlwZTogc3RhdGUudHlwZSB9IGFzIFQpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgdXBkYXRlU3RhdGUoc3RhdGVzOiBNYXA8YW55LCBTPiwgdHJhbnNhY3Rpb246IFQsIHJlY29yZFJlZj86IGFueSk6IHZvaWQge1xuICAgICAgICBzdXBlci51cGRhdGVTdGF0ZShzdGF0ZXMsIHRyYW5zYWN0aW9uLCByZWNvcmRSZWYpO1xuXG4gICAgICAgIC8vICBpZiB0cmFuc2FjdGlvbiBoYXMgbm8gcGF0aCwgZS5nLiBmbGF0IGRhdGEgc291cmNlLCBnZXQgb3V0XG4gICAgICAgIGlmICghdHJhbnNhY3Rpb24ucGF0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY3VycmVudFN0YXRlID0gc3RhdGVzLmdldCh0cmFuc2FjdGlvbi5pZCk7XG4gICAgICAgIGlmIChjdXJyZW50U3RhdGUpIHtcbiAgICAgICAgICAgIGN1cnJlbnRTdGF0ZS5wYXRoID0gdHJhbnNhY3Rpb24ucGF0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vICBpZiB0cmFuc2FjdGlvbiBoYXMgcGF0aCwgSGllcmFyY2hpY2FsIGRhdGEgc291cmNlLCBhbmQgaXQgaXMgREVMRVRFXG4gICAgICAgIC8vICB0eXBlIHRyYW5zYWN0aW9uIGZvciBhbGwgY2hpbGQgcm93cyByZW1vdmUgQUREIHN0YXRlcyBhbmQgdXBkYXRlXG4gICAgICAgIC8vICB0cmFuc2FjdGlvbiB0eXBlIGFuZCB2YWx1ZSBvZiBVUERBVEUgc3RhdGVzXG4gICAgICAgIGlmICh0cmFuc2FjdGlvbi50eXBlID09PSBUcmFuc2FjdGlvblR5cGUuREVMRVRFKSB7XG4gICAgICAgICAgICBzdGF0ZXMuZm9yRWFjaCgodjogUywgazogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHYucGF0aCAmJiB2LnBhdGguaW5kZXhPZih0cmFuc2FjdGlvbi5pZCkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodi50eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5BREQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVzLmRlbGV0ZShrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlVQREFURTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZXMuZ2V0KGspLnR5cGUgPSBUcmFuc2FjdGlvblR5cGUuREVMRVRFO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlcy5nZXQoaykudmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBcHBsaWVzIGFsbCB0cmFuc2FjdGlvbnMgb3ZlciB0aGUgcHJvdmlkZWQgZGF0YVxuICAgICAqIEBwYXJhbSBkYXRhIERhdGEgc291cmNlIHRvIHVwZGF0ZVxuICAgICAqIEBwYXJhbSBwcmltYXJ5S2V5IFByaW1hcnkga2V5IG9mIHRoZSBoaWVyYXJjaGljYWwgZGF0YVxuICAgICAqIEBwYXJhbSBjaGlsZERhdGFLZXkgS3llIG9mIGNoaWxkIGRhdGEgY29sbGVjdGlvblxuICAgICAqIEBwYXJhbSBpZCBPcHRpb25hbCByZWNvcmQgaWQgdG8gY29tbWl0IHRyYW5zYWN0aW9ucyBmb3JcbiAgICAgKi9cbiAgICBwdWJsaWMgY29tbWl0KGRhdGE6IGFueVtdLCBwcmltYXJ5S2V5PzogYW55LCBjaGlsZERhdGFLZXk/OiBhbnksIGlkPzogYW55KTogdm9pZCB7XG4gICAgICAgIGlmIChjaGlsZERhdGFLZXkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbGV0IHRyYW5zYWN0aW9ucyA9IHRoaXMuZ2V0QWdncmVnYXRlZENoYW5nZXModHJ1ZSk7XG4gICAgICAgICAgICBpZiAoaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9ucyA9IHRyYW5zYWN0aW9ucy5maWx0ZXIodCA9PiB0LmlkID09PSBpZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBEYXRhVXRpbC5tZXJnZUhpZXJhcmNoaWNhbFRyYW5zYWN0aW9ucyhkYXRhLCB0cmFuc2FjdGlvbnMsIGNoaWxkRGF0YUtleSwgcHJpbWFyeUtleSwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdXBlci5jb21taXQoZGF0YSwgaWQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2xlYXIoaWQpO1xuICAgIH1cblxuICAgIC8vICBUT0RPOiByZW1vdmUgdGhpcyBtZXRob2QuIEZvcmNlIGNsb25pbmcgdG8gc3RyaXAgY2hpbGQgYXJyYXlzIHdoZW4gbmVlZGVkIGluc3RlYWRcbiAgICBwcml2YXRlIGNsZWFyQXJyYXlzRnJvbU9iamVjdChvYmo6IHt9KSB7XG4gICAgICAgIGlmIChvYmopIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcHJvcCBvZiBPYmplY3Qua2V5cyhvYmopKSB7XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2JqW3Byb3BdKSkge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgb2JqW3Byb3BdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuIl19