File: D:/web/matomo.vdk/plugins/SitesManager/vue/src/CurrencyStore/CurrencyStore.ts
/*!
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
import { reactive, readonly, computed } from 'vue';
import { AjaxHelper } from 'CoreHome';
interface CurrencyStoreState {
isLoading: boolean;
currencies: Record<string, string>;
}
class CurrencyStore {
private privateState = reactive<CurrencyStoreState>({
isLoading: false,
currencies: {},
});
readonly currencies = computed(() => readonly(this.privateState).currencies);
readonly isLoading = computed(() => readonly(this.privateState).isLoading);
private initializePromise: Promise<void>|null = null;
init() {
if (!this.initializePromise) {
this.initializePromise = this.fetchCurrencies();
}
return this.initializePromise;
}
private fetchCurrencies() {
this.privateState.isLoading = true;
return AjaxHelper.fetch<CurrencyStoreState['currencies']>({
method: 'SitesManager.getCurrencyList',
}).then((currencies) => {
this.privateState.currencies = currencies;
}).finally(() => {
this.privateState.isLoading = false;
});
}
}
export default new CurrencyStore();