@firecms/core 3.0.0-canary.28 → 3.0.0-canary.280

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 (424) 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 +34 -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 +31 -12
  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 +14 -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 +20 -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/EntityJsonPreview.d.ts +3 -0
  25. package/dist/components/EntityPreview.d.ts +10 -7
  26. package/dist/components/ErrorView.d.ts +1 -1
  27. package/dist/components/HomePage/DefaultHomePage.d.ts +2 -15
  28. package/dist/components/HomePage/HomePageDnD.d.ts +76 -0
  29. package/dist/components/HomePage/NavigationCard.d.ts +3 -1
  30. package/dist/components/HomePage/NavigationCardBinding.d.ts +4 -3
  31. package/dist/components/HomePage/NavigationGroup.d.ts +8 -1
  32. package/dist/components/HomePage/RenameGroupDialog.d.ts +9 -0
  33. package/dist/components/PropertyConfigBadge.d.ts +2 -1
  34. package/dist/components/PropertyIdCopyTooltip.d.ts +8 -0
  35. package/dist/components/ReferenceWidget.d.ts +3 -1
  36. package/dist/components/SelectableTable/SelectableTable.d.ts +14 -4
  37. package/dist/components/SelectableTable/filters/ReferenceFilterField.d.ts +2 -1
  38. package/dist/components/UnsavedChangesDialog.d.ts +8 -0
  39. package/dist/components/UserDisplay.d.ts +7 -0
  40. package/dist/components/VirtualTable/VirtualTableProps.d.ts +24 -12
  41. package/dist/components/VirtualTable/fields/VirtualTableUserSelect.d.ts +12 -0
  42. package/dist/components/VirtualTable/types.d.ts +3 -3
  43. package/dist/components/{EntityCollectionTable/internal → common}/default_entity_actions.d.ts +1 -3
  44. package/dist/components/common/index.d.ts +2 -1
  45. package/dist/components/common/table_height.d.ts +5 -0
  46. package/dist/components/common/types.d.ts +4 -6
  47. package/dist/components/common/useColumnsIds.d.ts +3 -1
  48. package/dist/components/common/{useDataSourceEntityCollectionTableController.d.ts → useDataSourceTableController.d.ts} +13 -2
  49. package/dist/components/common/useDebouncedCallback.d.ts +1 -0
  50. package/dist/components/common/useScrollRestoration.d.ts +14 -0
  51. package/dist/components/index.d.ts +5 -2
  52. package/dist/contexts/BreacrumbsContext.d.ts +8 -0
  53. package/dist/contexts/InternalUserManagementContext.d.ts +3 -0
  54. package/dist/core/DefaultAppBar.d.ts +29 -0
  55. package/dist/core/DefaultDrawer.d.ts +19 -0
  56. package/dist/core/DrawerNavigationItem.d.ts +10 -0
  57. package/dist/core/EntityEditView.d.ts +43 -11
  58. package/dist/core/EntityEditViewFormActions.d.ts +2 -0
  59. package/dist/core/FireCMS.d.ts +2 -3
  60. package/dist/core/FireCMSRouter.d.ts +4 -0
  61. package/dist/core/NavigationRoutes.d.ts +2 -3
  62. package/dist/core/SideDialogs.d.ts +4 -2
  63. package/dist/core/field_configs.d.ts +1 -1
  64. package/dist/core/index.d.ts +4 -4
  65. package/dist/form/EntityForm.d.ts +37 -64
  66. package/dist/form/EntityFormActions.d.ts +21 -0
  67. package/dist/form/PropertyFieldBinding.d.ts +1 -1
  68. package/dist/form/components/ErrorFocus.d.ts +1 -1
  69. package/dist/form/components/FieldHelperText.d.ts +3 -3
  70. package/dist/form/components/FormEntry.d.ts +6 -0
  71. package/dist/form/components/FormLayout.d.ts +5 -0
  72. package/dist/form/components/LabelWithIcon.d.ts +1 -1
  73. package/dist/form/components/LabelWithIconAndTooltip.d.ts +15 -0
  74. package/dist/form/components/StorageItemPreview.d.ts +4 -4
  75. package/dist/form/components/index.d.ts +3 -1
  76. package/dist/form/field_bindings/ArrayCustomShapedFieldBinding.d.ts +1 -1
  77. package/dist/form/field_bindings/ArrayOfReferencesFieldBinding.d.ts +1 -1
  78. package/dist/form/field_bindings/BlockFieldBinding.d.ts +1 -1
  79. package/dist/form/field_bindings/KeyValueFieldBinding.d.ts +1 -1
  80. package/dist/form/field_bindings/MapFieldBinding.d.ts +1 -1
  81. package/dist/form/field_bindings/MarkdownEditorFieldBinding.d.ts +11 -0
  82. package/dist/form/field_bindings/{MultiSelectBinding.d.ts → MultiSelectFieldBinding.d.ts} +1 -1
  83. package/dist/form/field_bindings/ReadOnlyFieldBinding.d.ts +1 -1
  84. package/dist/form/field_bindings/ReferenceAsStringFieldBinding.d.ts +9 -0
  85. package/dist/form/field_bindings/ReferenceFieldBinding.d.ts +2 -2
  86. package/dist/form/field_bindings/RepeatFieldBinding.d.ts +1 -1
  87. package/dist/form/field_bindings/SelectFieldBinding.d.ts +1 -1
  88. package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +5 -13
  89. package/dist/form/field_bindings/SwitchFieldBinding.d.ts +1 -2
  90. package/dist/form/field_bindings/TextFieldBinding.d.ts +1 -1
  91. package/dist/form/field_bindings/UserSelectFieldBinding.d.ts +12 -0
  92. package/dist/form/index.d.ts +17 -18
  93. package/dist/form/useClearRestoreValue.d.ts +2 -2
  94. package/dist/hooks/data/delete.d.ts +4 -4
  95. package/dist/hooks/data/save.d.ts +4 -5
  96. package/dist/hooks/data/useCollectionFetch.d.ts +1 -1
  97. package/dist/hooks/data/useEntityFetch.d.ts +4 -3
  98. package/dist/hooks/index.d.ts +3 -0
  99. package/dist/hooks/useAuthController.d.ts +1 -1
  100. package/dist/hooks/useBreadcrumbsController.d.ts +26 -0
  101. package/dist/hooks/useBuildNavigationController.d.ts +57 -13
  102. package/dist/hooks/useCollapsedGroups.d.ts +9 -0
  103. package/dist/hooks/useFireCMSContext.d.ts +1 -1
  104. package/dist/hooks/useInternalUserManagementController.d.ts +12 -0
  105. package/dist/hooks/useModeController.d.ts +1 -2
  106. package/dist/hooks/useProjectLog.d.ts +8 -2
  107. package/dist/hooks/useResolvedNavigationFrom.d.ts +3 -3
  108. package/dist/hooks/useValidateAuthenticator.d.ts +4 -8
  109. package/dist/index.d.ts +1 -0
  110. package/dist/index.es.js +23563 -13933
  111. package/dist/index.es.js.map +1 -1
  112. package/dist/index.umd.js +26305 -588
  113. package/dist/index.umd.js.map +1 -1
  114. package/dist/internal/useBuildDataSource.d.ts +3 -17
  115. package/dist/internal/useBuildSideEntityController.d.ts +3 -3
  116. package/dist/internal/useUnsavedChangesDialog.d.ts +7 -9
  117. package/dist/preview/PropertyPreviewProps.d.ts +6 -1
  118. package/dist/preview/components/EnumValuesChip.d.ts +1 -1
  119. package/dist/preview/components/ReferencePreview.d.ts +4 -3
  120. package/dist/preview/components/StorageThumbnail.d.ts +2 -1
  121. package/dist/preview/components/UrlComponentPreview.d.ts +2 -1
  122. package/dist/preview/components/UserPreview.d.ts +8 -0
  123. package/dist/preview/index.d.ts +1 -0
  124. package/dist/preview/util.d.ts +3 -3
  125. package/dist/routes/CustomCMSRoute.d.ts +4 -0
  126. package/dist/routes/FireCMSRoute.d.ts +1 -0
  127. package/dist/routes/HomePageRoute.d.ts +3 -0
  128. package/dist/types/analytics.d.ts +1 -1
  129. package/dist/types/auth.d.ts +8 -10
  130. package/dist/types/collections.d.ts +112 -25
  131. package/dist/types/customization_controller.d.ts +8 -0
  132. package/dist/types/datasource.d.ts +52 -36
  133. package/dist/types/dialogs_controller.d.ts +7 -3
  134. package/dist/types/entities.d.ts +12 -3
  135. package/dist/types/entity_actions.d.ts +72 -8
  136. package/dist/types/entity_callbacks.d.ts +16 -16
  137. package/dist/types/entity_overrides.d.ts +2 -2
  138. package/dist/types/export_import.d.ts +4 -4
  139. package/dist/types/fields.d.ts +74 -42
  140. package/dist/types/firecms.d.ts +31 -3
  141. package/dist/types/firecms_context.d.ts +17 -1
  142. package/dist/types/index.d.ts +1 -1
  143. package/dist/types/internal_user_management.d.ts +20 -0
  144. package/dist/types/navigation.d.ts +62 -19
  145. package/dist/types/permissions.d.ts +4 -4
  146. package/dist/types/plugins.d.ts +58 -13
  147. package/dist/types/properties.d.ts +90 -25
  148. package/dist/types/property_config.d.ts +1 -3
  149. package/dist/types/roles.d.ts +3 -0
  150. package/dist/types/side_dialogs_controller.d.ts +10 -0
  151. package/dist/types/side_entity_controller.d.ts +14 -1
  152. package/dist/types/storage.d.ts +75 -0
  153. package/dist/types/user.d.ts +2 -1
  154. package/dist/util/builders.d.ts +3 -3
  155. package/dist/util/callbacks.d.ts +2 -0
  156. package/dist/util/createFormexStub.d.ts +2 -0
  157. package/dist/util/entities.d.ts +3 -3
  158. package/dist/util/entity_actions.d.ts +2 -0
  159. package/dist/util/entity_cache.d.ts +23 -0
  160. package/dist/util/icon_list.d.ts +5 -1
  161. package/dist/util/icon_synonyms.d.ts +1 -98
  162. package/dist/util/icons.d.ts +7 -4
  163. package/dist/util/index.d.ts +3 -0
  164. package/dist/util/navigation_from_path.d.ts +10 -1
  165. package/dist/util/navigation_utils.d.ts +15 -3
  166. package/dist/util/objects.d.ts +2 -1
  167. package/dist/util/permissions.d.ts +4 -4
  168. package/dist/util/plurals.d.ts +0 -2
  169. package/dist/util/property_utils.d.ts +4 -4
  170. package/dist/util/references.d.ts +2 -2
  171. package/dist/util/resolutions.d.ts +42 -17
  172. package/dist/util/storage.d.ts +23 -2
  173. package/dist/util/useStorageUploadController.d.ts +3 -3
  174. package/package.json +69 -52
  175. package/src/app/AppBar.tsx +18 -0
  176. package/src/app/Drawer.tsx +24 -0
  177. package/src/app/Scaffold.tsx +253 -0
  178. package/src/app/index.ts +4 -0
  179. package/src/app/useApp.tsx +32 -0
  180. package/src/components/ArrayContainer.tsx +447 -229
  181. package/src/components/CircularProgressCenter.tsx +2 -2
  182. package/src/components/ClearFilterSortButton.tsx +41 -0
  183. package/src/components/{DeleteConfirmationDialog.tsx → ConfirmationDialog.tsx} +12 -11
  184. package/src/components/DeleteEntityDialog.tsx +13 -20
  185. package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +65 -40
  186. package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +38 -31
  187. package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +30 -9
  188. package/src/components/EntityCollectionTable/PropertyTableCell.tsx +84 -42
  189. package/src/components/EntityCollectionTable/column_utils.tsx +3 -3
  190. package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +30 -16
  191. package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +19 -17
  192. package/src/components/EntityCollectionTable/index.tsx +1 -1
  193. package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +34 -39
  194. package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +49 -36
  195. package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +20 -8
  196. package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +135 -105
  197. package/src/components/EntityCollectionTable/internal/popup_field/useDraggable.tsx +9 -9
  198. package/src/components/EntityCollectionView/EntityCollectionView.tsx +235 -118
  199. package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +7 -4
  200. package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +68 -0
  201. package/src/components/EntityCollectionView/useSelectionController.tsx +20 -7
  202. package/src/components/EntityCollectionView/utils.ts +19 -0
  203. package/src/components/EntityJsonPreview.tsx +66 -0
  204. package/src/components/EntityPreview.tsx +83 -62
  205. package/src/components/EntityView.tsx +13 -10
  206. package/src/components/ErrorView.tsx +4 -4
  207. package/src/components/FireCMSLogo.tsx +7 -51
  208. package/src/components/HomePage/DefaultHomePage.tsx +511 -157
  209. package/src/components/HomePage/FavouritesView.tsx +9 -14
  210. package/src/components/HomePage/HomePageDnD.tsx +600 -0
  211. package/src/components/HomePage/NavigationCard.tsx +48 -39
  212. package/src/components/HomePage/NavigationCardBinding.tsx +17 -16
  213. package/src/components/HomePage/NavigationGroup.tsx +144 -30
  214. package/src/components/HomePage/RenameGroupDialog.tsx +123 -0
  215. package/src/components/HomePage/SmallNavigationCard.tsx +5 -6
  216. package/src/components/NotFoundPage.tsx +2 -2
  217. package/src/components/PropertyConfigBadge.tsx +9 -3
  218. package/src/components/PropertyIdCopyTooltip.tsx +47 -0
  219. package/src/components/ReferenceTable/ReferenceSelectionTable.tsx +23 -13
  220. package/src/components/ReferenceWidget.tsx +21 -11
  221. package/src/components/SearchIconsView.tsx +10 -7
  222. package/src/components/SelectableTable/SelectableTable.tsx +157 -145
  223. package/src/components/SelectableTable/filters/BooleanFilterField.tsx +2 -3
  224. package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +25 -8
  225. package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +36 -12
  226. package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +93 -24
  227. package/src/components/UnsavedChangesDialog.tsx +46 -0
  228. package/src/components/UserDisplay.tsx +54 -0
  229. package/src/components/VirtualTable/VirtualTable.tsx +105 -51
  230. package/src/components/VirtualTable/VirtualTableCell.tsx +1 -9
  231. package/src/components/VirtualTable/VirtualTableHeader.tsx +10 -10
  232. package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +2 -2
  233. package/src/components/VirtualTable/VirtualTableProps.tsx +28 -14
  234. package/src/components/VirtualTable/VirtualTableRow.tsx +5 -6
  235. package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +5 -5
  236. package/src/components/VirtualTable/fields/VirtualTableInput.tsx +2 -2
  237. package/src/components/VirtualTable/fields/VirtualTableNumberInput.tsx +2 -1
  238. package/src/components/VirtualTable/fields/VirtualTableSelect.tsx +16 -28
  239. package/src/components/VirtualTable/fields/VirtualTableUserSelect.tsx +99 -0
  240. package/src/components/VirtualTable/types.tsx +2 -3
  241. package/src/components/{EntityCollectionTable/internal → common}/default_entity_actions.tsx +64 -44
  242. package/src/components/common/index.ts +2 -1
  243. package/src/components/{VirtualTable/common.tsx → common/table_height.tsx} +5 -2
  244. package/src/components/common/types.tsx +4 -6
  245. package/src/components/common/useColumnsIds.tsx +16 -2
  246. package/src/components/common/useDataSourceTableController.tsx +420 -0
  247. package/src/components/common/useDebouncedCallback.tsx +20 -0
  248. package/src/components/common/useScrollRestoration.tsx +68 -0
  249. package/src/components/common/useTableSearchHelper.ts +53 -12
  250. package/src/components/index.tsx +6 -2
  251. package/src/contexts/BreacrumbsContext.tsx +38 -0
  252. package/src/contexts/DialogsProvider.tsx +5 -4
  253. package/src/contexts/InternalUserManagementContext.tsx +4 -0
  254. package/src/contexts/ModeController.tsx +1 -3
  255. package/src/contexts/SnackbarProvider.tsx +2 -0
  256. package/src/core/DefaultAppBar.tsx +219 -0
  257. package/src/core/DefaultDrawer.tsx +185 -0
  258. package/src/core/DrawerNavigationItem.tsx +66 -0
  259. package/src/core/EntityEditView.tsx +435 -470
  260. package/src/core/EntityEditViewFormActions.tsx +329 -0
  261. package/src/core/EntitySidePanel.tsx +88 -21
  262. package/src/core/FireCMS.tsx +85 -60
  263. package/src/core/FireCMSRouter.tsx +17 -0
  264. package/src/core/NavigationRoutes.tsx +28 -38
  265. package/src/core/SideDialogs.tsx +22 -12
  266. package/src/core/field_configs.tsx +41 -14
  267. package/src/core/index.tsx +6 -5
  268. package/src/form/EntityForm.tsx +620 -534
  269. package/src/form/EntityFormActions.tsx +211 -0
  270. package/src/form/PropertyFieldBinding.tsx +88 -45
  271. package/src/form/components/CustomIdField.tsx +9 -3
  272. package/src/form/components/FieldHelperText.tsx +4 -4
  273. package/src/form/components/FormEntry.tsx +22 -0
  274. package/src/form/components/FormLayout.tsx +16 -0
  275. package/src/form/components/LabelWithIcon.tsx +30 -19
  276. package/src/form/components/LabelWithIconAndTooltip.tsx +28 -0
  277. package/src/form/components/StorageItemPreview.tsx +23 -13
  278. package/src/form/components/StorageUploadProgress.tsx +5 -6
  279. package/src/form/components/index.tsx +3 -1
  280. package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +34 -19
  281. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +50 -36
  282. package/src/form/field_bindings/BlockFieldBinding.tsx +56 -34
  283. package/src/form/field_bindings/DateTimeFieldBinding.tsx +18 -14
  284. package/src/form/field_bindings/KeyValueFieldBinding.tsx +61 -52
  285. package/src/form/field_bindings/MapFieldBinding.tsx +73 -55
  286. package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +159 -0
  287. package/src/form/field_bindings/{MultiSelectBinding.tsx → MultiSelectFieldBinding.tsx} +26 -21
  288. package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +11 -16
  289. package/src/form/field_bindings/ReferenceAsStringFieldBinding.tsx +135 -0
  290. package/src/form/field_bindings/ReferenceFieldBinding.tsx +42 -31
  291. package/src/form/field_bindings/RepeatFieldBinding.tsx +62 -35
  292. package/src/form/field_bindings/SelectFieldBinding.tsx +24 -15
  293. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +257 -199
  294. package/src/form/field_bindings/SwitchFieldBinding.tsx +29 -24
  295. package/src/form/field_bindings/TextFieldBinding.tsx +28 -24
  296. package/src/form/field_bindings/UserSelectFieldBinding.tsx +94 -0
  297. package/src/form/index.tsx +17 -37
  298. package/src/form/useClearRestoreValue.tsx +2 -2
  299. package/src/form/validation.ts +13 -23
  300. package/src/hooks/data/delete.ts +6 -5
  301. package/src/hooks/data/save.ts +26 -33
  302. package/src/hooks/data/useCollectionFetch.tsx +3 -3
  303. package/src/hooks/data/useDataSource.tsx +11 -3
  304. package/src/hooks/data/useEntityFetch.tsx +10 -6
  305. package/src/hooks/index.tsx +4 -0
  306. package/src/hooks/useAuthController.tsx +1 -1
  307. package/src/hooks/useBreadcrumbsController.tsx +31 -0
  308. package/src/hooks/useBrowserTitleAndIcon.tsx +1 -1
  309. package/src/hooks/useBuildLocalConfigurationPersistence.tsx +8 -10
  310. package/src/hooks/useBuildModeController.tsx +22 -29
  311. package/src/hooks/useBuildNavigationController.tsx +440 -119
  312. package/src/hooks/useCollapsedGroups.ts +64 -0
  313. package/src/hooks/useFireCMSContext.tsx +9 -35
  314. package/src/hooks/useInternalUserManagementController.tsx +16 -0
  315. package/src/hooks/useLargeLayout.tsx +0 -35
  316. package/src/hooks/useModeController.tsx +1 -2
  317. package/src/hooks/useProjectLog.tsx +32 -10
  318. package/src/hooks/useResolvedNavigationFrom.tsx +10 -12
  319. package/src/hooks/useValidateAuthenticator.tsx +17 -37
  320. package/src/index.ts +1 -0
  321. package/src/internal/useBuildDataSource.ts +79 -85
  322. package/src/internal/useBuildSideDialogsController.tsx +4 -2
  323. package/src/internal/useBuildSideEntityController.tsx +204 -77
  324. package/src/internal/useUnsavedChangesDialog.tsx +127 -91
  325. package/src/preview/PropertyPreview.tsx +42 -25
  326. package/src/preview/PropertyPreviewProps.tsx +7 -1
  327. package/src/preview/components/BooleanPreview.tsx +2 -2
  328. package/src/preview/components/EmptyValue.tsx +1 -1
  329. package/src/preview/components/EnumValuesChip.tsx +2 -2
  330. package/src/preview/components/ImagePreview.tsx +26 -37
  331. package/src/preview/components/ReferencePreview.tsx +26 -36
  332. package/src/preview/components/StorageThumbnail.tsx +5 -1
  333. package/src/preview/components/UrlComponentPreview.tsx +60 -28
  334. package/src/preview/components/UserPreview.tsx +22 -0
  335. package/src/preview/index.ts +1 -0
  336. package/src/preview/property_previews/ArrayOfMapsPreview.tsx +6 -6
  337. package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +7 -5
  338. package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +5 -4
  339. package/src/preview/property_previews/ArrayOfStringsPreview.tsx +4 -4
  340. package/src/preview/property_previews/ArrayOneOfPreview.tsx +7 -6
  341. package/src/preview/property_previews/ArrayPropertyPreview.tsx +7 -6
  342. package/src/preview/property_previews/MapPropertyPreview.tsx +12 -11
  343. package/src/preview/property_previews/SkeletonPropertyComponent.tsx +13 -13
  344. package/src/preview/property_previews/StringPropertyPreview.tsx +3 -3
  345. package/src/preview/util.ts +10 -10
  346. package/src/routes/CustomCMSRoute.tsx +21 -0
  347. package/src/routes/FireCMSRoute.tsx +246 -0
  348. package/src/routes/HomePageRoute.tsx +17 -0
  349. package/src/types/analytics.ts +3 -0
  350. package/src/types/auth.tsx +9 -13
  351. package/src/types/collections.ts +134 -30
  352. package/src/types/customization_controller.tsx +9 -1
  353. package/src/types/datasource.ts +61 -43
  354. package/src/types/dialogs_controller.tsx +7 -3
  355. package/src/types/entities.ts +19 -3
  356. package/src/types/entity_actions.tsx +86 -10
  357. package/src/types/entity_callbacks.ts +18 -18
  358. package/src/types/entity_overrides.tsx +2 -2
  359. package/src/types/export_import.ts +4 -4
  360. package/src/types/fields.tsx +85 -46
  361. package/src/types/firecms.tsx +34 -4
  362. package/src/types/firecms_context.tsx +18 -1
  363. package/src/types/index.ts +1 -1
  364. package/src/types/internal_user_management.ts +24 -0
  365. package/src/types/navigation.ts +77 -24
  366. package/src/types/permissions.ts +5 -5
  367. package/src/types/plugins.tsx +69 -15
  368. package/src/types/properties.ts +106 -27
  369. package/src/types/property_config.tsx +2 -2
  370. package/src/types/roles.ts +3 -0
  371. package/src/types/side_dialogs_controller.tsx +15 -0
  372. package/src/types/side_entity_controller.tsx +16 -1
  373. package/src/types/storage.ts +83 -1
  374. package/src/types/user.ts +3 -1
  375. package/src/util/builders.ts +10 -8
  376. package/src/util/callbacks.ts +119 -0
  377. package/src/util/createFormexStub.tsx +62 -0
  378. package/src/util/entities.ts +11 -8
  379. package/src/util/entity_actions.ts +28 -0
  380. package/src/util/entity_cache.ts +204 -0
  381. package/src/util/enums.ts +1 -1
  382. package/src/util/icon_list.ts +16 -10
  383. package/src/util/icon_synonyms.ts +3 -100
  384. package/src/util/icons.tsx +36 -11
  385. package/src/util/index.ts +3 -0
  386. package/src/util/join_collections.ts +9 -2
  387. package/src/util/make_properties_editable.ts +13 -5
  388. package/src/util/navigation_from_path.ts +33 -12
  389. package/src/util/navigation_utils.ts +141 -25
  390. package/src/util/objects.ts +90 -33
  391. package/src/util/parent_references_from_path.ts +3 -3
  392. package/src/util/permissions.ts +9 -8
  393. package/src/util/plurals.ts +0 -2
  394. package/src/util/property_utils.tsx +17 -6
  395. package/src/util/references.ts +19 -8
  396. package/src/util/resolutions.ts +122 -48
  397. package/src/util/storage.ts +79 -21
  398. package/src/util/strings.ts +2 -2
  399. package/src/util/useStorageUploadController.tsx +91 -28
  400. package/dist/components/EntityCollectionTable/internal/popup_field/ElementResizeListener.d.ts +0 -5
  401. package/dist/components/FireCMSAppBar.d.ts +0 -26
  402. package/dist/components/PropertyIdCopyTooltipContent.d.ts +0 -3
  403. package/dist/components/VirtualTable/common.d.ts +0 -2
  404. package/dist/core/Drawer.d.ts +0 -23
  405. package/dist/core/Scaffold.d.ts +0 -55
  406. package/dist/core/SideEntityView.d.ts +0 -7
  407. package/dist/form/components/FormikArrayContainer.d.ts +0 -18
  408. package/dist/form/field_bindings/MarkdownFieldBinding.d.ts +0 -9
  409. package/dist/internal/useBuildCustomizationController.d.ts +0 -2
  410. package/dist/internal/useLocaleConfig.d.ts +0 -1
  411. package/dist/types/appcheck.d.ts +0 -26
  412. package/src/components/EntityCollectionTable/internal/popup_field/ElementResizeListener.tsx +0 -59
  413. package/src/components/FireCMSAppBar.tsx +0 -165
  414. package/src/components/PropertyIdCopyTooltipContent.tsx +0 -28
  415. package/src/components/common/useDataSourceEntityCollectionTableController.tsx +0 -225
  416. package/src/core/Drawer.tsx +0 -191
  417. package/src/core/Scaffold.tsx +0 -281
  418. package/src/core/SideEntityView.tsx +0 -38
  419. package/src/form/components/FormikArrayContainer.tsx +0 -44
  420. package/src/form/field_bindings/MarkdownFieldBinding.tsx +0 -695
  421. package/src/internal/useBuildCustomizationController.tsx +0 -5
  422. package/src/internal/useLocaleConfig.tsx +0 -18
  423. package/src/types/appcheck.ts +0 -29
  424. /package/src/util/{common.tsx → common.ts} +0 -0
