@firecms/core 3.0.0-canary.18 → 3.0.0-canary.180

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 (366) hide show
  1. package/README.md +3 -3
  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 +2 -2
  13. package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +22 -6
  14. package/dist/components/EntityCollectionTable/PropertyTableCell.d.ts +1 -0
  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 +16 -2
  22. package/dist/components/EntityCollectionView/EntityCollectionViewStartActions.d.ts +11 -0
  23. package/dist/components/EntityCollectionView/utils.d.ts +3 -0
  24. package/dist/components/EntityPreview.d.ts +5 -4
  25. package/dist/components/ErrorView.d.ts +1 -1
  26. package/dist/components/HomePage/DefaultHomePage.d.ts +1 -1
  27. package/dist/components/HomePage/NavigationCardBinding.d.ts +1 -1
  28. package/dist/components/PropertyConfigBadge.d.ts +2 -1
  29. package/dist/components/PropertyIdCopyTooltip.d.ts +8 -0
  30. package/dist/components/ReferenceWidget.d.ts +3 -1
  31. package/dist/components/SelectableTable/SelectableTable.d.ts +13 -3
  32. package/dist/components/SelectableTable/filters/ReferenceFilterField.d.ts +2 -1
  33. package/dist/components/UnsavedChangesDialog.d.ts +8 -0
  34. package/dist/components/VirtualTable/VirtualTableProps.d.ts +28 -12
  35. package/dist/components/VirtualTable/types.d.ts +3 -3
  36. package/dist/components/{EntityCollectionTable/internal → common}/default_entity_actions.d.ts +1 -3
  37. package/dist/components/common/index.d.ts +2 -1
  38. package/dist/components/common/table_height.d.ts +5 -0
  39. package/dist/components/common/types.d.ts +4 -6
  40. package/dist/components/common/useColumnsIds.d.ts +3 -1
  41. package/dist/components/common/{useDataSourceEntityCollectionTableController.d.ts → useDataSourceTableController.d.ts} +13 -2
  42. package/dist/components/common/useDebouncedCallback.d.ts +1 -0
  43. package/dist/components/common/useScrollRestoration.d.ts +14 -0
  44. package/dist/components/index.d.ts +4 -2
  45. package/dist/contexts/BreacrumbsContext.d.ts +8 -0
  46. package/dist/{components/FireCMSAppBar.d.ts → core/DefaultAppBar.d.ts} +6 -9
  47. package/dist/core/DefaultDrawer.d.ts +19 -0
  48. package/dist/core/DrawerNavigationItem.d.ts +10 -0
  49. package/dist/core/EntityEditView.d.ts +41 -9
  50. package/dist/core/FireCMS.d.ts +2 -2
  51. package/dist/core/FireCMSRouter.d.ts +4 -0
  52. package/dist/core/NavigationRoutes.d.ts +2 -3
  53. package/dist/core/index.d.ts +4 -4
  54. package/dist/form/PropertyFieldBinding.d.ts +1 -1
  55. package/dist/form/components/ErrorFocus.d.ts +1 -1
  56. package/dist/form/components/FieldHelperText.d.ts +3 -3
  57. package/dist/form/components/LabelWithIcon.d.ts +1 -1
  58. package/dist/form/components/LabelWithIconAndTooltip.d.ts +15 -0
  59. package/dist/form/components/StorageItemPreview.d.ts +4 -4
  60. package/dist/form/components/index.d.ts +1 -1
  61. package/dist/form/field_bindings/ArrayCustomShapedFieldBinding.d.ts +1 -1
  62. package/dist/form/field_bindings/ArrayOfReferencesFieldBinding.d.ts +1 -1
  63. package/dist/form/field_bindings/BlockFieldBinding.d.ts +1 -1
  64. package/dist/form/field_bindings/KeyValueFieldBinding.d.ts +1 -1
  65. package/dist/form/field_bindings/MapFieldBinding.d.ts +1 -1
  66. package/dist/form/field_bindings/MarkdownEditorFieldBinding.d.ts +11 -0
  67. package/dist/form/field_bindings/{MultiSelectBinding.d.ts → MultiSelectFieldBinding.d.ts} +1 -1
  68. package/dist/form/field_bindings/ReadOnlyFieldBinding.d.ts +1 -1
  69. package/dist/form/field_bindings/ReferenceFieldBinding.d.ts +2 -2
  70. package/dist/form/field_bindings/RepeatFieldBinding.d.ts +1 -1
  71. package/dist/form/field_bindings/SelectFieldBinding.d.ts +1 -1
  72. package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +3 -5
  73. package/dist/form/field_bindings/SwitchFieldBinding.d.ts +1 -2
  74. package/dist/form/field_bindings/TextFieldBinding.d.ts +1 -1
  75. package/dist/form/index.d.ts +3 -5
  76. package/dist/form/useClearRestoreValue.d.ts +2 -2
  77. package/dist/hooks/data/delete.d.ts +4 -4
  78. package/dist/hooks/data/save.d.ts +4 -5
  79. package/dist/hooks/data/useCollectionFetch.d.ts +1 -1
  80. package/dist/hooks/data/useEntityFetch.d.ts +4 -3
  81. package/dist/hooks/index.d.ts +1 -0
  82. package/dist/hooks/useAuthController.d.ts +1 -1
  83. package/dist/hooks/useBreadcrumbsController.d.ts +26 -0
  84. package/dist/hooks/useBuildNavigationController.d.ts +3 -5
  85. package/dist/hooks/useFireCMSContext.d.ts +1 -1
  86. package/dist/hooks/useProjectLog.d.ts +8 -2
  87. package/dist/hooks/useResolvedNavigationFrom.d.ts +3 -3
  88. package/dist/hooks/useValidateAuthenticator.d.ts +4 -8
  89. package/dist/index.d.ts +1 -0
  90. package/dist/index.es.js +21537 -14243
  91. package/dist/index.es.js.map +1 -1
  92. package/dist/index.umd.js +23973 -588
  93. package/dist/index.umd.js.map +1 -1
  94. package/dist/internal/useBuildDataSource.d.ts +1 -16
  95. package/dist/internal/useUnsavedChangesDialog.d.ts +7 -9
  96. package/dist/preview/PropertyPreviewProps.d.ts +6 -1
  97. package/dist/preview/components/EnumValuesChip.d.ts +1 -1
  98. package/dist/preview/components/ReferencePreview.d.ts +3 -2
  99. package/dist/preview/components/StorageThumbnail.d.ts +2 -1
  100. package/dist/preview/components/UrlComponentPreview.d.ts +2 -1
  101. package/dist/preview/util.d.ts +3 -3
  102. package/dist/routes/CustomCMSRoute.d.ts +4 -0
  103. package/dist/routes/FireCMSRoute.d.ts +1 -0
  104. package/dist/routes/HomePageRoute.d.ts +3 -0
  105. package/dist/types/auth.d.ts +8 -10
  106. package/dist/types/collections.d.ts +71 -22
  107. package/dist/types/datasource.d.ts +52 -36
  108. package/dist/types/dialogs_controller.d.ts +7 -3
  109. package/dist/types/entities.d.ts +7 -2
  110. package/dist/types/entity_actions.d.ts +28 -4
  111. package/dist/types/entity_callbacks.d.ts +16 -16
  112. package/dist/types/entity_overrides.d.ts +2 -2
  113. package/dist/types/export_import.d.ts +4 -4
  114. package/dist/types/fields.d.ts +66 -42
  115. package/dist/types/firecms.d.ts +6 -2
  116. package/dist/types/firecms_context.d.ts +1 -1
  117. package/dist/types/index.d.ts +0 -1
  118. package/dist/types/navigation.d.ts +31 -14
  119. package/dist/types/permissions.d.ts +4 -4
  120. package/dist/types/plugins.d.ts +23 -12
  121. package/dist/types/properties.d.ts +51 -23
  122. package/dist/types/property_config.d.ts +0 -2
  123. package/dist/types/side_dialogs_controller.d.ts +10 -0
  124. package/dist/types/side_entity_controller.d.ts +1 -1
  125. package/dist/types/storage.d.ts +86 -3
  126. package/dist/types/user.d.ts +1 -0
  127. package/dist/util/builders.d.ts +3 -3
  128. package/dist/util/entities.d.ts +3 -3
  129. package/dist/util/entity_actions.d.ts +2 -0
  130. package/dist/util/entity_cache.d.ts +23 -0
  131. package/dist/util/icon_list.d.ts +5 -1
  132. package/dist/util/icon_synonyms.d.ts +1 -98
  133. package/dist/util/icons.d.ts +6 -3
  134. package/dist/util/index.d.ts +2 -0
  135. package/dist/util/navigation_from_path.d.ts +5 -1
  136. package/dist/util/navigation_utils.d.ts +14 -3
  137. package/dist/util/objects.d.ts +2 -1
  138. package/dist/util/permissions.d.ts +4 -4
  139. package/dist/util/plurals.d.ts +0 -2
  140. package/dist/util/property_utils.d.ts +3 -3
  141. package/dist/util/resolutions.d.ts +30 -16
  142. package/dist/util/storage.d.ts +23 -2
  143. package/dist/util/useStorageUploadController.d.ts +3 -3
  144. package/package.json +61 -48
  145. package/src/app/AppBar.tsx +18 -0
  146. package/src/app/Drawer.tsx +24 -0
  147. package/src/app/Scaffold.tsx +243 -0
  148. package/src/app/index.ts +4 -0
  149. package/src/app/useApp.tsx +32 -0
  150. package/src/components/ArrayContainer.tsx +126 -40
  151. package/src/components/CircularProgressCenter.tsx +2 -2
  152. package/src/components/ClearFilterSortButton.tsx +41 -0
  153. package/src/components/{DeleteConfirmationDialog.tsx → ConfirmationDialog.tsx} +3 -3
  154. package/src/components/DeleteEntityDialog.tsx +10 -19
  155. package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +54 -37
  156. package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +38 -31
  157. package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +30 -9
  158. package/src/components/EntityCollectionTable/PropertyTableCell.tsx +47 -39
  159. package/src/components/EntityCollectionTable/column_utils.tsx +3 -3
  160. package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +30 -16
  161. package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +19 -17
  162. package/src/components/EntityCollectionTable/index.tsx +1 -1
  163. package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +31 -36
  164. package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +36 -34
  165. package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +20 -8
  166. package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +84 -77
  167. package/src/components/EntityCollectionView/EntityCollectionView.tsx +206 -112
  168. package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +4 -2
  169. package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +68 -0
  170. package/src/components/EntityCollectionView/useSelectionController.tsx +20 -7
  171. package/src/components/EntityCollectionView/utils.ts +19 -0
  172. package/src/components/EntityPreview.tsx +62 -52
  173. package/src/components/EntityView.tsx +10 -10
  174. package/src/components/ErrorView.tsx +4 -4
  175. package/src/components/HomePage/DefaultHomePage.tsx +26 -19
  176. package/src/components/HomePage/FavouritesView.tsx +6 -11
  177. package/src/components/HomePage/NavigationCard.tsx +3 -3
  178. package/src/components/HomePage/NavigationCardBinding.tsx +5 -10
  179. package/src/components/HomePage/NavigationGroup.tsx +2 -2
  180. package/src/components/HomePage/SmallNavigationCard.tsx +5 -6
  181. package/src/components/NotFoundPage.tsx +2 -2
  182. package/src/components/PropertyConfigBadge.tsx +9 -3
  183. package/src/components/PropertyIdCopyTooltip.tsx +47 -0
  184. package/src/components/ReferenceTable/ReferenceSelectionTable.tsx +19 -13
  185. package/src/components/ReferenceWidget.tsx +21 -11
  186. package/src/components/SearchIconsView.tsx +10 -7
  187. package/src/components/SelectableTable/SelectableTable.tsx +27 -12
  188. package/src/components/SelectableTable/filters/BooleanFilterField.tsx +2 -3
  189. package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +25 -8
  190. package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +36 -12
  191. package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +92 -23
  192. package/src/components/UnsavedChangesDialog.tsx +42 -0
  193. package/src/components/VirtualTable/VirtualTable.tsx +96 -48
  194. package/src/components/VirtualTable/VirtualTableCell.tsx +1 -9
  195. package/src/components/VirtualTable/VirtualTableHeader.tsx +10 -10
  196. package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +2 -2
  197. package/src/components/VirtualTable/VirtualTableProps.tsx +33 -14
  198. package/src/components/VirtualTable/VirtualTableRow.tsx +5 -6
  199. package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +5 -5
  200. package/src/components/VirtualTable/fields/VirtualTableInput.tsx +3 -2
  201. package/src/components/VirtualTable/fields/VirtualTableNumberInput.tsx +2 -1
  202. package/src/components/VirtualTable/fields/VirtualTableSelect.tsx +16 -28
  203. package/src/components/VirtualTable/types.tsx +2 -3
  204. package/src/components/{EntityCollectionTable/internal → common}/default_entity_actions.tsx +33 -40
  205. package/src/components/common/index.ts +2 -1
  206. package/src/components/{VirtualTable/common.tsx → common/table_height.tsx} +5 -2
  207. package/src/components/common/types.tsx +4 -6
  208. package/src/components/common/useColumnsIds.tsx +24 -3
  209. package/src/components/common/useDataSourceTableController.tsx +420 -0
  210. package/src/components/common/useDebouncedCallback.tsx +20 -0
  211. package/src/components/common/useScrollRestoration.tsx +68 -0
  212. package/src/components/common/useTableSearchHelper.ts +53 -12
  213. package/src/components/index.tsx +4 -2
  214. package/src/contexts/BreacrumbsContext.tsx +38 -0
  215. package/src/contexts/DialogsProvider.tsx +5 -4
  216. package/src/contexts/SnackbarProvider.tsx +2 -0
  217. package/src/core/DefaultAppBar.tsx +201 -0
  218. package/src/core/DefaultDrawer.tsx +185 -0
  219. package/src/core/DrawerNavigationItem.tsx +66 -0
  220. package/src/core/EntityEditView.tsx +1001 -213
  221. package/src/core/EntitySidePanel.tsx +80 -17
  222. package/src/core/FireCMS.tsx +56 -49
  223. package/src/core/FireCMSRouter.tsx +17 -0
  224. package/src/core/NavigationRoutes.tsx +20 -34
  225. package/src/core/SideDialogs.tsx +12 -6
  226. package/src/core/field_configs.tsx +11 -12
  227. package/src/core/index.tsx +6 -5
  228. package/src/form/PropertyFieldBinding.tsx +85 -44
  229. package/src/form/components/CustomIdField.tsx +6 -2
  230. package/src/form/components/FieldHelperText.tsx +4 -4
  231. package/src/form/components/LabelWithIcon.tsx +30 -19
  232. package/src/form/components/LabelWithIconAndTooltip.tsx +28 -0
  233. package/src/form/components/StorageItemPreview.tsx +22 -12
  234. package/src/form/components/StorageUploadProgress.tsx +3 -4
  235. package/src/form/components/index.tsx +1 -1
  236. package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +31 -17
  237. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +47 -35
  238. package/src/form/field_bindings/BlockFieldBinding.tsx +56 -34
  239. package/src/form/field_bindings/DateTimeFieldBinding.tsx +18 -14
  240. package/src/form/field_bindings/KeyValueFieldBinding.tsx +60 -51
  241. package/src/form/field_bindings/MapFieldBinding.tsx +72 -53
  242. package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +150 -0
  243. package/src/form/field_bindings/{MultiSelectBinding.tsx → MultiSelectFieldBinding.tsx} +25 -20
  244. package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +11 -16
  245. package/src/form/field_bindings/ReferenceFieldBinding.tsx +42 -31
  246. package/src/form/field_bindings/RepeatFieldBinding.tsx +56 -35
  247. package/src/form/field_bindings/SelectFieldBinding.tsx +22 -14
  248. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +37 -47
  249. package/src/form/field_bindings/SwitchFieldBinding.tsx +29 -24
  250. package/src/form/field_bindings/TextFieldBinding.tsx +28 -24
  251. package/src/form/index.tsx +4 -9
  252. package/src/form/useClearRestoreValue.tsx +2 -2
  253. package/src/form/validation.ts +1 -17
  254. package/src/hooks/data/delete.ts +6 -5
  255. package/src/hooks/data/save.ts +13 -9
  256. package/src/hooks/data/useCollectionFetch.tsx +3 -3
  257. package/src/hooks/data/useDataSource.tsx +11 -3
  258. package/src/hooks/data/useEntityFetch.tsx +10 -6
  259. package/src/hooks/index.tsx +1 -0
  260. package/src/hooks/useAuthController.tsx +1 -1
  261. package/src/hooks/useBreadcrumbsController.tsx +31 -0
  262. package/src/hooks/useBuildLocalConfigurationPersistence.tsx +8 -10
  263. package/src/hooks/useBuildModeController.tsx +11 -5
  264. package/src/hooks/useBuildNavigationController.tsx +150 -50
  265. package/src/hooks/useFireCMSContext.tsx +5 -5
  266. package/src/hooks/useLargeLayout.tsx +0 -35
  267. package/src/hooks/useProjectLog.tsx +32 -10
  268. package/src/hooks/useResolvedNavigationFrom.tsx +10 -12
  269. package/src/hooks/useValidateAuthenticator.tsx +17 -37
  270. package/src/index.ts +1 -0
  271. package/src/internal/useBuildDataSource.ts +72 -82
  272. package/src/internal/useBuildSideDialogsController.tsx +4 -2
  273. package/src/internal/useBuildSideEntityController.tsx +230 -70
  274. package/src/internal/useUnsavedChangesDialog.tsx +127 -91
  275. package/src/preview/PropertyPreview.tsx +13 -20
  276. package/src/preview/PropertyPreviewProps.tsx +7 -1
  277. package/src/preview/components/BooleanPreview.tsx +2 -2
  278. package/src/preview/components/EmptyValue.tsx +1 -1
  279. package/src/preview/components/EnumValuesChip.tsx +2 -2
  280. package/src/preview/components/ImagePreview.tsx +25 -36
  281. package/src/preview/components/ReferencePreview.tsx +22 -33
  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 +2 -3
  285. package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +4 -3
  286. package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +2 -3
  287. package/src/preview/property_previews/ArrayOfStringsPreview.tsx +1 -2
  288. package/src/preview/property_previews/ArrayOneOfPreview.tsx +4 -5
  289. package/src/preview/property_previews/ArrayPropertyPreview.tsx +4 -5
  290. package/src/preview/property_previews/MapPropertyPreview.tsx +9 -9
  291. package/src/preview/property_previews/SkeletonPropertyComponent.tsx +12 -12
  292. package/src/preview/property_previews/StringPropertyPreview.tsx +3 -3
  293. package/src/preview/util.ts +10 -10
  294. package/src/routes/CustomCMSRoute.tsx +21 -0
  295. package/src/routes/FireCMSRoute.tsx +230 -0
  296. package/src/routes/HomePageRoute.tsx +17 -0
  297. package/src/types/auth.tsx +9 -13
  298. package/src/types/collections.ts +87 -27
  299. package/src/types/customization_controller.tsx +0 -1
  300. package/src/types/datasource.ts +61 -43
  301. package/src/types/dialogs_controller.tsx +7 -3
  302. package/src/types/entities.ts +12 -2
  303. package/src/types/entity_actions.tsx +32 -7
  304. package/src/types/entity_callbacks.ts +18 -18
  305. package/src/types/entity_overrides.tsx +2 -2
  306. package/src/types/export_import.ts +4 -4
  307. package/src/types/fields.tsx +72 -46
  308. package/src/types/firecms.tsx +7 -2
  309. package/src/types/firecms_context.tsx +1 -1
  310. package/src/types/index.ts +0 -1
  311. package/src/types/navigation.ts +37 -18
  312. package/src/types/permissions.ts +5 -5
  313. package/src/types/plugins.tsx +25 -14
  314. package/src/types/properties.ts +59 -24
  315. package/src/types/property_config.tsx +0 -2
  316. package/src/types/side_dialogs_controller.tsx +13 -0
  317. package/src/types/side_entity_controller.tsx +1 -1
  318. package/src/types/storage.ts +94 -3
  319. package/src/types/user.ts +2 -0
  320. package/src/util/builders.ts +10 -8
  321. package/src/util/entities.ts +9 -6
  322. package/src/util/entity_actions.ts +28 -0
  323. package/src/util/entity_cache.ts +196 -0
  324. package/src/util/enums.ts +1 -1
  325. package/src/util/icon_list.ts +16 -10
  326. package/src/util/icon_synonyms.ts +3 -100
  327. package/src/util/icons.tsx +17 -7
  328. package/src/util/index.ts +2 -0
  329. package/src/util/join_collections.ts +3 -0
  330. package/src/util/make_properties_editable.ts +13 -5
  331. package/src/util/navigation_from_path.ts +10 -2
  332. package/src/util/navigation_utils.ts +59 -7
  333. package/src/util/objects.ts +45 -28
  334. package/src/util/parent_references_from_path.ts +3 -3
  335. package/src/util/permissions.ts +9 -8
  336. package/src/util/plurals.ts +0 -2
  337. package/src/util/property_utils.tsx +11 -4
  338. package/src/util/references.ts +11 -2
  339. package/src/util/resolutions.ts +79 -46
  340. package/src/util/storage.ts +79 -21
  341. package/src/util/strings.ts +2 -2
  342. package/src/util/useStorageUploadController.tsx +34 -8
  343. package/dist/components/PropertyIdCopyTooltipContent.d.ts +0 -3
  344. package/dist/components/VirtualTable/common.d.ts +0 -2
  345. package/dist/core/Drawer.d.ts +0 -23
  346. package/dist/core/Scaffold.d.ts +0 -55
  347. package/dist/core/SideEntityView.d.ts +0 -7
  348. package/dist/form/EntityForm.d.ts +0 -77
  349. package/dist/form/components/FormikArrayContainer.d.ts +0 -18
  350. package/dist/form/field_bindings/MarkdownFieldBinding.d.ts +0 -9
  351. package/dist/internal/useBuildCustomizationController.d.ts +0 -2
  352. package/dist/internal/useLocaleConfig.d.ts +0 -1
  353. package/dist/types/appcheck.d.ts +0 -26
  354. package/src/components/FireCMSAppBar.tsx +0 -165
  355. package/src/components/PropertyIdCopyTooltipContent.tsx +0 -28
  356. package/src/components/common/useDataSourceEntityCollectionTableController.tsx +0 -225
  357. package/src/core/Drawer.tsx +0 -191
  358. package/src/core/Scaffold.tsx +0 -281
  359. package/src/core/SideEntityView.tsx +0 -38
  360. package/src/form/EntityForm.tsx +0 -728
  361. package/src/form/components/FormikArrayContainer.tsx +0 -44
  362. package/src/form/field_bindings/MarkdownFieldBinding.tsx +0 -695
  363. package/src/internal/useBuildCustomizationController.tsx +0 -5
  364. package/src/internal/useLocaleConfig.tsx +0 -18
  365. package/src/types/appcheck.ts +0 -29
  366. /package/src/util/{common.tsx → common.ts} +0 -0
@@ -5,13 +5,13 @@ import { Field, FieldProps as FormexFieldProps, getIn } from "@firecms/formex";
5
5
 
6
6
  import {
7
7
  CMSType,
8
- EntityCollection,
9
8
  FieldProps,
10
9
  FireCMSPlugin,
11
10
  PluginFieldBuilderParams,
12
11
  Property,
13
12
  PropertyFieldBindingProps,
14
13
  PropertyOrBuilder,
14
+ ResolvedEntityCollection,
15
15
  ResolvedProperty
16
16
  } from "../types";
17
17
  import { ReadOnlyFieldBinding } from "./field_bindings/ReadOnlyFieldBinding";
@@ -51,6 +51,13 @@ export const PropertyFieldBinding = React.memo(PropertyFieldBindingInternal, (a:
51
51
  if (a.propertyKey !== b.propertyKey) {
52
52
  return false;
53
53
  }
54
+ if (a.index !== b.index) {
55
+ return false;
56
+ }
57
+
58
+ if (a.size !== b.size) {
59
+ return false;
60
+ }
54
61
  const aIsBuilder = isPropertyBuilder(a.property) || a.property.fromBuilder;
55
62
  const bIsBuilder = isPropertyBuilder(b.property) || b.property.fromBuilder;
56
63
 
@@ -67,24 +74,27 @@ export const PropertyFieldBinding = React.memo(PropertyFieldBindingInternal, (a:
67
74
  return false;
68
75
  }) as typeof PropertyFieldBindingInternal;
69
76
 
70
- function PropertyFieldBindingInternal<T extends CMSType = CMSType, M extends Record<string, any> = Record<string, any>>
77
+ function PropertyFieldBindingInternal<T extends CMSType = CMSType, M extends Record<string, any> = any>
71
78
  ({
72
79
  propertyKey,
73
80
  property,
74
81
  context,
75
82
  includeDescription,
76
83
  underlyingValueHasChanged,
77
- disabled,
78
- tableMode,
84
+ disabled: disabledProp,
79
85
  partOfArray,
80
- partOfBlock,
86
+ minimalistView,
81
87
  autoFocus,
88
+ index,
89
+ size,
90
+ onPropertyChange
82
91
  }: PropertyFieldBindingProps<T, M>): ReactElement<PropertyFieldBindingProps<T, M>> {
83
92
 
84
93
  const customizationController = useCustomizationController();
85
94
 
86
95
  return (
87
96
  <Field
97
+ key={propertyKey}
88
98
  name={propertyKey}
89
99
  >
90
100
  {(fieldProps) => {
@@ -92,14 +102,16 @@ function PropertyFieldBindingInternal<T extends CMSType = CMSType, M extends Rec
92
102
  let Component: ComponentType<FieldProps<T>> | undefined;
93
103
  const resolvedProperty: ResolvedProperty<T> | null = resolveProperty({
94
104
  propertyKey,
95
- propertyValue: fieldProps.field.value,
96
105
  propertyOrBuilder: property,
97
106
  values: fieldProps.form.values,
98
107
  path: context.path,
99
108
  entityId: context.entityId,
100
- fields: customizationController.propertyConfigs
109
+ propertyConfigs: customizationController.propertyConfigs,
110
+ index
101
111
  });
102
112
 
113
+ const disabled = disabledProp || isReadOnly(resolvedProperty) || Boolean(resolvedProperty?.disabled);
114
+
103
115
  if (resolvedProperty === null || isHidden(resolvedProperty)) {
104
116
  return <></>;
105
117
  } else if (isReadOnly(resolvedProperty)) {
@@ -111,16 +123,23 @@ function PropertyFieldBindingInternal<T extends CMSType = CMSType, M extends Rec
111
123
  } else {
112
124
  const propertyConfig = getFieldConfig(resolvedProperty, customizationController.propertyConfigs);
113
125
  if (!propertyConfig) {
114
- console.log("INTERNAL: Could not find field config for property", { propertyKey, resolvedProperty, fields: customizationController.propertyConfigs, propertyConfig });
126
+ console.log("INTERNAL: Could not find field config for property", {
127
+ propertyKey,
128
+ property,
129
+ resolvedProperty,
130
+ fields: customizationController.propertyConfigs,
131
+ propertyConfig
132
+ });
115
133
  throw new Error(`INTERNAL: Could not find field config for property ${propertyKey}`);
116
134
  }
117
135
  const configProperty = resolveProperty({
136
+ propertyKey,
118
137
  propertyOrBuilder: propertyConfig.property,
119
- propertyValue: fieldProps.field.value,
120
138
  values: fieldProps.form.values,
121
139
  path: context.path,
122
140
  entityId: context.entityId,
123
- fields: customizationController.propertyConfigs
141
+ propertyConfigs: customizationController.propertyConfigs,
142
+ index
124
143
  });
125
144
  Component = configProperty.Field as ComponentType<FieldProps<T>>;
126
145
  }
@@ -128,7 +147,9 @@ function PropertyFieldBindingInternal<T extends CMSType = CMSType, M extends Rec
128
147
  console.warn(`No field component found for property ${propertyKey}`);
129
148
  console.warn("Property:", property);
130
149
  return (
131
- <div>{`Currently the field ${resolvedProperty.dataType} is not supported`}</div>
150
+ <div className={"w-full"}>
151
+ {`Currently the field ${resolvedProperty.dataType} is not supported`}
152
+ </div>
132
153
  );
133
154
  }
134
155
 
@@ -139,23 +160,24 @@ function PropertyFieldBindingInternal<T extends CMSType = CMSType, M extends Rec
139
160
  underlyingValueHasChanged,
140
161
  context,
141
162
  disabled,
142
- tableMode,
143
163
  partOfArray,
144
- partOfBlock,
145
- autoFocus
164
+ minimalistView,
165
+ autoFocus,
166
+ size,
167
+ onPropertyChange
146
168
  };
147
169
 
148
170
  return <FieldInternal
149
171
  Component={Component as ComponentType<FieldProps>}
150
172
  componentProps={componentProps}
151
- fieldProps={fieldProps}/>;
173
+ formexFieldProps={fieldProps}/>;
152
174
  }}
153
175
  </Field>
154
176
  );
155
177
 
156
178
  }
