@firecms/core 3.0.0-canary.2 → 3.0.0-canary.200

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 (409) hide show
  1. package/README.md +4 -4
  2. package/dist/app/AppBar.d.ts +12 -0
  3. package/dist/app/Drawer.d.ts +16 -0
  4. package/dist/app/Scaffold.d.ts +30 -0
  5. package/dist/app/index.d.ts +4 -0
  6. package/dist/app/useApp.d.ts +16 -0
  7. package/dist/components/ArrayContainer.d.ts +23 -6
  8. package/dist/components/CircularProgressCenter.d.ts +1 -1
  9. package/dist/components/ClearFilterSortButton.d.ts +5 -0
  10. package/dist/components/{DeleteConfirmationDialog.d.ts → ConfirmationDialog.d.ts} +1 -1
  11. package/dist/components/EntityCollectionTable/EntityCollectionRowActions.d.ts +13 -13
  12. package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +3 -3
  13. package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +22 -6
  14. package/dist/components/EntityCollectionTable/PropertyTableCell.d.ts +3 -2
  15. package/dist/components/EntityCollectionTable/column_utils.d.ts +1 -2
  16. package/dist/components/EntityCollectionTable/fields/TableReferenceField.d.ts +3 -1
  17. package/dist/components/EntityCollectionTable/index.d.ts +1 -1
  18. package/dist/components/EntityCollectionTable/internal/CollectionTableToolbar.d.ts +1 -4
  19. package/dist/components/EntityCollectionTable/internal/EntityTableCell.d.ts +2 -2
  20. package/dist/components/EntityCollectionTable/internal/popup_field/PopupFormField.d.ts +7 -4
  21. package/dist/components/EntityCollectionView/EntityCollectionView.d.ts +17 -4
  22. package/dist/components/EntityCollectionView/EntityCollectionViewStartActions.d.ts +11 -0
  23. package/dist/components/EntityCollectionView/useSelectionController.d.ts +2 -0
  24. package/dist/components/EntityCollectionView/utils.d.ts +3 -0
  25. package/dist/components/EntityPreview.d.ts +26 -7
  26. package/dist/components/EntityView.d.ts +11 -0
  27. package/dist/components/ErrorView.d.ts +1 -1
  28. package/dist/components/FieldCaption.d.ts +5 -0
  29. package/dist/components/HomePage/DefaultHomePage.d.ts +1 -1
  30. package/dist/components/HomePage/NavigationCard.d.ts +8 -0
  31. package/dist/components/HomePage/{NavigationCollectionCard.d.ts → NavigationCardBinding.d.ts} +3 -3
  32. package/dist/components/HomePage/SmallNavigationCard.d.ts +6 -0
  33. package/dist/components/HomePage/index.d.ts +3 -1
  34. package/dist/components/PropertyConfigBadge.d.ts +2 -1
  35. package/dist/components/PropertyIdCopyTooltip.d.ts +8 -0
  36. package/dist/components/ReferenceWidget.d.ts +6 -4
  37. package/dist/components/SelectableTable/SelectableTable.d.ts +13 -3
  38. package/dist/components/SelectableTable/filters/ReferenceFilterField.d.ts +2 -1
  39. package/dist/components/UnsavedChangesDialog.d.ts +8 -0
  40. package/dist/components/VirtualTable/VirtualTableProps.d.ts +29 -13
  41. package/dist/components/VirtualTable/types.d.ts +3 -3
  42. package/dist/components/{EntityCollectionTable/internal → common}/default_entity_actions.d.ts +1 -3
  43. package/dist/components/common/index.d.ts +2 -1
  44. package/dist/components/common/table_height.d.ts +5 -0
  45. package/dist/components/common/types.d.ts +4 -6
  46. package/dist/components/common/useColumnsIds.d.ts +3 -1
  47. package/dist/components/common/{useDataSourceEntityCollectionTableController.d.ts → useDataSourceTableController.d.ts} +13 -2
  48. package/dist/components/common/useDebouncedCallback.d.ts +1 -0
  49. package/dist/components/common/useScrollRestoration.d.ts +14 -0
  50. package/dist/components/index.d.ts +8 -5
  51. package/dist/contexts/AuthControllerContext.d.ts +1 -1
  52. package/dist/contexts/BreacrumbsContext.d.ts +8 -0
  53. package/dist/{components/FireCMSAppBar.d.ts → core/DefaultAppBar.d.ts} +6 -9
  54. package/dist/core/DefaultDrawer.d.ts +19 -0
  55. package/dist/core/DrawerNavigationItem.d.ts +10 -0
  56. package/dist/core/EntityEditView.d.ts +44 -0
  57. package/dist/core/EntityEditViewFormActions.d.ts +2 -0
  58. package/dist/core/FireCMS.d.ts +2 -2
  59. package/dist/core/FireCMSRouter.d.ts +4 -0
  60. package/dist/core/NavigationRoutes.d.ts +2 -3
  61. package/dist/core/SideDialogs.d.ts +4 -2
  62. package/dist/core/index.d.ts +4 -6
  63. package/dist/form/EntityForm.d.ts +45 -69
  64. package/dist/form/EntityFormActions.d.ts +17 -0
  65. package/dist/form/PropertyFieldBinding.d.ts +1 -1
  66. package/dist/form/components/ErrorFocus.d.ts +1 -1
  67. package/dist/form/components/FieldHelperText.d.ts +3 -3
  68. package/dist/form/components/FormEntry.d.ts +6 -0
  69. package/dist/form/components/FormLayout.d.ts +5 -0
  70. package/dist/{components → form/components}/LabelWithIcon.d.ts +1 -1
  71. package/dist/form/components/LabelWithIconAndTooltip.d.ts +15 -0
  72. package/dist/form/components/StorageItemPreview.d.ts +4 -3
  73. package/dist/form/components/StorageUploadProgress.d.ts +1 -1
  74. package/dist/form/components/index.d.ts +4 -1
  75. package/dist/form/field_bindings/ArrayCustomShapedFieldBinding.d.ts +1 -1
  76. package/dist/form/field_bindings/ArrayOfReferencesFieldBinding.d.ts +1 -1
  77. package/dist/form/field_bindings/BlockFieldBinding.d.ts +1 -1
  78. package/dist/form/field_bindings/KeyValueFieldBinding.d.ts +1 -1
  79. package/dist/form/field_bindings/MapFieldBinding.d.ts +1 -1
  80. package/dist/form/field_bindings/MarkdownEditorFieldBinding.d.ts +11 -0
  81. package/dist/form/field_bindings/{MultiSelectBinding.d.ts → MultiSelectFieldBinding.d.ts} +1 -1
  82. package/dist/form/field_bindings/ReadOnlyFieldBinding.d.ts +1 -1
  83. package/dist/form/field_bindings/ReferenceFieldBinding.d.ts +2 -2
  84. package/dist/form/field_bindings/RepeatFieldBinding.d.ts +1 -1
  85. package/dist/form/field_bindings/SelectFieldBinding.d.ts +1 -1
  86. package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +3 -4
  87. package/dist/form/field_bindings/SwitchFieldBinding.d.ts +1 -2
  88. package/dist/form/field_bindings/TextFieldBinding.d.ts +2 -2
  89. package/dist/form/index.d.ts +17 -18
  90. package/dist/form/useClearRestoreValue.d.ts +2 -2
  91. package/dist/form/validation.d.ts +1 -1
  92. package/dist/hooks/data/delete.d.ts +4 -4
  93. package/dist/hooks/data/save.d.ts +4 -5
  94. package/dist/hooks/data/useCollectionFetch.d.ts +1 -1
  95. package/dist/hooks/data/useDataSource.d.ts +2 -2
  96. package/dist/hooks/data/useEntityFetch.d.ts +4 -3
  97. package/dist/hooks/index.d.ts +4 -1
  98. package/dist/hooks/useAuthController.d.ts +1 -1
  99. package/dist/hooks/useBreadcrumbsController.d.ts +26 -0
  100. package/dist/{core → hooks}/useBuildModeController.d.ts +1 -1
  101. package/dist/hooks/useBuildNavigationController.d.ts +11 -6
  102. package/dist/hooks/useFireCMSContext.d.ts +1 -1
  103. package/dist/hooks/useModeController.d.ts +1 -2
  104. package/dist/hooks/useProjectLog.d.ts +12 -2
  105. package/dist/hooks/useResolvedNavigationFrom.d.ts +3 -3
  106. package/dist/hooks/useStorageSource.d.ts +2 -2
  107. package/dist/hooks/useValidateAuthenticator.d.ts +21 -0
  108. package/dist/index.d.ts +1 -0
  109. package/dist/index.es.js +22131 -14039
  110. package/dist/index.es.js.map +1 -1
  111. package/dist/index.umd.js +24420 -588
  112. package/dist/index.umd.js.map +1 -1
  113. package/dist/internal/useBuildDataSource.d.ts +1 -12
  114. package/dist/internal/useUnsavedChangesDialog.d.ts +7 -9
  115. package/dist/preview/PropertyPreview.d.ts +1 -1
  116. package/dist/preview/PropertyPreviewProps.d.ts +7 -5
  117. package/dist/preview/components/BooleanPreview.d.ts +5 -1
  118. package/dist/preview/components/EnumValuesChip.d.ts +1 -1
  119. package/dist/preview/components/ReferencePreview.d.ts +4 -9
  120. package/dist/preview/components/StorageThumbnail.d.ts +2 -1
  121. package/dist/preview/components/UrlComponentPreview.d.ts +2 -1
  122. package/dist/preview/util.d.ts +3 -3
  123. package/dist/routes/CustomCMSRoute.d.ts +4 -0
  124. package/dist/routes/FireCMSRoute.d.ts +1 -0
  125. package/dist/routes/HomePageRoute.d.ts +3 -0
  126. package/dist/types/analytics.d.ts +1 -1
  127. package/dist/types/auth.d.ts +37 -3
  128. package/dist/types/collections.d.ts +86 -24
  129. package/dist/types/datasource.d.ts +53 -37
  130. package/dist/types/dialogs_controller.d.ts +7 -3
  131. package/dist/types/entities.d.ts +8 -2
  132. package/dist/types/entity_actions.d.ts +28 -4
  133. package/dist/types/entity_callbacks.d.ts +16 -16
  134. package/dist/types/entity_overrides.d.ts +6 -0
  135. package/dist/types/export_import.d.ts +4 -4
  136. package/dist/types/fields.d.ts +71 -42
  137. package/dist/types/firecms.d.ts +6 -2
  138. package/dist/types/firecms_context.d.ts +1 -1
  139. package/dist/types/index.d.ts +2 -1
  140. package/dist/types/navigation.d.ts +45 -26
  141. package/dist/types/permissions.d.ts +8 -4
  142. package/dist/types/plugins.d.ts +40 -31
  143. package/dist/types/properties.d.ts +54 -26
  144. package/dist/types/property_config.d.ts +2 -4
  145. package/dist/types/roles.d.ts +31 -0
  146. package/dist/types/side_dialogs_controller.d.ts +10 -0
  147. package/dist/types/side_entity_controller.d.ts +6 -1
  148. package/dist/types/storage.d.ts +86 -3
  149. package/dist/types/user.d.ts +6 -0
  150. package/dist/util/builders.d.ts +3 -3
  151. package/dist/util/collections.d.ts +9 -1
  152. package/dist/util/entities.d.ts +3 -3
  153. package/dist/util/entity_actions.d.ts +2 -0
  154. package/dist/util/entity_cache.d.ts +23 -0
  155. package/dist/util/icon_list.d.ts +5 -1
  156. package/dist/util/icon_synonyms.d.ts +1 -98
  157. package/dist/util/icons.d.ts +13 -4
  158. package/dist/util/index.d.ts +2 -0
  159. package/dist/util/navigation_from_path.d.ts +6 -1
  160. package/dist/util/navigation_utils.d.ts +14 -3
  161. package/dist/util/objects.d.ts +2 -1
  162. package/dist/util/permissions.d.ts +4 -4
  163. package/dist/util/plurals.d.ts +0 -2
  164. package/dist/util/property_utils.d.ts +3 -3
  165. package/dist/util/references.d.ts +4 -2
  166. package/dist/util/resolutions.d.ts +31 -17
  167. package/dist/util/storage.d.ts +23 -2
  168. package/dist/util/useStorageUploadController.d.ts +3 -3
  169. package/dist/util/useTraceUpdate.d.ts +1 -0
  170. package/package.json +64 -51
  171. package/src/app/AppBar.tsx +18 -0
  172. package/src/app/Drawer.tsx +24 -0
  173. package/src/app/Scaffold.tsx +243 -0
  174. package/src/app/index.ts +4 -0
  175. package/src/app/useApp.tsx +32 -0
  176. package/src/components/ArrayContainer.tsx +126 -40
  177. package/src/components/CircularProgressCenter.tsx +2 -2
  178. package/src/components/ClearFilterSortButton.tsx +41 -0
  179. package/src/components/{DeleteConfirmationDialog.tsx → ConfirmationDialog.tsx} +3 -3
  180. package/src/components/DeleteEntityDialog.tsx +14 -23
  181. package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +56 -39
  182. package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +283 -280
  183. package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +29 -8
  184. package/src/components/EntityCollectionTable/PropertyTableCell.tsx +58 -50
  185. package/src/components/EntityCollectionTable/column_utils.tsx +3 -3
  186. package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +40 -33
  187. package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +22 -20
  188. package/src/components/EntityCollectionTable/index.tsx +1 -1
  189. package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +31 -36
  190. package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +36 -34
  191. package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +20 -8
  192. package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +81 -80
  193. package/src/components/EntityCollectionView/EntityCollectionView.tsx +228 -155
  194. package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +9 -8
  195. package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +68 -0
  196. package/src/components/EntityCollectionView/useSelectionController.tsx +43 -0
  197. package/src/components/EntityCollectionView/utils.ts +19 -0
  198. package/src/components/EntityPreview.tsx +218 -71
  199. package/src/components/EntityView.tsx +84 -0
  200. package/src/components/ErrorView.tsx +4 -4
  201. package/src/components/FieldCaption.tsx +14 -0
  202. package/src/components/HomePage/DefaultHomePage.tsx +39 -28
  203. package/src/components/HomePage/FavouritesView.tsx +6 -11
  204. package/src/components/HomePage/NavigationCard.tsx +69 -0
  205. package/src/components/HomePage/NavigationCardBinding.tsx +111 -0
  206. package/src/components/HomePage/NavigationGroup.tsx +2 -2
  207. package/src/components/HomePage/SmallNavigationCard.tsx +44 -0
  208. package/src/components/HomePage/index.tsx +3 -1
  209. package/src/components/NotFoundPage.tsx +2 -2
  210. package/src/components/PropertyConfigBadge.tsx +9 -3
  211. package/src/components/PropertyIdCopyTooltip.tsx +47 -0
  212. package/src/components/ReferenceTable/ReferenceSelectionTable.tsx +22 -17
  213. package/src/components/ReferenceWidget.tsx +26 -16
  214. package/src/components/SearchIconsView.tsx +10 -7
  215. package/src/components/SelectableTable/SelectableTable.tsx +27 -12
  216. package/src/components/SelectableTable/filters/BooleanFilterField.tsx +2 -3
  217. package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +25 -8
  218. package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +46 -30
  219. package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +92 -23
  220. package/src/components/UnsavedChangesDialog.tsx +42 -0
  221. package/src/components/VirtualTable/VirtualTable.tsx +96 -48
  222. package/src/components/VirtualTable/VirtualTableCell.tsx +1 -9
  223. package/src/components/VirtualTable/VirtualTableHeader.tsx +10 -10
  224. package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +2 -2
  225. package/src/components/VirtualTable/VirtualTableProps.tsx +34 -15
  226. package/src/components/VirtualTable/VirtualTableRow.tsx +5 -6
  227. package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +5 -5
  228. package/src/components/VirtualTable/fields/VirtualTableInput.tsx +3 -2
  229. package/src/components/VirtualTable/fields/VirtualTableNumberInput.tsx +2 -1
  230. package/src/components/VirtualTable/fields/VirtualTableSelect.tsx +16 -28
  231. package/src/components/VirtualTable/types.tsx +2 -3
  232. package/src/components/{EntityCollectionTable/internal → common}/default_entity_actions.tsx +40 -43
  233. package/src/components/common/index.ts +2 -1
  234. package/src/components/{VirtualTable/common.tsx → common/table_height.tsx} +5 -2
  235. package/src/components/common/types.tsx +4 -6
  236. package/src/components/common/useColumnsIds.tsx +24 -3
  237. package/src/components/common/useDataSourceTableController.tsx +420 -0
  238. package/src/components/common/useDebouncedCallback.tsx +20 -0
  239. package/src/components/common/useScrollRestoration.tsx +68 -0
  240. package/src/components/common/useTableSearchHelper.ts +53 -12
  241. package/src/components/index.tsx +8 -5
  242. package/src/contexts/AuthControllerContext.tsx +1 -1
  243. package/src/contexts/BreacrumbsContext.tsx +38 -0
  244. package/src/contexts/DialogsProvider.tsx +5 -4
  245. package/src/contexts/ModeController.tsx +1 -3
  246. package/src/contexts/SnackbarProvider.tsx +2 -0
  247. package/src/core/DefaultAppBar.tsx +207 -0
  248. package/src/core/DefaultDrawer.tsx +185 -0
  249. package/src/core/DrawerNavigationItem.tsx +66 -0
  250. package/src/core/EntityEditView.tsx +455 -0
  251. package/src/core/EntityEditViewFormActions.tsx +199 -0
  252. package/src/core/EntitySidePanel.tsx +87 -18
  253. package/src/core/FireCMS.tsx +67 -44
  254. package/src/core/FireCMSRouter.tsx +17 -0
  255. package/src/core/NavigationRoutes.tsx +36 -38
  256. package/src/core/SideDialogs.tsx +22 -12
  257. package/src/core/field_configs.tsx +11 -12
  258. package/src/core/index.tsx +6 -7
  259. package/src/form/EntityForm.tsx +565 -519
  260. package/src/form/EntityFormActions.tsx +169 -0
  261. package/src/form/PropertyFieldBinding.tsx +85 -44
  262. package/src/form/components/CustomIdField.tsx +6 -2
  263. package/src/form/components/FieldHelperText.tsx +4 -4
  264. package/src/form/components/FormEntry.tsx +22 -0
  265. package/src/form/components/FormLayout.tsx +16 -0
  266. package/src/form/components/LabelWithIcon.tsx +44 -0
  267. package/src/form/components/LabelWithIconAndTooltip.tsx +28 -0
  268. package/src/form/components/StorageItemPreview.tsx +23 -11
  269. package/src/form/components/StorageUploadProgress.tsx +9 -9
  270. package/src/form/components/index.tsx +4 -1
  271. package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +32 -21
  272. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +54 -45
  273. package/src/form/field_bindings/BlockFieldBinding.tsx +57 -36
  274. package/src/form/field_bindings/DateTimeFieldBinding.tsx +21 -17
  275. package/src/form/field_bindings/KeyValueFieldBinding.tsx +76 -67
  276. package/src/form/field_bindings/MapFieldBinding.tsx +82 -65
  277. package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +153 -0
  278. package/src/form/field_bindings/{MultiSelectBinding.tsx → MultiSelectFieldBinding.tsx} +26 -22
  279. package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +12 -17
  280. package/src/form/field_bindings/ReferenceFieldBinding.tsx +47 -34
  281. package/src/form/field_bindings/RepeatFieldBinding.tsx +57 -36
  282. package/src/form/field_bindings/SelectFieldBinding.tsx +24 -17
  283. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +47 -46
  284. package/src/form/field_bindings/SwitchFieldBinding.tsx +31 -27
  285. package/src/form/field_bindings/TextFieldBinding.tsx +35 -30
  286. package/src/form/index.tsx +17 -37
  287. package/src/form/useClearRestoreValue.tsx +2 -2
  288. package/src/form/validation.ts +15 -26
  289. package/src/hooks/data/delete.ts +7 -6
  290. package/src/hooks/data/save.ts +13 -9
  291. package/src/hooks/data/useCollectionFetch.tsx +4 -4
  292. package/src/hooks/data/useDataSource.tsx +15 -2
  293. package/src/hooks/data/useEntityFetch.tsx +11 -7
  294. package/src/hooks/index.tsx +6 -1
  295. package/src/hooks/useAuthController.tsx +1 -1
  296. package/src/hooks/useBreadcrumbsController.tsx +31 -0
  297. package/src/{core → hooks}/useBuildLocalConfigurationPersistence.tsx +8 -10
  298. package/src/{core → hooks}/useBuildModeController.tsx +23 -30
  299. package/src/hooks/useBuildNavigationController.tsx +278 -117
  300. package/src/hooks/useFireCMSContext.tsx +5 -5
  301. package/src/hooks/useLargeLayout.tsx +0 -35
  302. package/src/hooks/useModeController.tsx +1 -2
  303. package/src/hooks/useProjectLog.tsx +41 -9
  304. package/src/hooks/useReferenceDialog.tsx +2 -2
  305. package/src/hooks/useResolvedNavigationFrom.tsx +10 -12
  306. package/src/hooks/useStorageSource.tsx +7 -2
  307. package/src/hooks/useValidateAuthenticator.tsx +115 -0
  308. package/src/index.ts +1 -0
  309. package/src/internal/useBuildDataSource.ts +72 -77
  310. package/src/internal/useBuildSideDialogsController.tsx +4 -2
  311. package/src/internal/useBuildSideEntityController.tsx +177 -70
  312. package/src/internal/useUnsavedChangesDialog.tsx +127 -91
  313. package/src/preview/PropertyPreview.tsx +19 -26
  314. package/src/preview/PropertyPreviewProps.tsx +5 -9
  315. package/src/preview/components/BooleanPreview.tsx +19 -4
  316. package/src/preview/components/EmptyValue.tsx +1 -1
  317. package/src/preview/components/EnumValuesChip.tsx +2 -2
  318. package/src/preview/components/ImagePreview.tsx +25 -36
  319. package/src/preview/components/ReferencePreview.tsx +73 -176
  320. package/src/preview/components/StorageThumbnail.tsx +5 -1
  321. package/src/preview/components/UrlComponentPreview.tsx +60 -28
  322. package/src/preview/property_previews/ArrayOfMapsPreview.tsx +2 -3
  323. package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +4 -3
  324. package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +2 -3
  325. package/src/preview/property_previews/ArrayOfStringsPreview.tsx +1 -2
  326. package/src/preview/property_previews/ArrayOneOfPreview.tsx +4 -5
  327. package/src/preview/property_previews/ArrayPropertyPreview.tsx +4 -5
  328. package/src/preview/property_previews/MapPropertyPreview.tsx +12 -11
  329. package/src/preview/property_previews/SkeletonPropertyComponent.tsx +12 -12
  330. package/src/preview/property_previews/StringPropertyPreview.tsx +8 -7
  331. package/src/preview/util.ts +10 -10
  332. package/src/routes/CustomCMSRoute.tsx +21 -0
  333. package/src/routes/FireCMSRoute.tsx +236 -0
  334. package/src/routes/HomePageRoute.tsx +17 -0
  335. package/src/types/analytics.ts +1 -0
  336. package/src/types/auth.tsx +48 -3
  337. package/src/types/collections.ts +102 -27
  338. package/src/types/customization_controller.tsx +0 -1
  339. package/src/types/datasource.ts +62 -44
  340. package/src/types/dialogs_controller.tsx +7 -3
  341. package/src/types/entities.ts +16 -2
  342. package/src/types/entity_actions.tsx +33 -4
  343. package/src/types/entity_callbacks.ts +18 -18
  344. package/src/types/entity_overrides.tsx +7 -0
  345. package/src/types/export_import.ts +4 -4
  346. package/src/types/fields.tsx +81 -46
  347. package/src/types/firecms.tsx +6 -2
  348. package/src/types/firecms_context.tsx +1 -1
  349. package/src/types/index.ts +2 -1
  350. package/src/types/navigation.ts +52 -31
  351. package/src/types/permissions.ts +10 -5
  352. package/src/types/plugins.tsx +47 -39
  353. package/src/types/properties.ts +63 -27
  354. package/src/types/property_config.tsx +2 -4
  355. package/src/types/roles.ts +41 -0
  356. package/src/types/side_dialogs_controller.tsx +15 -0
  357. package/src/types/side_entity_controller.tsx +7 -1
  358. package/src/types/storage.ts +94 -3
  359. package/src/types/user.ts +9 -0
  360. package/src/util/builders.ts +10 -8
  361. package/src/util/collections.ts +22 -0
  362. package/src/util/entities.ts +9 -6
  363. package/src/util/entity_actions.ts +28 -0
  364. package/src/util/entity_cache.ts +204 -0
  365. package/src/util/enums.ts +1 -1
  366. package/src/util/icon_list.ts +16 -10
  367. package/src/util/icon_synonyms.ts +3 -100
  368. package/src/util/icons.tsx +26 -8
  369. package/src/util/index.ts +2 -0
  370. package/src/util/join_collections.ts +3 -0
  371. package/src/util/make_properties_editable.ts +13 -5
  372. package/src/util/navigation_from_path.ts +13 -6
  373. package/src/util/navigation_utils.ts +59 -7
  374. package/src/util/objects.ts +45 -28
  375. package/src/util/parent_references_from_path.ts +3 -3
  376. package/src/util/permissions.ts +20 -16
  377. package/src/util/plurals.ts +0 -2
  378. package/src/util/property_utils.tsx +11 -4
  379. package/src/util/references.ts +45 -5
  380. package/src/util/resolutions.ts +79 -46
  381. package/src/util/storage.ts +79 -21
  382. package/src/util/strings.ts +2 -2
  383. package/src/util/useStorageUploadController.tsx +71 -27
  384. package/src/util/useTraceUpdate.tsx +2 -1
  385. package/dist/components/PropertyIdCopyTooltipContent.d.ts +0 -3
  386. package/dist/components/VirtualTable/common.d.ts +0 -2
  387. package/dist/core/Drawer.d.ts +0 -23
  388. package/dist/core/Scaffold.d.ts +0 -55
  389. package/dist/form/components/FormikArrayContainer.d.ts +0 -18
  390. package/dist/form/field_bindings/MarkdownFieldBinding.d.ts +0 -9
  391. package/dist/internal/EntityView.d.ts +0 -22
  392. package/dist/internal/useBuildCustomizationController.d.ts +0 -2
  393. package/dist/internal/useLocaleConfig.d.ts +0 -1
  394. package/dist/types/appcheck.d.ts +0 -26
  395. package/src/components/FireCMSAppBar.tsx +0 -157
  396. package/src/components/HomePage/NavigationCollectionCard.tsx +0 -146
  397. package/src/components/LabelWithIcon.tsx +0 -33
  398. package/src/components/PropertyIdCopyTooltipContent.tsx +0 -28
  399. package/src/components/common/useDataSourceEntityCollectionTableController.tsx +0 -225
  400. package/src/core/Drawer.tsx +0 -164
  401. package/src/core/Scaffold.tsx +0 -281
  402. package/src/form/components/FormikArrayContainer.tsx +0 -44
  403. package/src/form/field_bindings/MarkdownFieldBinding.tsx +0 -696
  404. package/src/internal/EntityView.tsx +0 -578
  405. package/src/internal/useBuildCustomizationController.tsx +0 -5
  406. package/src/internal/useLocaleConfig.tsx +0 -18
  407. package/src/types/appcheck.ts +0 -29
  408. /package/dist/{core → hooks}/useBuildLocalConfigurationPersistence.d.ts +0 -0
  409. /package/src/util/{common.tsx → common.ts} +0 -0
