@webiny/app-headless-cms 5.33.5-beta.0 → 5.34.0-beta.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 (461) hide show
  1. package/HeadlessCMS.js +4 -0
  2. package/HeadlessCMS.js.map +1 -1
  3. package/admin/components/ContentEntryForm/ContentEntryForm.js +35 -32
  4. package/admin/components/ContentEntryForm/ContentEntryForm.js.map +1 -1
  5. package/admin/components/ContentEntryForm/Fields.d.ts +2 -2
  6. package/admin/components/ContentEntryForm/Fields.js.map +1 -1
  7. package/admin/components/ContentEntryForm/Label.js +1 -1
  8. package/admin/components/ContentEntryForm/Label.js.map +1 -1
  9. package/admin/components/ContentEntryForm/RenderFieldElement.d.ts +2 -2
  10. package/admin/components/ContentEntryForm/RenderFieldElement.js +6 -2
  11. package/admin/components/ContentEntryForm/RenderFieldElement.js.map +1 -1
  12. package/admin/components/ContentEntryForm/functions/getValue.d.ts +2 -2
  13. package/admin/components/ContentEntryForm/functions/getValue.js.map +1 -1
  14. package/admin/components/ContentEntryForm/functions/setValue.d.ts +2 -2
  15. package/admin/components/ContentEntryForm/functions/setValue.js.map +1 -1
  16. package/admin/components/ContentEntryForm/useBind.d.ts +2 -2
  17. package/admin/components/ContentEntryForm/useBind.js +11 -8
  18. package/admin/components/ContentEntryForm/useBind.js.map +1 -1
  19. package/admin/components/ContentEntryForm/useContentEntryForm.d.ts +1 -2
  20. package/admin/components/ContentEntryForm/useContentEntryForm.js +187 -147
  21. package/admin/components/ContentEntryForm/useContentEntryForm.js.map +1 -1
  22. package/admin/components/ContentModelEditor/{Context.d.ts → ContentModelEditorProvider.d.ts} +10 -4
  23. package/admin/components/ContentModelEditor/{Context.js → ContentModelEditorProvider.js} +60 -116
  24. package/admin/components/ContentModelEditor/ContentModelEditorProvider.js.map +1 -0
  25. package/admin/components/ContentModelEditor/Editor.js +5 -5
  26. package/admin/components/ContentModelEditor/Editor.js.map +1 -1
  27. package/admin/components/ContentModelEditor/FieldsSidebar.js.map +1 -1
  28. package/admin/components/ContentModelEditor/PreviewTab.js +3 -3
  29. package/admin/components/ContentModelEditor/PreviewTab.js.map +1 -1
  30. package/admin/components/ContentModelEditor/index.d.ts +2 -0
  31. package/admin/components/ContentModelEditor/index.js +31 -0
  32. package/admin/components/ContentModelEditor/index.js.map +1 -0
  33. package/admin/components/ContentModelEditor/useModelEditor.d.ts +1 -0
  34. package/admin/components/ContentModelEditor/{useContentModelEditor.js → useModelEditor.js} +4 -4
  35. package/admin/components/ContentModelEditor/useModelEditor.js.map +1 -0
  36. package/admin/{views/contentModelGroups → components}/DelayedOnChange.d.ts +0 -0
  37. package/admin/{views/contentModelGroups → components}/DelayedOnChange.js +0 -0
  38. package/admin/{views/contentModelGroups → components}/DelayedOnChange.js.map +0 -0
  39. package/admin/components/Dialog.d.ts +4 -0
  40. package/admin/components/Dialog.js +32 -0
  41. package/admin/components/Dialog.js.map +1 -0
  42. package/admin/components/DropZone/Center.d.ts +2 -1
  43. package/admin/components/DropZone/Center.js +38 -44
  44. package/admin/components/DropZone/Center.js.map +1 -1
  45. package/admin/components/Droppable.d.ts +1 -0
  46. package/admin/components/Droppable.js +12 -1
  47. package/admin/components/Droppable.js.map +1 -1
  48. package/admin/components/FieldEditor/EditFieldDialog/AppearanceTab.d.ts +2 -8
  49. package/admin/components/FieldEditor/EditFieldDialog/AppearanceTab.js +20 -9
  50. package/admin/components/FieldEditor/EditFieldDialog/AppearanceTab.js.map +1 -1
  51. package/admin/components/FieldEditor/EditFieldDialog/GeneralTab.d.ts +2 -9
  52. package/admin/components/FieldEditor/EditFieldDialog/GeneralTab.js +35 -21
  53. package/admin/components/FieldEditor/EditFieldDialog/GeneralTab.js.map +1 -1
  54. package/admin/components/FieldEditor/EditFieldDialog/PredefinedValues.d.ts +2 -9
  55. package/admin/components/FieldEditor/EditFieldDialog/PredefinedValues.js +14 -12
  56. package/admin/components/FieldEditor/EditFieldDialog/PredefinedValues.js.map +1 -1
  57. package/admin/components/FieldEditor/EditFieldDialog/ValidationsSection.d.ts +10 -0
  58. package/admin/components/FieldEditor/EditFieldDialog/ValidationsSection.js +42 -0
  59. package/admin/components/FieldEditor/EditFieldDialog/ValidationsSection.js.map +1 -0
  60. package/admin/components/FieldEditor/EditFieldDialog/ValidatorsList.d.ts +8 -0
  61. package/admin/components/FieldEditor/EditFieldDialog/ValidatorsList.js +227 -0
  62. package/admin/components/FieldEditor/EditFieldDialog/ValidatorsList.js.map +1 -0
  63. package/admin/components/FieldEditor/EditFieldDialog/getValidators.d.ts +13 -0
  64. package/admin/components/FieldEditor/EditFieldDialog/getValidators.js +115 -0
  65. package/admin/components/FieldEditor/EditFieldDialog/getValidators.js.map +1 -0
  66. package/admin/components/FieldEditor/EditFieldDialog.d.ts +3 -3
  67. package/admin/components/FieldEditor/EditFieldDialog.js +117 -260
  68. package/admin/components/FieldEditor/EditFieldDialog.js.map +1 -1
  69. package/admin/components/FieldEditor/Field.d.ts +5 -5
  70. package/admin/components/FieldEditor/Field.js +17 -14
  71. package/admin/components/FieldEditor/Field.js.map +1 -1
  72. package/admin/components/FieldEditor/FieldEditor.d.ts +4 -4
  73. package/admin/components/FieldEditor/FieldEditor.js +85 -31
  74. package/admin/components/FieldEditor/FieldEditor.js.map +1 -1
  75. package/admin/components/FieldEditor/FieldEditorContext.d.ts +16 -16
  76. package/admin/components/FieldEditor/FieldEditorContext.js +18 -18
  77. package/admin/components/FieldEditor/FieldEditorContext.js.map +1 -1
  78. package/admin/components/FieldEditor/Styled.js +4 -13
  79. package/admin/components/FieldEditor/Styled.js.map +1 -1
  80. package/admin/components/FieldEditor/index.d.ts +1 -1
  81. package/admin/components/FieldEditor/index.js +3 -3
  82. package/admin/components/FieldEditor/index.js.map +1 -1
  83. package/admin/components/FieldEditor/useModelFieldEditor.d.ts +2 -0
  84. package/admin/components/FieldEditor/useModelFieldEditor.js +20 -0
  85. package/admin/components/FieldEditor/useModelFieldEditor.js.map +1 -0
  86. package/admin/components/FieldEditor/utils/deleteField.d.ts +2 -2
  87. package/admin/components/FieldEditor/utils/deleteField.js.map +1 -1
  88. package/admin/components/FieldEditor/utils/getFieldPosition.d.ts +2 -2
  89. package/admin/components/FieldEditor/utils/getFieldPosition.js.map +1 -1
  90. package/admin/components/FieldEditor/utils/moveField.d.ts +3 -3
  91. package/admin/components/FieldEditor/utils/moveField.js.map +1 -1
  92. package/admin/components/IconPicker.d.ts +7 -0
  93. package/admin/{views/contentModelGroups → components}/IconPicker.js +34 -31
  94. package/admin/components/IconPicker.js.map +1 -0
  95. package/admin/components/ModelFieldProvider/ModelFieldContext.d.ts +36 -0
  96. package/admin/components/ModelFieldProvider/ModelFieldContext.js +24 -0
  97. package/admin/components/ModelFieldProvider/ModelFieldContext.js.map +1 -0
  98. package/admin/components/ModelFieldProvider/index.d.ts +2 -0
  99. package/admin/components/ModelFieldProvider/index.js +31 -0
  100. package/admin/components/ModelFieldProvider/index.js.map +1 -0
  101. package/admin/components/ModelFieldProvider/useModelField.d.ts +35 -0
  102. package/admin/components/ModelFieldProvider/useModelField.js +42 -0
  103. package/admin/components/ModelFieldProvider/useModelField.js.map +1 -0
  104. package/admin/components/ModelProvider/ModelContext.d.ts +9 -0
  105. package/admin/components/ModelProvider/ModelContext.js +24 -0
  106. package/admin/components/ModelProvider/ModelContext.js.map +1 -0
  107. package/admin/components/ModelProvider/index.d.ts +2 -0
  108. package/admin/components/ModelProvider/index.js +31 -0
  109. package/admin/components/ModelProvider/index.js.map +1 -0
  110. package/admin/components/ModelProvider/useModel.d.ts +9 -0
  111. package/admin/components/ModelProvider/useModel.js +25 -0
  112. package/admin/components/ModelProvider/useModel.js.map +1 -0
  113. package/admin/constants/statusLabels.js +2 -4
  114. package/admin/constants/statusLabels.js.map +1 -1
  115. package/admin/graphql/contentEntries.d.ts +2 -29
  116. package/admin/graphql/contentEntries.js +28 -42
  117. package/admin/graphql/contentEntries.js.map +1 -1
  118. package/admin/graphql/contentModels.d.ts +1 -1
  119. package/admin/graphql/contentModels.js +2 -2
  120. package/admin/graphql/contentModels.js.map +1 -1
  121. package/admin/graphql/createFieldsList.d.ts +7 -2
  122. package/admin/graphql/createFieldsList.js +5 -1
  123. package/admin/graphql/createFieldsList.js.map +1 -1
  124. package/admin/hooks/index.d.ts +5 -0
  125. package/admin/hooks/index.js +47 -2
  126. package/admin/hooks/index.js.map +1 -1
  127. package/admin/hooks/usePermission.d.ts +0 -2
  128. package/admin/hooks/usePermission.js +5 -37
  129. package/admin/hooks/usePermission.js.map +1 -1
  130. package/admin/menus/NothingToShowElement.js +4 -1
  131. package/admin/menus/NothingToShowElement.js.map +1 -1
  132. package/admin/plugins/arrayUtils.d.ts +12 -0
  133. package/admin/plugins/arrayUtils.js +53 -0
  134. package/admin/plugins/arrayUtils.js.map +1 -0
  135. package/admin/plugins/editor/defaultBar/CreateContentButton.js +4 -4
  136. package/admin/plugins/editor/defaultBar/CreateContentButton.js.map +1 -1
  137. package/admin/plugins/editor/defaultBar/FormSettings/FormSettings.js +5 -5
  138. package/admin/plugins/editor/defaultBar/FormSettings/FormSettings.js.map +1 -1
  139. package/admin/plugins/editor/defaultBar/Name/Name.js +4 -4
  140. package/admin/plugins/editor/defaultBar/Name/Name.js.map +1 -1
  141. package/admin/plugins/editor/defaultBar/SaveContentModelButton.js +3 -3
  142. package/admin/plugins/editor/defaultBar/SaveContentModelButton.js.map +1 -1
  143. package/admin/plugins/editor/formSettings/components/GeneralSettings.js +9 -1
  144. package/admin/plugins/editor/formSettings/components/GeneralSettings.js.map +1 -1
  145. package/admin/plugins/fieldRenderers/DynamicSection.d.ts +3 -3
  146. package/admin/plugins/fieldRenderers/DynamicSection.js.map +1 -1
  147. package/admin/plugins/fieldRenderers/dateTime/DateOnly.d.ts +2 -2
  148. package/admin/plugins/fieldRenderers/dateTime/DateOnly.js.map +1 -1
  149. package/admin/plugins/fieldRenderers/dateTime/DateTimeWithTimezone.d.ts +2 -2
  150. package/admin/plugins/fieldRenderers/dateTime/DateTimeWithTimezone.js.map +1 -1
  151. package/admin/plugins/fieldRenderers/dateTime/DateTimeWithoutTimezone.d.ts +2 -2
  152. package/admin/plugins/fieldRenderers/dateTime/DateTimeWithoutTimezone.js.map +1 -1
  153. package/admin/plugins/fieldRenderers/dateTime/Input.d.ts +2 -2
  154. package/admin/plugins/fieldRenderers/dateTime/Input.js.map +1 -1
  155. package/admin/plugins/fieldRenderers/dateTime/utils.d.ts +2 -2
  156. package/admin/plugins/fieldRenderers/dateTime/utils.js.map +1 -1
  157. package/admin/plugins/fieldRenderers/dynamicZone/AddTemplate.d.ts +12 -0
  158. package/admin/plugins/fieldRenderers/dynamicZone/AddTemplate.js +107 -0
  159. package/admin/plugins/fieldRenderers/dynamicZone/AddTemplate.js.map +1 -0
  160. package/admin/plugins/fieldRenderers/dynamicZone/MultiValueDynamicZone.d.ts +11 -0
  161. package/admin/plugins/fieldRenderers/dynamicZone/MultiValueDynamicZone.js +139 -0
  162. package/admin/plugins/fieldRenderers/dynamicZone/MultiValueDynamicZone.js.map +1 -0
  163. package/admin/plugins/fieldRenderers/dynamicZone/SingleValueDynamicZone.d.ts +11 -0
  164. package/admin/plugins/fieldRenderers/dynamicZone/SingleValueDynamicZone.js +68 -0
  165. package/admin/plugins/fieldRenderers/dynamicZone/SingleValueDynamicZone.js.map +1 -0
  166. package/admin/plugins/fieldRenderers/dynamicZone/TemplateCard.d.ts +8 -0
  167. package/admin/plugins/fieldRenderers/dynamicZone/TemplateCard.js +63 -0
  168. package/admin/plugins/fieldRenderers/dynamicZone/TemplateCard.js.map +1 -0
  169. package/admin/plugins/fieldRenderers/dynamicZone/TemplateGallery.d.ts +8 -0
  170. package/admin/plugins/fieldRenderers/dynamicZone/TemplateGallery.js +53 -0
  171. package/admin/plugins/fieldRenderers/dynamicZone/TemplateGallery.js.map +1 -0
  172. package/admin/plugins/fieldRenderers/dynamicZone/TemplateIcon.d.ts +6 -0
  173. package/admin/plugins/fieldRenderers/dynamicZone/TemplateIcon.js +22 -0
  174. package/admin/plugins/fieldRenderers/dynamicZone/TemplateIcon.js.map +1 -0
  175. package/admin/plugins/fieldRenderers/dynamicZone/dynamicZoneRenderer.d.ts +2 -0
  176. package/admin/plugins/fieldRenderers/dynamicZone/dynamicZoneRenderer.js +66 -0
  177. package/admin/plugins/fieldRenderers/dynamicZone/dynamicZoneRenderer.js.map +1 -0
  178. package/admin/plugins/fieldRenderers/file/fileFields.js.map +1 -1
  179. package/admin/plugins/fieldRenderers/ref/components/ContentEntriesAutocomplete.d.ts +2 -2
  180. package/admin/plugins/fieldRenderers/ref/components/ContentEntriesAutocomplete.js.map +1 -1
  181. package/admin/plugins/fieldRenderers/ref/components/ContentEntriesMultiAutoComplete.d.ts +2 -2
  182. package/admin/plugins/fieldRenderers/ref/components/ContentEntriesMultiAutoComplete.js.map +1 -1
  183. package/admin/plugins/fieldRenderers/ref/components/NewRefEntryFormDialog.js +10 -9
  184. package/admin/plugins/fieldRenderers/ref/components/NewRefEntryFormDialog.js.map +1 -1
  185. package/admin/plugins/fieldRenderers/ref/components/useReference.d.ts +2 -2
  186. package/admin/plugins/fieldRenderers/ref/components/useReference.js.map +1 -1
  187. package/admin/plugins/fieldRenderers/ref/components/useReferences.d.ts +2 -2
  188. package/admin/plugins/fieldRenderers/ref/components/useReferences.js.map +1 -1
  189. package/admin/plugins/fieldRenderers/ref/hooks/useNewRefEntry.d.ts +2 -2
  190. package/admin/plugins/fieldRenderers/ref/hooks/useNewRefEntry.js +15 -14
  191. package/admin/plugins/fieldRenderers/ref/hooks/useNewRefEntry.js.map +1 -1
  192. package/admin/plugins/fieldRenderers/ref/refInputs.js.map +1 -1
  193. package/admin/plugins/fieldRenderers/richText/richTextInput.js.map +1 -1
  194. package/admin/plugins/fieldRenderers/richText/richTextInputs.js.map +1 -1
  195. package/admin/plugins/fieldValidators/date/createDateInputField.d.ts +2 -2
  196. package/admin/plugins/fieldValidators/date/createDateInputField.js.map +1 -1
  197. package/admin/plugins/fieldValidators/dateGte.d.ts +2 -2
  198. package/admin/plugins/fieldValidators/dateGte.js +79 -23
  199. package/admin/plugins/fieldValidators/dateGte.js.map +1 -1
  200. package/admin/plugins/fieldValidators/dateLte.d.ts +2 -2
  201. package/admin/plugins/fieldValidators/dateLte.js +79 -23
  202. package/admin/plugins/fieldValidators/dateLte.js.map +1 -1
  203. package/admin/plugins/fieldValidators/dynamicZone.d.ts +2 -0
  204. package/admin/plugins/fieldValidators/dynamicZone.js +215 -0
  205. package/admin/plugins/fieldValidators/dynamicZone.js.map +1 -0
  206. package/admin/plugins/fieldValidators/gte.d.ts +2 -2
  207. package/admin/plugins/fieldValidators/gte.js +44 -5
  208. package/admin/plugins/fieldValidators/gte.js.map +1 -1
  209. package/admin/plugins/fieldValidators/in.d.ts +2 -2
  210. package/admin/plugins/fieldValidators/in.js +44 -5
  211. package/admin/plugins/fieldValidators/in.js.map +1 -1
  212. package/admin/plugins/fieldValidators/lte.d.ts +2 -2
  213. package/admin/plugins/fieldValidators/lte.js +44 -5
  214. package/admin/plugins/fieldValidators/lte.js.map +1 -1
  215. package/admin/plugins/fieldValidators/maxLength.d.ts +2 -2
  216. package/admin/plugins/fieldValidators/maxLength.js +55 -6
  217. package/admin/plugins/fieldValidators/maxLength.js.map +1 -1
  218. package/admin/plugins/fieldValidators/minLength.d.ts +2 -2
  219. package/admin/plugins/fieldValidators/minLength.js +55 -6
  220. package/admin/plugins/fieldValidators/minLength.js.map +1 -1
  221. package/admin/plugins/fieldValidators/pattern.d.ts +2 -2
  222. package/admin/plugins/fieldValidators/pattern.js +129 -60
  223. package/admin/plugins/fieldValidators/pattern.js.map +1 -1
  224. package/admin/plugins/fieldValidators/patternPlugins/email.d.ts +2 -2
  225. package/admin/plugins/fieldValidators/patternPlugins/email.js +6 -4
  226. package/admin/plugins/fieldValidators/patternPlugins/email.js.map +1 -1
  227. package/admin/plugins/fieldValidators/patternPlugins/lowerCase.d.ts +2 -2
  228. package/admin/plugins/fieldValidators/patternPlugins/lowerCase.js +5 -3
  229. package/admin/plugins/fieldValidators/patternPlugins/lowerCase.js.map +1 -1
  230. package/admin/plugins/fieldValidators/patternPlugins/lowerCaseSpace.d.ts +2 -2
  231. package/admin/plugins/fieldValidators/patternPlugins/lowerCaseSpace.js +5 -3
  232. package/admin/plugins/fieldValidators/patternPlugins/lowerCaseSpace.js.map +1 -1
  233. package/admin/plugins/fieldValidators/patternPlugins/upperCase.d.ts +2 -2
  234. package/admin/plugins/fieldValidators/patternPlugins/upperCase.js +5 -3
  235. package/admin/plugins/fieldValidators/patternPlugins/upperCase.js.map +1 -1
  236. package/admin/plugins/fieldValidators/patternPlugins/upperCaseSpace.d.ts +2 -2
  237. package/admin/plugins/fieldValidators/patternPlugins/upperCaseSpace.js +5 -3
  238. package/admin/plugins/fieldValidators/patternPlugins/upperCaseSpace.js.map +1 -1
  239. package/admin/plugins/fieldValidators/patternPlugins/url.d.ts +2 -2
  240. package/admin/plugins/fieldValidators/patternPlugins/url.js +5 -3
  241. package/admin/plugins/fieldValidators/patternPlugins/url.js.map +1 -1
  242. package/admin/plugins/fieldValidators/required.d.ts +2 -2
  243. package/admin/plugins/fieldValidators/required.js +8 -2
  244. package/admin/plugins/fieldValidators/required.js.map +1 -1
  245. package/admin/plugins/fieldValidators/unique.d.ts +2 -2
  246. package/admin/plugins/fieldValidators/unique.js +30 -2
  247. package/admin/plugins/fieldValidators/unique.js.map +1 -1
  248. package/admin/plugins/fields/PredefinedValuesDynamicFieldset.d.ts +1 -2
  249. package/admin/plugins/fields/PredefinedValuesDynamicFieldset.js +25 -26
  250. package/admin/plugins/fields/PredefinedValuesDynamicFieldset.js.map +1 -1
  251. package/admin/plugins/fields/boolean.d.ts +2 -2
  252. package/admin/plugins/fields/boolean.js +6 -5
  253. package/admin/plugins/fields/boolean.js.map +1 -1
  254. package/admin/plugins/fields/dateTime.d.ts +2 -2
  255. package/admin/plugins/fields/dateTime.js +58 -48
  256. package/admin/plugins/fields/dateTime.js.map +1 -1
  257. package/admin/plugins/fields/dynamicZone/AddTemplate.d.ts +11 -0
  258. package/admin/plugins/fields/dynamicZone/AddTemplate.js +114 -0
  259. package/admin/plugins/fields/dynamicZone/AddTemplate.js.map +1 -0
  260. package/admin/plugins/fields/dynamicZone/DynamicZone.d.ts +2 -0
  261. package/admin/plugins/fields/dynamicZone/DynamicZone.js +82 -0
  262. package/admin/plugins/fields/dynamicZone/DynamicZone.js.map +1 -0
  263. package/admin/plugins/fields/dynamicZone/DynamicZoneTemplate.d.ts +11 -0
  264. package/admin/plugins/fields/dynamicZone/DynamicZoneTemplate.js +127 -0
  265. package/admin/plugins/fields/dynamicZone/DynamicZoneTemplate.js.map +1 -0
  266. package/admin/plugins/fields/dynamicZone/TemplateDialog.d.ts +9 -0
  267. package/admin/plugins/fields/dynamicZone/TemplateDialog.js +174 -0
  268. package/admin/plugins/fields/dynamicZone/TemplateDialog.js.map +1 -0
  269. package/admin/plugins/fields/dynamicZone/commonValidators.d.ts +2 -0
  270. package/admin/plugins/fields/dynamicZone/commonValidators.js +26 -0
  271. package/admin/plugins/fields/dynamicZone/commonValidators.js.map +1 -0
  272. package/admin/plugins/fields/dynamicZone.d.ts +2 -0
  273. package/admin/plugins/fields/dynamicZone.js +97 -0
  274. package/admin/plugins/fields/dynamicZone.js.map +1 -0
  275. package/admin/plugins/fields/file.d.ts +2 -2
  276. package/admin/plugins/fields/file.js +6 -5
  277. package/admin/plugins/fields/file.js.map +1 -1
  278. package/admin/plugins/fields/longText.d.ts +2 -2
  279. package/admin/plugins/fields/longText.js +4 -3
  280. package/admin/plugins/fields/longText.js.map +1 -1
  281. package/admin/plugins/fields/number.d.ts +2 -2
  282. package/admin/plugins/fields/number.js +6 -5
  283. package/admin/plugins/fields/number.js.map +1 -1
  284. package/admin/plugins/fields/object/ObjectFields.d.ts +2 -2
  285. package/admin/plugins/fields/object/ObjectFields.js +3 -3
  286. package/admin/plugins/fields/object/ObjectFields.js.map +1 -1
  287. package/admin/plugins/fields/object.d.ts +2 -2
  288. package/admin/plugins/fields/object.js +9 -4
  289. package/admin/plugins/fields/object.js.map +1 -1
  290. package/admin/plugins/fields/ref.d.ts +2 -2
  291. package/admin/plugins/fields/ref.js +108 -100
  292. package/admin/plugins/fields/ref.js.map +1 -1
  293. package/admin/plugins/fields/richText.d.ts +2 -2
  294. package/admin/plugins/fields/richText.js +6 -5
  295. package/admin/plugins/fields/richText.js.map +1 -1
  296. package/admin/plugins/fields/text.d.ts +2 -2
  297. package/admin/plugins/fields/text.js +4 -3
  298. package/admin/plugins/fields/text.js.map +1 -1
  299. package/admin/plugins/index.d.ts +28 -1
  300. package/admin/plugins/permissionRenderer/CmsPermissions.js +2 -7
  301. package/admin/plugins/permissionRenderer/CmsPermissions.js.map +1 -1
  302. package/admin/plugins/permissionRenderer/components/ContentEntryPermission.js +11 -17
  303. package/admin/plugins/permissionRenderer/components/ContentEntryPermission.js.map +1 -1
  304. package/admin/plugins/transformers/dateTransformer.d.ts +1 -2
  305. package/admin/plugins/transformers/dateTransformer.js +3 -3
  306. package/admin/plugins/transformers/dateTransformer.js.map +1 -1
  307. package/admin/plugins/transformers/dynamicZoneTransformer.d.ts +2 -0
  308. package/admin/plugins/transformers/dynamicZoneTransformer.js +45 -0
  309. package/admin/plugins/transformers/dynamicZoneTransformer.js.map +1 -0
  310. package/admin/plugins/transformers/index.js +5 -5
  311. package/admin/plugins/transformers/index.js.map +1 -1
  312. package/admin/plugins/transformers/numberTransformer.d.ts +1 -2
  313. package/admin/plugins/transformers/numberTransformer.js +3 -3
  314. package/admin/plugins/transformers/numberTransformer.js.map +1 -1
  315. package/admin/views/contentEntries/ContentEntries.js +6 -2
  316. package/admin/views/contentEntries/ContentEntries.js.map +1 -1
  317. package/admin/views/contentEntries/ContentEntriesContext.d.ts +4 -4
  318. package/admin/views/contentEntries/ContentEntriesContext.js +1 -9
  319. package/admin/views/contentEntries/ContentEntriesContext.js.map +1 -1
  320. package/admin/views/contentEntries/ContentEntriesList.js +23 -8
  321. package/admin/views/contentEntries/ContentEntriesList.js.map +1 -1
  322. package/admin/views/contentEntries/ContentEntry/ContentEntryContext.js +19 -4
  323. package/admin/views/contentEntries/ContentEntry/ContentEntryContext.js.map +1 -1
  324. package/admin/views/contentEntries/ContentEntry/RevisionListItem.js +60 -60
  325. package/admin/views/contentEntries/ContentEntry/RevisionListItem.js.map +1 -1
  326. package/admin/views/contentEntries/ContentEntry/cache.js +5 -1
  327. package/admin/views/contentEntries/ContentEntry/cache.js.map +1 -1
  328. package/admin/views/contentEntries/ContentEntry/header/requestChanges/RequestChanges.d.ts +1 -1
  329. package/admin/views/contentEntries/ContentEntry/header/requestChanges/RequestChanges.js +3 -80
  330. package/admin/views/contentEntries/ContentEntry/header/requestChanges/RequestChanges.js.map +1 -1
  331. package/admin/views/contentEntries/ContentEntry/header/requestReview/RequestReview.d.ts +1 -1
  332. package/admin/views/contentEntries/ContentEntry/header/requestReview/RequestReview.js +3 -84
  333. package/admin/views/contentEntries/ContentEntry/header/requestReview/RequestReview.js.map +1 -1
  334. package/admin/views/contentEntries/ContentEntry/prepareFormData.d.ts +2 -2
  335. package/admin/views/contentEntries/ContentEntry/prepareFormData.js.map +1 -1
  336. package/admin/views/contentEntries/ContentEntry/useRevision.d.ts +0 -8
  337. package/admin/views/contentEntries/ContentEntry/useRevision.js +10 -122
  338. package/admin/views/contentEntries/ContentEntry/useRevision.js.map +1 -1
  339. package/admin/views/contentEntries/ContentEntry.js +0 -2
  340. package/admin/views/contentEntries/ContentEntry.js.map +1 -1
  341. package/admin/views/contentEntries/experiment/ContentEntriesModule.d.ts +2 -2
  342. package/admin/views/contentEntries/experiment/ContentEntriesModule.js +27 -14
  343. package/admin/views/contentEntries/experiment/ContentEntriesModule.js.map +1 -1
  344. package/admin/views/contentEntries/hooks/useContentEntries.js +7 -1
  345. package/admin/views/contentEntries/hooks/useContentEntries.js.map +1 -1
  346. package/admin/views/contentEntries/hooks/useContentEntriesList.d.ts +1 -1
  347. package/admin/views/contentEntries/hooks/useContentEntriesList.js.map +1 -1
  348. package/admin/views/contentModelGroups/ContentModelGroupsForm.js +2 -2
  349. package/admin/views/contentModelGroups/ContentModelGroupsForm.js.map +1 -1
  350. package/admin/views/contentModels/CloneContentModelDialog.js +4 -17
  351. package/admin/views/contentModels/CloneContentModelDialog.js.map +1 -1
  352. package/admin/views/contentModels/ContentModelEditor.js +2 -2
  353. package/admin/views/contentModels/ContentModelEditor.js.map +1 -1
  354. package/admin/views/contentModels/NewContentModelDialog.js +5 -17
  355. package/admin/views/contentModels/NewContentModelDialog.js.map +1 -1
  356. package/admin/viewsGraphql.js +1 -1
  357. package/admin/viewsGraphql.js.map +1 -1
  358. package/allPlugins.d.ts +34 -0
  359. package/allPlugins.js +95 -0
  360. package/allPlugins.js.map +1 -0
  361. package/index.d.ts +1 -0
  362. package/index.js +15 -1
  363. package/index.js.map +1 -1
  364. package/package.json +29 -29
  365. package/{types.d.ts → types/index.d.ts} +59 -176
  366. package/types/index.js +44 -0
  367. package/types/index.js.map +1 -0
  368. package/types/model.d.ts +83 -0
  369. package/{types.js → types/model.js} +0 -0
  370. package/types/model.js.map +1 -0
  371. package/types/shared.d.ts +5 -0
  372. package/types/shared.js +5 -0
  373. package/types/shared.js.map +1 -0
  374. package/types/validation.d.ts +70 -0
  375. package/types/validation.js +5 -0
  376. package/types/validation.js.map +1 -0
  377. package/utils/CmsModelFieldValidatorConfigAdapter.d.ts +15 -0
  378. package/utils/CmsModelFieldValidatorConfigAdapter.js +91 -0
  379. package/utils/CmsModelFieldValidatorConfigAdapter.js.map +1 -0
  380. package/utils/createTypeName.d.ts +1 -0
  381. package/utils/createTypeName.js +18 -0
  382. package/utils/createTypeName.js.map +1 -0
  383. package/utils/createValidators.d.ts +3 -0
  384. package/{admin/components/ContentEntryForm/functions → utils}/createValidators.js +37 -16
  385. package/utils/createValidators.js.map +1 -0
  386. package/utils/getFetchPolicy.d.ts +6 -0
  387. package/utils/getFetchPolicy.js +19 -0
  388. package/utils/getFetchPolicy.js.map +1 -0
  389. package/utils/getModelTitleFieldId.d.ts +2 -0
  390. package/utils/getModelTitleFieldId.js +16 -0
  391. package/utils/getModelTitleFieldId.js.map +1 -0
  392. package/admin/components/ContentEntryForm/functions/createValidators.d.ts +0 -3
  393. package/admin/components/ContentEntryForm/functions/createValidators.js.map +0 -1
  394. package/admin/components/ContentModelEditor/Context.js.map +0 -1
  395. package/admin/components/ContentModelEditor/useContentModelEditor.d.ts +0 -1
  396. package/admin/components/ContentModelEditor/useContentModelEditor.js.map +0 -1
  397. package/admin/components/FieldEditor/EditFieldDialog/ValidatorsTab.d.ts +0 -15
  398. package/admin/components/FieldEditor/EditFieldDialog/ValidatorsTab.js +0 -148
  399. package/admin/components/FieldEditor/EditFieldDialog/ValidatorsTab.js.map +0 -1
  400. package/admin/components/FieldEditor/useFieldEditor.d.ts +0 -1
  401. package/admin/components/FieldEditor/useFieldEditor.js +0 -14
  402. package/admin/components/FieldEditor/useFieldEditor.js.map +0 -1
  403. package/admin/plugins/validators/dateGte.d.ts +0 -3
  404. package/admin/plugins/validators/dateGte.js +0 -68
  405. package/admin/plugins/validators/dateGte.js.map +0 -1
  406. package/admin/plugins/validators/dateLte.d.ts +0 -3
  407. package/admin/plugins/validators/dateLte.js +0 -68
  408. package/admin/plugins/validators/dateLte.js.map +0 -1
  409. package/admin/plugins/validators/gte.d.ts +0 -3
  410. package/admin/plugins/validators/gte.js +0 -57
  411. package/admin/plugins/validators/gte.js.map +0 -1
  412. package/admin/plugins/validators/in.d.ts +0 -3
  413. package/admin/plugins/validators/in.js +0 -57
  414. package/admin/plugins/validators/in.js.map +0 -1
  415. package/admin/plugins/validators/lte.d.ts +0 -3
  416. package/admin/plugins/validators/lte.js +0 -57
  417. package/admin/plugins/validators/lte.js.map +0 -1
  418. package/admin/plugins/validators/maxLength.d.ts +0 -3
  419. package/admin/plugins/validators/maxLength.js +0 -57
  420. package/admin/plugins/validators/maxLength.js.map +0 -1
  421. package/admin/plugins/validators/minLength.d.ts +0 -3
  422. package/admin/plugins/validators/minLength.js +0 -57
  423. package/admin/plugins/validators/minLength.js.map +0 -1
  424. package/admin/plugins/validators/pattern.d.ts +0 -3
  425. package/admin/plugins/validators/pattern.js +0 -77
  426. package/admin/plugins/validators/pattern.js.map +0 -1
  427. package/admin/plugins/validators/patternPlugins/email.d.ts +0 -3
  428. package/admin/plugins/validators/patternPlugins/email.js +0 -17
  429. package/admin/plugins/validators/patternPlugins/email.js.map +0 -1
  430. package/admin/plugins/validators/patternPlugins/lowerCase.d.ts +0 -3
  431. package/admin/plugins/validators/patternPlugins/lowerCase.js +0 -17
  432. package/admin/plugins/validators/patternPlugins/lowerCase.js.map +0 -1
  433. package/admin/plugins/validators/patternPlugins/lowerCaseSpace.d.ts +0 -3
  434. package/admin/plugins/validators/patternPlugins/lowerCaseSpace.js +0 -17
  435. package/admin/plugins/validators/patternPlugins/lowerCaseSpace.js.map +0 -1
  436. package/admin/plugins/validators/patternPlugins/upperCase.d.ts +0 -3
  437. package/admin/plugins/validators/patternPlugins/upperCase.js +0 -17
  438. package/admin/plugins/validators/patternPlugins/upperCase.js.map +0 -1
  439. package/admin/plugins/validators/patternPlugins/upperCaseSpace.d.ts +0 -3
  440. package/admin/plugins/validators/patternPlugins/upperCaseSpace.js +0 -17
  441. package/admin/plugins/validators/patternPlugins/upperCaseSpace.js.map +0 -1
  442. package/admin/plugins/validators/patternPlugins/url.d.ts +0 -3
  443. package/admin/plugins/validators/patternPlugins/url.js +0 -17
  444. package/admin/plugins/validators/patternPlugins/url.js.map +0 -1
  445. package/admin/plugins/validators/required.d.ts +0 -3
  446. package/admin/plugins/validators/required.js +0 -21
  447. package/admin/plugins/validators/required.js.map +0 -1
  448. package/admin/plugins/validators/timeGte.d.ts +0 -3
  449. package/admin/plugins/validators/timeGte.js +0 -59
  450. package/admin/plugins/validators/timeGte.js.map +0 -1
  451. package/admin/plugins/validators/timeLte.d.ts +0 -3
  452. package/admin/plugins/validators/timeLte.js +0 -59
  453. package/admin/plugins/validators/timeLte.js.map +0 -1
  454. package/admin/plugins/validators/unique.d.ts +0 -7
  455. package/admin/plugins/validators/unique.js +0 -50
  456. package/admin/plugins/validators/unique.js.map +0 -1
  457. package/admin/views/contentEntries/ContentEntry/header/requestChanges/rule-24px.svg +0 -1
  458. package/admin/views/contentEntries/ContentEntry/header/requestReview/emoji_people-24px.svg +0 -1
  459. package/admin/views/contentModelGroups/IconPicker.d.ts +0 -8
  460. package/admin/views/contentModelGroups/IconPicker.js.map +0 -1
  461. package/types.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"names":["t","i18n","ns","FieldContainer","styled","display","flexDirection","justifyContent","alignItems","LowerCase","Info","flex","lineHeight","Actions","menuStyles","css","width","right","left","opacity","pointerEvents","allowedTitleFieldTypes","isFieldAllowedToBeTitle","field","parent","multipleValues","includes","type","Field","props","onEdit","useSnackbar","showSnackbar","useContentModelEditor","setData","data","useFieldEditor","getFieldPlugin","getFieldRendererPlugin","useConfirmationDialog","title","message","showConfirmation","lockedFields","isLocked","some","lockedField","fieldId","storageId","onDelete","useCallback","setAsTitle","titleFieldId","response","error","fieldPlugin","editorFieldOptionPlugins","plugins","byType","rendererPlugin","renderer","name","isTitleField","info","filter","Boolean","join","label","map","pl","React","cloneElement","render","key","memo"],"sources":["Field.tsx"],"sourcesContent":["import React, { Fragment, useCallback } from \"react\";\nimport { css } from \"emotion\";\nimport styled from \"@emotion/styled\";\nimport { IconButton } from \"@webiny/ui/Button\";\nimport { Typography } from \"@webiny/ui/Typography\";\nimport { ReactComponent as EditIcon } from \"~/admin/icons/edit.svg\";\nimport { ReactComponent as DeleteIcon } from \"~/admin/icons/delete.svg\";\nimport { ReactComponent as TitleIcon } from \"~/admin/icons/title-24px.svg\";\nimport { ReactComponent as MoreVerticalIcon } from \"~/admin/icons/more_vert.svg\";\nimport { Menu, MenuItem } from \"@webiny/ui/Menu\";\nimport { plugins } from \"@webiny/plugins\";\nimport { CmsEditorField, CmsEditorFieldOptionPlugin } from \"~/types\";\nimport { ListItemGraphic } from \"@webiny/ui/List\";\nimport { Icon } from \"@webiny/ui/Icon\";\nimport { i18n } from \"@webiny/app/i18n\";\nimport { useSnackbar } from \"@webiny/app-admin/hooks/useSnackbar\";\nimport { useContentModelEditor } from \"~/admin/components/ContentModelEditor/useContentModelEditor\";\nimport { useFieldEditor } from \"~/admin/components/FieldEditor/useFieldEditor\";\nimport { useConfirmationDialog } from \"@webiny/app-admin\";\n\nconst t = i18n.ns(\"app-headless-cms/admin/components/editor/field\");\n\nconst FieldContainer = styled(\"div\")({\n display: \"flex\",\n flexDirection: \"row\",\n justifyContent: \"space-between\",\n alignItems: \"center\"\n});\n\nconst LowerCase = styled.span`\n text-transform: lowercase;\n`;\n\nconst Info = styled(\"div\")({\n display: \"flex\",\n flexDirection: \"column\",\n \"> *\": {\n flex: \"1 100%\",\n lineHeight: \"150%\"\n }\n});\n\nconst Actions = styled(\"div\")({\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"right\",\n \"> *\": {\n flex: \"1 100%\"\n }\n});\n\nconst menuStyles = css({\n width: 220,\n right: -105,\n left: \"auto !important\",\n \".disabled\": {\n opacity: 0.5,\n pointerEvents: \"none\"\n }\n});\n\nconst allowedTitleFieldTypes: string[] = [\"text\", \"number\"];\n\nconst isFieldAllowedToBeTitle = (field: CmsEditorField, parent?: CmsEditorField) => {\n if (field.multipleValues || parent) {\n return false;\n } else if (allowedTitleFieldTypes.includes(field.type) === false) {\n return false;\n }\n return true;\n};\n\nexport interface FieldProps {\n field: CmsEditorField;\n onDelete: (field: CmsEditorField) => void;\n onEdit: (field: CmsEditorField) => void;\n parent?: CmsEditorField;\n}\nconst Field: React.FC<FieldProps> = props => {\n const { field, onEdit, parent } = props;\n const { showSnackbar } = useSnackbar();\n const { setData, data } = useContentModelEditor();\n const { getFieldPlugin, getFieldRendererPlugin } = useFieldEditor();\n\n const { showConfirmation } = useConfirmationDialog({\n title: t`Warning - You are trying to delete a locked field!`,\n message: (\n <>\n <p>{t`You are about to delete a field which is used in the data storage`}</p>\n <p>{t`All data in that field will be lost and there is no going back!`}</p>\n <p>&nbsp;</p>\n <p>{t`Are you sure you want to continue?`}</p>\n </>\n )\n });\n const lockedFields = data ? data.lockedFields || [] : [];\n const isLocked = lockedFields.some(lockedField => lockedField.fieldId === field.storageId);\n\n const onDelete = useCallback(() => {\n if (!isLocked) {\n props.onDelete(field);\n return;\n }\n showConfirmation(() => {\n props.onDelete(field);\n });\n }, [field.fieldId, lockedFields]);\n\n const setAsTitle = useCallback(async (): Promise<void> => {\n const response = await setData(data => {\n return { ...data, titleFieldId: field.fieldId };\n });\n\n if (response && response.error) {\n return showSnackbar(response.error.message);\n }\n\n showSnackbar(t`Title field set successfully.`);\n }, [field.fieldId, setData]);\n\n const fieldPlugin = getFieldPlugin(field.type);\n const editorFieldOptionPlugins =\n plugins.byType<CmsEditorFieldOptionPlugin>(\"cms-editor-field-option\");\n\n if (!fieldPlugin) {\n return null;\n }\n\n const rendererPlugin = getFieldRendererPlugin(field.renderer.name);\n const isTitleField = data && field.fieldId === data.titleFieldId && !parent;\n\n const info = [\n rendererPlugin?.renderer.name,\n field.multipleValues ? \"multiple values\" : null,\n isTitleField ? \"entry title\" : null\n ]\n .filter(Boolean)\n .join(\", \");\n\n return (\n <Fragment>\n <FieldContainer>\n <Info>\n <Typography use={\"subtitle1\"}>{field.label}</Typography>\n <Typography use={\"caption\"}>\n {fieldPlugin.field.label} {field.multipleValues && <></>}\n <LowerCase>({info})</LowerCase>\n </Typography>\n </Info>\n <Actions>\n <IconButton\n data-testid={\"cms.editor.edit-field\"}\n icon={<EditIcon />}\n onClick={() => onEdit(field)}\n />\n <Menu\n className={menuStyles}\n handle={<IconButton icon={<MoreVerticalIcon />} />}\n >\n {editorFieldOptionPlugins.map(pl =>\n React.cloneElement(pl.render(), { key: pl.name })\n )}\n {/* We only allow this action for top-level fields. */}\n <MenuItem\n disabled={!isFieldAllowedToBeTitle(field, parent)}\n onClick={setAsTitle}\n >\n <ListItemGraphic>\n <Icon icon={<TitleIcon />} />\n </ListItemGraphic>\n {t`Use as title`}\n </MenuItem>\n <MenuItem onClick={onDelete}>\n <ListItemGraphic>\n <Icon icon={<DeleteIcon />} />\n </ListItemGraphic>\n {t`Delete`}\n </MenuItem>\n </Menu>\n </Actions>\n </FieldContainer>\n <div className={\"field-extra\"}>\n {fieldPlugin.field.render && fieldPlugin.field.render({ field, data, setData })}\n </div>\n </Fragment>\n );\n};\n\nexport default React.memo(Field);\n"],"mappings":"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"}
1
+ {"version":3,"names":["t","i18n","ns","FieldContainer","styled","display","flexDirection","justifyContent","alignItems","LowerCase","Info","flex","lineHeight","Actions","menuStyles","css","width","right","left","opacity","pointerEvents","FieldExtra","allowedTitleFieldTypes","isFieldAllowedToBeTitle","field","parent","multipleValues","includes","type","Field","props","onEdit","useSnackbar","showSnackbar","useModelEditor","setData","data","useModelFieldEditor","getFieldPlugin","getFieldRendererPlugin","useConfirmationDialog","title","message","showConfirmation","lockedFields","isLocked","some","lockedField","fieldId","storageId","onDelete","useCallback","setAsTitle","titleFieldId","response","error","fieldPlugin","editorFieldOptionPlugins","plugins","byType","rendererPlugin","renderer","name","canEdit","canEditSettings","isTitleField","info","filter","Boolean","join","label","map","pl","React","cloneElement","render","key","memo"],"sources":["Field.tsx"],"sourcesContent":["import React, { Fragment, useCallback } from \"react\";\nimport { css } from \"emotion\";\nimport styled from \"@emotion/styled\";\nimport { IconButton } from \"@webiny/ui/Button\";\nimport { Typography } from \"@webiny/ui/Typography\";\nimport { ReactComponent as EditIcon } from \"@material-design-icons/svg/outlined/edit.svg\";\nimport { ReactComponent as DeleteIcon } from \"~/admin/icons/delete.svg\";\nimport { ReactComponent as TitleIcon } from \"~/admin/icons/title-24px.svg\";\nimport { ReactComponent as MoreVerticalIcon } from \"~/admin/icons/more_vert.svg\";\nimport { Menu, MenuItem } from \"@webiny/ui/Menu\";\nimport { plugins } from \"@webiny/plugins\";\nimport { CmsModelField, CmsEditorFieldOptionPlugin } from \"~/types\";\nimport { ListItemGraphic } from \"@webiny/ui/List\";\nimport { Icon } from \"@webiny/ui/Icon\";\nimport { i18n } from \"@webiny/app/i18n\";\nimport { useSnackbar } from \"@webiny/app-admin/hooks/useSnackbar\";\nimport { useModelEditor } from \"~/admin/hooks\";\nimport { useModelFieldEditor } from \"~/admin/components/FieldEditor/useModelFieldEditor\";\nimport { useConfirmationDialog } from \"@webiny/app-admin\";\n\nconst t = i18n.ns(\"app-headless-cms/admin/components/editor/field\");\n\nconst FieldContainer = styled(\"div\")({\n display: \"flex\",\n flexDirection: \"row\",\n justifyContent: \"space-between\",\n alignItems: \"center\"\n});\n\nconst LowerCase = styled.span`\n text-transform: lowercase;\n`;\n\nconst Info = styled(\"div\")({\n display: \"flex\",\n flexDirection: \"column\",\n \"> *\": {\n flex: \"1 100%\",\n lineHeight: \"150%\"\n }\n});\n\nconst Actions = styled(\"div\")({\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"right\",\n \"> *\": {\n flex: \"1 100%\"\n }\n});\n\nconst menuStyles = css({\n width: 220,\n right: -105,\n left: \"auto !important\",\n \".disabled\": {\n opacity: 0.5,\n pointerEvents: \"none\"\n }\n});\n\nconst FieldExtra = styled.div`\n padding: 10px 0 10px;\n :empty {\n display: none;\n }\n`;\n\nconst allowedTitleFieldTypes: string[] = [\"text\", \"number\"];\n\nconst isFieldAllowedToBeTitle = (field: CmsModelField, parent?: CmsModelField) => {\n if (field.multipleValues || parent) {\n return false;\n } else if (allowedTitleFieldTypes.includes(field.type) === false) {\n return false;\n }\n return true;\n};\n\nexport interface FieldProps {\n field: CmsModelField;\n onDelete: (field: CmsModelField) => void;\n onEdit: (field: CmsModelField) => void;\n parent?: CmsModelField;\n}\nconst Field: React.FC<FieldProps> = props => {\n const { field, onEdit, parent } = props;\n const { showSnackbar } = useSnackbar();\n const { setData, data } = useModelEditor();\n const { getFieldPlugin, getFieldRendererPlugin } = useModelFieldEditor();\n\n const { showConfirmation } = useConfirmationDialog({\n title: t`Warning - You are trying to delete a locked field!`,\n message: (\n <>\n <p>{t`You are about to delete a field which is used in the data storage`}</p>\n <p>{t`All data in that field will be lost and there is no going back!`}</p>\n <p>&nbsp;</p>\n <p>{t`Are you sure you want to continue?`}</p>\n </>\n )\n });\n const lockedFields = data ? data.lockedFields || [] : [];\n const isLocked = lockedFields.some(lockedField => lockedField.fieldId === field.storageId);\n\n const onDelete = useCallback(() => {\n if (!isLocked) {\n props.onDelete(field);\n return;\n }\n showConfirmation(() => {\n props.onDelete(field);\n });\n }, [field.fieldId, lockedFields]);\n\n const setAsTitle = useCallback(async (): Promise<void> => {\n const response = await setData(data => {\n return { ...data, titleFieldId: field.fieldId };\n });\n\n if (response && response.error) {\n return showSnackbar(response.error.message);\n }\n\n showSnackbar(t`Title field set successfully.`);\n }, [field.fieldId, setData]);\n\n const fieldPlugin = getFieldPlugin(field.type);\n const editorFieldOptionPlugins =\n plugins.byType<CmsEditorFieldOptionPlugin>(\"cms-editor-field-option\");\n\n if (!fieldPlugin) {\n return null;\n }\n\n const rendererPlugin = getFieldRendererPlugin(field.renderer.name);\n const canEdit = fieldPlugin.field.canEditSettings !== false;\n const isTitleField = data && field.fieldId === data.titleFieldId && !parent;\n\n const info = [\n rendererPlugin?.renderer.name,\n field.multipleValues ? \"multiple values\" : null,\n isTitleField ? \"entry title\" : null\n ]\n .filter(Boolean)\n .join(\", \");\n\n return (\n <Fragment>\n <FieldContainer>\n <Info>\n <Typography use={\"subtitle1\"}>{field.label}</Typography>\n <Typography use={\"caption\"}>\n {fieldPlugin.field.label} {field.multipleValues && <></>}\n <LowerCase>({info})</LowerCase>\n </Typography>\n </Info>\n <Actions>\n {canEdit ? (\n <IconButton\n data-testid={\"cms.editor.edit-field\"}\n icon={<EditIcon />}\n onClick={() => onEdit(field)}\n />\n ) : null}\n <Menu\n className={menuStyles}\n handle={<IconButton icon={<MoreVerticalIcon />} />}\n >\n {editorFieldOptionPlugins.map(pl =>\n React.cloneElement(pl.render(), { key: pl.name })\n )}\n {/* We only allow this action for top-level fields. */}\n <MenuItem\n disabled={!isFieldAllowedToBeTitle(field, parent)}\n onClick={setAsTitle}\n >\n <ListItemGraphic>\n <Icon icon={<TitleIcon />} />\n </ListItemGraphic>\n {t`Use as title`}\n </MenuItem>\n <MenuItem onClick={onDelete}>\n <ListItemGraphic>\n <Icon icon={<DeleteIcon />} />\n </ListItemGraphic>\n {t`Delete`}\n </MenuItem>\n </Menu>\n </Actions>\n </FieldContainer>\n <FieldExtra>\n {fieldPlugin.field.render && fieldPlugin.field.render({ field, data, setData })}\n </FieldExtra>\n </Fragment>\n );\n};\n\nexport default React.memo(Field);\n"],"mappings":"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"}
@@ -1,11 +1,11 @@
1
1
  import React from "react";
