UNPKG

@ui-tool/core

Version:
66 lines 10.3 kB
import { ReplaySubject } from 'rxjs'; import { DisplaySpinnerCommand } from '../../../models/implementations/spinners/display-spinner-command'; import { v4 as uuidv4 } from 'uuid'; import { DeleteSpinnerCommand } from '../../../models/implementations/spinners/delete-spinner-command'; import { SpinnerCommands } from '../../../constants'; export class SpinnerService { //#endregion //#region Constructor constructor() { this._containerIdToVisibilityEvent = {}; this._containerIds = []; } //#endregion //#region Methods displaySpinner(containerId, options) { // Initialize request id. const requestId = uuidv4(); const displaySpinnerRequest = new DisplaySpinnerCommand(containerId, requestId, options); this._sendSpinnerCommand(displaySpinnerRequest); return requestId; } deleteSpinner(containerId, id) { // Delete spinner request. const deleteSpinnerRequest = new DeleteSpinnerCommand(containerId, id); // Deleted requests is smaller than container request. this._sendSpinnerCommand(deleteSpinnerRequest); } deleteSpinners(containerId) { if (!containerId) { for (const displayedSpinnerId of this._containerIds) { const deleteSpinnerRequest = new DeleteSpinnerCommand(displayedSpinnerId); this._sendSpinnerCommand(deleteSpinnerRequest); } this._containerIds.splice(0); return; } this._sendSpinnerCommand(new DeleteSpinnerCommand(containerId)); } // Hook visibility changed event. hookSpinnerVisibilityEvent(containerId) { if (!this._containerIdToVisibilityEvent[containerId]) { this._containerIdToVisibilityEvent[containerId] = new ReplaySubject(1); } return this._containerIdToVisibilityEvent[containerId].asObservable(); } //#endregion //#region Internal methods // Broadcast visibility event. _sendSpinnerCommand(command) { if (!command || !command.containerId) { return; } if (!this._containerIdToVisibilityEvent[command.containerId]) { this._containerIdToVisibilityEvent[command.containerId] = new ReplaySubject(1); } if (command.kind === SpinnerCommands.display) { const displaySpinnerRequest = command; const itemIndex = this._containerIds.indexOf(displaySpinnerRequest.containerId); if (itemIndex < 0) { this._containerIds.push(displaySpinnerRequest.containerId); } } this._containerIdToVisibilityEvent[command.containerId].next(command); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Bpbm5lci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9zZXJ2aWNlcy9pbXBsZW1lbnRhdGlvbnMvc3Bpbm5lcnMvc3Bpbm5lci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBYSxhQUFhLEVBQVUsTUFBTSxNQUFNLENBQUM7QUFDeEQsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sa0VBQWtFLENBQUM7QUFDdkcsT0FBTyxFQUFDLEVBQUUsSUFBSSxNQUFNLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDbEMsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0saUVBQWlFLENBQUM7QUFDckcsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBSW5ELE1BQU0sT0FBTyxjQUFjO0lBYXpCLFlBQVk7SUFFWixxQkFBcUI7SUFFckI7UUFDRSxJQUFJLENBQUMsNkJBQTZCLEdBQUcsRUFBRSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxZQUFZO0lBRVosaUJBQWlCO0lBRVYsY0FBYyxDQUFDLFdBQW1CLEVBQUUsT0FBK0I7UUFFeEUseUJBQXlCO1FBQ3pCLE1BQU0sU0FBUyxHQUFHLE1BQU0sRUFBRSxDQUFDO1FBRTNCLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxxQkFBcUIsQ0FBQyxXQUFXLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3pGLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ2hELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFTSxhQUFhLENBQUMsV0FBbUIsRUFBRSxFQUFVO1FBRWxELDBCQUEwQjtRQUMxQixNQUFNLG9CQUFvQixHQUFHLElBQUksb0JBQW9CLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRXZFLHNEQUFzRDtRQUN0RCxJQUFJLENBQUMsbUJBQW1CLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRU0sY0FBYyxDQUFDLFdBQW9CO1FBRXhDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFFaEIsS0FBSyxNQUFNLGtCQUFrQixJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7Z0JBQ25ELE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxvQkFBb0IsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO2dCQUMxRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsb0JBQW9CLENBQUMsQ0FBQzthQUNoRDtZQUVELElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzdCLE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVELGlDQUFpQztJQUMxQiwwQkFBMEIsQ0FBQyxXQUFtQjtRQUVuRCxJQUFJLENBQUMsSUFBSSxDQUFDLDZCQUE2QixDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQ3BELElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN4RTtRQUVELE9BQU8sSUFBSSxDQUFDLDZCQUE2QixDQUFDLFdBQVcsQ0FBQyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3hFLENBQUM7SUFFRCxZQUFZO0lBRVosMEJBQTBCO0lBRTFCLDhCQUE4QjtJQUNwQixtQkFBbUIsQ0FBQyxPQUF3QjtRQUVwRCxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRTtZQUNwQyxPQUFPO1NBQ1I7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLDZCQUE2QixDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUM1RCxJQUFJLENBQUMsNkJBQTZCLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksYUFBYSxDQUFrQixDQUFDLENBQUMsQ0FBQztTQUNqRztRQUVELElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxlQUFlLENBQUMsT0FBTyxFQUFFO1lBQzVDLE1BQU0scUJBQXFCLEdBQUcsT0FBZ0MsQ0FBQztZQUMvRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNoRixJQUFJLFNBQVMsR0FBRyxDQUFDLEVBQUU7Z0JBQ2pCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFdBQVcsQ0FBQyxDQUFDO2FBQzVEO1NBQ0Y7UUFFRCxJQUFJLENBQUMsNkJBQTZCLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN4RSxDQUFDO0NBSUYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0lTcGlubmVyU2VydmljZX0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQge09ic2VydmFibGUsIFJlcGxheVN1YmplY3QsIFN1YmplY3R9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtEaXNwbGF5U3Bpbm5lckNvbW1hbmR9IGZyb20gJy4uLy4uLy4uL21vZGVscy9pbXBsZW1lbnRhdGlvbnMvc3Bpbm5lcnMvZGlzcGxheS1zcGlubmVyLWNvbW1hbmQnO1xuaW1wb3J0IHt2NCBhcyB1dWlkdjR9IGZyb20gJ3V1aWQnO1xuaW1wb3J0IHtEZWxldGVTcGlubmVyQ29tbWFuZH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2ltcGxlbWVudGF0aW9ucy9zcGlubmVycy9kZWxldGUtc3Bpbm5lci1jb21tYW5kJztcbmltcG9ydCB7U3Bpbm5lckNvbW1hbmRzfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHtEaXNwbGF5U3Bpbm5lck9wdGlvbnN9IGZyb20gJy4uLy4uLy4uL21vZGVscy9pbXBsZW1lbnRhdGlvbnMvc3Bpbm5lcnMvZGlzcGxheS1zcGlubmVyLW9wdGlvbnMnO1xuaW1wb3J0IHtJU3Bpbm5lckNvbW1hbmR9IGZyb20gJy4uLy4uLy4uL21vZGVscy9pbnRlcmZhY2VzL3NwaW5uZXJzL3NwaW5uZXItY29tbWFuZC5pbnRlcmZhY2UnO1xuXG5leHBvcnQgY2xhc3MgU3Bpbm5lclNlcnZpY2UgaW1wbGVtZW50cyBJU3Bpbm5lclNlcnZpY2Uge1xuXG4gIC8vI3JlZ2lvbiBQcm9wZXJ0aWVzXG5cbiAgLy8gTWFwcGluZyBiZXR3ZWVuIGNvbnRhaW5lciBpZCAmIHZpc2liaWxpdHkgZW1pdHRlci5cbiAgcHJpdmF0ZSByZWFkb25seSBfY29udGFpbmVySWRUb1Zpc2liaWxpdHlFdmVudDoge1xuICAgIFtjb250YWluZXJJZDogc3RyaW5nXVxuICAgICAgOiBTdWJqZWN0PElTcGlubmVyQ29tbWFuZD5cbiAgfTtcblxuICAvLyBDb250YWluZXIgaWRzIHdoaWNoIGFscmVhZHkgcmVnaXN0ZXJlZC5cbiAgcHJpdmF0ZSByZWFkb25seSBfY29udGFpbmVySWRzOiBzdHJpbmdbXTtcblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gQ29uc3RydWN0b3JcblxuICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fY29udGFpbmVySWRUb1Zpc2liaWxpdHlFdmVudCA9IHt9O1xuICAgIHRoaXMuX2NvbnRhaW5lcklkcyA9IFtdO1xuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIE1ldGhvZHNcblxuICBwdWJsaWMgZGlzcGxheVNwaW5uZXIoY29udGFpbmVySWQ6IHN0cmluZywgb3B0aW9ucz86IERpc3BsYXlTcGlubmVyT3B0aW9ucyk6IHN0cmluZyB7XG5cbiAgICAvLyBJbml0aWFsaXplIHJlcXVlc3QgaWQuXG4gICAgY29uc3QgcmVxdWVzdElkID0gdXVpZHY0KCk7XG5cbiAgICBjb25zdCBkaXNwbGF5U3Bpbm5lclJlcXVlc3QgPSBuZXcgRGlzcGxheVNwaW5uZXJDb21tYW5kKGNvbnRhaW5lcklkLCByZXF1ZXN0SWQsIG9wdGlvbnMpO1xuICAgIHRoaXMuX3NlbmRTcGlubmVyQ29tbWFuZChkaXNwbGF5U3Bpbm5lclJlcXVlc3QpO1xuICAgIHJldHVybiByZXF1ZXN0SWQ7XG4gIH1cblxuICBwdWJsaWMgZGVsZXRlU3Bpbm5lcihjb250YWluZXJJZDogc3RyaW5nLCBpZDogc3RyaW5nKTogdm9pZCB7XG5cbiAgICAvLyBEZWxldGUgc3Bpbm5lciByZXF1ZXN0LlxuICAgIGNvbnN0IGRlbGV0ZVNwaW5uZXJSZXF1ZXN0ID0gbmV3IERlbGV0ZVNwaW5uZXJDb21tYW5kKGNvbnRhaW5lcklkLCBpZCk7XG5cbiAgICAvLyBEZWxldGVkIHJlcXVlc3RzIGlzIHNtYWxsZXIgdGhhbiBjb250YWluZXIgcmVxdWVzdC5cbiAgICB0aGlzLl9zZW5kU3Bpbm5lckNvbW1hbmQoZGVsZXRlU3Bpbm5lclJlcXVlc3QpO1xuICB9XG5cbiAgcHVibGljIGRlbGV0ZVNwaW5uZXJzKGNvbnRhaW5lcklkPzogc3RyaW5nKTogdm9pZCB7XG5cbiAgICBpZiAoIWNvbnRhaW5lcklkKSB7XG5cbiAgICAgIGZvciAoY29uc3QgZGlzcGxheWVkU3Bpbm5lcklkIG9mIHRoaXMuX2NvbnRhaW5lcklkcykge1xuICAgICAgICBjb25zdCBkZWxldGVTcGlubmVyUmVxdWVzdCA9IG5ldyBEZWxldGVTcGlubmVyQ29tbWFuZChkaXNwbGF5ZWRTcGlubmVySWQpO1xuICAgICAgICB0aGlzLl9zZW5kU3Bpbm5lckNvbW1hbmQoZGVsZXRlU3Bpbm5lclJlcXVlc3QpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9jb250YWluZXJJZHMuc3BsaWNlKDApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3NlbmRTcGlubmVyQ29tbWFuZChuZXcgRGVsZXRlU3Bpbm5lckNvbW1hbmQoY29udGFpbmVySWQpKTtcbiAgfVxuXG4gIC8vIEhvb2sgdmlzaWJpbGl0eSBjaGFuZ2VkIGV2ZW50LlxuICBwdWJsaWMgaG9va1NwaW5uZXJWaXNpYmlsaXR5RXZlbnQoY29udGFpbmVySWQ6IHN0cmluZyk6IE9ic2VydmFibGU8RGlzcGxheVNwaW5uZXJDb21tYW5kIHwgRGVsZXRlU3Bpbm5lckNvbW1hbmQ+IHtcblxuICAgIGlmICghdGhpcy5fY29udGFpbmVySWRUb1Zpc2liaWxpdHlFdmVudFtjb250YWluZXJJZF0pIHtcbiAgICAgIHRoaXMuX2NvbnRhaW5lcklkVG9WaXNpYmlsaXR5RXZlbnRbY29udGFpbmVySWRdID0gbmV3IFJlcGxheVN1YmplY3QoMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2NvbnRhaW5lcklkVG9WaXNpYmlsaXR5RXZlbnRbY29udGFpbmVySWRdLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIEludGVybmFsIG1ldGhvZHNcblxuICAvLyBCcm9hZGNhc3QgdmlzaWJpbGl0eSBldmVudC5cbiAgcHJvdGVjdGVkIF9zZW5kU3Bpbm5lckNvbW1hbmQoY29tbWFuZDogSVNwaW5uZXJDb21tYW5kKTogdm9pZCB7XG5cbiAgICBpZiAoIWNvbW1hbmQgfHwgIWNvbW1hbmQuY29udGFpbmVySWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX2NvbnRhaW5lcklkVG9WaXNpYmlsaXR5RXZlbnRbY29tbWFuZC5jb250YWluZXJJZF0pIHtcbiAgICAgIHRoaXMuX2NvbnRhaW5lcklkVG9WaXNpYmlsaXR5RXZlbnRbY29tbWFuZC5jb250YWluZXJJZF0gPSBuZXcgUmVwbGF5U3ViamVjdDxJU3Bpbm5lckNvbW1hbmQ+KDEpO1xuICAgIH1cblxuICAgIGlmIChjb21tYW5kLmtpbmQgPT09IFNwaW5uZXJDb21tYW5kcy5kaXNwbGF5KSB7XG4gICAgICBjb25zdCBkaXNwbGF5U3Bpbm5lclJlcXVlc3QgPSBjb21tYW5kIGFzIERpc3BsYXlTcGlubmVyQ29tbWFuZDtcbiAgICAgIGNvbnN0IGl0ZW1JbmRleCA9IHRoaXMuX2NvbnRhaW5lcklkcy5pbmRleE9mKGRpc3BsYXlTcGlubmVyUmVxdWVzdC5jb250YWluZXJJZCk7XG4gICAgICBpZiAoaXRlbUluZGV4IDwgMCkge1xuICAgICAgICB0aGlzLl9jb250YWluZXJJZHMucHVzaChkaXNwbGF5U3Bpbm5lclJlcXVlc3QuY29udGFpbmVySWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX2NvbnRhaW5lcklkVG9WaXNpYmlsaXR5RXZlbnRbY29tbWFuZC5jb250YWluZXJJZF0ubmV4dChjb21tYW5kKTtcbiAgfVxuXG4gIC8vI2VuZHJlZ2lvblxuXG59XG4iXX0=