@@ -11,7 +11,9 @@ var vuexEasyAccess = require('vuex-easy-access');
1111var isWhat = require ( 'is-what' ) ;
1212var copy = _interopDefault ( require ( 'copy-anything' ) ) ;
1313var mergeAnything = require ( 'merge-anything' ) ;
14- var flatten = _interopDefault ( require ( 'flatten-anything' ) ) ;
14+ var flatten = require ( 'flatten-anything' ) ;
15+ var flatten__default = _interopDefault ( flatten ) ;
16+ var pathToProp = _interopDefault ( require ( 'path-to-prop' ) ) ;
1517var compareAnything = require ( 'compare-anything' ) ;
1618var findAndReplaceAnything = require ( 'find-and-replace-anything' ) ;
1719var filter = _interopDefault ( require ( 'filter-anything' ) ) ;
@@ -402,31 +404,40 @@ function pluginMutations (userState) {
402404 }
403405 } ,
404406 PATCH_DOC : function ( state , patches ) {
405- var _this = this ;
406407 // Get the state prop ref
407- var ref = state . _conf . statePropName
408- ? state [ state . _conf . statePropName ]
409- : state ;
408+ var ref = state . _conf . statePropName ? state [ state . _conf . statePropName ] : state ;
410409 if ( state . _conf . firestoreRefType . toLowerCase ( ) === 'collection' ) {
411410 ref = ref [ patches . id ] ;
412411 }
413412 if ( ! ref )
414413 return error ( 'patch-no-ref' ) ;
415- return Object . keys ( patches ) . forEach ( function ( key ) {
416- var newVal = patches [ key ] ;
417- // Merge if exists
418- function helpers ( originVal , newVal ) {
419- if ( isWhat . isArray ( originVal ) && isArrayHelper ( newVal ) ) {
420- newVal = newVal . executeOn ( originVal ) ;
421- }
422- if ( isWhat . isNumber ( originVal ) && isIncrementHelper ( newVal ) ) {
423- newVal = newVal . executeOn ( originVal ) ;
424- }
425- return newVal ; // always return newVal as fallback!!
414+ function convertHelpers ( originVal , newVal ) {
415+ if ( isWhat . isArray ( originVal ) && isArrayHelper ( newVal ) ) {
416+ newVal = newVal . executeOn ( originVal ) ;
426417 }
427- newVal = mergeAnything . merge ( { extensions : [ helpers ] } , ref [ key ] , patches [ key ] ) ;
428- _this . _vm . $set ( ref , key , newVal ) ;
429- } ) ;
418+ if ( isWhat . isNumber ( originVal ) && isIncrementHelper ( newVal ) ) {
419+ newVal = newVal . executeOn ( originVal ) ;
420+ }
421+ return newVal ; // always return newVal as fallback!!
422+ }
423+ // const refPropsPicked = filter(ref, Object.keys(patches))
424+ // const patchesSanitised = merge({ extensions: [convertHelpers] }, refPropsPicked, patches)
425+ var patchesFlat = flatten . flattenObject ( patches ) ;
426+ for ( var _i = 0 , _a = Object . entries ( patchesFlat ) ; _i < _a . length ; _i ++ ) {
427+ var _b = _a [ _i ] , path = _b [ 0 ] , value = _b [ 1 ] ;
428+ var targetVal = pathToProp ( ref , path ) ;
429+ var newVal = convertHelpers ( targetVal , value ) ;
430+ // do not update anything if the values are the same
431+ // this is technically not required, because vue takes care of this as well:
432+ if ( targetVal === newVal )
433+ return ;
434+ // update just the nested value
435+ var pathParts = path . split ( '.' ) ;
436+ var prop = pathParts . pop ( ) ;
437+ var pathParent = pathParts . join ( '' ) ;
438+ var targetForNestedProp = pathToProp ( ref , pathParent ) ;
439+ this . _vm . $set ( targetForNestedProp , prop , newVal ) ;
440+ }
430441 } ,
431442 DELETE_DOC : function ( state , id ) {
432443 if ( state . _conf . firestoreRefType . toLowerCase ( ) !== 'collection' )
@@ -439,17 +450,15 @@ function pluginMutations (userState) {
439450 }
440451 } ,
441452 DELETE_PROP : function ( state , path ) {
442- var searchTarget = state . _conf . statePropName
443- ? state [ state . _conf . statePropName ]
444- : state ;
453+ var searchTarget = state . _conf . statePropName ? state [ state . _conf . statePropName ] : state ;
445454 var propArr = path . split ( '.' ) ;
446455 var target = propArr . pop ( ) ;
447456 if ( ! propArr . length ) {
448457 return this . _vm . $delete ( searchTarget , target ) ;
449458 }
450459 var ref = vuexEasyAccess . getDeepRef ( searchTarget , propArr . join ( '.' ) ) ;
451460 return this . _vm . $delete ( ref , target ) ;
452- }
461+ } ,
453462 } ;
454463}
455464
@@ -1290,9 +1299,9 @@ function pluginActions (Firebase) {
12901299 var getters = _a . getters , commit = _a . commit ;
12911300 var defaultValues = getters . defaultValues ;
12921301 var searchTarget = getters . collectionMode ? getters . storeRef [ doc . id ] : getters . storeRef ;
1293- var compareInfo = compareAnything . compareObjectProps ( flatten ( doc ) , // presentIn 0
1294- flatten ( defaultValues ) , // presentIn 1
1295- flatten ( searchTarget ) // presentIn 2
1302+ var compareInfo = compareAnything . compareObjectProps ( flatten__default ( doc ) , // presentIn 0
1303+ flatten__default ( defaultValues ) , // presentIn 1
1304+ flatten__default ( searchTarget ) // presentIn 2
12961305 ) ;
12971306 Object . keys ( compareInfo . presentIn ) . forEach ( function ( prop ) {
12981307 // don't worry about props not in fillables
@@ -1902,7 +1911,7 @@ function pluginGetters (Firebase) {
19021911 patchData . updated_by = state . _sync . userId ;
19031912 // clean up item
19041913 var cleanedPatchData = filter ( patchData , getters . fillables , getters . guard ) ;
1905- var itemToUpdate = flatten ( cleanedPatchData ) ;
1914+ var itemToUpdate = flatten__default ( cleanedPatchData ) ;
19061915 // add id (required to get ref later at apiHelpers.ts)
19071916 // @ts -ignore
19081917 itemToUpdate . id = id ;
0 commit comments