igniteui-angular
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
100 lines • 10.4 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
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
* @template T, S
*/
export class IgxHierarchicalTransactionService extends IgxTransactionService {
/**
* @param {?} mergeChanges
* @return {?}
*/
getAggregatedChanges(mergeChanges) {
/** @type {?} */
const result = [];
this._states.forEach((state, key) => {
/** @type {?} */
const value = mergeChanges ? this.mergeValues(state.recordRef, state.value) : cloneValue(state.value);
this.clearArraysFromObject(value);
result.push((/** @type {?} */ ({ id: key, path: state.path, newValue: value, type: state.type })));
});
return result;
}
/**
* @protected
* @param {?} states
* @param {?} transaction
* @param {?=} recordRef
* @return {?}
*/
updateState(states, transaction, recordRef) {
super.updateState(states, transaction, recordRef);
// if transaction has no path, e.g. flat data source, get out
if (!transaction.path) {
return;
}
/** @type {?} */
const 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((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;
}
}
});
}
}
/**
* @param {?} data
* @param {?=} primaryKey
* @param {?=} childDataKey
* @return {?}
*/
commit(data, primaryKey, childDataKey) {
if (childDataKey) {
DataUtil.mergeHierarchicalTransactions(data, this.getAggregatedChanges(true), childDataKey, primaryKey, true);
}
else {
super.commit(data);
}
this.clear();
}
// TODO: remove this method. Force cloning to strip child arrays when needed instead
/**
* @private
* @param {?} obj
* @return {?}
*/
clearArraysFromObject(obj) {
if (obj) {
for (const prop of Object.keys(obj)) {
if (Array.isArray(obj[prop])) {
delete obj[prop];
}
}
}
}
}
IgxHierarchicalTransactionService.decorators = [
{ type: Injectable }
];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWd4LWhpZXJhcmNoaWNhbC10cmFuc2FjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2lnbml0ZXVpLWFuZ3VsYXIvIiwic291cmNlcyI6WyJsaWIvc2VydmljZXMvdHJhbnNhY3Rpb24vaWd4LWhpZXJhcmNoaWNhbC10cmFuc2FjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUE4QyxlQUFlLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDM0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7OztBQUk5QyxNQUFNLE9BQU8saUNBQ1QsU0FBUSxxQkFBMkI7Ozs7O0lBRTVCLG9CQUFvQixDQUFDLFlBQXFCOztjQUN2QyxNQUFNLEdBQVEsRUFBRTtRQUN0QixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQVEsRUFBRSxHQUFRLEVBQUUsRUFBRTs7a0JBQ2xDLEtBQUssR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO1lBQ3JHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNsQyxNQUFNLENBQUMsSUFBSSxDQUFDLG1CQUFBLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLEVBQUssQ0FBQyxDQUFDO1FBQ3ZGLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQzs7Ozs7Ozs7SUFFUyxXQUFXLENBQUMsTUFBbUIsRUFBRSxXQUFjLEVBQUUsU0FBZTtRQUN0RSxLQUFLLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFFbEQsOERBQThEO1FBQzlELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFO1lBQ25CLE9BQU87U0FDVjs7Y0FFSyxZQUFZLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1FBQy9DLElBQUksWUFBWSxFQUFFO1lBQ2QsWUFBWSxDQUFDLElBQUksR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDO1NBQ3hDO1FBRUQsdUVBQXVFO1FBQ3ZFLG9FQUFvRTtRQUNwRSwrQ0FBK0M7UUFDL0MsSUFBSSxXQUFXLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQyxNQUFNLEVBQUU7WUFDN0MsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUksRUFBRSxDQUFNLEVBQUUsRUFBRTtnQkFDNUIsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtvQkFDakQsUUFBUSxDQUFDLENBQUMsSUFBSSxFQUFFO3dCQUNaLEtBQUssZUFBZSxDQUFDLEdBQUc7NEJBQ3BCLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7NEJBQ2pCLE1BQU07d0JBQ1YsS0FBSyxlQUFlLENBQUMsTUFBTTs0QkFDdkIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQzs0QkFDNUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO3FCQUNsQztpQkFDSjtZQUNMLENBQUMsQ0FBQyxDQUFDO1NBQ047SUFDTCxDQUFDOzs7Ozs7O0lBRU0sTUFBTSxDQUFDLElBQVcsRUFBRSxVQUFnQixFQUFFLFlBQWtCO1FBQzNELElBQUksWUFBWSxFQUFFO1lBQ2QsUUFBUSxDQUFDLDZCQUE2QixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztTQUNqSDthQUFNO1lBQ0gsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN0QjtRQUNELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNqQixDQUFDOzs7Ozs7O0lBR08scUJBQXFCLENBQUMsR0FBTztRQUNqQyxJQUFJLEdBQUcsRUFBRTtZQUNMLEtBQUssTUFBTSxJQUFJLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDakMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFO29CQUMxQixPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDcEI7YUFDSjtTQUNKO0lBQ0wsQ0FBQzs7O1lBaEVKLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIaWVyYXJjaGljYWxUcmFuc2FjdGlvbiwgSGllcmFyY2hpY2FsU3RhdGUsIFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSWd4VHJhbnNhY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi9pZ3gtdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgRGF0YVV0aWwgfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZGF0YS11dGlsJztcbmltcG9ydCB7IGNsb25lVmFsdWUgfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzJztcblxuLyoqIEBleHBlcmltZW50YWwgQGhpZGRlbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIElneEhpZXJhcmNoaWNhbFRyYW5zYWN0aW9uU2VydmljZTxUIGV4dGVuZHMgSGllcmFyY2hpY2FsVHJhbnNhY3Rpb24sIFMgZXh0ZW5kcyBIaWVyYXJjaGljYWxTdGF0ZT5cbiAgICBleHRlbmRzIElneFRyYW5zYWN0aW9uU2VydmljZTxULCBTPiB7XG5cbiAgICBwdWJsaWMgZ2V0QWdncmVnYXRlZENoYW5nZXMobWVyZ2VDaGFuZ2VzOiBib29sZWFuKTogVFtdIHtcbiAgICAgICAgY29uc3QgcmVzdWx0OiBUW10gPSBbXTtcbiAgICAgICAgdGhpcy5fc3RhdGVzLmZvckVhY2goKHN0YXRlOiBTLCBrZXk6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBtZXJnZUNoYW5nZXMgPyB0aGlzLm1lcmdlVmFsdWVzKHN0YXRlLnJlY29yZFJlZiwgc3RhdGUudmFsdWUpIDogY2xvbmVWYWx1ZShzdGF0ZS52YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLmNsZWFyQXJyYXlzRnJvbU9iamVjdCh2YWx1ZSk7XG4gICAgICAgICAgICByZXN1bHQucHVzaCh7IGlkOiBrZXksIHBhdGg6IHN0YXRlLnBhdGgsIG5ld1ZhbHVlOiB2YWx1ZSwgdHlwZTogc3RhdGUudHlwZSB9IGFzIFQpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgdXBkYXRlU3RhdGUoc3RhdGVzOiBNYXA8YW55LCBTPiwgdHJhbnNhY3Rpb246IFQsIHJlY29yZFJlZj86IGFueSk6IHZvaWQge1xuICAgICAgICBzdXBlci51cGRhdGVTdGF0ZShzdGF0ZXMsIHRyYW5zYWN0aW9uLCByZWNvcmRSZWYpO1xuXG4gICAgICAgIC8vICBpZiB0cmFuc2FjdGlvbiBoYXMgbm8gcGF0aCwgZS5nLiBmbGF0IGRhdGEgc291cmNlLCBnZXQgb3V0XG4gICAgICAgIGlmICghdHJhbnNhY3Rpb24ucGF0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY3VycmVudFN0YXRlID0gc3RhdGVzLmdldCh0cmFuc2FjdGlvbi5pZCk7XG4gICAgICAgIGlmIChjdXJyZW50U3RhdGUpIHtcbiAgICAgICAgICAgIGN1cnJlbnRTdGF0ZS5wYXRoID0gdHJhbnNhY3Rpb24ucGF0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vICBpZiB0cmFuc2FjdGlvbiBoYXMgcGF0aCwgSGllcmFyY2hpY2FsIGRhdGEgc291cmNlLCBhbmQgaXQgaXMgREVMRVRFXG4gICAgICAgIC8vICB0eXBlIHRyYW5zYWN0aW9uIGZvciBhbGwgY2hpbGQgcm93cyByZW1vdmUgQUREIHN0YXRlcyBhbmQgdXBkYXRlXG4gICAgICAgIC8vICB0cmFuc2FjdGlvbiB0eXBlIGFuZCB2YWx1ZSBvZiBVUERBVEUgc3RhdGVzXG4gICAgICAgIGlmICh0cmFuc2FjdGlvbi50eXBlID09PSBUcmFuc2FjdGlvblR5cGUuREVMRVRFKSB7XG4gICAgICAgICAgICBzdGF0ZXMuZm9yRWFjaCgodjogUywgazogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHYucGF0aCAmJiB2LnBhdGguaW5kZXhPZih0cmFuc2FjdGlvbi5pZCkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodi50eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5BREQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVzLmRlbGV0ZShrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlVQREFURTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZXMuZ2V0KGspLnR5cGUgPSBUcmFuc2FjdGlvblR5cGUuREVMRVRFO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlcy5nZXQoaykudmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgY29tbWl0KGRhdGE6IGFueVtdLCBwcmltYXJ5S2V5PzogYW55LCBjaGlsZERhdGFLZXk/OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoaWxkRGF0YUtleSkge1xuICAgICAgICAgICAgRGF0YVV0aWwubWVyZ2VIaWVyYXJjaGljYWxUcmFuc2FjdGlvbnMoZGF0YSwgdGhpcy5nZXRBZ2dyZWdhdGVkQ2hhbmdlcyh0cnVlKSwgY2hpbGREYXRhS2V5LCBwcmltYXJ5S2V5LCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN1cGVyLmNvbW1pdChkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgLy8gIFRPRE86IHJlbW92ZSB0aGlzIG1ldGhvZC4gRm9yY2UgY2xvbmluZyB0byBzdHJpcCBjaGlsZCBhcnJheXMgd2hlbiBuZWVkZWQgaW5zdGVhZFxuICAgIHByaXZhdGUgY2xlYXJBcnJheXNGcm9tT2JqZWN0KG9iajoge30pIHtcbiAgICAgICAgaWYgKG9iaikge1xuICAgICAgICAgICAgZm9yIChjb25zdCBwcm9wIG9mIE9iamVjdC5rZXlzKG9iaikpIHtcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmpbcHJvcF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBvYmpbcHJvcF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG4iXX0=