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 Environment {
id: string;
name: string;
disabled: boolean;
}
interface AvailableEnvironmentStoreState {
environmentsWithPublish: Environment[];
isLoading: boolean;
}
class AvailableEnvironmentStore {
private privateState = reactive({
environmentsWithPublish: [],
isLoading: false,
});
private state = computed(() => readonly(this.privateState));
readonly isLoading = computed(() => this.state.value.isLoading);
readonly environmentsWithPublish = computed(() => this.state.value.environmentsWithPublish);
readonly environmentsWithPublishOptions = computed(
() => this.environmentsWithPublish.value.map(
// eslint-disable-next-line
({ id, name, disabled }) => ({ key: id, value: name, disabled: false }),
),
);
private initializePromise: Promise|null = null;
init() {
if (!this.initializePromise) {
this.initializePromise = this.fetchEnvironments();
}
return this.initializePromise;
}
private fetchEnvironments() {
this.privateState.isLoading = true;
return AjaxHelper.fetch>({
method: 'TagManager.getAvailableEnvironmentsWithPublishCapability',
filter_limit: '-1',
}).then((environmentsWithPublish) => {
let entities: Environment[];
if (Array.isArray(environmentsWithPublish)) {
entities = environmentsWithPublish as Environment[];
} else {
entities = Object.values(environmentsWithPublish as Record);
}
this.privateState.environmentsWithPublish = entities;
}).finally(() => {
this.privateState.isLoading = false;
});
}
}
export default new AvailableEnvironmentStore();