@firecms/core 3.0.1 → 3.1.0-canary.02232f4

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 (334) hide show
  1. package/README.md +1 -1
  2. package/dist/components/AIIcon.d.ts +16 -0
  3. package/dist/components/EntityCollectionTable/EntityCollectionRowActions.d.ts +7 -1
  4. package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +1 -1
  5. package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +14 -0
  6. package/dist/components/EntityCollectionTable/PropertyTableCell.d.ts +6 -0
  7. package/dist/components/EntityCollectionTable/internal/CollectionTableToolbar.d.ts +5 -4
  8. package/dist/components/EntityCollectionTable/internal/EntityTableCell.d.ts +6 -0
  9. package/dist/components/EntityCollectionTable/internal/popup_field/useDraggable.d.ts +2 -2
  10. package/dist/components/EntityCollectionView/Board.d.ts +2 -0
  11. package/dist/components/EntityCollectionView/BoardColumn.d.ts +42 -0
  12. package/dist/components/EntityCollectionView/BoardColumnTitle.d.ts +9 -0
  13. package/dist/components/EntityCollectionView/BoardSortableList.d.ts +14 -0
  14. package/dist/components/EntityCollectionView/CollectionDataErrorBanner.d.ts +4 -0
  15. package/dist/components/EntityCollectionView/EntityBoardCard.d.ts +26 -0
  16. package/dist/components/EntityCollectionView/EntityCard.d.ts +19 -0
  17. package/dist/components/EntityCollectionView/EntityCollectionBoardView.d.ts +20 -0
  18. package/dist/components/EntityCollectionView/EntityCollectionCardView.d.ts +31 -0
  19. package/dist/components/EntityCollectionView/EntityCollectionViewActions.d.ts +2 -2
  20. package/dist/components/EntityCollectionView/EntityCollectionViewStartActions.d.ts +7 -3
  21. package/dist/components/EntityCollectionView/FiltersDialog.d.ts +14 -0
  22. package/dist/components/EntityCollectionView/ViewModeToggle.d.ts +44 -0
  23. package/dist/components/EntityCollectionView/board_types.d.ts +105 -0
  24. package/dist/components/EntityCollectionView/useBoardDataController.d.ts +60 -0
  25. package/dist/components/ErrorBoundary.d.ts +4 -2
  26. package/dist/components/HomePage/DefaultHomePage.d.ts +0 -1
  27. package/dist/components/LanguageToggle.d.ts +1 -0
  28. package/dist/components/SelectableTable/SelectableTable.d.ts +5 -1
  29. package/dist/components/SelectableTable/filters/DateTimeFilterField.d.ts +2 -1
  30. package/dist/components/UnsavedChangesDialog.d.ts +1 -0
  31. package/dist/components/VirtualTable/VirtualTableCell.d.ts +6 -0
  32. package/dist/components/VirtualTable/VirtualTableHeader.d.ts +4 -1
  33. package/dist/components/VirtualTable/VirtualTableHeaderRow.d.ts +1 -1
  34. package/dist/components/VirtualTable/VirtualTableProps.d.ts +17 -1
  35. package/dist/components/VirtualTable/fields/VirtualTableDateField.d.ts +1 -0
  36. package/dist/components/VirtualTable/types.d.ts +3 -0
  37. package/dist/components/index.d.ts +4 -0
  38. package/dist/contexts/index.d.ts +10 -0
  39. package/dist/core/DrawerNavigationGroup.d.ts +45 -0
  40. package/dist/core/index.d.ts +1 -0
  41. package/dist/editor/components/SlashCommandMenu.d.ts +6 -0
  42. package/dist/editor/components/editor-bubble-item.d.ts +8 -0
  43. package/dist/editor/components/editor-bubble.d.ts +8 -0
  44. package/dist/editor/components/image-bubble.d.ts +5 -0
  45. package/dist/editor/components/index.d.ts +16 -0
  46. package/dist/editor/components/table-bubble.d.ts +5 -0
  47. package/dist/editor/editor.d.ts +30 -0
  48. package/dist/editor/extensions/HighlightDecorationExtension.d.ts +24 -0
  49. package/dist/editor/extensions/Image/index.d.ts +6 -0
  50. package/dist/editor/extensions/Image.d.ts +6 -0
  51. package/dist/editor/extensions/TextLoadingDecorationExtension.d.ts +16 -0
  52. package/dist/editor/extensions/clipboard.d.ts +7 -0
  53. package/dist/editor/extensions/custom-keymap.d.ts +1 -0
  54. package/dist/editor/extensions/drag-and-drop.d.ts +9 -0
  55. package/dist/editor/hooks/useProseMirror.d.ts +13 -0
  56. package/dist/editor/hooks/useProseMirrorContext.d.ts +9 -0
  57. package/dist/editor/index.d.ts +2 -0
  58. package/dist/editor/markdown.d.ts +5 -0
  59. package/dist/editor/nodeViews/ImageComponent.d.ts +3 -0
  60. package/dist/editor/nodeViews/ReactNodeView.d.ts +29 -0
  61. package/dist/editor/nodeViews/TaskItemComponent.d.ts +3 -0
  62. package/dist/editor/nodeViews/index.d.ts +6 -0
  63. package/dist/editor/plugins/index.d.ts +2 -0
  64. package/dist/editor/plugins/inputrules.d.ts +6 -0
  65. package/dist/editor/plugins/placeholderPlugin.d.ts +3 -0
  66. package/dist/editor/plugins/slashCommandPlugin.d.ts +12 -0
  67. package/dist/editor/schema.d.ts +2 -0
  68. package/dist/editor/selectors/ai-selector.d.ts +0 -0
  69. package/dist/editor/selectors/color-selector.d.ts +10 -0
  70. package/dist/editor/selectors/link-selector.d.ts +8 -0
  71. package/dist/editor/selectors/node-selector.d.ts +15 -0
  72. package/dist/editor/selectors/text-buttons.d.ts +1 -0
  73. package/dist/editor/types.d.ts +5 -0
  74. package/dist/editor/useProseMirror.d.ts +16 -0
  75. package/dist/editor/utils/prosemirror-utils.d.ts +6 -0
  76. package/dist/editor/utils/remove_classes.d.ts +1 -0
  77. package/dist/editor/utils/useDebouncedCallback.d.ts +1 -0
  78. package/dist/form/components/ErrorFocus.d.ts +1 -1
  79. package/dist/form/field_bindings/MapFieldBinding.d.ts +1 -1
  80. package/dist/form/field_bindings/MarkdownEditorFieldBinding.d.ts +1 -1
  81. package/dist/form/validation.d.ts +3 -2
  82. package/dist/hooks/index.d.ts +1 -0
  83. package/dist/hooks/useBreadcrumbsController.d.ts +16 -0
  84. package/dist/hooks/useBuildNavigationController.d.ts +0 -1
  85. package/dist/hooks/useCollapsedGroups.d.ts +6 -3
  86. package/dist/hooks/useTranslation.d.ts +17 -0
  87. package/dist/i18n/FireCMSi18nProvider.d.ts +33 -0
  88. package/dist/index.d.ts +5 -0
  89. package/dist/index.es.js +30146 -15178
  90. package/dist/index.es.js.map +1 -1
  91. package/dist/index.umd.js +30032 -15085
  92. package/dist/index.umd.js.map +1 -1
  93. package/dist/internal/useRestoreScroll.d.ts +1 -1
  94. package/dist/locales/de.d.ts +2 -0
  95. package/dist/locales/en.d.ts +10 -0
  96. package/dist/locales/es.d.ts +10 -0
  97. package/dist/locales/fr.d.ts +2 -0
  98. package/dist/locales/hi.d.ts +2 -0
  99. package/dist/locales/it.d.ts +2 -0
  100. package/dist/locales/pt.d.ts +7 -0
  101. package/dist/preview/PropertyPreviewProps.d.ts +5 -0
  102. package/dist/preview/components/DatePreview.d.ts +13 -3
  103. package/dist/preview/components/ImagePreview.d.ts +5 -1
  104. package/dist/preview/components/StorageThumbnail.d.ts +2 -1
  105. package/dist/preview/components/UrlComponentPreview.d.ts +2 -1
  106. package/dist/preview/property_previews/ArrayOfStorageComponentsPreview.d.ts +1 -1
  107. package/dist/preview/property_previews/ArrayOfStringsPreview.d.ts +1 -1
  108. package/dist/preview/property_previews/SkeletonPropertyComponent.d.ts +1 -1
  109. package/dist/types/analytics.d.ts +1 -1
  110. package/dist/types/collections.d.ts +88 -2
  111. package/dist/types/customization_controller.d.ts +2 -1
  112. package/dist/types/datasource.d.ts +0 -1
  113. package/dist/types/firecms.d.ts +2 -1
  114. package/dist/types/index.d.ts +1 -0
  115. package/dist/types/navigation.d.ts +2 -2
  116. package/dist/types/plugins.d.ts +69 -1
  117. package/dist/types/properties.d.ts +268 -12
  118. package/dist/types/storage.d.ts +1 -0
  119. package/dist/types/translations.d.ts +669 -0
  120. package/dist/util/__tests__/conditions.test.d.ts +1 -0
  121. package/dist/util/__tests__/objects.test.d.ts +1 -0
  122. package/dist/util/conditions.d.ts +26 -0
  123. package/dist/util/entities.d.ts +2 -3
  124. package/dist/util/index.d.ts +3 -1
  125. package/dist/util/lazy_eager.d.ts +7 -0
  126. package/dist/util/objects.d.ts +1 -0
  127. package/dist/util/property_utils.d.ts +2 -1
  128. package/dist/util/resolutions.d.ts +3 -3
  129. package/dist/util/useStorageUploadController.d.ts +10 -1
  130. package/package.json +51 -12
  131. package/src/app/Scaffold.tsx +20 -19
  132. package/src/components/AIIcon.tsx +41 -0
  133. package/src/components/ArrayContainer.tsx +7 -8
  134. package/src/components/ClearFilterSortButton.tsx +25 -19
  135. package/src/components/ConfirmationDialog.tsx +4 -4
  136. package/src/components/DeleteEntityDialog.tsx +12 -11
  137. package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +82 -43
  138. package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +130 -79
  139. package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +121 -104
  140. package/src/components/EntityCollectionTable/PropertyTableCell.tsx +132 -103
  141. package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +6 -3
  142. package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +24 -44
  143. package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +90 -49
  144. package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +1 -1
  145. package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +3 -2
  146. package/src/components/EntityCollectionTable/internal/popup_field/useDraggable.tsx +11 -11
  147. package/src/components/EntityCollectionView/Board.tsx +324 -0
  148. package/src/components/EntityCollectionView/BoardColumn.tsx +158 -0
  149. package/src/components/EntityCollectionView/BoardColumnTitle.tsx +45 -0
  150. package/src/components/EntityCollectionView/BoardSortableList.tsx +174 -0
  151. package/src/components/EntityCollectionView/CollectionDataErrorBanner.tsx +43 -0
  152. package/src/components/EntityCollectionView/EntityBoardCard.tsx +212 -0
  153. package/src/components/EntityCollectionView/EntityCard.tsx +235 -0
  154. package/src/components/EntityCollectionView/EntityCollectionBoardView.tsx +706 -0
  155. package/src/components/EntityCollectionView/EntityCollectionCardView.tsx +236 -0
  156. package/src/components/EntityCollectionView/EntityCollectionView.tsx +531 -209
  157. package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +35 -22
  158. package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +86 -15
  159. package/src/components/EntityCollectionView/FiltersDialog.tsx +252 -0
  160. package/src/components/EntityCollectionView/ViewModeToggle.tsx +202 -0
  161. package/src/components/EntityCollectionView/board_types.ts +113 -0
  162. package/src/components/EntityCollectionView/useBoardDataController.tsx +490 -0
  163. package/src/components/EntityJsonPreview.tsx +2 -1
  164. package/src/components/EntityView.tsx +3 -2
  165. package/src/components/ErrorBoundary.tsx +27 -15
  166. package/src/components/ErrorTooltip.tsx +2 -1
  167. package/src/components/HomePage/DefaultHomePage.tsx +65 -22
  168. package/src/components/HomePage/HomePageDnD.tsx +59 -42
  169. package/src/components/HomePage/NavigationCard.tsx +20 -18
  170. package/src/components/HomePage/NavigationGroup.tsx +20 -17
  171. package/src/components/HomePage/RenameGroupDialog.tsx +15 -15
  172. package/src/components/HomePage/SmallNavigationCard.tsx +10 -9
  173. package/src/components/LanguageToggle.tsx +66 -0
  174. package/src/components/NotFoundPage.tsx +5 -3
  175. package/src/components/ReferenceTable/ReferenceSelectionTable.tsx +12 -17
  176. package/src/components/ReferenceWidget.tsx +5 -6
  177. package/src/components/SearchIconsView.tsx +3 -1
  178. package/src/components/SelectableTable/SelectableTable.tsx +75 -67
  179. package/src/components/SelectableTable/filters/BooleanFilterField.tsx +7 -6
  180. package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +50 -40
  181. package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +53 -40
  182. package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +60 -58
  183. package/src/components/UnsavedChangesDialog.tsx +6 -6
  184. package/src/components/UserDisplay.tsx +4 -4
  185. package/src/components/VirtualTable/VirtualTable.performance.test.tsx +1 -0
  186. package/src/components/VirtualTable/VirtualTable.tsx +275 -119
  187. package/src/components/VirtualTable/VirtualTableCell.tsx +18 -2
  188. package/src/components/VirtualTable/VirtualTableHeader.tsx +76 -64
  189. package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +163 -42
  190. package/src/components/VirtualTable/VirtualTableProps.tsx +21 -2
  191. package/src/components/VirtualTable/VirtualTableRow.tsx +1 -1
  192. package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +3 -0
  193. package/src/components/VirtualTable/fields/VirtualTableSelect.tsx +19 -6
  194. package/src/components/VirtualTable/types.tsx +3 -0
  195. package/src/components/common/default_entity_actions.tsx +4 -0
  196. package/src/components/common/useColumnsIds.tsx +95 -3
  197. package/src/components/common/useDataSourceTableController.tsx +12 -4
  198. package/src/components/index.tsx +5 -0
  199. package/src/contexts/BreacrumbsContext.tsx +15 -8
  200. package/src/contexts/index.ts +10 -0
  201. package/src/core/DefaultAppBar.tsx +49 -32
  202. package/src/core/DefaultDrawer.tsx +49 -57
  203. package/src/core/DrawerNavigationGroup.tsx +120 -0
  204. package/src/core/DrawerNavigationItem.tsx +4 -3
  205. package/src/core/EntityEditView.tsx +94 -50
  206. package/src/core/EntityEditViewFormActions.tsx +24 -17
  207. package/src/core/EntitySidePanel.tsx +34 -30
  208. package/src/core/FireCMS.tsx +33 -6
  209. package/src/core/SideDialogs.tsx +4 -2
  210. package/src/core/field_configs.tsx +18 -11
  211. package/src/core/index.tsx +1 -0
  212. package/src/editor/components/SlashCommandMenu.tsx +516 -0
  213. package/src/editor/components/editor-bubble-item.tsx +32 -0
  214. package/src/editor/components/editor-bubble.tsx +118 -0
  215. package/src/editor/components/image-bubble.tsx +156 -0
  216. package/src/editor/components/index.ts +14 -0
  217. package/src/editor/components/table-bubble.tsx +165 -0
  218. package/src/editor/editor.tsx +455 -0
  219. package/src/editor/extensions/HighlightDecorationExtension.ts +114 -0
  220. package/src/editor/extensions/Image/index.ts +133 -0
  221. package/src/editor/extensions/Image.ts +159 -0
  222. package/src/editor/extensions/TextLoadingDecorationExtension.tsx +107 -0
  223. package/src/editor/extensions/clipboard.ts +72 -0
  224. package/src/editor/extensions/custom-keymap.ts +24 -0
  225. package/src/editor/extensions/drag-and-drop.tsx +480 -0
  226. package/src/editor/hooks/useProseMirror.ts +124 -0
  227. package/src/editor/hooks/useProseMirrorContext.ts +15 -0
  228. package/src/editor/index.ts +2 -0
  229. package/src/editor/markdown.ts +172 -0
  230. package/src/editor/nodeViews/ImageComponent.tsx +20 -0
  231. package/src/editor/nodeViews/ReactNodeView.tsx +89 -0
  232. package/src/editor/nodeViews/TaskItemComponent.tsx +29 -0
  233. package/src/editor/nodeViews/index.ts +35 -0
  234. package/src/editor/plugins/index.ts +58 -0
  235. package/src/editor/plugins/inputrules.ts +82 -0
  236. package/src/editor/plugins/placeholderPlugin.ts +55 -0
  237. package/src/editor/plugins/slashCommandPlugin.ts +61 -0
  238. package/src/editor/schema.ts +240 -0
  239. package/src/editor/selectors/ai-selector.tsx +111 -0
  240. package/src/editor/selectors/color-selector.tsx +200 -0
  241. package/src/editor/selectors/link-selector.tsx +118 -0
  242. package/src/editor/selectors/node-selector.tsx +157 -0
  243. package/src/editor/selectors/text-buttons.tsx +86 -0
  244. package/src/editor/types.ts +6 -0
  245. package/src/editor/useProseMirror.ts +126 -0
  246. package/src/editor/utils/prosemirror-utils.ts +108 -0
  247. package/src/editor/utils/remove_classes.ts +17 -0
  248. package/src/editor/utils/useDebouncedCallback.ts +25 -0
  249. package/src/form/EntityForm.tsx +149 -67
  250. package/src/form/EntityFormActions.tsx +19 -12
  251. package/src/form/PropertyFieldBinding.tsx +68 -51
  252. package/src/form/components/ErrorFocus.tsx +3 -3
  253. package/src/form/components/LocalChangesMenu.tsx +13 -13
  254. package/src/form/components/StorageItemPreview.tsx +5 -3
  255. package/src/form/components/StorageUploadProgress.tsx +18 -3
  256. package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +18 -5
  257. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +22 -10
  258. package/src/form/field_bindings/BlockFieldBinding.tsx +26 -9
  259. package/src/form/field_bindings/DateTimeFieldBinding.tsx +18 -17
  260. package/src/form/field_bindings/KeyValueFieldBinding.tsx +46 -25
  261. package/src/form/field_bindings/MapFieldBinding.tsx +88 -70
  262. package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +93 -52
  263. package/src/form/field_bindings/MultiSelectFieldBinding.tsx +15 -1
  264. package/src/form/field_bindings/ReferenceAsStringFieldBinding.tsx +25 -11
  265. package/src/form/field_bindings/ReferenceFieldBinding.tsx +25 -11
  266. package/src/form/field_bindings/RepeatFieldBinding.tsx +21 -6
  267. package/src/form/field_bindings/SelectFieldBinding.tsx +7 -5
  268. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +110 -92
  269. package/src/form/field_bindings/SwitchFieldBinding.tsx +31 -14
  270. package/src/form/field_bindings/TextFieldBinding.tsx +77 -38
  271. package/src/form/field_bindings/UserSelectFieldBinding.tsx +7 -5
  272. package/src/form/validation.ts +245 -160
  273. package/src/hooks/index.tsx +1 -0
  274. package/src/hooks/useBreadcrumbsController.tsx +18 -0
  275. package/src/hooks/useBuildNavigationController.tsx +91 -41
  276. package/src/hooks/useCollapsedGroups.ts +18 -9
  277. package/src/hooks/useTranslation.ts +31 -0
  278. package/src/hooks/useValidateAuthenticator.tsx +1 -1
  279. package/src/i18n/FireCMSi18nProvider.tsx +160 -0
  280. package/src/index.ts +5 -0
  281. package/src/internal/useBuildDataSource.ts +68 -34
  282. package/src/internal/useBuildSideDialogsController.tsx +11 -8
  283. package/src/internal/useBuildSideEntityController.tsx +24 -24
  284. package/src/internal/useRestoreScroll.tsx +26 -14
  285. package/src/locales/de.ts +718 -0
  286. package/src/locales/en.ts +730 -0
  287. package/src/locales/es.ts +730 -0
  288. package/src/locales/fr.ts +718 -0
  289. package/src/locales/hi.ts +718 -0
  290. package/src/locales/it.ts +718 -0
  291. package/src/locales/pt.ts +727 -0
  292. package/src/preview/PropertyPreview.tsx +43 -33
  293. package/src/preview/PropertyPreviewProps.tsx +6 -0
  294. package/src/preview/components/DatePreview.tsx +72 -4
  295. package/src/preview/components/EmptyValue.tsx +1 -1
  296. package/src/preview/components/ImagePreview.tsx +37 -21
  297. package/src/preview/components/ReferencePreview.tsx +2 -1
  298. package/src/preview/components/StorageThumbnail.tsx +16 -12
  299. package/src/preview/components/UrlComponentPreview.tsx +32 -27
  300. package/src/preview/components/UserPreview.tsx +3 -1
  301. package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +9 -7
  302. package/src/preview/property_previews/ArrayOfStringsPreview.tsx +11 -9
  303. package/src/preview/property_previews/ArrayPropertyPreview.tsx +26 -24
  304. package/src/preview/property_previews/MapPropertyPreview.tsx +49 -27
  305. package/src/preview/property_previews/SkeletonPropertyComponent.tsx +61 -56
  306. package/src/routes/CustomCMSRoute.tsx +1 -0
  307. package/src/routes/FireCMSRoute.tsx +87 -65
  308. package/src/types/analytics.ts +10 -0
  309. package/src/types/collections.ts +97 -3
  310. package/src/types/customization_controller.tsx +2 -1
  311. package/src/types/datasource.ts +54 -56
  312. package/src/types/firecms.tsx +2 -1
  313. package/src/types/index.ts +1 -0
  314. package/src/types/navigation.ts +2 -2
  315. package/src/types/plugins.tsx +77 -1
  316. package/src/types/properties.ts +359 -37
  317. package/src/types/storage.ts +2 -1
  318. package/src/types/translations.ts +752 -0
  319. package/src/util/__tests__/conditions.test.ts +506 -0
  320. package/src/util/__tests__/objects.test.ts +196 -0
  321. package/src/util/callbacks.ts +6 -3
  322. package/src/util/collections.ts +51 -6
  323. package/src/util/conditions.ts +339 -0
  324. package/src/util/entities.ts +29 -30
  325. package/src/util/entity_cache.ts +2 -1
  326. package/src/util/index.ts +3 -1
  327. package/src/util/join_collections.ts +10 -8
  328. package/src/util/lazy_eager.tsx +33 -0
  329. package/src/util/objects.ts +46 -13
  330. package/src/util/{references.ts → previews.ts} +16 -2
  331. package/src/util/property_utils.tsx +37 -11
  332. package/src/util/resolutions.ts +62 -58
  333. package/src/util/useStorageUploadController.tsx +23 -29
  334. /package/dist/util/{references.d.ts → previews.d.ts} +0 -0
