@prismicio/types-internal 2.2.1 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (193) hide show
  1. package/lib/content/Document.d.ts +10 -4
  2. package/lib/content/Document.js +45 -11
  3. package/lib/content/fields/GroupContent.d.ts +1 -0
  4. package/lib/content/fields/GroupContent.js +13 -1
  5. package/lib/content/fields/nestable/BooleanContent.d.ts +2 -0
  6. package/lib/content/fields/nestable/BooleanContent.js +11 -1
  7. package/lib/content/fields/nestable/FieldContent/SelectContent.d.ts +2 -0
  8. package/lib/content/fields/nestable/FieldContent/SelectContent.js +12 -1
  9. package/lib/content/fields/nestable/NestableContent.d.ts +2 -0
  10. package/lib/content/fields/nestable/NestableContent.js +12 -1
  11. package/lib/content/fields/slices/Slice/CompositeSliceContent.d.ts +1 -0
  12. package/lib/content/fields/slices/Slice/CompositeSliceContent.js +13 -1
  13. package/lib/content/fields/slices/Slice/SharedSliceContent.d.ts +2 -1
  14. package/lib/content/fields/slices/Slice/SharedSliceContent.js +16 -1
  15. package/lib/content/fields/slices/SliceItem.d.ts +3 -0
  16. package/lib/content/fields/slices/SliceItem.js +24 -1
  17. package/lib/content/fields/slices/SlicesContent.d.ts +1 -0
  18. package/lib/content/fields/slices/SlicesContent.js +23 -1
  19. package/lib/content/fields/withDefaultValues.d.ts +6 -0
  20. package/lib/content/fields/withDefaultValues.js +38 -0
  21. package/lib/import/converters/Document.d.ts +4 -0
  22. package/lib/import/converters/Document.js +21 -0
  23. package/lib/import/converters/fields/Group.d.ts +4 -0
  24. package/lib/import/converters/fields/Group.js +14 -0
  25. package/lib/import/converters/fields/RepeatableZone.d.ts +317 -0
  26. package/lib/import/converters/fields/RepeatableZone.js +15 -0
  27. package/lib/import/converters/fields/RepeatableZoneItem.d.ts +11 -0
  28. package/lib/import/converters/fields/RepeatableZoneItem.js +19 -0
  29. package/lib/import/converters/fields/Slices/SharedSlice.d.ts +4 -0
  30. package/lib/import/converters/fields/Slices/SharedSlice.js +19 -0
  31. package/lib/import/converters/fields/Slices/SharedSliceContent.d.ts +10 -0
  32. package/lib/import/converters/fields/Slices/SharedSliceContent.js +23 -0
  33. package/lib/import/converters/fields/Slices/Slices.d.ts +4 -0
  34. package/lib/import/converters/fields/Slices/Slices.js +16 -0
  35. package/lib/import/converters/fields/Slices/index.d.ts +1 -0
  36. package/lib/import/converters/fields/Slices/index.js +4 -0
  37. package/lib/import/converters/fields/UID.d.ts +3 -0
  38. package/lib/import/converters/fields/UID.js +10 -0
  39. package/lib/import/converters/fields/index.d.ts +4 -0
  40. package/lib/import/converters/fields/index.js +7 -0
  41. package/lib/import/converters/fields/nestable/Boolean.d.ts +3 -0
  42. package/lib/import/converters/fields/nestable/Boolean.js +12 -0
  43. package/lib/import/converters/fields/nestable/Color.d.ts +3 -0
  44. package/lib/import/converters/fields/nestable/Color.js +13 -0
  45. package/lib/import/converters/fields/nestable/Date.d.ts +3 -0
  46. package/lib/import/converters/fields/nestable/Date.js +15 -0
  47. package/lib/import/converters/fields/nestable/Embed.d.ts +4 -0
  48. package/lib/import/converters/fields/nestable/Embed.js +32 -0
  49. package/lib/import/converters/fields/nestable/GeoPoint.d.ts +3 -0
  50. package/lib/import/converters/fields/nestable/GeoPoint.js +15 -0
  51. package/lib/import/converters/fields/nestable/Image.d.ts +28 -0
  52. package/lib/import/converters/fields/nestable/Image.js +67 -0
  53. package/lib/import/converters/fields/nestable/Link.d.ts +4 -0
  54. package/lib/import/converters/fields/nestable/Link.js +70 -0
  55. package/lib/import/converters/fields/nestable/Nestable.d.ts +5 -0
  56. package/lib/import/converters/fields/nestable/Nestable.js +35 -0
  57. package/lib/import/converters/fields/nestable/Number.d.ts +3 -0
  58. package/lib/import/converters/fields/nestable/Number.js +13 -0
  59. package/lib/import/converters/fields/nestable/RichText/embedBlock.d.ts +4 -0
  60. package/lib/import/converters/fields/nestable/RichText/embedBlock.js +14 -0
  61. package/lib/import/converters/fields/nestable/RichText/imageBlock.d.ts +4 -0
  62. package/lib/import/converters/fields/nestable/RichText/imageBlock.js +12 -0
  63. package/lib/import/converters/fields/nestable/RichText/index.d.ts +4 -0
  64. package/lib/import/converters/fields/nestable/RichText/index.js +22 -0
  65. package/lib/import/converters/fields/nestable/RichText/textBlock.d.ts +4 -0
  66. package/lib/import/converters/fields/nestable/RichText/textBlock.js +54 -0
  67. package/lib/import/converters/fields/nestable/Select.d.ts +3 -0
  68. package/lib/import/converters/fields/nestable/Select.js +13 -0
  69. package/lib/import/converters/fields/nestable/Text.d.ts +3 -0
  70. package/lib/import/converters/fields/nestable/Text.js +13 -0
  71. package/lib/import/converters/fields/nestable/Timestamp.d.ts +3 -0
  72. package/lib/import/converters/fields/nestable/Timestamp.js +13 -0
  73. package/lib/import/converters/fields/nestable/index.d.ts +13 -0
  74. package/lib/import/converters/fields/nestable/index.js +16 -0
  75. package/lib/import/converters/index.d.ts +2 -0
  76. package/lib/import/converters/index.js +5 -0
  77. package/lib/import/index.d.ts +2 -0
  78. package/lib/import/index.js +5 -0
  79. package/lib/import/validators/Document.d.ts +6 -0
  80. package/lib/import/validators/Document.js +64 -0
  81. package/lib/import/validators/fields/ImportContent.d.ts +5 -0
  82. package/lib/import/validators/fields/ImportContent.js +21 -0
  83. package/lib/import/validators/fields/ImportField.d.ts +141 -0
  84. package/lib/import/validators/fields/ImportField.js +33 -0
  85. package/lib/import/validators/fields/ImportGroup.d.ts +345 -0
  86. package/lib/import/validators/fields/ImportGroup.js +27 -0
  87. package/lib/import/validators/fields/ImportSlices/ImportSlices.d.ts +8 -0
  88. package/lib/import/validators/fields/ImportSlices/ImportSlices.js +30 -0
  89. package/lib/import/validators/fields/ImportSlices/SharedSlice/SharedSlice.d.ts +16 -0
  90. package/lib/import/validators/fields/ImportSlices/SharedSlice/SharedSlice.js +61 -0
  91. package/lib/import/validators/fields/ImportSlices/SharedSlice/errors.d.ts +4 -0
  92. package/lib/import/validators/fields/ImportSlices/SharedSlice/errors.js +7 -0
  93. package/lib/import/validators/fields/ImportSlices/SharedSlice/fields/OptionalSharedSliceId.d.ts +2 -0
  94. package/lib/import/validators/fields/ImportSlices/SharedSlice/fields/OptionalSharedSliceId.js +15 -0
  95. package/lib/import/validators/fields/ImportSlices/SharedSlice/fields/SharedSliceId.d.ts +9 -0
  96. package/lib/import/validators/fields/ImportSlices/SharedSlice/fields/SharedSliceId.js +39 -0
  97. package/lib/import/validators/fields/ImportSlices/SharedSlice/fields/SharedSliceType.d.ts +11 -0
  98. package/lib/import/validators/fields/ImportSlices/SharedSlice/fields/SharedSliceType.js +24 -0
  99. package/lib/import/validators/fields/ImportSlices/SharedSlice/fields/SharedSliceVariation.d.ts +11 -0
  100. package/lib/import/validators/fields/ImportSlices/SharedSlice/fields/SharedSliceVariation.js +24 -0
  101. package/lib/import/validators/fields/ImportSlices/SharedSlice/fields/index.d.ts +4 -0
  102. package/lib/import/validators/fields/ImportSlices/SharedSlice/fields/index.js +7 -0
  103. package/lib/import/validators/fields/ImportSlices/SharedSlice/index.d.ts +3 -0
  104. package/lib/import/validators/fields/ImportSlices/SharedSlice/index.js +6 -0
  105. package/lib/import/validators/fields/ImportSlices/SharedSlice/utils.d.ts +342 -0
  106. package/lib/import/validators/fields/ImportSlices/SharedSlice/utils.js +11 -0
  107. package/lib/import/validators/fields/ImportSlices/index.d.ts +1 -0
  108. package/lib/import/validators/fields/ImportSlices/index.js +4 -0
  109. package/lib/import/validators/fields/ImportSlices/utils.d.ts +4 -0
  110. package/lib/import/validators/fields/ImportSlices/utils.js +35 -0
  111. package/lib/import/validators/fields/RepeatableZone.d.ts +11 -0
  112. package/lib/import/validators/fields/RepeatableZone.js +14 -0
  113. package/lib/import/validators/fields/RepeatableZoneItem.d.ts +11 -0
  114. package/lib/import/validators/fields/RepeatableZoneItem.js +39 -0
  115. package/lib/import/validators/fields/UID.d.ts +6 -0
  116. package/lib/import/validators/fields/UID.js +15 -0
  117. package/lib/import/validators/fields/index.d.ts +4 -0
  118. package/lib/import/validators/fields/index.js +7 -0
  119. package/lib/import/validators/fields/nestable/Boolean.d.ts +6 -0
  120. package/lib/import/validators/fields/nestable/Boolean.js +6 -0
  121. package/lib/import/validators/fields/nestable/Color.d.ts +6 -0
  122. package/lib/import/validators/fields/nestable/Color.js +15 -0
  123. package/lib/import/validators/fields/nestable/Date.d.ts +6 -0
  124. package/lib/import/validators/fields/nestable/Date.js +19 -0
  125. package/lib/import/validators/fields/nestable/Embed.d.ts +13 -0
  126. package/lib/import/validators/fields/nestable/Embed.js +31 -0
  127. package/lib/import/validators/fields/nestable/GeoPoint.d.ts +13 -0
  128. package/lib/import/validators/fields/nestable/GeoPoint.js +13 -0
  129. package/lib/import/validators/fields/nestable/Image/default.d.ts +22 -0
  130. package/lib/import/validators/fields/nestable/Image/default.js +19 -0
  131. package/lib/import/validators/fields/nestable/Image/index.d.ts +26 -0
  132. package/lib/import/validators/fields/nestable/Image/index.js +32 -0
  133. package/lib/import/validators/fields/nestable/Image/merge.d.ts +23 -0
  134. package/lib/import/validators/fields/nestable/Image/merge.js +44 -0
  135. package/lib/import/validators/fields/nestable/Image/model.d.ts +18 -0
  136. package/lib/import/validators/fields/nestable/Image/model.js +2 -0
  137. package/lib/import/validators/fields/nestable/Image/validators.d.ts +132 -0
  138. package/lib/import/validators/fields/nestable/Image/validators.js +43 -0
  139. package/lib/import/validators/fields/nestable/ImportRichText/ImportBlock.d.ts +6 -0
  140. package/lib/import/validators/fields/nestable/ImportRichText/ImportBlock.js +25 -0
  141. package/lib/import/validators/fields/nestable/ImportRichText/ImportRichText.d.ts +24 -0
  142. package/lib/import/validators/fields/nestable/ImportRichText/ImportRichText.js +32 -0
  143. package/lib/import/validators/fields/nestable/ImportRichText/blocks/ImportBlockType.d.ts +6 -0
  144. package/lib/import/validators/fields/nestable/ImportRichText/blocks/ImportBlockType.js +18 -0
  145. package/lib/import/validators/fields/nestable/ImportRichText/blocks/ImportEmbedBlock.d.ts +10 -0
  146. package/lib/import/validators/fields/nestable/ImportRichText/blocks/ImportEmbedBlock.js +11 -0
  147. package/lib/import/validators/fields/nestable/ImportRichText/blocks/ImportImageBlock.d.ts +22 -0
  148. package/lib/import/validators/fields/nestable/ImportRichText/blocks/ImportImageBlock.js +13 -0
  149. package/lib/import/validators/fields/nestable/ImportRichText/blocks/ImportTextBlock.d.ts +78 -0
  150. package/lib/import/validators/fields/nestable/ImportRichText/blocks/ImportTextBlock.js +43 -0
  151. package/lib/import/validators/fields/nestable/ImportRichText/blocks/Span.d.ts +79 -0
  152. package/lib/import/validators/fields/nestable/ImportRichText/blocks/Span.js +27 -0
  153. package/lib/import/validators/fields/nestable/ImportRichText/blocks/index.d.ts +4 -0
  154. package/lib/import/validators/fields/nestable/ImportRichText/blocks/index.js +7 -0
  155. package/lib/import/validators/fields/nestable/ImportRichText/blocks/spans/HyperlinkSpan.d.ts +24 -0
  156. package/lib/import/validators/fields/nestable/ImportRichText/blocks/spans/HyperlinkSpan.js +18 -0
  157. package/lib/import/validators/fields/nestable/ImportRichText/blocks/spans/LabelSpan.d.ts +12 -0
  158. package/lib/import/validators/fields/nestable/ImportRichText/blocks/spans/LabelSpan.js +16 -0
  159. package/lib/import/validators/fields/nestable/ImportRichText/blocks/spans/SpanLocation.d.ts +5 -0
  160. package/lib/import/validators/fields/nestable/ImportRichText/blocks/spans/SpanLocation.js +10 -0
  161. package/lib/import/validators/fields/nestable/ImportRichText/blocks/spans/TextSpan.d.ts +15 -0
  162. package/lib/import/validators/fields/nestable/ImportRichText/blocks/spans/TextSpan.js +20 -0
  163. package/lib/import/validators/fields/nestable/ImportRichText/blocks/spans/index.d.ts +2 -0
  164. package/lib/import/validators/fields/nestable/ImportRichText/blocks/spans/index.js +5 -0
  165. package/lib/import/validators/fields/nestable/ImportRichText/index.d.ts +2 -0
  166. package/lib/import/validators/fields/nestable/ImportRichText/index.js +7 -0
  167. package/lib/import/validators/fields/nestable/Link.d.ts +53 -0
  168. package/lib/import/validators/fields/nestable/Link.js +35 -0
  169. package/lib/import/validators/fields/nestable/Nestable.d.ts +192 -0
  170. package/lib/import/validators/fields/nestable/Nestable.js +71 -0
  171. package/lib/import/validators/fields/nestable/Number.d.ts +17 -0
  172. package/lib/import/validators/fields/nestable/Number.js +17 -0
  173. package/lib/import/validators/fields/nestable/Select.d.ts +16 -0
  174. package/lib/import/validators/fields/nestable/Select.js +19 -0
  175. package/lib/import/validators/fields/nestable/Text.d.ts +6 -0
  176. package/lib/import/validators/fields/nestable/Text.js +6 -0
  177. package/lib/import/validators/fields/nestable/Timestamp.d.ts +7 -0
  178. package/lib/import/validators/fields/nestable/Timestamp.js +19 -0
  179. package/lib/import/validators/fields/nestable/index.d.ts +14 -0
  180. package/lib/import/validators/fields/nestable/index.js +19 -0
  181. package/lib/import/validators/index.d.ts +2 -0
  182. package/lib/import/validators/index.js +5 -0
  183. package/package.json +1 -1
  184. package/src/content/Document.ts +68 -14
  185. package/src/content/fields/GroupContent.ts +16 -0
  186. package/src/content/fields/nestable/BooleanContent.ts +11 -0
  187. package/src/content/fields/nestable/FieldContent/SelectContent.ts +12 -1
  188. package/src/content/fields/nestable/NestableContent.ts +16 -0
  189. package/src/content/fields/slices/Slice/CompositeSliceContent.ts +25 -0
  190. package/src/content/fields/slices/Slice/SharedSliceContent.ts +32 -1
  191. package/src/content/fields/slices/SliceItem.ts +43 -1
  192. package/src/content/fields/slices/SlicesContent.ts +30 -0
  193. package/src/content/fields/withDefaultValues.ts +48 -0
@@ -21,6 +21,10 @@ import {
21
21
  NestableContent,
22
22
  NestableLegacy,
23
23
  } from "../../nestable"
24
+ import {
25
+ repeatableContentWithDefaultNestableContentValues,
26
+ withDefaultNestableContentValues,
27
+ } from "../../withDefaultValues"
24
28
  import type {
25
29
  CompositeSliceItemContent,
26
30
  SharedSliceItemContent,
@@ -133,6 +137,27 @@ export const CompositeSliceContent = t.strict({
133
137
 
134
138
  export type CompositeSliceContent = t.TypeOf<typeof CompositeSliceContent>
135
139
 
140
+ export function compositeSliceContentWithDefaultValues(
141
+ customType: CompositeSlice,
142
+ content: CompositeSliceContent,
143
+ ): CompositeSliceContent {
144
+ const updatedNonRepeatContent = withDefaultNestableContentValues(
145
+ customType["non-repeat"] ?? {},
146
+ content.nonRepeat,
147
+ )
148
+ const updatedRepeatContent =
149
+ repeatableContentWithDefaultNestableContentValues(
150
+ customType.repeat ?? {},
151
+ content.repeat,
152
+ )
153
+
154
+ return {
155
+ ...content,
156
+ nonRepeat: updatedNonRepeatContent,
157
+ repeat: updatedRepeatContent,
158
+ }
159
+ }
160
+
136
161
  export function traverseCompositeSliceContent({
137
162
  path,
138
163
  sliceKey,
@@ -9,7 +9,7 @@ import type {
9
9
  TraverseSliceContentFn,
10
10
  TraverseWidgetContentFn,
11
11
  } from "../../../../_internal/utils"
12
- import type { VariationFields } from "../../../../customtypes"
12
+ import type { SharedSlice, VariationFields } from "../../../../customtypes"
13
13
  import {
14
14
  getFieldCtx,
15
15
  LegacyContentCtx,
@@ -22,6 +22,10 @@ import {
22
22
  NestableContent,
23
23
  NestableLegacy,
24
24
  } from "../../nestable"
25
+ import {
26
+ repeatableContentWithDefaultNestableContentValues,
27
+ withDefaultNestableContentValues,
28
+ } from "../../withDefaultValues"
25
29
  import type { SharedSliceItemContent } from "../SliceItem"
26
30
  import { RepeatableWidgets, RepeatableWidgetsLegacy } from "./RepeatableContent"
27
31
 
@@ -141,6 +145,33 @@ export const SharedSliceContent = t.strict({
141
145
  })
142
146
  export type SharedSliceContent = t.TypeOf<typeof SharedSliceContent>
143
147
 
148
+ export function sharedSliceContentWithDefaultValues(
149
+ customType: SharedSlice,
150
+ content: SharedSliceContent,
151
+ ): SharedSliceContent {
152
+ const variationConfig = customType.variations.find(
153
+ (v) => v.id === content.variation,
154
+ )
155
+
156
+ const primaryConfig = variationConfig?.primary ?? {}
157
+ const itemsConfig = variationConfig?.items ?? {}
158
+
159
+ const updatedPrimaryContent = withDefaultNestableContentValues(
160
+ primaryConfig,
161
+ content.primary,
162
+ )
163
+ const updatedItemsContent = repeatableContentWithDefaultNestableContentValues(
164
+ itemsConfig,
165
+ content.items,
166
+ )
167
+
168
+ return {
169
+ ...content,
170
+ primary: updatedPrimaryContent,
171
+ items: updatedItemsContent,
172
+ }
173
+ }
174
+
144
175
  export function traverseSharedSliceContent({
145
176
  path,
146
177
  sliceKey,
@@ -4,6 +4,7 @@ import { pipe } from "fp-ts/lib/function"
4
4
  import * as t from "io-ts"
5
5
 
6
6
  import type { TraverseSliceContentFn } from "../../../_internal/utils"
7
+ import type { StaticSlice } from "../../../customtypes"
7
8
  import { nullable } from "../../../validators/function"
8
9
  import {
9
10
  getFieldCtx,
@@ -12,7 +13,13 @@ import {
12
13
  } from "../../LegacyContentCtx"
13
14
  import { isGroupContent } from "../GroupContent"
14
15
  import { isNestableContent } from "../nestable"
15
- import { SliceContent, SliceLegacy } from "./Slice"
16
+ import { repeatableContentWithDefaultNestableContentValues } from "../withDefaultValues"
17
+ import {
18
+ compositeSliceContentWithDefaultValues,
19
+ sharedSliceContentWithDefaultValues,
20
+ SliceContent,
21
+ SliceLegacy,
22
+ } from "./Slice"
16
23
  import {
17
24
  CompositeSliceContent,
18
25
  isCompositeSliceContent,
@@ -61,6 +68,41 @@ export function isSimpleSliceItemContent(
61
68
  return isGroupContent(item.widget) || isNestableContent(item.widget)
62
69
  }
63
70
 
71
+ export function sliceItemContentWithDefaultValues(
72
+ customType: StaticSlice,
73
+ content: SliceContent,
74
+ ): SliceContent {
75
+ if (customType.type === "SharedSlice" && isSharedSliceContent(content)) {
76
+ return sharedSliceContentWithDefaultValues(customType, content)
77
+ }
78
+
79
+ if (customType.type === "Slice" && isCompositeSliceContent(content)) {
80
+ return compositeSliceContentWithDefaultValues(customType, content)
81
+ }
82
+
83
+ if (
84
+ customType.type === "Group" &&
85
+ isGroupContent(content) &&
86
+ customType.config?.fields
87
+ ) {
88
+ const updateGroupFieldValue =
89
+ repeatableContentWithDefaultNestableContentValues(
90
+ customType.config.fields,
91
+ content.value,
92
+ )
93
+
94
+ return {
95
+ ...content,
96
+ value: updateGroupFieldValue,
97
+ }
98
+ }
99
+
100
+ // Note - SimpleSliceContent can also be a NestableContent, but in that case we have no default value to fill, because the content is already there.
101
+ // There is no key specified in custom type that does not have a value provided like in other cases.
102
+
103
+ return content
104
+ }
105
+
64
106
  const itemLegacyReader = t.exact(
65
107
  t.intersection([
66
108
  t.type({
@@ -33,6 +33,7 @@ import {
33
33
  isSharedSliceItemContent,
34
34
  isSimpleSliceItemContent,
35
35
  SliceItemContent,
36
+ sliceItemContentWithDefaultValues,
36
37
  SlicesItemLegacy,
37
38
  } from "./SliceItem"
38
39
 
@@ -81,6 +82,35 @@ export const SlicesContent = t.type({
81
82
 
82
83
  export type SlicesContent = t.TypeOf<typeof SlicesContent>
83
84
 
85
+ export function slicesContentWithDefaultValues(
86
+ codec: StaticSlices,
87
+ content: SlicesContent,
88
+ ): SlicesContent {
89
+ const choices = codec?.config?.choices
90
+
91
+ if (choices === undefined) return content
92
+
93
+ const updateSlicesValue = content.value.map((slice) => {
94
+ const sliceConfig = choices[slice.name]
95
+ if (sliceConfig) {
96
+ const updatedSliceWidget = sliceItemContentWithDefaultValues(
97
+ sliceConfig,
98
+ slice.widget,
99
+ )
100
+ return {
101
+ ...slice,
102
+ widget: updatedSliceWidget,
103
+ }
104
+ }
105
+ return slice
106
+ })
107
+
108
+ return {
109
+ ...content,
110
+ value: updateSlicesValue,
111
+ }
112
+ }
113
+
84
114
  function findSliceModel(
85
115
  slicesPath: ContentPath,
86
116
  model: StaticSlices,
@@ -0,0 +1,48 @@
1
+ import type { NestableWidget } from "../../customtypes"
2
+ import type { NestableContent } from "./nestable"
3
+ import { NestableContentDefaultValue } from "./nestable"
4
+
5
+ export function withDefaultNestableContentValues(
6
+ customType: Record<string, NestableWidget>,
7
+ content: Record<string, NestableContent>,
8
+ ): Record<string, NestableContent> {
9
+ return Object.entries(customType).reduce<Record<string, NestableContent>>(
10
+ (updatedContent, [widgetKey, widgetDef]) => {
11
+ if (content[widgetKey] === undefined) {
12
+ const defaultValue = NestableContentDefaultValue(widgetDef)
13
+ return defaultValue !== undefined
14
+ ? {
15
+ ...updatedContent,
16
+ [widgetKey]: defaultValue,
17
+ }
18
+ : updatedContent
19
+ }
20
+
21
+ return updatedContent
22
+ },
23
+ content,
24
+ )
25
+ }
26
+
27
+ export function repeatableContentWithDefaultNestableContentValues<
28
+ T extends {
29
+ value: [string, NestableContent][]
30
+ },
31
+ >(fields: Record<string, NestableWidget>, content: T[]): T[] {
32
+ const groupKeys = Object.entries(fields)
33
+ return content.map((contentItem) => {
34
+ return groupKeys.reduce((updatedContentItem, [key, fieldDef]) => {
35
+ if (!contentItem.value.find(([_key]) => _key === key)) {
36
+ const defaultValue = NestableContentDefaultValue(fieldDef)
37
+ return {
38
+ ...updatedContentItem,
39
+ value: [
40
+ ...updatedContentItem.value,
41
+ ...(defaultValue ? [[key, defaultValue]] : []),
42
+ ],
43
+ }
44
+ }
45
+ return updatedContentItem
46
+ }, contentItem)
47
+ })
48
+ }