HEX
Server: Microsoft-IIS/8.5
System: Windows NT YDAWBH120 6.3 build 9600 (Windows Server 2012 R2 Standard Edition) AMD64
User: tentjecom_web (0)
PHP: 7.4.14
Disabled: NONE
Upload Files
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}
}