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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (409) hide show
  1. package/README.md +4 -4
  2. package/dist/app/AppBar.d.ts +12 -0
  3. package/dist/app/Drawer.d.ts +16 -0
  4. package/dist/app/Scaffold.d.ts +30 -0
  5. package/dist/app/index.d.ts +4 -0
  6. package/dist/app/useApp.d.ts +16 -0
  7. package/dist/components/ArrayContainer.d.ts +23 -6
  8. package/dist/components/CircularProgressCenter.d.ts +1 -1
  9. package/dist/components/ClearFilterSortButton.d.ts +5 -0
  10. package/dist/components/{DeleteConfirmationDialog.d.ts → ConfirmationDialog.d.ts} +1 -1
  11. package/dist/components/EntityCollectionTable/EntityCollectionRowActions.d.ts +13 -13
  12. package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +3 -3
  13. package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +22 -6
  14. package/dist/components/EntityCollectionTable/PropertyTableCell.d.ts +3 -2
  15. package/dist/components/EntityCollectionTable/column_utils.d.ts +1 -2
  16. package/dist/components/EntityCollectionTable/fields/TableReferenceField.d.ts +3 -1
  17. package/dist/components/EntityCollectionTable/index.d.ts +1 -1
  18. package/dist/components/EntityCollectionTable/internal/CollectionTableToolbar.d.ts +1 -4
  19. package/dist/components/EntityCollectionTable/internal/EntityTableCell.d.ts +2 -2
  20. package/dist/components/EntityCollectionTable/internal/popup_field/PopupFormField.d.ts +7 -4
  21. package/dist/components/EntityCollectionView/EntityCollectionView.d.ts +17 -4
  22. package/dist/components/EntityCollectionView/EntityCollectionViewStartActions.d.ts +11 -0
  23. package/dist/components/EntityCollectionView/useSelectionController.d.ts +2 -0
  24. package/dist/components/EntityCollectionView/utils.d.ts +3 -0
  25. package/dist/components/EntityPreview.d.ts +26 -7
  26. package/dist/components/EntityView.d.ts +11 -0
  27. package/dist/components/ErrorView.d.ts +1 -1
  28. package/dist/components/FieldCaption.d.ts +5 -0
  29. package/dist/components/HomePage/DefaultHomePage.d.ts +1 -1
  30. package/dist/components/HomePage/NavigationCard.d.ts +8 -0
  31. package/dist/components/HomePage/{NavigationCollectionCard.d.ts → NavigationCardBinding.d.ts} +3 -3
  32. package/dist/components/HomePage/SmallNavigationCard.d.ts +6 -0
  33. package/dist/components/HomePage/index.d.ts +3 -1
  34. package/dist/components/PropertyConfigBadge.d.ts +2 -1
  35. package/dist/components/PropertyIdCopyTooltip.d.ts +8 -0
  36. package/dist/components/ReferenceWidget.d.ts +6 -4
  37. package/dist/components/SelectableTable/SelectableTable.d.ts +13 -3
  38. package/dist/components/SelectableTable/filters/ReferenceFilterField.d.ts +2 -1
  39. package/dist/components/UnsavedChangesDialog.d.ts +8 -0
  40. package/dist/components/VirtualTable/VirtualTableProps.d.ts +29 -13
  41. package/dist/components/VirtualTable/types.d.ts +3 -3
  42. package/dist/components/{EntityCollectionTable/internal → common}/default_entity_actions.d.ts +1 -3
  43. package/dist/components/common/index.d.ts +2 -1
  44. package/dist/components/common/table_height.d.ts +5 -0
  45. package/dist/components/common/types.d.ts +4 -6
  46. package/dist/components/common/useColumnsIds.d.ts +3 -1
  47. package/dist/components/common/{useDataSourceEntityCollectionTableController.d.ts → useDataSourceTableController.d.ts} +13 -2
  48. package/dist/components/common/useDebouncedCallback.d.ts +1 -0
  49. package/dist/components/common/useScrollRestoration.d.ts +14 -0
  50. package/dist/components/index.d.ts +8 -5
  51. package/dist/contexts/AuthControllerContext.d.ts +1 -1
  52. package/dist/contexts/BreacrumbsContext.d.ts +8 -0
  53. package/dist/{components/FireCMSAppBar.d.ts → core/DefaultAppBar.d.ts} +6 -9
  54. package/dist/core/DefaultDrawer.d.ts +19 -0
  55. package/dist/core/DrawerNavigationItem.d.ts +10 -0
  56. package/dist/core/EntityEditView.d.ts +44 -0
  57. package/dist/core/EntityEditViewFormActions.d.ts +2 -0
  58. package/dist/core/FireCMS.d.ts +2 -2
  59. package/dist/core/FireCMSRouter.d.ts +4 -0
  60. package/dist/core/NavigationRoutes.d.ts +2 -3
  61. package/dist/core/SideDialogs.d.ts +4 -2
  62. package/dist/core/index.d.ts +4 -6
  63. package/dist/form/EntityForm.d.ts +45 -69
  64. package/dist/form/EntityFormActions.d.ts +17 -0
  65. package/dist/form/PropertyFieldBinding.d.ts +1 -1
  66. package/dist/form/components/ErrorFocus.d.ts +1 -1
  67. package/dist/form/components/FieldHelperText.d.ts +3 -3
  68. package/dist/form/components/FormEntry.d.ts +6 -0
  69. package/dist/form/components/FormLayout.d.ts +5 -0
  70. package/dist/{components → form/components}/LabelWithIcon.d.ts +1 -1
  71. package/dist/form/components/LabelWithIconAndTooltip.d.ts +15 -0
  72. package/dist/form/components/StorageItemPreview.d.ts +4 -3
  73. package/dist/form/components/StorageUploadProgress.d.ts +1 -1
  74. package/dist/form/components/index.d.ts +4 -1
  75. package/dist/form/field_bindings/ArrayCustomShapedFieldBinding.d.ts +1 -1
  76. package/dist/form/field_bindings/ArrayOfReferencesFieldBinding.d.ts +1 -1
  77. package/dist/form/field_bindings/BlockFieldBinding.d.ts +1 -1
  78. package/dist/form/field_bindings/KeyValueFieldBinding.d.ts +1 -1
  79. package/dist/form/field_bindings/MapFieldBinding.d.ts +1 -1
  80. package/dist/form/field_bindings/MarkdownEditorFieldBinding.d.ts +11 -0
  81. package/dist/form/field_bindings/{MultiSelectBinding.d.ts → MultiSelectFieldBinding.d.ts} +1 -1
  82. package/dist/form/field_bindings/ReadOnlyFieldBinding.d.ts +1 -1
  83. package/dist/form/field_bindings/ReferenceFieldBinding.d.ts +2 -2
  84. package/dist/form/field_bindings/RepeatFieldBinding.d.ts +1 -1
  85. package/dist/form/field_bindings/SelectFieldBinding.d.ts +1 -1
  86. package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +3 -4
  87. package/dist/form/field_bindings/SwitchFieldBinding.d.ts +1 -2
  88. package/dist/form/field_bindings/TextFieldBinding.d.ts +2 -2
  89. package/dist/form/index.d.ts +17 -18
  90. package/dist/form/useClearRestoreValue.d.ts +2 -2
  91. package/dist/form/validation.d.ts +1 -1
  92. package/dist/hooks/data/delete.d.ts +4 -4
  93. package/dist/hooks/data/save.d.ts +4 -5
  94. package/dist/hooks/data/useCollectionFetch.d.ts +1 -1
  95. package/dist/hooks/data/useDataSource.d.ts +2 -2
  96. package/dist/hooks/data/useEntityFetch.d.ts +4 -3
  97. package/dist/hooks/index.d.ts +4 -1
  98. package/dist/hooks/useAuthController.d.ts +1 -1
  99. package/dist/hooks/useBreadcrumbsController.d.ts +26 -0
  100. package/dist/{core → hooks}/useBuildModeController.d.ts +1 -1
  101. package/dist/hooks/useBuildNavigationController.d.ts +11 -6
  102. package/dist/hooks/useFireCMSContext.d.ts +1 -1
  103. package/dist/hooks/useModeController.d.ts +1 -2
  104. package/dist/hooks/useProjectLog.d.ts +12 -2
  105. package/dist/hooks/useResolvedNavigationFrom.d.ts +3 -3
  106. package/dist/hooks/useStorageSource.d.ts +2 -2
  107. package/dist/hooks/useValidateAuthenticator.d.ts +21 -0
  108. package/dist/index.d.ts +1 -0
  109. package/dist/index.es.js +22131 -14039
  110. package/dist/index.es.js.map +1 -1
  111. package/dist/index.umd.js +24420 -588
  112. package/dist/index.umd.js.map +1 -1
  113. package/dist/internal/useBuildDataSource.d.ts +1 -12
  114. package/dist/internal/useUnsavedChangesDialog.d.ts +7 -9
  115. package/dist/preview/PropertyPreview.d.ts +1 -1
  116. package/dist/preview/PropertyPreviewProps.d.ts +7 -5
  117. package/dist/preview/components/BooleanPreview.d.ts +5 -1
  118. package/dist/preview/components/EnumValuesChip.d.ts +1 -1
  119. package/dist/preview/components/ReferencePreview.d.ts +4 -9
  120. package/dist/preview/components/StorageThumbnail.d.ts +2 -1
  121. package/dist/preview/components/UrlComponentPreview.d.ts +2 -1
  122. package/dist/preview/util.d.ts +3 -3
  123. package/dist/routes/CustomCMSRoute.d.ts +4 -0
  124. package/dist/routes/FireCMSRoute.d.ts +1 -0
  125. package/dist/routes/HomePageRoute.d.ts +3 -0
  126. package/dist/types/analytics.d.ts +1 -1
  127. package/dist/types/auth.d.ts +37 -3
  128. package/dist/types/collections.d.ts +86 -24
  129. package/dist/types/datasource.d.ts +53 -37
  130. package/dist/types/dialogs_controller.d.ts +7 -3
  131. package/dist/types/entities.d.ts +8 -2
  132. package/dist/types/entity_actions.d.ts +28 -4
  133. package/dist/types/entity_callbacks.d.ts +16 -16
  134. package/dist/types/entity_overrides.d.ts +6 -0
  135. package/dist/types/export_import.d.ts +4 -4
  136. package/dist/types/fields.d.ts +71 -42
  137. package/dist/types/firecms.d.ts +6 -2
  138. package/dist/types/firecms_context.d.ts +1 -1
  139. package/dist/types/index.d.ts +2 -1
  140. package/dist/types/navigation.d.ts +45 -26
  141. package/dist/types/permissions.d.ts +8 -4
  142. package/dist/types/plugins.d.ts +40 -31
  143. package/dist/types/properties.d.ts +54 -26
  144. package/dist/types/property_config.d.ts +2 -4
  145. package/dist/types/roles.d.ts +31 -0
  146. package/dist/types/side_dialogs_controller.d.ts +10 -0
  147. package/dist/types/side_entity_controller.d.ts +6 -1
  148. package/dist/types/storage.d.ts +86 -3
  149. package/dist/types/user.d.ts +6 -0
  150. package/dist/util/builders.d.ts +3 -3
  151. package/dist/util/collections.d.ts +9 -1
  152. package/dist/util/entities.d.ts +3 -3
  153. package/dist/util/entity_actions.d.ts +2 -0
  154. package/dist/util/entity_cache.d.ts +23 -0
  155. package/dist/util/icon_list.d.ts +5 -1
  156. package/dist/util/icon_synonyms.d.ts +1 -98
  157. package/dist/util/icons.d.ts +13 -4
  158. package/dist/util/index.d.ts +2 -0
  159. package/dist/util/navigation_from_path.d.ts +6 -1
  160. package/dist/util/navigation_utils.d.ts +14 -3
  161. package/dist/util/objects.d.ts +2 -1
  162. package/dist/util/permissions.d.ts +4 -4
  163. package/dist/util/plurals.d.ts +0 -2
  164. package/dist/util/property_utils.d.ts +3 -3
  165. package/dist/util/references.d.ts +4 -2
  166. package/dist/util/resolutions.d.ts +31 -17
  167. package/dist/util/storage.d.ts +23 -2
  168. package/dist/util/useStorageUploadController.d.ts +3 -3
  169. package/dist/util/useTraceUpdate.d.ts +1 -0
  170. package/package.json +64 -51
  171. package/src/app/AppBar.tsx +18 -0
  172. package/src/app/Drawer.tsx +24 -0
  173. package/src/app/Scaffold.tsx +243 -0
  174. package/src/app/index.ts +4 -0
  175. package/src/app/useApp.tsx +32 -0
  176. package/src/components/ArrayContainer.tsx +126 -40
  177. package/src/components/CircularProgressCenter.tsx +2 -2
  178. package/src/components/ClearFilterSortButton.tsx +41 -0
  179. package/src/components/{DeleteConfirmationDialog.tsx → ConfirmationDialog.tsx} +3 -3
  180. package/src/components/DeleteEntityDialog.tsx +14 -23
  181. package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +56 -39
  182. package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +283 -280
  183. package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +29 -8
  184. package/src/components/EntityCollectionTable/PropertyTableCell.tsx +58 -50
  185. package/src/components/EntityCollectionTable/column_utils.tsx +3 -3
  186. package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +40 -33
  187. package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +22 -20
  188. package/src/components/EntityCollectionTable/index.tsx +1 -1
  189. package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +31 -36
  190. package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +36 -34
  191. package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +20 -8
  192. package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +81 -80
  193. package/src/components/EntityCollectionView/EntityCollectionView.tsx +228 -155
  194. package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +9 -8
  195. package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +68 -0
  196. package/src/components/EntityCollectionView/useSelectionController.tsx +43 -0
  197. package/src/components/EntityCollectionView/utils.ts +19 -0
  198. package/src/components/EntityPreview.tsx +218 -71
  199. package/src/components/EntityView.tsx +84 -0
  200. package/src/components/ErrorView.tsx +4 -4
  201. package/src/components/FieldCaption.tsx +14 -0
  202. package/src/components/HomePage/DefaultHomePage.tsx +39 -28
  203. package/src/components/HomePage/FavouritesView.tsx +6 -11
  204. package/src/components/HomePage/NavigationCard.tsx +69 -0
  205. package/src/components/HomePage/NavigationCardBinding.tsx +111 -0
  206. package/src/components/HomePage/NavigationGroup.tsx +2 -2
  207. package/src/components/HomePage/SmallNavigationCard.tsx +44 -0
  208. package/src/components/HomePage/index.tsx +3 -1
  209. package/src/components/NotFoundPage.tsx +2 -2
  210. package/src/components/PropertyConfigBadge.tsx +9 -3
  211. package/src/components/PropertyIdCopyTooltip.tsx +47 -0
  212. package/src/components/ReferenceTable/ReferenceSelectionTable.tsx +22 -17
  213. package/src/components/ReferenceWidget.tsx +26 -16
  214. package/src/components/SearchIconsView.tsx +10 -7
  215. package/src/components/SelectableTable/SelectableTable.tsx +27 -12
  216. package/src/components/SelectableTable/filters/BooleanFilterField.tsx +2 -3
  217. package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +25 -8
  218. package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +46 -30
  219. package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +92 -23
  220. package/src/components/UnsavedChangesDialog.tsx +42 -0
  221. package/src/components/VirtualTable/VirtualTable.tsx +96 -48
  222. package/src/components/VirtualTable/VirtualTableCell.tsx +1 -9
  223. package/src/components/VirtualTable/VirtualTableHeader.tsx +10 -10
  224. package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +2 -2
  225. package/src/components/VirtualTable/VirtualTableProps.tsx +34 -15
  226. package/src/components/VirtualTable/VirtualTableRow.tsx +5 -6
  227. package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +5 -5
  228. package/src/components/VirtualTable/fields/VirtualTableInput.tsx +3 -2
  229. package/src/components/VirtualTable/fields/VirtualTableNumberInput.tsx +2 -1
  230. package/src/components/VirtualTable/fields/VirtualTableSelect.tsx +16 -28
  231. package/src/components/VirtualTable/types.tsx +2 -3
  232. package/src/components/{EntityCollectionTable/internal → common}/default_entity_actions.tsx +40 -43
  233. package/src/components/common/index.ts +2 -1
  234. package/src/components/{VirtualTable/common.tsx → common/table_height.tsx} +5 -2
  235. package/src/components/common/types.tsx +4 -6
  236. package/src/components/common/useColumnsIds.tsx +24 -3
  237. package/src/components/common/useDataSourceTableController.tsx +420 -0
  238. package/src/components/common/useDebouncedCallback.tsx +20 -0
  239. package/src/components/common/useScrollRestoration.tsx +68 -0
  240. package/src/components/common/useTableSearchHelper.ts +53 -12
  241. package/src/components/index.tsx +8 -5
  242. package/src/contexts/AuthControllerContext.tsx +1 -1
  243. package/src/contexts/BreacrumbsContext.tsx +38 -0
  244. package/src/contexts/DialogsProvider.tsx +5 -4
  245. package/src/contexts/ModeController.tsx +1 -3
  246. package/src/contexts/SnackbarProvider.tsx +2 -0
  247. package/src/core/DefaultAppBar.tsx +207 -0
  248. package/src/core/DefaultDrawer.tsx +185 -0
  249. package/src/core/DrawerNavigationItem.tsx +66 -0
  250. package/src/core/EntityEditView.tsx +455 -0
  251. package/src/core/EntityEditViewFormActions.tsx +199 -0
  252. package/src/core/EntitySidePanel.tsx +87 -18
  253. package/src/core/FireCMS.tsx +67 -44
  254. package/src/core/FireCMSRouter.tsx +17 -0
  255. package/src/core/NavigationRoutes.tsx +36 -38
  256. package/src/core/SideDialogs.tsx +22 -12
  257. package/src/core/field_configs.tsx +11 -12
  258. package/src/core/index.tsx +6 -7
  259. package/src/form/EntityForm.tsx +565 -519
  260. package/src/form/EntityFormActions.tsx +169 -0
  261. package/src/form/PropertyFieldBinding.tsx +85 -44
  262. package/src/form/components/CustomIdField.tsx +6 -2
  263. package/src/form/components/FieldHelperText.tsx +4 -4
  264. package/src/form/components/FormEntry.tsx +22 -0
  265. package/src/form/components/FormLayout.tsx +16 -0
  266. package/src/form/components/LabelWithIcon.tsx +44 -0
  267. package/src/form/components/LabelWithIconAndTooltip.tsx +28 -0
  268. package/src/form/components/StorageItemPreview.tsx +23 -11
  269. package/src/form/components/StorageUploadProgress.tsx +9 -9
  270. package/src/form/components/index.tsx +4 -1
  271. package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +32 -21
  272. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +54 -45
  273. package/src/form/field_bindings/BlockFieldBinding.tsx +57 -36
  274. package/src/form/field_bindings/DateTimeFieldBinding.tsx +21 -17
  275. package/src/form/field_bindings/KeyValueFieldBinding.tsx +76 -67
  276. package/src/form/field_bindings/MapFieldBinding.tsx +82 -65
  277. package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +153 -0
  278. package/src/form/field_bindings/{MultiSelectBinding.tsx → MultiSelectFieldBinding.tsx} +26 -22
  279. package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +12 -17
  280. package/src/form/field_bindings/ReferenceFieldBinding.tsx +47 -34
  281. package/src/form/field_bindings/RepeatFieldBinding.tsx +57 -36
  282. package/src/form/field_bindings/SelectFieldBinding.tsx +24 -17
  283. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +47 -46
  284. package/src/form/field_bindings/SwitchFieldBinding.tsx +31 -27
  285. package/src/form/field_bindings/TextFieldBinding.tsx +35 -30
  286. package/src/form/index.tsx +17 -37
  287. package/src/form/useClearRestoreValue.tsx +2 -2
  288. package/src/form/validation.ts +15 -26
  289. package/src/hooks/data/delete.ts +7 -6
  290. package/src/hooks/data/save.ts +13 -9
  291. package/src/hooks/data/useCollectionFetch.tsx +4 -4
  292. package/src/hooks/data/useDataSource.tsx +15 -2
  293. package/src/hooks/data/useEntityFetch.tsx +11 -7
  294. package/src/hooks/index.tsx +6 -1
  295. package/src/hooks/useAuthController.tsx +1 -1
  296. package/src/hooks/useBreadcrumbsController.tsx +31 -0
  297. package/src/{core → hooks}/useBuildLocalConfigurationPersistence.tsx +8 -10
  298. package/src/{core → hooks}/useBuildModeController.tsx +23 -30
  299. package/src/hooks/useBuildNavigationController.tsx +278 -117
  300. package/src/hooks/useFireCMSContext.tsx +5 -5
  301. package/src/hooks/useLargeLayout.tsx +0 -35
  302. package/src/hooks/useModeController.tsx +1 -2
  303. package/src/hooks/useProjectLog.tsx +41 -9
  304. package/src/hooks/useReferenceDialog.tsx +2 -2
  305. package/src/hooks/useResolvedNavigationFrom.tsx +10 -12
  306. package/src/hooks/useStorageSource.tsx +7 -2
  307. package/src/hooks/useValidateAuthenticator.tsx +115 -0
  308. package/src/index.ts +1 -0
  309. package/src/internal/useBuildDataSource.ts +72 -77
  310. package/src/internal/useBuildSideDialogsController.tsx +4 -2
  311. package/src/internal/useBuildSideEntityController.tsx +177 -70
  312. package/src/internal/useUnsavedChangesDialog.tsx +127 -91
  313. package/src/preview/PropertyPreview.tsx +19 -26
  314. package/src/preview/PropertyPreviewProps.tsx +5 -9
  315. package/src/preview/components/BooleanPreview.tsx +19 -4
  316. package/src/preview/components/EmptyValue.tsx +1 -1
  317. package/src/preview/components/EnumValuesChip.tsx +2 -2
  318. package/src/preview/components/ImagePreview.tsx +25 -36
  319. package/src/preview/components/ReferencePreview.tsx +73 -176
  320. package/src/preview/components/StorageThumbnail.tsx +5 -1
  321. package/src/preview/components/UrlComponentPreview.tsx +60 -28
  322. package/src/preview/property_previews/ArrayOfMapsPreview.tsx +2 -3
  323. package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +4 -3
  324. package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +2 -3
  325. package/src/preview/property_previews/ArrayOfStringsPreview.tsx +1 -2
  326. package/src/preview/property_previews/ArrayOneOfPreview.tsx +4 -5
  327. package/src/preview/property_previews/ArrayPropertyPreview.tsx +4 -5
  328. package/src/preview/property_previews/MapPropertyPreview.tsx +12 -11
  329. package/src/preview/property_previews/SkeletonPropertyComponent.tsx +12 -12
  330. package/src/preview/property_previews/StringPropertyPreview.tsx +8 -7
  331. package/src/preview/util.ts +10 -10
  332. package/src/routes/CustomCMSRoute.tsx +21 -0
  333. package/src/routes/FireCMSRoute.tsx +236 -0
  334. package/src/routes/HomePageRoute.tsx +17 -0
  335. package/src/types/analytics.ts +1 -0
  336. package/src/types/auth.tsx +48 -3
  337. package/src/types/collections.ts +102 -27
  338. package/src/types/customization_controller.tsx +0 -1
  339. package/src/types/datasource.ts +62 -44
  340. package/src/types/dialogs_controller.tsx +7 -3
  341. package/src/types/entities.ts +16 -2
  342. package/src/types/entity_actions.tsx +33 -4
  343. package/src/types/entity_callbacks.ts +18 -18
  344. package/src/types/entity_overrides.tsx +7 -0
  345. package/src/types/export_import.ts +4 -4
  346. package/src/types/fields.tsx +81 -46
  347. package/src/types/firecms.tsx +6 -2
  348. package/src/types/firecms_context.tsx +1 -1
  349. package/src/types/index.ts +2 -1
  350. package/src/types/navigation.ts +52 -31
  351. package/src/types/permissions.ts +10 -5
  352. package/src/types/plugins.tsx +47 -39
  353. package/src/types/properties.ts +63 -27
  354. package/src/types/property_config.tsx +2 -4
  355. package/src/types/roles.ts +41 -0
  356. package/src/types/side_dialogs_controller.tsx +15 -0
  357. package/src/types/side_entity_controller.tsx +7 -1
  358. package/src/types/storage.ts +94 -3
  359. package/src/types/user.ts +9 -0
  360. package/src/util/builders.ts +10 -8
  361. package/src/util/collections.ts +22 -0
  362. package/src/util/entities.ts +9 -6
  363. package/src/util/entity_actions.ts +28 -0
  364. package/src/util/entity_cache.ts +204 -0
  365. package/src/util/enums.ts +1 -1
  366. package/src/util/icon_list.ts +16 -10
  367. package/src/util/icon_synonyms.ts +3 -100
  368. package/src/util/icons.tsx +26 -8
  369. package/src/util/index.ts +2 -0
  370. package/src/util/join_collections.ts +3 -0
  371. package/src/util/make_properties_editable.ts +13 -5
  372. package/src/util/navigation_from_path.ts +13 -6
  373. package/src/util/navigation_utils.ts +59 -7
  374. package/src/util/objects.ts +45 -28
  375. package/src/util/parent_references_from_path.ts +3 -3
  376. package/src/util/permissions.ts +20 -16
  377. package/src/util/plurals.ts +0 -2
  378. package/src/util/property_utils.tsx +11 -4
  379. package/src/util/references.ts +45 -5
  380. package/src/util/resolutions.ts +79 -46
  381. package/src/util/storage.ts +79 -21
  382. package/src/util/strings.ts +2 -2
  383. package/src/util/useStorageUploadController.tsx +71 -27
  384. package/src/util/useTraceUpdate.tsx +2 -1
  385. package/dist/components/PropertyIdCopyTooltipContent.d.ts +0 -3
  386. package/dist/components/VirtualTable/common.d.ts +0 -2
  387. package/dist/core/Drawer.d.ts +0 -23
  388. package/dist/core/Scaffold.d.ts +0 -55
  389. package/dist/form/components/FormikArrayContainer.d.ts +0 -18
  390. package/dist/form/field_bindings/MarkdownFieldBinding.d.ts +0 -9
  391. package/dist/internal/EntityView.d.ts +0 -22
  392. package/dist/internal/useBuildCustomizationController.d.ts +0 -2
  393. package/dist/internal/useLocaleConfig.d.ts +0 -1
  394. package/dist/types/appcheck.d.ts +0 -26
  395. package/src/components/FireCMSAppBar.tsx +0 -157
  396. package/src/components/HomePage/NavigationCollectionCard.tsx +0 -146
  397. package/src/components/LabelWithIcon.tsx +0 -33
  398. package/src/components/PropertyIdCopyTooltipContent.tsx +0 -28
  399. package/src/components/common/useDataSourceEntityCollectionTableController.tsx +0 -225
  400. package/src/core/Drawer.tsx +0 -164
  401. package/src/core/Scaffold.tsx +0 -281
  402. package/src/form/components/FormikArrayContainer.tsx +0 -44
  403. package/src/form/field_bindings/MarkdownFieldBinding.tsx +0 -696
  404. package/src/internal/EntityView.tsx +0 -578
  405. package/src/internal/useBuildCustomizationController.tsx +0 -5
  406. package/src/internal/useLocaleConfig.tsx +0 -18
  407. package/src/types/appcheck.ts +0 -29
  408. /package/dist/{core → hooks}/useBuildLocalConfigurationPersistence.d.ts +0 -0
  409. /package/src/util/{common.tsx → common.ts} +0 -0
