@firecms/core 3.0.0-canary.15 → 3.0.0-canary.150

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 (326) hide show
  1. package/README.md +3 -3
  2. package/dist/app/AppBar.d.ts +12 -0
  3. package/dist/app/Drawer.d.ts +16 -0
  4. package/dist/app/Scaffold.d.ts +30 -0
  5. package/dist/app/index.d.ts +4 -0
  6. package/dist/app/useApp.d.ts +16 -0
  7. package/dist/components/ArrayContainer.d.ts +19 -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 +11 -12
  12. package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +1 -1
  13. package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +7 -5
  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/internal/CollectionTableToolbar.d.ts +1 -4
  18. package/dist/components/EntityCollectionTable/internal/EntityTableCell.d.ts +2 -2
  19. package/dist/components/EntityCollectionTable/internal/popup_field/PopupFormField.d.ts +7 -4
  20. package/dist/components/EntityCollectionView/EntityCollectionView.d.ts +12 -2
  21. package/dist/components/EntityCollectionView/EntityCollectionViewStartActions.d.ts +11 -0
  22. package/dist/components/EntityCollectionView/utils.d.ts +3 -0
  23. package/dist/components/EntityPreview.d.ts +7 -6
  24. package/dist/components/ErrorView.d.ts +1 -1
  25. package/dist/components/HomePage/DefaultHomePage.d.ts +1 -1
  26. package/dist/components/HomePage/NavigationCardBinding.d.ts +1 -1
  27. package/dist/components/PropertyConfigBadge.d.ts +2 -1
  28. package/dist/components/PropertyIdCopyTooltip.d.ts +8 -0
  29. package/dist/components/ReferenceWidget.d.ts +3 -1
  30. package/dist/components/SelectableTable/SelectableTable.d.ts +1 -1
  31. package/dist/components/SelectableTable/filters/ReferenceFilterField.d.ts +2 -1
  32. package/dist/components/VirtualTable/VirtualTableProps.d.ts +15 -12
  33. package/dist/components/VirtualTable/types.d.ts +3 -3
  34. package/dist/components/{EntityCollectionTable/internal → common}/default_entity_actions.d.ts +1 -1
  35. package/dist/components/common/index.d.ts +1 -0
  36. package/dist/components/common/table_height.d.ts +5 -0
  37. package/dist/components/common/types.d.ts +4 -6
  38. package/dist/components/common/useColumnsIds.d.ts +2 -1
  39. package/dist/components/common/useDataSourceEntityCollectionTableController.d.ts +4 -1
  40. package/dist/components/index.d.ts +4 -2
  41. package/dist/{components/FireCMSAppBar.d.ts → core/DefaultAppBar.d.ts} +6 -9
  42. package/dist/core/DefaultDrawer.d.ts +19 -0
  43. package/dist/core/DrawerNavigationItem.d.ts +10 -0
  44. package/dist/core/EntityEditView.d.ts +18 -4
  45. package/dist/core/FireCMS.d.ts +2 -2
  46. package/dist/core/NavigationRoutes.d.ts +3 -3
  47. package/dist/core/index.d.ts +3 -4
  48. package/dist/form/PropertyFieldBinding.d.ts +1 -1
  49. package/dist/form/components/ErrorFocus.d.ts +1 -1
  50. package/dist/form/components/FieldHelperText.d.ts +3 -3
  51. package/dist/form/components/LabelWithIcon.d.ts +1 -1
  52. package/dist/form/components/LabelWithIconAndTooltip.d.ts +15 -0
  53. package/dist/form/components/StorageItemPreview.d.ts +4 -4
  54. package/dist/form/components/index.d.ts +1 -1
  55. package/dist/form/field_bindings/ArrayCustomShapedFieldBinding.d.ts +1 -1
  56. package/dist/form/field_bindings/ArrayOfReferencesFieldBinding.d.ts +1 -1
  57. package/dist/form/field_bindings/BlockFieldBinding.d.ts +1 -1
  58. package/dist/form/field_bindings/KeyValueFieldBinding.d.ts +1 -1
  59. package/dist/form/field_bindings/MapFieldBinding.d.ts +1 -1
  60. package/dist/form/field_bindings/MarkdownEditorFieldBinding.d.ts +11 -0
  61. package/dist/form/field_bindings/{MultiSelectBinding.d.ts → MultiSelectFieldBinding.d.ts} +1 -1
  62. package/dist/form/field_bindings/ReadOnlyFieldBinding.d.ts +1 -1
  63. package/dist/form/field_bindings/ReferenceFieldBinding.d.ts +2 -2
  64. package/dist/form/field_bindings/RepeatFieldBinding.d.ts +1 -1
  65. package/dist/form/field_bindings/SelectFieldBinding.d.ts +1 -1
  66. package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +3 -5
  67. package/dist/form/field_bindings/TextFieldBinding.d.ts +1 -1
  68. package/dist/form/index.d.ts +3 -5
  69. package/dist/form/useClearRestoreValue.d.ts +2 -2
  70. package/dist/hooks/data/delete.d.ts +4 -4
  71. package/dist/hooks/data/save.d.ts +4 -5
  72. package/dist/hooks/data/useCollectionFetch.d.ts +1 -1
  73. package/dist/hooks/data/useEntityFetch.d.ts +3 -3
  74. package/dist/hooks/index.d.ts +1 -0
  75. package/dist/hooks/useAuthController.d.ts +1 -1
  76. package/dist/hooks/useBuildNavigationController.d.ts +3 -4
  77. package/dist/hooks/useFireCMSContext.d.ts +1 -1
  78. package/dist/hooks/useProjectLog.d.ts +8 -2
  79. package/dist/hooks/useResolvedNavigationFrom.d.ts +3 -3
  80. package/dist/hooks/useValidateAuthenticator.d.ts +5 -9
  81. package/dist/index.d.ts +1 -0
  82. package/dist/index.es.js +16536 -13058
  83. package/dist/index.es.js.map +1 -1
  84. package/dist/index.umd.js +20159 -587
  85. package/dist/index.umd.js.map +1 -1
  86. package/dist/internal/useBuildDataSource.d.ts +1 -16
  87. package/dist/preview/PropertyPreviewProps.d.ts +6 -1
  88. package/dist/preview/components/EnumValuesChip.d.ts +1 -1
  89. package/dist/preview/components/ReferencePreview.d.ts +3 -2
  90. package/dist/preview/components/StorageThumbnail.d.ts +2 -1
  91. package/dist/preview/components/UrlComponentPreview.d.ts +2 -1
  92. package/dist/types/auth.d.ts +7 -11
  93. package/dist/types/collections.d.ts +53 -18
  94. package/dist/types/datasource.d.ts +51 -35
  95. package/dist/types/entities.d.ts +6 -1
  96. package/dist/types/entity_actions.d.ts +18 -4
  97. package/dist/types/entity_callbacks.d.ts +16 -16
  98. package/dist/types/entity_overrides.d.ts +2 -2
  99. package/dist/types/export_import.d.ts +4 -4
  100. package/dist/types/fields.d.ts +63 -41
  101. package/dist/types/firecms.d.ts +6 -2
  102. package/dist/types/firecms_context.d.ts +1 -1
  103. package/dist/types/index.d.ts +0 -1
  104. package/dist/types/navigation.d.ts +6 -5
  105. package/dist/types/permissions.d.ts +4 -4
  106. package/dist/types/plugins.d.ts +22 -12
  107. package/dist/types/properties.d.ts +34 -21
  108. package/dist/types/property_config.d.ts +0 -2
  109. package/dist/types/side_dialogs_controller.d.ts +10 -0
  110. package/dist/types/storage.d.ts +86 -3
  111. package/dist/types/user.d.ts +1 -0
  112. package/dist/util/builders.d.ts +2 -2
  113. package/dist/util/entities.d.ts +2 -2
  114. package/dist/util/icon_list.d.ts +5 -1
  115. package/dist/util/icon_synonyms.d.ts +1 -97
  116. package/dist/util/icons.d.ts +6 -3
  117. package/dist/util/index.d.ts +1 -0
  118. package/dist/util/navigation_utils.d.ts +2 -2
  119. package/dist/util/objects.d.ts +2 -1
  120. package/dist/util/permissions.d.ts +4 -4
  121. package/dist/util/plurals.d.ts +0 -2
  122. package/dist/util/property_utils.d.ts +3 -3
  123. package/dist/util/resolutions.d.ts +30 -16
  124. package/dist/util/storage.d.ts +23 -2
  125. package/dist/util/useStorageUploadController.d.ts +3 -3
  126. package/package.json +128 -119
  127. package/src/app/AppBar.tsx +18 -0
  128. package/src/app/Drawer.tsx +24 -0
  129. package/src/app/Scaffold.tsx +243 -0
  130. package/src/app/index.ts +4 -0
  131. package/src/app/useApp.tsx +32 -0
  132. package/src/components/ArrayContainer.tsx +92 -25
  133. package/src/components/CircularProgressCenter.tsx +2 -2
  134. package/src/components/ClearFilterSortButton.tsx +41 -0
  135. package/src/components/{DeleteConfirmationDialog.tsx → ConfirmationDialog.tsx} +1 -1
  136. package/src/components/DeleteEntityDialog.tsx +1 -1
  137. package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +13 -20
  138. package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +25 -24
  139. package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +12 -8
  140. package/src/components/EntityCollectionTable/PropertyTableCell.tsx +47 -39
  141. package/src/components/EntityCollectionTable/column_utils.tsx +3 -3
  142. package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +31 -17
  143. package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +16 -8
  144. package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +29 -34
  145. package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +36 -34
  146. package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +19 -7
  147. package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +82 -75
  148. package/src/components/EntityCollectionView/EntityCollectionView.tsx +139 -87
  149. package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +68 -0
  150. package/src/components/EntityCollectionView/useSelectionController.tsx +19 -7
  151. package/src/components/EntityCollectionView/utils.ts +19 -0
  152. package/src/components/EntityPreview.tsx +47 -41
  153. package/src/components/EntityView.tsx +10 -10
  154. package/src/components/ErrorView.tsx +3 -3
  155. package/src/components/HomePage/DefaultHomePage.tsx +25 -19
  156. package/src/components/HomePage/FavouritesView.tsx +1 -1
  157. package/src/components/HomePage/NavigationCard.tsx +4 -4
  158. package/src/components/HomePage/NavigationCardBinding.tsx +2 -2
  159. package/src/components/HomePage/NavigationGroup.tsx +2 -2
  160. package/src/components/HomePage/SmallNavigationCard.tsx +5 -6
  161. package/src/components/PropertyConfigBadge.tsx +9 -3
  162. package/src/components/PropertyIdCopyTooltip.tsx +48 -0
  163. package/src/components/ReferenceTable/ReferenceSelectionTable.tsx +8 -7
  164. package/src/components/ReferenceWidget.tsx +22 -12
  165. package/src/components/SearchIconsView.tsx +10 -7
  166. package/src/components/SelectableTable/SelectableTable.tsx +9 -9
  167. package/src/components/SelectableTable/filters/BooleanFilterField.tsx +2 -3
  168. package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +22 -7
  169. package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +28 -6
  170. package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +88 -21
  171. package/src/components/VirtualTable/VirtualTable.tsx +77 -46
  172. package/src/components/VirtualTable/VirtualTableCell.tsx +1 -9
  173. package/src/components/VirtualTable/VirtualTableHeader.tsx +10 -10
  174. package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +2 -2
  175. package/src/components/VirtualTable/VirtualTableProps.tsx +18 -14
  176. package/src/components/VirtualTable/VirtualTableRow.tsx +5 -6
  177. package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +4 -4
  178. package/src/components/VirtualTable/fields/VirtualTableInput.tsx +2 -1
  179. package/src/components/VirtualTable/fields/VirtualTableNumberInput.tsx +2 -1
  180. package/src/components/VirtualTable/fields/VirtualTableSelect.tsx +14 -28
  181. package/src/components/VirtualTable/types.tsx +2 -3
  182. package/src/components/{EntityCollectionTable/internal → common}/default_entity_actions.tsx +8 -4
  183. package/src/components/common/index.ts +1 -0
  184. package/src/components/{VirtualTable/common.tsx → common/table_height.tsx} +5 -2
  185. package/src/components/common/types.tsx +4 -6
  186. package/src/components/common/useColumnsIds.tsx +23 -2
  187. package/src/components/common/useDataSourceEntityCollectionTableController.tsx +25 -14
  188. package/src/components/common/useTableSearchHelper.ts +53 -12
  189. package/src/components/index.tsx +4 -2
  190. package/src/contexts/DialogsProvider.tsx +2 -2
  191. package/src/core/DefaultAppBar.tsx +178 -0
  192. package/src/core/DefaultDrawer.tsx +183 -0
  193. package/src/core/DrawerNavigationItem.tsx +66 -0
  194. package/src/core/EntityEditView.tsx +717 -154
  195. package/src/core/EntitySidePanel.tsx +1 -2
  196. package/src/core/FireCMS.tsx +54 -53
  197. package/src/core/NavigationRoutes.tsx +7 -8
  198. package/src/core/SideDialogs.tsx +2 -1
  199. package/src/core/field_configs.tsx +8 -9
  200. package/src/core/index.tsx +3 -4
  201. package/src/form/PropertyFieldBinding.tsx +74 -35
  202. package/src/form/components/CustomIdField.tsx +4 -2
  203. package/src/form/components/FieldHelperText.tsx +4 -4
  204. package/src/form/components/LabelWithIcon.tsx +27 -19
  205. package/src/form/components/LabelWithIconAndTooltip.tsx +28 -0
  206. package/src/form/components/StorageItemPreview.tsx +22 -12
  207. package/src/form/components/StorageUploadProgress.tsx +3 -4
  208. package/src/form/components/index.tsx +1 -1
  209. package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +29 -17
  210. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +45 -35
  211. package/src/form/field_bindings/BlockFieldBinding.tsx +51 -32
  212. package/src/form/field_bindings/DateTimeFieldBinding.tsx +17 -14
  213. package/src/form/field_bindings/KeyValueFieldBinding.tsx +54 -45
  214. package/src/form/field_bindings/MapFieldBinding.tsx +65 -48
  215. package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +150 -0
  216. package/src/form/field_bindings/{MultiSelectBinding.tsx → MultiSelectFieldBinding.tsx} +25 -20
  217. package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +11 -16
  218. package/src/form/field_bindings/ReferenceFieldBinding.tsx +42 -31
  219. package/src/form/field_bindings/RepeatFieldBinding.tsx +52 -34
  220. package/src/form/field_bindings/SelectFieldBinding.tsx +20 -13
  221. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +36 -46
  222. package/src/form/field_bindings/SwitchFieldBinding.tsx +9 -5
  223. package/src/form/field_bindings/TextFieldBinding.tsx +26 -23
  224. package/src/form/index.tsx +4 -9
  225. package/src/form/useClearRestoreValue.tsx +2 -2
  226. package/src/form/validation.ts +1 -17
  227. package/src/hooks/data/delete.ts +6 -5
  228. package/src/hooks/data/save.ts +12 -8
  229. package/src/hooks/data/useCollectionFetch.tsx +2 -2
  230. package/src/hooks/data/useDataSource.tsx +11 -3
  231. package/src/hooks/data/useEntityFetch.tsx +5 -5
  232. package/src/hooks/index.tsx +1 -0
  233. package/src/hooks/useAuthController.tsx +1 -1
  234. package/src/hooks/useBuildLocalConfigurationPersistence.tsx +8 -10
  235. package/src/hooks/useBuildModeController.tsx +11 -5
  236. package/src/hooks/useBuildNavigationController.tsx +92 -34
  237. package/src/hooks/useFireCMSContext.tsx +5 -5
  238. package/src/hooks/useProjectLog.tsx +32 -10
  239. package/src/hooks/useResolvedNavigationFrom.tsx +6 -6
  240. package/src/hooks/useValidateAuthenticator.tsx +21 -41
  241. package/src/index.ts +1 -0
  242. package/src/internal/useBuildDataSource.ts +72 -82
  243. package/src/internal/useBuildSideDialogsController.tsx +1 -0
  244. package/src/internal/useBuildSideEntityController.tsx +102 -22
  245. package/src/internal/useUnsavedChangesDialog.tsx +3 -1
  246. package/src/preview/PropertyPreview.tsx +11 -18
  247. package/src/preview/PropertyPreviewProps.tsx +7 -1
  248. package/src/preview/components/BooleanPreview.tsx +2 -2
  249. package/src/preview/components/EmptyValue.tsx +1 -1
  250. package/src/preview/components/EnumValuesChip.tsx +2 -2
  251. package/src/preview/components/ImagePreview.tsx +25 -35
  252. package/src/preview/components/ReferencePreview.tsx +23 -34
  253. package/src/preview/components/StorageThumbnail.tsx +5 -1
  254. package/src/preview/components/UrlComponentPreview.tsx +44 -11
  255. package/src/preview/property_previews/ArrayOfMapsPreview.tsx +2 -3
  256. package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +4 -3
  257. package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +2 -3
  258. package/src/preview/property_previews/ArrayOfStringsPreview.tsx +1 -2
  259. package/src/preview/property_previews/ArrayOneOfPreview.tsx +4 -5
  260. package/src/preview/property_previews/ArrayPropertyPreview.tsx +4 -5
  261. package/src/preview/property_previews/MapPropertyPreview.tsx +6 -6
  262. package/src/preview/property_previews/SkeletonPropertyComponent.tsx +2 -2
  263. package/src/preview/property_previews/StringPropertyPreview.tsx +3 -3
  264. package/src/preview/util.ts +2 -2
  265. package/src/types/auth.tsx +7 -13
  266. package/src/types/collections.ts +62 -20
  267. package/src/types/customization_controller.tsx +0 -1
  268. package/src/types/datasource.ts +60 -43
  269. package/src/types/entities.ts +11 -1
  270. package/src/types/entity_actions.tsx +20 -7
  271. package/src/types/entity_callbacks.ts +18 -18
  272. package/src/types/entity_overrides.tsx +2 -2
  273. package/src/types/export_import.ts +4 -4
  274. package/src/types/fields.tsx +69 -45
  275. package/src/types/firecms.tsx +7 -2
  276. package/src/types/firecms_context.tsx +1 -1
  277. package/src/types/index.ts +0 -1
  278. package/src/types/navigation.ts +7 -7
  279. package/src/types/permissions.ts +5 -5
  280. package/src/types/plugins.tsx +24 -14
  281. package/src/types/properties.ts +39 -22
  282. package/src/types/property_config.tsx +0 -2
  283. package/src/types/side_dialogs_controller.tsx +13 -0
  284. package/src/types/storage.ts +94 -3
  285. package/src/types/user.ts +2 -0
  286. package/src/util/builders.ts +6 -6
  287. package/src/util/entities.ts +6 -5
  288. package/src/util/enums.ts +1 -1
  289. package/src/util/icon_list.ts +15 -10
  290. package/src/util/icon_synonyms.ts +3 -99
  291. package/src/util/icons.tsx +17 -7
  292. package/src/util/index.ts +1 -0
  293. package/src/util/make_properties_editable.ts +13 -5
  294. package/src/util/navigation_utils.ts +6 -6
  295. package/src/util/objects.ts +45 -28
  296. package/src/util/permissions.ts +9 -8
  297. package/src/util/plurals.ts +0 -2
  298. package/src/util/property_utils.tsx +11 -4
  299. package/src/util/references.ts +3 -0
  300. package/src/util/resolutions.ts +79 -46
  301. package/src/util/storage.ts +79 -21
  302. package/src/util/strings.ts +2 -2
  303. package/src/util/useStorageUploadController.tsx +33 -7
  304. package/src/util/useTraceUpdate.tsx +1 -0
  305. package/dist/components/PropertyIdCopyTooltipContent.d.ts +0 -3
  306. package/dist/components/VirtualTable/common.d.ts +0 -2
  307. package/dist/core/Drawer.d.ts +0 -23
  308. package/dist/core/Scaffold.d.ts +0 -55
  309. package/dist/core/SideEntityView.d.ts +0 -7
  310. package/dist/form/EntityForm.d.ts +0 -77
  311. package/dist/form/components/FormikArrayContainer.d.ts +0 -18
  312. package/dist/form/field_bindings/MarkdownFieldBinding.d.ts +0 -9
  313. package/dist/internal/useBuildCustomizationController.d.ts +0 -2
  314. package/dist/internal/useLocaleConfig.d.ts +0 -1
  315. package/dist/types/appcheck.d.ts +0 -26
  316. package/src/components/FireCMSAppBar.tsx +0 -165
  317. package/src/components/PropertyIdCopyTooltipContent.tsx +0 -28
  318. package/src/core/Drawer.tsx +0 -191
  319. package/src/core/Scaffold.tsx +0 -281
  320. package/src/core/SideEntityView.tsx +0 -38
  321. package/src/form/EntityForm.tsx +0 -728
  322. package/src/form/components/FormikArrayContainer.tsx +0 -44
  323. package/src/form/field_bindings/MarkdownFieldBinding.tsx +0 -695
  324. package/src/internal/useBuildCustomizationController.tsx +0 -5
  325. package/src/internal/useLocaleConfig.tsx +0 -18
  326. package/src/types/appcheck.ts +0 -29
