commerce-vuex
Version:
Commerce vuex module
319 lines (307 loc) • 10.7 kB
JavaScript
import { snakeCase } from 'lodash'
import humps from 'lodash-humps'
import createHumps from 'lodash-humps/lib/createHumps'
import { getField, updateField } from 'vuex-map-fields'
import { dateTimeFormate } from './common.service'
import service from './service.service'
const { doPostOne, doPatchOne, doFetchOne,doDeleteSelected,doDeleteMultiple } = service
const snakes = createHumps(snakeCase)
export default {
namespaced: true,
state: {
one: null,
inProgress: true,
OrgList: [],
validFromTime: '',
validFromDate: '',
validToTime: '',
validToDate: '',
resourceList: [],
countryList: []
},
getters: {
getField,
},
mutations: {
updateField,
setOne(state, one) {
state.one = one;
state.one.validFrom = one.validFrom ? dateTimeFormate(one.validFrom) : '';
if (state.one.validFrom.length) {
state.validFromTime = state.one.validFrom[0]
state.validFromDate = state.one.validFrom[1]
}
state.one.validTo = one.validTo ? dateTimeFormate(one.validTo) : '';
if (state.one.validTo.length) {
state.validToTime = state.one.validTo[0]
state.validToDate = state.one.validTo[1]
}
state.resourceList = []
state.countryList = []
// if(state.one.brands&&state.one.brands.length){
// state.one.brands.filter((res)=>{
// state.resourceList.push({
// id: res
// })
// });
// }
if(state.one.countriesIso3&&state.one.countriesIso3.length){
state.one.countriesIso3.filter((res)=>{
state.countryList.push({
id: res
})
});
}
},
inProgress(state, yesOrNo) {
state.inProgress = yesOrNo
},
setList(state, list) {
state.OrgList = list;
},
setDates(state) {
state.one.validFrom = new Date((state.validFromDate + "T" + state.validFromTime).replace(/\s/, 'T'))
state.one.validTo = new Date((state.validToDate + "T" + state.validToTime).replace(/\s/, 'T'))
},
clearDates(state) {
state.validFromDate = ''
state.validFromTime = ''
state.validToDate = ''
state.validToTime = ''
state.resourceList = []
state.countryList = []
},
// setResourceList(state, brandsList){
// if(state.one.brands&&state.one.brands.length){
// brandsList.filter((res)=>{
// state.resourceList.push({
// id: res.id,
// name: res.name
// })
// });
// }
// },
addResource(state, resource){
let flag = false
if(state.resourceList.length){
state.resourceList.filter((res)=>{
if(res.id===resource.id)
flag = true
});
}
if(!flag)
state.resourceList.push({
'id': resource.id,
'name': resource.name
})
},
editResource(state, payLoad){
let list = state.resourceList.filter((res)=>{
if(res.id === payLoad.oldId){
res.id = payLoad.resource.id,
res.name = payLoad.resource.name
}
return res;
})
state.resourceList = list
},
deleteResource(state, payLoad){
let list = state.resourceList.filter((res)=>{
if(res.id !== payLoad.id)
return res;
})
state.resourceList = list
},
// setResources(state){
// let allResources = []
// if(state.resourceList.length){
// state.resourceList.filter((res)=>{
// allResources.push(res.id);
// });
// }
// state.one.brands = allResources
// },
addCountry(state, id){
let flag = false
if(state.countryList.length){
state.countryList.filter((res)=>{
if(res.id===id)
flag = true
});
}
if(!flag)
state.countryList.push({
'id': id
})
},
editCountry(state, payLoad){
let list = state.countryList.filter((res)=>{
if(res.id === payLoad.oldId)
res.id = payLoad.id
return res;
})
state.countryList = list
},
deleteCountry(state, payLoad){
let list = state.countryList.filter((res)=>{
if(res.id !== payLoad.id)
return res;
})
state.countryList = list
},
setCountry(state){
let allCountries = []
if(state.countryList.length){
state.countryList.filter((cntr)=>{
allCountries.push(cntr.id);
});
}
state.one.countriesIso3 = allCountries
}
},
actions: {
new({ commit }) {
commit('inProgress', false);
commit('clearDates')
commit('setOne', {
name: "",
businessEntityId: "",
logoUrl: "",
validFrom: "",
validTo: "",
naicsCode: '',
// brands: [],
brandId:'',
countriesIso3: [],
provisionings:{
contractType:'',
retailerConnectionFeeBearer:'',
retailerConnectionApproval:''
}
});
},
fetchOne: async ({ commit }, { serviceId }) => {
commit('inProgress', true);
try {
const service = await doFetchOne({ serviceId });
if (service) {
commit('setOne', humps(service));
commit('inProgress', false)
return humps(service)
}
/* if (recursive && appId != rootState.appOne.one.id) {
dispatch('appOne/fetchOne', appId, { root: true });
}*/
}
// eslint-disable-next-line no-useless-catch
catch (err) {
throw err
}
finally {
commit('inProgress', false)
}
},
setResourceList: async ({ commit }, { brandsList }) => {
commit('setResourceList', brandsList)
},
addResource: async ({ commit }, { resource }) => {
commit('addResource', resource)
},
editResource: async ({ commit }, { resource, oldId }) => {
commit('editResource', {resource, oldId})
},
deleteResource: async ({ commit }, { id }) => {
commit('deleteResource', {id})
},
addCountry: async ({ commit }, { id }) => {
commit('addCountry', id)
},
editCountry: async ({ commit }, { id, oldId }) => {
commit('editCountry', {id, oldId})
},
deleteCountry: async ({ commit }, { id }) => {
commit('deleteCountry', {id})
},
save: async ({ commit, state }, { appId }) => {
commit('inProgress', true);
try {
commit('setDates')
// commit('setResources')
commit('setCountry')
if (undefined === state.one.id) {
await doPostOne(snakes(Object.assign({}, state.one, { appId: appId })));
commit('inProgress', false);
commit('clearDates')
return ({ new: true });
} else {
await doPatchOne(snakes(state.one));
commit('inProgress', false);
commit('clearDates')
return ({ update: true });
}
}
// eslint-disable-next-line no-useless-catch
catch (err) {
throw err
}
finally {
commit('inProgress', false)
}
},
cloneNewService: async ({ commit }, { serviceOne }) => {
commit('inProgress', true);
try {
let newService = await doPostOne(snakes(serviceOne));
commit('inProgress', false);
return ({ new: true, business: humps(newService) });
}
// eslint-disable-next-line no-useless-catch
catch (err) {
throw err
}
finally {
commit('inProgress', false)
}
},
updateService: async ({ commit,state }) => {
commit('inProgress', true);
try {
commit('setDates')
let updatedService = await doPatchOne(snakes(state.one));
commit('inProgress', false);
return ({ new: true, business: humps(updatedService) });
}
// eslint-disable-next-line no-useless-catch
catch (err) {
throw err
}
finally {
commit('inProgress', false)
}
},
deleteSelected: async ({ commit }, { serviceId }) => {
commit('inProgress', true);
try {
await doDeleteSelected({ serviceId });
return ({ deleteSelected: true })
} catch (err) {
return ({ deleteSelected: false })
}
finally {
commit('inProgress', false);
}
},
deleteMultiple: async ({ commit }, { serviceId }) => {
commit('inProgress', true);
try {
await doDeleteMultiple({ serviceId });
return ({ deleteSelected: true })
} catch (err) {
return ({ deleteSelected: false })
}
finally {
commit('inProgress', false);
}
},
},
}