@firecms/core 3.0.0-canary.98 → 3.0.0-rc.1

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 (349) hide show
  1. package/README.md +2 -2
  2. package/dist/app/Drawer.d.ts +0 -1
  3. package/dist/app/Scaffold.d.ts +4 -0
  4. package/dist/components/ArrayContainer.d.ts +31 -12
  5. package/dist/components/{DeleteConfirmationDialog.d.ts → ConfirmationDialog.d.ts} +1 -1
  6. package/dist/components/EntityCollectionTable/EntityCollectionRowActions.d.ts +3 -1
  7. package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +2 -2
  8. package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +17 -3
  9. package/dist/components/EntityCollectionTable/fields/TableReferenceField.d.ts +1 -1
  10. package/dist/components/EntityCollectionTable/index.d.ts +1 -1
  11. package/dist/components/EntityCollectionTable/internal/popup_field/PopupFormField.d.ts +6 -3
  12. package/dist/components/EntityCollectionView/EntityCollectionView.d.ts +8 -0
  13. package/dist/components/EntityCollectionView/utils.d.ts +3 -0
  14. package/dist/components/EntityJsonPreview.d.ts +3 -0
  15. package/dist/components/EntityPreview.d.ts +8 -6
  16. package/dist/components/HomePage/DefaultHomePage.d.ts +2 -15
  17. package/dist/components/HomePage/HomePageDnD.d.ts +76 -0
  18. package/dist/components/HomePage/NavigationCard.d.ts +3 -1
  19. package/dist/components/HomePage/NavigationCardBinding.d.ts +3 -2
  20. package/dist/components/HomePage/NavigationGroup.d.ts +8 -1
  21. package/dist/components/HomePage/RenameGroupDialog.d.ts +9 -0
  22. package/dist/components/PropertyConfigBadge.d.ts +2 -1
  23. package/dist/components/PropertyIdCopyTooltip.d.ts +8 -0
  24. package/dist/components/SelectableTable/SelectableTable.d.ts +13 -3
  25. package/dist/components/SelectableTable/filters/ReferenceFilterField.d.ts +1 -1
  26. package/dist/components/UnsavedChangesDialog.d.ts +8 -0
  27. package/dist/components/VirtualTable/VirtualTableProps.d.ts +11 -2
  28. package/dist/components/common/default_entity_actions.d.ts +0 -2
  29. package/dist/components/common/index.d.ts +1 -1
  30. package/dist/components/common/useColumnsIds.d.ts +1 -0
  31. package/dist/components/common/{useDataSourceEntityCollectionTableController.d.ts → useDataSourceTableController.d.ts} +10 -2
  32. package/dist/components/common/useDebouncedCallback.d.ts +1 -0
  33. package/dist/components/common/useScrollRestoration.d.ts +14 -0
  34. package/dist/components/index.d.ts +3 -1
  35. package/dist/contexts/BreacrumbsContext.d.ts +8 -0
  36. package/dist/core/DefaultAppBar.d.ts +8 -2
  37. package/dist/core/DrawerNavigationItem.d.ts +2 -1
  38. package/dist/core/EntityEditView.d.ts +40 -22
  39. package/dist/core/EntityEditViewFormActions.d.ts +2 -0
  40. package/dist/core/FireCMS.d.ts +2 -2
  41. package/dist/core/FireCMSRouter.d.ts +4 -0
  42. package/dist/core/NavigationRoutes.d.ts +0 -1
  43. package/dist/core/SideDialogs.d.ts +4 -2
  44. package/dist/core/field_configs.d.ts +1 -1
  45. package/dist/core/index.d.ts +2 -1
  46. package/dist/form/EntityForm.d.ts +50 -0
  47. package/dist/form/EntityFormActions.d.ts +21 -0
  48. package/dist/form/PropertyFieldBinding.d.ts +1 -1
  49. package/dist/form/components/FormEntry.d.ts +6 -0
  50. package/dist/form/components/FormLayout.d.ts +5 -0
  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/index.d.ts +3 -1
  54. package/dist/form/field_bindings/ArrayCustomShapedFieldBinding.d.ts +1 -1
  55. package/dist/form/field_bindings/ArrayOfReferencesFieldBinding.d.ts +1 -1
  56. package/dist/form/field_bindings/BlockFieldBinding.d.ts +1 -1
  57. package/dist/form/field_bindings/KeyValueFieldBinding.d.ts +1 -1
  58. package/dist/form/field_bindings/MapFieldBinding.d.ts +1 -1
  59. package/dist/form/field_bindings/MarkdownEditorFieldBinding.d.ts +11 -0
  60. package/dist/form/field_bindings/{MultiSelectBinding.d.ts → MultiSelectFieldBinding.d.ts} +1 -1
  61. package/dist/form/field_bindings/ReadOnlyFieldBinding.d.ts +1 -1
  62. package/dist/form/field_bindings/ReferenceAsStringFieldBinding.d.ts +9 -0
  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 +4 -10
  67. package/dist/form/field_bindings/SwitchFieldBinding.d.ts +1 -2
  68. package/dist/form/field_bindings/TextFieldBinding.d.ts +1 -1
  69. package/dist/form/index.d.ts +17 -16
  70. package/dist/form/useClearRestoreValue.d.ts +2 -2
  71. package/dist/hooks/data/delete.d.ts +4 -4
  72. package/dist/hooks/data/save.d.ts +3 -3
  73. package/dist/hooks/data/useCollectionFetch.d.ts +1 -1
  74. package/dist/hooks/data/useEntityFetch.d.ts +4 -3
  75. package/dist/hooks/useAuthController.d.ts +1 -1
  76. package/dist/hooks/useBreadcrumbsController.d.ts +26 -0
  77. package/dist/hooks/useBuildNavigationController.d.ts +57 -12
  78. package/dist/hooks/useFireCMSContext.d.ts +1 -1
  79. package/dist/hooks/useModeController.d.ts +1 -2
  80. package/dist/hooks/useProjectLog.d.ts +7 -1
  81. package/dist/hooks/useResolvedNavigationFrom.d.ts +3 -3
  82. package/dist/hooks/useValidateAuthenticator.d.ts +3 -3
  83. package/dist/index.es.js +20108 -14471
  84. package/dist/index.es.js.map +1 -1
  85. package/dist/index.umd.js +20039 -14407
  86. package/dist/index.umd.js.map +1 -1
  87. package/dist/internal/useBuildDataSource.d.ts +3 -2
  88. package/dist/internal/useBuildSideEntityController.d.ts +3 -3
  89. package/dist/internal/useUnsavedChangesDialog.d.ts +7 -9
  90. package/dist/preview/PropertyPreviewProps.d.ts +1 -1
  91. package/dist/preview/components/EnumValuesChip.d.ts +1 -1
  92. package/dist/preview/components/ReferencePreview.d.ts +2 -2
  93. package/dist/preview/util.d.ts +3 -3
  94. package/dist/routes/CustomCMSRoute.d.ts +4 -0
  95. package/dist/routes/FireCMSRoute.d.ts +1 -0
  96. package/dist/routes/HomePageRoute.d.ts +3 -0
  97. package/dist/types/analytics.d.ts +1 -1
  98. package/dist/types/auth.d.ts +7 -9
  99. package/dist/types/collections.d.ts +86 -25
  100. package/dist/types/customization_controller.d.ts +8 -0
  101. package/dist/types/datasource.d.ts +19 -17
  102. package/dist/types/dialogs_controller.d.ts +7 -3
  103. package/dist/types/entities.d.ts +2 -1
  104. package/dist/types/entity_actions.d.ts +58 -8
  105. package/dist/types/entity_callbacks.d.ts +16 -16
  106. package/dist/types/entity_overrides.d.ts +2 -2
  107. package/dist/types/export_import.d.ts +4 -4
  108. package/dist/types/fields.d.ts +43 -17
  109. package/dist/types/firecms.d.ts +16 -3
  110. package/dist/types/firecms_context.d.ts +1 -1
  111. package/dist/types/navigation.d.ts +60 -17
  112. package/dist/types/permissions.d.ts +4 -4
  113. package/dist/types/plugins.d.ts +42 -9
  114. package/dist/types/properties.d.ts +65 -22
  115. package/dist/types/property_config.d.ts +1 -3
  116. package/dist/types/roles.d.ts +3 -0
  117. package/dist/types/side_dialogs_controller.d.ts +10 -0
  118. package/dist/types/side_entity_controller.d.ts +14 -1
  119. package/dist/types/storage.d.ts +75 -0
  120. package/dist/types/user.d.ts +1 -0
  121. package/dist/util/builders.d.ts +3 -3
  122. package/dist/util/callbacks.d.ts +2 -0
  123. package/dist/util/createFormexStub.d.ts +2 -0
  124. package/dist/util/entities.d.ts +2 -2
  125. package/dist/util/entity_actions.d.ts +2 -0
  126. package/dist/util/entity_cache.d.ts +23 -0
  127. package/dist/util/icon_synonyms.d.ts +0 -1
  128. package/dist/util/icons.d.ts +5 -2
  129. package/dist/util/index.d.ts +3 -0
  130. package/dist/util/navigation_from_path.d.ts +10 -1
  131. package/dist/util/navigation_utils.d.ts +13 -1
  132. package/dist/util/objects.d.ts +2 -1
  133. package/dist/util/permissions.d.ts +4 -4
  134. package/dist/util/property_utils.d.ts +4 -4
  135. package/dist/util/references.d.ts +2 -2
  136. package/dist/util/resolutions.d.ts +30 -6
  137. package/dist/util/storage.d.ts +1 -1
  138. package/dist/util/useStorageUploadController.d.ts +2 -2
  139. package/package.json +133 -125
  140. package/src/app/Drawer.tsx +0 -1
  141. package/src/app/Scaffold.tsx +33 -29
  142. package/src/components/ArrayContainer.tsx +447 -229
  143. package/src/components/CircularProgressCenter.tsx +1 -1
  144. package/src/components/ClearFilterSortButton.tsx +1 -1
  145. package/src/components/{DeleteConfirmationDialog.tsx → ConfirmationDialog.tsx} +12 -11
  146. package/src/components/DeleteEntityDialog.tsx +13 -20
  147. package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +59 -25
  148. package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +23 -17
  149. package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +20 -3
  150. package/src/components/EntityCollectionTable/PropertyTableCell.tsx +35 -9
  151. package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +21 -16
  152. package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +6 -12
  153. package/src/components/EntityCollectionTable/index.tsx +1 -1
  154. package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +6 -6
  155. package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +35 -26
  156. package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +20 -8
  157. package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +132 -101
  158. package/src/components/EntityCollectionTable/internal/popup_field/useDraggable.tsx +9 -9
  159. package/src/components/EntityCollectionView/EntityCollectionView.tsx +178 -85
  160. package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +7 -4
  161. package/src/components/EntityCollectionView/useSelectionController.tsx +5 -4
  162. package/src/components/EntityCollectionView/utils.ts +19 -0
  163. package/src/components/EntityJsonPreview.tsx +66 -0
  164. package/src/components/EntityPreview.tsx +75 -57
  165. package/src/components/EntityView.tsx +8 -5
  166. package/src/components/ErrorView.tsx +3 -3
  167. package/src/components/FireCMSLogo.tsx +7 -51
  168. package/src/components/HomePage/DefaultHomePage.tsx +522 -160
  169. package/src/components/HomePage/FavouritesView.tsx +9 -14
  170. package/src/components/HomePage/HomePageDnD.tsx +642 -0
  171. package/src/components/HomePage/NavigationCard.tsx +47 -38
  172. package/src/components/HomePage/NavigationCardBinding.tsx +16 -15
  173. package/src/components/HomePage/NavigationGroup.tsx +144 -30
  174. package/src/components/HomePage/RenameGroupDialog.tsx +117 -0
  175. package/src/components/HomePage/SmallNavigationCard.tsx +1 -2
  176. package/src/components/NotFoundPage.tsx +2 -2
  177. package/src/components/PropertyConfigBadge.tsx +9 -3
  178. package/src/components/PropertyIdCopyTooltip.tsx +47 -0
  179. package/src/components/ReferenceTable/ReferenceSelectionTable.tsx +22 -13
  180. package/src/components/SearchIconsView.tsx +2 -2
  181. package/src/components/SelectableTable/SelectableTable.tsx +154 -142
  182. package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +4 -2
  183. package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +10 -8
  184. package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +59 -10
  185. package/src/components/UnsavedChangesDialog.tsx +46 -0
  186. package/src/components/VirtualTable/VirtualTable.tsx +65 -44
  187. package/src/components/VirtualTable/VirtualTableCell.tsx +0 -8
  188. package/src/components/VirtualTable/VirtualTableHeader.tsx +8 -8
  189. package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +1 -1
  190. package/src/components/VirtualTable/VirtualTableProps.tsx +12 -2
  191. package/src/components/VirtualTable/VirtualTableRow.tsx +1 -1
  192. package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +4 -4
  193. package/src/components/VirtualTable/fields/VirtualTableInput.tsx +2 -2
  194. package/src/components/VirtualTable/fields/VirtualTableNumberInput.tsx +2 -1
  195. package/src/components/VirtualTable/fields/VirtualTableSelect.tsx +16 -28
  196. package/src/components/common/default_entity_actions.tsx +62 -42
  197. package/src/components/common/index.ts +1 -1
  198. package/src/components/common/useColumnsIds.tsx +1 -1
  199. package/src/components/common/useDataSourceTableController.tsx +420 -0
  200. package/src/components/common/useDebouncedCallback.tsx +20 -0
  201. package/src/components/common/useScrollRestoration.tsx +68 -0
  202. package/src/components/common/useTableSearchHelper.ts +1 -0
  203. package/src/components/index.tsx +4 -1
  204. package/src/contexts/BreacrumbsContext.tsx +38 -0
  205. package/src/contexts/DialogsProvider.tsx +3 -2
  206. package/src/contexts/ModeController.tsx +1 -3
  207. package/src/contexts/SnackbarProvider.tsx +2 -0
  208. package/src/core/DefaultAppBar.tsx +124 -85
  209. package/src/core/DefaultDrawer.tsx +30 -22
  210. package/src/core/DrawerNavigationItem.tsx +32 -28
  211. package/src/core/EntityEditView.tsx +388 -995
  212. package/src/core/EntityEditViewFormActions.tsx +329 -0
  213. package/src/core/EntitySidePanel.tsx +88 -20
  214. package/src/core/FireCMS.tsx +46 -25
  215. package/src/core/FireCMSRouter.tsx +17 -0
  216. package/src/core/NavigationRoutes.tsx +23 -32
  217. package/src/core/SideDialogs.tsx +22 -12
  218. package/src/core/field_configs.tsx +24 -10
  219. package/src/core/index.tsx +4 -2
  220. package/src/form/EntityForm.tsx +814 -0
  221. package/src/form/EntityFormActions.tsx +211 -0
  222. package/src/form/PropertyFieldBinding.tsx +55 -41
  223. package/src/form/components/CustomIdField.tsx +9 -3
  224. package/src/form/components/FieldHelperText.tsx +1 -1
  225. package/src/form/components/FormEntry.tsx +22 -0
  226. package/src/form/components/FormLayout.tsx +16 -0
  227. package/src/form/components/LabelWithIcon.tsx +30 -19
  228. package/src/form/components/LabelWithIconAndTooltip.tsx +28 -0
  229. package/src/form/components/StorageItemPreview.tsx +5 -4
  230. package/src/form/components/StorageUploadProgress.tsx +2 -3
  231. package/src/form/components/index.tsx +3 -1
  232. package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +30 -18
  233. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +47 -36
  234. package/src/form/field_bindings/BlockFieldBinding.tsx +55 -33
  235. package/src/form/field_bindings/DateTimeFieldBinding.tsx +18 -14
  236. package/src/form/field_bindings/KeyValueFieldBinding.tsx +19 -15
  237. package/src/form/field_bindings/MapFieldBinding.tsx +72 -62
  238. package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +159 -0
  239. package/src/form/field_bindings/{MultiSelectBinding.tsx → MultiSelectFieldBinding.tsx} +26 -21
  240. package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +10 -8
  241. package/src/form/field_bindings/ReferenceAsStringFieldBinding.tsx +135 -0
  242. package/src/form/field_bindings/ReferenceFieldBinding.tsx +28 -19
  243. package/src/form/field_bindings/RepeatFieldBinding.tsx +56 -32
  244. package/src/form/field_bindings/SelectFieldBinding.tsx +22 -13
  245. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +247 -168
  246. package/src/form/field_bindings/SwitchFieldBinding.tsx +29 -24
  247. package/src/form/field_bindings/TextFieldBinding.tsx +28 -24
  248. package/src/form/index.tsx +17 -37
  249. package/src/form/useClearRestoreValue.tsx +2 -2
  250. package/src/form/validation.ts +12 -6
  251. package/src/hooks/data/delete.ts +6 -5
  252. package/src/hooks/data/save.ts +26 -35
  253. package/src/hooks/data/useCollectionFetch.tsx +3 -3
  254. package/src/hooks/data/useDataSource.tsx +10 -2
  255. package/src/hooks/data/useEntityFetch.tsx +10 -6
  256. package/src/hooks/useAuthController.tsx +1 -1
  257. package/src/hooks/useBreadcrumbsController.tsx +31 -0
  258. package/src/hooks/useBrowserTitleAndIcon.tsx +1 -1
  259. package/src/hooks/useBuildModeController.tsx +15 -28
  260. package/src/hooks/useBuildNavigationController.tsx +386 -124
  261. package/src/hooks/useFireCMSContext.tsx +3 -33
  262. package/src/hooks/useLargeLayout.tsx +0 -35
  263. package/src/hooks/useModeController.tsx +1 -2
  264. package/src/hooks/useProjectLog.tsx +16 -5
  265. package/src/hooks/useResolvedNavigationFrom.tsx +9 -11
  266. package/src/hooks/useValidateAuthenticator.tsx +3 -3
  267. package/src/internal/useBuildDataSource.ts +67 -80
  268. package/src/internal/useBuildSideDialogsController.tsx +4 -2
  269. package/src/internal/useBuildSideEntityController.tsx +149 -86
  270. package/src/internal/useUnsavedChangesDialog.tsx +127 -91
  271. package/src/preview/PropertyPreview.tsx +28 -12
  272. package/src/preview/PropertyPreviewProps.tsx +1 -1
  273. package/src/preview/components/BooleanPreview.tsx +1 -1
  274. package/src/preview/components/EmptyValue.tsx +1 -1
  275. package/src/preview/components/EnumValuesChip.tsx +1 -1
  276. package/src/preview/components/ImagePreview.tsx +10 -9
  277. package/src/preview/components/ReferencePreview.tsx +6 -16
  278. package/src/preview/components/UrlComponentPreview.tsx +20 -21
  279. package/src/preview/property_previews/ArrayOfMapsPreview.tsx +6 -5
  280. package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +5 -4
  281. package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +5 -3
  282. package/src/preview/property_previews/ArrayOfStringsPreview.tsx +4 -3
  283. package/src/preview/property_previews/ArrayOneOfPreview.tsx +6 -4
  284. package/src/preview/property_previews/ArrayPropertyPreview.tsx +5 -3
  285. package/src/preview/property_previews/MapPropertyPreview.tsx +7 -6
  286. package/src/preview/property_previews/SkeletonPropertyComponent.tsx +13 -13
  287. package/src/preview/property_previews/StringPropertyPreview.tsx +2 -2
  288. package/src/preview/util.ts +10 -10
  289. package/src/routes/CustomCMSRoute.tsx +21 -0
  290. package/src/routes/FireCMSRoute.tsx +246 -0
  291. package/src/routes/HomePageRoute.tsx +17 -0
  292. package/src/types/analytics.ts +3 -0
  293. package/src/types/auth.tsx +8 -12
  294. package/src/types/collections.ts +101 -28
  295. package/src/types/customization_controller.tsx +9 -0
  296. package/src/types/datasource.ts +21 -20
  297. package/src/types/dialogs_controller.tsx +7 -3
  298. package/src/types/entities.ts +3 -1
  299. package/src/types/entity_actions.tsx +71 -8
  300. package/src/types/entity_callbacks.ts +18 -18
  301. package/src/types/entity_overrides.tsx +2 -2
  302. package/src/types/export_import.ts +4 -4
  303. package/src/types/fields.tsx +52 -19
  304. package/src/types/firecms.tsx +18 -4
  305. package/src/types/firecms_context.tsx +1 -1
  306. package/src/types/navigation.ts +76 -22
  307. package/src/types/permissions.ts +5 -5
  308. package/src/types/plugins.tsx +50 -9
  309. package/src/types/properties.ts +74 -22
  310. package/src/types/property_config.tsx +1 -2
  311. package/src/types/roles.ts +3 -0
  312. package/src/types/side_dialogs_controller.tsx +15 -0
  313. package/src/types/side_entity_controller.tsx +16 -1
  314. package/src/types/storage.ts +82 -0
  315. package/src/types/user.ts +2 -0
  316. package/src/util/builders.ts +10 -8
  317. package/src/util/callbacks.ts +119 -0
  318. package/src/util/createFormexStub.tsx +62 -0
  319. package/src/util/entities.ts +5 -3
  320. package/src/util/entity_actions.ts +28 -0
  321. package/src/util/entity_cache.ts +204 -0
  322. package/src/util/icon_list.ts +1 -1
  323. package/src/util/icon_synonyms.ts +0 -1
  324. package/src/util/icons.tsx +36 -11
  325. package/src/util/index.ts +3 -0
  326. package/src/util/join_collections.ts +9 -2
  327. package/src/util/make_properties_editable.ts +13 -5
  328. package/src/util/navigation_from_path.ts +33 -12
  329. package/src/util/navigation_utils.ts +135 -19
  330. package/src/util/objects.ts +74 -14
  331. package/src/util/parent_references_from_path.ts +3 -3
  332. package/src/util/permissions.ts +8 -8
  333. package/src/util/property_utils.tsx +17 -6
  334. package/src/util/references.ts +19 -8
  335. package/src/util/resolutions.ts +93 -24
  336. package/src/util/storage.ts +6 -2
  337. package/src/util/useStorageUploadController.tsx +74 -29
  338. package/dist/components/EntityCollectionTable/internal/popup_field/ElementResizeListener.d.ts +0 -5
  339. package/dist/components/PropertyIdCopyTooltipContent.d.ts +0 -3
  340. package/dist/form/PropertiesForm.d.ts +0 -8
  341. package/dist/form/components/FormikArrayContainer.d.ts +0 -18
  342. package/dist/form/field_bindings/MarkdownFieldBinding.d.ts +0 -9
  343. package/src/components/EntityCollectionTable/internal/popup_field/ElementResizeListener.tsx +0 -59
  344. package/src/components/PropertyIdCopyTooltipContent.tsx +0 -27
  345. package/src/components/common/useDataSourceEntityCollectionTableController.tsx +0 -236
  346. package/src/form/PropertiesForm.tsx +0 -81
  347. package/src/form/components/FormikArrayContainer.tsx +0 -44
  348. package/src/form/field_bindings/MarkdownFieldBinding.tsx +0 -695
  349. /package/src/util/{common.tsx → common.ts} +0 -0
