@catull/igniteui-angular
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
158 lines • 14.9 kB
JavaScript
import { __decorate } from "tslib";
import { EventEmitter, Injectable } from '@angular/core';
import { isObject, mergeObjects, cloneValue } from '../../core/utils';
let IgxBaseTransactionService = class IgxBaseTransactionService {
constructor() {
this._isPending = false;
this._pendingTransactions = [];
this._pendingStates = new Map();
/**
* @inheritdoc
*/
this.onStateUpdate = new EventEmitter();
}
/**
* @inheritdoc
*/
get canRedo() {
return false;
}
/**
* @inheritdoc
*/
get canUndo() {
return false;
}
/**
* @inheritdoc
*/
get enabled() {
return this._isPending;
}
/**
* @inheritdoc
*/
add(transaction, recordRef) {
if (this._isPending) {
this.updateState(this._pendingStates, transaction, recordRef);
this._pendingTransactions.push(transaction);
}
}
/**
* @inheritdoc
*/
getTransactionLog(id) { return []; }
/**
* @inheritdoc
*/
undo() { }
/**
* @inheritdoc
*/
redo() { }
/**
* @inheritdoc
*/
getAggregatedChanges(mergeChanges) {
const result = [];
this._pendingStates.forEach((state, key) => {
const value = mergeChanges ? this.getAggregatedValue(key, mergeChanges) : state.value;
result.push({ id: key, newValue: value, type: state.type });
});
return result;
}
/**
* @inheritdoc
*/
getState(id) {
return this._pendingStates.get(id);
}
/**
* @inheritdoc
*/
getAggregatedValue(id, mergeChanges) {
const state = this._pendingStates.get(id);
if (!state) {
return null;
}
if (mergeChanges) {
return this.updateValue(state);
}
return state.value;
}
/**
* @inheritdoc
*/
commit(data, id) { }
/**
* @inheritdoc
*/
clear(id) {
this._pendingStates.clear();
this._pendingTransactions = [];
}
/**
* @inheritdoc
*/
startPending() {
this._isPending = true;
}
/**
* @inheritdoc
*/
endPending(commit) {
this._isPending = false;
this._pendingStates.clear();
this._pendingTransactions = [];
}
/**
* Updates the provided states collection according to passed transaction and recordRef
* @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
*/
updateState(states, transaction, recordRef) {
let state = states.get(transaction.id);
if (state) {
if (isObject(state.value)) {
mergeObjects(state.value, transaction.newValue);
}
else {
state.value = transaction.newValue;
}
}
else {
state = { 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
* @param state State to update value for
* @returns 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.
* @param first Value to merge into
* @param second Value to merge
*/
mergeValues(first, second) {
let result;
if (isObject(first) || isObject(second)) {
result = mergeObjects(mergeObjects({}, first), second);
}
else {
result = second ? second : first;
}
return result;
}
};
IgxBaseTransactionService = __decorate([
Injectable()
], IgxBaseTransactionService);
export { IgxBaseTransactionService };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS10cmFuc2FjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2lnbml0ZXVpLWFuZ3VsYXIvIiwic291cmNlcyI6WyJsaWIvc2VydmljZXMvdHJhbnNhY3Rpb24vYmFzZS10cmFuc2FjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsT0FBTyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFHdEUsSUFBYSx5QkFBeUIsR0FBdEMsTUFBYSx5QkFBeUI7SUFBdEM7UUFDYyxlQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ25CLHlCQUFvQixHQUFRLEVBQUUsQ0FBQztRQUMvQixtQkFBYyxHQUFnQixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBdUJsRDs7V0FFRztRQUNJLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztJQXNJcEQsQ0FBQztJQTlKRzs7T0FFRztJQUNILElBQVcsT0FBTztRQUNkLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsT0FBTztRQUNkLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsT0FBTztRQUNkLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUMzQixDQUFDO0lBT0Q7O09BRUc7SUFDSSxHQUFHLENBQUMsV0FBYyxFQUFFLFNBQWU7UUFDdEMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDOUQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUMvQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNILGlCQUFpQixDQUFDLEVBQVEsSUFB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QUlHO0lBQ08sV0FBVyxDQUFDLEtBQVE7UUFDMUIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRDs7Ozs7T0FLRztJQUNPLFdBQVcsQ0FBSSxLQUFRLEVBQUUsTUFBUztRQUN4QyxJQUFJLE1BQVMsQ0FBQztRQUNkLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNyQyxNQUFNLEdBQUcsWUFBWSxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDMUQ7YUFBTTtZQUNILE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1NBQ3BDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztDQUNKLENBQUE7QUFuS1kseUJBQXlCO0lBRHJDLFVBQVUsRUFBRTtHQUNBLHlCQUF5QixDQW1LckM7U0FuS1kseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVHJhbnNhY3Rpb25TZXJ2aWNlLCBUcmFuc2FjdGlvbiwgU3RhdGUgfSBmcm9tICcuL3RyYW5zYWN0aW9uJztcbmltcG9ydCB7IEV2ZW50RW1pdHRlciwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaXNPYmplY3QsIG1lcmdlT2JqZWN0cywgY2xvbmVWYWx1ZSB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgSWd4QmFzZVRyYW5zYWN0aW9uU2VydmljZTxUIGV4dGVuZHMgVHJhbnNhY3Rpb24sIFMgZXh0ZW5kcyBTdGF0ZT4gaW1wbGVtZW50cyBUcmFuc2FjdGlvblNlcnZpY2U8VCwgUz4ge1xuICAgIHByb3RlY3RlZCBfaXNQZW5kaW5nID0gZmFsc2U7XG4gICAgcHJvdGVjdGVkIF9wZW5kaW5nVHJhbnNhY3Rpb25zOiBUW10gPSBbXTtcbiAgICBwcm90ZWN0ZWQgX3BlbmRpbmdTdGF0ZXM6IE1hcDxhbnksIFM+ID0gbmV3IE1hcCgpO1xuXG4gICAgLyoqXG4gICAgICogQGluaGVyaXRkb2NcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGNhblJlZG8oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaW5oZXJpdGRvY1xuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgY2FuVW5kbygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBpbmhlcml0ZG9jXG4gICAgICovXG4gICAgcHVibGljIGdldCBlbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNQZW5kaW5nO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBpbmhlcml0ZG9jXG4gICAgICovXG4gICAgcHVibGljIG9uU3RhdGVVcGRhdGUgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaW5oZXJpdGRvY1xuICAgICAqL1xuICAgIHB1YmxpYyBhZGQodHJhbnNhY3Rpb246IFQsIHJlY29yZFJlZj86IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5faXNQZW5kaW5nKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVN0YXRlKHRoaXMuX3BlbmRpbmdTdGF0ZXMsIHRyYW5zYWN0aW9uLCByZWNvcmRSZWYpO1xuICAgICAgICAgICAgdGhpcy5fcGVuZGluZ1RyYW5zYWN0aW9ucy5wdXNoKHRyYW5zYWN0aW9uKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBpbmhlcml0ZG9jXG4gICAgICovXG4gICAgZ2V0VHJhbnNhY3Rpb25Mb2coaWQ/OiBhbnkpOiBUW10geyByZXR1cm4gW107IH1cblxuICAgIC8qKlxuICAgICAqIEBpbmhlcml0ZG9jXG4gICAgICovXG4gICAgdW5kbygpOiB2b2lkIHsgfVxuXG4gICAgLyoqXG4gICAgICogQGluaGVyaXRkb2NcbiAgICAgKi9cbiAgICByZWRvKCk6IHZvaWQgeyB9XG5cbiAgICAvKipcbiAgICAgKiBAaW5oZXJpdGRvY1xuICAgICAqL1xuICAgIGdldEFnZ3JlZ2F0ZWRDaGFuZ2VzKG1lcmdlQ2hhbmdlczogYm9vbGVhbik6IFRbXSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdDogVFtdID0gW107XG4gICAgICAgIHRoaXMuX3BlbmRpbmdTdGF0ZXMuZm9yRWFjaCgoc3RhdGU6IFMsIGtleTogYW55KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IG1lcmdlQ2hhbmdlcyA/IHRoaXMuZ2V0QWdncmVnYXRlZFZhbHVlKGtleSwgbWVyZ2VDaGFuZ2VzKSA6IHN0YXRlLnZhbHVlO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goeyBpZDoga2V5LCBuZXdWYWx1ZTogdmFsdWUsIHR5cGU6IHN0YXRlLnR5cGUgfSBhcyBUKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGluaGVyaXRkb2NcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0U3RhdGUoaWQ6IGFueSk6IFMge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGVuZGluZ1N0YXRlcy5nZXQoaWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBpbmhlcml0ZG9jXG4gICAgICovXG4gICAgcHVibGljIGdldEFnZ3JlZ2F0ZWRWYWx1ZShpZDogYW55LCBtZXJnZUNoYW5nZXM6IGJvb2xlYW4pOiBhbnkge1xuICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuX3BlbmRpbmdTdGF0ZXMuZ2V0KGlkKTtcbiAgICAgICAgaWYgKCFzdGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1lcmdlQ2hhbmdlcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlVmFsdWUoc3RhdGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdGF0ZS52YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaW5oZXJpdGRvY1xuICAgICAqL1xuICAgIGNvbW1pdChkYXRhOiBhbnlbXSwgaWQ/OiBhbnkpOiB2b2lkIHsgfVxuXG4gICAgLyoqXG4gICAgICogQGluaGVyaXRkb2NcbiAgICAgKi9cbiAgICBjbGVhcihpZD86IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9wZW5kaW5nU3RhdGVzLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuX3BlbmRpbmdUcmFuc2FjdGlvbnMgPSBbXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaW5oZXJpdGRvY1xuICAgICAqL1xuICAgIHB1YmxpYyBzdGFydFBlbmRpbmcoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2lzUGVuZGluZyA9IHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGluaGVyaXRkb2NcbiAgICAgKi9cbiAgICBwdWJsaWMgZW5kUGVuZGluZyhjb21taXQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faXNQZW5kaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3BlbmRpbmdTdGF0ZXMuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5fcGVuZGluZ1RyYW5zYWN0aW9ucyA9IFtdO1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlcyB0aGUgcHJvdmlkZWQgc3RhdGVzIGNvbGxlY3Rpb24gYWNjb3JkaW5nIHRvIHBhc3NlZCB0cmFuc2FjdGlvbiBhbmQgcmVjb3JkUmVmXG4gICAgICogQHBhcmFtIHN0YXRlcyBTdGF0ZXMgY29sbGVjdGlvbiB0byBhcHBseSB0aGUgdXBkYXRlIHRvXG4gICAgICogQHBhcmFtIHRyYW5zYWN0aW9uIFRyYW5zYWN0aW9uIHRvIGFwcGx5IHRvIHRoZSBjdXJyZW50IHN0YXRlXG4gICAgICogQHBhcmFtIHJlY29yZFJlZiBSZWZlcmVuY2UgdG8gdGhlIHZhbHVlIG9mIHRoZSByZWNvcmQgaW4gZGF0YSBzb3VyY2UsIGlmIGFueSwgd2hlcmUgdHJhbnNhY3Rpb24gc2hvdWxkIGJlIGFwcGxpZWRcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgdXBkYXRlU3RhdGUoc3RhdGVzOiBNYXA8YW55LCBTPiwgdHJhbnNhY3Rpb246IFQsIHJlY29yZFJlZj86IGFueSk6IHZvaWQge1xuICAgICAgICBsZXQgc3RhdGUgPSBzdGF0ZXMuZ2V0KHRyYW5zYWN0aW9uLmlkKTtcbiAgICAgICAgaWYgKHN0YXRlKSB7XG4gICAgICAgICAgICBpZiAoaXNPYmplY3Qoc3RhdGUudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgbWVyZ2VPYmplY3RzKHN0YXRlLnZhbHVlLCB0cmFuc2FjdGlvbi5uZXdWYWx1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN0YXRlLnZhbHVlID0gdHJhbnNhY3Rpb24ubmV3VmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdGF0ZSA9IHsgdmFsdWU6IGNsb25lVmFsdWUodHJhbnNhY3Rpb24ubmV3VmFsdWUpLCByZWNvcmRSZWY6IHJlY29yZFJlZiwgdHlwZTogdHJhbnNhY3Rpb24udHlwZSB9IGFzIFM7XG4gICAgICAgICAgICBzdGF0ZXMuc2V0KHRyYW5zYWN0aW9uLmlkLCBzdGF0ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGVzIHRoZSByZWNvcmRSZWYgb2YgdGhlIHByb3ZpZGVkIHN0YXRlIHdpdGggYWxsIHRoZSBjaGFuZ2VzIGluIHRoZSBzdGF0ZS4gQWNjZXB0cyBwcmltaXRpdmUgYW5kIG9iamVjdCB2YWx1ZSB0eXBlc1xuICAgICAqIEBwYXJhbSBzdGF0ZSBTdGF0ZSB0byB1cGRhdGUgdmFsdWUgZm9yXG4gICAgICogQHJldHVybnMgdXBkYXRlZCB2YWx1ZSBpbmNsdWRpbmcgYWxsIHRoZSBjaGFuZ2VzIGluIHByb3ZpZGVkIHN0YXRlXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHVwZGF0ZVZhbHVlKHN0YXRlOiBTKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1lcmdlVmFsdWVzKHN0YXRlLnJlY29yZFJlZiwgc3RhdGUudmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1lcmdlcyBzZWNvbmQgdmFsdWVzIGluIGZpcnN0IHZhbHVlIGFuZCB0aGUgcmVzdWx0IGluIGVtcHR5IG9iamVjdC4gSWYgdmFsdWVzIGFyZSBwcmltaXRpdmUgdHlwZVxuICAgICAqIHJldHVybnMgc2Vjb25kIHZhbHVlIGlmIGV4aXN0cywgb3IgZmlyc3QgdmFsdWUuXG4gICAgICogQHBhcmFtIGZpcnN0IFZhbHVlIHRvIG1lcmdlIGludG9cbiAgICAgKiBAcGFyYW0gc2Vjb25kIFZhbHVlIHRvIG1lcmdlXG4gICAgICovXG4gICAgcHJvdGVjdGVkIG1lcmdlVmFsdWVzPFU+KGZpcnN0OiBVLCBzZWNvbmQ6IFUpOiBVIHtcbiAgICAgICAgbGV0IHJlc3VsdDogVTtcbiAgICAgICAgaWYgKGlzT2JqZWN0KGZpcnN0KSB8fCBpc09iamVjdChzZWNvbmQpKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBtZXJnZU9iamVjdHMobWVyZ2VPYmplY3RzKHt9LCBmaXJzdCksIHNlY29uZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQgPSBzZWNvbmQgPyBzZWNvbmQgOiBmaXJzdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbiJdfQ==