@prismicio/types-internal 2.2.1 → 2.3.1

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 +11 -5
  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 +74 -18
  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
@@ -1,10 +1,12 @@
1
1
  import { isRight } from "fp-ts/lib/Either"
2
2
  import * as t from "io-ts"
3
3
 
4
+ import type { NestableWidget } from "../../../customtypes"
4
5
  import type { LegacyContentCtx } from "../../LegacyContentCtx"
5
6
  import { EmptyContent, EmptyLegacy, isEmptyContent } from "../EmptyContent"
6
7
  import {
7
8
  BooleanContent,
9
+ BooleanContentDefaultValue,
8
10
  BooleanContentType,
9
11
  BooleanLegacy,
10
12
  isBooleanContent,
@@ -32,6 +34,7 @@ import {
32
34
  RangeContent,
33
35
  RangeLegacy,
34
36
  SelectContent,
37
+ SelectContentDefaultValue,
35
38
  SelectLegacy,
36
39
  TextContent,
37
40
  TextLegacy,
@@ -97,6 +100,19 @@ export const NestableContent = t.union([
97
100
  export type NestableContent = t.TypeOf<typeof NestableContent>
98
101
  export type NestableContentType = NestableContent["__TYPE__"]
99
102
 
103
+ export const NestableContentDefaultValue = (
104
+ widgetDef: NestableWidget,
105
+ ): NestableContent | undefined => {
106
+ switch (widgetDef.type) {
107
+ case "Boolean":
108
+ return BooleanContentDefaultValue(widgetDef)
109
+ case "Select":
110
+ return SelectContentDefaultValue(widgetDef)
111
+ default:
112
+ return undefined
113
+ }
114
+ }
115
+
100
116
  export const isNestableContent = (u: unknown): u is NestableContent =>
101
117
  isTextContent(u) ||
102
118
  isColorContent(u) ||
@@ -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
+ }