@rebasepro/core 0.0.1-canary.0

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 (570) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +174 -0
  3. package/dist/app/AppBar.d.ts +12 -0
  4. package/dist/app/Drawer.d.ts +19 -0
  5. package/dist/app/Scaffold.d.ts +34 -0
  6. package/dist/app/index.d.ts +4 -0
  7. package/dist/app/useApp.d.ts +17 -0
  8. package/dist/components/AIIcon.d.ts +16 -0
  9. package/dist/components/AdminModeSyncer.d.ts +17 -0
  10. package/dist/components/ArrayContainer.d.ts +59 -0
  11. package/dist/components/CircularProgressCenter.d.ts +11 -0
  12. package/dist/components/ClearFilterSortButton.d.ts +5 -0
  13. package/dist/components/ConfirmationDialog.d.ts +9 -0
  14. package/dist/components/Debug/UIReferenceView.d.ts +1 -0
  15. package/dist/components/Debug/UIStyleGuide.d.ts +1 -0
  16. package/dist/components/DeleteEntityDialog.d.ts +12 -0
  17. package/dist/components/EntityCollectionTable/EntityCollectionRowActions.d.ts +37 -0
  18. package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +27 -0
  19. package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +128 -0
  20. package/dist/components/EntityCollectionTable/PropertyTableCell.d.ts +25 -0
  21. package/dist/components/EntityCollectionTable/column_utils.d.ts +15 -0
  22. package/dist/components/EntityCollectionTable/fields/TableMultipleRelationField.d.ts +20 -0
  23. package/dist/components/EntityCollectionTable/fields/TableReferenceField.d.ts +21 -0
  24. package/dist/components/EntityCollectionTable/fields/TableRelationField.d.ts +21 -0
  25. package/dist/components/EntityCollectionTable/fields/TableRelationSelectorField.d.ts +20 -0
  26. package/dist/components/EntityCollectionTable/fields/TableStorageUpload.d.ts +32 -0
  27. package/dist/components/EntityCollectionTable/index.d.ts +6 -0
  28. package/dist/components/EntityCollectionTable/internal/CollectionTableToolbar.d.ts +16 -0
  29. package/dist/components/EntityCollectionTable/internal/EntityTableCell.d.ts +32 -0
  30. package/dist/components/EntityCollectionTable/internal/EntityTableCellActions.d.ts +9 -0
  31. package/dist/components/EntityCollectionTable/internal/common.d.ts +4 -0
  32. package/dist/components/EntityCollectionTable/internal/popup_field/PopupFormField.d.ts +26 -0
  33. package/dist/components/EntityCollectionTable/internal/popup_field/useDraggable.d.ts +13 -0
  34. package/dist/components/EntityCollectionTable/internal/popup_field/useWindowSize.d.ts +6 -0
  35. package/dist/components/EntityCollectionView/Board.d.ts +2 -0
  36. package/dist/components/EntityCollectionView/BoardColumn.d.ts +42 -0
  37. package/dist/components/EntityCollectionView/BoardColumnTitle.d.ts +9 -0
  38. package/dist/components/EntityCollectionView/BoardSortableList.d.ts +14 -0
  39. package/dist/components/EntityCollectionView/EntityBoardCard.d.ts +26 -0
  40. package/dist/components/EntityCollectionView/EntityCard.d.ts +19 -0
  41. package/dist/components/EntityCollectionView/EntityCollectionBoardView.d.ts +20 -0
  42. package/dist/components/EntityCollectionView/EntityCollectionCardView.d.ts +31 -0
  43. package/dist/components/EntityCollectionView/EntityCollectionView.d.ts +54 -0
  44. package/dist/components/EntityCollectionView/EntityCollectionViewActions.d.ts +14 -0
  45. package/dist/components/EntityCollectionView/EntityCollectionViewStartActions.d.ts +15 -0
  46. package/dist/components/EntityCollectionView/FiltersDialog.d.ts +14 -0
  47. package/dist/components/EntityCollectionView/ViewModeToggle.d.ts +44 -0
  48. package/dist/components/EntityCollectionView/board_types.d.ts +105 -0
  49. package/dist/components/EntityCollectionView/useBoardDataController.d.ts +60 -0
  50. package/dist/components/EntityCollectionView/useSelectionController.d.ts +2 -0
  51. package/dist/components/EntityCollectionView/utils.d.ts +3 -0
  52. package/dist/components/EntityJsonPreview.d.ts +3 -0
  53. package/dist/components/EntityPreview.d.ts +54 -0
  54. package/dist/components/EntityView.d.ts +11 -0
  55. package/dist/components/ErrorBoundary.d.ts +11 -0
  56. package/dist/components/ErrorTooltip.d.ts +2 -0
  57. package/dist/components/ErrorView.d.ts +21 -0
  58. package/dist/components/FieldCaption.d.ts +5 -0
  59. package/dist/components/HomePage/ContentHomePage.d.ts +11 -0
  60. package/dist/components/HomePage/FavouritesView.d.ts +3 -0
  61. package/dist/components/HomePage/HomePageDnD.d.ts +77 -0
  62. package/dist/components/HomePage/NavigationCard.d.ts +10 -0
  63. package/dist/components/HomePage/NavigationCardBinding.d.ts +18 -0
  64. package/dist/components/HomePage/NavigationGroup.d.ts +11 -0
  65. package/dist/components/HomePage/RenameGroupDialog.d.ts +9 -0
  66. package/dist/components/HomePage/SmallNavigationCard.d.ts +6 -0
  67. package/dist/components/HomePage/StudioHomePage.d.ts +9 -0
  68. package/dist/components/HomePage/index.d.ts +5 -0
  69. package/dist/components/NotFoundPage.d.ts +1 -0
  70. package/dist/components/PropertyCollectionView.d.ts +22 -0
  71. package/dist/components/PropertyConfigBadge.d.ts +6 -0
  72. package/dist/components/PropertyIdCopyTooltip.d.ts +8 -0
  73. package/dist/components/RebaseLogo.d.ts +7 -0
  74. package/dist/components/ReferenceTable/EntitySelectionTable.d.ts +58 -0
  75. package/dist/components/ReferenceWidget.d.ts +29 -0
  76. package/dist/components/RelationSelector.d.ts +32 -0
  77. package/dist/components/SearchIconsView.d.ts +5 -0
  78. package/dist/components/SelectableTable/SelectableTable.d.ts +89 -0
  79. package/dist/components/SelectableTable/SelectableTableContext.d.ts +4 -0
  80. package/dist/components/SelectableTable/filters/BooleanFilterField.d.ts +9 -0
  81. package/dist/components/SelectableTable/filters/DateTimeFilterField.d.ts +12 -0
  82. package/dist/components/SelectableTable/filters/ReferenceFilterField.d.ts +15 -0
  83. package/dist/components/SelectableTable/filters/RelationFilterField.d.ts +12 -0
  84. package/dist/components/SelectableTable/filters/StringNumberFilterField.d.ts +13 -0
  85. package/dist/components/UnsavedChangesDialog.d.ts +9 -0
  86. package/dist/components/UserDisplay.d.ts +7 -0
  87. package/dist/components/UserSettingsView.d.ts +1 -0
  88. package/dist/components/VirtualTable/VirtualTable.d.ts +11 -0
  89. package/dist/components/VirtualTable/VirtualTableCell.d.ts +20 -0
  90. package/dist/components/VirtualTable/VirtualTableHeader.d.ts +29 -0
  91. package/dist/components/VirtualTable/VirtualTableHeaderRow.d.ts +2 -0
  92. package/dist/components/VirtualTable/VirtualTableProps.d.ts +239 -0
  93. package/dist/components/VirtualTable/VirtualTableRow.d.ts +3 -0
  94. package/dist/components/VirtualTable/fields/VirtualTableDateField.d.ts +12 -0
  95. package/dist/components/VirtualTable/fields/VirtualTableInput.d.ts +9 -0
  96. package/dist/components/VirtualTable/fields/VirtualTableNumberInput.d.ts +8 -0
  97. package/dist/components/VirtualTable/fields/VirtualTableSelect.d.ts +15 -0
  98. package/dist/components/VirtualTable/fields/VirtualTableSwitch.d.ts +7 -0
  99. package/dist/components/VirtualTable/fields/VirtualTableUserSelect.d.ts +12 -0
  100. package/dist/components/VirtualTable/index.d.ts +3 -0
  101. package/dist/components/VirtualTable/types.d.ts +37 -0
  102. package/dist/components/admin/RoleChip.d.ts +4 -0
  103. package/dist/components/admin/RolesView.d.ts +4 -0
  104. package/dist/components/admin/UsersView.d.ts +4 -0
  105. package/dist/components/admin/index.d.ts +3 -0
  106. package/dist/components/common/default_entity_actions.d.ts +4 -0
  107. package/dist/components/common/index.d.ts +6 -0
  108. package/dist/components/common/table_height.d.ts +5 -0
  109. package/dist/components/common/types.d.ts +58 -0
  110. package/dist/components/common/useColumnsIds.d.ts +6 -0
  111. package/dist/components/common/useDataSourceTableController.d.ts +44 -0
  112. package/dist/components/common/useDebouncedCallback.d.ts +1 -0
  113. package/dist/components/common/useDebouncedData.d.ts +9 -0
  114. package/dist/components/common/useScrollRestoration.d.ts +14 -0
  115. package/dist/components/common/useTableSearchHelper.d.ts +11 -0
  116. package/dist/components/index.d.ts +35 -0
  117. package/dist/contexts/AdminModeController.d.ts +4 -0
  118. package/dist/contexts/AnalyticsContext.d.ts +3 -0
  119. package/dist/contexts/AuthControllerContext.d.ts +3 -0
  120. package/dist/contexts/BreacrumbsContext.d.ts +8 -0
  121. package/dist/contexts/CustomizationControllerContext.d.ts +3 -0
  122. package/dist/contexts/DataSourceContext.d.ts +3 -0
  123. package/dist/contexts/DialogsProvider.d.ts +4 -0
  124. package/dist/contexts/EffectiveRoleController.d.ts +4 -0
  125. package/dist/contexts/InternalUserManagementContext.d.ts +3 -0
  126. package/dist/contexts/ModeController.d.ts +4 -0
  127. package/dist/contexts/NavigationContext.d.ts +3 -0
  128. package/dist/contexts/SideDialogsControllerContext.d.ts +3 -0
  129. package/dist/contexts/SideEntityControllerContext.d.ts +3 -0
  130. package/dist/contexts/SnackbarProvider.d.ts +2 -0
  131. package/dist/contexts/StorageSourceContext.d.ts +3 -0
  132. package/dist/contexts/UserConfigurationPersistenceContext.d.ts +3 -0
  133. package/dist/contexts/index.d.ts +15 -0
  134. package/dist/core/DefaultAppBar.d.ts +29 -0
  135. package/dist/core/DefaultDrawer.d.ts +29 -0
  136. package/dist/core/DrawerNavigationGroup.d.ts +45 -0
  137. package/dist/core/DrawerNavigationItem.d.ts +10 -0
  138. package/dist/core/EntityEditView.d.ts +47 -0
  139. package/dist/core/EntityEditViewFormActions.d.ts +2 -0
  140. package/dist/core/EntitySidePanel.d.ts +10 -0
  141. package/dist/core/Rebase.d.ts +13 -0
  142. package/dist/core/RebaseRouter.d.ts +4 -0
  143. package/dist/core/RebaseRoutes.d.ts +17 -0
  144. package/dist/core/SideDialogs.d.ts +25 -0
  145. package/dist/core/field_configs.d.ts +6 -0
  146. package/dist/core/index.d.ts +9 -0
  147. package/dist/form/EntityForm.d.ts +7 -0
  148. package/dist/form/EntityFormActions.d.ts +2 -0
  149. package/dist/form/PropertyFieldBinding.d.ts +30 -0
  150. package/dist/form/components/ErrorFocus.d.ts +4 -0
  151. package/dist/form/components/FieldHelperText.d.ts +12 -0
  152. package/dist/form/components/FormEntry.d.ts +6 -0
  153. package/dist/form/components/FormLayout.d.ts +5 -0
  154. package/dist/form/components/LabelWithIcon.d.ts +14 -0
  155. package/dist/form/components/LabelWithIconAndTooltip.d.ts +15 -0
  156. package/dist/form/components/LocalChangesMenu.d.ts +11 -0
  157. package/dist/form/components/StorageItemPreview.d.ts +13 -0
  158. package/dist/form/components/StorageUploadProgress.d.ts +10 -0
  159. package/dist/form/components/index.d.ts +5 -0
  160. package/dist/form/field_bindings/ArrayCustomShapedFieldBinding.d.ts +9 -0
  161. package/dist/form/field_bindings/ArrayOfReferencesFieldBinding.d.ts +11 -0
  162. package/dist/form/field_bindings/BlockFieldBinding.d.ts +10 -0
  163. package/dist/form/field_bindings/DateTimeFieldBinding.d.ts +11 -0
  164. package/dist/form/field_bindings/KeyValueFieldBinding.d.ts +7 -0
  165. package/dist/form/field_bindings/MapFieldBinding.d.ts +9 -0
  166. package/dist/form/field_bindings/MarkdownEditorFieldBinding.d.ts +11 -0
  167. package/dist/form/field_bindings/MultiSelectFieldBinding.d.ts +9 -0
  168. package/dist/form/field_bindings/MultipleRelationFieldBinding.d.ts +9 -0
  169. package/dist/form/field_bindings/ReadOnlyFieldBinding.d.ts +10 -0
  170. package/dist/form/field_bindings/ReferenceAsStringFieldBinding.d.ts +9 -0
  171. package/dist/form/field_bindings/ReferenceFieldBinding.d.ts +9 -0
  172. package/dist/form/field_bindings/RelationFieldBinding.d.ts +2 -0
  173. package/dist/form/field_bindings/RepeatFieldBinding.d.ts +10 -0
  174. package/dist/form/field_bindings/SelectFieldBinding.d.ts +10 -0
  175. package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +19 -0
  176. package/dist/form/field_bindings/SwitchFieldBinding.d.ts +9 -0
  177. package/dist/form/field_bindings/TextFieldBinding.d.ts +8 -0
  178. package/dist/form/field_bindings/UserSelectFieldBinding.d.ts +12 -0
  179. package/dist/form/index.d.ts +20 -0
  180. package/dist/form/useClearRestoreValue.d.ts +13 -0
  181. package/dist/form/validation.d.ts +26 -0
  182. package/dist/hooks/ApiConfigContext.d.ts +24 -0
  183. package/dist/hooks/data/delete.d.ts +33 -0
  184. package/dist/hooks/data/save.d.ts +37 -0
  185. package/dist/hooks/data/useCollectionFetch.d.ts +50 -0
  186. package/dist/hooks/data/useDataOrder.d.ts +12 -0
  187. package/dist/hooks/data/useDataSource.d.ts +6 -0
  188. package/dist/hooks/data/useEntityFetch.d.ts +29 -0
  189. package/dist/hooks/data/useRelationSelector.d.ts +45 -0
  190. package/dist/hooks/index.d.ts +41 -0
  191. package/dist/hooks/navigation/contexts/CMSUrlContext.d.ts +4 -0
  192. package/dist/hooks/navigation/contexts/CollectionRegistryContext.d.ts +4 -0
  193. package/dist/hooks/navigation/contexts/NavigationStateContext.d.ts +4 -0
  194. package/dist/hooks/navigation/contexts/index.d.ts +3 -0
  195. package/dist/hooks/navigation/useBuildCMSUrlController.d.ts +6 -0
  196. package/dist/hooks/navigation/useBuildCollectionRegistryController.d.ts +7 -0
  197. package/dist/hooks/navigation/useBuildNavigationStateController.d.ts +32 -0
  198. package/dist/hooks/navigation/useNavigationRegistry.d.ts +10 -0
  199. package/dist/hooks/navigation/useNavigationResolution.d.ts +5 -0
  200. package/dist/hooks/navigation/useNavigationURLs.d.ts +11 -0
  201. package/dist/hooks/navigation/useResolvedCollections.d.ts +26 -0
  202. package/dist/hooks/navigation/useResolvedViews.d.ts +28 -0
  203. package/dist/hooks/navigation/useTopLevelNavigation.d.ts +26 -0
  204. package/dist/hooks/navigation/utils.d.ts +12 -0
  205. package/dist/hooks/useAdminModeController.d.ts +19 -0
  206. package/dist/hooks/useAnalyticsController.d.ts +5 -0
  207. package/dist/hooks/useAuthController.d.ts +11 -0
  208. package/dist/hooks/useBackendStorageSource.d.ts +30 -0
  209. package/dist/hooks/useBreadcrumbsController.d.ts +42 -0
  210. package/dist/hooks/useBrowserTitleAndIcon.d.ts +6 -0
  211. package/dist/hooks/useBuildAdminModeController.d.ts +6 -0
  212. package/dist/hooks/useBuildEffectiveRoleController.d.ts +8 -0
  213. package/dist/hooks/useBuildLocalConfigurationPersistence.d.ts +2 -0
  214. package/dist/hooks/useBuildModeController.d.ts +6 -0
  215. package/dist/hooks/useBuildNavigationController.d.ts +16 -0
  216. package/dist/hooks/useClipboard.d.ts +57 -0
  217. package/dist/hooks/useCollapsedGroups.d.ts +12 -0
  218. package/dist/hooks/useCustomizationController.d.ts +11 -0
  219. package/dist/hooks/useDialogsController.d.ts +11 -0
  220. package/dist/hooks/useEffectiveRoleController.d.ts +7 -0
  221. package/dist/hooks/useEntitySelectionDialog.d.ts +18 -0
  222. package/dist/hooks/useInternalUserManagementController.d.ts +12 -0
  223. package/dist/hooks/useLargeLayout.d.ts +1 -0
  224. package/dist/hooks/useModeController.d.ts +19 -0
  225. package/dist/hooks/usePermissions.d.ts +11 -0
  226. package/dist/hooks/useRebaseContext.d.ts +11 -0
  227. package/dist/hooks/useResolvedNavigationFrom.d.ts +72 -0
  228. package/dist/hooks/useSideDialogsController.d.ts +18 -0
  229. package/dist/hooks/useSideEntityController.d.ts +12 -0
  230. package/dist/hooks/useSnackbarController.d.ts +20 -0
  231. package/dist/hooks/useStorageSource.d.ts +6 -0
  232. package/dist/hooks/useUnsavedChangesDialog.d.ts +12 -0
  233. package/dist/hooks/useUserConfigurationPersistence.d.ts +8 -0
  234. package/dist/hooks/useValidateAuthenticator.d.ts +21 -0
  235. package/dist/index.d.ts +15 -0
  236. package/dist/index.es.js +34745 -0
  237. package/dist/index.es.js.map +1 -0
  238. package/dist/index.umd.js +34751 -0
  239. package/dist/index.umd.js.map +1 -0
  240. package/dist/internal/common.d.ts +3 -0
  241. package/dist/internal/useBuildDataSource.d.ts +12 -0
  242. package/dist/internal/useBuildSideDialogsController.d.ts +2 -0
  243. package/dist/internal/useBuildSideEntityController.d.ts +4 -0
  244. package/dist/internal/useRestoreScroll.d.ts +6 -0
  245. package/dist/preview/PropertyPreview.d.ts +6 -0
  246. package/dist/preview/components/ArrayEnumPreview.d.ts +10 -0
  247. package/dist/preview/components/AsyncPreviewComponent.d.ts +11 -0
  248. package/dist/preview/components/BooleanPreview.d.ts +10 -0
  249. package/dist/preview/components/DatePreview.d.ts +17 -0
  250. package/dist/preview/components/EmptyValue.d.ts +6 -0
  251. package/dist/preview/components/EnumValuesChip.d.ts +13 -0
  252. package/dist/preview/components/ImagePreview.d.ts +16 -0
  253. package/dist/preview/components/ReferencePreview.d.ts +16 -0
  254. package/dist/preview/components/RelationPreview.d.ts +16 -0
  255. package/dist/preview/components/StorageThumbnail.d.ts +15 -0
  256. package/dist/preview/components/UrlComponentPreview.d.ts +13 -0
  257. package/dist/preview/components/UserPreview.d.ts +8 -0
  258. package/dist/preview/index.d.ts +24 -0
  259. package/dist/preview/property_previews/ArrayOfMapsPreview.d.ts +5 -0
  260. package/dist/preview/property_previews/ArrayOfReferencesPreview.d.ts +5 -0
  261. package/dist/preview/property_previews/ArrayOfRelationsPreview.d.ts +5 -0
  262. package/dist/preview/property_previews/ArrayOfStorageComponentsPreview.d.ts +5 -0
  263. package/dist/preview/property_previews/ArrayOfStringsPreview.d.ts +5 -0
  264. package/dist/preview/property_previews/ArrayOneOfPreview.d.ts +5 -0
  265. package/dist/preview/property_previews/ArrayPropertyEnumPreview.d.ts +5 -0
  266. package/dist/preview/property_previews/ArrayPropertyPreview.d.ts +5 -0
  267. package/dist/preview/property_previews/MapPropertyPreview.d.ts +8 -0
  268. package/dist/preview/property_previews/NumberPropertyPreview.d.ts +6 -0
  269. package/dist/preview/property_previews/SkeletonPropertyComponent.d.ts +13 -0
  270. package/dist/preview/property_previews/StringPropertyPreview.d.ts +6 -0
  271. package/dist/preview/util.d.ts +6 -0
  272. package/dist/routes/CustomCMSRoute.d.ts +4 -0
  273. package/dist/routes/RebaseRoute.d.ts +1 -0
  274. package/dist/routes/index.d.ts +2 -0
  275. package/dist/util/createFormexStub.d.ts +2 -0
  276. package/dist/util/entity_cache.d.ts +27 -0
  277. package/dist/util/enums.d.ts +5 -0
  278. package/dist/util/icon_list.d.ts +5 -0
  279. package/dist/util/icon_synonyms.d.ts +1853 -0
  280. package/dist/util/icons.d.ts +16 -0
  281. package/dist/util/index.d.ts +11 -0
  282. package/dist/util/previews.d.ts +3 -0
  283. package/dist/util/property_utils.d.ts +23 -0
  284. package/dist/util/useDebouncedCallback.d.ts +1 -0
  285. package/dist/util/useStorageUploadController.d.ts +36 -0
  286. package/dist/util/useTraceUpdate.d.ts +2 -0
  287. package/dist/vitePlugin.d.ts +16 -0
  288. package/package.json +165 -0
  289. package/src/app/AppBar.tsx +18 -0
  290. package/src/app/Drawer.tsx +30 -0
  291. package/src/app/Scaffold.tsx +238 -0
  292. package/src/app/index.ts +4 -0
  293. package/src/app/useApp.tsx +36 -0
  294. package/src/components/AIIcon.tsx +39 -0
  295. package/src/components/AdminModeSyncer.tsx +47 -0
  296. package/src/components/ArrayContainer.tsx +549 -0
  297. package/src/components/CircularProgressCenter.tsx +26 -0
  298. package/src/components/ClearFilterSortButton.tsx +44 -0
  299. package/src/components/ConfirmationDialog.tsx +46 -0
  300. package/src/components/Debug/UIReferenceView.tsx +710 -0
  301. package/src/components/Debug/UIStyleGuide.tsx +164 -0
  302. package/src/components/DeleteEntityDialog.tsx +181 -0
  303. package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +225 -0
  304. package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +383 -0
  305. package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +180 -0
  306. package/src/components/EntityCollectionTable/PropertyTableCell.tsx +561 -0
  307. package/src/components/EntityCollectionTable/column_utils.tsx +74 -0
  308. package/src/components/EntityCollectionTable/fields/TableMultipleRelationField.tsx +122 -0
  309. package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +169 -0
  310. package/src/components/EntityCollectionTable/fields/TableRelationField.tsx +177 -0
  311. package/src/components/EntityCollectionTable/fields/TableRelationSelectorField.tsx +42 -0
  312. package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +315 -0
  313. package/src/components/EntityCollectionTable/index.tsx +12 -0
  314. package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +90 -0
  315. package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +311 -0
  316. package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +82 -0
  317. package/src/components/EntityCollectionTable/internal/common.tsx +72 -0
  318. package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +425 -0
  319. package/src/components/EntityCollectionTable/internal/popup_field/useDraggable.tsx +96 -0
  320. package/src/components/EntityCollectionTable/internal/popup_field/useWindowSize.tsx +20 -0
  321. package/src/components/EntityCollectionView/Board.tsx +324 -0
  322. package/src/components/EntityCollectionView/BoardColumn.tsx +158 -0
  323. package/src/components/EntityCollectionView/BoardColumnTitle.tsx +45 -0
  324. package/src/components/EntityCollectionView/BoardSortableList.tsx +172 -0
  325. package/src/components/EntityCollectionView/EntityBoardCard.tsx +200 -0
  326. package/src/components/EntityCollectionView/EntityCard.tsx +225 -0
  327. package/src/components/EntityCollectionView/EntityCollectionBoardView.tsx +746 -0
  328. package/src/components/EntityCollectionView/EntityCollectionCardView.tsx +254 -0
  329. package/src/components/EntityCollectionView/EntityCollectionView.tsx +1220 -0
  330. package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +142 -0
  331. package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +131 -0
  332. package/src/components/EntityCollectionView/FiltersDialog.tsx +249 -0
  333. package/src/components/EntityCollectionView/ViewModeToggle.tsx +194 -0
  334. package/src/components/EntityCollectionView/board_types.ts +113 -0
  335. package/src/components/EntityCollectionView/useBoardDataController.tsx +490 -0
  336. package/src/components/EntityCollectionView/useSelectionController.tsx +43 -0
  337. package/src/components/EntityCollectionView/utils.ts +19 -0
  338. package/src/components/EntityJsonPreview.tsx +66 -0
  339. package/src/components/EntityPreview.tsx +367 -0
  340. package/src/components/EntityView.tsx +66 -0
  341. package/src/components/ErrorBoundary.tsx +40 -0
  342. package/src/components/ErrorTooltip.tsx +12 -0
  343. package/src/components/ErrorView.tsx +69 -0
  344. package/src/components/FieldCaption.tsx +14 -0
  345. package/src/components/HomePage/ContentHomePage.tsx +634 -0
  346. package/src/components/HomePage/FavouritesView.tsx +59 -0
  347. package/src/components/HomePage/HomePageDnD.tsx +702 -0
  348. package/src/components/HomePage/NavigationCard.tsx +80 -0
  349. package/src/components/HomePage/NavigationCardBinding.tsx +111 -0
  350. package/src/components/HomePage/NavigationGroup.tsx +154 -0
  351. package/src/components/HomePage/RenameGroupDialog.tsx +121 -0
  352. package/src/components/HomePage/SmallNavigationCard.tsx +45 -0
  353. package/src/components/HomePage/StudioHomePage.tsx +231 -0
  354. package/src/components/HomePage/index.tsx +6 -0
  355. package/src/components/NotFoundPage.tsx +25 -0
  356. package/src/components/PropertyCollectionView.tsx +333 -0
  357. package/src/components/PropertyConfigBadge.tsx +27 -0
  358. package/src/components/PropertyIdCopyTooltip.tsx +47 -0
  359. package/src/components/RebaseLogo.tsx +29 -0
  360. package/src/components/ReferenceTable/EntitySelectionTable.tsx +371 -0
  361. package/src/components/ReferenceWidget.tsx +152 -0
  362. package/src/components/RelationSelector.tsx +518 -0
  363. package/src/components/SearchIconsView.tsx +78 -0
  364. package/src/components/SelectableTable/SelectableTable.tsx +344 -0
  365. package/src/components/SelectableTable/SelectableTableContext.tsx +6 -0
  366. package/src/components/SelectableTable/filters/BooleanFilterField.tsx +49 -0
  367. package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +126 -0
  368. package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +203 -0
  369. package/src/components/SelectableTable/filters/RelationFilterField.tsx +138 -0
  370. package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +217 -0
  371. package/src/components/UnsavedChangesDialog.tsx +45 -0
  372. package/src/components/UserDisplay.tsx +55 -0
  373. package/src/components/UserSettingsView.tsx +220 -0
  374. package/src/components/VirtualTable/VirtualTable.performance.test.tsx +386 -0
  375. package/src/components/VirtualTable/VirtualTable.tsx +625 -0
  376. package/src/components/VirtualTable/VirtualTableCell.tsx +58 -0
  377. package/src/components/VirtualTable/VirtualTableHeader.tsx +275 -0
  378. package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +249 -0
  379. package/src/components/VirtualTable/VirtualTableProps.tsx +298 -0
  380. package/src/components/VirtualTable/VirtualTableRow.tsx +52 -0
  381. package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +39 -0
  382. package/src/components/VirtualTable/fields/VirtualTableInput.tsx +93 -0
  383. package/src/components/VirtualTable/fields/VirtualTableNumberInput.tsx +83 -0
  384. package/src/components/VirtualTable/fields/VirtualTableSelect.tsx +133 -0
  385. package/src/components/VirtualTable/fields/VirtualTableSwitch.tsx +32 -0
  386. package/src/components/VirtualTable/fields/VirtualTableUserSelect.tsx +111 -0
  387. package/src/components/VirtualTable/index.tsx +3 -0
  388. package/src/components/VirtualTable/types.tsx +46 -0
  389. package/src/components/admin/RoleChip.tsx +23 -0
  390. package/src/components/admin/RolesView.tsx +408 -0
  391. package/src/components/admin/UsersView.tsx +353 -0
  392. package/src/components/admin/index.ts +3 -0
  393. package/src/components/common/default_entity_actions.tsx +144 -0
  394. package/src/components/common/index.ts +6 -0
  395. package/src/components/common/table_height.tsx +21 -0
  396. package/src/components/common/types.tsx +61 -0
  397. package/src/components/common/useColumnsIds.tsx +210 -0
  398. package/src/components/common/useDataSourceTableController.tsx +480 -0
  399. package/src/components/common/useDebouncedCallback.tsx +20 -0
  400. package/src/components/common/useDebouncedData.ts +49 -0
  401. package/src/components/common/useScrollRestoration.tsx +68 -0
  402. package/src/components/common/useTableSearchHelper.ts +75 -0
  403. package/src/components/index.tsx +49 -0
  404. package/src/contexts/AdminModeController.tsx +11 -0
  405. package/src/contexts/AnalyticsContext.tsx +4 -0
  406. package/src/contexts/AuthControllerContext.tsx +4 -0
  407. package/src/contexts/BreacrumbsContext.tsx +45 -0
  408. package/src/contexts/CustomizationControllerContext.tsx +4 -0
  409. package/src/contexts/DataSourceContext.tsx +4 -0
  410. package/src/contexts/DialogsProvider.tsx +53 -0
  411. package/src/contexts/EffectiveRoleController.tsx +11 -0
  412. package/src/contexts/InternalUserManagementContext.tsx +4 -0
  413. package/src/contexts/ModeController.tsx +11 -0
  414. package/src/contexts/NavigationContext.tsx +4 -0
  415. package/src/contexts/SideDialogsControllerContext.tsx +4 -0
  416. package/src/contexts/SideEntityControllerContext.tsx +4 -0
  417. package/src/contexts/SnackbarProvider.tsx +14 -0
  418. package/src/contexts/StorageSourceContext.tsx +4 -0
  419. package/src/contexts/UserConfigurationPersistenceContext.tsx +4 -0
  420. package/src/contexts/index.ts +15 -0
  421. package/src/core/DefaultAppBar.tsx +274 -0
  422. package/src/core/DefaultDrawer.tsx +267 -0
  423. package/src/core/DrawerNavigationGroup.tsx +117 -0
  424. package/src/core/DrawerNavigationItem.tsx +65 -0
  425. package/src/core/EntityEditView.tsx +590 -0
  426. package/src/core/EntityEditViewFormActions.tsx +343 -0
  427. package/src/core/EntitySidePanel.tsx +173 -0
  428. package/src/core/Rebase.tsx +229 -0
  429. package/src/core/RebaseRouter.tsx +17 -0
  430. package/src/core/RebaseRoutes.tsx +47 -0
  431. package/src/core/SideDialogs.tsx +200 -0
  432. package/src/core/field_configs.tsx +443 -0
  433. package/src/core/index.tsx +14 -0
  434. package/src/form/EntityForm.tsx +820 -0
  435. package/src/form/EntityFormActions.tsx +201 -0
  436. package/src/form/PropertyFieldBinding.tsx +348 -0
  437. package/src/form/components/ErrorFocus.tsx +44 -0
  438. package/src/form/components/FieldHelperText.tsx +45 -0
  439. package/src/form/components/FormEntry.tsx +22 -0
  440. package/src/form/components/FormLayout.tsx +16 -0
  441. package/src/form/components/LabelWithIcon.tsx +43 -0
  442. package/src/form/components/LabelWithIconAndTooltip.tsx +28 -0
  443. package/src/form/components/LocalChangesMenu.tsx +144 -0
  444. package/src/form/components/StorageItemPreview.tsx +79 -0
  445. package/src/form/components/StorageUploadProgress.tsx +105 -0
  446. package/src/form/components/index.tsx +5 -0
  447. package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +105 -0
  448. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +163 -0
  449. package/src/form/field_bindings/BlockFieldBinding.tsx +268 -0
  450. package/src/form/field_bindings/DateTimeFieldBinding.tsx +70 -0
  451. package/src/form/field_bindings/KeyValueFieldBinding.tsx +567 -0
  452. package/src/form/field_bindings/MapFieldBinding.tsx +156 -0
  453. package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +146 -0
  454. package/src/form/field_bindings/MultiSelectFieldBinding.tsx +120 -0
  455. package/src/form/field_bindings/MultipleRelationFieldBinding.tsx +151 -0
  456. package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +64 -0
  457. package/src/form/field_bindings/ReferenceAsStringFieldBinding.tsx +135 -0
  458. package/src/form/field_bindings/ReferenceFieldBinding.tsx +134 -0
  459. package/src/form/field_bindings/RelationFieldBinding.tsx +176 -0
  460. package/src/form/field_bindings/RepeatFieldBinding.tsx +136 -0
  461. package/src/form/field_bindings/SelectFieldBinding.tsx +107 -0
  462. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +490 -0
  463. package/src/form/field_bindings/SwitchFieldBinding.tsx +64 -0
  464. package/src/form/field_bindings/TextFieldBinding.tsx +153 -0
  465. package/src/form/field_bindings/UserSelectFieldBinding.tsx +96 -0
  466. package/src/form/index.tsx +27 -0
  467. package/src/form/useClearRestoreValue.tsx +35 -0
  468. package/src/form/validation.ts +532 -0
  469. package/src/hooks/ApiConfigContext.tsx +40 -0
  470. package/src/hooks/data/delete.ts +77 -0
  471. package/src/hooks/data/save.ts +75 -0
  472. package/src/hooks/data/useCollectionFetch.tsx +148 -0
  473. package/src/hooks/data/useDataOrder.ts +26 -0
  474. package/src/hooks/data/useDataSource.tsx +22 -0
  475. package/src/hooks/data/useEntityFetch.tsx +121 -0
  476. package/src/hooks/data/useRelationSelector.tsx +205 -0
  477. package/src/hooks/index.tsx +51 -0
  478. package/src/hooks/navigation/contexts/CMSUrlContext.tsx +24 -0
  479. package/src/hooks/navigation/contexts/CollectionRegistryContext.tsx +19 -0
  480. package/src/hooks/navigation/contexts/NavigationStateContext.tsx +15 -0
  481. package/src/hooks/navigation/contexts/index.ts +14 -0
  482. package/src/hooks/navigation/useBuildCMSUrlController.tsx +68 -0
  483. package/src/hooks/navigation/useBuildCollectionRegistryController.tsx +150 -0
  484. package/src/hooks/navigation/useBuildNavigationStateController.tsx +135 -0
  485. package/src/hooks/navigation/useNavigationRegistry.ts +142 -0
  486. package/src/hooks/navigation/useNavigationResolution.ts +98 -0
  487. package/src/hooks/navigation/useNavigationURLs.ts +56 -0
  488. package/src/hooks/navigation/useResolvedCollections.ts +139 -0
  489. package/src/hooks/navigation/useResolvedViews.tsx +204 -0
  490. package/src/hooks/navigation/useTopLevelNavigation.ts +265 -0
  491. package/src/hooks/navigation/utils.ts +177 -0
  492. package/src/hooks/useAdminModeController.tsx +23 -0
  493. package/src/hooks/useAnalyticsController.tsx +8 -0
  494. package/src/hooks/useAuthController.tsx +14 -0
  495. package/src/hooks/useBackendStorageSource.ts +276 -0
  496. package/src/hooks/useBreadcrumbsController.tsx +49 -0
  497. package/src/hooks/useBrowserTitleAndIcon.tsx +25 -0
  498. package/src/hooks/useBuildAdminModeController.tsx +24 -0
  499. package/src/hooks/useBuildEffectiveRoleController.tsx +30 -0
  500. package/src/hooks/useBuildLocalConfigurationPersistence.tsx +65 -0
  501. package/src/hooks/useBuildModeController.tsx +71 -0
  502. package/src/hooks/useBuildNavigationController.tsx +341 -0
  503. package/src/hooks/useClipboard.tsx +158 -0
  504. package/src/hooks/useCollapsedGroups.ts +72 -0
  505. package/src/hooks/useCustomizationController.tsx +14 -0
  506. package/src/hooks/useDialogsController.tsx +14 -0
  507. package/src/hooks/useEffectiveRoleController.tsx +10 -0
  508. package/src/hooks/useEntitySelectionDialog.tsx +56 -0
  509. package/src/hooks/useInternalUserManagementController.tsx +17 -0
  510. package/src/hooks/useLargeLayout.tsx +65 -0
  511. package/src/hooks/useModeController.tsx +23 -0
  512. package/src/hooks/usePermissions.ts +43 -0
  513. package/src/hooks/useRebaseContext.tsx +86 -0
  514. package/src/hooks/useResolvedNavigationFrom.tsx +158 -0
  515. package/src/hooks/useSideDialogsController.tsx +21 -0
  516. package/src/hooks/useSideEntityController.tsx +15 -0
  517. package/src/hooks/useSnackbarController.tsx +52 -0
  518. package/src/hooks/useStorageSource.tsx +14 -0
  519. package/src/hooks/useUnsavedChangesDialog.tsx +62 -0
  520. package/src/hooks/useUserConfigurationPersistence.tsx +11 -0
  521. package/src/hooks/useValidateAuthenticator.tsx +115 -0
  522. package/src/index.ts +17 -0
  523. package/src/internal/common.tsx +5 -0
  524. package/src/internal/useBuildDataSource.ts +380 -0
  525. package/src/internal/useBuildSideDialogsController.tsx +135 -0
  526. package/src/internal/useBuildSideEntityController.tsx +309 -0
  527. package/src/internal/useRestoreScroll.tsx +60 -0
  528. package/src/preview/PropertyPreview.tsx +308 -0
  529. package/src/preview/components/ArrayEnumPreview.tsx +38 -0
  530. package/src/preview/components/AsyncPreviewComponent.tsx +47 -0
  531. package/src/preview/components/BooleanPreview.tsx +25 -0
  532. package/src/preview/components/DatePreview.tsx +94 -0
  533. package/src/preview/components/EmptyValue.tsx +10 -0
  534. package/src/preview/components/EnumValuesChip.tsx +39 -0
  535. package/src/preview/components/ImagePreview.tsx +111 -0
  536. package/src/preview/components/ReferencePreview.tsx +162 -0
  537. package/src/preview/components/RelationPreview.tsx +153 -0
  538. package/src/preview/components/StorageThumbnail.tsx +91 -0
  539. package/src/preview/components/UrlComponentPreview.tsx +113 -0
  540. package/src/preview/components/UserPreview.tsx +27 -0
  541. package/src/preview/index.ts +26 -0
  542. package/src/preview/property_previews/ArrayOfMapsPreview.tsx +72 -0
  543. package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +43 -0
  544. package/src/preview/property_previews/ArrayOfRelationsPreview.tsx +52 -0
  545. package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +49 -0
  546. package/src/preview/property_previews/ArrayOfStringsPreview.tsx +44 -0
  547. package/src/preview/property_previews/ArrayOneOfPreview.tsx +67 -0
  548. package/src/preview/property_previews/ArrayPropertyEnumPreview.tsx +34 -0
  549. package/src/preview/property_previews/ArrayPropertyPreview.tsx +69 -0
  550. package/src/preview/property_previews/MapPropertyPreview.tsx +145 -0
  551. package/src/preview/property_previews/NumberPropertyPreview.tsx +28 -0
  552. package/src/preview/property_previews/SkeletonPropertyComponent.tsx +275 -0
  553. package/src/preview/property_previews/StringPropertyPreview.tsx +57 -0
  554. package/src/preview/util.ts +30 -0
  555. package/src/routes/CustomCMSRoute.tsx +21 -0
  556. package/src/routes/RebaseRoute.tsx +255 -0
  557. package/src/routes/index.ts +2 -0
  558. package/src/util/createFormexStub.tsx +66 -0
  559. package/src/util/entity_cache.ts +267 -0
  560. package/src/util/enums.ts +32 -0
  561. package/src/util/icon_list.ts +23 -0
  562. package/src/util/icon_synonyms.ts +1853 -0
  563. package/src/util/icons.tsx +87 -0
  564. package/src/util/index.ts +11 -0
  565. package/src/util/previews.ts +50 -0
  566. package/src/util/property_utils.tsx +152 -0
  567. package/src/util/useDebouncedCallback.ts +25 -0
  568. package/src/util/useStorageUploadController.tsx +342 -0
  569. package/src/util/useTraceUpdate.tsx +24 -0
  570. package/src/vitePlugin.ts +47 -0
