igniteui-angular
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
219 lines • 16 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { EventEmitter, Injectable } from '@angular/core';
import { isObject, mergeObjects, cloneValue } from '../../core/utils';
/**
* @template T, S
*/
export class IgxBaseTransactionService {
constructor() {
this._isPending = false;
this._pendingTransactions = [];
this._pendingStates = new Map();
/**
* \@inheritdoc
*/
this.onStateUpdate = new EventEmitter();
}
/**
* \@inheritdoc
* @return {?}
*/
get canRedo() {
return false;
}
/**
* \@inheritdoc
* @return {?}
*/
get canUndo() {
return false;
}
/**
* \@inheritdoc
* @return {?}
*/
get enabled() {
return this._isPending;
}
/**
* \@inheritdoc
* @param {?} transaction
* @param {?=} recordRef
* @return {?}
*/
add(transaction, recordRef) {
if (this._isPending) {
this.updateState(this._pendingStates, transaction, recordRef);
this._pendingTransactions.push(transaction);
}
}
/**
* \@inheritdoc
* @param {?=} id
* @return {?}
*/
getTransactionLog(id) { return []; }
/**
* \@inheritdoc
* @return {?}
*/
undo() { }
/**
* \@inheritdoc
* @return {?}
*/
redo() { }
/**
* \@inheritdoc
* @param {?} mergeChanges
* @return {?}
*/
getAggregatedChanges(mergeChanges) {
/** @type {?} */
const result = [];
this._pendingStates.forEach((state, key) => {
/** @type {?} */
const value = mergeChanges ? this.getAggregatedValue(key, mergeChanges) : state.value;
result.push((/** @type {?} */ ({ id: key, newValue: value, type: state.type })));
});
return result;
}
/**
* \@inheritdoc
* @param {?} id
* @return {?}
*/
getState(id) {
return this._pendingStates.get(id);
}
/**
* \@inheritdoc
* @param {?} id
* @param {?} mergeChanges
* @return {?}
*/
getAggregatedValue(id, mergeChanges) {
/** @type {?} */
const state = this._pendingStates.get(id);
if (!state) {
return null;
}
if (mergeChanges) {
return this.updateValue(state);
}
return state.value;
}
/**
* \@inheritdoc
* @param {?} data
* @return {?}
*/
commit(data) { }
/**
* \@inheritdoc
* @return {?}
*/
clear() {
this._pendingStates.clear();
this._pendingTransactions = [];
}
/**
* \@inheritdoc
* @return {?}
*/
startPending() {
this._isPending = true;
}
/**
* \@inheritdoc
* @param {?} commit
* @return {?}
*/
endPending(commit) {
this._isPending = false;
this._pendingStates.clear();
this._pendingTransactions = [];
}
/**
* Updates the provided states collection according to passed transaction and recordRef
* @protected
* @param {?} states States collection to apply the update to
* @param {?} transaction Transaction to apply to the current state
* @param {?=} recordRef Reference to the value of the record in data source, if any, where transaction should be applied
* @return {?}
*/
updateState(states, transaction, recordRef) {
/** @type {?} */
let state = states.get(transaction.id);
if (state) {
if (isObject(state.value)) {
mergeObjects(state.value, transaction.newValue);
}
else {
state.value = transaction.newValue;
}
}
else {
state = (/** @type {?} */ ({ value: cloneValue(transaction.newValue), recordRef: recordRef, type: transaction.type }));
states.set(transaction.id, state);
}
}
/**
* Updates the recordRef of the provided state with all the changes in the state. Accepts primitive and object value types
* @protected
* @param {?} state State to update value for
* @return {?} updated value including all the changes in provided state
*/
updateValue(state) {
return this.mergeValues(state.recordRef, state.value);
}
/**
* Merges second values in first value and the result in empty object. If values are primitive type
* returns second value if exists, or first value.
* @protected
* @template U
* @param {?} first Value to merge into
* @param {?} second Value to merge
* @return {?}
*/
mergeValues(first, second) {
/** @type {?} */
let result;
if (isObject(first) || isObject(second)) {
result = mergeObjects(mergeObjects({}, first), second);
}
else {
result = second ? second : first;
}
return result;
}
}
IgxBaseTransactionService.decorators = [
{ type: Injectable }
];
if (false) {
/**
* @type {?}
* @protected
*/
IgxBaseTransactionService.prototype._isPending;
/**
* @type {?}
* @protected
*/
IgxBaseTransactionService.prototype._pendingTransactions;
/**
* @type {?}
* @protected
*/
IgxBaseTransactionService.prototype._pendingStates;
/**
* \@inheritdoc
* @type {?}
*/
IgxBaseTransactionService.prototype.onStateUpdate;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS10cmFuc2FjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2lnbml0ZXVpLWFuZ3VsYXIvIiwic291cmNlcyI6WyJsaWIvc2VydmljZXMvdHJhbnNhY3Rpb24vYmFzZS10cmFuc2FjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQ0EsT0FBTyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7Ozs7QUFHdEUsTUFBTSxPQUFPLHlCQUF5QjtJQUR0QztRQUVjLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFDbkIseUJBQW9CLEdBQVEsRUFBRSxDQUFDO1FBQy9CLG1CQUFjLEdBQWdCLElBQUksR0FBRyxFQUFFLENBQUM7Ozs7UUEwQjNDLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztJQXNJcEQsQ0FBQzs7Ozs7SUEzSkcsSUFBVyxPQUFPO1FBQ2QsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQzs7Ozs7SUFLRCxJQUFXLE9BQU87UUFDZCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDOzs7OztJQUtELElBQVcsT0FBTztRQUNkLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUMzQixDQUFDOzs7Ozs7O0lBVU0sR0FBRyxDQUFDLFdBQWMsRUFBRSxTQUFlO1FBQ3RDLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNqQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQzlELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDL0M7SUFDTCxDQUFDOzs7Ozs7SUFLRCxpQkFBaUIsQ0FBQyxFQUFRLElBQVMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDOzs7OztJQUsvQyxJQUFJLEtBQVcs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O1lBQ3BDLE1BQVM7UUFDYixJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDckMsTUFBTSxHQUFHLFlBQVksQ0FBQyxZQUFZLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQzFEO2FBQU07WUFDSCxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztTQUNwQztRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7OztZQW5LSixVQUFVOzs7Ozs7O0lBRVAsK0NBQTZCOzs7OztJQUM3Qix5REFBeUM7Ozs7O0lBQ3pDLG1EQUFrRDs7Ozs7SUEwQmxELGtEQUFnRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRyYW5zYWN0aW9uU2VydmljZSwgVHJhbnNhY3Rpb24sIFN0YXRlIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGlzT2JqZWN0LCBtZXJnZU9iamVjdHMsIGNsb25lVmFsdWUgfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIElneEJhc2VUcmFuc2FjdGlvblNlcnZpY2U8VCBleHRlbmRzIFRyYW5zYWN0aW9uLCBTIGV4dGVuZHMgU3RhdGU+IGltcGxlbWVudHMgVHJhbnNhY3Rpb25TZXJ2aWNlPFQsIFM+IHtcbiAgICBwcm90ZWN0ZWQgX2lzUGVuZGluZyA9IGZhbHNlO1xuICAgIHByb3RlY3RlZCBfcGVuZGluZ1RyYW5zYWN0aW9uczogVFtdID0gW107XG4gICAgcHJvdGVjdGVkIF9wZW5kaW5nU3RhdGVzOiBNYXA8YW55LCBTPiA9IG5ldyBNYXAoKTtcblxuICAgIC8qKlxuICAgICAqIEBpbmhlcml0ZG9jXG4gICAgICovXG4gICAgcHVibGljIGdldCBjYW5SZWRvKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGluaGVyaXRkb2NcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGNhblVuZG8oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaW5oZXJpdGRvY1xuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgZW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzUGVuZGluZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaW5oZXJpdGRvY1xuICAgICAqL1xuICAgIHB1YmxpYyBvblN0YXRlVXBkYXRlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgLyoqXG4gICAgICogQGluaGVyaXRkb2NcbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkKHRyYW5zYWN0aW9uOiBULCByZWNvcmRSZWY/OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzUGVuZGluZykge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVTdGF0ZSh0aGlzLl9wZW5kaW5nU3RhdGVzLCB0cmFuc2FjdGlvbiwgcmVjb3JkUmVmKTtcbiAgICAgICAgICAgIHRoaXMuX3BlbmRpbmdUcmFuc2FjdGlvbnMucHVzaCh0cmFuc2FjdGlvbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaW5oZXJpdGRvY1xuICAgICAqL1xuICAgIGdldFRyYW5zYWN0aW9uTG9nKGlkPzogYW55KTogVFtdIHsgcmV0dXJuIFtdOyB9XG5cbiAgICAvKipcbiAgICAgKiBAaW5oZXJpdGRvY1xuICAgICAqL1xuICAgIHVuZG8oKTogdm9pZCB7IH1cblxuICAgIC8qKlxuICAgICAqIEBpbmhlcml0ZG9jXG4gICAgICovXG4gICAgcmVkbygpOiB2b2lkIHsgfVxuXG4gICAgLyoqXG4gICAgICogQGluaGVyaXRkb2NcbiAgICAgKi9cbiAgICBnZXRBZ2dyZWdhdGVkQ2hhbmdlcyhtZXJnZUNoYW5nZXM6IGJvb2xlYW4pOiBUW10ge1xuICAgICAgICBjb25zdCByZXN1bHQ6IFRbXSA9IFtdO1xuICAgICAgICB0aGlzLl9wZW5kaW5nU3RhdGVzLmZvckVhY2goKHN0YXRlOiBTLCBrZXk6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBtZXJnZUNoYW5nZXMgPyB0aGlzLmdldEFnZ3JlZ2F0ZWRWYWx1ZShrZXksIG1lcmdlQ2hhbmdlcykgOiBzdGF0ZS52YWx1ZTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHsgaWQ6IGtleSwgbmV3VmFsdWU6IHZhbHVlLCB0eXBlOiBzdGF0ZS50eXBlIH0gYXMgVCk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBpbmhlcml0ZG9jXG4gICAgICovXG4gICAgcHVibGljIGdldFN0YXRlKGlkOiBhbnkpOiBTIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BlbmRpbmdTdGF0ZXMuZ2V0KGlkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaW5oZXJpdGRvY1xuICAgICAqL1xuICAgIHB1YmxpYyBnZXRBZ2dyZWdhdGVkVmFsdWUoaWQ6IGFueSwgbWVyZ2VDaGFuZ2VzOiBib29sZWFuKTogYW55IHtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLl9wZW5kaW5nU3RhdGVzLmdldChpZCk7XG4gICAgICAgIGlmICghc3RhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXJnZUNoYW5nZXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZVZhbHVlKHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RhdGUudmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGluaGVyaXRkb2NcbiAgICAgKi9cbiAgICBjb21taXQoZGF0YTogYW55W10pOiB2b2lkIHsgfVxuXG4gICAgLyoqXG4gICAgICogQGluaGVyaXRkb2NcbiAgICAgKi9cbiAgICBjbGVhcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcGVuZGluZ1N0YXRlcy5jbGVhcigpO1xuICAgICAgICB0aGlzLl9wZW5kaW5nVHJhbnNhY3Rpb25zID0gW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGluaGVyaXRkb2NcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhcnRQZW5kaW5nKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9pc1BlbmRpbmcgPSB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBpbmhlcml0ZG9jXG4gICAgICovXG4gICAgcHVibGljIGVuZFBlbmRpbmcoY29tbWl0OiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2lzUGVuZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9wZW5kaW5nU3RhdGVzLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuX3BlbmRpbmdUcmFuc2FjdGlvbnMgPSBbXTtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgdGhlIHByb3ZpZGVkIHN0YXRlcyBjb2xsZWN0aW9uIGFjY29yZGluZyB0byBwYXNzZWQgdHJhbnNhY3Rpb24gYW5kIHJlY29yZFJlZlxuICAgICAqIEBwYXJhbSBzdGF0ZXMgU3RhdGVzIGNvbGxlY3Rpb24gdG8gYXBwbHkgdGhlIHVwZGF0ZSB0b1xuICAgICAqIEBwYXJhbSB0cmFuc2FjdGlvbiBUcmFuc2FjdGlvbiB0byBhcHBseSB0byB0aGUgY3VycmVudCBzdGF0ZVxuICAgICAqIEBwYXJhbSByZWNvcmRSZWYgUmVmZXJlbmNlIHRvIHRoZSB2YWx1ZSBvZiB0aGUgcmVjb3JkIGluIGRhdGEgc291cmNlLCBpZiBhbnksIHdoZXJlIHRyYW5zYWN0aW9uIHNob3VsZCBiZSBhcHBsaWVkXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHVwZGF0ZVN0YXRlKHN0YXRlczogTWFwPGFueSwgUz4sIHRyYW5zYWN0aW9uOiBULCByZWNvcmRSZWY/OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgbGV0IHN0YXRlID0gc3RhdGVzLmdldCh0cmFuc2FjdGlvbi5pZCk7XG4gICAgICAgIGlmIChzdGF0ZSkge1xuICAgICAgICAgICAgaWYgKGlzT2JqZWN0KHN0YXRlLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgIG1lcmdlT2JqZWN0cyhzdGF0ZS52YWx1ZSwgdHJhbnNhY3Rpb24ubmV3VmFsdWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdGF0ZS52YWx1ZSA9IHRyYW5zYWN0aW9uLm5ld1ZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RhdGUgPSB7IHZhbHVlOiBjbG9uZVZhbHVlKHRyYW5zYWN0aW9uLm5ld1ZhbHVlKSwgcmVjb3JkUmVmOiByZWNvcmRSZWYsIHR5cGU6IHRyYW5zYWN0aW9uLnR5cGUgfSBhcyBTO1xuICAgICAgICAgICAgc3RhdGVzLnNldCh0cmFuc2FjdGlvbi5pZCwgc3RhdGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlcyB0aGUgcmVjb3JkUmVmIG9mIHRoZSBwcm92aWRlZCBzdGF0ZSB3aXRoIGFsbCB0aGUgY2hhbmdlcyBpbiB0aGUgc3RhdGUuIEFjY2VwdHMgcHJpbWl0aXZlIGFuZCBvYmplY3QgdmFsdWUgdHlwZXNcbiAgICAgKiBAcGFyYW0gc3RhdGUgU3RhdGUgdG8gdXBkYXRlIHZhbHVlIGZvclxuICAgICAqIEByZXR1cm5zIHVwZGF0ZWQgdmFsdWUgaW5jbHVkaW5nIGFsbCB0aGUgY2hhbmdlcyBpbiBwcm92aWRlZCBzdGF0ZVxuICAgICAqL1xuICAgIHByb3RlY3RlZCB1cGRhdGVWYWx1ZShzdGF0ZTogUykge1xuICAgICAgICByZXR1cm4gdGhpcy5tZXJnZVZhbHVlcyhzdGF0ZS5yZWNvcmRSZWYsIHN0YXRlLnZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNZXJnZXMgc2Vjb25kIHZhbHVlcyBpbiBmaXJzdCB2YWx1ZSBhbmQgdGhlIHJlc3VsdCBpbiBlbXB0eSBvYmplY3QuIElmIHZhbHVlcyBhcmUgcHJpbWl0aXZlIHR5cGVcbiAgICAgKiByZXR1cm5zIHNlY29uZCB2YWx1ZSBpZiBleGlzdHMsIG9yIGZpcnN0IHZhbHVlLlxuICAgICAqIEBwYXJhbSBmaXJzdCBWYWx1ZSB0byBtZXJnZSBpbnRvXG4gICAgICogQHBhcmFtIHNlY29uZCBWYWx1ZSB0byBtZXJnZVxuICAgICAqL1xuICAgIHByb3RlY3RlZCBtZXJnZVZhbHVlczxVPihmaXJzdDogVSwgc2Vjb25kOiBVKTogVSB7XG4gICAgICAgIGxldCByZXN1bHQ6IFU7XG4gICAgICAgIGlmIChpc09iamVjdChmaXJzdCkgfHwgaXNPYmplY3Qoc2Vjb25kKSkge1xuICAgICAgICAgICAgcmVzdWx0ID0gbWVyZ2VPYmplY3RzKG1lcmdlT2JqZWN0cyh7fSwgZmlyc3QpLCBzZWNvbmQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0ID0gc2Vjb25kID8gc2Vjb25kIDogZmlyc3Q7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4iXX0=