UNPKG

vuex-map-fields

Version:

Enable two-way data binding for form fields saved in a Vuex store

1 lines 3.4 kB
function _defineProperty(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function _slicedToArray(e,r){return _arrayWithHoles(e)||_iterableToArrayLimit(e,r)||_unsupportedIterableToArray(e,r)||_nonIterableRest()}function _arrayWithHoles(e){if(Array.isArray(e))return e}function _iterableToArrayLimit(e,r){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(e)){var t=[],n=!0,a=!1,o=void 0;try{for(var i,u=e[Symbol.iterator]();!(n=(i=u.next()).done)&&(t.push(i.value),!r||t.length!==r);n=!0);}catch(e){a=!0,o=e}finally{try{n||null==u.return||u.return()}finally{if(a)throw o}}return t}}function _unsupportedIterableToArray(e,r){if(e){if("string"==typeof e)return _arrayLikeToArray(e,r);var t=Object.prototype.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(e,r):void 0}}function _arrayLikeToArray(e,r){(null==r||r>e.length)&&(r=e.length);for(var t=0,n=new Array(r);t<r;t++)n[t]=e[t];return n}function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function arrayToObject(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:[]).reduce(function(e,r){var t=r.split(".").slice(-1)[0];if(e[t])throw new Error("The key `".concat(t,"` is already in use."));return e[t]=r,e},{})}function objectEntries(e){return Object.keys(e).map(function(r){return[r,e[r]]})}function normalizeNamespace(e){return function(){for(var r=arguments.length,t=new Array(r),n=0;n<r;n++)t[n]=arguments[n];var a=_slicedToArray("string"==typeof t[0]?[].concat(t):[""].concat(t),4),o=a[0],i=a[1],u=a[2],c=a[3];return o.length&&"/"!==o.charAt(o.length-1)&&(o+="/"),u="".concat(o).concat(u||"getField"),c="".concat(o).concat(c||"updateField"),e(o,i,u,c)}}function getField(e){return function(r){return r.split(/[.[\]]+/).reduce(function(e,r){return e[r]},e)}}function updateField(e,r){var t=r.path,n=r.value;t.split(/[.[\]]+/).reduce(function(e,r,t,a){return a.length===t+1&&(e[r]=n),e[r]},e)}var mapFields=normalizeNamespace(function(e,r,t,n){var a=Array.isArray(r)?arrayToObject(r):r;return Object.keys(a).reduce(function(e,r){var o=a[r],i={get:function(){return this.$store.getters[t](o)},set:function(e){this.$store.commit(n,{path:o,value:e})}};return e[r]=i,e},{})}),mapMultiRowFields=normalizeNamespace(function(e,r,t,n){var a=Array.isArray(r)?arrayToObject(r):r;return Object.keys(a).reduce(function(e,r){var o=a[r];return e[r]={get:function(){var e=this.$store;return objectEntries(e.getters[t](o)).map(function(r){return Object.keys(r[1]).reduce(function(a,i){var u="".concat(o,"[").concat(r[0],"].").concat(i);return Object.defineProperty(a,i,{get:function(){return e.getters[t](u)},set:function(r){e.commit(n,{path:u,value:r})}})},{})})}},e},{})}),createHelpers=function(e){var r,t=e.getterType,n=e.mutationType;return _defineProperty(r={},t,getField),_defineProperty(r,n,updateField),_defineProperty(r,"mapFields",normalizeNamespace(function(e,r){return mapFields(e,r,t,n)})),_defineProperty(r,"mapMultiRowFields",normalizeNamespace(function(e,r){return mapMultiRowFields(e,r,t,n)})),r};export{createHelpers,getField,mapFields,mapMultiRowFields,updateField};