UNPKG

igniteui-angular

Version:

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

219 lines • 16 kB
/** * @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=