@firecms/core 3.0.0-alpha.84 → 3.0.0-beta.10

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 (370) hide show
  1. package/README.md +6 -7
  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 +3 -4
  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 -18
  12. package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +2 -5
  13. package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +7 -13
  14. package/dist/components/EntityCollectionTable/PropertyTableCell.d.ts +3 -2
  15. package/dist/components/EntityCollectionTable/column_utils.d.ts +1 -2
  16. package/dist/components/EntityCollectionTable/fields/TableReferenceField.d.ts +3 -1
  17. package/dist/components/EntityCollectionTable/index.d.ts +2 -4
  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 +3 -3
  21. package/dist/components/EntityCollectionView/EntityCollectionView.d.ts +13 -4
  22. package/dist/components/EntityCollectionView/EntityCollectionViewStartActions.d.ts +11 -0
  23. package/dist/components/EntityCollectionView/useSelectionController.d.ts +2 -0
  24. package/dist/components/EntityCollectionView/utils.d.ts +3 -0
  25. package/dist/components/EntityPreview.d.ts +26 -7
  26. package/dist/components/EntityView.d.ts +11 -0
  27. package/dist/components/ErrorView.d.ts +1 -1
  28. package/dist/components/FieldCaption.d.ts +5 -0
  29. package/dist/components/HomePage/DefaultHomePage.d.ts +1 -1
  30. package/dist/components/HomePage/NavigationCard.d.ts +8 -0
  31. package/dist/components/HomePage/{NavigationCollectionCard.d.ts → NavigationCardBinding.d.ts} +3 -3
  32. package/dist/components/HomePage/SmallNavigationCard.d.ts +6 -0
  33. package/dist/components/HomePage/index.d.ts +3 -1
  34. package/dist/components/{FieldConfigBadge.d.ts → PropertyConfigBadge.d.ts} +2 -1
  35. package/dist/components/PropertyIdCopyTooltip.d.ts +8 -0
  36. package/dist/components/{ReferenceSelectionInner.d.ts → ReferenceTable/ReferenceSelectionTable.d.ts} +2 -2
  37. package/dist/components/ReferenceWidget.d.ts +6 -4
  38. package/dist/components/{EntityCollectionTable/SimpleEntityCollectionTable.d.ts → SelectableTable/SelectableTable.d.ts} +8 -28
  39. package/dist/components/SelectableTable/SelectableTableContext.d.ts +4 -0
  40. package/dist/components/{EntityCollectionTable → SelectableTable}/filters/ReferenceFilterField.d.ts +2 -1
  41. package/dist/components/VirtualTable/VirtualTableProps.d.ts +16 -13
  42. package/dist/components/VirtualTable/types.d.ts +3 -3
  43. package/dist/components/{EntityCollectionTable/internal → common}/default_entity_actions.d.ts +1 -1
  44. package/dist/components/common/index.d.ts +6 -0
  45. package/dist/components/common/table_height.d.ts +5 -0
  46. package/dist/components/{EntityCollectionTable → common}/types.d.ts +11 -6
  47. package/dist/components/{EntityCollectionView → common}/useColumnsIds.d.ts +2 -1
  48. package/dist/components/{EntityCollectionTable → common}/useDataSourceEntityCollectionTableController.d.ts +4 -1
  49. package/dist/components/common/useTableSearchHelper.d.ts +12 -0
  50. package/dist/components/index.d.ts +14 -8
  51. package/dist/contexts/AuthControllerContext.d.ts +1 -1
  52. package/dist/{components/FireCMSAppBar.d.ts → core/DefaultAppBar.d.ts} +6 -9
  53. package/dist/core/DefaultDrawer.d.ts +19 -0
  54. package/dist/core/DrawerNavigationItem.d.ts +10 -0
  55. package/dist/core/EntityEditView.d.ts +36 -0
  56. package/dist/core/FireCMS.d.ts +1 -1
  57. package/dist/core/NavigationRoutes.d.ts +3 -3
  58. package/dist/core/index.d.ts +3 -6
  59. package/dist/form/PropertyFieldBinding.d.ts +1 -1
  60. package/dist/form/components/CustomIdField.d.ts +2 -1
  61. package/dist/form/components/ErrorFocus.d.ts +1 -1
  62. package/dist/form/components/FieldHelperText.d.ts +3 -3
  63. package/dist/form/components/FormikArrayContainer.d.ts +2 -1
  64. package/dist/{components → form/components}/LabelWithIcon.d.ts +1 -1
  65. package/dist/form/components/LabelWithIconAndTooltip.d.ts +15 -0
  66. package/dist/form/components/StorageItemPreview.d.ts +4 -3
  67. package/dist/form/components/StorageUploadProgress.d.ts +1 -1
  68. package/dist/form/components/index.d.ts +2 -1
  69. package/dist/form/field_bindings/ArrayCustomShapedFieldBinding.d.ts +1 -1
  70. package/dist/form/field_bindings/ArrayOfReferencesFieldBinding.d.ts +1 -1
  71. package/dist/form/field_bindings/BlockFieldBinding.d.ts +1 -1
  72. package/dist/form/field_bindings/KeyValueFieldBinding.d.ts +1 -1
  73. package/dist/form/field_bindings/MapFieldBinding.d.ts +1 -1
  74. package/dist/form/field_bindings/MarkdownEditorFieldBinding.d.ts +11 -0
  75. package/dist/form/field_bindings/{MultiSelectBinding.d.ts → MultiSelectFieldBinding.d.ts} +1 -1
  76. package/dist/form/field_bindings/ReadOnlyFieldBinding.d.ts +1 -1
  77. package/dist/form/field_bindings/RepeatFieldBinding.d.ts +1 -1
  78. package/dist/form/field_bindings/SelectFieldBinding.d.ts +1 -1
  79. package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +3 -4
  80. package/dist/form/field_bindings/TextFieldBinding.d.ts +2 -2
  81. package/dist/form/index.d.ts +4 -5
  82. package/dist/form/useClearRestoreValue.d.ts +2 -2
  83. package/dist/form/validation.d.ts +1 -1
  84. package/dist/hooks/data/delete.d.ts +2 -2
  85. package/dist/hooks/data/save.d.ts +2 -3
  86. package/dist/hooks/data/useDataSource.d.ts +2 -2
  87. package/dist/hooks/data/useEntityFetch.d.ts +3 -3
  88. package/dist/hooks/index.d.ts +5 -1
  89. package/dist/{core → hooks}/useBuildModeController.d.ts +1 -1
  90. package/dist/hooks/useBuildNavigationController.d.ts +23 -0
  91. package/dist/hooks/useProjectLog.d.ts +14 -0
  92. package/dist/hooks/useSnackbarController.d.ts +1 -0
  93. package/dist/hooks/useStorageSource.d.ts +2 -2
  94. package/dist/hooks/useValidateAuthenticator.d.ts +21 -0
  95. package/dist/index.d.ts +1 -0
  96. package/dist/index.es.js +16297 -12643
  97. package/dist/index.es.js.map +1 -1
  98. package/dist/index.umd.js +20043 -587
  99. package/dist/index.umd.js.map +1 -1
  100. package/dist/internal/useBuildDataSource.d.ts +1 -12
  101. package/dist/preview/PropertyPreview.d.ts +1 -1
  102. package/dist/preview/PropertyPreviewProps.d.ts +7 -5
  103. package/dist/preview/components/BooleanPreview.d.ts +5 -1
  104. package/dist/preview/components/EnumValuesChip.d.ts +1 -1
  105. package/dist/preview/components/ReferencePreview.d.ts +4 -9
  106. package/dist/preview/components/StorageThumbnail.d.ts +2 -1
  107. package/dist/preview/components/UrlComponentPreview.d.ts +2 -1
  108. package/dist/types/analytics.d.ts +1 -1
  109. package/dist/types/auth.d.ts +38 -2
  110. package/dist/types/collections.d.ts +56 -9
  111. package/dist/types/datasource.d.ts +59 -39
  112. package/dist/types/entities.d.ts +7 -1
  113. package/dist/types/entity_actions.d.ts +14 -0
  114. package/dist/types/entity_callbacks.d.ts +3 -3
  115. package/dist/types/entity_overrides.d.ts +6 -0
  116. package/dist/types/fields.d.ts +47 -42
  117. package/dist/types/firecms.d.ts +8 -23
  118. package/dist/types/index.d.ts +2 -1
  119. package/dist/types/navigation.d.ts +18 -16
  120. package/dist/types/permissions.d.ts +5 -1
  121. package/dist/types/plugins.d.ts +31 -31
  122. package/dist/types/properties.d.ts +36 -23
  123. package/dist/types/property_config.d.ts +2 -2
  124. package/dist/types/roles.d.ts +31 -0
  125. package/dist/types/side_dialogs_controller.d.ts +10 -0
  126. package/dist/types/storage.d.ts +86 -3
  127. package/dist/types/user.d.ts +5 -0
  128. package/dist/util/collections.d.ts +9 -1
  129. package/dist/util/entities.d.ts +2 -2
  130. package/dist/util/icon_list.d.ts +5 -1
  131. package/dist/util/icon_synonyms.d.ts +1 -97
  132. package/dist/util/icons.d.ts +10 -3
  133. package/dist/util/index.d.ts +3 -1
  134. package/dist/util/navigation_utils.d.ts +2 -2
  135. package/dist/util/objects.d.ts +1 -1
  136. package/dist/util/permissions.d.ts +4 -4
  137. package/dist/util/plurals.d.ts +0 -2
  138. package/dist/util/property_utils.d.ts +1 -1
  139. package/dist/util/references.d.ts +4 -2
  140. package/dist/util/resolutions.d.ts +28 -14
  141. package/dist/util/storage.d.ts +23 -2
  142. package/dist/util/strings.d.ts +1 -1
  143. package/dist/util/useDebouncedCallback.d.ts +1 -0
  144. package/dist/util/useStorageUploadController.d.ts +3 -3
  145. package/dist/util/useTraceUpdate.d.ts +1 -0
  146. package/package.json +129 -112
  147. package/src/app/AppBar.tsx +18 -0
  148. package/src/app/Drawer.tsx +24 -0
  149. package/src/app/Scaffold.tsx +243 -0
  150. package/src/app/index.ts +4 -0
  151. package/src/app/useApp.tsx +32 -0
  152. package/src/components/ArrayContainer.tsx +45 -75
  153. package/src/components/CircularProgressCenter.tsx +1 -1
  154. package/src/components/ClearFilterSortButton.tsx +41 -0
  155. package/src/components/{DeleteConfirmationDialog.tsx → ConfirmationDialog.tsx} +1 -1
  156. package/src/components/DeleteEntityDialog.tsx +4 -4
  157. package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +47 -58
  158. package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +253 -448
  159. package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +11 -12
  160. package/src/components/EntityCollectionTable/PropertyTableCell.tsx +54 -48
  161. package/src/components/EntityCollectionTable/column_utils.tsx +4 -4
  162. package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +40 -32
  163. package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +17 -9
  164. package/src/components/EntityCollectionTable/index.tsx +1 -9
  165. package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +44 -46
  166. package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +32 -30
  167. package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +19 -7
  168. package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +145 -142
  169. package/src/components/EntityCollectionView/EntityCollectionView.tsx +184 -171
  170. package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +5 -6
  171. package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +68 -0
  172. package/src/components/EntityCollectionView/useSelectionController.tsx +42 -0
  173. package/src/components/EntityCollectionView/utils.ts +19 -0
  174. package/src/components/EntityPreview.tsx +208 -71
  175. package/src/components/EntityView.tsx +84 -0
  176. package/src/components/ErrorView.tsx +1 -1
  177. package/src/components/FieldCaption.tsx +14 -0
  178. package/src/components/HomePage/DefaultHomePage.tsx +38 -28
  179. package/src/components/HomePage/NavigationCard.tsx +69 -0
  180. package/src/components/HomePage/NavigationCardBinding.tsx +116 -0
  181. package/src/components/HomePage/NavigationGroup.tsx +1 -1
  182. package/src/components/HomePage/SmallNavigationCard.tsx +44 -0
  183. package/src/components/HomePage/index.tsx +3 -1
  184. package/src/components/PropertyConfigBadge.tsx +23 -0
  185. package/src/components/PropertyIdCopyTooltip.tsx +48 -0
  186. package/src/components/{ReferenceSelectionInner.tsx → ReferenceTable/ReferenceSelectionTable.tsx} +37 -23
  187. package/src/components/ReferenceWidget.tsx +26 -16
  188. package/src/components/SearchIconsView.tsx +10 -7
  189. package/src/components/{EntityCollectionTable/SimpleEntityCollectionTable.tsx → SelectableTable/SelectableTable.tsx} +46 -84
  190. package/src/components/SelectableTable/SelectableTableContext.tsx +6 -0
  191. package/src/components/{EntityCollectionTable → SelectableTable}/filters/BooleanFilterField.tsx +2 -3
  192. package/src/components/{EntityCollectionTable → SelectableTable}/filters/DateTimeFilterField.tsx +22 -7
  193. package/src/components/{EntityCollectionTable → SelectableTable}/filters/ReferenceFilterField.tsx +38 -24
  194. package/src/components/{EntityCollectionTable → SelectableTable}/filters/StringNumberFilterField.tsx +88 -22
  195. package/src/components/VirtualTable/VirtualTable.tsx +77 -46
  196. package/src/components/VirtualTable/VirtualTableCell.tsx +1 -9
  197. package/src/components/VirtualTable/VirtualTableHeader.tsx +14 -8
  198. package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +2 -2
  199. package/src/components/VirtualTable/VirtualTableProps.tsx +19 -15
  200. package/src/components/VirtualTable/VirtualTableRow.tsx +4 -5
  201. package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +4 -4
  202. package/src/components/VirtualTable/fields/VirtualTableInput.tsx +4 -3
  203. package/src/components/VirtualTable/fields/VirtualTableNumberInput.tsx +4 -3
  204. package/src/components/VirtualTable/fields/VirtualTableSelect.tsx +14 -28
  205. package/src/components/VirtualTable/types.tsx +2 -3
  206. package/src/components/{EntityCollectionTable/internal → common}/default_entity_actions.tsx +17 -9
  207. package/src/components/common/index.ts +6 -0
  208. package/src/components/{VirtualTable/common.tsx → common/table_height.tsx} +5 -2
  209. package/src/components/{EntityCollectionTable → common}/types.tsx +9 -6
  210. package/src/components/{EntityCollectionView → common}/useColumnsIds.tsx +23 -2
  211. package/src/components/{EntityCollectionTable → common}/useDataSourceEntityCollectionTableController.tsx +25 -14
  212. package/src/components/common/useTableSearchHelper.ts +88 -0
  213. package/src/components/index.tsx +15 -8
  214. package/src/contexts/AuthControllerContext.tsx +1 -1
  215. package/src/contexts/DialogsProvider.tsx +2 -2
  216. package/src/core/DefaultAppBar.tsx +176 -0
  217. package/src/core/DefaultDrawer.tsx +183 -0
  218. package/src/core/DrawerNavigationItem.tsx +66 -0
  219. package/src/core/EntityEditView.tsx +1127 -0
  220. package/src/core/EntitySidePanel.tsx +9 -8
  221. package/src/core/FireCMS.tsx +67 -59
  222. package/src/core/NavigationRoutes.tsx +25 -17
  223. package/src/core/SideDialogs.tsx +1 -0
  224. package/src/core/field_configs.tsx +18 -19
  225. package/src/core/index.tsx +3 -6
  226. package/src/form/PropertyFieldBinding.tsx +60 -33
  227. package/src/form/components/CustomIdField.tsx +51 -36
  228. package/src/form/components/ErrorFocus.tsx +3 -3
  229. package/src/form/components/FieldHelperText.tsx +4 -4
  230. package/src/form/components/FormikArrayContainer.tsx +4 -1
  231. package/src/form/components/LabelWithIcon.tsx +41 -0
  232. package/src/form/components/LabelWithIconAndTooltip.tsx +28 -0
  233. package/src/form/components/StorageItemPreview.tsx +22 -10
  234. package/src/form/components/StorageUploadProgress.tsx +8 -8
  235. package/src/form/components/index.tsx +2 -1
  236. package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +28 -18
  237. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +37 -37
  238. package/src/form/field_bindings/BlockFieldBinding.tsx +29 -27
  239. package/src/form/field_bindings/DateTimeFieldBinding.tsx +20 -17
  240. package/src/form/field_bindings/KeyValueFieldBinding.tsx +66 -60
  241. package/src/form/field_bindings/MapFieldBinding.tsx +35 -33
  242. package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +150 -0
  243. package/src/form/field_bindings/{MultiSelectBinding.tsx → MultiSelectFieldBinding.tsx} +26 -22
  244. package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +12 -18
  245. package/src/form/field_bindings/ReferenceFieldBinding.tsx +45 -33
  246. package/src/form/field_bindings/RepeatFieldBinding.tsx +36 -21
  247. package/src/form/field_bindings/SelectFieldBinding.tsx +22 -16
  248. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +41 -42
  249. package/src/form/field_bindings/SwitchFieldBinding.tsx +11 -8
  250. package/src/form/field_bindings/TextFieldBinding.tsx +34 -30
  251. package/src/form/index.tsx +5 -9
  252. package/src/form/useClearRestoreValue.tsx +2 -2
  253. package/src/form/validation.ts +4 -21
  254. package/src/hooks/data/delete.ts +5 -4
  255. package/src/hooks/data/save.ts +7 -2
  256. package/src/hooks/data/useCollectionFetch.tsx +1 -1
  257. package/src/hooks/data/useDataSource.tsx +15 -2
  258. package/src/hooks/data/useEntityFetch.tsx +4 -4
  259. package/src/hooks/index.tsx +7 -1
  260. package/src/{core → hooks}/useBuildLocalConfigurationPersistence.tsx +8 -10
  261. package/src/{core → hooks}/useBuildModeController.tsx +12 -6
  262. package/src/{internal → hooks}/useBuildNavigationController.tsx +244 -99
  263. package/src/hooks/useFireCMSContext.tsx +51 -3
  264. package/src/hooks/useLargeLayout.tsx +10 -7
  265. package/src/hooks/useProjectLog.tsx +63 -0
  266. package/src/hooks/useReferenceDialog.tsx +3 -3
  267. package/src/hooks/useResolvedNavigationFrom.tsx +1 -1
  268. package/src/hooks/useSnackbarController.tsx +1 -2
  269. package/src/hooks/useStorageSource.tsx +7 -2
  270. package/src/hooks/useValidateAuthenticator.tsx +115 -0
  271. package/src/index.ts +1 -0
  272. package/src/internal/useBuildDataSource.ts +79 -84
  273. package/src/internal/useBuildSideDialogsController.tsx +1 -0
  274. package/src/internal/useBuildSideEntityController.tsx +103 -23
  275. package/src/internal/useUnsavedChangesDialog.tsx +3 -1
  276. package/src/preview/PropertyPreview.tsx +12 -19
  277. package/src/preview/PropertyPreviewProps.tsx +6 -10
  278. package/src/preview/components/BooleanPreview.tsx +19 -4
  279. package/src/preview/components/EnumValuesChip.tsx +2 -2
  280. package/src/preview/components/ImagePreview.tsx +24 -34
  281. package/src/preview/components/ReferencePreview.tsx +73 -176
  282. package/src/preview/components/StorageThumbnail.tsx +5 -1
  283. package/src/preview/components/UrlComponentPreview.tsx +44 -11
  284. package/src/preview/property_previews/ArrayOfMapsPreview.tsx +1 -2
  285. package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +3 -2
  286. package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +1 -2
  287. package/src/preview/property_previews/ArrayOfStringsPreview.tsx +0 -1
  288. package/src/preview/property_previews/ArrayOneOfPreview.tsx +3 -4
  289. package/src/preview/property_previews/ArrayPropertyPreview.tsx +3 -4
  290. package/src/preview/property_previews/MapPropertyPreview.tsx +6 -6
  291. package/src/preview/property_previews/SkeletonPropertyComponent.tsx +2 -2
  292. package/src/preview/property_previews/StringPropertyPreview.tsx +8 -7
  293. package/src/preview/util.ts +2 -2
  294. package/src/types/analytics.ts +1 -0
  295. package/src/types/auth.tsx +51 -2
  296. package/src/types/collections.ts +65 -9
  297. package/src/types/customization_controller.tsx +0 -1
  298. package/src/types/datasource.ts +69 -47
  299. package/src/types/entities.ts +15 -1
  300. package/src/types/entity_actions.tsx +17 -0
  301. package/src/types/entity_callbacks.ts +4 -3
  302. package/src/types/entity_overrides.tsx +7 -0
  303. package/src/types/fields.tsx +51 -45
  304. package/src/types/firecms.tsx +9 -26
  305. package/src/types/index.ts +2 -1
  306. package/src/types/navigation.ts +20 -19
  307. package/src/types/permissions.ts +6 -1
  308. package/src/types/plugins.tsx +38 -40
  309. package/src/types/properties.ts +42 -24
  310. package/src/types/property_config.tsx +2 -2
  311. package/src/types/roles.ts +41 -0
  312. package/src/types/side_dialogs_controller.tsx +13 -0
  313. package/src/types/side_entity_controller.tsx +1 -0
  314. package/src/types/storage.ts +94 -3
  315. package/src/types/user.ts +7 -0
  316. package/src/util/collections.ts +22 -0
  317. package/src/util/entities.ts +6 -5
  318. package/src/util/enums.ts +1 -1
  319. package/src/util/icon_list.ts +15 -10
  320. package/src/util/icon_synonyms.ts +3 -99
  321. package/src/util/icons.tsx +18 -4
  322. package/src/util/index.ts +3 -1
  323. package/src/util/make_properties_editable.ts +13 -5
  324. package/src/util/navigation_utils.ts +6 -6
  325. package/src/util/objects.ts +25 -28
  326. package/src/util/permissions.ts +12 -8
  327. package/src/util/plurals.ts +0 -2
  328. package/src/util/property_utils.tsx +1 -1
  329. package/src/util/references.ts +39 -5
  330. package/src/util/resolutions.ts +75 -42
  331. package/src/util/storage.ts +79 -21
  332. package/src/util/strings.ts +4 -3
  333. package/src/util/{useDebounce.ts → useDebouncedCallback.ts} +1 -1
  334. package/src/util/useStorageUploadController.tsx +33 -7
  335. package/src/util/useTraceUpdate.tsx +2 -1
  336. package/dist/components/VirtualTable/common.d.ts +0 -2
  337. package/dist/core/Drawer.d.ts +0 -23
  338. package/dist/core/Scaffold.d.ts +0 -52
  339. package/dist/form/EntityForm.d.ts +0 -75
  340. package/dist/form/components/SubmitListener.d.ts +0 -1
  341. package/dist/form/components/SwitchControl.d.ts +0 -8
  342. package/dist/form/field_bindings/MarkdownFieldBinding.d.ts +0 -9
  343. package/dist/hooks/useVerifyLicense.d.ts +0 -0
  344. package/dist/internal/EntityView.d.ts +0 -22
  345. package/dist/internal/useBuildCustomizationController.d.ts +0 -2
  346. package/dist/internal/useBuildNavigationController.d.ts +0 -14
  347. package/dist/internal/useLocaleConfig.d.ts +0 -1
  348. package/dist/types/appcheck.d.ts +0 -26
  349. package/dist/util/useDebounce.d.ts +0 -1
  350. package/src/components/FieldConfigBadge.tsx +0 -17
  351. package/src/components/FireCMSAppBar.tsx +0 -157
  352. package/src/components/HomePage/NavigationCollectionCard.tsx +0 -146
  353. package/src/components/LabelWithIcon.tsx +0 -33
  354. package/src/core/Drawer.tsx +0 -162
  355. package/src/core/Scaffold.tsx +0 -278
  356. package/src/form/EntityForm.tsx +0 -657
  357. package/src/form/components/SubmitListener.tsx +0 -32
  358. package/src/form/components/SwitchControl.tsx +0 -39
  359. package/src/form/field_bindings/MarkdownFieldBinding.tsx +0 -696
  360. package/src/hooks/useVerifyLicense.tsx +0 -1
  361. package/src/internal/EntityView.tsx +0 -578
  362. package/src/internal/useBuildCustomizationController.tsx +0 -5
  363. package/src/internal/useLocaleConfig.tsx +0 -18
  364. package/src/types/appcheck.ts +0 -29
  365. /package/dist/components/{EntityCollectionTable → SelectableTable}/filters/BooleanFilterField.d.ts +0 -0
  366. /package/dist/components/{EntityCollectionTable → SelectableTable}/filters/DateTimeFilterField.d.ts +0 -0
  367. /package/dist/components/{EntityCollectionTable → SelectableTable}/filters/StringNumberFilterField.d.ts +0 -0
  368. /package/dist/components/{EntityCollectionTable → common}/useDebouncedData.d.ts +0 -0
  369. /package/dist/{core → hooks}/useBuildLocalConfigurationPersistence.d.ts +0 -0
  370. /package/src/components/{EntityCollectionTable → common}/useDebouncedData.ts +0 -0