@@ -0,0 +1,46 @@
1
+ import { Button, Dialog, DialogActions, DialogContent, DialogTitle, Typography } from "@firecms/ui";
2
+
3
+ export interface UnsavedChangesDialogProps {
4
+ open: boolean;
5
+ body?: React.ReactNode;
6
+ title?: string;
7
+ handleOk: () => void;
8
+ handleCancel: () => void;
9
+ }
10
+
11
+ export function UnsavedChangesDialog({
12
+ open,
13
+ handleOk,
14
+ handleCancel,
15
+ body,
16
+ title
17
+ }: UnsavedChangesDialogProps) {
18
+
19
+ return (
20
+ <Dialog
21
+ onEscapeKeyDown={() => {
22
+ handleCancel();
23
+ }}
24
+ open={open}
25
+ >
26
+ <DialogTitle variant={"h6"}>{title}</DialogTitle>
27
+ <DialogContent>
28
+
29
+ {body}
30
+
31
+ <Typography>
32
+ Are you sure you want to leave this page?
33
+ </Typography>
34
+
35
+ </DialogContent>
36
+ <DialogActions>
37
+ <Button variant="text"
38
+ color={"primary"}
39
+ onClick={handleCancel} autoFocus> Cancel </Button>
40
+ <Button
41
+ color={"primary"}
42
+ onClick={handleOk}> Ok </Button>
43
+ </DialogActions>
44
+ </Dialog>
45
+ );
46
+ }
@@ -20,6 +20,7 @@ import { VirtualTableHeaderRow } from "./VirtualTableHeaderRow";
20
20
  import { VirtualTableRow } from "./VirtualTableRow";
