@firecms/core 3.0.0-canary.21 → 3.0.0-canary.210

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 (380) 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 +23 -6
  8. package/dist/components/CircularProgressCenter.d.ts +1 -1
  9. package/dist/components/ClearFilterSortButton.d.ts +5 -0
  10. package/dist/components/{DeleteConfirmationDialog.d.ts → ConfirmationDialog.d.ts} +1 -1
  11. package/dist/components/EntityCollectionTable/EntityCollectionRowActions.d.ts +13 -13
  12. package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +2 -2
  13. package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +22 -6
  14. package/dist/components/EntityCollectionTable/PropertyTableCell.d.ts +1 -0
  15. package/dist/components/EntityCollectionTable/column_utils.d.ts +1 -2
  16. package/dist/components/EntityCollectionTable/fields/TableReferenceField.d.ts +3 -1
  17. package/dist/components/EntityCollectionTable/index.d.ts +1 -1
  18. package/dist/components/EntityCollectionTable/internal/CollectionTableToolbar.d.ts +1 -4
  19. package/dist/components/EntityCollectionTable/internal/EntityTableCell.d.ts +2 -2
  20. package/dist/components/EntityCollectionTable/internal/popup_field/PopupFormField.d.ts +7 -4
  21. package/dist/components/EntityCollectionView/EntityCollectionView.d.ts +16 -2
  22. package/dist/components/EntityCollectionView/EntityCollectionViewStartActions.d.ts +11 -0
  23. package/dist/components/EntityCollectionView/utils.d.ts +3 -0
  24. package/dist/components/EntityPreview.d.ts +5 -4
  25. package/dist/components/ErrorView.d.ts +1 -1
  26. package/dist/components/HomePage/DefaultHomePage.d.ts +1 -1
  27. package/dist/components/HomePage/NavigationCardBinding.d.ts +1 -1
  28. package/dist/components/PropertyConfigBadge.d.ts +2 -1
  29. package/dist/components/PropertyIdCopyTooltip.d.ts +8 -0
  30. package/dist/components/ReferenceWidget.d.ts +3 -1
  31. package/dist/components/SelectableTable/SelectableTable.d.ts +13 -3
  32. package/dist/components/SelectableTable/filters/ReferenceFilterField.d.ts +2 -1
  33. package/dist/components/UnsavedChangesDialog.d.ts +8 -0
  34. package/dist/components/VirtualTable/VirtualTableProps.d.ts +28 -12
  35. package/dist/components/VirtualTable/types.d.ts +3 -3
  36. package/dist/components/{EntityCollectionTable/internal → common}/default_entity_actions.d.ts +1 -3
  37. package/dist/components/common/index.d.ts +2 -1
  38. package/dist/components/common/table_height.d.ts +5 -0
  39. package/dist/components/common/types.d.ts +4 -6
  40. package/dist/components/common/useColumnsIds.d.ts +3 -1
  41. package/dist/components/common/{useDataSourceEntityCollectionTableController.d.ts → useDataSourceTableController.d.ts} +13 -2
  42. package/dist/components/common/useDebouncedCallback.d.ts +1 -0
  43. package/dist/components/common/useScrollRestoration.d.ts +14 -0
  44. package/dist/components/index.d.ts +4 -2
  45. package/dist/contexts/BreacrumbsContext.d.ts +8 -0
  46. package/dist/core/DefaultAppBar.d.ts +29 -0
  47. package/dist/core/DefaultDrawer.d.ts +19 -0
  48. package/dist/core/DrawerNavigationItem.d.ts +10 -0
  49. package/dist/core/EntityEditView.d.ts +33 -11
  50. package/dist/core/EntityEditViewFormActions.d.ts +2 -0
  51. package/dist/core/FireCMS.d.ts +3 -3
  52. package/dist/core/FireCMSRouter.d.ts +4 -0
  53. package/dist/core/NavigationRoutes.d.ts +2 -3
  54. package/dist/core/SideDialogs.d.ts +4 -2
  55. package/dist/core/index.d.ts +4 -4
  56. package/dist/form/EntityForm.d.ts +37 -69
  57. package/dist/form/EntityFormActions.d.ts +17 -0
  58. package/dist/form/PropertyFieldBinding.d.ts +1 -1
  59. package/dist/form/components/ErrorFocus.d.ts +1 -1
  60. package/dist/form/components/FieldHelperText.d.ts +3 -3
  61. package/dist/form/components/FormEntry.d.ts +6 -0
  62. package/dist/form/components/FormLayout.d.ts +5 -0
  63. package/dist/form/components/LabelWithIcon.d.ts +1 -1
  64. package/dist/form/components/LabelWithIconAndTooltip.d.ts +15 -0
  65. package/dist/form/components/StorageItemPreview.d.ts +4 -4
  66. package/dist/form/components/index.d.ts +3 -1
  67. package/dist/form/field_bindings/ArrayCustomShapedFieldBinding.d.ts +1 -1
  68. package/dist/form/field_bindings/ArrayOfReferencesFieldBinding.d.ts +1 -1
  69. package/dist/form/field_bindings/BlockFieldBinding.d.ts +1 -1
  70. package/dist/form/field_bindings/KeyValueFieldBinding.d.ts +1 -1
  71. package/dist/form/field_bindings/MapFieldBinding.d.ts +1 -1
  72. package/dist/form/field_bindings/MarkdownEditorFieldBinding.d.ts +11 -0
  73. package/dist/form/field_bindings/{MultiSelectBinding.d.ts → MultiSelectFieldBinding.d.ts} +1 -1
  74. package/dist/form/field_bindings/ReadOnlyFieldBinding.d.ts +1 -1
  75. package/dist/form/field_bindings/ReferenceFieldBinding.d.ts +2 -2
  76. package/dist/form/field_bindings/RepeatFieldBinding.d.ts +1 -1
  77. package/dist/form/field_bindings/SelectFieldBinding.d.ts +1 -1
  78. package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +3 -5
  79. package/dist/form/field_bindings/SwitchFieldBinding.d.ts +1 -2
  80. package/dist/form/field_bindings/TextFieldBinding.d.ts +1 -1
  81. package/dist/form/index.d.ts +16 -18
  82. package/dist/form/useClearRestoreValue.d.ts +2 -2
  83. package/dist/hooks/data/delete.d.ts +4 -4
  84. package/dist/hooks/data/save.d.ts +4 -5
  85. package/dist/hooks/data/useCollectionFetch.d.ts +1 -1
  86. package/dist/hooks/data/useEntityFetch.d.ts +4 -3
  87. package/dist/hooks/index.d.ts +1 -0
  88. package/dist/hooks/useAuthController.d.ts +1 -1
  89. package/dist/hooks/useBreadcrumbsController.d.ts +26 -0
  90. package/dist/hooks/useBuildNavigationController.d.ts +7 -5
  91. package/dist/hooks/useFireCMSContext.d.ts +1 -1
  92. package/dist/hooks/useModeController.d.ts +1 -2
  93. package/dist/hooks/useProjectLog.d.ts +8 -2
  94. package/dist/hooks/useResolvedNavigationFrom.d.ts +3 -3
  95. package/dist/hooks/useValidateAuthenticator.d.ts +4 -8
  96. package/dist/index.d.ts +1 -0
  97. package/dist/index.es.js +21823 -14330
  98. package/dist/index.es.js.map +1 -1
  99. package/dist/index.umd.js +24174 -588
  100. package/dist/index.umd.js.map +1 -1
  101. package/dist/internal/useBuildDataSource.d.ts +1 -16
  102. package/dist/internal/useBuildSideEntityController.d.ts +2 -2
  103. package/dist/internal/useUnsavedChangesDialog.d.ts +7 -9
  104. package/dist/preview/PropertyPreviewProps.d.ts +6 -1
  105. package/dist/preview/components/EnumValuesChip.d.ts +1 -1
  106. package/dist/preview/components/ReferencePreview.d.ts +3 -2
  107. package/dist/preview/components/StorageThumbnail.d.ts +2 -1
  108. package/dist/preview/components/UrlComponentPreview.d.ts +2 -1
  109. package/dist/preview/util.d.ts +3 -3
  110. package/dist/routes/CustomCMSRoute.d.ts +4 -0
  111. package/dist/routes/FireCMSRoute.d.ts +1 -0
  112. package/dist/routes/HomePageRoute.d.ts +3 -0
  113. package/dist/types/auth.d.ts +8 -10
  114. package/dist/types/collections.d.ts +77 -22
  115. package/dist/types/datasource.d.ts +52 -36
  116. package/dist/types/dialogs_controller.d.ts +7 -3
  117. package/dist/types/entities.d.ts +7 -2
  118. package/dist/types/entity_actions.d.ts +28 -4
  119. package/dist/types/entity_callbacks.d.ts +16 -16
  120. package/dist/types/entity_overrides.d.ts +2 -2
  121. package/dist/types/export_import.d.ts +4 -4
  122. package/dist/types/fields.d.ts +71 -42
  123. package/dist/types/firecms.d.ts +6 -2
  124. package/dist/types/firecms_context.d.ts +1 -1
  125. package/dist/types/index.d.ts +0 -1
  126. package/dist/types/navigation.d.ts +32 -14
  127. package/dist/types/permissions.d.ts +4 -4
  128. package/dist/types/plugins.d.ts +23 -12
  129. package/dist/types/properties.d.ts +52 -24
  130. package/dist/types/property_config.d.ts +0 -2
  131. package/dist/types/side_dialogs_controller.d.ts +10 -0
  132. package/dist/types/side_entity_controller.d.ts +6 -1
  133. package/dist/types/storage.d.ts +86 -3
  134. package/dist/types/user.d.ts +1 -0
  135. package/dist/util/builders.d.ts +3 -3
  136. package/dist/util/entities.d.ts +3 -3
  137. package/dist/util/entity_actions.d.ts +2 -0
  138. package/dist/util/entity_cache.d.ts +23 -0
  139. package/dist/util/icon_list.d.ts +5 -1
  140. package/dist/util/icon_synonyms.d.ts +1 -98
  141. package/dist/util/icons.d.ts +6 -3
  142. package/dist/util/index.d.ts +2 -0
  143. package/dist/util/navigation_from_path.d.ts +6 -1
  144. package/dist/util/navigation_utils.d.ts +14 -3
  145. package/dist/util/objects.d.ts +2 -1
  146. package/dist/util/permissions.d.ts +4 -4
  147. package/dist/util/plurals.d.ts +0 -2
  148. package/dist/util/property_utils.d.ts +3 -3
  149. package/dist/util/resolutions.d.ts +36 -17
  150. package/dist/util/storage.d.ts +23 -2
  151. package/dist/util/useStorageUploadController.d.ts +3 -3
  152. package/package.json +61 -48
  153. package/src/app/AppBar.tsx +18 -0
  154. package/src/app/Drawer.tsx +24 -0
  155. package/src/app/Scaffold.tsx +253 -0
  156. package/src/app/index.ts +4 -0
  157. package/src/app/useApp.tsx +32 -0
  158. package/src/components/ArrayContainer.tsx +127 -41
  159. package/src/components/CircularProgressCenter.tsx +2 -2
  160. package/src/components/ClearFilterSortButton.tsx +41 -0
  161. package/src/components/{DeleteConfirmationDialog.tsx → ConfirmationDialog.tsx} +3 -3
  162. package/src/components/DeleteEntityDialog.tsx +10 -19
  163. package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +54 -37
  164. package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +38 -31
  165. package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +30 -9
  166. package/src/components/EntityCollectionTable/PropertyTableCell.tsx +47 -39
  167. package/src/components/EntityCollectionTable/column_utils.tsx +3 -3
  168. package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +30 -16
  169. package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +19 -17
  170. package/src/components/EntityCollectionTable/index.tsx +1 -1
  171. package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +31 -36
  172. package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +36 -34
  173. package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +20 -8
  174. package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +81 -80
  175. package/src/components/EntityCollectionView/EntityCollectionView.tsx +207 -113
  176. package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +4 -2
  177. package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +68 -0
  178. package/src/components/EntityCollectionView/useSelectionController.tsx +20 -7
  179. package/src/components/EntityCollectionView/utils.ts +19 -0
  180. package/src/components/EntityPreview.tsx +62 -52
  181. package/src/components/EntityView.tsx +10 -10
  182. package/src/components/ErrorView.tsx +4 -4
  183. package/src/components/HomePage/DefaultHomePage.tsx +26 -19
  184. package/src/components/HomePage/FavouritesView.tsx +6 -11
  185. package/src/components/HomePage/NavigationCard.tsx +3 -3
  186. package/src/components/HomePage/NavigationCardBinding.tsx +5 -10
  187. package/src/components/HomePage/NavigationGroup.tsx +2 -2
  188. package/src/components/HomePage/SmallNavigationCard.tsx +5 -6
  189. package/src/components/NotFoundPage.tsx +2 -2
  190. package/src/components/PropertyConfigBadge.tsx +9 -3
  191. package/src/components/PropertyIdCopyTooltip.tsx +47 -0
  192. package/src/components/ReferenceTable/ReferenceSelectionTable.tsx +19 -13
  193. package/src/components/ReferenceWidget.tsx +21 -11
  194. package/src/components/SearchIconsView.tsx +10 -7
  195. package/src/components/SelectableTable/SelectableTable.tsx +27 -12
  196. package/src/components/SelectableTable/filters/BooleanFilterField.tsx +2 -3
  197. package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +25 -8
  198. package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +36 -12
  199. package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +92 -23
  200. package/src/components/UnsavedChangesDialog.tsx +42 -0
  201. package/src/components/VirtualTable/VirtualTable.tsx +96 -48
  202. package/src/components/VirtualTable/VirtualTableCell.tsx +1 -9
  203. package/src/components/VirtualTable/VirtualTableHeader.tsx +10 -10
  204. package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +2 -2
  205. package/src/components/VirtualTable/VirtualTableProps.tsx +33 -14
  206. package/src/components/VirtualTable/VirtualTableRow.tsx +5 -6
  207. package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +5 -5
  208. package/src/components/VirtualTable/fields/VirtualTableInput.tsx +3 -2
  209. package/src/components/VirtualTable/fields/VirtualTableNumberInput.tsx +2 -1
  210. package/src/components/VirtualTable/fields/VirtualTableSelect.tsx +16 -28
  211. package/src/components/VirtualTable/types.tsx +2 -3
  212. package/src/components/{EntityCollectionTable/internal → common}/default_entity_actions.tsx +33 -40
  213. package/src/components/common/index.ts +2 -1
  214. package/src/components/{VirtualTable/common.tsx → common/table_height.tsx} +5 -2
  215. package/src/components/common/types.tsx +4 -6
  216. package/src/components/common/useColumnsIds.tsx +24 -3
  217. package/src/components/common/useDataSourceTableController.tsx +420 -0
  218. package/src/components/common/useDebouncedCallback.tsx +20 -0
  219. package/src/components/common/useScrollRestoration.tsx +68 -0
  220. package/src/components/common/useTableSearchHelper.ts +53 -12
  221. package/src/components/index.tsx +4 -2
  222. package/src/contexts/BreacrumbsContext.tsx +38 -0
  223. package/src/contexts/DialogsProvider.tsx +5 -4
  224. package/src/contexts/ModeController.tsx +1 -3
  225. package/src/contexts/SnackbarProvider.tsx +2 -0
  226. package/src/core/DefaultAppBar.tsx +219 -0
  227. package/src/core/DefaultDrawer.tsx +185 -0
  228. package/src/core/DrawerNavigationItem.tsx +66 -0
  229. package/src/core/EntityEditView.tsx +321 -479
  230. package/src/core/EntityEditViewFormActions.tsx +199 -0
  231. package/src/core/EntitySidePanel.tsx +86 -17
  232. package/src/core/FireCMS.tsx +56 -49
  233. package/src/core/FireCMSRouter.tsx +17 -0
  234. package/src/core/NavigationRoutes.tsx +28 -38
  235. package/src/core/SideDialogs.tsx +22 -12
  236. package/src/core/field_configs.tsx +11 -12
  237. package/src/core/index.tsx +6 -5
  238. package/src/form/EntityForm.tsx +585 -539
  239. package/src/form/EntityFormActions.tsx +169 -0
  240. package/src/form/PropertyFieldBinding.tsx +85 -44
  241. package/src/form/components/CustomIdField.tsx +6 -2
  242. package/src/form/components/FieldHelperText.tsx +4 -4
  243. package/src/form/components/FormEntry.tsx +22 -0
  244. package/src/form/components/FormLayout.tsx +16 -0
  245. package/src/form/components/LabelWithIcon.tsx +30 -19
  246. package/src/form/components/LabelWithIconAndTooltip.tsx +28 -0
  247. package/src/form/components/StorageItemPreview.tsx +22 -12
  248. package/src/form/components/StorageUploadProgress.tsx +4 -5
  249. package/src/form/components/index.tsx +3 -1
  250. package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +31 -19
  251. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +47 -35
  252. package/src/form/field_bindings/BlockFieldBinding.tsx +56 -34
  253. package/src/form/field_bindings/DateTimeFieldBinding.tsx +18 -14
  254. package/src/form/field_bindings/KeyValueFieldBinding.tsx +60 -51
  255. package/src/form/field_bindings/MapFieldBinding.tsx +71 -54
  256. package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +153 -0
  257. package/src/form/field_bindings/{MultiSelectBinding.tsx → MultiSelectFieldBinding.tsx} +25 -20
  258. package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +11 -16
  259. package/src/form/field_bindings/ReferenceFieldBinding.tsx +42 -31
  260. package/src/form/field_bindings/RepeatFieldBinding.tsx +56 -35
  261. package/src/form/field_bindings/SelectFieldBinding.tsx +22 -14
  262. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +42 -50
  263. package/src/form/field_bindings/SwitchFieldBinding.tsx +29 -24
  264. package/src/form/field_bindings/TextFieldBinding.tsx +28 -24
  265. package/src/form/index.tsx +16 -37
  266. package/src/form/useClearRestoreValue.tsx +2 -2
  267. package/src/form/validation.ts +13 -23
  268. package/src/hooks/data/delete.ts +6 -5
  269. package/src/hooks/data/save.ts +13 -9
  270. package/src/hooks/data/useCollectionFetch.tsx +3 -3
  271. package/src/hooks/data/useDataSource.tsx +11 -3
  272. package/src/hooks/data/useEntityFetch.tsx +10 -6
  273. package/src/hooks/index.tsx +1 -0
  274. package/src/hooks/useAuthController.tsx +1 -1
  275. package/src/hooks/useBreadcrumbsController.tsx +31 -0
  276. package/src/hooks/useBuildLocalConfigurationPersistence.tsx +8 -10
  277. package/src/hooks/useBuildModeController.tsx +22 -29
  278. package/src/hooks/useBuildNavigationController.tsx +159 -54
  279. package/src/hooks/useFireCMSContext.tsx +5 -5
  280. package/src/hooks/useLargeLayout.tsx +0 -35
  281. package/src/hooks/useModeController.tsx +1 -2
  282. package/src/hooks/useProjectLog.tsx +32 -10
  283. package/src/hooks/useResolvedNavigationFrom.tsx +10 -12
  284. package/src/hooks/useValidateAuthenticator.tsx +17 -37
  285. package/src/index.ts +1 -0
  286. package/src/internal/useBuildDataSource.ts +72 -82
  287. package/src/internal/useBuildSideDialogsController.tsx +4 -2
  288. package/src/internal/useBuildSideEntityController.tsx +193 -73
  289. package/src/internal/useUnsavedChangesDialog.tsx +127 -91
  290. package/src/preview/PropertyPreview.tsx +17 -24
  291. package/src/preview/PropertyPreviewProps.tsx +7 -1
  292. package/src/preview/components/BooleanPreview.tsx +2 -2
  293. package/src/preview/components/EmptyValue.tsx +1 -1
  294. package/src/preview/components/EnumValuesChip.tsx +2 -2
  295. package/src/preview/components/ImagePreview.tsx +25 -36
  296. package/src/preview/components/ReferencePreview.tsx +22 -33
  297. package/src/preview/components/StorageThumbnail.tsx +5 -1
  298. package/src/preview/components/UrlComponentPreview.tsx +60 -28
  299. package/src/preview/property_previews/ArrayOfMapsPreview.tsx +2 -3
  300. package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +4 -3
  301. package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +2 -3
  302. package/src/preview/property_previews/ArrayOfStringsPreview.tsx +1 -2
  303. package/src/preview/property_previews/ArrayOneOfPreview.tsx +4 -5
  304. package/src/preview/property_previews/ArrayPropertyPreview.tsx +4 -5
  305. package/src/preview/property_previews/MapPropertyPreview.tsx +12 -11
  306. package/src/preview/property_previews/SkeletonPropertyComponent.tsx +12 -12
  307. package/src/preview/property_previews/StringPropertyPreview.tsx +3 -3
  308. package/src/preview/util.ts +10 -10
  309. package/src/routes/CustomCMSRoute.tsx +21 -0
  310. package/src/routes/FireCMSRoute.tsx +235 -0
  311. package/src/routes/HomePageRoute.tsx +17 -0
  312. package/src/types/auth.tsx +9 -13
  313. package/src/types/collections.ts +94 -27
  314. package/src/types/customization_controller.tsx +0 -1
  315. package/src/types/datasource.ts +61 -43
  316. package/src/types/dialogs_controller.tsx +7 -3
  317. package/src/types/entities.ts +12 -2
  318. package/src/types/entity_actions.tsx +32 -7
  319. package/src/types/entity_callbacks.ts +18 -18
  320. package/src/types/entity_overrides.tsx +2 -2
  321. package/src/types/export_import.ts +4 -4
  322. package/src/types/fields.tsx +81 -46
  323. package/src/types/firecms.tsx +7 -2
  324. package/src/types/firecms_context.tsx +1 -1
  325. package/src/types/index.ts +0 -1
  326. package/src/types/navigation.ts +38 -18
  327. package/src/types/permissions.ts +5 -5
  328. package/src/types/plugins.tsx +25 -14
  329. package/src/types/properties.ts +60 -25
  330. package/src/types/property_config.tsx +0 -2
  331. package/src/types/side_dialogs_controller.tsx +15 -0
  332. package/src/types/side_entity_controller.tsx +6 -1
  333. package/src/types/storage.ts +94 -3
  334. package/src/types/user.ts +2 -0
  335. package/src/util/builders.ts +10 -8
  336. package/src/util/entities.ts +9 -6
  337. package/src/util/entity_actions.ts +28 -0
  338. package/src/util/entity_cache.ts +204 -0
  339. package/src/util/enums.ts +1 -1
  340. package/src/util/icon_list.ts +16 -10
  341. package/src/util/icon_synonyms.ts +3 -100
  342. package/src/util/icons.tsx +17 -7
  343. package/src/util/index.ts +2 -0
  344. package/src/util/join_collections.ts +3 -0
  345. package/src/util/make_properties_editable.ts +13 -5
  346. package/src/util/navigation_from_path.ts +13 -6
  347. package/src/util/navigation_utils.ts +59 -7
  348. package/src/util/objects.ts +48 -28
  349. package/src/util/parent_references_from_path.ts +3 -3
  350. package/src/util/permissions.ts +9 -8
  351. package/src/util/plurals.ts +0 -2
  352. package/src/util/property_utils.tsx +11 -4
  353. package/src/util/references.ts +11 -2
  354. package/src/util/resolutions.ts +100 -46
  355. package/src/util/storage.ts +79 -21
  356. package/src/util/strings.ts +2 -2
  357. package/src/util/useStorageUploadController.tsx +71 -27
  358. package/dist/components/FireCMSAppBar.d.ts +0 -26
  359. package/dist/components/PropertyIdCopyTooltipContent.d.ts +0 -3
  360. package/dist/components/VirtualTable/common.d.ts +0 -2
  361. package/dist/core/Drawer.d.ts +0 -23
  362. package/dist/core/Scaffold.d.ts +0 -55
  363. package/dist/core/SideEntityView.d.ts +0 -7
  364. package/dist/form/components/FormikArrayContainer.d.ts +0 -18
  365. package/dist/form/field_bindings/MarkdownFieldBinding.d.ts +0 -9
  366. package/dist/internal/useBuildCustomizationController.d.ts +0 -2
  367. package/dist/internal/useLocaleConfig.d.ts +0 -1
  368. package/dist/types/appcheck.d.ts +0 -26
  369. package/src/components/FireCMSAppBar.tsx +0 -165
  370. package/src/components/PropertyIdCopyTooltipContent.tsx +0 -28
  371. package/src/components/common/useDataSourceEntityCollectionTableController.tsx +0 -225
  372. package/src/core/Drawer.tsx +0 -191
  373. package/src/core/Scaffold.tsx +0 -281
  374. package/src/core/SideEntityView.tsx +0 -38
  375. package/src/form/components/FormikArrayContainer.tsx +0 -44
  376. package/src/form/field_bindings/MarkdownFieldBinding.tsx +0 -695
  377. package/src/internal/useBuildCustomizationController.tsx +0 -5
  378. package/src/internal/useLocaleConfig.tsx +0 -18
  379. package/src/types/appcheck.ts +0 -29
  380. /package/src/util/{common.tsx → common.ts} +0 -0