2
- import { CmsEditorField, CmsEditorFieldsLayout } from "../../../types";
2
+ import { CmsModelField, CmsEditorFieldsLayout } from "../../../types";
3
3
  export interface FieldEditorProps {
4
- parent?: CmsEditorField;
4
+ parent?: CmsModelField;
5
5
  layout: CmsEditorFieldsLayout;
6
- fields: CmsEditorField[];
6
+ fields: CmsModelField[];
7
7
  onChange: (params: {
8
- fields: CmsEditorField[];
8
+ fields: CmsModelField[];
9
9
  layout: CmsEditorFieldsLayout;
10
10
  }) => void;
11
11
  }
@@ -31,10 +31,12 @@ var _Field = _interopRequireDefault(require("./Field"));
31
31
 
32
32
  var _Styled = require("./Styled");
33
33
 
34
- var _useFieldEditor2 = require("./useFieldEditor");
34
+ var _useModelFieldEditor2 = require("./useModelFieldEditor");
35
35
 
36
36
  var _FieldEditorContext = require("./FieldEditorContext");
37
37
 
38
+ var _ModelFieldProvider = require("../ModelFieldProvider");
39
+
38
40
  var _templateObject;
39
41
 
40
42
  var t = _i18n.i18n.namespace("app-headless-cms/admin/components/editor");
@@ -42,29 +44,78 @@ var t = _i18n.i18n.namespace("app-headless-cms/admin/components/editor");
42
44
  var fieldTypes = ["field", "newField"];
43
45
 
44
46
  var Editor = function Editor() {
45
- var _useFieldEditor = (0, _useFieldEditor2.useFieldEditor)(),
46
- parent = _useFieldEditor.parent,
47
- depth = _useFieldEditor.depth,
48
- insertField = _useFieldEditor.insertField,
49
- updateField = _useFieldEditor.updateField,
50
- deleteField = _useFieldEditor.deleteField,
51
- fields = _useFieldEditor.fields,
52
- noConflict = _useFieldEditor.noConflict,
53
- editField = _useFieldEditor.editField,
54
- onFieldDrop = _useFieldEditor.onFieldDrop,
55
- onEndDrag = _useFieldEditor.onEndDrag,
56
- field = _useFieldEditor.field,
57
- dropTarget = _useFieldEditor.dropTarget;
47
+ var _useModelFieldEditor = (0, _useModelFieldEditor2.useModelFieldEditor)(),
48
+ parent = _useModelFieldEditor.parent,
49
+ depth = _useModelFieldEditor.depth,
50
+ insertField = _useModelFieldEditor.insertField,
51
+ updateField = _useModelFieldEditor.updateField,
52
+ deleteField = _useModelFieldEditor.deleteField,
53
+ fields = _useModelFieldEditor.fields,
54
+ noConflict = _useModelFieldEditor.noConflict,
55
+ editField = _useModelFieldEditor.editField,
56
+ onFieldDrop = _useModelFieldEditor.onFieldDrop,
57
+ onEndDrag = _useModelFieldEditor.onEndDrag,
58
+ field = _useModelFieldEditor.field,
59
+ dropTarget = _useModelFieldEditor.dropTarget,
60
+ getFieldPlugin = _useModelFieldEditor.getFieldPlugin;
61
+
62
+ var canDropIntoField = function canDropIntoField(field, draggable) {
63
+ var fieldPlugin = getFieldPlugin(field.type);
64
+ var canAccept = fieldPlugin.field.canAccept;
65
+
66
+ if (typeof canAccept === "function" && !canAccept(field, draggable)) {
67
+ return false;
68
+ }
69
+
70
+ return true;
71
+ };
72
+
73
+ var isVerticalDropzoneVisible = function isVerticalDropzoneVisible(cb) {
74
+ return function (item) {
75
+ var _fieldPlugin$field$al;
76
+
77
+ if (!parent) {
78
+ return cb(item);
79
+ }
80
+
81
+ var fieldPlugin = getFieldPlugin(parent.type);
82
+ var allowLayout = (_fieldPlugin$field$al = fieldPlugin.field.allowLayout) !== null && _fieldPlugin$field$al !== void 0 ? _fieldPlugin$field$al : true;
83
+
84
+ if (!allowLayout) {
85
+ return false;
86
+ }
87
+
88
+ if (!canDropIntoField(parent, item)) {
89
+ return false;
90
+ }
91
+
92
+ return cb(item);
93
+ };
94
+ };
95
+
96
+ var isHorizontalDropzoneVisible = function isHorizontalDropzoneVisible(cb) {
97
+ return function (item) {
98
+ if (!parent) {
99
+ return cb(item);
100
+ }
101
+
102
+ if (!canDropIntoField(parent, item)) {
103
+ return false;
104
+ }
105
+
106
+ return cb(item);
107
+ };
108
+ };
58
109
 
59
110
  return /*#__PURE__*/_react.default.createElement(_react.Fragment, null, fields.length === 0 && /*#__PURE__*/_react.default.createElement(_DropZone.Center, {
111
+ isDroppable: isHorizontalDropzoneVisible(function () {
112
+ return true;
113
+ }),
60
114
  onDrop: function onDrop(item) {
61
115
  return onFieldDrop(item, {
62
116
  row: 0,
63
117
  index: 0
64
118
  });
65
- },
66
- style: {
67
- padding: "5px 0 15px 0"
68
119
  }
69
120
  }, t(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["Drop your first field here"])))), fields.map(function (row, index) {
70
121
  return /*#__PURE__*/_react.default.createElement(_Draggable.default, {
@@ -95,8 +146,8 @@ var Editor = function Editor() {
95
146
  }, /*#__PURE__*/_react.default.createElement(_Icon.Icon, {
96
147
  icon: /*#__PURE__*/_react.default.createElement(_roundDrag_indicator24px.ReactComponent, null)
97
148
  })), /*#__PURE__*/_react.default.createElement(_DropZone.Horizontal, {
149
+ isVisible: isHorizontalDropzoneVisible(noConflict()),
98
150
  "data-testid": "cms-editor-row-droppable-top-".concat(index),
99
- isVisible: noConflict(),
100
151
  onDrop: function onDrop(item) {
101
152
  return onFieldDrop(item, {
102
153
  row: index,
@@ -106,8 +157,10 @@ var Editor = function Editor() {
106
157
  }), /*#__PURE__*/_react.default.createElement(_Styled.Row, {
107
158
  "data-testid": "cms.editor.field-row"
108
159
  }, row.map(function (field, fieldIndex) {
109
- return /*#__PURE__*/_react.default.createElement(_Draggable.default, {
110
- key: field.fieldId,
160
+ return /*#__PURE__*/_react.default.createElement(_ModelFieldProvider.ModelFieldProvider, {
161
+ field: field,
162
+ key: field.fieldId
163
+ }, /*#__PURE__*/_react.default.createElement(_Draggable.default, {
111
164
  beginDrag: {
112
165
  parent: parent ? parent.fieldId : null,
113
166
  type: "field",
@@ -131,9 +184,9 @@ var Editor = function Editor() {
131
184
  index: fieldIndex
132
185
  });
133
186
  },
134
- isVisible: noConflict(function (item) {
187
+ isVisible: isVerticalDropzoneVisible(noConflict(function (item) {
135
188
  return fieldTypes.includes(item.type) && (row.length < 4 || (0, _get.default)(item, "pos.row") === index);
136
- })
189
+ }))
137
190
  }), /*#__PURE__*/_react.default.createElement("div", {
138
191
  className: _Styled.fieldHandle
139
192
  }, /*#__PURE__*/_react.default.createElement(_Field.default, {
@@ -144,9 +197,9 @@ var Editor = function Editor() {
144
197
  })), fieldIndex === row.length - 1 && /*#__PURE__*/_react.default.createElement(_DropZone.Vertical, {
145
198
  last: true,
146
199
  depth: depth,
147
- isVisible: noConflict(function (item) {
200
+ isVisible: isVerticalDropzoneVisible(noConflict(function (item) {
148
201
  return fieldTypes.includes(item.type) && (row.length < 4 || (0, _get.default)(item, "pos.row") === index);
149
- }),
202
+ })),
150
203
  onDrop: function onDrop(item) {
151
204
  return onFieldDrop(item, {
152
205
  row: index,
@@ -154,21 +207,22 @@ var Editor = function Editor() {
154
207
  });
155
208
  }
156
209
  }));
157
- });
158
- })), index === fields.length - 1 && /*#__PURE__*/_react.default.createElement(_DropZone.Horizontal, {
210
+ }));
211
+ })), index === fields.length - 1 ? /*#__PURE__*/_react.default.createElement(_DropZone.Horizontal, {
159
212
  "data-testid": "cms-editor-row-droppable-bottom-".concat(index),
160
213
  last: true,
161
- isVisible: noConflict(),
214
+ isVisible: isHorizontalDropzoneVisible(noConflict()),
162
215
  onDrop: function onDrop(item) {
163
216
  return onFieldDrop(item, {
164
217
  row: index + 1,
165
218
  index: null
166
219
  });
167
220
  }
168
- }));
221
+ }) : null);
169
222
  });