@@ -1,41 +1,45 @@
1
1
  import React from "react";
2
2
 
3
- import { Entity, 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;
16
+ placeholder?: boolean;
17
+ className?: string;
17
18
  }
18
19
 
19
20
  export function StorageItemPreview({
20
21
  name,
21
22
  property,
22
23
  value,
23
- entity,
24
24
  onRemove,
25
25
  disabled,
26
- size
26
+ size,
27
+ placeholder,
28
+ className
27
29
  }: StorageItemPreviewProps) {
28
30
 
29
31
  return (
30
- <div className={cn(paperMixin,
32
+ <div className={cls(paperMixin,
31
33
  "relative m-4 border-box flex items-center justify-center",
32
- 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)}>
33
36
 
34
- {!disabled &&
37
+ {!placeholder && !disabled &&
35
38
  <div
36
- 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">
37
40
 
38
41
  <Tooltip
42
+ asChild={true}
39
43
  title="Remove">
40
44
  <IconButton
41
45
  size={"small"}
@@ -49,16 +53,24 @@ export function StorageItemPreview({
49
53
  </div>
50
54
  }
51
55
 
52
- {value &&
56
+ {!placeholder && value &&
53
57
  <ErrorBoundary>
54
58
  <PropertyPreview propertyKey={name}
55
59
  value={value}
56
60
  property={property}
57
- // entity={entity}
61
+ interactive={false}
58
62
  size={size}/>
59
63
  </ErrorBoundary>
60
64
  }
61
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
+
62
74
 
63
75
  </div>
64
76
  );
@@ -3,7 +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";
6
+ import { cls, paperMixin, Skeleton } from "@firecms/ui";
7
7
 
8
8
  export interface StorageUploadItemProps {
9
9
  storagePath: string;
@@ -22,10 +22,10 @@ export function StorageUploadProgress({
22
22
  metadata,
23
23
  onFileUploadComplete,
24
24
  imageSize,
25
- simple
25
+ simple,
26
26
  }: StorageUploadItemProps) {
27
27
 
28
- const storage = useStorageSource();
28
+ const storageSource = useStorageSource();
29
29
 
30
30
  const snackbarController = useSnackbarController();
31
31
 
@@ -41,14 +41,14 @@ export function StorageUploadProgress({
41
41
  setError(undefined);
42
42
  setLoading(true);
43
43
 
44
- storage.uploadFile({
44
+ storageSource.uploadFile({
45
45
  file,
46
46
  fileName,
47
47
  path: storagePath,
48
48
  metadata
49
49
  })
50
50
  .then(async ({ path }) => {
51
- console.debug("Upload successful");
51
+ console.debug("Upload successful", path);
52
52
  await onFileUploadComplete(path, entry, metadata);
53
53
  if (mounted.current)
54
54
  setLoading(false);
@@ -67,7 +67,7 @@ export function StorageUploadProgress({
67
67
  .finally(() => {
68
68
  uploading.current = false;
69
69
  });
70
- }, [entry, metadata, onFileUploadComplete, storage, storagePath]);
70
+ }, [entry, metadata, onFileUploadComplete, storageSource, storagePath]);
71
71
 
72
72
  React.useEffect(() => {
73
73
  mounted.current = true;
@@ -87,12 +87,12 @@ export function StorageUploadProgress({
87
87
  }
88
88
  return (
89
89
 
90
- <div className={cn(paperMixin,
90
+ <div className={cls(paperMixin,
91
91
  "relative m-4 border-box flex items-center justify-center",
92
- `min-w-[${imageSize}px] min-h-[${imageSize}px]`)}>
92
+ `min-w-[${imageSize}px] min-h-[${imageSize}px]`)}>
93
93
 
94
94
  {loading &&
95
- <Skeleton className="w-full h-full"/>}
95
+ <Skeleton className="m-4 w-full h-full"/>}
96
96
 
97
97
  {error && <ErrorView title={"Error uploading file"}
98
98
  error={error}/>}
@@ -1,2 +1,5 @@
1
- export * from "./FormikArrayContainer";
2
1
  export * from "./FieldHelperText";
2
+ export * from "./LabelWithIcon";
3
+ export * from "./LabelWithIconAndTooltip";
4
+ export * from "./FormEntry";
5
+ export * from "./FormLayout";
@@ -1,11 +1,10 @@
1
1
  import React from "react";
2
2
  import { FieldProps } from "../../types";
3
- import { FieldHelperText } from "../components";
3
+ import { FieldHelperText, LabelWithIconAndTooltip } from "../components";
4
4
  import { PropertyFieldBinding } from "../PropertyFieldBinding";
5
- import { useClearRestoreValue } from "../../hooks";
6
- import { ExpandablePanel } from "@firecms/ui";
7
- import { getIconForProperty } from "../../util";
8
- import { LabelWithIcon } from "../../components";
5
+ import { ExpandablePanel, Typography } from "@firecms/ui";
6
+ import { getArrayResolvedProperties, getIconForProperty, isReadOnly } from "../../util";
7
+ import { useClearRestoreValue } from "../useClearRestoreValue";
9
8
 
10
9
  /**
11
10
  * Array field used for custom
@@ -21,16 +20,24 @@ export function ArrayCustomShapedFieldBinding<T extends Array<any>>({
21
20
  showError,
22
21
  isSubmitting,
23
22
  setValue,
24
- tableMode,
23
+ minimalistView: minimalistViewProp,
25
24
  property,
26
25
  includeDescription,
27
- underlyingValueHasChanged,
28
26
  context,
29
27
  disabled
30
28
  }: FieldProps<T, any, any>) {
31
29
 
32
- if (!Array.isArray(property.resolvedProperties))
33
- throw Error("ArrayCustomShapedFieldBinding misconfiguration. Property `of` not set");
30
+ const minimalistView = minimalistViewProp || property.minimalistView;
31
+
32
+ let resolvedProperties = "resolvedProperties" in property ? property.resolvedProperties : undefined;
33
+ if (!resolvedProperties) {
34
+ resolvedProperties = getArrayResolvedProperties({
35
+ propertyValue: value,
36
+ propertyKey,
37
+ property,
38
+ ignoreMissingFields: false
39
+ })
40
+ }
34
41
 
35
42
  const expanded = property.expanded === undefined ? true : property.expanded;
36
43
 
@@ -40,22 +47,26 @@ export function ArrayCustomShapedFieldBinding<T extends Array<any>>({
40
47
  setValue
41
48
  });
42
49
 
43
- const title = <LabelWithIcon icon={getIconForProperty(property, "small")}
44
- required={property.validation?.required}
45
- className={"text-text-secondary dark:text-text-secondary-dark"}
46
- title={property.name}/>;
50
+ const title = (<>
51
+ <LabelWithIconAndTooltip
52
+ propertyKey={propertyKey}
53
+ icon={getIconForProperty(property, "small")}
54
+ required={property.validation?.required}
55
+ title={property.name}
56
+ className={"h-8 flex-grow text-text-secondary dark:text-text-secondary-dark"}/>
57
+ {Array.isArray(value) && <Typography variant={"caption"} className={"px-4"}>({value.length})</Typography>}
58
+ </>);
47
59
 
48
- const body = property.resolvedProperties.map((childProperty, index) => {
60
+ const body = resolvedProperties.map((childProperty, index) => {
61
+ const thisDisabled = isReadOnly(childProperty) || Boolean(childProperty.disabled);
49
62
  const fieldProps = {
50
63
  propertyKey: `${propertyKey}[${index}]`,
51
- disabled,
64
+ disabled: disabled || thisDisabled,
52
65
  property: childProperty,
53
66
  includeDescription,
54
- underlyingValueHasChanged,
55
67
  context,
56
- tableMode: false,
57
68
  partOfArray: true,
58
- partOfBlock: false,
69
+ minimalistView: false,
59
70
  autoFocus: false
60
71
  };
61
72
  return <div key={`custom_shaped_array_${index}`} className="pb-4">
@@ -67,14 +78,14 @@ export function ArrayCustomShapedFieldBinding<T extends Array<any>>({
67
78
 
68
79
  <>
69
80
 
70
- {!tableMode &&
81
+ {!minimalistView &&
71
82
  <ExpandablePanel initiallyExpanded={expanded}
72
83
  title={title}
73
- className={"px-2 md:px-4 pb-2 md:pb-4 pt-1 md:pt-2"}>
84
+ innerClassName={"px-2 md:px-4 pb-2 md:pb-4 pt-1 md:pt-2"}>
74
85
  {body}
75
86
  </ExpandablePanel>}
76
87
 
77
- {tableMode && body}
88
+ {minimalistView && body}
78
89
 
79
90
  <FieldHelperText includeDescription={includeDescription}
80
91
  showError={showError}
@@ -1,12 +1,13 @@
1
1
  import React, { useCallback, useMemo } from "react";
2
2
  import { Entity, EntityCollection, EntityReference, FieldProps, ResolvedProperty } from "../../types";
3
3
  import { ReferencePreview } from "../../preview";
4
- import { FieldHelperText, FormikArrayContainer } from "../components";
5
- import { ErrorView, LabelWithIcon } from "../../components";
4
+ import { FieldHelperText, LabelWithIconAndTooltip } from "../components";
5
+ import { ArrayContainer, ArrayEntryParams, ErrorView } from "../../components";
6
6
  import { getIconForProperty, getReferenceFrom } from "../../util";
7
7
 
8
- import { useClearRestoreValue, useNavigationController, useReferenceDialog } from "../../hooks";
9
- import { Button, ExpandablePanel } from "@firecms/ui";
8
+ import { useNavigationController, useReferenceDialog } from "../../hooks";
9
+ import { Button, cls, ExpandablePanel, fieldBackgroundMixin, Typography } from "@firecms/ui";
10
+ import { useClearRestoreValue } from "../useClearRestoreValue";
10
11
 
11
12
  type ArrayOfReferencesFieldProps = FieldProps<EntityReference[]>;
12
13
 
@@ -24,20 +25,21 @@ export function ArrayOfReferencesFieldBinding({
24
25
  showError,
25
26
  disabled,
26
27
  isSubmitting,
27
- tableMode,
28
+ minimalistView: minimalistViewProp,
28
29
  property,
29
30
  includeDescription,
30
31
  setValue,
31
32
  setFieldValue
32
33
  }: ArrayOfReferencesFieldProps) {
33
34
 
35
+ const minimalistView = minimalistViewProp || property.minimalistView;
36
+
34
37
  const ofProperty = property.of as ResolvedProperty;
35
38
  if (ofProperty.dataType !== "reference") {
36
39
  throw Error("ArrayOfReferencesField expected a property containing references");
37
40
  }
38
41
 
39
42
  const expanded = property.expanded === undefined ? true : property.expanded;
40
- const [onHover, setOnHover] = React.useState(false);
41
43
  const selectedEntityIds = value && Array.isArray(value) ? value.map((ref) => ref.id) : [];
42
44
 
43
45
  useClearRestoreValue({
@@ -56,7 +58,6 @@ export function ArrayOfReferencesFieldBinding({
56
58
  }
57
59
 
58
60
  const onMultipleEntitiesSelected = useCallback((entities: Entity<any>[]) => {
59
- console.debug("onMultipleEntitiesSelected", entities);
60
61
  setValue(entities.map(e => getReferenceFrom(e)));
61
62
  }, [setValue]);
62
63
 
@@ -70,76 +71,84 @@ export function ArrayOfReferencesFieldBinding({
70
71
  }
71
72
  );
72
73
 
73
- const onEntryClick = useCallback((e: React.SyntheticEvent) => {
74
+ const onEntryClick = (e: React.SyntheticEvent) => {
74
75
  e.preventDefault();
75
76
  referenceDialogController.open();
76
- }, [referenceDialogController]);
77
-
78
- const buildEntry = useCallback((index: number, internalId: number) => {
77
+ };
78
+
79
+ const buildEntry = useCallback(({
80
+ index,
81
+ internalId,
82
+ storedProps,
83
+ storeProps
84
+ }: ArrayEntryParams) => {
79
85
  const entryValue = value && value.length > index ? value[index] : undefined;
80
86
  if (!entryValue)
81
87
  return <div>Internal ERROR</div>;
82
88
  return (
83
- <div
84
- onMouseEnter={() => setOnHover(true)}
85
- onMouseMove={() => setOnHover(true)}
86
- onMouseLeave={() => setOnHover(false)}>
87
- <ReferencePreview
88
- disabled={!ofProperty.path}
89
- previewProperties={ofProperty.previewProperties}
90
- size={"medium"}
91
- onClick={onEntryClick}
92
- reference={entryValue}
93
- onHover={onHover}
94
- />
95
- </div>
89
+ <ReferencePreview
90
+ key={internalId}
91
+ disabled={!ofProperty.path}
92
+ previewProperties={ofProperty.previewProperties}
93
+ size={"medium"}
94
+ onClick={onEntryClick}
95
+ hover={!disabled}
96
+ reference={entryValue}
97
+ includeId={ofProperty.includeId}
98
+ includeEntityLink={ofProperty.includeEntityLink}
99
+ />
96
100
  );
97
- }, [ofProperty.path, ofProperty.previewProperties, onHover, value]);
98
-
99
- const title = (
100
- <LabelWithIcon icon={getIconForProperty(property, "small")}
101
- required={property.validation?.required}
102
- title={property.name}
103
- className={"text-text-secondary dark:text-text-secondary-dark"}/>
104
- );
101
+ }, [ofProperty.path, ofProperty.previewProperties, value]);
102
+
103
+ const title = (<>
104
+ <LabelWithIconAndTooltip
105
+ propertyKey={propertyKey}
106
+ icon={getIconForProperty(property, "small")}
107
+ required={property.validation?.required}
108
+ title={property.name}
109
+ className={"h-8 flex flex-grow text-text-secondary dark:text-text-secondary-dark"}/>
110
+ {Array.isArray(value) && <Typography variant={"caption"} className={"px-4"}>({value.length})</Typography>}
111
+ </>);
105
112
 
106
113
  const body = <>
107
114
  {!collection && <ErrorView
108
115
  error={"The specified collection does not exist. Check console"}/>}
109
116
 
110
- {collection && <>
117
+ {collection && <div className={"group"}>
111
118
 
112
- <FormikArrayContainer value={value}
113
- addLabel={property.name ? "Add reference to " + property.name : "Add reference"}
114
- name={propertyKey}
115
- buildEntry={buildEntry}
116
- disabled={isSubmitting}
117
- setFieldValue={setFieldValue}
118
- newDefaultEntry={property.of.defaultValue}/>
119
+ <ArrayContainer droppableId={propertyKey}
120
+ value={value}
121
+ disabled={isSubmitting}
122
+ buildEntry={buildEntry}
123
+ addLabel={property.name ? "Add reference to " + property.name : "Add reference"}
124
+ newDefaultEntry={property.of.defaultValue}
125
+ onValueChange={(value) => setFieldValue(propertyKey, value)}
126
+ />
119
127
 
120
128
  <Button
121
129
  className="my-4 justify-center text-left"
122
- variant="outlined"
130
+ variant="text"
123
131
  color="primary"
124
132
  disabled={isSubmitting}
125
133
  onClick={onEntryClick}>
126
134
  Edit {property.name}
127
135
  </Button>
128
- </>}
136
+ </div>}
129
137
  </>;
130
138
 
131
139
  return (
132
140
  <>
133
141
 
134
- {!tableMode &&
142
+ {!minimalistView &&
135
143
  <ExpandablePanel
136
- className={"px-2 md:px-4 pb-2 md:pb-4 pt-1 md:pt-2"}
144
+ titleClassName={fieldBackgroundMixin}
145
+ innerClassName={cls("px-2 md:px-4 pb-2 md:pb-4 pt-1 md:pt-2", fieldBackgroundMixin)}
137
146
  initiallyExpanded={expanded}
138
147
  title={title}>
139
148
  {body}
140
149
  </ExpandablePanel>}
141
150
 
142
- {tableMode && body}
151
+ {minimalistView && body}
143
152
 
144
153
  <FieldHelperText includeDescription={includeDescription}
145
154
  showError={showError}
@@ -1,16 +1,16 @@
1
- import React, { useCallback, useEffect, useState } from "react";
1
+ import React, { useEffect, useState } from "react";
2
2
 
3
3
  import { Field, useFormex } from "@firecms/formex";
4
4
 
5
- import { FieldHelperText, FormikArrayContainer } from "../components";
6
- import { LabelWithIcon } from "../../components";
7
- import { useClearRestoreValue } from "../../hooks";
5
+ import { FieldHelperText, LabelWithIconAndTooltip } from "../components";
8
6
  import { PropertyFieldBinding } from "../PropertyFieldBinding";
9
7
  import { EnumValuesChip } from "../../preview";
10
8
  import { FieldProps, FormContext, PropertyFieldBindingProps, PropertyOrBuilder } from "../../types";
11
- import { getDefaultValueFor, getIconForProperty, } from "../../util";
9
+ import { getDefaultValueFor, getIconForProperty, mergeDeep, } from "../../util";
12
10
  import { DEFAULT_ONE_OF_TYPE, DEFAULT_ONE_OF_VALUE } from "../../util/common";
13
- import { cn, ExpandablePanel, paperMixin, Select, SelectItem, Typography } from "@firecms/ui";
11
+ import { cls, ExpandablePanel, paperMixin, Select, SelectItem, Typography } from "@firecms/ui";
12
+ import { useClearRestoreValue } from "../useClearRestoreValue";
13
+ import { ArrayContainer, ArrayEntryParams } from "../../components";
14
14
 
15
15
  /**
16
16
  * If the `oneOf` property is specified, this fields render each array entry as
@@ -28,7 +28,7 @@ export function BlockFieldBinding<T extends Array<any>>({
28
28
  isSubmitting,
29
29
  setValue,
30
30
  setFieldValue,
31
- tableMode,
31
+ minimalistView: minimalistViewProp,
32
32
  property,
33
33
  includeDescription,
34
34
  underlyingValueHasChanged,
@@ -36,6 +36,8 @@ export function BlockFieldBinding<T extends Array<any>>({
36
36
  disabled
37
37
  }: FieldProps<T>) {
38
38
 
39
+ const minimalistView = minimalistViewProp || property.minimalistView;
40
+
39
41
  if (!property.oneOf)
40
42
  throw Error("ArrayOneOfField misconfiguration. Property `oneOf` not set");
41
43
 
@@ -48,9 +50,15 @@ export function BlockFieldBinding<T extends Array<any>>({
48
50
 
49
51
  const [lastAddedId, setLastAddedId] = useState<number | undefined>();
50
52
 
51
- const buildEntry = useCallback((index: number, internalId: number) => {
53
+ const buildEntry = ({
54
+ index,
55
+ internalId,
56
+ storedProps,
57
+ storeProps
58
+ }: ArrayEntryParams) => {
59
+
52
60
  return <BlockEntry
53
- key={`array_one_of_${index}`}
61
+ key={`array_one_of_${internalId}`}
54
62
  name={`${propertyKey}.${index}`}
55
63
  index={index}
56
64
  value={value[index]}
@@ -58,42 +66,47 @@ export function BlockFieldBinding<T extends Array<any>>({
58
66
  valueField={property.oneOf!.valueField ?? DEFAULT_ONE_OF_VALUE}
59
67
  properties={property.oneOf!.properties}
60
68
  autoFocus={internalId === lastAddedId}
61
- context={context}/>;
62
- }, [context, lastAddedId, property.oneOf, propertyKey, value]);
69
+ context={context}
70
+ storeProps={storeProps}
71
+ storedProps={storedProps}/>;
72
+ };
63
73
 
64
74
  const title = (
65
- <LabelWithIcon icon={getIconForProperty(property, "small")}
66
- required={property.validation?.required}
67
- title={property.name}
68
- className={"text-text-secondary dark:text-text-secondary-dark"}/>
75
+ <LabelWithIconAndTooltip
76
+ propertyKey={propertyKey}
77
+ icon={getIconForProperty(property, "small")}
78
+ required={property.validation?.required}
79
+ title={property.name}
80
+ className={"text-text-secondary dark:text-text-secondary-dark"}/>
69
81
  );
70
82
 
71
83
  const firstOneOfKey = Object.keys(property.oneOf.properties)[0];
72
- const body = <FormikArrayContainer value={value}
73
- name={propertyKey}
74
- addLabel={property.name ? "Add entry to " + property.name : "Add entry"}
75
- buildEntry={buildEntry}
76
- onInternalIdAdded={setLastAddedId}
77
- disabled={isSubmitting || Boolean(property.disabled)}
78
- includeAddButton={!property.disabled}
79
- setFieldValue={setFieldValue}
80
- newDefaultEntry={{
81
- [property.oneOf!.typeField ?? DEFAULT_ONE_OF_TYPE]: firstOneOfKey,
82
- [property.oneOf!.valueField ?? DEFAULT_ONE_OF_VALUE]: getDefaultValueFor(property.oneOf.properties[firstOneOfKey])
83
- }}/>;
84
+ const body = <ArrayContainer value={value}
85
+ className={"flex flex-col gap-3"}
86
+ droppableId={propertyKey}
87
+ addLabel={property.name ? "Add entry to " + property.name : "Add entry"}
88
+ buildEntry={buildEntry}
89
+ onInternalIdAdded={setLastAddedId}
90
+ disabled={isSubmitting || Boolean(property.disabled)}
91
+ includeAddButton={!property.disabled}
92
+ onValueChange={(value) => setFieldValue(propertyKey, value)}
93
+ newDefaultEntry={{
94
+ [property.oneOf!.typeField ?? DEFAULT_ONE_OF_TYPE]: firstOneOfKey,
95
+ [property.oneOf!.valueField ?? DEFAULT_ONE_OF_VALUE]: getDefaultValueFor(property.oneOf.properties[firstOneOfKey])
96
+ }}/>;
84
97
  return (
85
98
 
86
99
  <>
87
100
 
88
- {!tableMode &&
101
+ {!minimalistView &&
89
102
  <ExpandablePanel
90
- className={"px-2 md:px-4 pb-2 md:pb-4 pt-1 md:pt-2"}
103
+ innerClassName={"px-2 md:px-4 pb-2 md:pb-4 pt-1 md:pt-2"}
91
104
  initiallyExpanded={expanded}
92
105
  title={title}>
93
106
  {body}
94
107
  </ExpandablePanel>}
95
108
 
96
- {tableMode && body}
109
+ {minimalistView && body}
97
110
 
98
111
  <FieldHelperText includeDescription={includeDescription}
99
112
  showError={showError}
@@ -132,6 +145,9 @@ interface BlockEntryProps {
132
145
  */
133
146
  context: FormContext<any>;
134
147
 
148
+ storedProps?: object,
149
+ storeProps: (props: object) => void
150
+
135
151
  }
136
152
 
137
153
  function BlockEntry({
@@ -142,7 +158,9 @@ function BlockEntry({
142
158
  valueField,
143
159
  properties,
144
160
  autoFocus,
145
- context
161
+ context,
162
+ storedProps,
163
+ storeProps
146
164
  }: BlockEntryProps) {
147
165
 
148
166
  const type = value && value[typeField];
@@ -162,7 +180,9 @@ function BlockEntry({
162
180
  }
163
181
  }, [type]);
164
182
 
165
- const property = typeInternal ? properties[typeInternal] : undefined;
183
+ const propertyInternal = typeInternal ? properties[typeInternal] : undefined;
184
+
185
+ const property = storedProps && typeof propertyInternal === "object" ? mergeDeep(propertyInternal, storedProps) : propertyInternal;
166
186
 
167
187
  const enumValuesConfigs = Object.entries(properties)
168
188
  .map(([key, property]) => ({
@@ -180,8 +200,8 @@ function BlockEntry({
180
200
  context,
181
201
  autoFocus,
182
202
  partOfArray: false,
183
- partOfBlock: true,
184
- tableMode: false
203
+ minimalistView: true,
204
+ onPropertyChange: storeProps,
185
205
  }
186
206
  : undefined;
187
207
 
@@ -194,7 +214,7 @@ function BlockEntry({
194
214
  };
195
215
 
196
216
  return (
197
- <div className={cn(paperMixin, "bg-transparent p-4 my-4 py-8")}>
217
+ <div className={cls(paperMixin, "bg-transparent p-2")}>
198
218
 
199
219
  <Field
200
220
  name={typeFieldName}
@@ -207,7 +227,8 @@ function BlockEntry({
207
227
  className="mb-2"
208
228
  placeholder={<Typography variant={"caption"}
209
229
  className={"px-4 py-2 font-medium"}>Type</Typography>}
210
- size={"small"}
230
+ size={"medium"}
231
+ fullWidth={true}
211
232
  position={"item-aligned"}
212
233
  value={value1}
213
234
  renderValue={(enumKey: any) =>