@modyo/cli
Version:
Modyo Command Line Interface
157 lines (142 loc) • 5.06 kB
JavaScript
/* eslint no-param-reassign: ["error", {"ignorePropertyModificationsFor": ["state"] }] */
import Vuex from 'vuex';
import axios from 'axios';
export default new Vuex.Store({
state: {
amount: 0,
clientId: 1,
currency: '',
exchangeRate: 1,
fromAccount: {},
isContact: false,
isInternational: false,
subject: '',
toAccount: {},
toCard: {},
toOthers: false,
transactionCode: '123123',
},
mutations: {
SET_AMOUNT(state, data) {
state.amount = data;
},
SET_CLIENT_ID(state, data) {
state.clientId = data;
},
SET_CURRENCY(state, data) {
state.currency = data;
},
SET_EXCHANGE_RATE(state, data) {
state.exchangeRate = data;
},
SET_FROM_ACCOUNT(state, data) {
state.fromAccount = data;
},
SET_IS_CONTACT(state, data) {
state.isContact = data;
},
SET_IS_INTERNATIONAL(state, data) {
state.isInternational = data;
},
SET_SUBJECT(state, data) {
state.subject = data;
},
SET_TO_ACCOUNT(state, data) {
state.toAccount = data;
},
SET_TO_CARD(state, data) {
state.toCard = data;
},
SET_TO_OTHERS(state, data) {
state.toOthers = data;
},
SET_TRANSACTION_CODE(state, data) {
state.transactionCode = data;
},
},
actions: {
DO_DATA_INITIALIZATION(context) {
return new Promise(((resolve, reject) => {
if (!JSON.parse(localStorage.getItem('clientId'))) {
const err = new Error('PARAM CLIENT NOT PROVIDED IN Localstorage');
reject(err);
context.commit('SET_CLIENT_ID', 1);
} else {
context.commit('SET_CLIENT_ID', JSON.parse(localStorage.getItem('clientId')));
}
context.dispatch('GET_SUBJECT')
.then(() => {
context.commit('SET_FROM_ACCOUNT', JSON.parse(localStorage.getItem('fromAccount')));
context.commit('SET_AMOUNT', JSON.parse(localStorage.getItem('amount')));
context.commit('SET_TRANSACTION_CODE', JSON.parse(localStorage.getItem('code')));
if (context.state.subject === 'transfer') {
context.commit('SET_TO_ACCOUNT', JSON.parse(localStorage.getItem('toAccount')));
context.commit('SET_TO_OTHERS', JSON.parse(localStorage.getItem('toOthers')));
context.commit('SET_IS_CONTACT', JSON.parse(localStorage.getItem('isContact')));
} else if (context.state.subject === 'creditCardPayment') {
context.commit('SET_TO_CARD', JSON.parse(localStorage.getItem('toCard')));
context.commit('SET_CURRENCY', JSON.parse(localStorage.getItem('currency')));
context.commit('SET_EXCHANGE_RATE', JSON.parse(localStorage.getItem('exchangeRate')));
context.commit('SET_IS_INTERNATIONAL', JSON.parse(localStorage.getItem('isInternational')));
}
resolve(context.state);
})
.catch((error) => {
// TODO: Remove test data
context.commit(
'SET_FROM_ACCOUNT',
{
accountType: 'Cuenta Vista',
accountNumber: '123123123',
availableBalance: 1000000,
},
);
context.commit('SET_AMOUNT', 5000);
context.commit('SET_TRANSACTION_CODE', '123123');
if (context.state.subject === 'transfer') {
context.commit(
'SET_TO_ACCOUNT',
{
fullname: 'Test Name',
payeeId: '123123123',
accountNumber: '321321321',
accountType: 'Cuenta Vista',
availableBalance: 2000000,
bank: {
name: 'Dynamic Bank',
},
},
);
context.commit('SET_TO_OTHERS', false);
context.commit('SET_IS_CONTACT', false);
} else if (context.state.subject === 'creditCardPayment') {
context.commit('SET_TO_CARD', { cardType: 'Visa', cardNumber: '5105105105105100' });
context.commit('SET_CURRENCY', 'usd');
context.commit('SET_EXCHANGE_RATE', 600);
context.commit('SET_IS_INTERNATIONAL', false);
}
return reject(error);
});
}));
},
GET_CLIENT(context) {
return axios.get(`https://api-bank.herokuapp.com/api/v1/clients/${context.state.clientId}`)
.then((client) => {
context.commit('SET_CLIENT', client.data);
return client;
})
.catch(err => err);
},
GET_SUBJECT(context) {
return new Promise(((resolve, reject) => {
if (localStorage.getItem('subject')) {
context.commit('SET_SUBJECT', localStorage.getItem('subject'));
resolve(context.state.subject);
} else {
const error = new Error('SUBJECT NOT LOCATED IN localStorage');
reject(error);
}
}));
},
},
});