@ui-tool/core
Version:
85 lines • 12 kB
JavaScript
import { Injectable } from '@angular/core';
import { ReplaySubject } from 'rxjs';
import { StackItemDeletedEvent } from '../../../models/implementations/stacks/stack-item-deleted-event';
import { StackItemPushedEvent } from '../../../models/implementations/stacks/stack-item-pushed-event';
import { v4 } from 'uuid';
import * as i0 from "@angular/core";
export class StackService {
//#endregion
//#region Constructor
constructor() {
this.__stackCodeToContext = {};
}
//#endregion
//#region Methods
delete(stackCode, requestId) {
const context = this.__getContextByStackCode(stackCode);
const itemContextIndex = context.items.findIndex(item => item.id === requestId);
if (itemContextIndex < 0) {
return;
}
const itemContext = context.items[itemContextIndex];
if (!itemContext) {
return;
}
if (itemContext.option?.onItemBeingRemoved?.() === false) {
return;
}
context.items.splice(itemContextIndex, 1);
const stackItemDeletedEvent = new StackItemDeletedEvent(stackCode, context.items.map(x => x.id));
context.event$.next(stackItemDeletedEvent);
}
hookStackEvent(stackCode) {
const context = this.__getContextByStackCode(stackCode);
return context.event$.asObservable();
}
purge(designatedStackCode) {
if (!designatedStackCode) {
const stackCodes = Object.keys(this.__stackCodeToContext);
for (const stackCode of stackCodes) {
this.purgeByStackCode(stackCode);
}
return;
}
this.purgeByStackCode(designatedStackCode);
}
purgeByStackCode(stackCode) {
const context = this.__getContextByStackCode(stackCode);
context.items.splice(0);
const stackItemDeletedEvent = new StackItemDeletedEvent(stackCode, context.items.map(x => x.id));
context.event$.next(stackItemDeletedEvent);
}
push(stackCode, options) {
// Initialize request id.
const requestId = v4();
const context = this.__getContextByStackCode(stackCode);
if (options?.purge) {
context.items.splice(0);
}
context.items.push({
id: requestId,
option: options
});
const itemIds = context.items.map(x => x.id);
const stackItemPushedEvent = new StackItemPushedEvent(stackCode, requestId, itemIds);
context.event$.next(stackItemPushedEvent);
return requestId;
}
//#endregion
//#region Internal methods
__getContextByStackCode(stackCode) {
if (!this.__stackCodeToContext[stackCode]) {
this.__stackCodeToContext[stackCode] = {
event$: new ReplaySubject(1),
items: [],
};
}
return this.__stackCodeToContext[stackCode];
}
}
StackService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: StackService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
StackService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: StackService });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: StackService, decorators: [{
type: Injectable
}], ctorParameters: function () { return []; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhY2suc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvc2VydmljZXMvaW1wbGVtZW50YXRpb25zL3N0YWNrcy9zdGFjay5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFhLGFBQWEsRUFBVSxNQUFNLE1BQU0sQ0FBQztBQUN4RCxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxpRUFBaUUsQ0FBQztBQUN0RyxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxnRUFBZ0UsQ0FBQztBQUdwRyxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sTUFBTSxDQUFDOztBQUl4QixNQUFNLE9BQU8sWUFBWTtJQVV2QixZQUFZO0lBRVoscUJBQXFCO0lBRXJCO1FBQ0UsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRUQsWUFBWTtJQUVaLGlCQUFpQjtJQUVWLE1BQU0sQ0FBQyxTQUFpQixFQUFFLFNBQWlCO1FBQ2hELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN4RCxNQUFNLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxTQUFTLENBQUMsQ0FBQztRQUNoRixJQUFJLGdCQUFnQixHQUFHLENBQUMsRUFBRTtZQUN4QixPQUFPO1NBQ1I7UUFFRCxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNoQixPQUFPO1NBQ1I7UUFFRCxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsa0JBQWtCLEVBQUUs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QUFFLEVBQUU7YUFDVixDQUFDO1NBQ0g7UUFFRCxPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM5QyxDQUFDOzswR0FyR1UsWUFBWTs4R0FBWixZQUFZOzRGQUFaLFlBQVk7a0JBRHhCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0lTdGFja1NlcnZpY2V9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvc3RhY2stc2VydmljZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgUmVwbGF5U3ViamVjdCwgU3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1N0YWNrSXRlbURlbGV0ZWRFdmVudH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2ltcGxlbWVudGF0aW9ucy9zdGFja3Mvc3RhY2staXRlbS1kZWxldGVkLWV2ZW50JztcbmltcG9ydCB7U3RhY2tJdGVtUHVzaGVkRXZlbnR9IGZyb20gJy4uLy4uLy4uL21vZGVscy9pbXBsZW1lbnRhdGlvbnMvc3RhY2tzL3N0YWNrLWl0ZW0tcHVzaGVkLWV2ZW50JztcbmltcG9ydCB7U3RhY2tJdGVtT3B0aW9uc30gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2ltcGxlbWVudGF0aW9ucy9zdGFja3Mvc3RhY2staXRlbS1vcHRpb25zJztcbmltcG9ydCB7SVN0YWNrSXRlbUV2ZW50fSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvaW50ZXJmYWNlcy9zdGFja3Mvc3RhY2staXRlbS1ldmVudC5pbnRlcmZhY2UnO1xuaW1wb3J0IHt2NH0gZnJvbSAndXVpZCc7XG5pbXBvcnQge0lTdGFja0NvbnRleHR9IGZyb20gJy4uLy4uLy4uL21vZGVscy9pbnRlcmZhY2VzL3N0YWNrcy9zdGFjay1jb250ZXh0LmludGVyZmFjZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTdGFja1NlcnZpY2UgaW1wbGVtZW50cyBJU3RhY2tTZXJ2aWNlIHtcblxuICAvLyNyZWdpb24gUHJvcGVydGllc1xuXG4gIC8vIE1hcHBpbmcgYmV0d2VlbiBjb250YWluZXIgaWQgJiB2aXNpYmlsaXR5IGVtaXR0ZXIuXG4gIHByaXZhdGUgcmVhZG9ubHkgX19zdGFja0NvZGVUb0NvbnRleHQ6IHtcbiAgICBbc3RhY2tDb2RlOiBzdHJpbmddXG4gICAgICA6IElTdGFja0NvbnRleHRcbiAgfTtcblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gQ29uc3RydWN0b3JcblxuICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fX3N0YWNrQ29kZVRvQ29udGV4dCA9IHt9O1xuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIE1ldGhvZHNcblxuICBwdWJsaWMgZGVsZXRlKHN0YWNrQ29kZTogc3RyaW5nLCByZXF1ZXN0SWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLl9fZ2V0Q29udGV4dEJ5U3RhY2tDb2RlKHN0YWNrQ29kZSk7XG4gICAgY29uc3QgaXRlbUNvbnRleHRJbmRleCA9IGNvbnRleHQuaXRlbXMuZmluZEluZGV4KGl0ZW0gPT4gaXRlbS5pZCA9PT0gcmVxdWVzdElkKTtcbiAgICBpZiAoaXRlbUNvbnRleHRJbmRleCA8IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpdGVtQ29udGV4dCA9IGNvbnRleHQuaXRlbXNbaXRlbUNvbnRleHRJbmRleF07XG4gICAgaWYgKCFpdGVtQ29udGV4dCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChpdGVtQ29udGV4dC5vcHRpb24/Lm9uSXRlbUJlaW5nUmVtb3ZlZD8uKCkgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29udGV4dC5pdGVtcy5zcGxpY2UoaXRlbUNvbnRleHRJbmRleCwgMSk7XG4gICAgY29uc3Qgc3RhY2tJdGVtRGVsZXRlZEV2ZW50ID0gbmV3IFN0YWNrSXRlbURlbGV0ZWRFdmVudChzdGFja0NvZGUsIGNvbnRleHQuaXRlbXMubWFwKHggPT4geC5pZCkpO1xuICAgIGNvbnRleHQuZXZlbnQkLm5leHQoc3RhY2tJdGVtRGVsZXRlZEV2ZW50KTtcbiAgfVxuXG4gIHB1YmxpYyBob29rU3RhY2tFdmVudChzdGFja0NvZGU6IHN0cmluZyk6IE9ic2VydmFibGU8SVN0YWNrSXRlbUV2ZW50PiB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuX19nZXRDb250ZXh0QnlTdGFja0NvZGUoc3RhY2tDb2RlKTtcbiAgICByZXR1cm4gY29udGV4dC5ldmVudCQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBwdWJsaWMgcHVyZ2UoZGVzaWduYXRlZFN0YWNrQ29kZT86IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghZGVzaWduYXRlZFN0YWNrQ29kZSkge1xuXG4gICAgICBjb25zdCBzdGFja0NvZGVzID0gT2JqZWN0LmtleXModGhpcy5fX3N0YWNrQ29kZVRvQ29udGV4dCk7XG4gICAgICBmb3IgKGNvbnN0IHN0YWNrQ29kZSBvZiBzdGFja0NvZGVzKSB7XG4gICAgICAgIHRoaXMucHVyZ2VCeVN0YWNrQ29kZShzdGFja0NvZGUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucHVyZ2VCeVN0YWNrQ29kZShkZXNpZ25hdGVkU3RhY2tDb2RlKTtcbiAgfVxuXG4gIHB1YmxpYyBwdXJnZUJ5U3RhY2tDb2RlKHN0YWNrQ29kZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuX19nZXRDb250ZXh0QnlTdGFja0NvZGUoc3RhY2tDb2RlKTtcbiAgICBjb250ZXh0Lml0ZW1zLnNwbGljZSgwKTtcblxuICAgIGNvbnN0IHN0YWNrSXRlbURlbGV0ZWRFdmVudCA9IG5ldyBTdGFja0l0ZW1EZWxldGVkRXZlbnQoc3RhY2tDb2RlLCBjb250ZXh0Lml0ZW1zLm1hcCh4ID0+IHguaWQpKTtcbiAgICBjb250ZXh0LmV2ZW50JC5uZXh0KHN0YWNrSXRlbURlbGV0ZWRFdmVudCk7XG4gIH1cblxuICBwdWJsaWMgcHVzaChzdGFja0NvZGU6IHN0cmluZywgb3B0aW9ucz86IFN0YWNrSXRlbU9wdGlvbnMpOiBzdHJpbmcge1xuICAgIC8vIEluaXRpYWxpemUgcmVxdWVzdCBpZC5cbiAgICBjb25zdCByZXF1ZXN0SWQgPSB2NCgpO1xuXG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuX19nZXRDb250ZXh0QnlTdGFja0NvZGUoc3RhY2tDb2RlKTtcbiAgICBpZiAob3B0aW9ucz8ucHVyZ2UpIHtcbiAgICAgIGNvbnRleHQuaXRlbXMuc3BsaWNlKDApO1xuICAgIH1cbiAgICBjb250ZXh0Lml0ZW1zLnB1c2goe1xuICAgICAgaWQ6IHJlcXVlc3RJZCxcbiAgICAgIG9wdGlvbjogb3B0aW9uc1xuICAgIH0pO1xuXG4gICAgY29uc3QgaXRlbUlkcyA9IGNvbnRleHQuaXRlbXMubWFwKHggPT4geC5pZCk7XG4gICAgY29uc3Qgc3RhY2tJdGVtUHVzaGVkRXZlbnQgPSBuZXcgU3RhY2tJdGVtUHVzaGVkRXZlbnQoc3RhY2tDb2RlLCByZXF1ZXN0SWQsIGl0ZW1JZHMpO1xuICAgIGNvbnRleHQuZXZlbnQkLm5leHQoc3RhY2tJdGVtUHVzaGVkRXZlbnQpO1xuICAgIHJldHVybiByZXF1ZXN0SWQ7XG4gIH1cblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gSW50ZXJuYWwgbWV0aG9kc1xuXG4gIHByaXZhdGUgX19nZXRDb250ZXh0QnlTdGFja0NvZGUoc3RhY2tDb2RlOiBzdHJpbmcpOiBJU3RhY2tDb250ZXh0IHtcbiAgICBpZiAoIXRoaXMuX19zdGFja0NvZGVUb0NvbnRleHRbc3RhY2tDb2RlXSkge1xuICAgICAgdGhpcy5fX3N0YWNrQ29kZVRvQ29udGV4dFtzdGFja0NvZGVdID0ge1xuICAgICAgICBldmVudCQ6IG5ldyBSZXBsYXlTdWJqZWN0PElTdGFja0l0ZW1FdmVudD4oMSksXG4gICAgICAgIGl0ZW1zOiBbXSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX19zdGFja0NvZGVUb0NvbnRleHRbc3RhY2tDb2RlXTtcbiAgfVxuXG4gIC8vI2VuZHJlZ2lvblxufVxuIl19