@@ -1,7 +1,7 @@
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 { Checkbox, cls, IconButton, Menu, MenuItem, MoreVertIcon, Skeleton, Tooltip } from "@firecms/ui";
5
5
  import { useFireCMSContext, useLargeLayout } from "../../hooks";
6
6
 
7
7
  /**
@@ -14,7 +14,6 @@ import { useFireCMSContext, useLargeLayout } from "../../hooks";
14
14
  * @param size
15
15
  * @param toggleEntitySelection
16
16
  * @param hideId
17
- * @constructor
18
17
  *
19
18
  * @group Collection components
20
19
  */
@@ -56,12 +55,7 @@ export const EntityCollectionRowActions = function EntityCollectionRowActions({
56
55
  const context = useFireCMSContext();
57
56
 
58
57
  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);
58
+ selectionController?.toggleEntitySelection(entity, checked);
65
59
  }, [entity, selectionController?.toggleEntitySelection]);
66
60
 
67
61
  const hasActions = actions.length > 0;
@@ -71,9 +65,8 @@ export const EntityCollectionRowActions = function EntityCollectionRowActions({
71
65
  const uncollapsedActions = actions.filter(a => a.collapsed === false);
72
66
  return (
73
67
  <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",
68
+ className={cls(
69
+ "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
70
  frozen ? "sticky left-0" : ""
78
71
  )}
79
72
  style={{
@@ -87,7 +80,9 @@ export const EntityCollectionRowActions = function EntityCollectionRowActions({
87
80
  <div className="w-34 flex justify-center">
88
81
 
89
82
  {uncollapsedActions.map((action, index) => (
90
- <Tooltip key={index} title={action.name}>
83
+ <Tooltip key={index}
84
+ title={action.name}
85
+ asChild={true}>
91
86
  <IconButton
92
87
  onClick={(event: MouseEvent) => {
93
88
  event.stopPropagation();
@@ -149,16 +144,14 @@ export const EntityCollectionRowActions = function EntityCollectionRowActions({
149
144
  </div>}
150
145
 
151
146
  {!hideId && size !== "xs" && (
152
- <div className="w-[138px] text-center overflow-hidden truncate">
147
+ <div
148
+ className="w-[138px] text-center overflow-hidden truncate font-mono text-xs text-text-secondary dark:text-text-secondary-dark max-w-full text-ellipsis px-2"
149
+ onClick={(event) => {
150
+ event.stopPropagation();
151
+ }}>
153
152
 
154
153
  {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>
154
+ ? entity.id
162
155
  : <Skeleton/>
163
156
  }
164
157
  </div>
@@ -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
@@ -41,8 +41,10 @@ import { SelectableTable } from "../SelectableTable/SelectableTable";
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>, USER extends User>
45
45
  ({
46
+ className,
47
+ style,
46
48
  forceFilter,
47
49
  actionsStart,
48
50
  actions,
@@ -73,23 +75,21 @@ export const EntityCollectionTable = function EntityCollectionTable<M extends Re
73
75
  emptyComponent,
74
76
  getIdColumnWidth,
75
77
  onTextSearchClick,
76
- textSearchLoading
78
+ textSearchLoading,
79
+ enablePopupIcon
77
80
  }: EntityCollectionTableProps<M>) {
78
81
 
79
82
  const ref = useRef<HTMLDivElement>(null);
80
83
 
81
84
  const largeLayout = useLargeLayout();
82
- const disabledFilterChange = Boolean(forceFilter);
83
85
  const selectedEntities = (selectionController?.selectedEntities?.length > 0 ? selectionController?.selectedEntities : highlightedEntities)?.filter(Boolean);
84
86
 
85
- const context: FireCMSContext<UserType> = useFireCMSContext();
87
+ const context: FireCMSContext<USER> = useFireCMSContext();
86
88
 
87
89
  const [size, setSize] = React.useState<CollectionSize>(defaultSize ?? "m");
88
90
 
89
91
  const selectedEntityIds = selectedEntities?.map(e => e.id);
90
92
 
91
- const filterIsSet = !!tableController.filterValues && Object.keys(tableController.filterValues).length > 0;
92
-
93
93
  const updateSize = useCallback((size: CollectionSize) => {
94
94
  if (onSizeChanged)
95
95
  onSizeChanged(size);
@@ -98,12 +98,12 @@ export const EntityCollectionTable = function EntityCollectionTable<M extends Re
98
98
 
99
99
  const onTextSearch = useCallback((newSearchString?: string) => tableController.setSearchString?.(newSearchString), []);
100
100
 
101
- const additionalFieldsMap: Record<string, AdditionalFieldDelegate<M, UserType>> = useMemo(() => {
101
+ const additionalFieldsMap: Record<string, AdditionalFieldDelegate<M, USER>> = useMemo(() => {
102
102
  return (additionalFields
103
103
  ? additionalFields
104
104
  .map((aC) => ({ [aC.key]: aC as AdditionalFieldDelegate<M, any> }))
105
105
  .reduce((a, b) => ({ ...a, ...b }), {})
106
- : {}) as Record<string, AdditionalFieldDelegate<M, UserType>>;
106
+ : {}) as Record<string, AdditionalFieldDelegate<M, USER>>;
107
107
  }, [additionalFields]);
108
108
 
109
109
  const customFieldValidator: CustomFieldValidator | undefined = uniqueFieldValidator;
@@ -120,10 +120,8 @@ export const EntityCollectionTable = function EntityCollectionTable<M extends Re
120
120
  const propertyKey = column.key;
121
121
 
122
122
  let disabled = column.custom?.disabled;
123
- const propertyValue = entity.values ? getValueInPath(entity.values, propertyKey) : undefined;
124
123
  const property = getPropertyFor?.({
125
124
  propertyKey,
126
- propertyValue,
127
125
  entity
128
126
  }) ?? column.custom.resolvedProperty;
129
127
  if (!property?.disabled) {
@@ -150,6 +148,7 @@ export const EntityCollectionTable = function EntityCollectionTable<M extends Re
150
148
  height={getRowHeight(size)}
151
149
  entity={entity}
152
150
  disabled={disabled}
151
+ enablePopupIcon={enablePopupIcon}
153
152
  path={entity.path}/>
154
153
  : renderSkeletonText()
155
154
  }
@@ -179,7 +178,10 @@ export const EntityCollectionTable = function EntityCollectionTable<M extends Re
179
178
 
180
179
  const child = Builder
181
180
  ? <Builder entity={entity} context={context}/>
182
- : <>{additionalField.value?.({ entity, context })}</>;
181
+ : <>{additionalField.value?.({
182
+ entity,
183
+ context
184
+ })}</>;
183
185
 
184
186
  return (
185
187
  <EntityTableCell
@@ -207,7 +209,6 @@ export const EntityCollectionTable = function EntityCollectionTable<M extends Re
207
209
  properties,
208
210
  sortable,
209
211
  forceFilter,
210
- disabledFilter: disabledFilterChange,
211
212
  AdditionalHeaderWidget
212
213
  });
213
214
 
@@ -237,13 +238,15 @@ export const EntityCollectionTable = function EntityCollectionTable<M extends Re
237
238
 
238
239
  const columns: VirtualTableColumn[] = [
239
240
  idColumn,
240
- ...displayedColumnIds
241
- .map((p) => {
242
- return collectionColumns.find(c => c.key === p.key);
243
- }).filter(Boolean) as VirtualTableColumn[]
241
+ ...(displayedColumnIds
242
+ ? displayedColumnIds
243
+ .map((p) => {
244
+ return collectionColumns.find(c => c.key === p.key);
245
+ }).filter(Boolean)
246
+ : collectionColumns) as VirtualTableColumn[]
244
247
  ];
245
248
 
246
- const cellRenderer = (props: CellRendererParams<any>) => {
249
+ const cellRenderer = useCallback((props: CellRendererParams<any>) => {
247
250
  const column = props.column;
248
251
  const columns = props.columns;
249
252
  const columnKey = column.key;
@@ -283,20 +286,18 @@ export const EntityCollectionTable = function EntityCollectionTable<M extends Re
283
286
  <ErrorView error={e}/>
284
287
  </EntityTableCell>;
285
288
  }
286
- }
289
+ }, [tableRowActionsBuilder, additionalCellRenderer, propertyCellRenderer, size]);
287
290
 
288
291
  return (
289
292
 
290
293
  <div ref={ref}
291
- className="h-full w-full flex flex-col bg-white dark:bg-gray-950">
294
+ style={style}
295
+ className={cls("h-full w-full flex flex-col bg-white dark:bg-surface-950", className)}>
292
296
 
293
297
  <CollectionTableToolbar
294
- forceFilter={disabledFilterChange}
295
- filterIsSet={filterIsSet}
296
298
  onTextSearch={textSearchEnabled ? onTextSearch : undefined}
297
299
  textSearchLoading={textSearchLoading}
298
300
  onTextSearchClick={textSearchEnabled ? onTextSearchClick : undefined}
299
- clearFilter={tableController.clearFilter}
300
301
  size={size}
301
302
  onSizeChanged={updateSize}
302
303
  title={title}
@@ -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
@@ -92,7 +95,7 @@ export type EntityCollectionTableProps<M extends Record<string, any>,
92
95
  */
93
96
  tableController: EntityTableController<M>;
94
97
 
95
- displayedColumnIds: PropertyColumnConfig[];
98
+ displayedColumnIds?: PropertyColumnConfig[];
96
99
 
97
100
  forceFilter?: FilterValues<Extract<keyof M, string>>;
98
101
 
@@ -100,7 +103,7 @@ export type EntityCollectionTableProps<M extends Record<string, any>,
100
103
 
101
104
  inlineEditing?: boolean;
102
105
 
103
- additionalFields?: AdditionalFieldDelegate<M, UserType>[];
106
+ additionalFields?: AdditionalFieldDelegate<M, USER>[];
104
107
 
105
108
  defaultSize?: CollectionSize;
106
109
 
@@ -131,15 +134,16 @@ export type EntityCollectionTableProps<M extends Record<string, any>,
131
134
  onTextSearchClick?: () => void;
132
135
 
133
136
  textSearchLoading?: boolean;
134
- }
137
+
138
+ enablePopupIcon: boolean;
139
+ };
135
140
 
136
141
  export type GetPropertyForProps<M extends Record<string, any>> = {
137
142
  propertyKey: string,
138
- propertyValue: any,
139
143
  entity: Entity<M>
140
144
  };
141
145
 
142
146
  export type PropertyColumnConfig = {
143
147
  key: string,
144
- disabled: boolean,
148
+ disabled?: boolean,
145
149
  };
@@ -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,