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 Context {
id: string;
name: string;
}
interface AvailableContextStoreState {
contexts: Context[];
isLoading: boolean;
}
class AvailableContextStore {
private privateState = reactive({
contexts: [],
isLoading: false,
});
private state = computed(() => readonly(this.privateState));
readonly isLoading = computed(() => this.state.value.isLoading);
readonly contexts = computed(() => this.state.value.contexts);
readonly contextsOptions = computed(() => this.contexts.value.map(
({ id, name }) => ({ key: id, value: name }),
));
private initializePromise: Promise|null = null;
init() {
if (!this.initializePromise) {
this.initializePromise = this.fetchAvailableContexts();
}
return this.initializePromise;
}
private fetchAvailableContexts() {
this.privateState.isLoading = true;
return AjaxHelper.fetch>({
method: 'TagManager.getAvailableContexts',
filter_limit: '-1',
}).then((contexts) => {
let entities: Context[];
if (Array.isArray(contexts)) {
entities = contexts as Context[];
} else {
entities = Object.values(contexts as Record);
}
this.privateState.contexts = entities;
}).finally(() => {
this.privateState.isLoading = false;
});
}
}
export default new AvailableContextStore();