170
- }), /*#__PURE__*/_react.default.createElement(_EditFieldDialog.default, {
171
- field: field,
223
+ }), field ? /*#__PURE__*/_react.default.createElement(_ModelFieldProvider.ModelFieldProvider, {
224
+ field: field
225
+ }, /*#__PURE__*/_react.default.createElement(_EditFieldDialog.default, {
172
226
  onClose: function onClose() {
173
227
  return editField(null);
174
228
  },
@@ -185,7 +239,7 @@ var Editor = function Editor() {
185
239
  });
186
240
  editField(null);
187
241
  }
188
- }));
242
+ })) : null);
189
243
  };
190
244
 
191
245
  var FieldEditor = function FieldEditor(props) {
@@ -1 +1 @@
1
- {"version":3,"names":["t","i18n","namespace","fieldTypes","Editor","useFieldEditor","parent","depth","insertField","updateField","deleteField","fields","noConflict","editField","onFieldDrop","onEndDrag","field","dropTarget","length","item","row","index","padding","map","fieldId","type","pos","f","join","drag","isDragging","opacity","rowHandle","fieldIndex","fieldContainer","includes","get","fieldHandle","id","position","FieldEditor","props"],"sources":["FieldEditor.tsx"],"sourcesContent":["import React, { Fragment } from \"react\";\nimport get from \"lodash/get\";\nimport { Icon } from \"@webiny/ui/Icon\";\nimport { i18n } from \"@webiny/app/i18n\";\nimport { ReactComponent as HandleIcon } from \"~/admin/icons/round-drag_indicator-24px.svg\";\nimport { Center, Vertical, Horizontal } from \"../DropZone\";\nimport Draggable from \"../Draggable\";\nimport EditFieldDialog from \"./EditFieldDialog\";\nimport Field from \"./Field\";\nimport { rowHandle, fieldHandle, fieldContainer, Row, RowContainer } from \"./Styled\";\nimport { useFieldEditor } from \"./useFieldEditor\";\nimport { FieldEditorProvider } from \"./FieldEditorContext\";\nimport { CmsEditorField, CmsEditorFieldsLayout } from \"~/types\";\n\nconst t = i18n.namespace(\"app-headless-cms/admin/components/editor\");\n\nconst fieldTypes: string[] = [\"field\", \"newField\"];\n\nconst Editor: React.FC = () => {\n const {\n parent,\n depth,\n insertField,\n updateField,\n deleteField,\n fields,\n noConflict,\n editField,\n onFieldDrop,\n onEndDrag,\n field,\n dropTarget\n } = useFieldEditor();\n\n return (\n <Fragment>\n {fields.length === 0 && (\n <Center\n onDrop={item =>\n onFieldDrop(item, {\n row: 0,\n index: 0\n })\n }\n style={{ padding: \"5px 0 15px 0\" }}\n >\n {t`Drop your first field here`}\n </Center>\n )}\n\n {fields.map((row, index) => (\n <Draggable\n beginDrag={{\n parent: parent ? parent.fieldId : null,\n type: \"row\",\n fields: row,\n pos: { row: index }\n }}\n endDrag={onEndDrag}\n key={row.map(f => f.fieldId).join(\".\")}\n >\n {(\n {\n drag,\n isDragging\n } /* RowContainer start - includes drag handle, drop zones and the Row itself. */\n ) => (\n <RowContainer style={{ opacity: isDragging ? 0.3 : 1 }}>\n <div className={rowHandle} ref={drag}>\n <Icon icon={<HandleIcon />} />\n </div>\n <Horizontal\n data-testid={`cms-editor-row-droppable-top-${index}`}\n isVisible={noConflict()}\n onDrop={item => onFieldDrop(item, { row: index, index: null })}\n />\n {/* Row start - includes field drop zones and fields */}\n <Row data-testid={\"cms.editor.field-row\"}>\n {row.map((field, fieldIndex) => (\n <Draggable\n key={field.fieldId}\n beginDrag={{\n parent: parent ? parent.fieldId : null,\n type: \"field\",\n field,\n pos: {\n row: index,\n index: fieldIndex\n }\n }}\n endDrag={onEndDrag}\n >\n {({ drag }) => (\n <div className={fieldContainer} ref={drag}>\n <Vertical\n depth={depth}\n onDrop={item =>\n onFieldDrop(item, {\n row: index,\n index: fieldIndex\n })\n }\n isVisible={noConflict(\n item =>\n fieldTypes.includes(item.type) &&\n (row.length < 4 ||\n get(item, \"pos.row\") === index)\n )}\n />\n\n <div className={fieldHandle}>\n <Field\n parent={parent}\n field={field}\n onEdit={editField}\n onDelete={deleteField}\n />\n </div>\n\n {/* Field end */}\n {fieldIndex === row.length - 1 && (\n <Vertical\n last\n depth={depth}\n isVisible={noConflict(\n item =>\n fieldTypes.includes(item.type) &&\n (row.length < 4 ||\n get(item, \"pos.row\") === index)\n )}\n onDrop={item =>\n onFieldDrop(item, {\n row: index,\n index: fieldIndex + 1\n })\n }\n />\n )}\n </div>\n )}\n </Draggable>\n ))}\n </Row>\n {/* Row end */}\n {index === fields.length - 1 && (\n <Horizontal\n data-testid={`cms-editor-row-droppable-bottom-${index}`}\n last\n isVisible={noConflict()}\n onDrop={item =>\n onFieldDrop(item, {\n row: index + 1,\n index: null\n })\n }\n />\n )}\n </RowContainer>\n )}\n </Draggable>\n ))}\n\n <EditFieldDialog\n field={field}\n onClose={() => editField(null)}\n onSubmit={field => {\n if (field.id) {\n updateField(field);\n editField(null);\n return;\n }\n insertField({ field, position: dropTarget });\n\n editField(null);\n }}\n />\n </Fragment>\n );\n};\n\nexport interface FieldEditorProps {\n parent?: CmsEditorField;\n layout: CmsEditorFieldsLayout;\n fields: CmsEditorField[];\n onChange: (params: { fields: CmsEditorField[]; layout: CmsEditorFieldsLayout }) => void;\n}\n\nexport const FieldEditor: React.FC<FieldEditorProps> = props => {\n return (\n <FieldEditorProvider {...props}>\n <Editor />\n </FieldEditorProvider>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["t","i18n","namespace","fieldTypes","Editor","useModelFieldEditor","parent","depth","insertField","updateField","deleteField","fields","noConflict","editField","onFieldDrop","onEndDrag","field","dropTarget","getFieldPlugin","canDropIntoField","draggable","fieldPlugin","type","canAccept","isVerticalDropzoneVisible","cb","item","allowLayout","isHorizontalDropzoneVisible","length","row","index","map","fieldId","pos","f","join","drag","isDragging","opacity","rowHandle","fieldIndex","fieldContainer","includes","get","fieldHandle","id","position","FieldEditor","props"],"sources":["FieldEditor.tsx"],"sourcesContent":["import React, { Fragment } from \"react\";\nimport get from \"lodash/get\";\nimport { Icon } from \"@webiny/ui/Icon\";\nimport { i18n } from \"@webiny/app/i18n\";\nimport { ReactComponent as HandleIcon } from \"~/admin/icons/round-drag_indicator-24px.svg\";\nimport { Center, Vertical, Horizontal } from \"../DropZone\";\nimport Draggable from \"../Draggable\";\nimport EditFieldDialog from \"./EditFieldDialog\";\nimport Field from \"./Field\";\nimport { rowHandle, fieldHandle, fieldContainer, Row, RowContainer } from \"./Styled\";\nimport { useModelFieldEditor } from \"./useModelFieldEditor\";\nimport { DragSource, FieldEditorProvider, IsVisibleCallable } from \"./FieldEditorContext\";\nimport { CmsModelField, CmsEditorFieldsLayout, CmsModelFieldTypePlugin } from \"~/types\";\nimport { ModelFieldProvider } from \"~/admin/components/ModelFieldProvider\";\n\nconst t = i18n.namespace(\"app-headless-cms/admin/components/editor\");\n\nconst fieldTypes: string[] = [\"field\", \"newField\"];\n\nconst Editor: React.FC = () => {\n const {\n parent,\n depth,\n insertField,\n updateField,\n deleteField,\n fields,\n noConflict,\n editField,\n onFieldDrop,\n onEndDrag,\n field,\n dropTarget,\n getFieldPlugin\n } = useModelFieldEditor();\n\n const canDropIntoField = (field: CmsModelField, draggable: DragSource) => {\n const fieldPlugin = getFieldPlugin(field.type) as CmsModelFieldTypePlugin;\n const canAccept = fieldPlugin.field.canAccept;\n if (typeof canAccept === \"function\" && !canAccept(field, draggable)) {\n return false;\n }\n\n return true;\n };\n\n const isVerticalDropzoneVisible = (cb: IsVisibleCallable) => {\n return (item: DragSource) => {\n if (!parent) {\n return cb(item);\n }\n\n const fieldPlugin = getFieldPlugin(parent.type) as CmsModelFieldTypePlugin;\n const allowLayout = fieldPlugin.field.allowLayout ?? true;\n if (!allowLayout) {\n return false;\n }\n\n if (!canDropIntoField(parent, item)) {\n return false;\n }\n\n return cb(item);\n };\n };\n\n const isHorizontalDropzoneVisible = (cb: IsVisibleCallable) => {\n return (item: DragSource) => {\n if (!parent) {\n return cb(item);\n }\n\n if (!canDropIntoField(parent, item)) {\n return false;\n }\n\n return cb(item);\n };\n };\n\n return (\n <Fragment>\n {fields.length === 0 && (\n <Center\n isDroppable={isHorizontalDropzoneVisible(() => true)}\n onDrop={item =>\n onFieldDrop(item, {\n row: 0,\n index: 0\n })\n }\n >\n {t`Drop your first field here`}\n </Center>\n )}\n\n {fields.map((row, index) => (\n <Draggable\n beginDrag={{\n parent: parent ? parent.fieldId : null,\n type: \"row\",\n fields: row,\n pos: { row: index }\n }}\n endDrag={onEndDrag}\n key={row.map(f => f.fieldId).join(\".\")}\n >\n {(\n {\n drag,\n isDragging\n } /* RowContainer start - includes drag handle, drop zones and the Row itself. */\n ) => (\n <RowContainer style={{ opacity: isDragging ? 0.3 : 1 }}>\n <div className={rowHandle} ref={drag}>\n <Icon icon={<HandleIcon />} />\n </div>\n <Horizontal\n isVisible={isHorizontalDropzoneVisible(noConflict())}\n data-testid={`cms-editor-row-droppable-top-${index}`}\n onDrop={item => onFieldDrop(item, { row: index, index: null })}\n />\n {/* Row start - includes field drop zones and fields */}\n <Row data-testid={\"cms.editor.field-row\"}>\n {row.map((field, fieldIndex) => (\n <ModelFieldProvider field={field} key={field.fieldId}>\n <Draggable\n beginDrag={{\n parent: parent ? parent.fieldId : null,\n type: \"field\",\n field,\n pos: {\n row: index,\n index: fieldIndex\n }\n }}\n endDrag={onEndDrag}\n >\n {({ drag }) => (\n <div className={fieldContainer} ref={drag}>\n <Vertical\n depth={depth}\n onDrop={item =>\n onFieldDrop(item, {\n row: index,\n index: fieldIndex\n })\n }\n isVisible={isVerticalDropzoneVisible(\n noConflict(\n item =>\n fieldTypes.includes(\n item.type\n ) &&\n (row.length < 4 ||\n get(item, \"pos.row\") ===\n index)\n )\n )}\n />\n\n <div className={fieldHandle}>\n <Field\n parent={parent}\n field={field}\n onEdit={editField}\n onDelete={deleteField}\n />\n </div>\n\n {/* Field end */}\n {fieldIndex === row.length - 1 && (\n <Vertical\n last\n depth={depth}\n isVisible={isVerticalDropzoneVisible(\n noConflict(item => {\n return (\n fieldTypes.includes(\n item.type\n ) &&\n (row.length < 4 ||\n get(item, \"pos.row\") ===\n index)\n );\n })\n )}\n onDrop={item =>\n onFieldDrop(item, {\n row: index,\n index: fieldIndex + 1\n })\n }\n />\n )}\n </div>\n )}\n </Draggable>\n </ModelFieldProvider>\n ))}\n </Row>\n {/* Row end */}\n {index === fields.length - 1 ? (\n <Horizontal\n data-testid={`cms-editor-row-droppable-bottom-${index}`}\n last\n isVisible={isHorizontalDropzoneVisible(noConflict())}\n onDrop={item =>\n onFieldDrop(item, {\n row: index + 1,\n index: null\n })\n }\n />\n ) : null}\n </RowContainer>\n )}\n </Draggable>\n ))}\n\n {field ? (\n <ModelFieldProvider field={field}>\n <EditFieldDialog\n onClose={() => editField(null)}\n onSubmit={field => {\n if (field.id) {\n updateField(field);\n editField(null);\n return;\n }\n insertField({ field, position: dropTarget });\n\n editField(null);\n }}\n />\n </ModelFieldProvider>\n ) : null}\n </Fragment>\n );\n};\n\nexport interface FieldEditorProps {\n parent?: CmsModelField;\n layout: CmsEditorFieldsLayout;\n fields: CmsModelField[];\n onChange: (params: { fields: CmsModelField[]; layout: CmsEditorFieldsLayout }) => void;\n}\n\nexport const FieldEditor: React.FC<FieldEditorProps> = props => {\n return (\n <FieldEditorProvider {...props}>\n <Editor />\n </FieldEditorProvider>\n );\n};\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import React from "react";
2
- import { CmsEditorField, CmsEditorFieldId, CmsEditorFieldRendererPlugin, CmsEditorFieldsLayout, CmsEditorFieldTypePlugin, FieldLayoutPosition } from "../../../types";
2
+ import { CmsModelField, CmsEditorFieldId, CmsEditorFieldRendererPlugin, CmsEditorFieldsLayout, CmsEditorFieldTypePlugin, FieldLayoutPosition } from "../../../types";
3
3
  import { FieldEditorProps } from "./FieldEditor";
4
4
  import { DragObjectWithType, DragSourceMonitor } from "react-dnd";
5
5
  interface DropTarget {
@@ -15,8 +15,8 @@ export interface DragSource extends DragObjectWithType {
15
15
  pos?: Partial<Position>;
16
16
  type: "row" | "field" | "newField";
17
17
  fieldType?: string;
18
- field?: CmsEditorField | null;
19
- fields?: CmsEditorField[];
18
+ field?: CmsModelField | null;
19
+ fields?: CmsModelField[];
20
20
  }
21
21
  /**
22
22
  * Property in GetFieldParams can be any key from CmsEditorField, but TS does not allow union types
@@ -26,21 +26,21 @@ interface GetFieldParams {
26
26
  fieldId?: string;
27
27
  }
28
28
  interface InsertFieldParams {
29
- field: CmsEditorField;
29
+ field: CmsModelField;
30
30
  position: FieldLayoutPosition;
31
31
  }
32
32
  interface MoveFieldParams {
33
- field: CmsEditorFieldId | CmsEditorField;
33
+ field: CmsEditorFieldId | CmsModelField;
34
34
  position: FieldLayoutPosition;
35
35
  }
36
36
  interface GetFieldsInLayoutCallable {
37
- (): CmsEditorField[][];
37
+ (): CmsModelField[][];
38
38
  }
39
39
  interface GetFieldPluginCallable {
40
40
  (type: string): CmsEditorFieldTypePlugin | undefined;
41
41
  }
42
42
  interface GetFieldCallable {
43
- (query: GetFieldParams): CmsEditorField | undefined;
43
+ (query: GetFieldParams): CmsModelField | undefined;
44
44
  }
45
45
  interface GetFieldRendererCallable {
46
46
  (rendererName: string): CmsEditorFieldRendererPlugin | undefined;
@@ -61,19 +61,19 @@ interface MoveRowCallable {
61
61
  (source: number, destination: number): void;
62
62
  }
63
63
  interface UpdateFieldCallable {
64
- (field: Pick<CmsEditorField, "id">): void;
64
+ (field: CmsModelField): void;
65
65
  }
66
66
  interface DeleteFieldCallable {
67
- (field: Pick<CmsEditorField, "id">): void;
67
+ (field: Pick<CmsModelField, "id">): void;
68
68
  }
69
- interface IsVisibleCallable {
69
+ export interface IsVisibleCallable {
70
70
  (item: DragSource): boolean;
71
71
  }
72
72
  interface NoConflictCallable {
73
73
  (cb?: IsVisibleCallable): (item: DragSource) => boolean;
74
74
  }
75
- export interface FieldEditorContextValue {
76
- fields: CmsEditorField[][];
75
+ export interface FieldEditorContext {
76
+ fields: CmsModelField[][];
77
77
  noConflict: NoConflictCallable;
78
78
  layout: CmsEditorFieldsLayout;
79
79
  onChange?: (data: any) => void;
@@ -81,9 +81,9 @@ export interface FieldEditorContextValue {
81
81
  getFieldPlugin: GetFieldPluginCallable;
82
82
  getField: GetFieldCallable;
83
83
  getFieldRendererPlugin: GetFieldRendererCallable;
84
- editField: (field: CmsEditorField | null) => void;
85
- field: CmsEditorField | null;
86
- parent?: CmsEditorField;
84
+ editField: (field: CmsModelField | null) => void;
85
+ field: CmsModelField | null;
86
+ parent?: CmsModelField;
87
87
  depth: number;
88
88
  dropTarget: DropTarget;
89
89
  onFieldDrop: OnFieldDropCallable;
@@ -97,6 +97,6 @@ export interface FieldEditorContextValue {
97
97
  interface FieldEditorProviderProps extends FieldEditorProps {
98
98
  children: React.ReactElement;
99
99
  }
100
- export declare const FieldEditorContext: React.Context<FieldEditorContextValue>;
100
+ export declare const FieldEditorContext: React.Context<FieldEditorContext | undefined>;
101
101
  export declare const FieldEditorProvider: React.FC<FieldEditorProviderProps>;
102
102
  export {};
@@ -23,17 +23,11 @@ var _plugins = require("@webiny/plugins");
23
23
 
24
24
  var utils = _interopRequireWildcard(require("./utils"));
25
25
 
26
- var _useFieldEditor = require("./useFieldEditor");
26
+ var _useModelFieldEditor = require("./useModelFieldEditor");
27
27
 
28
28
  var _utils2 = require("@webiny/utils");
29
29
 
30
- var FieldEditorContext = /*#__PURE__*/_react.default.createContext(
31
- /**
32
- * Safe to cast.
33
- */
34
- {
35
- field: null
36
- });
30
+ var FieldEditorContext = /*#__PURE__*/_react.default.createContext(undefined);
37
31
  /**
38
32
  * We try to generate the random id string but with the check that it does not exist already.
39
33
  * Chances that the same string exists are quite small, but let's check it anyway.
@@ -71,7 +65,7 @@ var FieldEditorProvider = function FieldEditorProvider(_ref) {
71
65
  var depth = 0;
72
66
 
73
67
  try {
74
- var editor = (0, _useFieldEditor.useFieldEditor)();
68
+ var editor = (0, _useModelFieldEditor.useModelFieldEditor)();
75
69
  depth = editor.depth + 1;
76
70
  } catch (_unused) {// There's no parent provider, so this is the top-level one.
77
71
  }
@@ -166,17 +160,23 @@ var FieldEditorProvider = function FieldEditorProvider(_ref) {
166
160
  if (!plugin) {
167
161
  return null;
168
162
  }
169
- /**
170
- * TODO @ts-refactor figure out better type for this.
171
- */
172
163
 
164
+ var fieldData = plugin.field.createField();
173
165
 
174
- editField(plugin.field.createField());
175
- setState(function (state) {
176
- return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, state), {}, {
177
- dropTarget: dropTarget
166
+ if (plugin.field.canEditSettings !== false) {
167
+ editField(fieldData);
168
+ setState(function (state) {
169
+ return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, state), {}, {
170
+ dropTarget: dropTarget
171
+ });
178
172
  });
179
- });
173
+ } else {
174
+ insertField({
175
+ field: fieldData,
176
+ position: dropTarget
177
+ });
178
+ }
179
+
180
180
  return null;
181
181
  }, []);
