UNPKG

@catull/igniteui-angular

Version:

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

81 lines 11.5 kB
import { __decorate } 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 */ let IgxHierarchicalTransactionService = class IgxHierarchicalTransactionService extends IgxTransactionService { getAggregatedChanges(mergeChanges) { const result = []; this._states.forEach((state, key) => { const 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; } 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; } 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; } } }); } } /** * 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 */ commit(data, primaryKey, childDataKey, id) { if (childDataKey !== undefined) { let transactions = this.getAggregatedChanges(true); if (id !== undefined) { transactions = transactions.filter(t => t.id === id); } DataUtil.mergeHierarchicalTransactions(data, transactions, childDataKey, primaryKey, true); } else { super.commit(data, id); } this.clear(id); } // TODO: remove this method. Force cloning to strip child arrays when needed instead clearArraysFromObject(obj) { if (obj) { for (const prop of Object.keys(obj)) { if (Array.isArray(obj[prop])) { delete obj[prop]; } } } } }; IgxHierarchicalTransactionService = __decorate([ Injectable() ], IgxHierarchicalTransactionService); export { IgxHierarchicalTransactionService }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWd4LWhpZXJhcmNoaWNhbC10cmFuc2FjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2lnbml0ZXVpLWFuZ3VsYXIvIiwic291cmNlcyI6WyJsaWIvc2VydmljZXMvdHJhbnNhY3Rpb24vaWd4LWhpZXJhcmNoaWNhbC10cmFuc2FjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUE4QyxlQUFlLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDM0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTlDLDRCQUE0QjtBQUU1QixJQUFhLGlDQUFpQyxHQUE5QyxNQUFhLGlDQUNULFNBQVEscUJBQTJCO0lBRTVCLG9CQUFvQixDQUFDLFlBQXFCO1FBQzdDLE1BQU0sTUFBTSxHQUFRLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQVEsRUFBRSxHQUFRLEVBQUUsRUFBRTtZQUN4QyxNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2xDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJ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Y2FsU3RhdGUsIFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSWd4VHJhbnNhY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi9pZ3gtdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgRGF0YVV0aWwgfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZGF0YS11dGlsJztcbmltcG9ydCB7IGNsb25lVmFsdWUgfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzJztcblxuLyoqIEBleHBlcmltZW50YWwgQGhpZGRlbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIElneEhpZXJhcmNoaWNhbFRyYW5zYWN0aW9uU2VydmljZTxUIGV4dGVuZHMgSGllcmFyY2hpY2FsVHJhbnNhY3Rpb24sIFMgZXh0ZW5kcyBIaWVyYXJjaGljYWxTdGF0ZT5cbiAgICBleHRlbmRzIElneFRyYW5zYWN0aW9uU2VydmljZTxULCBTPiB7XG5cbiAgICBwdWJsaWMgZ2V0QWdncmVnYXRlZENoYW5nZXMobWVyZ2VDaGFuZ2VzOiBib29sZWFuKTogVFtdIHtcbiAgICAgICAgY29uc3QgcmVzdWx0OiBUW10gPSBbXTtcbiAgICAgICAgdGhpcy5fc3RhdGVzLmZvckVhY2goKHN0YXRlOiBTLCBrZXk6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBtZXJnZUNoYW5nZXMgPyB0aGlzLm1lcmdlVmFsdWVzKHN0YXRlLnJlY29yZFJlZiwgc3RhdGUudmFsdWUpIDogY2xvbmVWYWx1ZShzdGF0ZS52YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLmNsZWFyQXJyYXlzRnJvbU9iamVjdCh2YWx1ZSk7XG4gICAgICAgICAgICByZXN1bHQucHVzaCh7IGlkOiBrZXksIHBhdGg6IHN0YXRlLnBhdGgsIG5ld1ZhbHVlOiB2YWx1ZSwgdHlwZTogc3RhdGUudHlwZSB9IGFzIFQpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgdXBkYXRlU3RhdGUoc3RhdGVzOiBNYXA8YW55LCBTPiwgdHJhbnNhY3Rpb246IFQsIHJlY29yZFJlZj86IGFueSk6IHZvaWQge1xuICAgICAgICBzdXBlci51cGRhdGVTdGF0ZShzdGF0ZXMsIHRyYW5zYWN0aW9uLCByZWNvcmRSZWYpO1xuXG4gICAgICAgIC8vICBpZiB0cmFuc2FjdGlvbiBoYXMgbm8gcGF0aCwgZS5nLiBmbGF0IGRhdGEgc291cmNlLCBnZXQgb3V0XG4gICAgICAgIGlmICghdHJhbnNhY3Rpb24ucGF0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY3VycmVudFN0YXRlID0gc3RhdGVzLmdldCh0cmFuc2FjdGlvbi5pZCk7XG4gICAgICAgIGlmIChjdXJyZW50U3RhdGUpIHtcbiAgICAgICAgICAgIGN1cnJlbnRTdGF0ZS5wYXRoID0gdHJhbnNhY3Rpb24ucGF0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vICBpZiB0cmFuc2FjdGlvbiBoYXMgcGF0aCwgSGllcmFyY2hpY2FsIGRhdGEgc291cmNlLCBhbmQgaXQgaXMgREVMRVRFXG4gICAgICAgIC8vICB0eXBlIHRyYW5zYWN0aW9uIGZvciBhbGwgY2hpbGQgcm93cyByZW1vdmUgQUREIHN0YXRlcyBhbmQgdXBkYXRlXG4gICAgICAgIC8vICB0cmFuc2FjdGlvbiB0eXBlIGFuZCB2YWx1ZSBvZiBVUERBVEUgc3RhdGVzXG4gICAgICAgIGlmICh0cmFuc2FjdGlvbi50eXBlID09PSBUcmFuc2FjdGlvblR5cGUuREVMRVRFKSB7XG4gICAgICAgICAgICBzdGF0ZXMuZm9yRWFjaCgodjogUywgazogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHYucGF0aCAmJiB2LnBhdGguaW5kZXhPZih0cmFuc2FjdGlvbi5pZCkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodi50eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5BREQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVzLmRlbGV0ZShrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlVQREFURTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZXMuZ2V0KGspLnR5cGUgPSBUcmFuc2FjdGlvblR5cGUuREVMRVRFO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlcy5nZXQoaykudmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBcHBsaWVzIGFsbCB0cmFuc2FjdGlvbnMgb3ZlciB0aGUgcHJvdmlkZWQgZGF0YVxuICAgICAqIEBwYXJhbSBkYXRhIERhdGEgc291cmNlIHRvIHVwZGF0ZVxuICAgICAqIEBwYXJhbSBwcmltYXJ5S2V5IFByaW1hcnkga2V5IG9mIHRoZSBoaWVyYXJjaGljYWwgZGF0YVxuICAgICAqIEBwYXJhbSBjaGlsZERhdGFLZXkgS3llIG9mIGNoaWxkIGRhdGEgY29sbGVjdGlvblxuICAgICAqIEBwYXJhbSBpZCBPcHRpb25hbCByZWNvcmQgaWQgdG8gY29tbWl0IHRyYW5zYWN0aW9ucyBmb3JcbiAgICAgKi9cbiAgICBwdWJsaWMgY29tbWl0KGRhdGE6IGFueVtdLCBwcmltYXJ5S2V5PzogYW55LCBjaGlsZERhdGFLZXk/OiBhbnksIGlkPzogYW55KTogdm9pZCB7XG4gICAgICAgIGlmIChjaGlsZERhdGFLZXkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbGV0IHRyYW5zYWN0aW9ucyA9IHRoaXMuZ2V0QWdncmVnYXRlZENoYW5nZXModHJ1ZSk7XG4gICAgICAgICAgICBpZiAoaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9ucyA9IHRyYW5zYWN0aW9ucy5maWx0ZXIodCA9PiB0LmlkID09PSBpZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBEYXRhVXRpbC5tZXJnZUhpZXJhcmNoaWNhbFRyYW5zYWN0aW9ucyhkYXRhLCB0cmFuc2FjdGlvbnMsIGNoaWxkRGF0YUtleSwgcHJpbWFyeUtleSwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdXBlci5jb21taXQoZGF0YSwgaWQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2xlYXIoaWQpO1xuICAgIH1cblxuICAgIC8vICBUT0RPOiByZW1vdmUgdGhpcyBtZXRob2QuIEZvcmNlIGNsb25pbmcgdG8gc3RyaXAgY2hpbGQgYXJyYXlzIHdoZW4gbmVlZGVkIGluc3RlYWRcbiAgICBwcml2YXRlIGNsZWFyQXJyYXlzRnJvbU9iamVjdChvYmo6IHt9KSB7XG4gICAgICAgIGlmIChvYmopIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcHJvcCBvZiBPYmplY3Qua2V5cyhvYmopKSB7XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2JqW3Byb3BdKSkge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgb2JqW3Byb3BdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuIl19