import { ActionTree, Module, MutationTree, GetterTree } from 'vuex'; import RootState from '../types/RootStateModel'; import DataStoreModel from '../types/DataStoreModel'; import DataApi from '../../api/data-api'; import { DynamicValueTags, User } from '../../types/api'; import AssetApi from '../../api/asset-api'; const namespaced = true; // eslint-disable-next-line const packageJson = require('../../package.json'); const state: DataStoreModel = { dynamicTags: { globalTags: [], personalTags: [] }, packageVersion: packageJson.version, currentUser: null, authorized: null }; const getters: GetterTree = { getDynamicTags: (state) => () => { return state.dynamicTags.globalTags; } } const actions: ActionTree = { async $init({ dispatch }) { dispatch('fetchDynamicTags'); }, async fetchDynamicTags({ commit }) { const tags = await DataApi.getDynamicTags(); commit('setDynamicTags', tags); }, async fetchCurrentUser({ commit }) { try { const currentUser = await DataApi.getCurrentUser(); if (currentUser.avatar) { currentUser.avatar = await AssetApi.getAssetById(currentUser.avatar.id); } commit('setCurrentUser', currentUser); } catch { commit('setAuthorization', false); throw 'User is not authorized'; } } }; const mutations: MutationTree = { setDynamicTags(dataState, tags: DynamicValueTags) { dataState.dynamicTags = tags; }, setCurrentUser(dataState, currentUser: User) { dataState.currentUser = currentUser; dataState.authorized = true; }, setAuthorization(dataState, authorized: boolean) { dataState.authorized = authorized; } }; export const dataStore: Module = { namespaced, state, getters, actions, mutations, };