@@ -1,41 +1,21 @@
1
- import React, { useCallback, useContext, useEffect, useMemo, useRef } from "react";
2
- import equal from "react-fast-compare";
3
- import {
4
- AdditionalFieldDelegate,
5
- CollectionSize,
6
- Entity,
7
- FilterValues,
8
- FireCMSContext,
9
- ResolvedProperty,
10
- SelectedCellProps,
11
- User
12
- } from "../../types";
1
+ import React, { useCallback, useMemo, useRef } from "react";
2
+ import { AdditionalFieldDelegate, CollectionSize, Entity, FireCMSContext, User } from "../../types";
13
3
  import { PropertyTableCell } from "./PropertyTableCell";
14
4
  import { ErrorBoundary } from "../ErrorBoundary";
15
5
  import { useFireCMSContext, useLargeLayout } from "../../hooks";
16
- import { CellRendererParams, VirtualTable, VirtualTableColumn } from "../VirtualTable";
17
- import { enumToObjectEntries, getValueInPath } from "../../util";
18
- import { getRowHeight } from "../VirtualTable/common";
6
+ import { CellRendererParams, VirtualTableColumn } from "../VirtualTable";
7
+ import { getValueInPath } from "../../util";
19
8
  import { EntityCollectionRowActions } from "./EntityCollectionRowActions";
