import Vue from 'vue' const state = {} const mutations = { SET_FORM_DATA(state, { page, elementId, payload }) { if (!page.formData) { Vue.set(page, 'formData', {}) } // When the payload is being initialized, if it // doesn't have a 'touched' property, we set it to false if (!Object.prototype.hasOwnProperty.call(payload, 'touched')) { payload.touched = false } page.formData = { ...page.formData, [elementId]: payload } }, REMOVE_FORM_DATA(state, { page, elementId }) { page.formData = Object.fromEntries( Object.entries(page.formData).filter( ([key]) => key !== elementId.toString() ) ) }, SET_ELEMENT_TOUCHED(state, { page, elementId, wasTouched }) { page.formData[elementId].touched = wasTouched }, } const actions = { setFormData({ commit }, { page, elementId, payload }) { commit('SET_FORM_DATA', { page, elementId, payload }) }, removeFormData({ commit }, { page, elementId }) { commit('REMOVE_FORM_DATA', { page, elementId }) }, setElementTouched({ commit }, { page, elementId, wasTouched }) { commit('SET_ELEMENT_TOUCHED', { page, elementId, wasTouched }) }, } const getters = { getFormData: (state) => (page) => { return page.formData || {} }, getElementTouched: (state, getters) => (page, elementId) => { return page.formData[elementId].touched }, } export default { namespaced: true, state, actions, getters, mutations, }