Ubuntu

­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ /*! * Matomo - free/libre analytics platform * * @link https://matomo.org * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later */ import { reactive, computed, readonly } from 'vue'; import { AjaxHelper } from 'CoreHome'; interface FireLimit { id: string; name: string; } interface AvailableFireLimitStoreState { fireLimits: FireLimit[]; isLoading: boolean; } class AvailableFireLimitStore { private privateState = reactive({ fireLimits: [], isLoading: false, }); private state = computed(() => readonly(this.privateState)); readonly isLoading = computed(() => this.state.value.isLoading); readonly fireLimits = computed(() => this.state.value.fireLimits); readonly fireLimitsOptions = computed(() => this.fireLimits.value.map( ({ id, name }) => ({ key: id, value: name }), )); private initializePromise: Promise|null = null; init() { if (!this.initializePromise) { this.initializePromise = this.fetchAvailableFireLimits(); } return this.initializePromise; } private fetchAvailableFireLimits() { this.privateState.isLoading = true; return AjaxHelper.fetch>({ method: 'TagManager.getAvailableTagFireLimits', filter_limit: '-1', }).then((fireLimits) => { let entities: FireLimit[]; if (Array.isArray(fireLimits)) { entities = fireLimits as FireLimit[]; } else { entities = Object.values(fireLimits as Record); } this.privateState.fireLimits = entities; }).finally(() => { this.privateState.isLoading = false; }); } } export default new AvailableFireLimitStore();