20
- import { EntityCollectionTableController } from "./types";
21
9
  import { CollectionTableToolbar } from "./internal/CollectionTableToolbar";
22
10
  import { EntityCollectionTableProps } from "./EntityCollectionTableProps";
23
11
  import { EntityTableCell } from "./internal/EntityTableCell";
24
- import { FilterFormFieldProps } from "../VirtualTable/VirtualTableHeader";
25
- import { ReferenceFilterField } from "./filters/ReferenceFilterField";
26
- import { StringNumberFilterField } from "./filters/StringNumberFilterField";
27
- import { BooleanFilterField } from "./filters/BooleanFilterField";
28
- import { DateTimeFilterField } from "./filters/DateTimeFilterField";
29
12
  import { CustomFieldValidator } from "../../form/validation";
30
13
  import { renderSkeletonText } from "../../preview";
31
14
  import { propertiesToColumns } from "./column_utils";
32
- import { useOutsideAlerter } from "@firecms/ui";
33
-
34
- const DEFAULT_STATE = {} as any;
35
-
36
- export const EntityCollectionTableContext = React.createContext<EntityCollectionTableController<any>>(DEFAULT_STATE);
37
-
38
- export const useEntityCollectionTableController = () => useContext<EntityCollectionTableController<any>>(EntityCollectionTableContext);
15
+ import { ErrorView } from "../ErrorView";
16
+ import { SelectableTable } from "../SelectableTable/SelectableTable";
17
+ import { cls } from "@firecms/ui";
18
+ import { getRowHeight } from "../common/table_height";
39
19
 
