File: D:/HostingSpaces/SBogers10/shop.komma.nl/resources/js/store/modules/shop-address.js
import {
addressActions,
addressGetters,
addressMutations,
addressState
} from './address'
import AddressService from '../../shopAddressService'
import ErrorHandler from '../../../js/errorHandler';
const addressService = new AddressService();
const shopState = {
invoiceAddress: null,
shippingAddress: null,
}
const shopMutations = {
storeInvoiceAddress(state, address) {
state.invoiceAddress = address;
},
storeShippingAddress(state, address) {
state.shippingAddress = address;
},
};
const shopGetters = {
all(state) {
return () => {
const addedIndexes = [];
return state.addresses.concat(state.invoiceAddress, state.shippingAddress, state.accountAddress).filter((address) => {
if(!address) return false;
//Make sure that the given address is only added once to the result array
const alreadyInArray = addedIndexes.indexOf(address.id) !== -1
addedIndexes.push(address.id);
return !alreadyInArray;
})
}
},
allButAccount(state, getters) {
return () => {
const allAddresses = getters.all();
return allAddresses.filter((address) => {
return !state.accountAddress || address.id !== state.accountAddress.id
}) //Filter out the account address
}
},
}
const shopActions = {
loadInvoiceAddress({ commit, getters }) {
commit('requesting', 'loadInvoiceAddress')
let promise = addressService.invoiceAddress().then((response) => {
commit('storeInvoiceAddress', response.data.data);
return response.data.data;
});
promise.catch(ErrorHandler.logFor('loadInvoiceAddress')).finally(() => {
commit('clearRequest', 'loadInvoiceAddress')
})
return promise;
},
markAsInvoiceAddress({ commit, getters, dispatch }, address) {
commit('requesting', 'markAsInvoiceAddress')
let promise = addressService.markAsInvoiceAddress(address).then((response) => {
dispatch('loadInvoiceAddress');
})
promise.catch(ErrorHandler.logFor('markAsInvoiceAddress')).finally(() => {
commit('clearRequest', 'markAsInvoiceAddress')
})
return promise
},
clearInvoiceAddress({ commit, getters, dispatch }, address) {
commit('requesting', 'clearInvoiceAddress')
let promise = addressService.clearInvoiceAddress(address).then((response) => {
dispatch('loadInvoiceAddress');
return null;
})
promise.catch(ErrorHandler.logFor('clearInvoiceAddress')).finally(() => {
commit('clearRequest', 'clearInvoiceAddress')
})
return promise;
},
loadShippingAddress({ commit, getters }) {
commit('requesting', 'loadShippingAddress')
let promise = addressService.shippingAddress().then((response) => {
commit('storeShippingAddress', response.data.data);
return response.data.data;
})
promise.catch(ErrorHandler.logFor('loadShippingAddress')).finally(() => {
commit('clearRequest', 'loadShippingAddress')
})
return promise;
},
markAsShippingAddress({ commit, getters, dispatch }, address) {
commit('requesting', 'markAsShippingAddress')
let promise = addressService.markAsShippingAddress(address).then((response) => {
dispatch('loadShippingAddress');
return null;
});
promise.catch(ErrorHandler.logFor('markAsShippingAddress')).finally(() => {
commit('clearRequest', 'markAsShippingAddress')
})
return promise;
},
clearShippingAddress({ commit, getters, dispatch }, address) {
commit('requesting', 'clearShippingAddress')
let promise = addressService.clearShippingAddress(address).then((response) => {
dispatch('loadShippingAddress');
return null;
})
promise.catch(ErrorHandler.logFor('clearShippingAddress')).finally(() => {
commit('clearRequest', 'clearShippingAddress')
})
return promise;
},
usersAddressesAsCheckoutAddresses({commit, dispatch}) {
commit('requesting', 'usersAddressesAsCheckoutAddresses')
let promise = addressService.usersAddressesAsCheckoutAddresses().then(() => {
dispatch('loadShippingAddress');
dispatch('loadInvoiceAddress');
})
promise.catch(ErrorHandler.logFor('usersAddressesAsCheckoutAddresses')).finally(() => {
commit('clearRequest', 'usersAddressesAsCheckoutAddresses')
})
return promise;
}
}
export default {
namespaced: true,
state: {...addressState, ...shopState},
actions: {...addressActions, ...shopActions},
getters: {...addressGetters, ...shopGetters},
mutations: {...addressMutations, ...shopMutations}
}