@@ -0,0 +1,153 @@
1
+ import React, { useCallback, useEffect, useRef, useState } from "react";
2
+ import {
3
+ FieldHelperText,
4
+ FieldProps,
5
+ getIconForProperty,
6
+ LabelWithIconAndTooltip,
7
+ PropertyOrBuilder,
8
+ randomString,
9
+ ResolvedArrayProperty,
10
+ ResolvedStringProperty,
11
+ useStorageSource
12
+ } from "../../index";
13
+ import { cls, fieldBackgroundDisabledMixin, fieldBackgroundHoverMixin, fieldBackgroundMixin } from "@firecms/ui";
14
+ import { FireCMSEditor, FireCMSEditorProps } from "@firecms/editor";
15
+ import { resolveProperty, resolveStorageFilenameString, resolveStoragePathString } from "../../util";
16
+
17
+ interface MarkdownEditorFieldProps {
18
+ highlight?: { from: number, to: number };
19
+ editorProps?: Partial<FireCMSEditorProps>
20
+ }
21
+
22
+ export function MarkdownEditorFieldBinding({
23
+ property,
24
+ propertyKey,
25
+ value,
26
+ setValue,
27
+ includeDescription,
28
+ showError,
29
+ error,
30
+ minimalistView,
31
+ disabled: disabledProp,
32
+ isSubmitting,
33
+ context,
34
+ customProps,
35
+ }: FieldProps<string, MarkdownEditorFieldProps>) {
36
+
37
+ const disabled = disabledProp || isSubmitting;
38
+ const highlight = customProps?.highlight;
39
+ const editorProps = customProps?.editorProps;
40
+ const storageSource = useStorageSource();
41
+ const storage = property.storage;
42
+
43
+ const entityValues = context.values;
44
+ const entityId = context.entityId;
45
+ const path = context.path;
46
+
47
+ // const fieldVersion = useRef(0);
48
+ const [fieldVersion, setFieldVersion] = useState(0);
49
+ const internalValue = useRef(value);
50
+
51
+ const onContentChange = useCallback((content: string) => {
52
+ internalValue.current = content;
53
+ setValue(content);
54
+ }, [setValue]);
55
+
56
+ useEffect(() => {
57
+ if (internalValue.current !== value) {
58
+ internalValue.current = value;
59
+ setFieldVersion(fieldVersion + 1);
60
+ }
61
+ }, [value]);
62
+
63
+ const resolvedProperty = resolveProperty({
64
+ propertyOrBuilder: property as PropertyOrBuilder,
65
+ values: entityValues
66
+ }) as ResolvedStringProperty | ResolvedArrayProperty<string[]>;
67
+
68
+ const fileNameBuilder = useCallback(async (file: File) => {
69
+ if (storage?.fileName) {
70
+ const fileName = await resolveStorageFilenameString({
71
+ input: storage.fileName,
72
+ storage,
73
+ values: entityValues,
74
+ entityId,
75
+ path,
76
+ property: resolvedProperty,
77
+ file,
78
+ propertyKey
79
+ });
80
+ if (!fileName || fileName.length === 0) {
81
+ throw Error("You need to return a valid filename");
82
+ }
83
+ return fileName;
84
+ }
85
+ return randomString() + "_" + file.name;
86
+ }, [entityId, entityValues, path, resolvedProperty, propertyKey, storage]);
87
+
88
+ const storagePathBuilder = useCallback((file: File) => {
89
+ if (!storage) return "/";
90
+ const resolvedProperty = resolveProperty({
91
+ propertyOrBuilder: property,
92
+ values: entityValues
93
+ }) as ResolvedStringProperty | ResolvedArrayProperty<string[]>;
94
+ return resolveStoragePathString({
95
+ input: storage.storagePath,
96
+ storage,
97
+ values: entityValues,
98
+ entityId,
99
+ path,
100
+ property: resolvedProperty,
101
+ file,
102
+ propertyKey
103
+ }) ?? "/";
104
+ }, [entityId, entityValues, path, property, propertyKey, storage]);
105
+
106
+ const editor = <FireCMSEditor
107
+ content={value}
108
+ onMarkdownContentChange={onContentChange}
109
+ version={context.formex.version + fieldVersion}
110
+ highlight={highlight}
111
+ disabled={disabled}
112
+ handleImageUpload={async (file: File) => {
113
+ const storagePath = storagePathBuilder(file);
114
+ const fileName = await fileNameBuilder(file);
115
+ const result = await storageSource.uploadFile({
116
+ file,
117
+ fileName,
118
+ path: storagePath,
119
+ });
120
+ const downloadConfig = await storageSource.getDownloadURL(result.path);
121
+ const url = downloadConfig.url;
122
+ if (!url) {
123
+ throw new Error("Error uploading image");
124
+ }
125
+ return url;
126
+ }}
127
+ {...editorProps}
128
+ />;
129
+
130
+ if (minimalistView)
131
+ return editor;
132
+
133
+ return (
134
+ <>
135
+ <LabelWithIconAndTooltip
136
+ propertyKey={propertyKey}
137
+ icon={getIconForProperty(property, "small")}
138
+ required={property.validation?.required}
139
+ title={property.name}
140
+ className={"h-8 text-text-secondary dark:text-text-secondary-dark ml-3.5"}/>
141
+ <div
142
+ className={cls("rounded-md", fieldBackgroundMixin, disabled ? fieldBackgroundDisabledMixin : fieldBackgroundHoverMixin)}>
143
+ {editor}
144
+ </div>
145
+ <FieldHelperText includeDescription={includeDescription}
146
+ showError={showError}
147
+ error={error}
148
+ property={property}/>
149
+ </>
150
+
151
+ );
152
+
153
+ }
@@ -1,12 +1,11 @@
1
1
  import React, { useCallback } from "react";
