@modyo/cli
Version:
Modyo Command Line Interface
175 lines (152 loc) • 4.89 kB
JavaScript
/* eslint no-param-reassign: ["error", {"ignorePropertyModificationsFor": ["state"] }] */
import Vuex from 'vuex';
import axios from 'axios';
export default new Vuex.Store({
state: {
accounts: [],
activeAccount: null,
activeTab: 'cc',
filterBy: 'all',
fromDate: dateFns.subDays(new Date(), 30),
isLoadingAccounts: true,
isLoadingTransactions: true,
movementsActiveTab: 'last',
paramAccountId: 1,
paramClientId: 1,
showDatePicker: false,
showFilters: false,
showMovements: false,
showSearch: false,
toDate: new Date(),
transactions: [],
},
mutations: {
SET_ACCOUNTS(state, data) {
state.accounts = data;
},
SET_ACTIVE_ACCOUNT(state, data) {
state.activeAccount = data;
},
SET_ACTIVE_TAB(state, data) {
state.activeTab = data;
},
SET_FROM_DATE(state, data) {
state.fromDate = data;
},
SET_FILTER_BY(state, data) {
state.filterBy = data;
},
SET_IS_LOADING_ACCOUNTS(state, data) {
state.isLoadingAccounts = data;
},
SET_IS_LOADING_TRANSACTIONS(state, data) {
state.isLoadingTransactions = data;
},
SET_MOVEMENTS_ACTIVE_TAB(state, data) {
state.movementsActiveTab = data;
},
SET_PARAM_CLIENT_ID(state, data) {
state.paramClientId = data;
},
SET_PARAM_ACCOUNT_ID(state, data) {
state.paramAccountId = data;
},
SET_SHOW_MOVEMENTS(state, data) {
state.showMovements = data;
},
SET_SHOW_DATEPICKER(state, data) {
state.showDatePicker = data;
},
SET_SHOW_FILTERS(state, data) {
state.showFilters = data;
},
SET_SHOW_SEARCH(state, data) {
state.showSearch = data;
},
SET_TO_DATE(state, data) {
state.toDate = data;
},
SET_TRANSACTIONS(state, data) {
state.transactions = data;
},
},
actions: {
DO_DATA_INITIALIZATION(context) {
return new Promise(((resolve, reject) => {
context.dispatch('GET_ACCOUNTS')
.then(() => {
context.commit(
'SET_ACTIVE_ACCOUNT',
context.state.accounts.find(account => account.id === context.state.paramAccountId).id,
);
context.dispatch('GET_MOVEMENTS');
resolve();
})
.catch(() => reject());
}));
},
GET_ACCOUNTS(context) {
context.commit('SET_MOVEMENTS_ACTIVE_TAB', 'last');
context.commit('SET_ACCOUNTS', []);
return axios.get(`https://api-bank.herokuapp.com/api/v1/clients/${context.state.paramClientId}/accounts`, {
params: {
'filter[order]': 'accountType',
},
})
.then((response) => {
context.commit('SET_ACCOUNTS', response.data);
context.commit('SET_IS_LOADING_ACCOUNTS', false);
})
.catch(err => err);
},
GET_RELATED_ACCOUNTS(context) {
context.commit('SET_FILTER_BY', 'all');
context.commit('SET_MOVEMENTS_ACTIVE_TAB', 'last');
context.commit('SET_ACCOUNTS', []);
return axios.get(`https://api-bank.herokuapp.com/api/v1/clients/${context.state.paramClientId}/accounts`, {
params: {
'filter[include]': 'relatedAccount',
},
})
.then((response) => {
const accounts = response.data.filter(account => account.relatedAccount);
context.commit('SET_ACCOUNTS', accounts);
context.commit('SET_ACTIVE_ACCOUNT', accounts[0].id);
context.commit('SET_IS_LOADING_ACCOUNTS', false);
context.dispatch('GET_MOVEMENTS')
.then(movements => movements)
.catch(err => err);
})
.catch(err => err);
},
GET_MOVEMENTS(context) {
context.commit('SET_FILTER_BY', 'all');
context.commit('SET_TRANSACTIONS', []);
context.commit('SET_IS_LOADING_TRANSACTIONS', true);
return axios.get(`https://api-bank.herokuapp.com/api/v1/accounts/${context.state.activeAccount}/movements/`, {
params: {
from: context.state.fromDate,
to: context.state.toDate,
},
})
.then((response) => {
context.commit('SET_TRANSACTIONS', response.data);
context.commit('SET_IS_LOADING_TRANSACTIONS', false);
return response;
})
.catch(err => err);
},
GET_STATEMENTS(context) {
context.commit('SET_FILTER_BY', 'all');
context.commit('SET_TRANSACTIONS', []);
context.commit('SET_IS_LOADING_TRANSACTIONS', true);
return axios.get(`https://api-bank.herokuapp.com/api/v1/accounts/${context.state.activeAccount}/statements/`)
.then((response) => {
context.commit('SET_TRANSACTIONS', response.data);
context.commit('SET_IS_LOADING_TRANSACTIONS', false);
return response;
})
.catch(err => err);
},
},
});