@@ -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}
@@ -2,7 +2,7 @@ import React from "react";
2
2
  import {
3
3
  AdditionalFieldDelegate,
4
4
  CollectionSize,
5
- Entity, EntityCollection,
5
+ Entity,
6
6
  EntityTableController,
7
7
  FilterValues,
8
8
  ResolvedProperties,
@@ -12,12 +12,15 @@ import {
12
12
  } from "../../types";
13
13
  import { OnCellValueChange, OnColumnResizeParams, UniqueFieldValidator } from "../common/types";
14
14
 
15
-
16
15
  /**
17
16
  * @group Collection components
18
17
  */
19
18
  export type EntityCollectionTableProps<M extends Record<string, any>,
20
- UserType extends User = User> = {
19
+ USER extends User = User> = {
20
+
21
+ className?: string;
22
+
23
+ style?: React.CSSProperties;
21
24
 
22
25
  /**
23
26
  * Display these entities as selected
@@ -69,6 +72,21 @@ export type EntityCollectionTableProps<M extends Record<string, any>,
69
72
  */
70
73
  onColumnResize?(params: OnColumnResizeParams): void;
71
74
 
75
+ /**
76
+ * Initial scroll position
77
+ */
78
+ initialScroll?: number;
79
+
80
+ /**
81
+ * Callback when the table is scrolled
82
+ * @param props
83
+ */
84
+ onScroll?: (props: {
85
+ scrollDirection: "forward" | "backward",
86
+ scrollOffset: number,
87
+ scrollUpdateWasRequested: boolean
88
+ }) => void;
89
+
72
90
  /**
73
91
  * Callback when the selected size of the table is changed
74
92
  */
@@ -87,12 +105,12 @@ export type EntityCollectionTableProps<M extends Record<string, any>,
87
105
 
88
106
  /**
89
107
  * Controller holding the logic for the table
90
- * {@link useDataSourceEntityCollectionTableController}
108
+ * {@link useDataSourceTableController}
91
109
  * {@link EntityTableController}
92
110
  */
93
111
  tableController: EntityTableController<M>;
94
112
 
95
- displayedColumnIds: PropertyColumnConfig[];
113
+ displayedColumnIds?: PropertyColumnConfig[];
96
114
 
97
115
  forceFilter?: FilterValues<Extract<keyof M, string>>;
98
116
 
@@ -100,7 +118,7 @@ export type EntityCollectionTableProps<M extends Record<string, any>,
100
118
 
101
119
  inlineEditing?: boolean;
102
120
 
103
- additionalFields?: AdditionalFieldDelegate<M, UserType>[];
121
+ additionalFields?: AdditionalFieldDelegate<M, USER>[];
104
122
 
105
123
  defaultSize?: CollectionSize;
106
124
 
@@ -131,15 +149,18 @@ export type EntityCollectionTableProps<M extends Record<string, any>,
131
149
  onTextSearchClick?: () => void;
132
150
 
133
151
  textSearchLoading?: boolean;
134
- }
152
+
153
+ enablePopupIcon: boolean;
154
+
155
+ openEntityMode?: "side_panel" | "full_screen";
156
+ };
135
157
 
136
158
  export type GetPropertyForProps<M extends Record<string, any>> = {
137
159
  propertyKey: string,
138
- propertyValue: any,
139
160
  entity: Entity<M>
140
161
  };
141
162
 
142
163
  export type PropertyColumnConfig = {
143
164
  key: string,
144
- disabled: boolean,
165
+ disabled?: boolean,
145
166
  };
@@ -24,14 +24,13 @@ import { getPreviewSizeFrom } from "../../preview/util";
24
24
  import { isReadOnly } from "../../util";
25
25
 
26
26
  import { CustomFieldValidator, mapPropertyToYup } from "../../form/validation";
27
- import { useFireCMSContext } from "../../hooks";
28
27
 
29
28
  import { EntityTableCell } from "./internal/EntityTableCell";
30
29
  import { EntityTableCellActions } from "./internal/EntityTableCellActions";
31
30
 
32
- import { getRowHeight } from "../VirtualTable/common";
33
31
  import { useSelectableTableController } from "../SelectableTable/SelectableTableContext";
34
32
  import { useClearRestoreValue } from "../../form/useClearRestoreValue";
33
+ import { getRowHeight } from "../common/table_height";
35
34
 
36
35
  export interface PropertyTableCellProps<T extends CMSType> {
37
36
  propertyKey: string;
@@ -46,9 +45,12 @@ export interface PropertyTableCellProps<T extends CMSType> {
46
45
  entity: Entity<any>;
47
46
  path: string;
48
47
  disabled: boolean;
48
+ enablePopupIcon?: boolean;
49
49
  }
50
50
 
51
51
  function isStorageProperty(property: ResolvedProperty) {
52
+ if (property.dataType === "string" && property.markdown)
53
+ return false;
52
54
  if (property.dataType === "string" && (property as ResolvedStringProperty).storage)
53
55
  return true;
54
56
  if (property.dataType === "array") {
@@ -74,11 +76,10 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any>>(
74
76
  path,
75
77
  entity,
76
78
  readonly,
77
- disabled: disabledProp
79
+ disabled: disabledProp,
80
+ enablePopupIcon = true
78
81
  }: PropertyTableCellProps<T>) {
79
82
 
80
- const context = useFireCMSContext();
81
-
82
83
  const {
83
84
  onValueChange,
84
85
  size,
@@ -88,13 +89,14 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any>>(
88
89
  } = useSelectableTableController();
89
90
 
90
91
  const selected = selectedCell?.propertyKey === propertyKey &&
91
- selectedCell?.entity.path === entity.path &&
92
- selectedCell?.entity.id === entity.id;
92
+ selectedCell?.entityPath === entity.path &&
93
+ selectedCell?.entityId === entity.id;
93
94
 
94
95
  const [internalValue, setInternalValue] = useState<any | null>(value);
95
96
  const internalValueRef = useRef(value);
96
97
 
97
98
  const [error, setError] = useState<Error | undefined>();
99
+ const [validationError, setValidationError] = useState<Error | undefined>();
98
100
  const [saved, setSaved] = useState<boolean>(false);
99
101
 
100
102
  const onValueUpdated = useCallback(() => {
@@ -120,7 +122,7 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any>>(
120
122
  useEffect(
121
123
  () => {
122
124
  if (!equal(value, internalValueRef.current)) {
123
- setError(undefined);
125
+ setValidationError(undefined);
124
126
  setInternalValue(value);
125
127
  internalValueRef.current = value;
126
128
  onValueUpdated();
@@ -136,32 +138,34 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any>>(
136
138
  validation
137
139
  .validate(value)
138
140
  .then(() => {
139
- setError(undefined);
141
+ setValidationError(undefined);
140
142
  internalValueRef.current = value;
141
143
  if (onValueChange) {
142
- onValueChange({
143
- value,
144
- propertyKey,
145
- setError,
146
- onValueUpdated,
147
- entity,
148
- fullPath: path,
149
- context
150
- });
144
+ try {
145
+ onValueChange({
146
+ value,
147
+ propertyKey,
148
+ setError,
149
+ onValueUpdated,
150
+ data: entity,
151
+ });
152
+ } catch (e: any) {
153
+ console.error("onValueChange error", e);
154
+ setError(e);
155
+ }
156
+
151
157
  }
152
158
  })
153
159
  .catch((e) => {
154
- setError(e);
160
+ setValidationError(e);
155
161
  });
156
162
  };
157
163
 
158
164
  useEffect(() => {
159
165
  validation
160
166
  .validate(internalValue)
161
- .then(() => setError(undefined))
162
- .catch((e) => {
163
- setError(e);
164
- });
167
+ .then(() => setValidationError(undefined))
168
+ .catch(setValidationError);
165
169
  }, [internalValue, validation, propertyKey, property, entity]);
166
170
 
167
171
  const updateValue = (newValue: any | null) => {
@@ -189,7 +193,8 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any>>(
189
193
  select({
190
194
  width,
191
195
  height,
192
- entity,
196
+ entityPath: entity.path,
197
+ entityId: entity.id,
193
198
  cellRect,
194
199
  propertyKey: propertyKey as Extract<keyof M, string>
195
200
  });
@@ -205,7 +210,8 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any>>(
205
210
  setPopupCell({
206
211
  width,
207
212
  height,
208
- entity,
213
+ entityPath: entity.path,
214
+ entityId: entity.id,
209
215
  cellRect,
210
216
  propertyKey: propertyKey as Extract<keyof M, string>
211
217
  });
@@ -237,7 +243,6 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any>>(
237
243
  height={getRowHeight(size)}
238
244
  propertyKey={propertyKey}
239
245
  property={property}
240
- // entity={entity}
241
246
  value={internalValue}
242
247
  size={getPreviewSizeFrom(size)}
243
248
  />
@@ -247,7 +252,7 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any>>(
247
252
  if (!customField && (!customPreview || selected)) {
248
253
  const isAStorageProperty = isStorageProperty(property);
249
254
  if (isAStorageProperty) {
250
- innerComponent = <TableStorageUpload error={error}
255
+ innerComponent = <TableStorageUpload error={validationError ?? error}
251
256
  disabled={disabled}
252
257
  focused={selected}
253
258
  selected={selected}
@@ -274,7 +279,7 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any>>(
274
279
  valueType={"number"}
275
280
  small={getPreviewSizeFrom(size) !== "medium"}
276
281
  enumValues={numberProperty.enumValues}
277
- error={error}
282
+ error={validationError ?? error}
278
283
  internalValue={internalValue as string | number}
279
284
  updateValue={updateValue}
280
285
  />;
@@ -282,7 +287,7 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any>>(
282
287
  } else {
283
288
  innerComponent = <VirtualTableNumberInput
284
289
  align={align}
285
- error={error}
290
+ error={validationError ?? error}
286
291
  focused={selected}
287
292
  disabled={disabled}
288
293
  value={internalValue as number}
@@ -300,14 +305,14 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any>>(
300
305
  valueType={"string"}
301
306
  small={getPreviewSizeFrom(size) !== "medium"}
302
307
  enumValues={stringProperty.enumValues}
303
- error={error}
308
+ error={validationError ?? error}
304
309
  internalValue={internalValue as string | number}
305
310
  updateValue={updateValue}
306
311
  />;
307
312
  fullHeight = true;
308
- } else if (!stringProperty.storage) {
313
+ } else if (stringProperty.markdown || !stringProperty.storage) {
309
314
  const multiline = Boolean(stringProperty.multiline) || Boolean(stringProperty.markdown);
310
- innerComponent = <VirtualTableInput error={error}
315
+ innerComponent = <VirtualTableInput error={validationError ?? error}
311
316
  disabled={disabled}
312
317
  multiline={multiline}
313
318
  focused={selected}
@@ -317,7 +322,7 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any>>(
317
322
  allowScroll = true;
318
323
  }
319
324
  } else if (property.dataType === "boolean") {
320
- innerComponent = <VirtualTableSwitch error={error}
325
+ innerComponent = <VirtualTableSwitch error={validationError ?? error}
321
326
  disabled={disabled}
322
327
  focused={selected}
323
328
  internalValue={internalValue as boolean}
@@ -325,7 +330,7 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any>>(
325
330
  />;
326
331
  } else if (property.dataType === "date") {
327
332
  innerComponent = <VirtualTableDateField name={propertyKey as string}
328
- error={error}
333
+ error={validationError ?? error}
329
334
  disabled={disabled}
330
335
  mode={property.mode}
331
336
  focused={selected}
@@ -346,6 +351,8 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any>>(
346
351
  path={property.path}
347
352
  multiselect={false}
348
353
  previewProperties={property.previewProperties}
354
+ includeId={property.includeId}
355
+ includeEntityLink={property.includeEntityLink}
349
356
  title={property.name}
350
357
  forceFilter={property.forceFilter}
351
358
  />;
@@ -368,7 +375,7 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any>>(
368
375
  small={getPreviewSizeFrom(size) !== "medium"}
369
376
  valueType={arrayProperty.of.dataType}
370
377
  enumValues={arrayProperty.of.enumValues}
371
- error={error}
378
+ error={validationError ?? error}
372
379
  internalValue={internalValue as string | number}
373
380
  updateValue={updateValue}
374
381
  />;
@@ -390,6 +397,8 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any>>(
390
397
  previewProperties={arrayProperty.of.previewProperties}
391
398
  title={arrayProperty.name}
392
399
  forceFilter={arrayProperty.of.forceFilter}
400
+ includeId={arrayProperty.of.includeId}
401
+ includeEntityLink={arrayProperty.of.includeEntityLink}
393
402
  />;
394
403
  }
395
404
  allowScroll = false;
@@ -401,11 +410,10 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any>>(
401
410
 
402
411
  if (!innerComponent) {
403
412
  allowScroll = false;
404
- showExpandIcon = selected && !innerComponent && !disabled && !readOnlyProperty;
413
+ showExpandIcon = enablePopupIcon && selected && !innerComponent && !disabled && !readOnlyProperty;
405
414
  innerComponent = (
406
- <PropertyPreview width={width}
415
+ <PropertyPreview width={width}
407
416
  height={height}
408
- // entity={entity}
409
417
  propertyKey={propertyKey as string}
410
418
  value={internalValue}
411
419
  property={property}
@@ -426,7 +434,7 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any>>(
426
434
  removePadding={removePadding}
427
435
  fullHeight={fullHeight}
428
436
  saved={saved}
429
- error={error}
437
+ error={validationError ?? error}
430
438
  align={align}
431
439
  allowScroll={allowScroll}
432
440
  showExpandIcon={showExpandIcon}
@@ -21,7 +21,6 @@ export interface PropertiesToColumnsParams<M extends Record<string, any>> {
21
21
  properties: ResolvedProperties<M>;
22
22
  sortable?: boolean;
23
23
  forceFilter?: FilterValues<keyof M extends string ? keyof M : never>;
24
- disabledFilter?: boolean;
25
24
  AdditionalHeaderWidget?: React.ComponentType<{
26
25
  property: ResolvedProperty,
27
26
  propertyKey: string,
@@ -29,7 +28,8 @@ export interface PropertiesToColumnsParams<M extends Record<string, any>> {
29
28
  }>;
30
29
  }
31
30
 
32
- export function propertiesToColumns<M extends Record<string, any>>({ properties, sortable, forceFilter, disabledFilter, AdditionalHeaderWidget }: PropertiesToColumnsParams<M>): VirtualTableColumn[] {
31
+ export function propertiesToColumns<M extends Record<string, any>>({ properties, sortable, forceFilter, AdditionalHeaderWidget }: PropertiesToColumnsParams<M>): VirtualTableColumn[] {
32
+ const disabledFilter = Boolean(forceFilter);
33
33
  return Object.entries<ResolvedProperty>(properties)
34
34
  .flatMap(([key, property]) => getColumnKeysForProperty(property, key))
35
35
  .map(({
@@ -45,7 +45,7 @@ export function propertiesToColumns<M extends Record<string, any>>({ properties,
45
45
  align: getTableCellAlignment(property),
46
46
  icon: getIconForProperty(property, "small"),
47
47
  title: property.name ?? key as string,
48
- sortable: sortable && (forceFilter ? Object.keys(forceFilter).includes(key) : true),
48
+ sortable: sortable,
49
49
  filter: !disabledFilter && filterable,
50
50
  width: getTablePropertyColumnWidth(property),
51
51
  resizable: true,