import { Module, MutationTree, ActionTree } from 'vuex' import { LocalAccount } from '~/src/types/localAccount' import { RootState } from '@/store' import { MyWindow } from '~/src/types/global' const win = (window as any) as MyWindow export type AccountState = { accounts: Array accountLoading: boolean } const state = (): AccountState => ({ accounts: [], accountLoading: false }) export const MUTATION_TYPES = { UPDATE_ACCOUNTS: 'updateAccounts', UPDATE_ACCOUNT_LOADING: 'updateAccountLoading' } const mutations: MutationTree = { [MUTATION_TYPES.UPDATE_ACCOUNTS]: (state, accounts: Array) => { state.accounts = accounts }, [MUTATION_TYPES.UPDATE_ACCOUNT_LOADING]: (state, value: boolean) => { state.accountLoading = value } } const actions: ActionTree = { loadAccounts: async ({ commit }): Promise> => { const accounts = await win.ipcRenderer.invoke('list-accounts') commit(MUTATION_TYPES.UPDATE_ACCOUNTS, accounts) return accounts }, removeAccount: async (_, account: LocalAccount) => { await win.ipcRenderer.invoke('remove-account', account._id) }, forwardAccount: async (_, account: LocalAccount) => { await win.ipcRenderer.invoke('forward-account', account) }, backwardAccount: (_, account: LocalAccount) => { return new Promise((resolve, reject) => { win.ipcRenderer.send('backward-account', account) win.ipcRenderer.once('error-backward-account', (_, err: Error) => { win.ipcRenderer.removeAllListeners('response-forward-account') reject(err) }) win.ipcRenderer.once('response-backward-account', () => { win.ipcRenderer.removeAllListeners('error-backward-account') resolve() }) }) }, removeAllAccounts: () => { return new Promise((resolve, reject) => { win.ipcRenderer.send('remove-all-accounts') win.ipcRenderer.once('error-remove-all-accounts', (_, err: Error) => { win.ipcRenderer.removeAllListeners('response-remove-all-accounts') reject(err) }) win.ipcRenderer.once('response-remove-all-accounts', () => { win.ipcRenderer.removeAllListeners('error-remove-all-accounts') resolve() }) }) } } const account: Module = { namespaced: true, state: state, mutations: mutations, actions: actions } export default account