182
182
 
@@ -277,7 +277,7 @@ var FieldEditorProvider = function FieldEditorProvider(_ref) {
277
277
  var fieldPlugin = getFieldPlugin(field.type);
278
278
 
279
279
  if (!fieldPlugin) {
280
- throw new Error("Invalid field \"type\".");
280
+ throw new Error("No plugin found for field type \"".concat(field.type, "\"."));
281
281
  }
282
282
 
283
283
  setState(function (prev) {
@@ -1 +1 @@
1
- {"version":3,"names":["FieldEditorContext","React","createContext","field","maxGenerateIdIterations","generateFieldId","layout","id","generateAlphaNumericLowerCaseId","iteration","includes","Error","FieldEditorProvider","parent","fields","onChange","children","depth","editor","useFieldEditor","useState","dropTarget","row","index","state","setState","useDeepCompareEffect","editField","useCallback","onDropTarget","fieldId","onFieldDrop","source","pos","type","fieldType","parentId","forEach","insertField","position","undefined","moveRow","moveField","plugin","getFieldPlugin","createField","onEndDrag","monitor","didDrop","getDropResult","removeFields","deleteField","getFieldsInLayout","filter","arr","length","map","getField","Boolean","plugins","byType","find","getFieldRendererPlugin","name","renderer","rendererName","query","key","flat","fieldPlugin","prev","next","concat","utils","data","destination","updateField","i","dot","set","noConflict","isVisible","item","sameParent","draggedFields","push","some","f","join","value"],"sources":["FieldEditorContext.tsx"],"sourcesContent":["import React, { useCallback, useState } from \"react\";\nimport dot from \"dot-prop-immutable\";\nimport useDeepCompareEffect from \"use-deep-compare-effect\";\nimport {\n CmsEditorField,\n CmsEditorFieldId,\n CmsEditorFieldRendererPlugin,\n CmsEditorFieldsLayout,\n CmsEditorFieldTypePlugin,\n FieldLayoutPosition\n} from \"~/types\";\nimport { plugins } from \"@webiny/plugins\";\nimport * as utils from \"./utils\";\nimport { FieldEditorProps } from \"./FieldEditor\";\nimport { DragObjectWithType, DragSourceMonitor } from \"react-dnd\";\nimport { useFieldEditor } from \"~/admin/components/FieldEditor/useFieldEditor\";\nimport { generateAlphaNumericLowerCaseId } from \"@webiny/utils\";\n\ninterface DropTarget {\n row: number;\n index: number | null;\n}\n\ninterface Position {\n row: number;\n index: number;\n}\n\nexport interface DragSource extends DragObjectWithType {\n parent?: string;\n pos?: Partial<Position>;\n type: \"row\" | \"field\" | \"newField\";\n fieldType?: string;\n field?: CmsEditorField | null;\n fields?: CmsEditorField[];\n}\n\n/**\n * Property in GetFieldParams can be any key from CmsEditorField, but TS does not allow union types\n */\ninterface GetFieldParams {\n id?: string;\n fieldId?: string;\n}\ninterface InsertFieldParams {\n field: CmsEditorField;\n position: FieldLayoutPosition;\n}\ninterface MoveFieldParams {\n field: CmsEditorFieldId | CmsEditorField;\n position: FieldLayoutPosition;\n}\ninterface GetFieldsInLayoutCallable {\n (): CmsEditorField[][];\n}\ninterface GetFieldPluginCallable {\n (type: string): CmsEditorFieldTypePlugin | undefined;\n}\ninterface GetFieldCallable {\n (query: GetFieldParams): CmsEditorField | undefined;\n}\ninterface GetFieldRendererCallable {\n (rendererName: string): CmsEditorFieldRendererPlugin | undefined;\n}\ninterface OnFieldDropCallable {\n (source: Partial<DragSource>, target: DropTarget): void;\n}\ninterface InsertFieldCallable {\n (params: InsertFieldParams): void;\n}\ninterface MoveFieldCallable {\n (params: MoveFieldParams): void;\n}\ninterface OnEndDragCallable {\n (item: DragSource, monitor: DragSourceMonitor): void;\n}\ninterface MoveRowCallable {\n (source: number, destination: number): void;\n}\ninterface UpdateFieldCallable {\n (field: Pick<CmsEditorField, \"id\">): void;\n}\ninterface DeleteFieldCallable {\n (field: Pick<CmsEditorField, \"id\">): void;\n}\ninterface IsVisibleCallable {\n (item: DragSource): boolean;\n}\ninterface NoConflictCallable {\n (cb?: IsVisibleCallable): (item: DragSource) => boolean;\n}\nexport interface FieldEditorContextValue {\n fields: CmsEditorField[][];\n noConflict: NoConflictCallable;\n layout: CmsEditorFieldsLayout;\n onChange?: (data: any) => void;\n getFieldsInLayout: GetFieldsInLayoutCallable;\n getFieldPlugin: GetFieldPluginCallable;\n getField: GetFieldCallable;\n getFieldRendererPlugin: GetFieldRendererCallable;\n editField: (field: CmsEditorField | null) => void;\n field: CmsEditorField | null;\n parent?: CmsEditorField;\n depth: number;\n dropTarget: DropTarget;\n onFieldDrop: OnFieldDropCallable;\n onEndDrag: OnEndDragCallable;\n insertField: InsertFieldCallable;\n moveField: MoveFieldCallable;\n moveRow: MoveRowCallable;\n updateField: UpdateFieldCallable;\n deleteField: DeleteFieldCallable;\n}\n\ninterface FieldEditorProviderProps extends FieldEditorProps {\n children: React.ReactElement;\n}\n\nexport const FieldEditorContext = React.createContext<FieldEditorContextValue>(\n /**\n * Safe to cast.\n */\n {\n field: null\n } as unknown as FieldEditorContextValue\n);\n/**\n * We try to generate the random id string but with the check that it does not exist already.\n * Chances that the same string exists are quite small, but let's check it anyway.\n *\n * In most cases, there will be no iterations anyway...\n */\nconst maxGenerateIdIterations = 100;\nconst generateFieldId = (layout: string[]): string => {\n let id = generateAlphaNumericLowerCaseId(8);\n\n let iteration = 0;\n while (layout.includes(id) && iteration < maxGenerateIdIterations) {\n id = generateAlphaNumericLowerCaseId(8);\n iteration++;\n }\n if (iteration >= maxGenerateIdIterations) {\n throw new Error(`Could not generate field ID in ${maxGenerateIdIterations} iterations.`);\n }\n return id;\n};\n\ninterface State {\n layout: CmsEditorFieldsLayout;\n fields: CmsEditorField[];\n field: CmsEditorField | null;\n dropTarget: DropTarget;\n}\nexport const FieldEditorProvider: React.FC<FieldEditorProviderProps> = ({\n parent,\n fields,\n layout,\n onChange,\n children\n}) => {\n // We need to determine depth of this provider so we can render drop zones with correct z-indexes.\n let depth = 0;\n try {\n const editor = useFieldEditor();\n depth = editor.depth + 1;\n } catch {\n // There's no parent provider, so this is the top-level one.\n }\n\n const [state, setState] = useState<State>({\n layout,\n fields,\n field: null,\n dropTarget: {\n row: -1,\n index: null\n }\n });\n\n useDeepCompareEffect(() => {\n onChange({ fields: state.fields, layout: state.layout });\n }, [state.fields, state.layout]);\n\n const editField = useCallback((field: CmsEditorField | null) => {\n setState(state => ({ ...state, field }));\n }, []);\n\n const onDropTarget = {\n dropTarget: parent ? parent.fieldId : null\n };\n\n const onFieldDrop = useCallback<OnFieldDropCallable>((source, dropTarget) => {\n const { pos, type, fieldType, field, fields = [] } = source;\n\n const parentId = parent ? parent.fieldId : null;\n\n if (type === \"row\") {\n if (parentId !== source.parent) {\n // We're dragging an existing row from another fieldset\n fields.forEach((field, index) => {\n insertField({\n field,\n position: {\n row: dropTarget.row,\n index: index === 0 ? null : index\n }\n });\n });\n } else if (pos && pos.row !== undefined) {\n // We're dragging a row within the same fieldset\n moveRow(pos.row, dropTarget.row);\n }\n\n return onDropTarget;\n }\n\n // If source pos is set, we are moving an existing field.\n if (pos) {\n if (!field) {\n return onDropTarget;\n }\n if (parentId !== source.parent) {\n // We're dragging an existing field from another fieldset\n insertField({ field, position: dropTarget });\n } else {\n // We're dragging a field within the same fieldset\n moveField({ field, position: dropTarget });\n }\n return onDropTarget;\n }\n\n if (!fieldType) {\n return null;\n }\n const plugin = getFieldPlugin(fieldType);\n if (!plugin) {\n return null;\n }\n /**\n * TODO @ts-refactor figure out better type for this.\n */\n editField(plugin.field.createField() as CmsEditorField);\n setState(state => ({\n ...state,\n dropTarget\n }));\n return null;\n }, []);\n\n const onEndDrag: OnEndDragCallable = ({ type, field, fields }, monitor) => {\n if (!monitor.didDrop()) {\n return;\n }\n\n // Check if we dropped outside of the source fieldset, and if yes, remove the field from the original parent.\n const { dropTarget } = monitor.getDropResult();\n const parentId = parent ? parent.fieldId : null;\n if (dropTarget === parentId) {\n return;\n }\n\n const removeFields = type === \"row\" ? fields || [] : field ? [field] : [];\n removeFields.forEach(field => deleteField(field));\n };\n\n const getFieldsInLayout: GetFieldsInLayoutCallable = () => {\n // Replace every field ID with actual field object.\n return state.layout\n .filter(arr => arr.length)\n .map(row => {\n return row\n .map(id => {\n return getField({ id });\n })\n .filter(Boolean);\n })\n .filter(row => {\n return row.length > 0;\n }) as CmsEditorField[][];\n };\n\n /**\n * Return field plugin.\n */\n const getFieldPlugin: GetFieldPluginCallable = type => {\n return plugins\n .byType<CmsEditorFieldTypePlugin>(\"cms-editor-field-type\")\n .find(plugin => plugin.field.type === type);\n };\n\n const getFieldRendererPlugin: GetFieldRendererCallable = name => {\n return plugins\n .byType<CmsEditorFieldRendererPlugin>(\"cms-editor-field-renderer\")\n .find(plugin => plugin.renderer.rendererName === name);\n };\n\n /**\n * Checks if field of given type already exists in the list of fields.\n */\n const getField: GetFieldCallable = query => {\n return state.fields.find(field => {\n for (const key in query) {\n if (!(key in field)) {\n return false;\n }\n // TODO @ts-refactor figure if there is a way to fix this.\n // @ts-ignore\n if (field[key] !== query[key]) {\n return false;\n }\n }\n\n return true;\n });\n };\n\n /**\n * Inserts a new field into the target position.\n */\n const insertField: InsertFieldCallable = ({ field, position }) => {\n if (!field.id) {\n field.id = generateFieldId(layout.flat());\n }\n\n if (!field.type) {\n throw new Error(`Field \"type\" missing.`);\n }\n\n const fieldPlugin = getFieldPlugin(field.type);\n if (!fieldPlugin) {\n throw new Error(`Invalid field \"type\".`);\n }\n\n setState(prev => {\n const next: State = {\n ...prev,\n fields: (prev.fields || []).concat(field)\n };\n\n // Move field to position where it was dropped.\n return utils.moveField({ field, position, data: next });\n });\n };\n\n /**\n * Moves field to the given target position.\n */\n const moveField: MoveFieldCallable = ({ field, position }) => {\n setState(data => {\n return utils.moveField<State>({ field, position, data });\n });\n };\n\n /**\n * Moves row to a destination row.\n */\n const moveRow: MoveRowCallable = (source, destination) => {\n setState(data => {\n return utils.moveRow({ data, source, destination });\n });\n };\n\n /**\n * Updates field.\n */\n const updateField: UpdateFieldCallable = field => {\n setState(data => {\n for (let i = 0; i < data.fields.length; i++) {\n if (data.fields[i].id === field.id) {\n return dot.set(data, `fields.${i}`, field);\n }\n }\n return data;\n });\n };\n\n /**\n * Deletes a field (both from the list of field and the layout).\n */\n const deleteField: DeleteFieldCallable = field => {\n setState(data => {\n return utils.deleteField({ field, data });\n });\n };\n\n const noConflict: NoConflictCallable = useCallback(\n (isVisible?: IsVisibleCallable) => item => {\n const sameParent = item.parent === onDropTarget.dropTarget;\n const draggedFields: string[] = [];\n switch (item.type) {\n case \"row\":\n (item.fields || []).forEach(field => draggedFields.push(field.fieldId));\n break;\n case \"field\":\n if (!item.field) {\n break;\n }\n draggedFields.push(item.field.fieldId);\n break;\n default:\n break;\n }\n\n if (\n draggedFields.length &&\n !sameParent &&\n fields.some(field => draggedFields.includes(field.fieldId))\n ) {\n return false;\n }\n\n return typeof isVisible === \"function\" ? isVisible(item) : true;\n },\n [fields.map(f => f.fieldId).join(\".\")]\n );\n\n const value: FieldEditorContextValue = {\n parent,\n depth,\n getFieldsInLayout,\n getFieldPlugin,\n getFieldRendererPlugin,\n getField,\n editField,\n field: state.field,\n dropTarget: state.dropTarget,\n onFieldDrop,\n onEndDrag,\n insertField,\n moveField,\n moveRow,\n updateField,\n deleteField,\n fields: getFieldsInLayout(),\n noConflict,\n layout: state.layout\n };\n\n return <FieldEditorContext.Provider value={value}>{children}</FieldEditorContext.Provider>;\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["FieldEditorContext","React","createContext","undefined","maxGenerateIdIterations","generateFieldId","layout","id","generateAlphaNumericLowerCaseId","iteration","includes","Error","FieldEditorProvider","parent","fields","onChange","children","depth","editor","useModelFieldEditor","useState","field","dropTarget","row","index","state","setState","useDeepCompareEffect","editField","useCallback","onDropTarget","fieldId","onFieldDrop","source","pos","type","fieldType","parentId","forEach","insertField","position","moveRow","moveField","plugin","getFieldPlugin","fieldData","createField","canEditSettings","onEndDrag","monitor","didDrop","getDropResult","removeFields","deleteField","getFieldsInLayout","filter","arr","length","map","getField","Boolean","plugins","byType","find","getFieldRendererPlugin","name","renderer","rendererName","query","key","flat","fieldPlugin","prev","next","concat","utils","data","destination","updateField","i","dot","set","noConflict","isVisible","item","sameParent","draggedFields","push","some","f","join","value"],"sources":["FieldEditorContext.tsx"],"sourcesContent":["import React, { useCallback, useState } from \"react\";\nimport dot from \"dot-prop-immutable\";\nimport useDeepCompareEffect from \"use-deep-compare-effect\";\nimport {\n CmsModelField,\n CmsEditorFieldId,\n CmsEditorFieldRendererPlugin,\n CmsEditorFieldsLayout,\n CmsEditorFieldTypePlugin,\n FieldLayoutPosition\n} from \"~/types\";\nimport { plugins } from \"@webiny/plugins\";\nimport * as utils from \"./utils\";\nimport { FieldEditorProps } from \"./FieldEditor\";\nimport { DragObjectWithType, DragSourceMonitor } from \"react-dnd\";\nimport { useModelFieldEditor } from \"~/admin/components/FieldEditor/useModelFieldEditor\";\nimport { generateAlphaNumericLowerCaseId } from \"@webiny/utils\";\n\ninterface DropTarget {\n row: number;\n index: number | null;\n}\n\ninterface Position {\n row: number;\n index: number;\n}\n\nexport interface DragSource extends DragObjectWithType {\n parent?: string;\n pos?: Partial<Position>;\n type: \"row\" | \"field\" | \"newField\";\n fieldType?: string;\n field?: CmsModelField | null;\n fields?: CmsModelField[];\n}\n\n/**\n * Property in GetFieldParams can be any key from CmsEditorField, but TS does not allow union types\n */\ninterface GetFieldParams {\n id?: string;\n fieldId?: string;\n}\ninterface InsertFieldParams {\n field: CmsModelField;\n position: FieldLayoutPosition;\n}\ninterface MoveFieldParams {\n field: CmsEditorFieldId | CmsModelField;\n position: FieldLayoutPosition;\n}\ninterface GetFieldsInLayoutCallable {\n (): CmsModelField[][];\n}\ninterface GetFieldPluginCallable {\n (type: string): CmsEditorFieldTypePlugin | undefined;\n}\ninterface GetFieldCallable {\n (query: GetFieldParams): CmsModelField | undefined;\n}\ninterface GetFieldRendererCallable {\n (rendererName: string): CmsEditorFieldRendererPlugin | undefined;\n}\ninterface OnFieldDropCallable {\n (source: Partial<DragSource>, target: DropTarget): void;\n}\ninterface InsertFieldCallable {\n (params: InsertFieldParams): void;\n}\ninterface MoveFieldCallable {\n (params: MoveFieldParams): void;\n}\ninterface OnEndDragCallable {\n (item: DragSource, monitor: DragSourceMonitor): void;\n}\ninterface MoveRowCallable {\n (source: number, destination: number): void;\n}\ninterface UpdateFieldCallable {\n (field: CmsModelField): void;\n}\ninterface DeleteFieldCallable {\n (field: Pick<CmsModelField, \"id\">): void;\n}\nexport interface IsVisibleCallable {\n (item: DragSource): boolean;\n}\ninterface NoConflictCallable {\n (cb?: IsVisibleCallable): (item: DragSource) => boolean;\n}\nexport interface FieldEditorContext {\n fields: CmsModelField[][];\n noConflict: NoConflictCallable;\n layout: CmsEditorFieldsLayout;\n onChange?: (data: any) => void;\n getFieldsInLayout: GetFieldsInLayoutCallable;\n getFieldPlugin: GetFieldPluginCallable;\n getField: GetFieldCallable;\n getFieldRendererPlugin: GetFieldRendererCallable;\n editField: (field: CmsModelField | null) => void;\n field: CmsModelField | null;\n parent?: CmsModelField;\n depth: number;\n dropTarget: DropTarget;\n onFieldDrop: OnFieldDropCallable;\n onEndDrag: OnEndDragCallable;\n insertField: InsertFieldCallable;\n moveField: MoveFieldCallable;\n moveRow: MoveRowCallable;\n updateField: UpdateFieldCallable;\n deleteField: DeleteFieldCallable;\n}\n\ninterface FieldEditorProviderProps extends FieldEditorProps {\n children: React.ReactElement;\n}\n\nexport const FieldEditorContext = React.createContext<FieldEditorContext | undefined>(undefined);\n/**\n * We try to generate the random id string but with the check that it does not exist already.\n * Chances that the same string exists are quite small, but let's check it anyway.\n *\n * In most cases, there will be no iterations anyway...\n */\nconst maxGenerateIdIterations = 100;\nconst generateFieldId = (layout: string[]): string => {\n let id = generateAlphaNumericLowerCaseId(8);\n\n let iteration = 0;\n while (layout.includes(id) && iteration < maxGenerateIdIterations) {\n id = generateAlphaNumericLowerCaseId(8);\n iteration++;\n }\n if (iteration >= maxGenerateIdIterations) {\n throw new Error(`Could not generate field ID in ${maxGenerateIdIterations} iterations.`);\n }\n return id;\n};\n\ninterface State {\n layout: CmsEditorFieldsLayout;\n fields: CmsModelField[];\n field: CmsModelField | null;\n dropTarget: DropTarget;\n}\nexport const FieldEditorProvider: React.FC<FieldEditorProviderProps> = ({\n parent,\n fields,\n layout,\n onChange,\n children\n}) => {\n // We need to determine depth of this provider so we can render drop zones with correct z-indexes.\n let depth = 0;\n try {\n const editor = useModelFieldEditor();\n depth = editor.depth + 1;\n } catch {\n // There's no parent provider, so this is the top-level one.\n }\n\n const [state, setState] = useState<State>({\n layout,\n fields,\n field: null,\n dropTarget: {\n row: -1,\n index: null\n }\n });\n\n useDeepCompareEffect(() => {\n onChange({ fields: state.fields, layout: state.layout });\n }, [state.fields, state.layout]);\n\n const editField = useCallback((field: CmsModelField | null) => {\n setState(state => ({ ...state, field }));\n }, []);\n\n const onDropTarget = {\n dropTarget: parent ? parent.fieldId : null\n };\n\n const onFieldDrop = useCallback<OnFieldDropCallable>((source, dropTarget) => {\n const { pos, type, fieldType, field, fields = [] } = source;\n\n const parentId = parent ? parent.fieldId : null;\n\n if (type === \"row\") {\n if (parentId !== source.parent) {\n // We're dragging an existing row from another fieldset\n fields.forEach((field, index) => {\n insertField({\n field,\n position: {\n row: dropTarget.row,\n index: index === 0 ? null : index\n }\n });\n });\n } else if (pos && pos.row !== undefined) {\n // We're dragging a row within the same fieldset\n moveRow(pos.row, dropTarget.row);\n }\n\n return onDropTarget;\n }\n\n // If source pos is set, we are moving an existing field.\n if (pos) {\n if (!field) {\n return onDropTarget;\n }\n if (parentId !== source.parent) {\n // We're dragging an existing field from another fieldset\n insertField({ field, position: dropTarget });\n } else {\n // We're dragging a field within the same fieldset\n moveField({ field, position: dropTarget });\n }\n return onDropTarget;\n }\n\n if (!fieldType) {\n return null;\n }\n const plugin = getFieldPlugin(fieldType);\n if (!plugin) {\n return null;\n }\n\n const fieldData = plugin.field.createField() as CmsModelField;\n\n if (plugin.field.canEditSettings !== false) {\n editField(fieldData);\n setState(state => ({\n ...state,\n dropTarget\n }));\n } else {\n insertField({ field: fieldData, position: dropTarget });\n }\n return null;\n }, []);\n\n const onEndDrag: OnEndDragCallable = ({ type, field, fields }, monitor) => {\n if (!monitor.didDrop()) {\n return;\n }\n\n // Check if we dropped outside of the source fieldset, and if yes, remove the field from the original parent.\n const { dropTarget } = monitor.getDropResult();\n const parentId = parent ? parent.fieldId : null;\n if (dropTarget === parentId) {\n return;\n }\n\n const removeFields = type === \"row\" ? fields || [] : field ? [field] : [];\n removeFields.forEach(field => deleteField(field));\n };\n\n const getFieldsInLayout: GetFieldsInLayoutCallable = () => {\n // Replace every field ID with actual field object.\n return state.layout\n .filter(arr => arr.length)\n .map(row => {\n return row\n .map(id => {\n return getField({ id });\n })\n .filter(Boolean);\n })\n .filter(row => {\n return row.length > 0;\n }) as CmsModelField[][];\n };\n\n /**\n * Return field plugin.\n */\n const getFieldPlugin: GetFieldPluginCallable = type => {\n return plugins\n .byType<CmsEditorFieldTypePlugin>(\"cms-editor-field-type\")\n .find(plugin => plugin.field.type === type);\n };\n\n const getFieldRendererPlugin: GetFieldRendererCallable = name => {\n return plugins\n .byType<CmsEditorFieldRendererPlugin>(\"cms-editor-field-renderer\")\n .find(plugin => plugin.renderer.rendererName === name);\n };\n\n /**\n * Checks if field of given type already exists in the list of fields.\n */\n const getField: GetFieldCallable = query => {\n return state.fields.find(field => {\n for (const key in query) {\n if (!(key in field)) {\n return false;\n }\n // TODO @ts-refactor figure if there is a way to fix this.\n // @ts-ignore\n if (field[key] !== query[key]) {\n return false;\n }\n }\n\n return true;\n });\n };\n\n /**\n * Inserts a new field into the target position.\n */\n const insertField: InsertFieldCallable = ({ field, position }) => {\n if (!field.id) {\n field.id = generateFieldId(layout.flat());\n }\n\n if (!field.type) {\n throw new Error(`Field \"type\" missing.`);\n }\n\n const fieldPlugin = getFieldPlugin(field.type);\n if (!fieldPlugin) {\n throw new Error(`No plugin found for field type \"${field.type}\".`);\n }\n\n setState(prev => {\n const next: State = {\n ...prev,\n fields: (prev.fields || []).concat(field)\n };\n\n // Move field to position where it was dropped.\n return utils.moveField({ field, position, data: next });\n });\n };\n\n /**\n * Moves field to the given target position.\n */\n const moveField: MoveFieldCallable = ({ field, position }) => {\n setState(data => {\n return utils.moveField<State>({ field, position, data });\n });\n };\n\n /**\n * Moves row to a destination row.\n */\n const moveRow: MoveRowCallable = (source, destination) => {\n setState(data => {\n return utils.moveRow({ data, source, destination });\n });\n };\n\n /**\n * Updates field.\n */\n const updateField: UpdateFieldCallable = field => {\n setState(data => {\n for (let i = 0; i < data.fields.length; i++) {\n if (data.fields[i].id === field.id) {\n return dot.set(data, `fields.${i}`, field);\n }\n }\n return data;\n });\n };\n\n /**\n * Deletes a field (both from the list of field and the layout).\n */\n const deleteField: DeleteFieldCallable = field => {\n setState(data => {\n return utils.deleteField({ field, data });\n });\n };\n\n const noConflict: NoConflictCallable = useCallback(\n (isVisible?: IsVisibleCallable) => item => {\n const sameParent = item.parent === onDropTarget.dropTarget;\n const draggedFields: string[] = [];\n switch (item.type) {\n case \"row\":\n (item.fields || []).forEach(field => draggedFields.push(field.fieldId));\n break;\n case \"field\":\n if (!item.field) {\n break;\n }\n draggedFields.push(item.field.fieldId);\n break;\n default:\n break;\n }\n\n if (\n draggedFields.length &&\n !sameParent &&\n fields.some(field => draggedFields.includes(field.fieldId))\n ) {\n return false;\n }\n\n return typeof isVisible === \"function\" ? isVisible(item) : true;\n },\n [fields.map(f => f.fieldId).join(\".\")]\n );\n\n const value: FieldEditorContext = {\n parent,\n depth,\n getFieldsInLayout,\n getFieldPlugin,\n getFieldRendererPlugin,\n getField,\n editField,\n field: state.field,\n dropTarget: state.dropTarget,\n onFieldDrop,\n onEndDrag,\n insertField,\n moveField,\n moveRow,\n updateField,\n deleteField,\n fields: getFieldsInLayout(),\n noConflict,\n layout: state.layout\n };\n\n return <FieldEditorContext.Provider value={value}>{children}</FieldEditorContext.Provider>;\n};\n"],"mappings":"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"}