UNPKG

@catull/igniteui-angular

Version:

Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps

98 lines 12.6 kB
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