1
1
import deepmerge from 'deepmerge'
2
2
import applyTemplate from './applyTemplate'
3
+ import { metaInfoAttributeKeys } from './constants'
3
4
4
5
export function arrayMerge ( { component, tagIDKeyName, metaTemplateKeyName, contentKeyName } , target , source ) {
5
6
// we concat the arrays without merging objects contained in,
@@ -15,9 +16,11 @@ export function arrayMerge({ component, tagIDKeyName, metaTemplateKeyName, conte
15
16
}
16
17
17
18
const sourceIndex = source . findIndex ( item => item [ tagIDKeyName ] === targetItem [ tagIDKeyName ] )
19
+ const sourceItem = source [ sourceIndex ]
18
20
19
21
// source doesnt contain any duplicate id's
20
- if ( sourceIndex === - 1 ) {
22
+ // or the source item should be ignored
23
+ if ( sourceIndex === - 1 || sourceItem [ contentKeyName ] === false || sourceItem . innerHTML === false ) {
21
24
destination . push ( targetItem )
22
25
return
23
26
}
@@ -29,7 +32,6 @@ export function arrayMerge({ component, tagIDKeyName, metaTemplateKeyName, conte
29
32
return
30
33
}
31
34
32
- const sourceItem = source [ sourceIndex ]
33
35
const sourceTemplate = sourceItem [ metaTemplateKeyName ]
34
36
35
37
if ( ! sourceTemplate ) {
@@ -45,6 +47,25 @@ export function arrayMerge({ component, tagIDKeyName, metaTemplateKeyName, conte
45
47
}
46
48
47
49
export function merge ( target , source , options = { } ) {
50
+ // remove properties explicitly set to false so child components can
51
+ // optionally _not_ overwrite the parents content
52
+ // (for array properties this is checked in arrayMerge)
53
+ if ( source . title === false ) {
54
+ delete source . title
55
+ }
56
+
57
+ for ( const attrKey in metaInfoAttributeKeys ) {
58
+ if ( ! source [ attrKey ] ) {
59
+ continue
60
+ }
61
+
62
+ for ( const key in source [ attrKey ] ) {
63
+ if ( source [ attrKey ] [ key ] === false ) {
64
+ delete source [ attrKey ] [ key ]
65
+ }
66
+ }
67
+ }
68
+
48
69
return deepmerge ( target , source , {
49
70
arrayMerge : ( t , s ) => arrayMerge ( options , t , s )
50
71
} )
0 commit comments