@ui-tool/core
Version:
66 lines • 10.3 kB
JavaScript
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=