@@ -26,11 +26,11 @@ import { resolveCollection, updateDateAutoValues } from "../util";
26
26
  * @group Firebase
27
27
  */
28
28
  export function useBuildDataSource({
29
- delegate,
30
- propertyConfigs,
31
- navigationController,
32
- authController
33
- }: {
29
+ delegate,
30
+ propertyConfigs,
31
+ navigationController,
32
+ authController
33
+ }: {
34
34
  delegate: DataSourceDelegate,
35
35
  propertyConfigs?: Record<string, PropertyConfig>;
36
36
  navigationController: NavigationController;
@@ -54,15 +54,15 @@ export function useBuildDataSource({
54
54
  * @group Firestore
55
55
  */
56
56
  fetchCollection: useCallback(<M extends Record<string, any>>({
57
- path,
58
- collection,
59
- filter,
60
- limit,
61
- startAfter,
62
- searchString,
63
- orderBy,
64
- order,
65
- }: FetchCollectionProps<M>
57
+ path,
58
+ collection,
59
+ filter,
60
+ limit,
61
+ startAfter,
62
+ searchString,
63
+ orderBy,
64
+ order,
65
+ }: FetchCollectionProps<M>
66
66
  ): Promise<Entity<M>[]> => {
67
67
  const usedDelegate = collection?.overrides?.dataSourceDelegate ?? delegate;
68
68
  return usedDelegate.fetchCollection<M>({
@@ -138,10 +138,10 @@ export function useBuildDataSource({
138
138
  * @group Firestore
139
139
  */
140
140
  fetchEntity: useCallback(<M extends Record<string, any>>({
141
- path,
142
- entityId,
143
- collection
144
- }: FetchEntityProps<M>
141
+ path,
142
+ entityId,
143
+ collection
144
+ }: FetchEntityProps<M>
145
145
  ): Promise<Entity<M> | undefined> => {
146
146
  const usedDelegate = collection?.overrides?.dataSourceDelegate ?? delegate;
147
147
  return usedDelegate.fetchEntity({
@@ -195,7 +195,7 @@ export function useBuildDataSource({
195
195
  * @param status
196
196
  * @group Firestore
197
197
  */
198
- saveEntity: useCallback(<M extends Record<string, any>>(
198
+ saveEntity: useCallback(async <M extends Record<string, any>>(
199
199
  {
200
200
  path,
201
201
  entityId,
@@ -229,22 +229,56 @@ export function useBuildDataSource({
229
229
  inputValues: delegateValues,
230
230
  properties,
231
231
  status,
232
- timestampNowValue: usedDelegate.currentTime?.() ?? new Date(),
233
- setDateToMidnight: usedDelegate.setDateToMidnight
232
+ timestampNowValue: usedDelegate.currentTime?.() ?? new Date()
234
233
  })
235
234
  : delegateValues;
236
235
 
236
+ // Auto-assign order property value for new/copy entities
237
+ let finalValues = updatedValues;
238
+ const orderProperty = collection?.orderProperty;
239
+ if (orderProperty && (status === "new" || status === "copy")) {
240
+ const orderProp = properties?.[orderProperty as keyof M];
241
+ if (orderProp) {
242
+ const currentValue = updatedValues[orderProperty as keyof M];
243
+ if (currentValue === undefined || currentValue === null) {
244
+ try {
245
+ const entities = await usedDelegate.fetchCollection({
246
+ path,
247
+ orderBy: orderProperty,
248
+ order: "asc",
249
+ limit: 1,
250
+ collection
251
+ });
252
+ const minOrder = entities.length > 0
253
+ ? entities[0].values?.[orderProperty] ?? null
254
+ : null;
255
+ finalValues = {
256
+ ...updatedValues,
257
+ [orderProperty]: minOrder !== null ? minOrder - 1 : 0
258
+ } as EntityValues<M>;
259
+ } catch (e) {
260
+ console.error("Failed to fetch min order value:", e);
261
+ // Fallback to 0 if query fails
262
+ finalValues = {
263
+ ...updatedValues,
264
+ [orderProperty]: 0
265
+ } as EntityValues<M>;
266
+ }
267
+ }
268
+ }
269
+ }
270
+
237
271
  return usedDelegate.saveEntity({
238
272
  path,
239
273
  collection,
240
274
  entityId,
241
- values: updatedValues,
275
+ values: finalValues,
242
276
  status
243
277
  }).then((res) => {
244
278
  return {
245
279
  id: res.id,
246
280
  path: res.path,
247
- values: usedDelegate.delegateToCMSModel(updatedValues)
281
+ values: usedDelegate.delegateToCMSModel(finalValues)
248
282
  } as Entity<M>;
249
283
  });
250
284
  }, [delegate.saveEntity, navigationController.getCollection]),
@@ -295,12 +329,12 @@ export function useBuildDataSource({
295
329
  }, [delegate.generateEntityId]),
296
330
 
297
331
  countEntities: delegate.countEntities ? async ({
298
- path,
299
- collection,
300
- filter,
301
- order,
302
- orderBy
303
- }: {
332
+ path,
333
+ collection,
334
+ filter,
335
+ order,
336
+ orderBy
337
+ }: {
304
338
  path: string,
305
339
  collection: EntityCollection<any>,
306
340
  filter?: FilterValues<Extract<keyof any, string>>,
@@ -318,11 +352,11 @@ export function useBuildDataSource({
318
352
  } : undefined,
319
353
 
320
354
  isFilterCombinationValid: useCallback(({
321
- path,
322
- databaseId,
323
- filterValues,
324
- sortBy
325
- }: {
355
+ path,
356
+ databaseId,
357
+ filterValues,
358
+ sortBy
359
+ }: {
326
360
  path: string,
327
361
  databaseId?: string,
328
362
  filterValues: FilterValues<any>,
@@ -32,11 +32,12 @@ export function useBuildSideDialogsController(): SideDialogsController {
32
32
 
33
33
  const close = useCallback(() => {
34
34
 
35
- if (sidePanels.length === 0)
35
+ const currentPanels = sidePanelsRef.current;
36
+ if (currentPanels.length === 0)
36
37
  return;
37
38
 
38
- const lastSidePanel = sidePanels[sidePanels.length - 1];
39
- const updatedPanels = [...sidePanels.slice(0, -1)];
39
+ const lastSidePanel = currentPanels[currentPanels.length - 1];
40
+ const updatedPanels = [...currentPanels.slice(0, -1)];
40
41
  updateSidePanels(updatedPanels);
41
42
 
42
43
  if (routesCount.current > 0) {
@@ -56,7 +57,7 @@ export function useBuildSideDialogsController(): SideDialogsController {
56
57
  }
57
58
  );
58
59
  }
59
- }, [sidePanels, navigate, location]);
60
+ }, [navigate, location]);
60
61
 
61
62
  const open = useCallback((panelProps: SideDialogPanelProps | SideDialogPanelProps[]) => {
62
63
 
@@ -69,7 +70,8 @@ export function useBuildSideDialogsController(): SideDialogsController {
69
70
 
70
71
  const baseLocation = (location.state as any)?.base_location ?? location;
71
72
 
72
- const updatedPanels = [...sidePanels, ...newPanels];
73
+ const currentPanels = sidePanelsRef.current;
74
+ const updatedPanels = [...currentPanels, ...newPanels];
73
75
  updateSidePanels(updatedPanels);
74
76
 
75
77
  newPanels.forEach((panel) => {
@@ -86,7 +88,7 @@ export function useBuildSideDialogsController(): SideDialogsController {
86
88
  }
87
89
  });
88
90
 
89
- }, [location, navigate, sidePanels]);
91
+ }, [location, navigate]);
90
92
 
91
93
  const replace = useCallback((panelProps: SideDialogPanelProps | SideDialogPanelProps[]) => {
92
94
 
@@ -97,7 +99,8 @@ export function useBuildSideDialogsController(): SideDialogsController {
97
99
 
98
100
  const baseLocation = (location.state as any)?.base_location ?? location;
99
101
 
100
- const updatedPanels = [...sidePanels.slice(0, -newPanels.length), ...newPanels];
102
+ const currentPanels = sidePanelsRef.current;
103
+ const updatedPanels = [...currentPanels.slice(0, -newPanels.length), ...newPanels];
101
104
  updateSidePanels(updatedPanels);
102
105
 
103
106
  newPanels.forEach((panel) => {
@@ -115,7 +118,7 @@ export function useBuildSideDialogsController(): SideDialogsController {
115
118
  }
116
119
  });
117
120
 
118
- }, [location, navigate, sidePanels]);
121
+ }, [location, navigate]);
119
122
 
120
123
  return {
121
124
  sidePanels,
@@ -20,7 +20,6 @@ import {
20
20
  } from "../util";
21
21
  import { ADDITIONAL_TAB_WIDTH, CONTAINER_FULL_WIDTH, FORM_CONTAINER_WIDTH } from "./common";
22
22
  import { useCustomizationController, useLargeLayout } from "../hooks";
23
- import { EntitySidePanel } from "../core/EntitySidePanel";
24
23
  import { JSON_TAB_VALUE } from "../core/EntityEditView";
25
24
 
26
25
  const NEW_URL_HASH = "new_side";
@@ -100,8 +99,8 @@ function getNestedPropertiesDepth(property: ResolvedProperty, accumulator: numbe
100
99
  }
101
100
 
102
101
  export const useBuildSideEntityController = (navigation: NavigationController,
103
- sideDialogsController: SideDialogsController,
104
- authController: AuthController
102
+ sideDialogsController: SideDialogsController,
103
+ authController: AuthController
105
104
  ): SideEntityController => {
106
105
 
107
106
  const location = useLocation();
@@ -122,9 +121,9 @@ export const useBuildSideEntityController = (navigation: NavigationController,
122
121
  for (let i = 0; i < panelsFromUrl.length; i++) {
123
122
  const props = panelsFromUrl[i];
124
123
  if (i === 0)
125
- sideDialogsController.replace(propsToSidePanel(props, navigation.buildUrlCollectionPath, navigation.resolveIdsFrom, smallLayout, customizationController, authController));
124
+ sideDialogsController.replace(propsToSidePanel(props, navigation.buildUrlCollectionPath, navigation.resolveIdsFrom, smallLayout, customizationController, authController, location.search));
126
125
  else
127
- sideDialogsController.open(propsToSidePanel(props, navigation.buildUrlCollectionPath, navigation.resolveIdsFrom, smallLayout, customizationController, authController))
126
+ sideDialogsController.open(propsToSidePanel(props, navigation.buildUrlCollectionPath, navigation.resolveIdsFrom, smallLayout, customizationController, authController, location.search))
128
127
  }
129
128
  }
130
129
  initialised.current = true;
@@ -144,7 +143,7 @@ export const useBuildSideEntityController = (navigation: NavigationController,
144
143
  return;
145
144
  }
146
145
  const lastPanel = panelsFromUrl[panelsFromUrl.length - 1];
147
- const panelProps = propsToSidePanel(lastPanel, navigation.buildUrlCollectionPath, navigation.resolveIdsFrom, smallLayout, customizationController, authController);
146
+ const panelProps = propsToSidePanel(lastPanel, navigation.buildUrlCollectionPath, navigation.resolveIdsFrom, smallLayout, customizationController, authController, location.search);
148
147
  const lastCurrentPanel = currentPanelKeys.length > 0 ? currentPanelKeys[currentPanelKeys.length - 1] : undefined;
149
148
  if (!lastCurrentPanel || lastCurrentPanel !== panelProps.key) {
150
149
  sideDialogsController.replace(panelProps);
@@ -157,7 +156,7 @@ export const useBuildSideEntityController = (navigation: NavigationController,
157
156
  useEffect(() => {
158
157
  const updatedSidePanels = sideDialogsController.sidePanels.map(sidePanelProps => {
159
158
  if (sidePanelProps.additional) {
160
- return propsToSidePanel(sidePanelProps.additional, navigation.buildUrlCollectionPath, navigation.resolveIdsFrom, smallLayout, customizationController, authController);
159
+ return propsToSidePanel(sidePanelProps.additional, navigation.buildUrlCollectionPath, navigation.resolveIdsFrom, smallLayout, customizationController, authController, location.search);
161
160
  }
162
161
  return sidePanelProps;
163
162
  });
@@ -184,17 +183,18 @@ export const useBuildSideEntityController = (navigation: NavigationController,
184
183
 
185
184
  sideDialogsController.open(
186
185
  propsToSidePanel({
187
- selectedTab: defaultSelectedView,
188
- ...props
189
- },
186
+ selectedTab: defaultSelectedView,
187
+ ...props
188
+ },
190
189
  navigation.buildUrlCollectionPath,
191
190
  navigation.resolveIdsFrom,
192
191
  smallLayout,
193
192
  customizationController,
194
- authController
193
+ authController,
194
+ location.search
195
195
  ));
196
196
 
197
- }, [sideDialogsController, navigation.buildUrlCollectionPath, navigation.resolveIdsFrom, smallLayout, authController.user]);
197
+ }, [sideDialogsController, navigation.buildUrlCollectionPath, navigation.resolveIdsFrom, smallLayout, authController.user, location.search]);
198
198
 
199
199
  const replace = useCallback((props: EntitySidePanelProps<any>) => {
200
200
 
@@ -202,9 +202,9 @@ export const useBuildSideEntityController = (navigation: NavigationController,
202
202
  throw Error("If you want to copy an entity you need to provide an entityId");
203
203
  }
204
204
 
205
- sideDialogsController.replace(propsToSidePanel(props, navigation.buildUrlCollectionPath, navigation.resolveIdsFrom, smallLayout, customizationController, authController));
205
+ sideDialogsController.replace(propsToSidePanel(props, navigation.buildUrlCollectionPath, navigation.resolveIdsFrom, smallLayout, customizationController, authController, location.search));
206
206
 
207
- }, [navigation.buildUrlCollectionPath, navigation.resolveIdsFrom, sideDialogsController, smallLayout, authController.user]);
207
+ }, [navigation.buildUrlCollectionPath, navigation.resolveIdsFrom, sideDialogsController, smallLayout, authController.user, location.search]);
208
208
 
209
209
  return {
210
210
  close,
@@ -215,7 +215,6 @@ export const useBuildSideEntityController = (navigation: NavigationController,
215
215
 
216
216
  export function buildSidePanelsFromUrl(path: string, collections: EntityCollection[], newFlag: boolean): EntitySidePanelProps<any>[] {
217
217
 
218
-
219
218
  const navigationViewsForPath: NavigationViewInternal<any>[] = getNavigationEntriesFromPath({
220
219
  path,
221
220
  collections
@@ -267,18 +266,19 @@ export function buildSidePanelsFromUrl(path: string, collections: EntityCollecti
267
266
  }
268
267
 
269
268
  const propsToSidePanel = (props: EntitySidePanelProps,
270
- buildUrlCollectionPath: (path: string) => string,
271
- resolveIdsFrom: (pathWithAliases: string) => string,
272
- smallLayout: boolean,
273
- customizationController: CustomizationController,
274
- authController: AuthController
269
+ buildUrlCollectionPath: (path: string) => string,
270
+ resolveIdsFrom: (pathWithAliases: string) => string,
271
+ smallLayout: boolean,
272
+ customizationController: CustomizationController,
273
+ authController: AuthController,
274
+ locationSearch: string
275
275
  ): SideDialogPanelProps => {
276
276
 
277
277
  const collectionPath = removeInitialAndTrailingSlashes(props.path);
278
278
 
279
279
  const urlPath = props.entityId
280
- ? buildUrlCollectionPath(`${collectionPath}/${props.entityId}${props.selectedTab ? "/" + props.selectedTab : ""}#${SIDE_URL_HASH}`)
281
- : buildUrlCollectionPath(`${collectionPath}#${NEW_URL_HASH}`);
280
+ ? buildUrlCollectionPath(`${collectionPath}/${props.entityId}${props.selectedTab ? "/" + props.selectedTab : ""}${locationSearch}#${SIDE_URL_HASH}`)
281
+ : buildUrlCollectionPath(`${collectionPath}${locationSearch}#${NEW_URL_HASH}`);
282
282
 
283
283
  const resolvedPanelProps: EntitySidePanelProps<any> = {
284
284
  ...props,
@@ -288,12 +288,12 @@ const propsToSidePanel = (props: EntitySidePanelProps,
288
288
  const entityViewWidth = getEntityViewWidth(props, smallLayout, customizationController, authController);
289
289
  return {
290
290
  key: `${props.path}/${props.entityId}`,
291
- component: <EntitySidePanel {...resolvedPanelProps}/>,
291
+ component: undefined, // Lazy render in SideDialogs for better performance
292
292
  urlPath: urlPath,
293
293
  parentUrlPath: buildUrlCollectionPath(collectionPath),
294
294
  width: entityViewWidth,
295
295
  onClose: props.onClose,
296
- additional: props
296
+ additional: resolvedPanelProps
297
297
  };
298
298
  }
299
299
 
@@ -1,24 +1,28 @@
1
- import React, { useCallback, useEffect } from "react";
1
+ import React, { useCallback, useEffect, useRef } from "react";
2
2
  import { useLocation } from "react-router-dom";
3
3
 
4
4
  const scrollsMap: Record<string, number> = {};
5
5
 
6
6
  export function useRestoreScroll() {
7
7
 
8
- // const scrollsMap = React.useRef<Record<string, number>>({});
9
-
10
8
  const location = useLocation();
11
9
 
12
- const containerRef = React.useRef<HTMLDivElement>(null);
10
+ const containerRef = useRef<HTMLDivElement>(null);
13
11
  const [scroll, setScroll] = React.useState(0);
14
12
  const [direction, setDirection] = React.useState<"up" | "down">("down");
15
13
 
14
+ // Use ref to track previous scroll for direction calculation
15
+ // This avoids recreating handleScroll on every scroll
16
+ const prevScrollRef = useRef(0);
17
+
16
18
  const handleScroll = useCallback(() => {
17
19
  if (!containerRef.current || !location.key) return;
18
- scrollsMap[location.key] = containerRef.current.scrollTop;
19
- setScroll(containerRef.current.scrollTop);
20
- setDirection(containerRef.current.scrollTop > scroll ? "down" : "up");
21
- }, [containerRef, location.key, scroll]);
20
+ const scrollTop = containerRef.current.scrollTop;
21
+ scrollsMap[location.key] = scrollTop;
22
+ setScroll(scrollTop);
23
+ setDirection(scrollTop > prevScrollRef.current ? "down" : "up");
24
+ prevScrollRef.current = scrollTop;
25
+ }, [location.key]);
22
26
 
23
27
  useEffect(() => {
24
28
  const container = containerRef.current;
@@ -29,16 +33,24 @@ export function useRestoreScroll() {
29
33
  if (container)
30
34
  container.removeEventListener("scroll", handleScroll);
31
35
  };
32
- }, [containerRef, handleScroll, location]);
36
+ }, [handleScroll]);
33
37
 
38
+ // Defer scroll restoration to next tick to allow async content to render
39
+ // This is necessary because DefaultHomePage content loads asynchronously
34
40
  useEffect(() => {
35
- if (!containerRef.current || !scrollsMap[location.key]) return;
36
- containerRef.current.scrollTo(
37
- {
38
- top: scrollsMap[location.key],
41
+ const savedScroll = scrollsMap[location.key];
42
+ if (!containerRef.current || !savedScroll) return;
43
+
44
+ const timeoutId = setTimeout(() => {
45
+ if (!containerRef.current) return;
46
+ containerRef.current.scrollTo({
47
+ top: savedScroll,
39
48
  behavior: "auto"
40
49
  });
41
- }, [location]);
50
+ }, 0);
51
+
52
+ return () => clearTimeout(timeoutId);
53
+ }, [location.key]);
42
54
 
43
55
  return {
44
56
  containerRef,