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 Comparison { id: string; name: string; } interface AvailableComparisonsStoreState { comparisons: Comparison[]; isLoading: boolean; } class AvailableComparisonsStore { private privateState = reactive({ comparisons: [], isLoading: false, }); private state = computed(() => readonly(this.privateState)); readonly isLoading = computed(() => this.state.value.isLoading); readonly comparisons = computed(() => this.state.value.comparisons); readonly comparisonOptions = computed(() => this.comparisons.value.map( ({ id, name }) => ({ key: id, value: name }), )); private initializePromise: Promise|null = null; init() { if (!this.initializePromise) { this.initializePromise = this.fetchAvailableComparisons(); } return this.initializePromise; } private fetchAvailableComparisons() { this.privateState.isLoading = true; return AjaxHelper.fetch({ method: 'TagManager.getAvailableComparisons', filter_limit: '-1', }).then((comparisons) => { this.privateState.comparisons = comparisons; }).finally(() => { this.privateState.isLoading = false; }); } } export default new AvailableComparisonsStore();