@netgrif/components-core
Version:
Netgrif Application engine frontend core Angular library
59 lines • 7.22 kB
JavaScript
import { Injectable } from '@angular/core';
import { LoadingEmitter } from '../../utility/loading-emitter';
import * as i0 from "@angular/core";
import * as i1 from "../../logger/services/logger.service";
import * as i2 from "../../utility/call-chain/call-chain.service";
/**
* This service handles the queuing and execution of task related events (assign, finish, cancel, delegate, setData and getData)
*/
export class EventQueueService {
_log;
_afterActionService;
_queue;
_performingEvent;
constructor(_log, _afterActionService) {
this._log = _log;
this._afterActionService = _afterActionService;
this._queue = [];
this._performingEvent = new LoadingEmitter();
}
/**
* Schedules the execution of the provided event
* @param event
*/
scheduleEvent(event) {
if (this._performingEvent.isActive) {
this._log.debug(`Adding scheduled event to queue. Position in queue: ${this._queue.length}`);
this._queue.push(event);
}
else {
this._log.debug('Event queue is empty. Executing scheduled event immediately.');
this._performingEvent.on();
this.executeEvent(event);
}
}
executeEvent(event) {
event.resolve(this._afterActionService.create(() => {
this.executeNextEventFromQueue();
}));
}
executeNextEventFromQueue() {
this._log.debug('Event finished execution.');
if (this._queue.length === 0) {
this._performingEvent.off();
this._log.debug('Last event in queue was executed.');
return;
}
this._log.debug('Executing next event in queue.');
this.executeEvent(this._queue.shift());
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: EventQueueService, deps: [{ token: i1.LoggerService }, { token: i2.CallChainService }], target: i0.ɵɵFactoryTarget.Injectable });
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: EventQueueService, providedIn: 'root' });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: EventQueueService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root'
}]
}], ctorParameters: () => [{ type: i1.LoggerService }, { type: i2.CallChainService }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtcXVldWUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25ldGdyaWYtY29tcG9uZW50cy1jb3JlL3NyYy9saWIvZXZlbnQtcXVldWUvc2VydmljZXMvZXZlbnQtcXVldWUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBR3pDLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQzs7OztBQUc3RDs7R0FFRztBQUlILE1BQU0sT0FBTyxpQkFBaUI7SUFLSjtJQUErQjtJQUgzQyxNQUFNLENBQXFCO0lBQzNCLGdCQUFnQixDQUFpQjtJQUUzQyxZQUFzQixJQUFtQixFQUFZLG1CQUFxQztRQUFwRSxTQUFJLEdBQUosSUFBSSxDQUFlO1FBQVksd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFrQjtRQUN0RixJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztJQUNqRCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksYUFBYSxDQUFDLEtBQWtCO1FBQ25DLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRTtZQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyx1REFBdUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQzdGLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzNCO2FBQU07WUFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyw4REFBOEQsQ0FBQyxDQUFDO1lBQ2hGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzVCO0lBQ0wsQ0FBQztJQUVTLFlBQVksQ0FBQyxLQUFrQjtRQUNyQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQy9DLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1FBQ3JDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDUixDQUFDO0lBRVMseUJBQXlCO1FBQy9CLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFFN0MsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDMUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLG1DQUFtQyxDQUFDLENBQUM7WUFDckQsT0FBTztTQUNWO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUMzQyxDQUFDO3dHQTFDUSxpQkFBaUI7NEdBQWpCLGlCQUFpQixjQUZkLE1BQU07OzRGQUVULGlCQUFpQjtrQkFIN0IsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtMb2dnZXJTZXJ2aWNlfSBmcm9tICcuLi8uLi9sb2dnZXIvc2VydmljZXMvbG9nZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHtRdWV1ZWRFdmVudH0gZnJvbSAnLi4vbW9kZWwvcXVldWVkLWV2ZW50JztcbmltcG9ydCB7TG9hZGluZ0VtaXR0ZXJ9IGZyb20gJy4uLy4uL3V0aWxpdHkvbG9hZGluZy1lbWl0dGVyJztcbmltcG9ydCB7Q2FsbENoYWluU2VydmljZX0gZnJvbSAnLi4vLi4vdXRpbGl0eS9jYWxsLWNoYWluL2NhbGwtY2hhaW4uc2VydmljZSc7XG5cbi8qKlxuICogVGhpcyBzZXJ2aWNlIGhhbmRsZXMgdGhlIHF1ZXVpbmcgYW5kIGV4ZWN1dGlvbiBvZiB0YXNrIHJlbGF0ZWQgZXZlbnRzIChhc3NpZ24sIGZpbmlzaCwgY2FuY2VsLCBkZWxlZ2F0ZSwgc2V0RGF0YSBhbmQgZ2V0RGF0YSlcbiAqL1xuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBFdmVudFF1ZXVlU2VydmljZSB7XG5cbiAgICBwcm90ZWN0ZWQgX3F1ZXVlOiBBcnJheTxRdWV1ZWRFdmVudD47XG4gICAgcHJvdGVjdGVkIF9wZXJmb3JtaW5nRXZlbnQ6IExvYWRpbmdFbWl0dGVyO1xuXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIF9sb2c6IExvZ2dlclNlcnZpY2UsIHByb3RlY3RlZCBfYWZ0ZXJBY3Rpb25TZXJ2aWNlOiBDYWxsQ2hhaW5TZXJ2aWNlKSB7XG4gICAgICAgIHRoaXMuX3F1ZXVlID0gW107XG4gICAgICAgIHRoaXMuX3BlcmZvcm1pbmdFdmVudCA9IG5ldyBMb2FkaW5nRW1pdHRlcigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNjaGVkdWxlcyB0aGUgZXhlY3V0aW9uIG9mIHRoZSBwcm92aWRlZCBldmVudFxuICAgICAqIEBwYXJhbSBldmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBzY2hlZHVsZUV2ZW50KGV2ZW50OiBRdWV1ZWRFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5fcGVyZm9ybWluZ0V2ZW50LmlzQWN0aXZlKSB7XG4gICAgICAgICAgICB0aGlzLl9sb2cuZGVidWcoYEFkZGluZyBzY2hlZHVsZWQgZXZlbnQgdG8gcXVldWUuIFBvc2l0aW9uIGluIHF1ZXVlOiAke3RoaXMuX3F1ZXVlLmxlbmd0aH1gKTtcbiAgICAgICAgICAgIHRoaXMuX3F1ZXVlLnB1c2goZXZlbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fbG9nLmRlYnVnKCdFdmVudCBxdWV1ZSBpcyBlbXB0eS4gRXhlY3V0aW5nIHNjaGVkdWxlZCBldmVudCBpbW1lZGlhdGVseS4nKTtcbiAgICAgICAgICAgIHRoaXMuX3BlcmZvcm1pbmdFdmVudC5vbigpO1xuICAgICAgICAgICAgdGhpcy5leGVjdXRlRXZlbnQoZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGV4ZWN1dGVFdmVudChldmVudDogUXVldWVkRXZlbnQpIHtcbiAgICAgICAgZXZlbnQucmVzb2x2ZSh0aGlzLl9hZnRlckFjdGlvblNlcnZpY2UuY3JlYXRlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZXhlY3V0ZU5leHRFdmVudEZyb21RdWV1ZSgpO1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGV4ZWN1dGVOZXh0RXZlbnRGcm9tUXVldWUoKSB7XG4gICAgICAgIHRoaXMuX2xvZy5kZWJ1ZygnRXZlbnQgZmluaXNoZWQgZXhlY3V0aW9uLicpO1xuXG4gICAgICAgIGlmICh0aGlzLl9xdWV1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuX3BlcmZvcm1pbmdFdmVudC5vZmYoKTtcbiAgICAgICAgICAgIHRoaXMuX2xvZy5kZWJ1ZygnTGFzdCBldmVudCBpbiBxdWV1ZSB3YXMgZXhlY3V0ZWQuJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9sb2cuZGVidWcoJ0V4ZWN1dGluZyBuZXh0IGV2ZW50IGluIHF1ZXVlLicpO1xuICAgICAgICB0aGlzLmV4ZWN1dGVFdmVudCh0aGlzLl9xdWV1ZS5zaGlmdCgpKTtcbiAgICB9XG59XG4iXX0=