UNPKG

@ui-tool/core

Version:
85 lines 12 kB
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