@@ -0,0 +1,65 @@
1
+ import { useEffect, useState } from "react";
2
+
3
+ type LayoutListener = (isLargeLayout: boolean) => void;
4
+
5
+ const breakpoints = {
6
+ xs: 0,
7
+ sm: 640,
8
+ md: 768,
9
+ lg: 1024,
10
+ xl: 1280,
11
+ "2xl": 1536,
12
+ "3xl": 1920
13
+ }
14
+
15
+ // Global state and listeners array
16
+ let isLargeLayoutGlobal = checkLargeLayout("lg"); // Default value
17
+ const listeners: LayoutListener[] = [];
18
+
19
+ // Utility to notify all listeners
20
+ const notifyListeners = () => {
21
+ listeners.forEach(listener => listener(isLargeLayoutGlobal));
22
+ };
23
+
24
+ // Listen to resize events once, at a global level
25
+ if (typeof window !== "undefined")
26
+ window.addEventListener("resize", () => {
27
+ const newIsLargeLayout = checkLargeLayout("lg");
28
+ if (newIsLargeLayout !== isLargeLayoutGlobal) {
29
+ isLargeLayoutGlobal = newIsLargeLayout;
30
+ notifyListeners();
31
+ }
32
+ });
33
+
34
+ export const useLargeLayout = () => {
35
+ const [isLargeLayout, setIsLargeLayout] = useState(isLargeLayoutGlobal);
36
+
37
+ useEffect(() => {
38
+ // Listener function to update component state
39
+ const listener: LayoutListener = (newIsLargeLayout) => {
40
+ setIsLargeLayout(newIsLargeLayout);
41
+ };
42
+
43
+ // Register listener
44
+ listeners.push(listener);
45
+
46
+ // Initial state
47
+ setIsLargeLayout(isLargeLayoutGlobal);
48
+
49
+ // Clean up by removing the listener
50
+ return () => {
51
+ const index = listeners.indexOf(listener);
52
+ if (index > -1) {
53
+ listeners.splice(index, 1);
54
+ }
55
+ };
56
+ }, []);
57
+
58
+ return isLargeLayout;
59
+ };
60
+
61
+ function checkLargeLayout(breakpoint: "xs" | "sm" | "md" | "lg" | "xl" | "2xl" | "3xl" = "lg"): boolean {
62
+ if (typeof window === "undefined")
63
+ return false;
64
+ return window.matchMedia(`(min-width: ${breakpoints[breakpoint] + 1}px)`).matches;
65
+ }
@@ -0,0 +1,23 @@
1
+ import { ModeControllerContext } from "../contexts/ModeController";
2
+ import { useContext } from "react";
3
+
4
+ /**
5
+ * Use this controller to change color mode
6
+ * @group Hooks and utilities
7
+ */
8
+ export interface ModeController {
9
+ mode: "light" | "dark";
10
+ setMode: (mode: "light" | "dark" | "system") => void;
11
+ }
12
+
13
+ /**
14
+ * Hook to retrieve the current mode ("light" | "dark"), and `setMode`
15
+ * or `toggle` functions to change it.
16
+ *
17
+ * Consider that in order to use this hook you need to have a parent
18
+ * `Rebase`
19
+ *
20
+ * @see ModeController
21
+ * @group Hooks and utilities
22
+ */
23
+ export const useModeController = () => useContext(ModeControllerContext);
@@ -0,0 +1,43 @@
1
+ import { useAuthController } from "./useAuthController";
2
+ import { EntityCollection, Entity } from "@rebasepro/types";
3
+ import { canCreateEntity, canEditEntity, canDeleteEntity, canReadCollection } from "@rebasepro/common";
4
+ import { useCallback } from "react";
5
+
6
+ /**
7
+ * Hook to evaluate roles and permissions for the current user.
8
+ * It abstracts away the need to pass `authController` to permission evaluation functions.
9
+ */
10
+ export function usePermissions() {
11
+ const authController = useAuthController();
12
+
13
+ const canCreate = useCallback(
14
+ (collection: EntityCollection<any>, path: string) =>
15
+ canCreateEntity(collection, authController, path, null),
16
+ [authController]
17
+ );
18
+
19
+ const canEdit = useCallback(
20
+ (collection: EntityCollection<any>, path: string, entity: Entity<any> | null) =>
21
+ canEditEntity(collection, authController, path, entity),
22
+ [authController]
23
+ );
24
+
25
+ const canDelete = useCallback(
26
+ (collection: EntityCollection<any>, path: string, entity: Entity<any> | null) =>
27
+ canDeleteEntity(collection, authController, path, entity),
28
+ [authController]
29
+ );
30
+
31
+ const canRead = useCallback(
32
+ (collection: EntityCollection<any>) =>
33
+ canReadCollection(collection, authController),
34
+ [authController]
35
+ );
36
+
37
+ return {
38
+ canCreate,
39
+ canEdit,
40
+ canDelete,
41
+ canRead
42
+ };
43
+ }
@@ -0,0 +1,86 @@
1
+ import { AuthController, RebaseContext, User } from "@rebasepro/types";
2
+ import { useAuthController } from "./useAuthController";
3
+ import { useSideDialogsController } from "./useSideDialogsController";
4
+ import { useCollectionRegistryController, useNavigationStateController, useCMSUrlController } from "./navigation/contexts";
5
+ import { useSideEntityController } from "./useSideEntityController";
6
+ import { useDataSource } from "./data/useDataSource";
7
+ import { useStorageSource } from "./useStorageSource";
8
+ import { useSnackbarController } from "./useSnackbarController";
9
+ import { useUserConfigurationPersistence } from "./useUserConfigurationPersistence";
10
+ import { useDialogsController } from "./useDialogsController";
11
+ import { useCustomizationController } from "./useCustomizationController";
12
+ import { useAnalyticsController } from "./useAnalyticsController";
13
+ import { useEffectiveRoleController } from "./useEffectiveRoleController";
14
+ import React, { useEffect } from "react";
15
+ import { useInternalUserManagementController } from "./useInternalUserManagementController";
16
+
17
+ /**
18
+ * Hook to retrieve the {@link RebaseContext}.
19
+ *
20
+ * Consider that in order to use this hook you need to have a parent
21
+ * `Rebase` component.
22
+ *
23
+ * @see RebaseContext
24
+ * @group Hooks and utilities
25
+ */
26
+ export const useRebaseContext = <USER extends User = User, AuthControllerType extends AuthController<USER> = AuthController<USER>>(): RebaseContext<USER, AuthControllerType> => {
27
+
28
+ const authController = useAuthController<USER, AuthControllerType>();
29
+ const sideDialogsController = useSideDialogsController();
30
+ const sideEntityController = useSideEntityController();
31
+ const collectionRegistry = useCollectionRegistryController();
32
+ const navigationState = useNavigationStateController();
33
+ const cmsUrlController = useCMSUrlController();
34
+
35
+ const navigation = React.useMemo(() => ({
36
+ ...collectionRegistry,
37
+ ...navigationState,
38
+ ...cmsUrlController,
39
+ getCollectionBySlug: collectionRegistry.getCollection
40
+ }), [collectionRegistry, navigationState, cmsUrlController]);
41
+ const dataSource = useDataSource();
42
+ const storageSource = useStorageSource();
43
+ const snackbarController = useSnackbarController();
44
+ const userConfigPersistence = useUserConfigurationPersistence();
45
+ const dialogsController = useDialogsController();
46
+ const customizationController = useCustomizationController();
47
+ const analyticsController = useAnalyticsController();
48
+ const effectiveRoleController = useEffectiveRoleController();
49
+ const userManagement = useInternalUserManagementController<USER>();
50
+
51
+ const rebaseContextRef = React.useRef<RebaseContext<USER, AuthControllerType>>({
52
+ authController,
53
+ sideDialogsController,
54
+ sideEntityController,
55
+ navigation: navigation as any,
56
+ dataSource,
57
+ storageSource,
58
+ snackbarController,
59
+ userConfigPersistence,
60
+ dialogsController,
61
+ customizationController,
62
+ analyticsController,
63
+ userManagement,
64
+ effectiveRoleController
65
+ });
66
+
67
+ React.useEffect(() => {
68
+ rebaseContextRef.current = {
69
+ authController,
70
+ sideDialogsController,
71
+ sideEntityController,
72
+ navigation: navigation as any,
73
+ dataSource,
74
+ storageSource,
75
+ snackbarController,
76
+ userConfigPersistence,
77
+ dialogsController,
78
+ customizationController,
79
+ analyticsController,
80
+ userManagement,
81
+ effectiveRoleController
82
+ };
83
+ }, [authController, dialogsController, navigation, sideDialogsController, effectiveRoleController]);
84
+
85
+ return rebaseContextRef.current;
86
+ }
@@ -0,0 +1,158 @@
1
+ import { Entity, EntityCollection, EntityCustomView, RebaseContext, User } from "@rebasepro/types";
2
+ import { useEffect, useState } from "react";
3
+ import { useRebaseContext } from "./useRebaseContext";
4
+ import { getNavigationEntriesFromPath } from "@rebasepro/common";
5
+
6
+ /**
7
+ * @see resolveNavigationFrom
8
+ * @group Hooks and utilities
9
+ */
10
+ export type ResolvedNavigationEntry<M extends Record<string, any>> =
11
+ | ResolvedNavigationEntity<M>
12
+ | ResolvedNavigationCollection<M>
13
+ | ResolvedNavigationEntityCustom<M>;
14
+
15
+ /**
16
+ * @see resolveNavigationFrom
17
+ * @group Hooks and utilities
18
+ */
19
+ export interface ResolvedNavigationEntity<M extends Record<string, any>> {
20
+ type: "entity";
21
+ entity: Entity<M>;
22
+ entityId: string | number;
23
+ path: string;
24
+ parentCollection: EntityCollection<M>;
25
+ }
26
+
27
+ /**
28
+ * @see resolveNavigationFrom
29
+ * @group Hooks and utilities
30
+ */
31
+ export interface ResolvedNavigationCollection<M extends Record<string, any>> {
32
+ type: "collection";
33
+ path: string;
34
+ collection: EntityCollection<M>;
35
+ }
36
+
37
+ /**
38
+ * @see resolveNavigationFrom
39
+ * @group Hooks and utilities
40
+ */
41
+ interface ResolvedNavigationEntityCustom<M extends Record<string, any>> {
42
+ type: "custom_view";
43
+ path: string;
44
+ view: EntityCustomView<M>;
45
+ }
46
+
47
+ /**
48
+ * Use this function to retrieve an array of navigation entries (resolved
49
+ * collection, entity or entity custom_view) for the given path. You need to pass the app context
50
+ * that you receive in different callbacks, such as the save hooks.
51
+ *
52
+ * It will take into account the `navigation` provided at the `Rebase` level.
53
+ *
54
+ * @param path
55
+ * @param context
56
+ * @group Hooks and utilities
57
+ */
58
+ export function resolveNavigationFrom<M extends Record<string, any>, USER extends User>({
59
+ path,
60
+ context
61
+ }: {
62
+ path: string,
63
+ context: RebaseContext<USER>
64
+ }): Promise<ResolvedNavigationEntry<M>[]> {
65
+
66
+ const dataSource = context.dataSource;
67
+ const navigation = context.navigation;
68
+
69
+ if (!navigation) {
70
+ throw Error("Calling resolveNavigationFrom, but main navigation has not yet been initialised");
71
+ }
72
+
73
+ const navigationEntries = getNavigationEntriesFromPath({
74
+ path,
75
+ collections: navigation.collections ?? []
76
+ });
77
+
78
+ const resultPromises: Promise<ResolvedNavigationEntry<any>>[] = navigationEntries
79
+ .map((entry) => {
80
+ if (entry.type === "collection") {
81
+ return Promise.resolve(entry);
82
+ } else if (entry.type === "entity") {
83
+ const collection = navigation.getCollection(entry.slug);
84
+ if (!collection) {
85
+ throw Error(`No collection defined in the navigation for the entity with path ${entry.slug}`);
86
+ }
87
+ return dataSource.fetchEntity({
88
+ path: entry.slug,
89
+ entityId: entry.entityId,
90
+ collection
91
+ })
92
+ .then((entity) => {
93
+ if (!entity) return undefined;
94
+ return { ...entry, entity };
95
+ });
96
+ } else if (entry.type === "custom_view") {
97
+ return Promise.resolve(entry);
98
+ } else {
99
+ throw Error("Unmapped element in useEntitiesFromPath");
100
+ }
101
+ })
102
+ .filter(v => Boolean(v)) as Promise<ResolvedNavigationEntry<any>>[];
103
+
104
+ return Promise.all(resultPromises);
105
+ }
106
+
107
+ /**
108
+ * @group Hooks and utilities
109
+ */
110
+ export interface NavigationFromProps {
111
+ path: string;
112
+ }
113
+
114
+ /**
115
+ * @group Hooks and utilities
116
+ */
117
+ export interface NavigationFrom<M extends Record<string, any>> {
118
+ data?: ResolvedNavigationEntry<M>[]
119
+ dataLoading: boolean,
120
+ dataLoadingError?: Error
121
+ }
122
+
123
+ /**
124
+ * Use this hook to retrieve an array of navigation entries (resolved
125
+ * collection or entity) for the given path. You can use this hook
126
+ * in any React component that lives under `Rebase`
127
+ * @group Hooks and utilities
128
+ */
129
+ export function useResolvedNavigationFrom<M extends Record<string, any>, USER extends User>(
130
+ {
131
+ path
132
+ }: NavigationFromProps): NavigationFrom<M> {
133
+
134
+ const context: RebaseContext<USER> = useRebaseContext();
135
+
136
+ const [data, setData] = useState<ResolvedNavigationEntry<M>[] | undefined>();
137
+ const [dataLoading, setDataLoading] = useState<boolean>(false);
138
+ const [dataLoadingError, setDataLoadingError] = useState<Error | undefined>();
139
+
140
+ useEffect(() => {
141
+ const navigation = context.navigation;
142
+ if (navigation) {
143
+ setDataLoading(true);
144
+ setDataLoadingError(undefined);
145
+ resolveNavigationFrom<M, USER>({ path, context })
146
+ .then(setData)
147
+ .catch((e) => setDataLoadingError(e))
148
+ .finally(() => setDataLoading(false));
149
+ }
150
+
151
+ }, [path, context]);
152
+
153
+ if (!context.navigation) {
154
+ return { dataLoading: true };
155
+ }
156
+
157
+ return { data, dataLoading, dataLoadingError };
158
+ }
@@ -0,0 +1,21 @@
1
+ import { SideDialogsController } from "@rebasepro/types";
2
+ import { SideDialogsControllerContext } from "../contexts/SideDialogsControllerContext";
3
+ import { useContext } from "react";
4
+
5
+ /**
6
+ * Hook to retrieve the side dialogs' controller.
7
+ *
8
+ * This hook allows you to open and close side dialogs. This is the mechanism
9
+ * used when open a side entity dialog, or when selecting a reference.
10
+ *
11
+ * If you want to open a side entity dialog, you can use the {@link useSideEntityController}
12
+ * hook.
13
+ *
14
+ * If you want to select a reference, you can use the {@link useReferenceDialog}
15
+ *
16
+ * Consider that in order to use this hook you need to have a parent
17
+ * `Rebase`
18
+ *
19
+ * @group Hooks and utilities
20
+ */
21
+ export const useSideDialogsController = (): SideDialogsController => useContext(SideDialogsControllerContext);
@@ -0,0 +1,15 @@
1
+ import { SideEntityController } from "@rebasepro/types";
2
+ import { useContext } from "react";
3
+ import { SideEntityControllerContext } from "../contexts/SideEntityControllerContext";
4
+
5
+ /**
6
+ * Use this hook to retrieve an entity controller that allows you to open
7
+ * a side dialog to edit an entity.
8
+ *
9
+ * Consider that in order to use this hook you need to have a parent
10
+ * `Rebase`
11
+ *
12
+ * @see SideEntityController
13
+ * @group Hooks and utilities
14
+ */
15
+ export const useSideEntityController = (): SideEntityController => useContext(SideEntityControllerContext);
@@ -0,0 +1,52 @@
1
+ import React, { useCallback, useMemo } from "react";
2
+ import { useSnackbar } from "notistack";
3
+ import { SnackbarMessageType } from "@rebasepro/types";
4
+
5
+
6
+ /**
7
+ * Hook to retrieve the SnackbarContext.
8
+ *
9
+ * Consider that in order to use this hook you need to have a parent
10
+ * `Rebase`
11
+ *
12
+ * @see SnackbarController
13
+ * @group Hooks and utilities
14
+ */
15
+ export const useSnackbarController = () => {
16
+
17
+ const {
18
+ enqueueSnackbar,
19
+ closeSnackbar
20
+ } = useSnackbar();
21
+
22
+ const open = useCallback((props: {
23
+ type: SnackbarMessageType;
24
+ title?: string;
25
+ message: React.ReactNode;
26
+ autoHideDuration?: number;
27
+ }) => {
28
+ const {
29
+ type,
30
+ message,
31
+ autoHideDuration
32
+ } = props;
33
+ enqueueSnackbar({
34
+ message: props.title ? <div className={"flex flex-col"}>
35
+ <strong>{props.title}</strong>
36
+ {message}
37
+ </div> : message,
38
+ variant: type,
39
+ autoHideDuration
40
+ })
41
+ }, []);
42
+
43
+ const close = useCallback(() => {
44
+ closeSnackbar();
45
+ }, []);
46
+
47
+ return useMemo(() => ({
48
+ open,
49
+ close
50
+ }), [open, close]);
51
+
52
+ };
@@ -0,0 +1,14 @@
1
+ import { EntityCollection, StorageSource } from "@rebasepro/types";
2
+ import { StorageSourceContext } from "../contexts/StorageSourceContext";
3
+ import { useContext } from "react";
4
+
5
+ /**
6
+ * Use this hook to get the storage source being used
7
+ * @group Hooks and utilities
8
+ */
9
+ export const useStorageSource = (collection?: EntityCollection): StorageSource => {
10
+ const defaultStorageSource = useContext(StorageSourceContext);
11
+ if (collection?.overrides?.storageSource)
12
+ return collection.overrides.storageSource;
13
+ return defaultStorageSource;
14
+ };
@@ -0,0 +1,62 @@
1
+ import { useCallback, useEffect, useState } from "react";
2
+ import { useBlocker } from "react-router-dom";
3
+ import { UnsavedChangesDialogProps } from "../components/UnsavedChangesDialog";
4
+
5
+ /**
6
+ * A single, unified hook to prevent navigation when there are unsaved changes.
7
+ *
8
+ * It automatically handles:
9
+ * 1. Internal React Router navigation using `useBlocker`.
10
+ * 2. External browser navigation (page refresh, tab close) using `beforeunload`.
11
+ */
12
+ export function useUnsavedChangesDialog(
13
+ when: boolean,
14
+ onOk: () => void
15
+ ): {
16
+ dialogProps: UnsavedChangesDialogProps;
17
+ triggerDialog: () => void;
18
+ } {
19
+ const [manualDialogOpen, setManualDialogOpen] = useState(false);
20
+
21
+ const blocker = useBlocker(
22
+ ({ currentLocation, nextLocation }) =>
23
+ when && currentLocation.pathname !== nextLocation.pathname
24
+ );
25
+
26
+ useEffect(() => {
27
+ if (!when) return;
28
+
29
+ const handleBeforeUnload = (e: BeforeUnloadEvent) => {
30
+ e.preventDefault();
31
+ e.returnValue = "";
32
+ };
33
+
34
+ window.addEventListener("beforeunload", handleBeforeUnload);
35
+ return () => window.removeEventListener("beforeunload", handleBeforeUnload);
36
+ }, [when]);
37
+
38
+ const handleOk = useCallback(() => {
39
+ onOk();
40
+ if (blocker.state === "blocked") {
41
+ blocker.proceed();
42
+ }
43
+ setManualDialogOpen(false);
44
+ }, [blocker, onOk]);
45
+
46
+ const handleCancel = useCallback(() => {
47
+ if (blocker.state === "blocked") {
48
+ blocker.reset();
49
+ }
50
+ setManualDialogOpen(false);
51
+ }, [blocker]);
52
+
53
+ return {
54
+ dialogProps: {
55
+ open: manualDialogOpen || blocker.state === "blocked",
56
+ handleOk,
57
+ handleCancel,
58
+ body: "There are unsaved changes in this collection"
59
+ },
60
+ triggerDialog: () => setManualDialogOpen(true)
61
+ };
62
+ }
@@ -0,0 +1,11 @@
1
+ import { UserConfigurationPersistence } from "@rebasepro/types";
2
+ import { useContext } from "react";
3
+ import { UserConfigurationPersistenceContext } from "../contexts/UserConfigurationPersistenceContext";
4
+
5
+ /**
6
+ * Use this controller to access the configuration that is stored externally,
7
+ * and not defined in code
8
+ *
9
+ * @group Hooks and utilities
10
+ */
11
+ export const useUserConfigurationPersistence = (): UserConfigurationPersistence | undefined => useContext(UserConfigurationPersistenceContext);
@@ -0,0 +1,115 @@
1
+ import { useCallback, useEffect, useRef, useState } from "react";
2
+ import { deepEqual as equal } from "fast-equals";
3
+
4
+ import { AuthController, Authenticator, DataSource, StorageSource, User } from "../index";
5
+
6
+ /**
7
+ * This hook is used internally for validating an authenticator.
8
+ *
9
+ * @param authController
10
+ * @param authentication
11
+ * @param storageSource
12
+ * @param dataSource
13
+ */
14
+ export function useValidateAuthenticator<USER extends User = any>
15
+ ({
16
+ disabled,
17
+ authController,
18
+ authenticator,
19
+ storageSource,
20
+ dataSource
21
+ }:
22
+ {
23
+ disabled?: boolean,
24
+ authController: AuthController<USER>,
25
+ authenticator?: boolean | Authenticator<USER>,
26
+ dataSource: DataSource;
27
+ storageSource: StorageSource;
28
+ }): {
29
+ canAccessMainView: boolean,
30
+ authLoading: boolean,
31
+ notAllowedError: any,
32
+ authVerified: boolean,
33
+ } {
34
+
35
+ const authenticationEnabled = Boolean(authenticator);
36
+
37
+ const [authLoading, setAuthLoading] = useState<boolean>(authenticationEnabled);
38
+ const [notAllowedError, setNotAllowedError] = useState<any>(false);
39
+ const [authVerified, setAuthVerified] = useState<boolean>(!authenticationEnabled || Boolean(authController.loginSkipped));
40
+
41
+ const canAccessMainView = (authVerified) &&
42
+ (!authenticationEnabled || Boolean(authController.user) || Boolean(authController.loginSkipped)) &&
43
+ !notAllowedError;
44
+
45
+ useEffect(() => {
46
+ if (authController.loginSkipped)
47
+ setAuthVerified(true);
48
+ }, [authController.loginSkipped]);
49
+
50
+ /**
51
+ * We use this ref to check the authentication only if the user has
52
+ * changed.
53
+ */
54
+ const checkedUserRef = useRef<User | undefined>(undefined);
55
+
56
+ const checkAuthentication = useCallback(async () => {
57
+
58
+ if (disabled) {
59
+ return;
60
+ }
61
+
62
+ if (authController.initialLoading) {
63
+ return;
64
+ }
65
+
66
+ if (!authController.user && !authController.loginSkipped) {
67
+ checkedUserRef.current = undefined;
68
+ setAuthLoading(false);
69
+ setAuthVerified(false);
70
+ return;
71
+ }
72
+
73
+ const delegateUser = authController.user;
74
+
75
+ if (authenticator instanceof Function && delegateUser && !equal(checkedUserRef.current?.uid, delegateUser.uid)) {
76
+ setAuthLoading(true);
77
+ try {
78
+ const allowed = await authenticator({
79
+ user: delegateUser,
80
+ authController,
81
+ dataSource,
82
+ storageSource
83
+ });
84
+ if (!allowed) {
85
+ authController.signOut();
86
+ setNotAllowedError(true);
87
+ }
88
+ } catch (e) {
89
+ setNotAllowedError(e);
90
+ authController.signOut();
91
+ }
92
+ setAuthLoading(false);
93
+ setAuthVerified(true);
94
+ checkedUserRef.current = delegateUser;
95
+ } else {
96
+ setAuthLoading(false);
97
+ }
98
+
99
+ if (!authController.initialLoading && !delegateUser) {
100
+ setAuthVerified(true);
101
+ }
102
+
103
+ }, [disabled, authController, authenticator, dataSource, storageSource]);
104
+
105
+ useEffect(() => {
106
+ checkAuthentication();
107
+ }, [checkAuthentication]);
108
+
109
+ return {
110
+ canAccessMainView,
111
+ authLoading: authenticationEnabled && authLoading,
112
+ notAllowedError,
113
+ authVerified
114
+ }
115
+ }
package/src/index.ts ADDED
@@ -0,0 +1,17 @@
1
+ export * from "./core";
2
+ export * from "./app";
3
+ export * from "@rebasepro/types";
4
+ export * from "@rebasepro/common";
5
+ // Note: EntityFormProps is exported from both @rebasepro/types and ./form
6
+ // The local version from ./form has additional properties and takes precedence
7
+ export * from "./form";
8
+ export * from "./preview";
9
+ export * from "./hooks";
10
+ export * from "./components/admin";
11
+ export * from "./components";
12
+ export * from "./util";
13
+ export * from "./contexts";
14
+ export * from "./routes";
15
+ export { useUnsavedChangesDialog } from "./hooks/useUnsavedChangesDialog";
16
+ export type { UnsavedChangesDialogProps } from "./components/UnsavedChangesDialog";
17
+ export { UnsavedChangesDialog } from "./components/UnsavedChangesDialog";