commerce-vuex
Version:
Commerce vuex module
116 lines (107 loc) • 3.09 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 servicePricing from './service_pricing.service'
const { doPostOne, doPatchOne, doFetchOne } = servicePricing
const snakes = createHumps(snakeCase)
export default {
namespaced: true,
state: {
one: null,
inProgress: true,
validFromTime: '',
validFromDate: '',
validToTime: '',
validToDate: ''
},
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]
}
},
inProgress(state, yesOrNo) {
state.inProgress = yesOrNo
},
setDates(state) {
state.one.validFrom = new Date(state.validFromDate + " " + state.validFromTime)
state.one.validTo = new Date(state.validToDate + " " + state.validToTime)
},
clearDates(state) {
state.validFromDate = ''
state.validFromTime = ''
state.validToDate = ''
state.validToTime = ''
}
},
actions: {
new({ commit }, { businessEntityId, serviceId, appId }) {
commit('inProgress', false)
commit('clearDates')
commit('setOne', {
'amount': '',
'charging': 'monthly',
'validFrom': '',
'validTo': '',
'serviceId': serviceId,
'appId': appId,
'businessEntityId': businessEntityId
})
},
fetchOne: async ({ commit }, { servicePricingId, appId }) => {
commit('inProgress', true)
try {
const servicePricing = await doFetchOne({ servicePricingId, appId })
if (servicePricing) {
commit('setOne', humps(servicePricing))
return servicePricing
}
}
// eslint-disable-next-line no-useless-catch
catch (err) {
throw err
}
finally {
commit('inProgress', false)
}
},
save: async ({ commit, state }) => {
commit('inProgress', true)
try {
commit('setDates')
if (undefined === state.one.id) {
await doPostOne(snakes(state.one))
commit('clearDates')
commit('inProgress', false)
return ({ new: true })
} else {
await doPatchOne(snakes(state.one))
commit('clearDates')
commit('inProgress', false)
return ({ update: true })
}
}
// eslint-disable-next-line no-useless-catch
catch (err) {
throw err
}
finally {
commit('inProgress', false)
}
},
},
}