vuex-bound
Version:
Vue two-way binding (v-model) for Vuex state and mutations.
2 lines (1 loc) • 1.41 kB
JavaScript
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t(e.VuexBound={})}(this,function(e){"use strict";var t=function(e){return Array.isArray(e)?e.map(function(e){return{key:e,val:e}}):Object.keys(e).map(function(t){return{key:t,val:e[t]}})},n=function(e){return function(t,n){return"string"!=typeof t&&(n=t,t=""),e(t,n)}},r=n(function(e,n){var r={};return t(n).forEach(function(t){var n=t.key,i=t.val;r[n]={get:function(){if(!e){var t=this.$store.state;return"function"==typeof i?i(t):t[n]}var r=e.split("/").reduce(function(e,t){return e[t]},this.$store.state);return"function"==typeof i?i(r):r[n]},set:function(t){var n=e?e.split("/").join("/")+"/updateModel":"updateModel",r=i;if("function"==typeof i){var u=String(i);r=u.substring(u.indexOf("state.")+6,-1===u.indexOf(";")?void 0:u.indexOf(";"))}this.$store.commit(n,{label:r,value:t})}}}),r});e.normalizeMap=t,e.normalizeNamespace=n,e.mapModel=r,e.updateModel=function(){return{updateModel:function(e,t){var n=t.label,r=t.value;if(n.includes(".")){for(var i=n.split(".").map(function(e){var t=[];if(/\[\d\]/g.test(e)){var n=e.substring(e.length-3,-1),r=e.slice(-2,-1);t.push(n,r)}else t.push(e);return t}).reduce(function(e,t){return e.concat(t)},[]),u=0;u<i.length-1;u+=1)e=e[i[u]];e[i[i.length-1]]=r}else e[n]=r}}},Object.defineProperty(e,"__esModule",{value:!0})});