2
2
 
3
3
  import { EnumType, FieldProps, ResolvedProperty } from "../../types";
4
- import { FieldHelperText } from "../components";
5
- import { LabelWithIcon } from "../../components";
6
- import { useClearRestoreValue } from "../../hooks";
4
+ import { FieldHelperText, LabelWithIconAndTooltip } from "../components";
7
5
  import { EnumValuesChip } from "../../preview";
8
6
  import { enumToObjectEntries, getIconForProperty, getLabelOrConfigFrom } from "../../util";
9
7
  import { CloseIcon, MultiSelect, MultiSelectItem } from "@firecms/ui";
8
+ import { useClearRestoreValue } from "../useClearRestoreValue";
10
9
 
11
10
  /**
12
11
  * This fields renders a dropdown with multiple selection.
@@ -15,17 +14,18 @@ import { CloseIcon, MultiSelect, MultiSelectItem } from "@firecms/ui";
15
14
  * and tables to the specified properties.
16
15
  * @group Form fields
17
16
  */
18
- export function MultiSelectBinding({
19
- propertyKey,
20
- value,
21
- setValue,
22
- error,
23
- showError,
24
- disabled,
25
- property,
26
- includeDescription,
27
- autoFocus
28
- }: FieldProps<EnumType[], any, any>) {
17
+ export function MultiSelectFieldBinding({
18
+ propertyKey,
19
+ value,
20
+ setValue,
21
+ error,
22
+ showError,
23
+ disabled,
24
+ property,
25
+ includeDescription,
26
+ size = "medium",
27
+ autoFocus
28
+ }: FieldProps<EnumType[], any, any>) {
29
29
 
30
30
  const of: ResolvedProperty<any> | ResolvedProperty<any>[] = property.of;
31
31
  if (!of) {
@@ -80,16 +80,20 @@ export function MultiSelectBinding({
80
80
  }, [enumValues, setValue, value]);
81
81
 
82
82
  return (
83
- <div className="mt-0.5 ml-0.5 mt-2">
83
+ <>
84
84
  <MultiSelect
85
+ className={"w-full mt-2"}
86
+ size={size === "medium" ? "medium" : "small"}
85
87
  value={validValue ? value.map((v) => v.toString()) : []}
86
88
  disabled={disabled}
87
- label={<LabelWithIcon icon={getIconForProperty(property, "small")}
88
- required={property.validation?.required}
89
- title={property.name}
90
- className={"text-text-secondary dark:text-text-secondary-dark ml-3.5"}/>}
91
- renderValue={useCallback((v: string) => renderValue(v, false), [renderValue])}
92
- onMultiValueChange={(updatedValue: string[]) => {
89
+ modalPopover={true}
90
+ label={<LabelWithIconAndTooltip
91
+ propertyKey={propertyKey}
92
+ icon={getIconForProperty(property, "small")}
93
+ required={property.validation?.required}
94
+ title={property.name}
95
+ className={"h-8 text-text-secondary dark:text-text-secondary-dark ml-3.5"}/>}
96
+ onValueChange={(updatedValue: string[]) => {
93
97
  let newValue: EnumType[] | null;
94
98
  if (of && (of as ResolvedProperty)?.dataType === "number") {
95
99
  newValue = updatedValue ? (updatedValue as string[]).map((e) => parseFloat(e)) : [];
@@ -110,6 +114,6 @@ export function MultiSelectBinding({
110
114
  disabled={disabled}
111
115
  property={property}/>
112
116
 
113
- </div>
117
+ </>
114
118
  );
115
119
  }
@@ -1,12 +1,12 @@
1
1
  import React from "react";
2
2
 
3
- import { Entity, FieldProps } from "../../types";
3
+ import { FieldProps } from "../../types";
4
4
 
5
5
  import { PropertyPreview } from "../../preview";
6
- import { FieldHelperText } from "../components";
7
- import { ErrorBoundary, LabelWithIcon } from "../../components";
6
+ import { FieldHelperText, LabelWithIconAndTooltip } from "../components";
7
+ import { ErrorBoundary } from "../../components";
8
8
  import { getIconForProperty } from "../../util";
9
- import { cn, paperMixin } from "@firecms/ui";
9
+ import { cls, paperMixin } from "@firecms/ui";
10
10
 
11
11
  /**
12
12
  *
@@ -21,7 +21,7 @@ export function ReadOnlyFieldBinding({
21
21
  value,
22
22
  error,
23
23
  showError,
24
- tableMode,
24
+ minimalistView,
25
25
  property,
26
26
  includeDescription,
27
27
  context
@@ -30,30 +30,25 @@ export function ReadOnlyFieldBinding({
30
30
  if (!context.entityId)
31
31
  throw new Error("ReadOnlyFieldBinding: Entity id is null");
32
32
 
33
- const entity: Entity<any> = {
34
- id: context.entityId!,
35
- values: context.values,
36
- path: context.path
37
- };
38
-
39
33
  return (
40
34
 
41
35
  <>
42
36
 
43
- {!tableMode && <LabelWithIcon icon={getIconForProperty(property, "small")}
44
- required={property.validation?.required}
45
- title={property.name}
46
- className={"text-text-secondary dark:text-text-secondary-dark ml-3.5"}/>
37
+ {!minimalistView && <LabelWithIconAndTooltip
38
+ propertyKey={propertyKey}
39
+ icon={getIconForProperty(property, "small")}
40
+ required={property.validation?.required}
41
+ title={property.name}
42
+ className={"h-8 text-text-secondary dark:text-text-secondary-dark ml-3.5"}/>
47
43
  }
48
44
 
49
45
  <div
50
- className={cn(paperMixin, "min-h-14 p-4 md:p-6 overflow-x-scroll no-scrollbar")}>
46
+ className={cls(paperMixin, "w-full min-h-14 p-4 md:p-6 overflow-x-scroll no-scrollbar")}>
51
47
 
52
48
  <ErrorBoundary>
53
49
  <PropertyPreview propertyKey={propertyKey}
54
50
  value={value}
55
51
  property={property}
56
- // entity={entity}
57
52
  size={"medium"}/>
58
53
  </ErrorBoundary>
59
54
 
@@ -1,13 +1,15 @@
1
1
  import React, { useCallback, useMemo } from "react";
2
2
 
3
3
  import { Entity, EntityCollection, EntityReference, FieldProps } from "../../types";
4
- import { useClearRestoreValue, useNavigationController, useReferenceDialog } from "../../hooks";
4
+ import { useNavigationController, useReferenceDialog } from "../../hooks";
5
5
  import { ReadOnlyFieldBinding } from "./ReadOnlyFieldBinding";
6
- import { FieldHelperText } from "../components";
7
- import { ErrorView, LabelWithIcon } from "../../components";
8
- import { ReferencePreview } from "../../preview";
9
- import { getIconForProperty, getReferenceFrom } from "../../util";
10
- import { Button } from "@firecms/ui";
6
+ import { FieldHelperText, LabelWithIconAndTooltip } from "../components";
7
+ import { ErrorView } from "../../components";
8
+ import { EmptyValue, ReferencePreview } from "../../preview";
9
+ import { getIconForProperty, getReferenceFrom, IconForView } from "../../util";
10
+ import { useClearRestoreValue } from "../useClearRestoreValue";
11
+ import { EntityPreviewContainer } from "../../components/EntityPreview";
12
+ import { cls } from "@firecms/ui";
11
13
 
12
14
  /**
13
15
  * Field that opens a reference selection dialog.
@@ -16,7 +18,7 @@ import { Button } from "@firecms/ui";
16
18
  * and tables to the specified properties.
17
19
  * @group Form fields
18
20
  */
19
- export function ReferenceFieldBinding<M extends Record<string, any>>(props: FieldProps<EntityReference>) {
21
+ export function ReferenceFieldBinding(props: FieldProps) {
20
22
 
21
23
  if (typeof props.property.path !== "string") {
22
24
  return <ReadOnlyFieldBinding {...props}/>
@@ -26,19 +28,21 @@ export function ReferenceFieldBinding<M extends Record<string, any>>(props: Fiel
26
28
 
27
29
  }
28
30
 
29
- function ReferenceFieldBindingInternal<M extends Record<string, any>>({
30
- value,
31
- setValue,
32
- error,
33
- showError,
34
- isSubmitting,
35
- disabled,
36
- touched,
37
- autoFocus,
38
- property,
39
- includeDescription,
40
- context
41
- }: FieldProps<EntityReference>) {
31
+ function ReferenceFieldBindingInternal({
32
+ propertyKey,
33
+ value,
34
+ setValue,
35
+ error,
36
+ showError,
37
+ isSubmitting,
38
+ disabled,
39
+ minimalistView,
40
+ touched,
41
+ autoFocus,
42
+ property,
43
+ includeDescription,
44
+ size = "medium"
45
+ }: FieldProps<EntityReference>) {
42
46
  if (!property.path) {
43
47
  throw new Error("Property path is required for ReferenceFieldBinding");
44
48
  }
@@ -49,7 +53,7 @@ function ReferenceFieldBindingInternal<M extends Record<string, any>>({
49
53
  setValue
50
54
  });
51
55
 
52
- const validValue = value && value instanceof EntityReference;
56
+ const validValue = value && value.isEntityReference && value.isEntityReference();
53
57
 
54
58
  const navigationController = useNavigationController();
55
59
  const collection: EntityCollection | undefined = useMemo(() => {
@@ -74,17 +78,19 @@ function ReferenceFieldBindingInternal<M extends Record<string, any>>({
74
78
  }
75
79
  );
76
80
 
77
- const onEntryClick = useCallback((e: React.SyntheticEvent) => {
81
+ const onEntryClick = (e: React.SyntheticEvent) => {
78
82
  e.preventDefault();
79
83
  referenceDialogController.open();
80
- }, [referenceDialogController]);
84
+ };
81
85
 
82
86
  return (
83
87
  <>
84
- <LabelWithIcon icon={getIconForProperty(property, "small")}
85
- required={property.validation?.required}
86
- title={property.name}
87
- className={"text-text-secondary dark:text-text-secondary-dark ml-3.5"}/>
88
+ {!minimalistView && <LabelWithIconAndTooltip
89
+ propertyKey={propertyKey}
90
+ icon={getIconForProperty(property, "small")}
91
+ required={property.validation?.required}
92
+ title={property.name}
93
+ className={"h-8 text-text-secondary dark:text-text-secondary-dark ml-3.5"}/>}
88
94
 
89
95
  {!collection && <ErrorView
90
96
  error={"The specified collection does not exist. Check console"}/>}
@@ -94,18 +100,25 @@ function ReferenceFieldBindingInternal<M extends Record<string, any>>({
94
100
  {value && <ReferencePreview
95
101
  disabled={!property.path}
96
102
  previewProperties={property.previewProperties}
97
- size={"medium"}
103
+ hover={!disabled}
104
+ size={size}
98
105
  onClick={disabled || isSubmitting ? undefined : onEntryClick}
99
106
  reference={value}
107
+ includeEntityLink={property.includeEntityLink}
108
+ includeId={property.includeId}
100
109
  />}
101
110
 
102
111
  {!value && <div className="justify-center text-left">
103
- <Button variant="outlined"
104
- color="primary"
105
- disabled={disabled || isSubmitting}
106
- onClick={onEntryClick}>
107
- Edit {property.name}
108
- </Button>
112
+ <EntityPreviewContainer className={cls("px-6 h-16 text-sm font-medium flex items-center gap-6",
113
+ disabled || isSubmitting
114
+ ? "text-surface-accent-500"
115
+ : "cursor-pointer text-surface-accent-700 dark:text-surface-accent-300 hover:bg-surface-accent-50 dark:hover:bg-surface-800 group-hover:bg-surface-accent-50 dark:group-hover:bg-surface-800")}
116
+ onClick={onEntryClick}
117
+ size={"medium"}>
118
+ <IconForView collectionOrView={collection}
119
+ className={"text-surface-300 dark:text-surface-600"}/>
120
+ {`Edit ${property.name}`.toUpperCase()}
121
+ </EntityPreviewContainer>
109
122
  </div>}
110
123
  </>}
111
124
 
@@ -1,11 +1,11 @@
1
1
  import React, { useState } from "react";
2
- import { CMSType, FieldProps, ResolvedProperty } from "../../types";
3
- import { FieldHelperText, FormikArrayContainer } from "../components";
4
- import { ErrorBoundary, LabelWithIcon } from "../../components";
5
- import { useClearRestoreValue } from "../../hooks";
6
- import { getIconForProperty } from "../../util";
2
+ import { CMSType, FieldProps, PropertyFieldBindingProps, ResolvedProperty } from "../../types";
3
+ import { FieldHelperText, LabelWithIconAndTooltip } from "../components";
4
+ import { ArrayContainer, ArrayEntryParams, ErrorBoundary } from "../../components";
5
+ import { getArrayResolvedProperties, getDefaultValueFor, getIconForProperty, mergeDeep } from "../../util";
7
6
  import { PropertyFieldBinding } from "../PropertyFieldBinding";
8
- import { ExpandablePanel } from "@firecms/ui";
7
+ import { ExpandablePanel, Typography } from "@firecms/ui";
8
+ import { useClearRestoreValue } from "../useClearRestoreValue";
9
9
 
10
10
  /**
11
11
  * Generic array field that allows reordering and renders the child property
@@ -23,7 +23,7 @@ export function RepeatFieldBinding<T extends Array<any>>({
23
23
  isSubmitting,
24
24
  setValue,
25
25
  setFieldValue,
26
- tableMode,
26
+ minimalistView: minimalistViewProp,
27
27
  property,
28
28
  includeDescription,
29
29
  underlyingValueHasChanged,
@@ -31,11 +31,20 @@ export function RepeatFieldBinding<T extends Array<any>>({
31
31
  disabled
32
32
  }: FieldProps<T>) {
33
33
 
34
+ const minimalistView = minimalistViewProp || property.minimalistView;
35
+
34
36
  if (!property.of)
35
37
  throw Error("RepeatFieldBinding misconfiguration. Property `of` not set");
36
38
 
37
- if (!property.resolvedProperties || !Array.isArray(property.resolvedProperties))
38
- throw Error("RepeatFieldBinding - Internal error: Expected array in 'property.resolvedProperties'");
39
+ let resolvedProperties = "resolvedProperties" in property ? property.resolvedProperties : undefined;
40
+ if (!resolvedProperties) {
41
+ resolvedProperties = getArrayResolvedProperties({
42
+ propertyValue: value,
43
+ propertyKey,
44
+ property,
45
+ ignoreMissingFields: false
46
+ })
47
+ }
39
48
 
40
49
  const expanded = property.expanded === undefined ? true : property.expanded;
41
50
  const ofProperty: ResolvedProperty<CMSType[]> = property.of as ResolvedProperty<CMSType[]>;
@@ -48,55 +57,67 @@ export function RepeatFieldBinding<T extends Array<any>>({
48
57
  setValue
49
58
  });
50
59
 
51
- const buildEntry = (index: number, internalId: number) => {
52
- const childProperty = property.resolvedProperties[index] ?? ofProperty;
53
- const fieldProps = {
60
+ const buildEntry = ({
61
+ index,
62
+ internalId,
63
+ storedProps,
64
+ storeProps
65
+ }: ArrayEntryParams) => {
66
+ const childProperty = resolvedProperties[index] ?? ofProperty;
67
+ const fieldProps: PropertyFieldBindingProps<any, any> = {
54
68
  propertyKey: `${propertyKey}.${index}`,
55
69
  disabled,
56
- property: childProperty,
70
+ property: storedProps ? mergeDeep(childProperty, storedProps) : childProperty,
71
+ onPropertyChange: storeProps,
57
72
  includeDescription,
58
73
  underlyingValueHasChanged,
59
74
  context,
60
- tableMode: false,
61
75
  partOfArray: true,
62
- partOfBlock: false,
63
- autoFocus: internalId === lastAddedId
76
+ minimalistView: false,
77
+ autoFocus: internalId === lastAddedId,
64
78
  };
65
79
  return <ErrorBoundary>
66
- <PropertyFieldBinding {...fieldProps}/>
80
+ <PropertyFieldBinding {...fieldProps} index={index}/>
67
81
  </ErrorBoundary>;
68
82
  };
69
83
 
70
- const arrayContainer = <FormikArrayContainer value={value}
71
- addLabel={property.name ? "Add entry to " + property.name : "Add entry"}
72
- name={propertyKey}
73
- setFieldValue={setFieldValue}
74
- buildEntry={buildEntry}
75
- onInternalIdAdded={setLastAddedId}
76
- disabled={isSubmitting || Boolean(property.disabled)}
77
- includeAddButton={!property.disabled}
78
- newDefaultEntry={property.of.defaultValue}/>;
79
-
80
- const title = (<LabelWithIcon icon={getIconForProperty(property, "small")}
81
- required={property.validation?.required}
82
- title={property.name}
83
- className={"text-text-secondary dark:text-text-secondary-dark"}/>);
84
+ const arrayContainer = <ArrayContainer droppableId={propertyKey}
85
+ addLabel={property.name ? "Add entry to " + property.name : "Add entry"}
86
+ value={value}
87
+ buildEntry={buildEntry}
88
+ onInternalIdAdded={setLastAddedId}
89
+ disabled={isSubmitting || Boolean(property.disabled)}
90
+ includeAddButton={!property.disabled}
91
+ newDefaultEntry={getDefaultValueFor(property.of)}
92
+ onValueChange={(value) => setFieldValue(propertyKey, value)}
93
+ className={property.widthPercentage !== undefined ? "mt-8" : undefined}
94
+ />;
95
+
96
+ const title = (<>
97
+ <LabelWithIconAndTooltip
98
+ propertyKey={propertyKey}
99
+ icon={getIconForProperty(property, "small")}
100
+ required={property.validation?.required}
101
+ title={property.name}
102
+ className={"h-8 flex flex-grow text-text-secondary dark:text-text-secondary-dark"}/>
103
+ {Array.isArray(value) && <Typography variant={"caption"} className={"px-4"}>({value.length})</Typography>}
104
+ </>);
84
105
 
85
106
  return (
86
107
 
87
108
  <>
88
109
 
89
- {!tableMode && <ExpandablePanel initiallyExpanded={expanded}
90
- className={"px-2 md:px-4 pb-2 md:pb-4 pt-1 md:pt-2"}
91
- title={title}>
110
+ {!minimalistView && <ExpandablePanel initiallyExpanded={expanded}
111
+ innerClassName={"px-2 md:px-4 pb-2 md:pb-4 pt-1 md:pt-2"}
112
+ title={title}>
92
113
  {arrayContainer}
93
114
  </ExpandablePanel>}
94
115
 
95
- {tableMode && arrayContainer}
116
+ {minimalistView && arrayContainer}
96
117
 
97
118
  <FieldHelperText includeDescription={includeDescription}
98
119
  showError={showError}
99
- error={error}
120
+ error={error ? (typeof error === "string" ? error : "A property of this array/repeat has an error") : undefined}
100
121
  disabled={disabled}
101
122
  property={property}/>
102
123