40
20
  /**
41
21
  * This component is in charge of rendering a collection table with a high
@@ -61,283 +41,217 @@ export const useEntityCollectionTableController = () => useContext<EntityCollect
61
41
  * @see VirtualTable
62
42
  * @group Components
63
43
  */
64
- export const EntityCollectionTable = React.memo<EntityCollectionTableProps<any>>(
65
- function EntityCollectionTable<M extends Record<string, any>, UserType extends User>
66
- ({
67
- debugKey,
68
- forceFilter,
69
- actionsStart,
70
- actions,
71
- title,
72
- tableRowActionsBuilder,
73
- uniqueFieldValidator,
74
- getPropertyFor,
75
- onValueChange,
76
- selectionController,
77
- highlightedEntities,
78
- onEntityClick,
79
- onColumnResize,
80
- onSizeChanged,
81
- textSearchEnabled = false,
82
- hoverRow = true,
83
- inlineEditing = false,
84
- additionalFields,
85
- displayedColumnIds,
86
- defaultSize,
87
- properties,
88
- tableController:
89
- {
90
- data,
91
- dataLoading,
92
- noMoreToLoad,
93
- dataLoadingError,
94
- filterValues,
95
- setFilterValues,
96
- sortBy,
97
- setSortBy,
98
- setSearchString,
99
- clearFilter,
100
- itemCount,
101
- setItemCount,
102
- pageSize = 50,
103
- paginationEnabled,
104
- checkFilterCombination,
105
- setPopupCell
106
- },
107
- filterable = true,
108
- sortable = true,
109
- endAdornment,
110
- AddColumnComponent,
111
- AdditionalHeaderWidget,
112
- additionalIDHeaderWidget,
113
- emptyComponent,
114
- getIdColumnWidth,
115
- onTextSearchClick,
116
- textSearchLoading
117
- }: EntityCollectionTableProps<M>) {
118
-
119
- const ref = useRef<HTMLDivElement>(null);
120
-
121
- const largeLayout = useLargeLayout();
122
- const disabledFilterChange = Boolean(forceFilter);
123
- const selectedEntities = (selectionController?.selectedEntities?.length > 0 ? selectionController?.selectedEntities : highlightedEntities)?.filter(Boolean);
124
-
125
- const context: FireCMSContext<UserType> = useFireCMSContext();
126
-
127
- const [size, setSize] = React.useState<CollectionSize>(defaultSize ?? "m");
128
-
129
- const [selectedCell, setSelectedCell] = React.useState<SelectedCellProps<M> | undefined>(undefined);
130
-
131
- const selectedEntityIds = selectedEntities?.map(e => e.id);
132
-
133
- const filterIsSet = !!filterValues && Object.keys(filterValues).length > 0;
134
-
135
- const loadNextPage = useCallback(() => {
136
- if (!paginationEnabled || dataLoading || noMoreToLoad)
137
- return;
138
- if (itemCount !== undefined)
139
- setItemCount?.(itemCount + pageSize);
140
- }, [dataLoading, itemCount, noMoreToLoad, pageSize, paginationEnabled, setItemCount]);
141
-
142
- useOutsideAlerter(ref,
143
- () => {
144
- if (selectedCell) {
145
- unselect();
146
- }
147
- },
148
- Boolean(selectedCell));
149
-
150
- const resetPagination = useCallback(() => {
151
- setItemCount?.(pageSize);
152
- }, [pageSize]);
153
-
154
- const onRowClickCallback = useCallback(({ rowData }: {
155
- rowData: Entity<M>
156
- }) => {
157
- if (inlineEditing)
158
- return;
159
- return onEntityClick && onEntityClick(rowData);
160
- }, [onEntityClick, inlineEditing]);
161
-
162
- const updateSize = useCallback((size: CollectionSize) => {
163
- if (onSizeChanged)
164
- onSizeChanged(size);
165
- setSize(size);
166
- }, []);
167
-
168
- const onTextSearch = useCallback((newSearchString?: string) => setSearchString?.(newSearchString), []);
169
-
170
- const additionalFieldsMap: Record<string, AdditionalFieldDelegate<M, UserType>> = useMemo(() => {
171
- return (additionalFields
172
- ? additionalFields
173
- .map((aC) => ({ [aC.key]: aC as AdditionalFieldDelegate<M, any> }))
174
- .reduce((a, b) => ({ ...a, ...b }), {})
175
- : {}) as Record<string, AdditionalFieldDelegate<M, UserType>>;
176
- }, [additionalFields]);
177
-
178
- // on ESC key press
179
- useEffect(() => {
180
- const escFunction = (event: any) => {
181
- if (event.keyCode === 27) {
182
- unselect();
44
+ export const EntityCollectionTable = function EntityCollectionTable<M extends Record<string, any>, UserType extends User>
45
+ ({
46
+ className,
47
+ style,
48
+ forceFilter,
49
+ actionsStart,
50
+ actions,
51
+ title,
52
+ tableRowActionsBuilder,
53
+ uniqueFieldValidator,
54
+ getPropertyFor,
55
+ onValueChange,
56
+ selectionController,
57
+ highlightedEntities,
58
+ onEntityClick,
59
+ onColumnResize,
60
+ onSizeChanged,
61
+ textSearchEnabled = false,
62
+ hoverRow = true,
63
+ inlineEditing = false,
64
+ additionalFields,
65
+ displayedColumnIds,
66
+ defaultSize,
67
+ properties,
68
+ tableController,
69
+ filterable = true,
70
+ sortable = true,
71
+ endAdornment,
72
+ AddColumnComponent,
73
+ AdditionalHeaderWidget,
74
+ additionalIDHeaderWidget,
75
+ emptyComponent,
76
+ getIdColumnWidth,
77
+ onTextSearchClick,
78
+ textSearchLoading,
79
+ enablePopupIcon
80
+ }: EntityCollectionTableProps<M>) {
81
+
82
+ const ref = useRef<HTMLDivElement>(null);
83
+
84
+ const largeLayout = useLargeLayout();
85
+ const selectedEntities = (selectionController?.selectedEntities?.length > 0 ? selectionController?.selectedEntities : highlightedEntities)?.filter(Boolean);
86
+
87
+ const context: FireCMSContext<UserType> = useFireCMSContext();
88
+
89
+ const [size, setSize] = React.useState<CollectionSize>(defaultSize ?? "m");
90
+
91
+ const selectedEntityIds = selectedEntities?.map(e => e.id);
92
+
93
+ const updateSize = useCallback((size: CollectionSize) => {
94
+ if (onSizeChanged)
95
+ onSizeChanged(size);
96
+ setSize(size);
97
+ }, []);
98
+
99
+ const onTextSearch = useCallback((newSearchString?: string) => tableController.setSearchString?.(newSearchString), []);
100
+
101
+ const additionalFieldsMap: Record<string, AdditionalFieldDelegate<M, UserType>> = useMemo(() => {
102
+ return (additionalFields
103
+ ? additionalFields
104
+ .map((aC) => ({ [aC.key]: aC as AdditionalFieldDelegate<M, any> }))
105
+ .reduce((a, b) => ({ ...a, ...b }), {})
106
+ : {}) as Record<string, AdditionalFieldDelegate<M, UserType>>;
107
+ }, [additionalFields]);
108
+
109
+ const customFieldValidator: CustomFieldValidator | undefined = uniqueFieldValidator;
110
+
111
+ const propertyCellRenderer = ({
112
+ column,
113
+ columnIndex,
114
+ rowData,
115
+ rowIndex
116
+ }: CellRendererParams<any>) => {
117
+
118
+ const entity: Entity<M> = rowData;
119
+
120
+ const propertyKey = column.key;
121
+
122
+ let disabled = column.custom?.disabled;
123
+ const property = getPropertyFor?.({
124
+ propertyKey,
125
+ entity
126
+ }) ?? column.custom.resolvedProperty;
127
+ if (!property?.disabled) {
128
+ disabled = false;
129
+ }
130
+
131
+ if (!property) {
132
+ return null;
133
+ }
134
+
135
+ return (
136
+ <ErrorBoundary>
137
+ {entity
138
+ ? <PropertyTableCell
139
+ key={`property_table_cell_${entity.id}_${propertyKey}`}
140
+ readonly={!inlineEditing}
141
+ align={column.align ?? "left"}
142
+ propertyKey={propertyKey as string}
143
+ property={property}
144
+ value={entity?.values ? getValueInPath(entity.values, propertyKey) : undefined}
145
+ customFieldValidator={customFieldValidator}
146
+ columnIndex={columnIndex}
147
+ width={column.width}
148
+ height={getRowHeight(size)}
149
+ entity={entity}
150
+ disabled={disabled}
151
+ enablePopupIcon={enablePopupIcon}
152
+ path={entity.path}/>
153
+ : renderSkeletonText()
183
154
  }
184
- };
185
- document.addEventListener("keydown", escFunction, false);
186
- return () => {
187
- document.removeEventListener("keydown", escFunction, false);
188
- };
189
- });
155
+ </ErrorBoundary>);
190
156
 
191
- const select = useCallback((cell?: SelectedCellProps<M>) => {
192
- setSelectedCell(cell);
193
- }, []);
157
+ };
194
158
 
195
- const unselect = useCallback(() => {
196
- setSelectedCell(undefined);
197
- }, []);
159
+ const additionalCellRenderer = useCallback(({
160
+ column,
161
+ rowData,
162
+ width
163
+ }: CellRendererParams<any>) => {
198
164
 
199
- const customFieldValidator: CustomFieldValidator | undefined = uniqueFieldValidator;
165
+ const entity: Entity<M> = rowData;
200
166
 
201
- const propertyCellRenderer = useCallback(({
202
- column,
203
- columnIndex,
204
- rowData,
205
- rowIndex
206
- }: CellRendererParams<any>) => {
167
+ const additionalField = additionalFieldsMap[column.key as string];
168
+ const value = additionalField.dependencies
169
+ ? Object.entries(entity.values)
170
+ .filter(([key, value]) => additionalField.dependencies!.includes(key as Extract<keyof M, string>))
171
+ .reduce((a, b) => ({ ...a, ...b }), {})
172
+ : entity;
207
173
 
208
- const entity: Entity<M> = rowData;
174
+ const Builder = additionalField.Builder;
175
+ if (!Builder && !additionalField.value) {
176
+ throw new Error("When using additional fields you need to provide a Builder or a value");
177
+ }
209
178
 
210
- const propertyKey = column.key;
179
+ const child = Builder
180
+ ? <Builder entity={entity} context={context}/>
181
+ : <>{additionalField.value?.({
182
+ entity,
183
+ context
184
+ })}</>;
211
185
 
212
- let disabled = column.custom?.disabled;
213
- const propertyValue = entity.values ? getValueInPath(entity.values, propertyKey) : undefined;
214
- const property = getPropertyFor?.({
215
- propertyKey,
216
- propertyValue,
217
- entity
218
- }) ?? column.custom.resolvedProperty;
219
- if (!property?.disabled) {
220
- disabled = false;
221
- }
186
+ return (
187
+ <EntityTableCell
188
+ key={`additional_table_cell_${entity.id}_${column.key}`}
189
+ width={width}
190
+ size={size}
191
+ value={value}
192
+ selected={false}
193
+ disabled={true}
194
+ align={"left"}
195
+ allowScroll={false}
196
+ showExpandIcon={false}
197
+ disabledTooltip={"This column can't be edited directly"}
198
+ >
199
+ <ErrorBoundary>
200
+ {child}
201
+ </ErrorBoundary>
202
+ </EntityTableCell>
203
+ );
222
204
 
223
- if (!property) {
224
- return null;
225
- }
205
+ }, [size, selectedEntityIds]);
226
206
 
227
- return (
228
- <ErrorBoundary>
229
- {entity
230
- ? <PropertyTableCell
231
- key={`property_table_cell_${entity.id}_${propertyKey}`}
232
- readonly={!inlineEditing}
233
- align={column.align ?? "left"}
234
- propertyKey={propertyKey as string}
235
- property={property}
236
- value={entity?.values ? getValueInPath(entity.values, propertyKey) : undefined}
237
- customFieldValidator={customFieldValidator}
238
- columnIndex={columnIndex}
239
- width={column.width}
240
- height={getRowHeight(size)}
241
- entity={entity}
242
- disabled={disabled}
243
- path={entity.path}/>
244
- : renderSkeletonText()
245
- }
246
- </ErrorBoundary>);
247
-
248
- }, [inlineEditing, size, selectedEntityIds]);
249
-
250
- const additionalCellRenderer = useCallback(({
251
- column,
252
- rowData,
253
- width
254
- }: CellRendererParams<any>) => {
255
-
256
- const entity: Entity<M> = rowData;
257
-
258
- const additionalField = additionalFieldsMap[column.key as string];
259
- const value = additionalField.dependencies
260
- ? Object.entries(entity.values)
261
- .filter(([key, value]) => additionalField.dependencies!.includes(key as Extract<keyof M, string>))
262
- .reduce((a, b) => ({ ...a, ...b }), {})
263
- : entity;
264
-
265
- const Builder = additionalField.Builder;
266
- if (!Builder && !additionalField.value) {
267
- throw new Error("When using additional fields you need to provide a Builder or a value");
268
- }
207
+ const collectionColumns: VirtualTableColumn[] = (() => {
208
+ const columnsResult: VirtualTableColumn[] = propertiesToColumns({
209
+ properties,
210
+ sortable,
211
+ forceFilter,
212
+ AdditionalHeaderWidget
213
+ });
269
214
 
270
- const child = Builder
271
- ? <Builder entity={entity} context={context}/>
272
- : <>{additionalField.value?.({ entity, context })}</>;
273
-
274
- return (
275
- <EntityTableCell
276
- key={`additional_table_cell_${entity.id}_${column.key}`}
277
- width={width}
278
- size={size}
279
- value={value}
280
- selected={false}
281
- disabled={true}
282
- align={"left"}
283
- allowScroll={false}
284
- showExpandIcon={false}
285
- disabledTooltip={"This column can't be edited directly"}
286
- >
287
- <ErrorBoundary>
288
- {child}
289
- </ErrorBoundary>
290
- </EntityTableCell>
291
- );
292
-
293
- }, [size, selectedEntityIds]);
294
-
295
- const collectionColumns: VirtualTableColumn[] = useMemo(() => {
296
- const columnsResult: VirtualTableColumn[] = propertiesToColumns({
297
- properties,
298
- sortable,
299
- forceFilter,
300
- disabledFilter: disabledFilterChange,
301
- AdditionalHeaderWidget
302
- });
303
-
304
- const additionalTableColumns: VirtualTableColumn[] = additionalFields
305
- ? additionalFields.map((additionalField) =>
306
- ({
307
- key: additionalField.key,
308
- align: "left",
309
- sortable: false,
310
- title: additionalField.name,
311
- width: additionalField.width ?? 200
312
- }))
313
- : [];
314
- return [...columnsResult, ...additionalTableColumns];
315
- },
316
- [additionalFields, disabledFilterChange, forceFilter, properties, sortable]);
317
-
318
- const idColumn: VirtualTableColumn = useMemo(() => ({
319
- key: "id_ewcfedcswdf3",
320
- width: getIdColumnWidth?.() ?? (largeLayout ? 160 : 130),
321
- title: "ID",
322
- resizable: false,
323
- frozen: largeLayout,
324
- headerAlign: "center",
325
- align: "center",
326
- AdditionalHeaderWidget: () => additionalIDHeaderWidget
327
- }), [getIdColumnWidth, largeLayout])
328
-
329
- const columns: VirtualTableColumn[] = useMemo(() => [
330
- idColumn,
331
- ...displayedColumnIds
215
+ const additionalTableColumns: VirtualTableColumn[] = additionalFields
216
+ ? additionalFields.map((additionalField) =>
217
+ ({
218
+ key: additionalField.key,
219
+ align: "left",
220
+ sortable: false,
221
+ title: additionalField.name,
222
+ width: additionalField.width ?? 200
223
+ }))
224
+ : [];
225
+ return [...columnsResult, ...additionalTableColumns];
226
+ })();
227
+
228
+ const idColumn: VirtualTableColumn = {
229
+ key: "id_ewcfedcswdf3",
230
+ width: getIdColumnWidth?.() ?? (largeLayout ? 160 : 130),
231
+ title: "ID",
232
+ resizable: false,
233
+ frozen: largeLayout,
234
+ headerAlign: "center",
235
+ align: "center",
236
+ AdditionalHeaderWidget: () => additionalIDHeaderWidget
237
+ }
238
+
239
+ const columns: VirtualTableColumn[] = [
240
+ idColumn,
241
+ ...(displayedColumnIds
242
+ ? displayedColumnIds
332
243
  .map((p) => {
333
244
  return collectionColumns.find(c => c.key === p.key);
334
- }).filter(Boolean) as VirtualTableColumn[]
335
- ], [collectionColumns, displayedColumnIds, idColumn]);
245
+ }).filter(Boolean)
246
+ : collectionColumns) as VirtualTableColumn[]
247
+ ];
248
+
249
+ const cellRenderer = useCallback((props: CellRendererParams<any>) => {
250
+ const column = props.column;
251
+ const columns = props.columns;
252
+ const columnKey = column.key;
336
253
 
337
- const cellRenderer = useCallback((props: CellRendererParams<any>) => {
338
- const column = props.column;
339
- const columns = props.columns;
340
- const columnKey = column.key;
254
+ try {
341
255
  if (props.columnIndex === 0) {
342
256
  if (tableRowActionsBuilder)
343
257
  return tableRowActionsBuilder({
@@ -359,163 +273,54 @@ export const EntityCollectionTable = React.memo<EntityCollectionTableProps<any>>
359
273
  } else {
360
274
  throw Error("Internal: columns not mapped properly");
361
275
  }
362
- }, [additionalFieldsMap, tableRowActionsBuilder, size, additionalCellRenderer, propertyCellRenderer])
363
-
364
- const onFilterUpdate = useCallback((updatedFilterValues?: FilterValues<any>) => {
365
- setFilterValues?.({ ...updatedFilterValues, ...forceFilter } as FilterValues<any>);
366
- }, [forceFilter]);
367
-
368
- // useTraceUpdate({
369
- // data,
370
- // columns,
371
- // inlineEditing,
372
- // size, selectedEntityIds, additionalCellRenderer, propertyCellRenderer,
373
- // cellRenderer,
374
- // onRowClick,
375
- // onEndReached: loadNextPage,
376
- // onResetPagination: resetPagination,
377
- // error: dataLoadingError,
378
- // paginationEnabled,
379
- // onColumnResize,
380
- // loading: dataLoading,
381
- // filter: filterValues,
382
- // onFilterUpdate,
383
- // sortBy,
384
- // onSortByUpdate: setSortBy,
385
- // hoverRow,
386
- // emptyComponent,
387
- // checkFilterCombination,
388
- // createFilterField,
389
- // });
390
-
391
- const onRowClick = inlineEditing ? undefined : (onEntityClick ? onRowClickCallback : undefined);
392
-
393
- return (
394
-
395
- <EntityCollectionTableContext.Provider
396
- value={{
397
- setPopupCell: setPopupCell as ((cell?: SelectedCellProps<M>) => void),
398
- select,
399
- onValueChange,
400
- size,
401
- selectedCell
402
- }}
403
- >
404
-
405
- <div ref={ref}
406
- className="h-full w-full flex flex-col bg-white dark:bg-gray-950">
407
-
408
- <CollectionTableToolbar
409
- forceFilter={disabledFilterChange}
410
- filterIsSet={filterIsSet}
411
- onTextSearch={textSearchEnabled ? onTextSearch : undefined}
412
- textSearchLoading={textSearchLoading}
413
- onTextSearchClick={textSearchEnabled ? onTextSearchClick : undefined}
414
- clearFilter={clearFilter}
415
- size={size}
416
- onSizeChanged={updateSize}
417
- title={title}
418
- actionsStart={actionsStart}
419
- actions={actions}
420
- loading={dataLoading}/>
421
-
422
- <VirtualTable
423
- data={data}
424
- columns={columns}
425
- cellRenderer={cellRenderer}
426
- onRowClick={onRowClick}
427
- onEndReached={loadNextPage}
428
- onResetPagination={resetPagination}
429
- error={dataLoadingError}
430
- paginationEnabled={paginationEnabled}
431
- onColumnResize={onColumnResize}
432
- size={size}
433
- loading={dataLoading}
434
- filter={filterValues}
435
- onFilterUpdate={setFilterValues ? onFilterUpdate : undefined}
436
- sortBy={sortBy}
437
- onSortByUpdate={setSortBy as ((sortBy?: [string, "asc" | "desc"]) => void)}
438
- hoverRow={hoverRow}
439
- emptyComponent={emptyComponent}
440
- checkFilterCombination={checkFilterCombination}
441
- createFilterField={filterable ? createFilterField : undefined}
442
- rowClassName={useCallback((entity: Entity<M>) => {
443
- return selectedEntityIds?.includes(entity.id) ? "bg-gray-100 bg-opacity-75 dark:bg-gray-800 dark:bg-opacity-75" : "";
444
- }, [selectedEntityIds])}
445
- className="flex-grow"
446
- endAdornment={endAdornment}
447
- AddColumnComponent={AddColumnComponent}
448
- />
449
-
450
- </div>
451
- </EntityCollectionTableContext.Provider>
452
- );
453
-
454
- },
455
- equal
456
- );
457
-
458
- function createFilterField({
459
- id,
460
- filterValue,
461
- setFilterValue,
462
- column,
463
- hidden,
464
- setHidden
465
- }: FilterFormFieldProps<{
466
- resolvedProperty: ResolvedProperty,
467
- disabled: boolean,
468
- }>): React.ReactNode {
469
-
470
- if (!column.custom) {
471
- return null;
472
- }
473
-
474
- const { resolvedProperty } = column.custom;
475
-
476
- const isArray = resolvedProperty?.dataType === "array";
477
- const baseProperty: ResolvedProperty = isArray ? resolvedProperty.of : resolvedProperty;
478
- if (!baseProperty) {
479
- return null;
480
- }
481
- if (baseProperty.dataType === "reference") {
482
- return <ReferenceFilterField value={filterValue}
483
- setValue={setFilterValue}
484
- name={id as string}
485
- isArray={isArray}
486
- path={baseProperty.path}
487
- title={resolvedProperty?.name}
488
- previewProperties={baseProperty?.previewProperties}
489
- hidden={hidden}
490
- setHidden={setHidden}/>;
491
- } else if (baseProperty.dataType === "number" || baseProperty.dataType === "string") {
492
- const name = baseProperty.name;
493
- const enumValues = baseProperty.enumValues ? enumToObjectEntries(baseProperty.enumValues) : undefined;
494
- return <StringNumberFilterField value={filterValue}
495
- setValue={setFilterValue}
496
- name={id as string}
497
- dataType={baseProperty.dataType}
498
- isArray={isArray}
499
- enumValues={enumValues}
500
- title={name}/>;
501
- } else if (baseProperty.dataType === "boolean") {
502
- const name = baseProperty.name;
503
- return <BooleanFilterField value={filterValue}
504
- setValue={setFilterValue}
505
- name={id as string}
506
- title={name}/>;
507
-
508
- } else if (baseProperty.dataType === "date") {
509
- const title = baseProperty.name;
510
- return <DateTimeFilterField value={filterValue}
511
- setValue={setFilterValue}
512
- name={id as string}
513
- mode={baseProperty.mode}
514
- isArray={isArray}
515
- title={title}/>;
516
- }
276
+ } catch (e: any) {
277
+ console.error("Error rendering cell", e);
278
+ return <EntityTableCell
279
+ size={size}
280
+ width={column.width}
281
+ saved={false}
282
+ value={null}
283
+ align={"left"}
284
+ fullHeight={false}
285
+ disabled={true}>
286
+ <ErrorView error={e}/>
287
+ </EntityTableCell>;
288
+ }
289
+ }, [tableRowActionsBuilder, additionalCellRenderer, propertyCellRenderer, size]);
517
290
 
518
291
  return (
519
- <div>{`Currently the filter field ${resolvedProperty.dataType} is not supported`}</div>
292
+
293
+ <div ref={ref}
294
+ style={style}
295
+ className={cls("h-full w-full flex flex-col bg-white dark:bg-gray-950", className)}>
296
+
297
+ <CollectionTableToolbar
298
+ onTextSearch={textSearchEnabled ? onTextSearch : undefined}
299
+ textSearchLoading={textSearchLoading}
300
+ onTextSearchClick={textSearchEnabled ? onTextSearchClick : undefined}
301
+ size={size}
302
+ onSizeChanged={updateSize}
303
+ title={title}
304
+ actionsStart={actionsStart}
305
+ actions={actions}
306
+ loading={tableController.dataLoading}/>
307
+
308
+ <SelectableTable columns={columns}
309
+ size={size}
310
+ inlineEditing={inlineEditing}
311
+ cellRenderer={cellRenderer}
312
+ onEntityClick={onEntityClick}
313
+ highlightedRow={useCallback((entity: Entity<M>) => selectedEntityIds?.includes(entity.id) ?? false, [selectedEntityIds])}
314
+ tableController={tableController}
315
+ onValueChange={onValueChange}
316
+ onColumnResize={onColumnResize}
317
+ hoverRow={hoverRow}
318
+ filterable={filterable}
319
+ emptyComponent={emptyComponent}
320
+ endAdornment={endAdornment}
321
+ AddColumnComponent={AddColumnComponent}/>
322
+
323
+ </div>
520
324
  );
521
- }
325
+
326
+ };