import { api } from '@/api'; import { ActionContext } from 'vuex'; import { commitSetUsers, commitSetUser, } from './accessors/commit'; import { IUserProfileCreate, IUserProfileUpdate } from '@/interfaces'; import { State } from '../state'; import { AdminState } from './state'; import { dispatchCheckApiError, commitAddNotification, commitRemoveNotification } from '../main/accessors'; type MainContext = ActionContext; export const actions = { async actionGetUsers(context: MainContext) { try { const response = await api.getUsers(context.rootState.main.token); if (response) { commitSetUsers(context, response.data); } } catch (error) { await dispatchCheckApiError(context, error); } }, async actionUpdateUser(context: MainContext, payload: { id: number, user: IUserProfileUpdate }) { try { const loadingNotification = { content: 'saving', showProgress: true }; commitAddNotification(context, loadingNotification); const response = (await Promise.all([ api.updateUser(context.rootState.main.token, payload.id, payload.user), await new Promise((resolve, reject) => setTimeout(() => resolve(), 500)), ]))[0]; commitSetUser(context, response.data); commitRemoveNotification(context, loadingNotification); commitAddNotification(context, {content: 'User successfully updated', color: 'success'}); } catch (error) { await dispatchCheckApiError(context, error); } }, async actionCreateUser(context: MainContext, payload: IUserProfileCreate) { try { const loadingNotification = { content: 'saving', showProgress: true }; commitAddNotification(context, loadingNotification); const response = (await Promise.all([ api.createUser(context.rootState.main.token, payload), await new Promise((resolve, reject) => setTimeout(() => resolve(), 500)), ]))[0]; commitSetUser(context, response.data); commitRemoveNotification(context, loadingNotification); commitAddNotification(context, { content: 'User successfully created', color: 'success' }); } catch (error) { await dispatchCheckApiError(context, error); } }, };