File tree Expand file tree Collapse file tree 5 files changed +28
-10
lines changed
Expand file tree Collapse file tree 5 files changed +28
-10
lines changed Original file line number Diff line number Diff line change 1- import { isDate , isEmpty , isObject , properObject } from ' ../utils' ;
1+ import { isDate , isEmptyObject , isObject , properObject } from " ../utils" ;
22
33const diff = ( lhs , rhs ) => {
44 if ( lhs === rhs ) return { } ; // equal return no diff
@@ -22,7 +22,9 @@ const diff = (lhs, rhs) => {
2222
2323 const difference = diff ( l [ key ] , r [ key ] ) ;
2424
25- if ( isObject ( difference ) && isEmpty ( difference ) && ! isDate ( difference ) ) return acc ; // return no diff
25+ // If the difference is empty, and the lhs is an empty object or the rhs is not an empty object
26+ if ( isEmptyObject ( difference ) && ! isDate ( difference ) && ( isEmptyObject ( l [ key ] ) || ! isEmptyObject ( r [ key ] ) ) )
27+ return acc ; // return no diff
2628
2729 return { ...acc , [ key ] : difference } ; // return updated key
2830 } , deletedValues ) ;
Original file line number Diff line number Diff line change @@ -43,6 +43,10 @@ describe('.diff', () => {
4343
4444 describe ( 'recursive case' , ( ) => {
4545 describe ( 'object' , ( ) => {
46+ test ( "return right hand side empty object value when left hand side has been updated" , ( ) => {
47+ expect ( diff ( { a : 1 } , { a : { } } ) ) . toEqual ( { a : { } } ) ;
48+ } ) ;
49+
4650 test ( 'returns right hand side value when given objects are different' , ( ) => {
4751 expect ( diff ( { a : 1 } , { a : 2 } ) ) . toEqual ( { a : 2 } ) ;
4852 } ) ;
@@ -77,6 +81,9 @@ describe('.diff', () => {
7781 } ) ;
7882
7983 describe ( 'arrays' , ( ) => {
84+ test ( "return right hand side empty object value when left hand side has been updated" , ( ) => {
85+ expect ( diff ( [ { a : 1 } ] , [ { a : { } } ] ) ) . toEqual ( { 0 : { a : { } } } ) ;
86+ } ) ;
8087 test ( 'returns right hand side value as object of indices to value when arrays are different' , ( ) => {
8188 expect ( diff ( [ 1 ] , [ 2 ] ) ) . toEqual ( { 0 : 2 } ) ;
8289 } ) ;
Original file line number Diff line number Diff line change 1- import { isDate , isEmpty , isObject , properObject } from ' ../utils' ;
1+ import { isDate , isEmptyObject , isObject , properObject } from " ../utils" ;
22
33const updatedDiff = ( lhs , rhs ) => {
4-
54 if ( lhs === rhs ) return { } ;
65
76 if ( ! isObject ( lhs ) || ! isObject ( rhs ) ) return rhs ;
@@ -15,11 +14,12 @@ const updatedDiff = (lhs, rhs) => {
1514 }
1615
1716 return Object . keys ( r ) . reduce ( ( acc , key ) => {
18-
1917 if ( l . hasOwnProperty ( key ) ) {
2018 const difference = updatedDiff ( l [ key ] , r [ key ] ) ;
2119
22- if ( isObject ( difference ) && isEmpty ( difference ) && ! isDate ( difference ) ) return acc ;
20+ // If the difference is empty, and the lhs is an empty object or the rhs is not an empty object
21+ if ( isEmptyObject ( difference ) && ! isDate ( difference ) && ( isEmptyObject ( l [ key ] ) || ! isEmptyObject ( r [ key ] ) ) )
22+ return acc ; // return no diff
2323
2424 return { ...acc , [ key ] : difference } ;
2525 }
Original file line number Diff line number Diff line change @@ -43,6 +43,10 @@ describe('.updatedDiff', () => {
4343
4444 describe ( 'recursive case' , ( ) => {
4545 describe ( 'object' , ( ) => {
46+ test ( "return right hand side empty object value when left hand side has been updated" , ( ) => {
47+ expect ( updatedDiff ( { a : 1 } , { a : { } } ) ) . toEqual ( { a : { } } ) ;
48+ } ) ;
49+
4650 test ( 'returns right hand side value when given objects are different at root' , ( ) => {
4751 expect ( updatedDiff ( { a : 1 } , { a : 2 } ) ) . toEqual ( { a : 2 } ) ;
4852 } ) ;
@@ -77,6 +81,10 @@ describe('.updatedDiff', () => {
7781 } ) ;
7882
7983 describe ( 'arrays' , ( ) => {
84+ test ( "return right hand side empty object value when left hand side has been updated" , ( ) => {
85+ expect ( updatedDiff ( [ { a : 1 } ] , [ { a : { } } ] ) ) . toEqual ( { 0 : { a : { } } } ) ;
86+ } ) ;
87+
8088 test ( 'returns right hand side value as object of indices to value when arrays are different' , ( ) => {
8189 expect ( updatedDiff ( [ 1 ] , [ 2 ] ) ) . toEqual ( { 0 : 2 } ) ;
8290 } ) ;
Original file line number Diff line number Diff line change 1- export const isDate = d => d instanceof Date ;
2- export const isEmpty = o => Object . keys ( o ) . length === 0 ;
3- export const isObject = o => o != null && typeof o === 'object' ;
4- export const properObject = o => isObject ( o ) && ! o . hasOwnProperty ? { ...o } : o ;
1+ export const isDate = ( d ) => d instanceof Date ;
2+ export const isEmpty = ( o ) => Object . keys ( o ) . length === 0 ;
3+ export const isObject = ( o ) => o != null && typeof o === "object" ;
4+ export const properObject = ( o ) => ( isObject ( o ) && ! o . hasOwnProperty ? { ...o } : o ) ;
5+ export const isEmptyObject = ( o ) => isObject ( o ) && isEmpty ( o ) ;
You can’t perform that action at this time.
0 commit comments