157
179
 
158
- type ResolvedPropertyFieldBindingProps<T extends CMSType = CMSType, M extends Record<string, any> = Record<string, any>> =
180
+ type ResolvedPropertyFieldBindingProps<T extends CMSType = CMSType, M extends Record<string, any> = any> =
159
181
  Omit<PropertyFieldBindingProps<T, M>, "property">
160
182
  & {
161
183
  property: ResolvedProperty<T>
@@ -169,52 +191,59 @@ function FieldInternal<T extends CMSType, CustomProps, M extends Record<string,
169
191
  property,
170
192
  includeDescription,
171
193
  underlyingValueHasChanged,
172
- tableMode,
173
194
  partOfArray,
174
- partOfBlock,
195
+ minimalistView,
175
196
  autoFocus,
176
197
  context,
177
- disabled
198
+ disabled,
199
+ size,
200
+ onPropertyChange
178
201
  },
179
- fieldProps
202
+ formexFieldProps
180
203
  }:
181
- {
182
- Component: ComponentType<FieldProps<T, any, M>>,
183
- componentProps: ResolvedPropertyFieldBindingProps<T, M>,
184
- fieldProps: FormexFieldProps<T, any>
185
- }) {
204
+ {
205
+ Component: ComponentType<FieldProps<T, any, M>>,
206
+ componentProps: ResolvedPropertyFieldBindingProps<T, M>,
207
+ formexFieldProps: FormexFieldProps<T, any>
208
+ }) {
186
209
 
187
210
  const { plugins } = useCustomizationController();
188
211
 
189
212
  const customFieldProps: any = property.customProps;
190
- const value = fieldProps.field.value;
191
- // const initialValue = fieldProps.meta.initialValue;
192
- const error = getIn(fieldProps.form.errors, propertyKey);
193
- const touched = getIn(fieldProps.form.touched, propertyKey);
213
+ const value = formexFieldProps.field.value;
214
+ // const initialValue = formexFieldProps.meta.initialValue;
215
+ const error = getIn(formexFieldProps.form.errors, propertyKey);
216
+ const touched = getIn(formexFieldProps.form.touched, propertyKey);
194
217
 
195
218
  const showError: boolean = error &&
196
- (fieldProps.form.submitCount > 0 || property.validation?.unique) &&
219
+ (formexFieldProps.form.submitCount > 0 || property.validation?.unique) &&
197
220
  (!Array.isArray(error) || !!error.filter((e: any) => !!e).length);
198
221
 
199
- const WrappedComponent: ComponentType<FieldProps<T, any, M>> | null = useWrappedComponent(context.path, context.collection, propertyKey, property, Component, plugins);
222
+ const WrappedComponent: ComponentType<FieldProps<T, any, M>> | null = useWrappedComponent({
223
+ path: context.path,
224
+ collection: context.collection,
225
+ propertyKey: propertyKey,
226
+ property: property,
227
+ Component: Component,
228
+ plugins: plugins
229
+ });
200
230
  const UsedComponent: ComponentType<FieldProps<T>> = WrappedComponent ?? Component;
201
231
 
202
- const isSubmitting = fieldProps.form.isSubmitting;
232
+ const isSubmitting = formexFieldProps.form.isSubmitting;
203
233
 
204
234
  const setValue = useCallback((value: T | null, shouldValidate?: boolean) => {
205
- fieldProps.form.setFieldTouched(propertyKey, true, false);
206
- fieldProps.form.setFieldValue(propertyKey, value, shouldValidate);
235
+ formexFieldProps.form.setFieldTouched(propertyKey, true, false);
236
+ formexFieldProps.form.setFieldValue(propertyKey, value, shouldValidate);
207
237
  }, []);
208
238
 
209
239
  const setFieldValue = useCallback((otherPropertyKey: string, value: CMSType | null, shouldValidate?: boolean) => {
210
- fieldProps.form.setFieldTouched(propertyKey, true, false);
211
- fieldProps.form.setFieldValue(otherPropertyKey, value, shouldValidate);
240
+ formexFieldProps.form.setFieldTouched(propertyKey, true, false);
241
+ formexFieldProps.form.setFieldValue(otherPropertyKey, value, shouldValidate);
212
242
  }, []);
213
243
 
214
244
  const cmsFieldProps: FieldProps<T, CustomProps, M> = {
215
245
  propertyKey,
216
246
  value: value as T,
217
- // initialValue,
218
247
  setValue,
219
248
  setFieldValue,
220
249
  error,
@@ -225,12 +254,13 @@ function FieldInternal<T extends CMSType, CustomProps, M extends Record<string,
225
254
  property: property as ResolvedProperty<T>,
226
255
  disabled: disabled ?? false,
227
256
  underlyingValueHasChanged: underlyingValueHasChanged ?? false,
228
- tableMode: tableMode ?? false,
229
257
  partOfArray: partOfArray ?? false,
230
- partOfBlock: partOfBlock ?? false,
258
+ minimalistView: minimalistView ?? false,
231
259
  autoFocus: autoFocus ?? false,
232
260
  customProps: customFieldProps,
233
- context
261
+ context,
262
+ size,
263
+ onPropertyChange
234
264
  };
235
265
 
236
266
  return (
@@ -266,13 +296,24 @@ const shouldPropertyReRender = (property: PropertyOrBuilder | ResolvedProperty,
266
296
  }
267
297
  }
268
298
 
269
- function useWrappedComponent<T extends CMSType = CMSType, M extends Record<string, any> = any>(
270
- path: string,
271
- collection: EntityCollection<M>,
299
+ interface UseWrappedComponentParams<T extends CMSType = CMSType, M extends Record<string, any> = any> {
300
+ path?: string,
301
+ collection?: ResolvedEntityCollection<M>,
272
302
  propertyKey: string,
273
303
  property: ResolvedProperty<T>,
274
304
  Component: ComponentType<FieldProps<T, any, M>>,
275
305
  plugins?: FireCMSPlugin[]
306
+ }
307
+
308
+ function useWrappedComponent<T extends CMSType = CMSType, M extends Record<string, any> = any>(
309
+ {
310
+ path,
311
+ collection,
312
+ propertyKey,
313
+ property,
314
+ Component,
315
+ plugins
316
+ }: UseWrappedComponentParams<T, M>
276
317
  ): ComponentType<FieldProps<T, any, M>> | null {
277
318
 
278
319
  const wrapperRef = useRef<ComponentType<FieldProps<T, any, M>> | null>((() => {
@@ -288,7 +329,7 @@ function useWrappedComponent<T extends CMSType = CMSType, M extends Record<strin
288
329
  Field: Component,
289
330
  plugin,
290
331
  path,
291
- collection
332
+ collection,
292
333
  };
293
334
  const enabled = plugin.form?.fieldBuilderEnabled?.(params);
294
335
  if (enabled === undefined || enabled)
@@ -68,7 +68,8 @@ export function CustomIdField<M extends Record<string, any>>({
68
68
  ? (
69
69
  <>
70
70
 
71
- <Tooltip title={"Copy"}>
71
+ <Tooltip title={"Copy"}
72
+ asChild={true}>
72
73
  <IconButton onClick={(e) => copy(entity.id)}
73
74
  aria-label="copy-id">
74
75
  <ContentCopyIcon size={"small"}/>
@@ -76,7 +77,8 @@ export function CustomIdField<M extends Record<string, any>>({
76
77
  </Tooltip>
77
78
 
78
79
  {customizationController?.entityLinkBuilder &&
79
- <Tooltip title={"Open in the console"}>
80
+ <Tooltip title={"Open in the console"}
81
+ asChild={true}>
80
82
  <IconButton component={"a"}
81
83
  href={customizationController.entityLinkBuilder({ entity })}
82
84
  rel="noopener noreferrer"
@@ -98,7 +100,9 @@ export function CustomIdField<M extends Record<string, any>>({
98
100
 
99
101
  {enumValues &&
100
102
  <Select
103
+ size={"large"}
101
104
  error={error}
105
+ fullWidth={true}
102
106
  onValueChange={(v) => onChange(v as string)}
103
107
  {...fieldProps}
104
108
  renderValue={(option) => {
@@ -1,4 +1,4 @@
1
- import { ResolvedProperty } from "../../types";
1
+ import { Property, ResolvedProperty } from "../../types";
2
2
  import { IconButton, InfoIcon, Tooltip, Typography } from "@firecms/ui";
3
3
 
4
4
  /**
@@ -13,8 +13,8 @@ export function FieldHelperText({
13
13
  disabled
14
14
  }: {
15
15
  error?: string,
16
- showError: boolean,
17
- property: ResolvedProperty,
16
+ showError?: boolean,
17
+ property: ResolvedProperty | Property,
18
18
  includeDescription?: boolean,
19
19
  disabled?: boolean,
20
20
  }
@@ -44,7 +44,7 @@ export function FieldHelperText({
44
44
  {property.longDescription &&
45
45
  <Tooltip title={property.longDescription}
46
46
  side="bottom"
47
- >
47
+ asChild={true}>
48
48
  <IconButton
49
49
  size={"small"}
50
50
  className="self-start">
@@ -1,4 +1,5 @@
1
- import React from "react";
1
+ import React, { forwardRef } from "react";
2
+ import { cls } from "@firecms/ui";
2
3
 
3
4
  interface LabelWithIconProps {
4
5
  icon: React.ReactNode;
@@ -12,22 +13,32 @@ interface LabelWithIconProps {
12
13
  * Render the label of with an icon and the title of a property
13
14
  * @group Form custom fields
14
15
  */
15
- export function LabelWithIcon({
16
- icon,
17
- title,
18
- small,
19
- className,
20
- required
21
- }: LabelWithIconProps) {
22
- return (
23
- <span
24
- className={`inline-flex items-center my-0.5 ${small ? "gap-1" : "gap-2"} ${className ?? ""}`}>
25
-
26
- {icon}
27
-
28
- <span
29
- className={`text-start font-medium text-${small ? "base" : "sm"} origin-top-left transform ${small ? "translate-x-2 scale-75" : ""}`}>{(title ?? "") + (required ? " *" : "")}</span>
30
-
16
+ export const LabelWithIcon = forwardRef<HTMLDivElement, LabelWithIconProps>(
17
+ ({
18
+ icon,
19
+ title,
20
+ small,
21
+ className,
22
+ required
23
+ }, ref) => {
24
+ return (
25
+ <div
26
+ ref={ref}
27
+ className={cls("inline-flex items-center my-0.5",
28
+ small ? "gap-1" : "gap-2",
29
+ className)}
30
+ >
31
+ {icon}
32
+ <span
33
+ className={`text-start font-medium text-${small ? "base" : "sm"} origin-top-left transform ${
34
+ small ? "translate-x-2 scale-75" : ""
35
+ }`}
36
+ >
37
+ {(title ?? "") + (required ? " *" : "")}
31
38
  </span>
32
- );
33
- }
39
+ </div>
40
+ );
41
+ }
42
+ );
43
+
44
+ LabelWithIcon.displayName = "LabelWithIcon";
@@ -0,0 +1,28 @@
1
+ import React from "react";
2
+ import { LabelWithIcon } from "./LabelWithIcon";
3
+ import { PropertyIdCopyTooltip } from "../../components/PropertyIdCopyTooltip";
4
+
5
+ interface LabelWithIconAndTooltip {
6
+ icon: React.ReactNode;
7
+ title?: string;
8
+ small?: boolean;
9
+ className?: string;
10
+ required?: boolean;
11
+ propertyKey: string
12
+ }
13
+
14
+ /**
15
+ * Render the label of with an icon and the title of a property
16
+ * @group Form custom fields
17
+ */
18
+ export function LabelWithIconAndTooltip({
19
+ propertyKey,
20
+ className,
21
+ ...props
22
+ }: LabelWithIconAndTooltip) {
23
+ return (
24
+ <PropertyIdCopyTooltip propertyKey={propertyKey} className={className}>
25
+ <LabelWithIcon {...props}/>
26
+ </PropertyIdCopyTooltip>
27
+ );
28
+ }
@@ -1,43 +1,45 @@
1
1
  import React from "react";
2
2
 
3
- import { Entity, EntityCollection, ResolvedStringProperty } from "../../types";
3
+ import { ResolvedStringProperty } from "../../types";
4
4
  import { PreviewSize, PropertyPreview } from "../../preview";
5
5
 
6
- import { cn, IconButton, paperMixin, RemoveIcon, Tooltip } from "@firecms/ui";
6
+ import { cls, DescriptionIcon, IconButton, paperMixin, RemoveIcon, Tooltip } from "@firecms/ui";
7
7
  import { ErrorBoundary } from "../../components";
8
8
 
9
9
  interface StorageItemPreviewProps {
10
10
  name: string;
11
11
  property: ResolvedStringProperty;
12
12
  value: string,
13
- entity: Entity<any>,
14
13
  onRemove: (value: string) => void;
15
14
  size: PreviewSize;
16
15
  disabled: boolean;
17
- collection: EntityCollection;
16
+ placeholder?: boolean;
17
+ className?: string;
18
18
  }
19
19
 
20
20
  export function StorageItemPreview({
21
21
  name,
22
22
  property,
23
23
  value,
24
- entity,
25
24
  onRemove,
26
25
  disabled,
27
26
  size,
28
- collection
27
+ placeholder,
28
+ className
29
29
  }: StorageItemPreviewProps) {
30
30
 
31
31
  return (
32
- <div className={cn(paperMixin,
32
+ <div className={cls(paperMixin,
33
33
  "relative m-4 border-box flex items-center justify-center",
34
- size === "medium" ? "min-w-[220px] min-h-[220px] max-w-[220px]" : "min-w-[118px] min-h-[118px] max-w-[118px]")}>
34
+ size === "large" ? "min-w-[220px] min-h-[220px] max-w-[220px]" : "min-w-[118px] min-h-[118px] max-w-[118px]",
35
+ className)}>
35
36
 
36
- {!disabled &&
37
+ {!placeholder && !disabled &&
37
38
  <div
38
- className="absolute rounded-full -top-2 -right-2 z-10 bg-white dark:bg-gray-900">
39
+ className="absolute rounded-full -top-2 -right-2 z-10 bg-white dark:bg-surface-900">
39
40
 
40
41
  <Tooltip
42
+ asChild={true}
41
43
  title="Remove">
42
44
  <IconButton
43
45
  size={"small"}
@@ -51,16 +53,24 @@ export function StorageItemPreview({
51
53
  </div>
52
54
  }
53
55
 
54
- {value &&
56
+ {!placeholder && value &&
55
57
  <ErrorBoundary>
56
58
  <PropertyPreview propertyKey={name}
57
59
  value={value}
58
60
  property={property}
59
- // entity={entity}
61
+ interactive={false}
60
62
  size={size}/>
61
63
  </ErrorBoundary>
62
64
  }
63
65
 
66
+ {placeholder &&
67
+ <div
68
+ onClick={(e) => e.stopPropagation()}
69
+ className="flex flex-col items-center justify-center w-full h-full">
70
+ <DescriptionIcon className="text-surface-700 dark:text-surface-300"/>
71
+ </div>
72
+ }
73
+
64
74
 
65
75
  </div>
66
76
  );
@@ -3,8 +3,7 @@ import React, { useCallback } from "react";
3
3
  import { useSnackbarController, useStorageSource } from "../../hooks";
4
4
  import { StorageFieldItem } from "../../util/useStorageUploadController";
5
5
  import { ErrorView } from "../../components";
6
- import { cn, paperMixin, Skeleton } from "@firecms/ui";
7
- import { EntityCollection, StorageSource } from "../../types";
6
+ import { cls, paperMixin, Skeleton } from "@firecms/ui";
8
7
 
9
8
  export interface StorageUploadItemProps {
10
9
  storagePath: string;
@@ -49,7 +48,7 @@ export function StorageUploadProgress({
49
48
  metadata
50
49
  })
51
50
  .then(async ({ path }) => {
52
- console.debug("Upload successful");
51
+ console.debug("Upload successful", path);
53
52
  await onFileUploadComplete(path, entry, metadata);
54
53
  if (mounted.current)
55
54
  setLoading(false);
@@ -88,7 +87,7 @@ export function StorageUploadProgress({
88
87
  }
89
88
  return (
90
89
 
91
- <div className={cn(paperMixin,
90
+ <div className={cls(paperMixin,
92
91
  "relative m-4 border-box flex items-center justify-center",
93
92
  `min-w-[${imageSize}px] min-h-[${imageSize}px]`)}>
94
93
 
@@ -1,3 +1,3 @@
1
- export * from "./FormikArrayContainer";
2
1
  export * from "./FieldHelperText";
3
2
  export * from "./LabelWithIcon";
3
+ export * from "./LabelWithIconAndTooltip";
@@ -1,9 +1,9 @@
1
1
  import React from "react";
2
2
  import { FieldProps } from "../../types";
3
- import { FieldHelperText, LabelWithIcon } from "../components";
3
+ import { FieldHelperText, LabelWithIconAndTooltip } from "../components";
4
4
  import { PropertyFieldBinding } from "../PropertyFieldBinding";
5
- import { ExpandablePanel } from "@firecms/ui";
6
- import { getIconForProperty } from "../../util";
5
+ import { ExpandablePanel, Typography } from "@firecms/ui";
6
+ import { getArrayResolvedProperties, getIconForProperty, isReadOnly } from "../../util";
7
7
  import { useClearRestoreValue } from "../useClearRestoreValue";
8
8
 
9
9
  /**
@@ -20,7 +20,7 @@ export function ArrayCustomShapedFieldBinding<T extends Array<any>>({
20
20
  showError,
21
21
  isSubmitting,
22
22
  setValue,
23
- tableMode,
23
+ minimalistView: minimalistViewProp,
24
24
  property,
25
25
  includeDescription,
26
26
  underlyingValueHasChanged,
@@ -28,8 +28,17 @@ export function ArrayCustomShapedFieldBinding<T extends Array<any>>({
28
28
  disabled
29
29
  }: FieldProps<T, any, any>) {
30
30
 
31
- if (!Array.isArray(property.resolvedProperties))
32
- throw Error("ArrayCustomShapedFieldBinding misconfiguration. Property `of` not set");
31
+ const minimalistView = minimalistViewProp || property.minimalistView;
32
+
33
+ let resolvedProperties = "resolvedProperties" in property ? property.resolvedProperties : undefined;
34
+ if (!resolvedProperties) {
35
+ resolvedProperties = getArrayResolvedProperties({
36
+ propertyValue: value,
37
+ propertyKey,
38
+ property,
39
+ ignoreMissingFields: false
40
+ })
41
+ }
33
42
 
34
43
  const expanded = property.expanded === undefined ? true : property.expanded;
35
44
 
@@ -39,22 +48,27 @@ export function ArrayCustomShapedFieldBinding<T extends Array<any>>({
39
48
  setValue
40
49
  });
41
50
 
42
- const title = <LabelWithIcon icon={getIconForProperty(property, "small")}
43
- required={property.validation?.required}
44
- className={"text-text-secondary dark:text-text-secondary-dark"}
45
- title={property.name}/>;
51
+ const title = (<>
52
+ <LabelWithIconAndTooltip
53
+ propertyKey={propertyKey}
54
+ icon={getIconForProperty(property, "small")}
55
+ required={property.validation?.required}
56
+ title={property.name}
57
+ className={"h-8 flex-grow text-text-secondary dark:text-text-secondary-dark"}/>
58
+ {Array.isArray(value) && <Typography variant={"caption"} className={"px-4"}>({value.length})</Typography>}
59
+ </>);
46
60
 
47
- const body = property.resolvedProperties.map((childProperty, index) => {
61
+ const body = resolvedProperties.map((childProperty, index) => {
62
+ const thisDisabled = isReadOnly(childProperty) || Boolean(childProperty.disabled);
48
63
  const fieldProps = {
49
64
  propertyKey: `${propertyKey}[${index}]`,
50
- disabled,
65
+ disabled: disabled || thisDisabled,
51
66
  property: childProperty,
52
67
  includeDescription,
53
68
  underlyingValueHasChanged,
54
69
  context,
55
- tableMode: false,
56
70
  partOfArray: true,
57
- partOfBlock: false,
71
+ minimalistView: false,
58
72
  autoFocus: false
59
73
  };
60
74
  return <div key={`custom_shaped_array_${index}`} className="pb-4">
@@ -66,14 +80,14 @@ export function ArrayCustomShapedFieldBinding<T extends Array<any>>({
66
80
 
67
81
  <>
68
82
 
69
- {!tableMode &&
83
+ {!minimalistView &&
70
84
  <ExpandablePanel initiallyExpanded={expanded}
71
85
  title={title}
72
- className={"px-2 md:px-4 pb-2 md:pb-4 pt-1 md:pt-2"}>
86
+ innerClassName={"px-2 md:px-4 pb-2 md:pb-4 pt-1 md:pt-2"}>
73
87
  {body}
74
88
  </ExpandablePanel>}
75
89
 
76
- {tableMode && body}
90
+ {minimalistView && body}
77
91
 
78
92
  <FieldHelperText includeDescription={includeDescription}
79
93
  showError={showError}