21
21
  import { VirtualTableCell } from "./VirtualTableCell";
22
22
  import { AssignmentIcon, CenteredView, cls, Typography } from "@firecms/ui";
23
+ import { useDebounceCallback } from "../common/useDebouncedCallback";
23
24
 
24
25
  const VirtualListContext = createContext<VirtualTableContextProps<any>>({} as any);
25
26
  VirtualListContext.displayName = "VirtualListContext";
@@ -63,10 +64,10 @@ const innerElementType = forwardRef<HTMLDivElement, InnerElementProps>(({
63
64
 
64
65
  {customView && <div style={{
65
66
  position: "sticky",
66
- top: "56px",
67
+ top: "48px",
67
68
  flexGrow: 1,
68
- height: "calc(100% - 56px)",
69
- marginTop: "calc(56px - 100vh)",
69
+ height: "calc(100% - 48px)",
70
+ marginTop: "calc(48px - 100vh)",
70
71
  left: 0
71
72
  }}>{customView}</div>}
72
73
 
@@ -103,6 +104,7 @@ export const VirtualTable = React.memo<VirtualTableProps<any>>(
103
104
  error,
104
105
  emptyComponent,
105
106
  onSortByUpdate,
107
+ onScroll: onScrollProp,
106
108
  loading,
107
109
  cellRenderer,
108
110
  hoverRow,
@@ -112,7 +114,7 @@ export const VirtualTable = React.memo<VirtualTableProps<any>>(
112
114
  className,
113
115
  endAdornment,
114
116
  AddColumnComponent,
115
- debug
117
+ initialScroll = 0,
116
118
  }: VirtualTableProps<T>) {
117
119
 
118
120
  const sortByProperty: string | undefined = sortBy ? sortBy[0] : undefined;
@@ -123,21 +125,59 @@ export const VirtualTable = React.memo<VirtualTableProps<any>>(
123
125
  const tableRef = useRef<HTMLDivElement>(null);
124
126
  const endReachCallbackThreshold = useRef<number>(0);
125
127
 
128
+ const debouncedScroll = useDebounceCallback(onScrollProp, 200);
129
+
130
+ // Set initial scroll position
131
+ useEffect(() => {
132
+ if (tableRef.current && initialScroll) {
133
+ const { scrollLeft } = tableRef.current;
134
+ tableRef.current.scrollTo(scrollLeft, initialScroll);
135
+ }
136
+ }, [tableRef, initialScroll]);
137
+
126
138
  useEffect(() => {
127
139
  setColumns(columnsProp);
128
140
  }, [columnsProp]);
129
141
 
130
- const [measureRef, bounds] = useMeasure();
142
+ const [_, setForceUpdate] = useState(false);
143
+ useEffect(() => {
144
+ // Create a ResizeObserver to detect size changes more aggressively
145
+ if (tableRef.current) {
146
+ const resizeObserver = new ResizeObserver(() => {
147
+ // Force a re-render when size changes
148
+ setForceUpdate(prev => !prev);
149
+ });
150
+
151
+ resizeObserver.observe(tableRef.current);
152
+
153
+ return () => {
154
+ if (tableRef.current) {
155
+ resizeObserver.unobserve(tableRef.current);
156
+ }
157
+ resizeObserver.disconnect();
158
+ };
159
+ }
160
+ return () => {
161
+ }
162
+ }, [tableRef]);
163
+
164
+ const [measureRef, bounds] = useMeasure({
165
+ debounce: 50,
166
+ polyfill: ResizeObserver,
167
+ scroll: true,
168
+ // This is important for handling zooming in react-flow
169
+ offsetSize: true
170
+ });
131
171
 
132
172
  const onColumnResizeInternal = useCallback((params: OnVirtualTableColumnResizeParams) => {
133
- if (debug)
134
- console.log("onColumnResizeInternal", params);
135
- setColumns(columns.map((column) => column.key === params.column.key ? params.column : column));
136
- }, [columns]);
173
+ setColumns(prevColumns =>
174
+ prevColumns.map((column) =>
175
+ column.key === params.column.key ? params.column : column
176
+ )
177
+ );
178
+ }, []);
137
179
 
138
180
  const onColumnResizeEndInternal = useCallback((params: OnVirtualTableColumnResizeParams) => {
139
- if (debug)
140
- console.log("onColumnResizeEndInternal", params);
141
181
  setColumns(columns.map((column) => column.key === params.column.key ? params.column : column));
142
182
  if (onColumnResize) {
143
183
  onColumnResize(params);
@@ -148,26 +188,18 @@ export const VirtualTable = React.memo<VirtualTableProps<any>>(
148
188
  const filterRef = useRef<VirtualTableFilterValues<any> | undefined>();
149
189
 
150
190
  useEffect(() => {
151
- if (debug)
152
- console.log("Filter updated", filterInput);
153
191
  filterRef.current = filterInput;
154
192
  }, [filterInput]);
155
193
 
156
194
  const scrollToTop = useCallback(() => {
157
- if (debug)
158
- console.log("scrollToTop");
159
195
  endReachCallbackThreshold.current = 0;
160
196
  if (tableRef.current) {
161
- // scrollRef.current = [scrollRef.current[0], 0];
162
197
  tableRef.current.scrollTo(tableRef.current?.scrollLeft, 0);
163
198
  }
164
199
  }, []);
165
200
 
166
201
  const onColumnSort = useCallback((key: string) => {
167
202
 
168
- if (debug)
169
- console.log("onColumnSort", key);
170
-
171
203
  const isDesc = sortByProperty === key && currentSort === "desc";
172
204
  const isAsc = sortByProperty === key && currentSort === "asc";
173
205
  const newSort = isAsc ? "desc" : (isDesc ? undefined : "asc");
@@ -195,12 +227,8 @@ export const VirtualTable = React.memo<VirtualTableProps<any>>(
195
227
  }, [checkFilterCombination, currentSort, onFilterUpdate, onResetPagination, onSortByUpdate, scrollToTop, sortByProperty]);
196
228
 
197
229
  const maxScroll = Math.max((data?.length ?? 0) * rowHeight - bounds.height, 0);
198
- if (debug)
199
- console.log("maxScroll", maxScroll);
200
230
 
201
231
  const onEndReachedInternal = useCallback((scrollOffset: number) => {
202
- if (debug)
203
- console.log("onEndReachedInternal", scrollOffset, endReachCallbackThreshold.current + endOffset);
204
232
  if (onEndReached && (data?.length ?? 0) > 0 && scrollOffset > endReachCallbackThreshold.current + endOffset) {
205
233
  endReachCallbackThreshold.current = scrollOffset;
206
234
  onEndReached();
@@ -216,19 +244,18 @@ export const VirtualTable = React.memo<VirtualTableProps<any>>(
216
244
  scrollOffset: number,
217
245
  scrollUpdateWasRequested: boolean;
218
246
  }) => {
219
- if(debug)
220
- console.log("onScroll", {
247
+ if (onScrollProp) {
248
+ debouncedScroll({
221
249
  scrollDirection,
222
250
  scrollOffset,
223
251
  scrollUpdateWasRequested
224
- });
252
+ })
253
+ }
225
254
  if (!scrollUpdateWasRequested && (scrollOffset >= maxScroll - endOffset))
226
255
  onEndReachedInternal(scrollOffset);
227
256
  }, [maxScroll, onEndReachedInternal]);
228
257
 
229
258
  const onFilterUpdateInternal = useCallback((column: VirtualTableColumn, filterForProperty?: [VirtualTableWhereFilterOp, any]) => {
230
- if(debug)
231
- console.log("onFilterUpdateInternal", column, filterForProperty);
232
259
 
233
260
  endReachCallbackThreshold.current = 0;
234
261
  const filter = filterRef.current;
@@ -248,29 +275,27 @@ export const VirtualTable = React.memo<VirtualTableProps<any>>(
248
275
  if (onFilterUpdate) onFilterUpdate(newFilterValue);
249
276
  }, [checkFilterCombination, currentSort, onFilterUpdate, sortByProperty]);
250
277
 
251
- const buildEmptyView = useCallback(() => {
252
- if (loading)
253
- return <CircularProgressCenter/>;
254
- return <div
255
- className="flex flex-col overflow-auto items-center justify-center p-2 gap-2 h-full">
256
- <AssignmentIcon/>
257
- {emptyComponent}
258
- </div>;
259
- }, [emptyComponent, loading]);
260
-
261
278
  const empty = !loading && (data?.length ?? 0) === 0;
262
279
  const customView = error
263
280
  ? <CenteredView maxWidth={"2xl"}
264
281
  className="flex flex-col gap-2">
265
282
 
266
283
  <Typography variant={"h6"}>
267
- {"Error fetching data from the data source"}
284
+ {"Error"}
268
285
  </Typography>
269
286
 
270
287
  {error?.message && <SafeLinkRenderer text={error.message}/>}
271
288
 
272
289
  </CenteredView>
273
- : (empty ? buildEmptyView() : undefined);
290
+ : (empty
291
+ ? (loading
292
+ ? <CircularProgressCenter/>
293
+ : <div
294
+ className="flex flex-col overflow-auto items-center justify-center p-2 gap-2 h-full">
295
+ <AssignmentIcon/>
296
+ {emptyComponent}
297
+ </div>)
298
+ : undefined);
274
299
 
275
300
  const virtualListController = {
276
301
  data,
@@ -293,10 +318,6 @@ export const VirtualTable = React.memo<VirtualTableProps<any>>(
293
318
  AddColumnComponent
294
319
  };
295
320
 
296
- if(debug)
297
- console.log("VirtualTable render", virtualListController);
298
-
299
- // useTraceUpdate(virtualListController);
300
321
  return (
301
322
  <div
302
323
  ref={measureRef}
@@ -30,14 +30,6 @@ export const VirtualTableCell = React.memo<VirtualTableCellProps<any>>(
30
30
  width: props.column.width
31
31
  } as CellRendererParams<T>
32
32
  );
33
- // return props.rowData && <props.cellRenderer
34
- // rowData={props.rowData}
35
- // rowIndex={props.rowIndex}
36
- // isScrolling={false}
37
- // column={props.column}
38
- // columns={props.columns}
39
- // columnIndex={props.columnIndex}
40
- // width={props.column.width}/>
41
33
  },
42
34
  (a, b) => {
43
35
  return equal(a.rowData, b.rowData) &&
@@ -85,9 +85,9 @@ export const VirtualTableHeader = React.memo<VirtualTableHeaderProps<any>>(
85
85
  return (
86
86
  <ErrorBoundary>
87
87
  <div
88
- className={cls("flex py-0 px-3 h-full text-xs uppercase font-semibold relative select-none items-center bg-gray-50 dark:bg-gray-900",
89
- "text-gray-600 hover:text-gray-800 dark:text-gray-400 dark:hover:text-gray-200 ",
90
- "hover:bg-gray-100 dark:hover:bg-gray-800 hover:bg-opacity-50 dark:hover:bg-opacity-50",
88
+ className={cls("flex py-0 px-3 h-full text-xs uppercase font-semibold relative select-none items-center bg-surface-50 dark:bg-surface-900",
89
+ "text-text-secondary hover:text-text-primary dark:text-text-secondary-dark dark:hover:text-text-primary-dark",
90
+ "hover:bg-surface-100 dark:hover:bg-surface-800 hover:bg-opacity-50 dark:hover:bg-opacity-50",
91
91
  column.frozen ? "sticky left-0 z-10" : "relative z-0"
92
92
  )}
93
93
  style={{
@@ -130,7 +130,7 @@ export const VirtualTableHeader = React.memo<VirtualTableHeaderProps<any>>(
130
130
  invisible={!sort}>
131
131
  <IconButton
132
132
  size={"small"}
133
- className={onHover || openFilter ? "bg-white dark:bg-gray-950" : undefined}
133
+ className={onHover || openFilter ? "bg-white dark:bg-surface-950" : undefined}
134
134
  onClick={() => {
135
135
  onColumnSort(column.key as Extract<keyof M, string>);
136
136
  }}
@@ -157,7 +157,7 @@ export const VirtualTableHeader = React.memo<VirtualTableHeaderProps<any>>(
157
157
  modal={true}
158
158
  trigger={
159
159
  <IconButton
160
- className={onHover || openFilter ? "bg-white dark:bg-gray-950" : undefined}
160
+ className={onHover || openFilter ? "bg-white dark:bg-surface-950" : undefined}
161
161
  size={"small"}
162
162
  onClick={handleSettingsClick}>
163
163
  <FilterListIcon size={"small"}/>
@@ -181,7 +181,7 @@ export const VirtualTableHeader = React.memo<VirtualTableHeaderProps<any>>(
181
181
  ref={resizeHandleRef}
182
182
  className={cls(
183
183
  "absolute h-full w-[6px] top-0 right-0 cursor-col-resize",
184
- hovered && "bg-gray-300 dark:bg-gray-700"
184
+ hovered && "bg-surface-300 dark:bg-surface-700"
185
185
  )}
186
186
  onMouseDown={onClickResizeColumn ? () => onClickResizeColumn(columnIndex, column) : undefined}
187
187
  />}
@@ -238,9 +238,9 @@ function FilterForm<M>({
238
238
  e.preventDefault();
239
239
  submit();
240
240
  }}
241
- className={"text-gray-900 dark:text-white"}>
241
+ className={"text-surface-900 dark:text-white"}>
242
242
  <div
243
- className={cls(defaultBorderMixin, "py-4 px-6 text-xs font-semibold uppercase border-b")}>
243
+ className={cls(defaultBorderMixin, "py-4 px-6 typography-label border-b")}>
244
244
  {column.title ?? id}
245
245
  </div>
246
246
  {filterField && <div className="m-4">
@@ -100,7 +100,7 @@ export const VirtualTableHeaderRow = ({
100
100
 
101
101
  return (
102
102
  <div
103
- className={cls(defaultBorderMixin, "z-20 sticky min-w-full flex w-fit flex-row top-0 left-0 h-12 border-b bg-gray-50 dark:bg-gray-900")}>
103
+ className={cls(defaultBorderMixin, "z-20 sticky min-w-full flex w-fit flex-row top-0 left-0 h-12 border-b bg-surface-50 dark:bg-surface-900")}>
104
104
  {columns.map((c, columnIndex) => {
105
105
  const column = columns[columnIndex];
106
106
 
@@ -82,6 +82,16 @@ export interface VirtualTableProps<T extends Record<string, any>> {
82
82
  */
83
83
  onFilterUpdate?: (filter?: VirtualTableFilterValues<any> | undefined) => void;
84
84
 
85
+ /**
86
+ * Callback when the table is scrolled
87
+ * @param props
88
+ */
89
+ onScroll?: (props: {
90
+ scrollDirection: "forward" | "backward",
91
+ scrollOffset: number,
92
+ scrollUpdateWasRequested: boolean
93
+ }) => void;
94
+
85
95
  /**
86
96
  * Default sort applied to this collection
87
97
  */
@@ -148,9 +158,9 @@ export interface VirtualTableProps<T extends Record<string, any>> {
148
158
  AddColumnComponent?: React.ComponentType;
149
159
 
150
160
  /**
151
- * Debug mode
161
+ * Initial scroll position
152
162
  */
153
- debug?: boolean;
163
+ initialScroll?: number;
154
164
 
155
165
  }
156
166
 
@@ -29,7 +29,7 @@ export const VirtualTableRow = React.memo<VirtualTableRowProps<any>>(
29
29
  return (
30
30
  <div
31
31
  className={cls(
32
- "flex min-w-full text-sm border-b border-gray-200 dark:border-gray-800 border-opacity-40 dark:border-opacity-40",
32
+ "flex min-w-full text-sm border-b border-surface-200 dark:border-surface-800 border-opacity-40 dark:border-opacity-40",
33
33
  rowClassName ? rowClassName(rowData) : "",
34
34
  {
35
35
  "hover:bg-opacity-95": hoverRow,
@@ -1,5 +1,5 @@
1
1
  import React from "react";
2
- import { DateTimeField } from "@firecms/ui";
2
+ import { cls, DateTimeField, focusedDisabled } from "@firecms/ui";
3
3
  import { useCustomizationController } from "../../../hooks";
4
4
 
5
5
  export function VirtualTableDateField(props: {
@@ -26,10 +26,10 @@ export function VirtualTableDateField(props: {
26
26
  <DateTimeField
27
27
  value={internalValue ?? undefined}
28
28
  onChange={(dateValue) => updateValue(dateValue ?? null)}
29
- size={"medium"}
29
+ size={"large"}
30
30
  invisible={true}
31
- className={"w-full h-full"}
32
- inputClassName={"w-full h-full"}
31
+ inputClassName={cls("w-full h-full", focusedDisabled)}
32
+ className={cls("w-full h-full", focusedDisabled)}
33
33
  mode={mode}
34
34
  locale={locale}
35
35
  />
@@ -1,7 +1,7 @@
1
1
  import React, { useEffect, useRef, useState } from "react";
2
2
 
3
3
  import { useDebouncedCallback } from "../../../util";
4
- import { TextareaAutosize } from "@firecms/ui";
4
+ import { focusedDisabled, TextareaAutosize } from "@firecms/ui";
5
5
 
6
6
  export function VirtualTableInput(props: {
7
7
  error: Error | undefined;
@@ -58,6 +58,7 @@ export function VirtualTableInput(props: {
58
58
 
59
59
  return (
60
60
  <TextareaAutosize
61
+ className={focusedDisabled}
61
62
  ref={ref}
62
63
  style={{
63
64
  padding: 0,
@@ -65,7 +66,6 @@ export function VirtualTableInput(props: {
65
66
  width: "100%",
66
67
  color: "unset",
67
68
  fontWeight: "unset",
68
- lineHeight: "unset",
69
69
  fontSize: "unset",
70
70
  fontFamily: "unset",
71
71
  background: "unset",
@@ -1,5 +1,6 @@
1
1
  import React, { useEffect, useRef, useState } from "react";
2
2
  import { useDebouncedCallback } from "../../../util";
3
+ import { cls, focusedDisabled } from "@firecms/ui";
3
4
 
4
5
  export function VirtualTableNumberInput(props: {
5
6
  error: Error | undefined;
@@ -65,7 +66,7 @@ export function VirtualTableNumberInput(props: {
65
66
  return (
66
67
  <input
67
68
  ref={ref}
68
- className="w-full text-right p-0 m-0 bg-transparent border-none resize-none outline-none font-normal leading-normal text-unset"
69
+ className={cls("w-full text-right p-0 m-0 bg-transparent border-none resize-none outline-none font-normal leading-normal text-unset", focusedDisabled)}
69
70
  style={{
70
71
  textAlign: align
71
72
  }}
@@ -1,5 +1,5 @@
1
1
  import { EnumValueConfig } from "../../../types";
2
- import { ArrayEnumPreview, EnumValuesChip } from "../../../preview";
2
+ import { EnumValuesChip } from "../../../preview";
3
3
  import React, { useCallback, useEffect } from "react";
4
4
  import { MultiSelect, MultiSelectItem, Select, SelectItem } from "@firecms/ui";
5
5
 
@@ -18,9 +18,7 @@ export function VirtualTableSelect(props: {
18
18
  }) {
19
19
 
20
20
  const {
21
- name,
22
21
  enumValues,
23
- error,
24
22
  internalValue,
25
23
  disabled,
26
24
  small,
@@ -41,6 +39,7 @@ export function VirtualTableSelect(props: {
41
39
  }, [focused, ref]);
42
40
 
43
41
  const onChange = useCallback((updatedValue: string | string[]) => {
42
+ console.trace("onChange");
44
43
  if (valueType === "number") {
45
44
  if (multiple) {
46
45
  const newValue = (updatedValue as string[]).map((v) => parseFloat(v));
@@ -58,37 +57,27 @@ export function VirtualTableSelect(props: {
58
57
  }
59
58
  }, [multiple, updateValue, valueType]);
60
59
 
61
- const renderValue = (enumKey: string | number, index: number) => {
62
- if (multiple && Array.isArray(enumKey)) {
63
- return <ArrayEnumPreview
64
- key={`${enumKey}-${index}`}
65
- value={enumKey}
66
- name={name}
67
- enumValues={enumValues}
68
- size={small ? "small" : "medium"}/>;
69
- } else {
70
- return <EnumValuesChip
71
- key={`${enumKey}-${index}`}
72
- enumKey={enumKey}
73
- enumValues={enumValues}
74
- size={small ? "small" : "medium"}/>;
75
- }
60
+ const renderValue = (enumKey?: string | number) => {
61
+ return <EnumValuesChip
62
+ key={`${enumKey}`}
63
+ enumKey={String(enumKey)}
64
+ enumValues={enumValues}
65
+ size={small ? "small" : "medium"}/>;
76
66
  };
67
+
77
68
  return (
78
69
  multiple
79
70
  ? <MultiSelect
80
71
  inputRef={ref}
81
- containerClassName="w-full h-full"
82
72
  className="w-full h-full p-0 bg-transparent"
83
73
  position={"item-aligned"}
84
74
  disabled={disabled}
85
- padding={false}
86
- includeFocusOutline={false}
75
+ includeClear={false}
76
+ useChips={false}
87
77
  value={validValue
88
78
  ? ((internalValue as any[]).map(v => v.toString()))
89
79
  : ([])}
90
- onMultiValueChange={onChange}
91
- renderValue={renderValue}>
80
+ onValueChange={onChange}>
92
81
  {enumValues?.map((enumConfig) => (
93
82
  <MultiSelectItem
94
83
  key={enumConfig.id}
@@ -102,17 +91,16 @@ export function VirtualTableSelect(props: {
102
91
  </MultiSelect>
103
92
  : <Select
104
93
  inputRef={ref}
94
+ size={"large"}
95
+ fullWidth={true}
105
96
  className="w-full h-full p-0 bg-transparent"
106
97
  position={"item-aligned"}
107
98
  disabled={disabled}
108
- multiple={multiple}
109
99
  padding={false}
110
- includeFocusOutline={false}
111
100
  value={validValue
112
- ? (multiple ? (internalValue as any[]).map(v => v.toString()) : internalValue?.toString())
113
- : (multiple ? [] : "")}
101
+ ? internalValue?.toString()
102
+ : ""}
114
103
  onValueChange={onChange}
115
- onMultiValueChange={onChange}
116
104
  renderValue={renderValue}>
117
105
  {enumValues?.map((enumConfig) => (
118
106
  <SelectItem