@firecms/core 3.0.0-beta.1 → 3.0.0-beta.10

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