@@ -5,7 +5,7 @@ import { CircularProgress, CircularProgressProps, Typography } from "@firecms/ui
5
5
  *
6
6
  * @param text
7
7
  * @param props
8
- * @constructor
8
+
9
9
  * @ignore
10
10
  */
11
11
  export function CircularProgressCenter({ text, ...props }: CircularProgressProps & {
@@ -13,7 +13,7 @@ export function CircularProgressCenter({ text, ...props }: CircularProgressProps
13
13
  }) {
14
14
  return (
15
15
  <div
16
- className="flex w-full h-screen max-h-full max-w-full bg-gray-50 dark:bg-gray-900 gap-4">
16
+ className="flex w-full h-screen max-h-full max-w-full gap-4">
17
17
  <div className="m-auto flex flex-col gap-2 items-center">
18
18
  <CircularProgress {...props}/>
19
19
  {text && <Typography
@@ -0,0 +1,41 @@
1
+ import { Button, FilterListOffIcon } from "@firecms/ui";
2
+ import { EntityTableController } from "../types";
3
+
4
+ export function ClearFilterSortButton({
5
+ tableController,
6
+ enabled
7
+ }: {
8
+ enabled: boolean;
9
+ tableController: EntityTableController
10
+ }) {
11
+ if (!enabled) {
12
+ return null;
13
+ }
14
+
15
+ const filterIsSet = !!tableController.filterValues && Object.keys(tableController.filterValues).length > 0;
16
+ const sortIsSet = !!tableController.sortBy && tableController.sortBy.length > 0;
17
+
18
+ if ((filterIsSet || sortIsSet) && (tableController.clearFilter || tableController.setSortBy)) {
19
+ let label;
20
+ if (filterIsSet && sortIsSet) {
21
+ label = "Clear filter/sort";
22
+ } else if (filterIsSet) {
23
+ label = "Clear filter";
24
+ } else {
25
+ label = "Clear sort";
26
+ }
27
+ return <Button
28
+ variant={"outlined"}
29
+ className="h-fit-content"
30
+ aria-label="filter clear"
31
+ onClick={() => {
32
+ tableController.clearFilter?.();
33
+ tableController.setSortBy?.(undefined);
34
+ }}
35
+ size={"small"}>
36
+ <FilterListOffIcon/>
37
+ {label}
38
+ </Button>
39
+ }
40
+ return null;
41
+ }
@@ -1,15 +1,15 @@
1
1
  import React from "react";
2
2
 
3
- import { Button, Dialog, DialogActions, DialogContent, LoadingButton, Typography } from "@firecms/ui";
3
+ import { Button, Dialog, DialogActions, DialogContent, DialogTitle, LoadingButton } from "@firecms/ui";
4
4
 
5
- export function DeleteConfirmationDialog({
6
- open,
7
- onAccept,
8
- onCancel,
9
- title,
10
- loading,
11
- body
12
- }: {
5
+ export function ConfirmationDialog({
6
+ open,
7
+ onAccept,
8
+ onCancel,
9
+ title,
10
+ loading,
11
+ body
12
+ }: {
13
13
  open: boolean,
14
14
  onAccept: () => void,
15
15
  onCancel: () => void,
@@ -22,13 +22,14 @@ export function DeleteConfirmationDialog({
22
22
  open={open}
23
23
  onOpenChange={(open) => !open ? onCancel() : undefined}
24
24
  >
25
+ <DialogTitle variant={"h6"} className={"mb-2"}>{title}</DialogTitle>
25
26
  <DialogContent>
26
- <Typography variant={"h6"} className={"mb-2"}>{title}</Typography>
27
27
  {body}
28
28
  </DialogContent>
29
29
 
30
30
  <DialogActions>
31
31
  <Button
32
+ color={"primary"}
32
33
  variant={"text"}
33
34
  onClick={onCancel}
34
35
  autoFocus>Cancel</Button>
@@ -38,7 +39,7 @@ export function DeleteConfirmationDialog({
38
39
  type="submit"
39
40
  loading={loading}
40
41
  onClick={onAccept}
41
- >
42
+ autoFocus>
42
43
  Ok
43
44
  </LoadingButton>
44
45
  </DialogActions>
@@ -1,8 +1,9 @@
1
1
  import { Entity, EntityCallbacks, EntityCollection } from "../types";
2
2
  import React, { useCallback, useMemo, useState } from "react";
3
- import { Button, CircularProgress, Dialog, DialogActions, DialogContent, Typography } from "@firecms/ui";
3
+ import { Button, CircularProgress, Dialog, DialogActions, DialogContent, DialogTitle } from "@firecms/ui";
4
4
  import {
5
5
  deleteEntityWithCallbacks,
6
+ useAuthController,
6
7
  useCustomizationController,
7
8
  useDataSource,
8
9
  useFireCMSContext,
@@ -34,31 +35,24 @@ export function DeleteEntityDialog<M extends Record<string, any>>({
34
35
  onMultipleEntitiesDelete,
35
36
  path
36
37
  }: DeleteEntityDialogProps<M>) {
37
-
38
+ const authController = useAuthController();
38
39
  const dataSource = useDataSource(collection);
39
40
  const customizationController = useCustomizationController();
40
41
  const snackbarController = useSnackbarController();
41
42
  const [loading, setLoading] = useState(false);
42
43
 
43
- const [entityOrEntities, setUsedEntityOrEntities] = React.useState<Entity<M> | Entity<M>[]>();
44
-
45
- const [multipleEntities, setMultipleEntities] = React.useState<boolean>();
46
44
  const context = useFireCMSContext();
45
+ const entityOrEntities = Array.isArray(entityOrEntitiesToDelete) && entityOrEntitiesToDelete.length === 1
46
+ ? entityOrEntitiesToDelete[0]
47
+ : entityOrEntitiesToDelete;
47
48
 
48
- React.useEffect(() => {
49
- if (entityOrEntitiesToDelete) {
50
- const revisedEntityOrEntities = Array.isArray(entityOrEntitiesToDelete) && entityOrEntitiesToDelete.length === 1
51
- ? entityOrEntitiesToDelete[0]
52
- : entityOrEntitiesToDelete;
53
- setUsedEntityOrEntities(revisedEntityOrEntities);
54
- setMultipleEntities(Array.isArray(revisedEntityOrEntities));
55
- }
56
- }, [entityOrEntitiesToDelete]);
49
+ const multipleEntities = Array.isArray(entityOrEntities);
57
50
 
58
51
  const resolvedCollection = useMemo(() => resolveCollection<M>({
59
52
  collection,
60
53
  path,
61
- fields: customizationController.propertyConfigs
54
+ propertyConfigs: customizationController.propertyConfigs,
55
+ authController
62
56
  }), [collection, path]);
63
57
 
64
58
  const handleCancel = useCallback(() => {
@@ -181,16 +175,15 @@ export function DeleteEntityDialog<M extends Record<string, any>>({
181
175
  open={open}
182
176
  onOpenChange={(open) => !open ? onClose() : undefined}
183
177
  >
178
+ <DialogTitle id="delete-dialog-title">
179
+ {dialogTitle}
180
+ </DialogTitle>
184
181
  <DialogContent fullHeight={true}>
185
- <Typography variant={"subtitle2"} className={"p-4"}>
186
- {dialogTitle}
187
- </Typography>
188
-
189
182
  {!multipleEntities && <div className={"p-4"}>{content}</div>}
190
183
  </DialogContent>
191
184
  <DialogActions>
192
185
 
193
- {loading && <CircularProgress size={"small"}/>}
186
+ {loading && <CircularProgress size={"smallest"}/>}
194
187
 
195
188
  <Button onClick={handleCancel}
196
189
  disabled={loading}
@@ -1,8 +1,20 @@
1
1
  import React, { MouseEvent, useCallback } from "react";
2
2
 
3
3
  import { CollectionSize, Entity, EntityAction, EntityCollection, SelectionController } from "../../types";
4
- import { Checkbox, cn, IconButton, Menu, MenuItem, MoreVertIcon, Skeleton, Tooltip, Typography } from "@firecms/ui";
4
+ import {
5
+ Checkbox,
6
+ Chip,
7
+ cls,
8
+ EditIcon,
9
+ IconButton,
10
+ Menu,
11
+ MenuItem,
12
+ MoreVertIcon,
13
+ Skeleton,
14
+ Tooltip
15
+ } from "@firecms/ui";
5
16
  import { useFireCMSContext, useLargeLayout } from "../../hooks";
17
+ import { hasEntityInCache } from "../../util/entity_cache";
6
18
 
7
19
  /**
8
20
  *
@@ -14,7 +26,6 @@ import { useFireCMSContext, useLargeLayout } from "../../hooks";
14
26
  * @param size
15
27
  * @param toggleEntitySelection
16
28
  * @param hideId
17
- * @constructor
18
29
  *
19
30
  * @group Collection components
20
31
  */
@@ -22,6 +33,7 @@ export const EntityCollectionRowActions = function EntityCollectionRowActions({
22
33
  entity,
23
34
  collection,
24
35
  fullPath,
36
+ fullIdPath,
25
37
  width,
26
38
  frozen,
27
39
  isSelected,
@@ -33,35 +45,33 @@ export const EntityCollectionRowActions = function EntityCollectionRowActions({
33
45
  actions = [],
34
46
  hideId,
35
47
  selectionController,
48
+ openEntityMode
36
49
  }:
37
- {
38
- entity: Entity<any>,
39
- collection?: EntityCollection<any>,
40
- fullPath?: string,
41
- width: number,
42
- frozen?: boolean,
43
- size: CollectionSize,
44
- isSelected?: boolean,
45
- selectionEnabled?: boolean,
46
- actions?: EntityAction[],
47
- hideId?: boolean,
48
- onCollectionChange?: () => void,
49
- selectionController?: SelectionController;
50
- highlightEntity?: (entity: Entity<any>) => void;
51
- unhighlightEntity?: (entity: Entity<any>) => void;
52
- }) {
50
+ {
51
+ entity: Entity<any>,
52
+ collection?: EntityCollection<any>,
53
+ fullPath?: string,
54
+ fullIdPath?: string,
55
+ width: number,
56
+ frozen?: boolean,
57
+ size: CollectionSize,
58
+ isSelected?: boolean,
59
+ selectionEnabled?: boolean,
60
+ actions?: EntityAction[],
61
+ hideId?: boolean,
62
+ onCollectionChange?: () => void,
63
+ selectionController?: SelectionController;
64
+ highlightEntity?: (entity: Entity<any>) => void;
65
+ unhighlightEntity?: (entity: Entity<any>) => void;
66
+ openEntityMode: "side_panel" | "full_screen";
67
+ }) {
53
68
 
54
69
  const largeLayout = useLargeLayout();
55
70
 
56
71
  const context = useFireCMSContext();
57
72
 
58
73
  const onCheckedChange = useCallback((checked: boolean) => {
59
- selectionController?.toggleEntitySelection(entity);
60
- }, [entity, selectionController?.toggleEntitySelection]);
61
-
62
- const onClick = useCallback((event: MouseEvent) => {
63
- event.stopPropagation();
64
- selectionController?.toggleEntitySelection(entity);
74
+ selectionController?.toggleEntitySelection(entity, checked);
65
75
  }, [entity, selectionController?.toggleEntitySelection]);
66
76
 
67
77
  const hasActions = actions.length > 0;
@@ -69,13 +79,16 @@ export const EntityCollectionRowActions = function EntityCollectionRowActions({
69
79
 
70
80
  const collapsedActions = actions.filter(a => a.collapsed || a.collapsed === undefined);
71
81
  const uncollapsedActions = actions.filter(a => a.collapsed === false);
82
+ const hasDraft = hasEntityInCache(fullPath + "/" + entity.id);
72
83
  return (
73
84
  <div
74
- onClick={onClick}
75
- className={cn(
76
- "h-full flex items-center justify-center flex-col bg-gray-50 dark:bg-gray-900 bg-opacity-90 dark:bg-opacity-90 z-10",
85
+ className={cls(
86
+ "h-full flex items-center justify-center flex-col bg-surface-50 dark:bg-surface-900 bg-opacity-90 dark:bg-opacity-90 z-10",
77
87
  frozen ? "sticky left-0" : ""
78
88
  )}
89
+ onClick={useCallback((event: any) => {
90
+ event.stopPropagation();
91
+ }, [])}
79
92
  style={{
80
93
  width,
81
94
  position: frozen ? "sticky" : "initial",
@@ -87,19 +100,24 @@ export const EntityCollectionRowActions = function EntityCollectionRowActions({
87
100
  <div className="w-34 flex justify-center">
88
101
 
89
102
  {uncollapsedActions.map((action, index) => (
90
- <Tooltip key={index} title={action.name}>
103
+ <Tooltip key={index}
104
+ title={action.name}
105
+ asChild={true}>
91
106
  <IconButton
92
107
  onClick={(event: MouseEvent) => {
93
108
  event.stopPropagation();
94
109
  action.onClick({
110
+ view: "collection",
95
111
  entity,
96
112
  fullPath,
113
+ fullIdPath,
97
114
  collection,
98
115
  context,
99
116
  selectionController,
100
117
  highlightEntity,
101
118
  unhighlightEntity,
102
119
  onCollectionChange,
120
+ openEntityMode: openEntityMode ?? collection?.openEntityMode
103
121
  });
104
122
  }}
105
123
  size={largeLayout ? "medium" : "small"}>
@@ -120,14 +138,17 @@ export const EntityCollectionRowActions = function EntityCollectionRowActions({
120
138
  onClick={(e) => {
121
139
  e.stopPropagation();
122
140
  action.onClick({
141
+ view: "collection",
123
142
  entity,
124
143
  fullPath,
144
+ fullIdPath,
125
145
  collection,
126
146
  context,
127
147
  selectionController,
128
148
  highlightEntity,
129
149
  unhighlightEntity,
130
150
  onCollectionChange,
151
+ openEntityMode: openEntityMode ?? collection?.openEntityMode
131
152
  });
132
153
  }}>
133
154
  {action.icon}
@@ -149,18 +170,22 @@ export const EntityCollectionRowActions = function EntityCollectionRowActions({
149
170
  </div>}
150
171
 
151
172
  {!hideId && size !== "xs" && (
152
- <div className="w-[138px] text-center overflow-hidden truncate">
153
-
154
- {entity
155
- ? <Typography
156
- onClick={(event) => {
157
- event.stopPropagation();
158
- }}
159
- className={"font-mono select-all"}
160
- variant={"caption"}
161
- color={"secondary"}> {entity.id} </Typography>
162
- : <Skeleton/>
163
- }
173
+ <div
174
+ className="w-[138px] overflow-hidden truncate font-mono text-xs text-text-secondary dark:text-text-secondary-dark max-w-full text-ellipsis px-2 align-center justify-center flex items-center gap-1"
175
+ onClick={(event) => {
176
+ event.stopPropagation();
177
+ }}>
178
+ {hasDraft && <Tooltip title={"Local unsaved changes"} className={"inline"}>
179
+ <Chip colorScheme={"orangeDarker"} className={"p-0.5"}>
180
+ <EditIcon size={12}/>
181
+ </Chip>
182
+ </Tooltip>}
183
+ <span className="min-w-0 truncate text-center">
184
+ {entity
185
+ ? entity.id
186
+ : <Skeleton/>
187
+ }
188
+ </span>
164
189
  </div>
165
190
  )}
166
191
 
@@ -5,7 +5,6 @@ import { ErrorBoundary } from "../ErrorBoundary";
5
5
  import { useFireCMSContext, useLargeLayout } from "../../hooks";
6
6
  import { CellRendererParams, VirtualTableColumn } from "../VirtualTable";
7
7
  import { getValueInPath } from "../../util";
8
- import { getRowHeight } from "../VirtualTable/common";
9
8
  import { EntityCollectionRowActions } from "./EntityCollectionRowActions";
10
9
  import { CollectionTableToolbar } from "./internal/CollectionTableToolbar";
11
10
  import { EntityCollectionTableProps } from "./EntityCollectionTableProps";
@@ -15,7 +14,8 @@ import { renderSkeletonText } from "../../preview";
15
14
  import { propertiesToColumns } from "./column_utils";
16
15
  import { ErrorView } from "../ErrorView";
17
16
  import { SelectableTable } from "../SelectableTable/SelectableTable";
18
-
17
+ import { cls } from "@firecms/ui";
18
+ import { getRowHeight } from "../common/table_height";
19
19
 
20
20
  /**
21
21
  * This component is in charge of rendering a collection table with a high
@@ -34,15 +34,17 @@ import { SelectableTable } from "../SelectableTable/SelectableTable";
34
34
  *
35
35
  * The data displayed in the table is managed by a {@link EntityTableController}.
36
36
  * You can build the default, bound to a path in the datasource, by using the hook
37
- * {@link useDataSourceEntityCollectionTableController}
37
+ * {@link useDataSourceTableController}
38
38
  *
39
39
  * @see EntityCollectionTableProps
40
40
  * @see EntityCollectionView
41
41
  * @see VirtualTable
42
42
  * @group Components
43
43
  */
44
- export const EntityCollectionTable = function EntityCollectionTable<M extends Record<string, any>, UserType extends User>
44
+ export const EntityCollectionTable = function EntityCollectionTable<M extends Record<string, any> = any, USER extends User = any>
45
45
  ({
46
+ className,
47
+ style,
46
48
  forceFilter,
47
49
  actionsStart,
48
50
  actions,
@@ -55,6 +57,8 @@ export const EntityCollectionTable = function EntityCollectionTable<M extends Re
55
57
  highlightedEntities,
56
58
  onEntityClick,
57
59
  onColumnResize,
60
+ initialScroll,
61
+ onScroll,
58
62
  onSizeChanged,
59
63
  textSearchEnabled = false,
60
64
  hoverRow = true,
@@ -73,23 +77,20 @@ export const EntityCollectionTable = function EntityCollectionTable<M extends Re
73
77
  emptyComponent,
74
78
  getIdColumnWidth,
75
79
  onTextSearchClick,
76
- textSearchLoading
80
+ textSearchLoading,
81
+ enablePopupIcon,
82
+ openEntityMode = "side_panel"
77
83
  }: EntityCollectionTableProps<M>) {
78
84
 
79
85
  const ref = useRef<HTMLDivElement>(null);
80
86
 
81
87
  const largeLayout = useLargeLayout();
82
- const disabledFilterChange = Boolean(forceFilter);
83
88
  const selectedEntities = (selectionController?.selectedEntities?.length > 0 ? selectionController?.selectedEntities : highlightedEntities)?.filter(Boolean);
84
89
 
85
- const context: FireCMSContext<UserType> = useFireCMSContext();
90
+ const context: FireCMSContext<USER> = useFireCMSContext();
86
91
 
87
92
  const [size, setSize] = React.useState<CollectionSize>(defaultSize ?? "m");
88
93
 
89
- const selectedEntityIds = selectedEntities?.map(e => e.id);
90
-
91
- const filterIsSet = !!tableController.filterValues && Object.keys(tableController.filterValues).length > 0;
92
-
93
94
  const updateSize = useCallback((size: CollectionSize) => {
94
95
  if (onSizeChanged)
95
96
  onSizeChanged(size);
@@ -98,12 +99,12 @@ export const EntityCollectionTable = function EntityCollectionTable<M extends Re
98
99
 
99
100
  const onTextSearch = useCallback((newSearchString?: string) => tableController.setSearchString?.(newSearchString), []);
100
101
 
101
- const additionalFieldsMap: Record<string, AdditionalFieldDelegate<M, UserType>> = useMemo(() => {
102
+ const additionalFieldsMap: Record<string, AdditionalFieldDelegate<M, USER>> = useMemo(() => {
102
103
  return (additionalFields
103
104
  ? additionalFields
104
105
  .map((aC) => ({ [aC.key]: aC as AdditionalFieldDelegate<M, any> }))
105
106
  .reduce((a, b) => ({ ...a, ...b }), {})
106
- : {}) as Record<string, AdditionalFieldDelegate<M, UserType>>;
107
+ : {}) as Record<string, AdditionalFieldDelegate<M, USER>>;
107
108
  }, [additionalFields]);
108
109
 
109
110
  const customFieldValidator: CustomFieldValidator | undefined = uniqueFieldValidator;
@@ -120,10 +121,8 @@ export const EntityCollectionTable = function EntityCollectionTable<M extends Re
120
121
  const propertyKey = column.key;
121
122
 
122
123
  let disabled = column.custom?.disabled;
123
- const propertyValue = entity.values ? getValueInPath(entity.values, propertyKey) : undefined;
124
124
  const property = getPropertyFor?.({
125
125
  propertyKey,
126
- propertyValue,
127
126
  entity
128
127
  }) ?? column.custom.resolvedProperty;
129
128
  if (!property?.disabled) {
@@ -150,6 +149,7 @@ export const EntityCollectionTable = function EntityCollectionTable<M extends Re
150
149
  height={getRowHeight(size)}
151
150
  entity={entity}
152
151
  disabled={disabled}
152
+ enablePopupIcon={enablePopupIcon}
153
153
  path={entity.path}/>
154
154
  : renderSkeletonText()
155
155
  }
@@ -177,9 +177,14 @@ export const EntityCollectionTable = function EntityCollectionTable<M extends Re
177
177
  throw new Error("When using additional fields you need to provide a Builder or a value");
178
178
  }
179
179
 
180
- const child = Builder
180
+ const child: React.ReactNode = Builder
181
181
  ? <Builder entity={entity} context={context}/>
182
- : <>{additionalField.value?.({ entity, context })}</>;
182
+ : <>
183
+ {additionalField.value?.({
184
+ entity,
185
+ context
186
+ })?.toString()}
187
+ </>;
183
188
 
184
189
  return (
185
190
  <EntityTableCell
@@ -200,14 +205,13 @@ export const EntityCollectionTable = function EntityCollectionTable<M extends Re
200
205
  </EntityTableCell>
201
206
  );
202
207
 
203
- }, [size, selectedEntityIds]);
208
+ }, [size]);
204
209
 
205
210
  const collectionColumns: VirtualTableColumn[] = (() => {
206
211
  const columnsResult: VirtualTableColumn[] = propertiesToColumns({
207
212
  properties,
208
213
  sortable,
209
214
  forceFilter,
210
- disabledFilter: disabledFilterChange,
211
215
  AdditionalHeaderWidget
212
216
  });
213
217
 
@@ -237,13 +241,15 @@ export const EntityCollectionTable = function EntityCollectionTable<M extends Re
237
241
 
238
242
  const columns: VirtualTableColumn[] = [
239
243
  idColumn,
240
- ...displayedColumnIds
241
- .map((p) => {
242
- return collectionColumns.find(c => c.key === p.key);
243
- }).filter(Boolean) as VirtualTableColumn[]
244
+ ...(displayedColumnIds
245
+ ? displayedColumnIds
246
+ .map((p) => {
247
+ return collectionColumns.find(c => c.key === p.key);
248
+ }).filter(Boolean)
249
+ : collectionColumns) as VirtualTableColumn[]
244
250
  ];
245
251
 
246
- const cellRenderer = (props: CellRendererParams<any>) => {
252
+ const cellRenderer = useCallback((props: CellRendererParams<any>) => {
247
253
  const column = props.column;
248
254
  const columns = props.columns;
249
255
  const columnKey = column.key;
@@ -262,7 +268,8 @@ export const EntityCollectionTable = function EntityCollectionTable<M extends Re
262
268
  width={column.width}
263
269
  frozen={column.frozen}
264
270
  isSelected={false}
265
- size={size}/>;
271
+ size={size}
272
+ openEntityMode={openEntityMode}/>;
266
273
  } else if (additionalFieldsMap[columnKey]) {
267
274
  return additionalCellRenderer(props);
268
275
  } else if (props.columnIndex < columns.length + 1) {
@@ -283,20 +290,18 @@ export const EntityCollectionTable = function EntityCollectionTable<M extends Re
283
290
  <ErrorView error={e}/>
284
291
  </EntityTableCell>;
285
292
  }
286
- }
293
+ }, [tableRowActionsBuilder, additionalCellRenderer, propertyCellRenderer, size]);
287
294
 
288
295
  return (
289
296
 
290
297
  <div ref={ref}
291
- className="h-full w-full flex flex-col bg-white dark:bg-gray-950">
298
+ style={style}
299
+ className={cls("h-full w-full flex flex-col bg-white dark:bg-surface-950", className)}>
292
300
 
293
301
  <CollectionTableToolbar
294
- forceFilter={disabledFilterChange}
295
- filterIsSet={filterIsSet}
296
302
  onTextSearch={textSearchEnabled ? onTextSearch : undefined}
297
303
  textSearchLoading={textSearchLoading}
298
304
  onTextSearchClick={textSearchEnabled ? onTextSearchClick : undefined}
299
- clearFilter={tableController.clearFilter}
300
305
  size={size}
301
306
  onSizeChanged={updateSize}
302
307
  title={title}
@@ -309,9 +314,11 @@ export const EntityCollectionTable = function EntityCollectionTable<M extends Re
309
314
  inlineEditing={inlineEditing}
310
315
  cellRenderer={cellRenderer}
311
316
  onEntityClick={onEntityClick}
312
- highlightedRow={useCallback((entity: Entity<M>) => selectedEntityIds?.includes(entity.id) ?? false, [selectedEntityIds])}
317
+ highlightedRow={(entity: Entity<M>) => Boolean(selectedEntities?.find(e => e.id === entity.id && e.path === entity.path))}
313
318
  tableController={tableController}
314
319
  onValueChange={onValueChange}
320
+ initialScroll={initialScroll}
321
+ onScroll={onScroll}
315
322
  onColumnResize={onColumnResize}
316
323
  hoverRow={hoverRow}
317
324
  filterable={filterable}