@rebasepro/admin 0.9.0 → 0.9.1-canary.0de22e0
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.
- package/README.md +7 -7
- package/dist/{CollectionEditorDialog-B-7uW3iJ.js → CollectionEditorDialog-D7odTn0N.js} +150 -36
- package/dist/CollectionEditorDialog-D7odTn0N.js.map +1 -0
- package/dist/{PropertyEditView-7KMTcrqi.js → PropertyEditView-i51tFOfM.js} +6 -6
- package/dist/PropertyEditView-i51tFOfM.js.map +1 -0
- package/dist/{RouterCollectionsStudioView-epqIbZrJ.js → RouterCollectionsStudioView-B9AjTCjT.js} +5 -5
- package/dist/RouterCollectionsStudioView-B9AjTCjT.js.map +1 -0
- package/dist/collection_editor/api/generateCollectionApi.d.ts +4 -4
- package/dist/collection_editor/ui/collection_editor/PropertyEditView.d.ts +1 -1
- package/dist/collection_editor/ui/collection_editor/SwitchControl.d.ts +1 -1
- package/dist/collection_editor/useSafeSnackbarController.d.ts +1 -1
- package/dist/collection_editor_ui.js +5 -5
- package/dist/collection_editor_ui.js.map +1 -1
- package/dist/components/CollectionTableBinding/CollectionTableBindingProps.d.ts +1 -1
- package/dist/components/CollectionTableBinding/internal/EntityTableCell.d.ts +1 -1
- package/dist/components/CollectionTableBinding/internal/popup_field/PopupFormField.d.ts +1 -1
- package/dist/components/CollectionTableBinding/table_bindings.d.ts +1 -1
- package/dist/components/CollectionViewBinding/hooks/useCollectionInlineEditor.d.ts +1 -1
- package/dist/components/{RebaseCMS.d.ts → RebaseAdmin.d.ts} +2 -2
- package/dist/components/RebaseLayout.d.ts +5 -4
- package/dist/components/RebaseShell.d.ts +1 -0
- package/dist/components/SelectableTable/SelectableTable.d.ts +1 -1
- package/dist/components/SelectableTable/SelectableTableContext.d.ts +1 -1
- package/dist/components/SidePanelProvider.d.ts +1 -1
- package/dist/components/field_configs.d.ts +17 -0
- package/dist/components/index.d.ts +1 -1
- package/dist/contexts/BreacrumbsContext.d.ts +1 -1
- package/dist/editor.js +1 -1
- package/dist/editor.js.map +1 -1
- package/dist/export-BM6HPujv.js +518 -0
- package/dist/export-BM6HPujv.js.map +1 -0
- package/dist/form/components/LocalChangesMenu.d.ts +1 -1
- package/dist/form/components/StorageUploadProgress.d.ts +1 -1
- package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +1 -1
- package/dist/{history-7X5bON_n.js → history-CtIPJxvQ.js} +6 -6
- package/dist/history-CtIPJxvQ.js.map +1 -0
- package/dist/hooks/useSelectionDialog.d.ts +1 -1
- package/dist/import-DzQnT03v.js +328 -0
- package/dist/import-DzQnT03v.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +3300 -2
- package/dist/index.js.map +1 -0
- package/dist/preview/components/UrlComponentPreview.d.ts +2 -1
- package/dist/preview/util.d.ts +1 -0
- package/dist/types/components/formex.d.ts +1 -1
- package/dist/util/view_mode.d.ts +54 -0
- package/dist/{src-sUZfe29F.js → util-XFwQ9FEc.js} +17554 -21391
- package/dist/util-XFwQ9FEc.js.map +1 -0
- package/package.json +12 -17
- package/src/collection_editor/ConfigControllerProvider.tsx +1 -1
- package/src/collection_editor/api/generateCollectionApi.ts +4 -4
- package/src/collection_editor/ui/AddKanbanColumnAction.tsx +1 -1
- package/src/collection_editor/ui/CollectionViewHeaderAction.tsx +1 -1
- package/src/collection_editor/ui/EditorCollectionAction.tsx +1 -1
- package/src/collection_editor/ui/EditorCollectionActionStart.tsx +1 -1
- package/src/collection_editor/ui/EditorEntityAction.tsx +1 -1
- package/src/collection_editor/ui/HomePageEditorCollectionAction.tsx +1 -1
- package/src/collection_editor/ui/KanbanSetupAction.tsx +1 -1
- package/src/collection_editor/ui/MissingReferenceWidget.tsx +1 -1
- package/src/collection_editor/ui/NewCollectionButton.tsx +1 -1
- package/src/collection_editor/ui/NewCollectionCard.tsx +1 -1
- package/src/collection_editor/ui/PropertyAddColumnComponent.tsx +1 -1
- package/src/collection_editor/ui/collection_editor/AICollectionGeneratorPopover.tsx +1 -1
- package/src/collection_editor/ui/collection_editor/CollectionDetailsForm.tsx +3 -3
- package/src/collection_editor/ui/collection_editor/CollectionEditorDialog.tsx +3 -3
- package/src/collection_editor/ui/collection_editor/CollectionEditorWelcomeView.tsx +2 -2
- package/src/collection_editor/ui/collection_editor/CollectionPropertiesEditorForm.tsx +2 -2
- package/src/collection_editor/ui/collection_editor/CollectionRLSTab.tsx +139 -13
- package/src/collection_editor/ui/collection_editor/CollectionRelationsTab.tsx +1 -1
- package/src/collection_editor/ui/collection_editor/CollectionStudioView.tsx +1 -1
- package/src/collection_editor/ui/collection_editor/CollectionsStudioView.tsx +1 -1
- package/src/collection_editor/ui/collection_editor/DisplaySettingsForm.tsx +2 -2
- package/src/collection_editor/ui/collection_editor/EntityActionsEditTab.tsx +2 -2
- package/src/collection_editor/ui/collection_editor/EntityActionsSelectDialog.tsx +1 -1
- package/src/collection_editor/ui/collection_editor/EntityCustomViewsSelectDialog.tsx +1 -1
- package/src/collection_editor/ui/collection_editor/EnumForm.tsx +2 -2
- package/src/collection_editor/ui/collection_editor/GeneralSettingsForm.tsx +2 -2
- package/src/collection_editor/ui/collection_editor/GetCodeDialog.tsx +2 -2
- package/src/collection_editor/ui/collection_editor/KanbanConfigSection.tsx +2 -2
- package/src/collection_editor/ui/collection_editor/PropertyEditView.tsx +2 -2
- package/src/collection_editor/ui/collection_editor/PropertyFieldPreview.tsx +1 -1
- package/src/collection_editor/ui/collection_editor/PropertyTree.tsx +1 -1
- package/src/collection_editor/ui/collection_editor/RouterCollectionStudioView.tsx +1 -1
- package/src/collection_editor/ui/collection_editor/SubcollectionsEditTab.tsx +2 -2
- package/src/collection_editor/ui/collection_editor/SwitchControl.tsx +1 -1
- package/src/collection_editor/ui/collection_editor/import/CollectionEditorImportDataPreview.tsx +1 -1
- package/src/collection_editor/ui/collection_editor/import/CollectionEditorImportMapping.tsx +2 -2
- package/src/collection_editor/ui/collection_editor/properties/BlockPropertyField.tsx +1 -1
- package/src/collection_editor/ui/collection_editor/properties/BooleanPropertyField.tsx +1 -1
- package/src/collection_editor/ui/collection_editor/properties/CommonPropertyFields.tsx +3 -3
- package/src/collection_editor/ui/collection_editor/properties/DateTimePropertyField.tsx +2 -2
- package/src/collection_editor/ui/collection_editor/properties/EnumPropertyField.tsx +3 -3
- package/src/collection_editor/ui/collection_editor/properties/MapPropertyField.tsx +2 -2
- package/src/collection_editor/ui/collection_editor/properties/MarkdownPropertyField.tsx +2 -2
- package/src/collection_editor/ui/collection_editor/properties/NumberPropertyField.tsx +2 -2
- package/src/collection_editor/ui/collection_editor/properties/ReferencePropertyField.tsx +2 -2
- package/src/collection_editor/ui/collection_editor/properties/RelationPropertyField.tsx +1 -1
- package/src/collection_editor/ui/collection_editor/properties/RepeatPropertyField.tsx +1 -1
- package/src/collection_editor/ui/collection_editor/properties/StoragePropertyField.tsx +2 -2
- package/src/collection_editor/ui/collection_editor/properties/StringPropertyField.tsx +2 -2
- package/src/collection_editor/ui/collection_editor/properties/UrlPropertyField.tsx +1 -1
- package/src/collection_editor/ui/collection_editor/properties/VectorPropertyField.tsx +1 -1
- package/src/collection_editor/ui/collection_editor/properties/advanced/AdvancedPropertyValidation.tsx +1 -1
- package/src/collection_editor/ui/collection_editor/properties/conditions/ConditionsEditor.tsx +1 -1
- package/src/collection_editor/ui/collection_editor/properties/conditions/EnumConditionsEditor.tsx +1 -1
- package/src/collection_editor/ui/collection_editor/properties/validation/ArrayPropertyValidation.tsx +2 -2
- package/src/collection_editor/ui/collection_editor/properties/validation/GeneralPropertyValidation.tsx +2 -2
- package/src/collection_editor/ui/collection_editor/properties/validation/NumberPropertyValidation.tsx +2 -2
- package/src/collection_editor/ui/collection_editor/properties/validation/StringPropertyValidation.tsx +2 -2
- package/src/collection_editor/useSafeSnackbarController.ts +1 -1
- package/src/components/AdminModeSyncer.tsx +1 -1
- package/src/components/ArrayContainer.tsx +1 -1
- package/src/components/ClearFilterSortButton.tsx +1 -1
- package/src/components/CollectionPanel.tsx +1 -1
- package/src/components/CollectionTableBinding/CollectionRowActions.tsx +3 -3
- package/src/components/CollectionTableBinding/CollectionTableBinding.tsx +3 -3
- package/src/components/CollectionTableBinding/CollectionTableBindingProps.tsx +1 -1
- package/src/components/CollectionTableBinding/PropertyTableCell.tsx +1 -1
- package/src/components/CollectionTableBinding/column_utils.tsx +1 -1
- package/src/components/CollectionTableBinding/fields/TableMultipleRelationField.tsx +2 -2
- package/src/components/CollectionTableBinding/fields/TableReferenceField.tsx +2 -2
- package/src/components/CollectionTableBinding/fields/TableRelationField.tsx +2 -2
- package/src/components/CollectionTableBinding/fields/TableStorageUpload.tsx +1 -1
- package/src/components/CollectionTableBinding/internal/CollectionTableToolbar.tsx +1 -1
- package/src/components/CollectionTableBinding/internal/EntityTableCell.tsx +2 -2
- package/src/components/CollectionTableBinding/internal/EntityTableCellActions.tsx +1 -1
- package/src/components/CollectionTableBinding/internal/popup_field/PopupFormField.tsx +4 -4
- package/src/components/CollectionTableBinding/table_bindings.tsx +1 -1
- package/src/components/CollectionViewBinding/BoardCardBinding.tsx +2 -2
- package/src/components/CollectionViewBinding/CollectionBoardViewBinding.tsx +4 -4
- package/src/components/CollectionViewBinding/CollectionCardViewBinding.tsx +1 -1
- package/src/components/CollectionViewBinding/CollectionListViewBinding.tsx +3 -3
- package/src/components/CollectionViewBinding/CollectionViewActions.tsx +3 -3
- package/src/components/CollectionViewBinding/CollectionViewBinding.tsx +77 -127
- package/src/components/CollectionViewBinding/CollectionViewStartActions.tsx +5 -9
- package/src/components/CollectionViewBinding/EntityCardBinding.tsx +3 -3
- package/src/components/CollectionViewBinding/FiltersDialog.tsx +19 -1
- package/src/components/CollectionViewBinding/SplitListView.tsx +114 -63
- package/src/components/CollectionViewBinding/ViewModeToggle.tsx +1 -1
- package/src/components/CollectionViewBinding/hooks/useCollectionInlineEditor.ts +2 -2
- package/src/components/CollectionViewBinding/hooks/useKanbanDragAndDrop.ts +2 -2
- package/src/components/CollectionViewBinding/useBoardDataController.tsx +9 -3
- package/src/components/CollectionViewBinding/usePreviewSlots.ts +1 -1
- package/src/components/DefaultAppBar.tsx +3 -3
- package/src/components/DefaultDrawer.tsx +3 -3
- package/src/components/DeleteEntityDialog.tsx +1 -1
- package/src/components/DetailViewBinding.tsx +7 -5
- package/src/components/DrawerNavigationGroup.tsx +2 -2
- package/src/components/EditFormActions.tsx +6 -6
- package/src/components/EditViewBinding.tsx +9 -8
- package/src/components/EntityPreviewBinding.tsx +5 -4
- package/src/components/EntityViewBinding.tsx +2 -2
- package/src/components/HomePage/ContentHomePage.tsx +6 -5
- package/src/components/HomePage/FavouritesView.tsx +2 -2
- package/src/components/HomePage/NavigationCardBinding.tsx +3 -3
- package/src/components/HomePage/NavigationGroup.tsx +1 -1
- package/src/components/HomePage/RenameGroupDialog.tsx +1 -1
- package/src/components/JsonPreviewBinding.tsx +1 -1
- package/src/components/{RebaseCMS.tsx → RebaseAdmin.tsx} +3 -3
- package/src/components/RebaseAuthGate.tsx +2 -2
- package/src/components/RebaseLayout.tsx +7 -13
- package/src/components/RebaseNavigation.tsx +18 -3
- package/src/components/RebaseRouteDefs.tsx +3 -3
- package/src/components/RebaseShell.tsx +2 -1
- package/src/components/ReferenceTable/SelectionTableBinding.tsx +7 -6
- package/src/components/ReferenceWidget.tsx +1 -1
- package/src/components/RelationSelector.tsx +1 -1
- package/src/components/SearchIconsView.tsx +2 -2
- package/src/components/SelectableTable/SelectableTable.tsx +2 -2
- package/src/components/SelectableTable/SelectableTableContext.tsx +1 -1
- package/src/components/SelectableTable/filters/BooleanFilterField.tsx +1 -1
- package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +1 -1
- package/src/components/SelectableTable/filters/FilterFieldBinding.tsx +1 -1
- package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +2 -2
- package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +1 -1
- package/src/components/SideDialogs.tsx +1 -1
- package/src/components/SidePanelBinding.tsx +47 -9
- package/src/components/SidePanelProvider.tsx +15 -12
- package/src/components/UserSelector.tsx +1 -1
- package/src/components/admin/CreationResultDialog.tsx +6 -3
- package/src/components/app/Scaffold.tsx +6 -2
- package/src/components/common/default_entity_actions.tsx +123 -25
- package/src/components/field_configs.tsx +42 -25
- package/src/components/history/EntityHistoryEntry.tsx +1 -1
- package/src/components/history/EntityHistoryView.tsx +5 -5
- package/src/components/history/LastEditedByIndicator.tsx +2 -2
- package/src/components/index.ts +1 -1
- package/src/contexts/BreacrumbsContext.tsx +1 -1
- package/src/data_export/export/BasicExportAction.tsx +1 -1
- package/src/data_export/export/ExportCollectionAction.tsx +1 -1
- package/src/data_import/components/DataNewPropertiesMapping.tsx +1 -1
- package/src/data_import/components/ImportFileUpload.tsx +1 -1
- package/src/data_import/components/ImportNewPropertyFieldPreview.tsx +3 -5
- package/src/data_import/components/ImportSaveInProgress.tsx +1 -1
- package/src/data_import/import/ImportCollectionAction.tsx +8 -8
- package/src/data_import/utils/data.ts +2 -2
- package/src/data_import/utils/get_properties_mapping.ts +1 -1
- package/src/editor/components/image-bubble.tsx +1 -1
- package/src/editor/components/table-bubble.tsx +1 -1
- package/src/editor/editor.tsx +1 -1
- package/src/editor/selectors/color-selector.tsx +1 -1
- package/src/editor/selectors/link-selector.tsx +1 -1
- package/src/editor/selectors/node-selector.tsx +2 -2
- package/src/editor/selectors/text-buttons.tsx +1 -1
- package/src/form/EntityForm.tsx +8 -5
- package/src/form/EntityFormActions.tsx +1 -1
- package/src/form/EntityFormBinding.tsx +7 -5
- package/src/form/PropertyFieldBinding.tsx +3 -3
- package/src/form/components/ErrorFocus.tsx +1 -1
- package/src/form/components/LocalChangesMenu.tsx +3 -3
- package/src/form/components/StorageItemPreview.tsx +1 -1
- package/src/form/components/StorageUploadProgress.tsx +3 -3
- package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +3 -2
- package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +4 -3
- package/src/form/field_bindings/BlockFieldBinding.tsx +4 -3
- package/src/form/field_bindings/DateTimeFieldBinding.tsx +3 -2
- package/src/form/field_bindings/KeyValueFieldBinding.tsx +4 -3
- package/src/form/field_bindings/MapFieldBinding.tsx +3 -2
- package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +4 -3
- package/src/form/field_bindings/MultiSelectFieldBinding.tsx +2 -1
- package/src/form/field_bindings/MultipleRelationFieldBinding.tsx +3 -2
- package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +2 -1
- package/src/form/field_bindings/ReferenceFieldBinding.tsx +5 -4
- package/src/form/field_bindings/RelationFieldBinding.tsx +3 -2
- package/src/form/field_bindings/RepeatFieldBinding.tsx +3 -2
- package/src/form/field_bindings/SelectFieldBinding.tsx +2 -1
- package/src/form/field_bindings/StorageUploadFieldBinding.tsx +5 -4
- package/src/form/field_bindings/SwitchFieldBinding.tsx +2 -1
- package/src/form/field_bindings/TextFieldBinding.tsx +2 -1
- package/src/form/field_bindings/UserSelectFieldBinding.tsx +2 -1
- package/src/form/field_bindings/VectorFieldBinding.tsx +2 -1
- package/src/form/form_utils.ts +1 -1
- package/src/hooks/navigation/useNavigationResolution.ts +19 -4
- package/src/hooks/useBuildSidePanel.tsx +10 -2
- package/src/hooks/useCMSContext.tsx +1 -1
- package/src/hooks/useHistory.ts +1 -1
- package/src/hooks/useResolvedNavigationFrom.tsx +4 -2
- package/src/hooks/useSelectionDialog.tsx +3 -3
- package/src/index.ts +3 -3
- package/src/preview/PropertyPreview.tsx +2 -2
- package/src/preview/components/DatePreview.tsx +1 -1
- package/src/preview/components/EnumValuesChip.tsx +1 -1
- package/src/preview/components/ImagePreview.tsx +2 -2
- package/src/preview/components/ReferencePreview.tsx +3 -3
- package/src/preview/components/RelationPreview.tsx +3 -3
- package/src/preview/components/StorageThumbnail.tsx +1 -1
- package/src/preview/components/UrlComponentPreview.tsx +2 -9
- package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +1 -1
- package/src/preview/property_previews/ArrayOfStringsPreview.tsx +1 -1
- package/src/preview/property_previews/ArrayOneOfPreview.tsx +1 -1
- package/src/preview/property_previews/ArrayPropertyPreview.tsx +1 -1
- package/src/preview/property_previews/NumberPropertyPreview.tsx +1 -1
- package/src/preview/util.ts +9 -0
- package/src/routes/CustomViewRoute.tsx +2 -1
- package/src/routes/RebaseRoute.tsx +21 -26
- package/src/types/components/formex.tsx +1 -1
- package/src/util/navigation_utils.ts +2 -5
- package/src/util/previews.ts +4 -2
- package/src/util/view_mode.ts +102 -0
- package/dist/CollectionEditorDialog-B-7uW3iJ.js.map +0 -1
- package/dist/PropertyEditView-7KMTcrqi.js.map +0 -1
- package/dist/RouterCollectionsStudioView-epqIbZrJ.js.map +0 -1
- package/dist/history-7X5bON_n.js.map +0 -1
- package/dist/src-sUZfe29F.js.map +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React, { useLayoutEffect } from "react";
|
|
2
|
-
import { useRebaseRegistryDispatch } from "@rebasepro/
|
|
3
|
-
import type {
|
|
2
|
+
import { useRebaseRegistryDispatch } from "@rebasepro/app";
|
|
3
|
+
import type { RebaseAdminConfig } from "@rebasepro/types";
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* Declarative component to configure the CMS in Rebase.
|
|
@@ -10,7 +10,7 @@ import type { RebaseCMSConfig } from "@rebasepro/types";
|
|
|
10
10
|
* is auto-wired as a native feature (slots, provider, Studio view) without
|
|
11
11
|
* needing any external plugin.
|
|
12
12
|
*/
|
|
13
|
-
export function
|
|
13
|
+
export function RebaseAdmin({ collections, views, homePage, entityViews, entityActions, collectionEditor, navigationGroupMappings, basePath }: RebaseAdminConfig) {
|
|
14
14
|
const dispatch = useRebaseRegistryDispatch();
|
|
15
15
|
|
|
16
16
|
useLayoutEffect(() => {
|
|
@@ -2,9 +2,9 @@ import React from "react";
|
|
|
2
2
|
import {
|
|
3
3
|
useRebaseRegistry,
|
|
4
4
|
useAuthController
|
|
5
|
-
} from "@rebasepro/
|
|
5
|
+
} from "@rebasepro/app";
|
|
6
6
|
import { CircularProgressCenter } from "@rebasepro/ui";
|
|
7
|
-
import { LoginView } from "@rebasepro/
|
|
7
|
+
import { LoginView } from "@rebasepro/app";
|
|
8
8
|
import type { AuthControllerExtended } from "@rebasepro/types";
|
|
9
9
|
|
|
10
10
|
/**
|
|
@@ -4,10 +4,9 @@ import {
|
|
|
4
4
|
useAdminModeController,
|
|
5
5
|
useComponentOverride,
|
|
6
6
|
useRebaseRegistry
|
|
7
|
-
} from "@rebasepro/
|
|
7
|
+
} from "@rebasepro/app";
|
|
8
8
|
|
|
9
9
|
import { Scaffold } from "./app/Scaffold";
|
|
10
|
-
import { AppBar } from "./app/AppBar";
|
|
11
10
|
import { Drawer } from "./app/Drawer";
|
|
12
11
|
import { SideDialogs } from "./SideDialogs";
|
|
13
12
|
import { AdminModeSyncer } from "./AdminModeSyncer";
|
|
@@ -16,7 +15,7 @@ import type { AppView } from "@rebasepro/types";
|
|
|
16
15
|
export interface RebaseLayoutProps {
|
|
17
16
|
/** Title shown in the drawer. */
|
|
18
17
|
title?: string;
|
|
19
|
-
/**
|
|
18
|
+
/** Top bar. Only rendered if provided — pass `<AppBar/>` for the default one. */
|
|
20
19
|
appBar?: React.ReactNode;
|
|
21
20
|
/** Custom Drawer to override the default. */
|
|
22
21
|
drawer?: React.ReactNode;
|
|
@@ -27,17 +26,18 @@ export interface RebaseLayoutProps {
|
|
|
27
26
|
}
|
|
28
27
|
|
|
29
28
|
/**
|
|
30
|
-
* Layout layer — provides the Scaffold,
|
|
29
|
+
* Layout layer — provides the Scaffold, Drawer, and SideDialogs.
|
|
31
30
|
*
|
|
32
31
|
* Wraps the route outlet with the standard Rebase admin layout.
|
|
33
|
-
* Override
|
|
32
|
+
* Override the drawer via props; pass `appBar` to add a top bar (there is
|
|
33
|
+
* none by default — the drawer owns navigation and user actions).
|
|
34
34
|
*
|
|
35
35
|
* **Independently usable**: Use this when you want the Rebase layout
|
|
36
36
|
* without its default route definitions.
|
|
37
37
|
*
|
|
38
38
|
* @example
|
|
39
39
|
* ```tsx
|
|
40
|
-
* <RebaseLayout title="My Admin">
|
|
40
|
+
* <RebaseLayout title="My Admin" appBar={<AppBar/>}>
|
|
41
41
|
* <Route path="/" element={<MyHomePage />} />
|
|
42
42
|
* <Route path="/custom" element={<CustomView />} />
|
|
43
43
|
* </RebaseLayout>
|
|
@@ -53,14 +53,8 @@ export function RebaseLayout(props: RebaseLayoutProps) {
|
|
|
53
53
|
} = props;
|
|
54
54
|
|
|
55
55
|
const adminModeController = useAdminModeController();
|
|
56
|
-
const ResolvedAppBar = useComponentOverride("Shell.AppBar", AppBar);
|
|
57
56
|
const ResolvedDrawer = useComponentOverride("Shell.Drawer", Drawer);
|
|
58
57
|
|
|
59
|
-
const ActiveAppBar = appBar ?? <ResolvedAppBar
|
|
60
|
-
includeLanguageToggle={false}
|
|
61
|
-
includeModeToggle={false}
|
|
62
|
-
includeUserMenu={false}
|
|
63
|
-
/>;
|
|
64
58
|
const ActiveDrawer = drawer ?? (
|
|
65
59
|
<ResolvedDrawer
|
|
66
60
|
title={title}
|
|
@@ -71,7 +65,7 @@ export function RebaseLayout(props: RebaseLayoutProps) {
|
|
|
71
65
|
return (
|
|
72
66
|
<Scaffold autoOpenDrawer={autoOpenDrawer}>
|
|
73
67
|
<AdminModeSyncer devViews={devViews}/>
|
|
74
|
-
{
|
|
68
|
+
{appBar}
|
|
75
69
|
{ActiveDrawer}
|
|
76
70
|
<Outlet/>
|
|
77
71
|
<SideDialogs/>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React, { useMemo, useRef, useEffect, lazy, Suspense } from "react";
|
|
1
|
+
import React, { useMemo, useRef, useEffect, useCallback, useContext, lazy, Suspense } from "react";
|
|
2
2
|
import {
|
|
3
3
|
useRebaseRegistry,
|
|
4
4
|
useRebaseContext,
|
|
@@ -9,11 +9,12 @@ import {
|
|
|
9
9
|
useRebaseClient,
|
|
10
10
|
useData,
|
|
11
11
|
useDataSources,
|
|
12
|
+
CollectionResolverRegistrationContext,
|
|
12
13
|
StudioBridgeRegistryProvider,
|
|
13
14
|
useBridgeRegistration,
|
|
14
15
|
CustomizationControllerContext,
|
|
15
16
|
RebaseDataContext
|
|
16
|
-
} from "@rebasepro/
|
|
17
|
+
} from "@rebasepro/app";
|
|
17
18
|
import { buildRoutedRebaseData, resolveDataSource } from "@rebasepro/common";
|
|
18
19
|
import { CircularProgressCenter } from "@rebasepro/ui";
|
|
19
20
|
import type { AppView, CollectionEditorOptions, EntityCustomView, EntityAction, CollectionConfig, RebasePlugin } from "@rebasepro/types";
|
|
@@ -103,6 +104,20 @@ export function RebaseNavigation({ children }: RebaseNavigationProps) {
|
|
|
103
104
|
const defaultData = useData();
|
|
104
105
|
const getCollectionRef = useRef(collectionRegistryController.getCollection);
|
|
105
106
|
getCollectionRef.current = collectionRegistryController.getCollection;
|
|
107
|
+
|
|
108
|
+
// Hand the data layer a way to read this registry. It was built by <Rebase>,
|
|
109
|
+
// above us, and needs a collection's primary keys to give its rows an
|
|
110
|
+
// address — rows themselves carry only columns.
|
|
111
|
+
//
|
|
112
|
+
// Registered during render, not in an effect: the views that fetch rows are
|
|
113
|
+
// below us, and their effects run before ours, so an effect here would bind
|
|
114
|
+
// after the first page had already been converted. The call only assigns a
|
|
115
|
+
// ref, so repeating it per render is free.
|
|
116
|
+
const registerCollectionResolver = useContext(CollectionResolverRegistrationContext);
|
|
117
|
+
const resolveCollection = useCallback(
|
|
118
|
+
(slug: string) => getCollectionRef.current(slug),
|
|
119
|
+
[]);
|
|
120
|
+
registerCollectionResolver(resolveCollection);
|
|
106
121
|
const routedData = useMemo(() => buildRoutedRebaseData({
|
|
107
122
|
defaultData,
|
|
108
123
|
sources: dataSources.sources,
|
|
@@ -220,7 +235,7 @@ export function RebaseNavigation({ children }: RebaseNavigationProps) {
|
|
|
220
235
|
|
|
221
236
|
// ── Merge CMS-registered entityViews/entityActions into the customization controller ──
|
|
222
237
|
// The <Rebase> component builds the customizationController from its own props,
|
|
223
|
-
// but entity views passed to <
|
|
238
|
+
// but entity views passed to <RebaseAdmin> are stored in the registry and not
|
|
224
239
|
// automatically merged. We re-provide an enriched controller here so that
|
|
225
240
|
// downstream consumers (EditViewBinding, side panels, etc.) can resolve
|
|
226
241
|
// string-keyed entity views like "blog_preview".
|
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
UIReferenceView,
|
|
8
8
|
NotFoundPage,
|
|
9
9
|
useComponentOverride
|
|
10
|
-
} from "@rebasepro/
|
|
10
|
+
} from "@rebasepro/app";
|
|
11
11
|
import { CircularProgressCenter } from "@rebasepro/ui";
|
|
12
12
|
|
|
13
13
|
import { ContentHomePage as DefaultHomePage } from "./HomePage/ContentHomePage";
|
|
@@ -17,8 +17,8 @@ import { CustomViewRoute } from "../routes/CustomViewRoute";
|
|
|
17
17
|
import { useNavigationStateController } from "../hooks/navigation/contexts/NavigationStateContext";
|
|
18
18
|
import { CollectionEditorDialogs } from "./CollectionEditorDialogs";
|
|
19
19
|
import { useEffect } from "react";
|
|
20
|
-
import { useTranslation } from "@rebasepro/
|
|
21
|
-
import { useBreadcrumbsController } from "../
|
|
20
|
+
import { useTranslation } from "@rebasepro/app";
|
|
21
|
+
import { useBreadcrumbsController } from "../hooks/useBreadcrumbsController";
|
|
22
22
|
|
|
23
23
|
function SettingsView() {
|
|
24
24
|
const { t } = useTranslation();
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React, { useMemo } from "react";
|
|
2
2
|
import {
|
|
3
3
|
useRebaseRegistry
|
|
4
|
-
} from "@rebasepro/
|
|
4
|
+
} from "@rebasepro/app";
|
|
5
5
|
import { ErrorBoundary } from "@rebasepro/ui";
|
|
6
6
|
|
|
7
7
|
import { RebaseAuthGate } from "./RebaseAuthGate";
|
|
@@ -11,6 +11,7 @@ import { RebaseRouteDefs } from "./RebaseRouteDefs";
|
|
|
11
11
|
|
|
12
12
|
export interface RebaseShellProps {
|
|
13
13
|
title?: string;
|
|
14
|
+
/** Top bar. Only rendered if provided — pass `<AppBar/>` for the default one. */
|
|
14
15
|
appBar?: React.ReactNode;
|
|
15
16
|
drawer?: React.ReactNode;
|
|
16
17
|
autoOpenDrawer?: boolean;
|
|
@@ -14,16 +14,17 @@ import {
|
|
|
14
14
|
useDataTableController,
|
|
15
15
|
useLargeLayout,
|
|
16
16
|
usePermissions
|
|
17
|
-
} from "@rebasepro/
|
|
18
|
-
import { ErrorView } from "@rebasepro/
|
|
17
|
+
} from "@rebasepro/app";
|
|
18
|
+
import { ErrorView } from "@rebasepro/app";
|
|
19
19
|
import { Button, DialogActions, PlusIcon, Typography } from "@rebasepro/ui";
|
|
20
|
-
import { IconForView } from "@rebasepro/
|
|
20
|
+
import { IconForView } from "@rebasepro/app";
|
|
21
21
|
import { useSelectionController } from "../CollectionViewBinding/useSelectionController";
|
|
22
22
|
|
|
23
|
-
import { useColumnIds } from "@rebasepro/
|
|
23
|
+
import { useColumnIds } from "@rebasepro/app";
|
|
24
24
|
import { useSideDialogContext } from "../SideDialogs";
|
|
25
|
-
import { useAnalyticsController } from "@rebasepro/
|
|
26
|
-
import { useUrlController
|
|
25
|
+
import { useAnalyticsController } from "@rebasepro/app";
|
|
26
|
+
import { useUrlController } from "../../hooks/navigation/contexts/UrlContext";
|
|
27
|
+
import { useSidePanel } from "../../hooks/useSidePanel";
|
|
27
28
|
|
|
28
29
|
/**
|
|
29
30
|
* @group Components
|
|
@@ -7,7 +7,7 @@ import type { PreviewSize } from "../types/components/PropertyPreviewProps";
|
|
|
7
7
|
import { getReferenceFrom } from "@rebasepro/common";
|
|
8
8
|
import { ReferencePreview } from "../preview";
|
|
9
9
|
import { Button, cls } from "@rebasepro/ui";
|
|
10
|
-
import { useCollectionRegistryController } from "../
|
|
10
|
+
import { useCollectionRegistryController } from "../hooks/navigation/contexts/CollectionRegistryContext";
|
|
11
11
|
|
|
12
12
|
export type ReferenceWidgetProps<M extends Record<string, unknown>> = {
|
|
13
13
|
name?: string,
|
|
@@ -26,7 +26,7 @@ import { useCallback, useEffect, useRef, useState } from "react";
|
|
|
26
26
|
import { Command as CommandPrimitive } from "cmdk";
|
|
27
27
|
import { Entity, EntityRelation, FilterValues, Relation, getCollectionDataPath } from "@rebasepro/types";
|
|
28
28
|
import { EntityPreviewBindingData } from "./EntityPreviewBinding";
|
|
29
|
-
import { useData, useRelationSelector } from "@rebasepro/
|
|
29
|
+
import { useData, useRelationSelector } from "@rebasepro/app";
|
|
30
30
|
import { useSidePanel } from "../hooks/useSidePanel";
|
|
31
31
|
import { normalizeToEntityRelation } from "@rebasepro/common";
|
|
32
32
|
import { EmptyValue } from "../preview";
|
|
@@ -10,8 +10,8 @@ import {
|
|
|
10
10
|
SearchBar,
|
|
11
11
|
Tooltip
|
|
12
12
|
} from "@rebasepro/ui";
|
|
13
|
-
import { iconsSearch } from "@rebasepro/
|
|
14
|
-
import { useTranslation } from "@rebasepro/
|
|
13
|
+
import { iconsSearch } from "@rebasepro/app";
|
|
14
|
+
import { useTranslation } from "@rebasepro/app";
|
|
15
15
|
|
|
16
16
|
const UPDATE_SEARCH_INDEX_WAIT_MS = 220;
|
|
17
17
|
|
|
@@ -3,11 +3,11 @@ import type { Property, WhereFilterOp } from "@rebasepro/types";
|
|
|
3
3
|
import React, { useCallback, useEffect, useMemo, useRef } from "react";
|
|
4
4
|
import { CollectionSize, Entity, EntityTableController, FilterValues, SelectedCellProps } from "@rebasepro/types";
|
|
5
5
|
import { CellRendererParams, TableView, VirtualTableColumn, VirtualTableFilterValues, OnRowClickParams } from "@rebasepro/ui";
|
|
6
|
-
import { DEFAULT_PAGE_SIZE, DataCollectionTableController, OnCellValueChange, OnColumnResizeParams } from "@rebasepro/
|
|
6
|
+
import { DEFAULT_PAGE_SIZE, DataCollectionTableController, OnCellValueChange, OnColumnResizeParams } from "@rebasepro/app";
|
|
7
7
|
import { FilterFormFieldProps } from "@rebasepro/ui";
|
|
8
8
|
import { useOutsideAlerter } from "@rebasepro/ui";
|
|
9
9
|
import { SelectableTableContext } from "./SelectableTableContext";
|
|
10
|
-
import { getRowHeight } from "@rebasepro/
|
|
10
|
+
import { getRowHeight } from "@rebasepro/app";
|
|
11
11
|
import { FilterFieldBinding } from "./filters/FilterFieldBinding";
|
|
12
12
|
|
|
13
13
|
export type SelectableTableProps<M extends Record<string, unknown>> = {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React, { useContext } from "react";
|
|
2
|
-
import { DataCollectionTableController } from "@rebasepro/
|
|
2
|
+
import { DataCollectionTableController } from "@rebasepro/app";
|
|
3
3
|
|
|
4
4
|
export const SelectableTableContext = React.createContext<DataCollectionTableController<Record<string, unknown>>>(null! as DataCollectionTableController<Record<string, unknown>>);
|
|
5
5
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { VirtualTableWhereFilterOp } from "@rebasepro/ui";
|
|
3
3
|
import { BooleanSwitchWithLabel } from "@rebasepro/ui";
|
|
4
|
-
import { useTranslation } from "@rebasepro/
|
|
4
|
+
import { useTranslation } from "@rebasepro/app";
|
|
5
5
|
|
|
6
6
|
interface BooleanFieldProps {
|
|
7
7
|
name: string,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React, { useState } from "react";
|
|
2
2
|
import { VirtualTableWhereFilterOp } from "@rebasepro/ui";
|
|
3
3
|
import { DateTimeField, Select, SelectItem } from "@rebasepro/ui";
|
|
4
|
-
import { useCustomizationController } from "@rebasepro/
|
|
4
|
+
import { useCustomizationController } from "@rebasepro/app";
|
|
5
5
|
|
|
6
6
|
interface DateTimeFilterFieldProps {
|
|
7
7
|
name: string,
|
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
WhereFilterOp
|
|
9
9
|
} from "@rebasepro/types";
|
|
10
10
|
import { enumToObjectEntries, resolveFilterOperators } from "@rebasepro/common";
|
|
11
|
-
import { useCollectionScope, useComponentOverride, useResolvedComponent } from "@rebasepro/
|
|
11
|
+
import { useCollectionScope, useComponentOverride, useResolvedComponent } from "@rebasepro/app";
|
|
12
12
|
import { StringNumberFilterField } from "./StringNumberFilterField";
|
|
13
13
|
import { BooleanFilterField } from "./BooleanFilterField";
|
|
14
14
|
import { DateTimeFilterField } from "./DateTimeFilterField";
|
|
@@ -6,8 +6,8 @@ import { Entity, EntityReference } from "@rebasepro/types";
|
|
|
6
6
|
import { ReferencePreview } from "../../../preview";
|
|
7
7
|
import { Button, Checkbox, Label, Select, SelectItem } from "@rebasepro/ui";
|
|
8
8
|
import { getReferenceFrom } from "@rebasepro/common";
|
|
9
|
-
import { useTranslation } from "@rebasepro/
|
|
10
|
-
import { useCollectionRegistryController } from "../../../
|
|
9
|
+
import { useTranslation } from "@rebasepro/app";
|
|
10
|
+
import { useCollectionRegistryController } from "../../../hooks/navigation/contexts/CollectionRegistryContext";
|
|
11
11
|
|
|
12
12
|
interface ReferenceFilterFieldProps {
|
|
13
13
|
name: string,
|
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
XIcon
|
|
12
12
|
} from "@rebasepro/ui";
|
|
13
13
|
import { EnumValueConfig } from "@rebasepro/types";
|
|
14
|
-
import { useTranslation } from "@rebasepro/
|
|
14
|
+
import { useTranslation } from "@rebasepro/app";
|
|
15
15
|
|
|
16
16
|
interface StringNumberFilterFieldProps {
|
|
17
17
|
name: string,
|
|
@@ -2,7 +2,7 @@ import type { SideDialogPanelProps } from "../hooks/useSideDialogsController";
|
|
|
2
2
|
import React, { useCallback, useContext, useEffect, useState, useMemo } from "react";
|
|
3
3
|
import { useSideDialogsController } from "../hooks";
|
|
4
4
|
import { Sheet, Dialog } from "@rebasepro/ui";
|
|
5
|
-
import { useUnsavedChangesDialog, UnsavedChangesDialog } from "@rebasepro/
|
|
5
|
+
import { useUnsavedChangesDialog, UnsavedChangesDialog } from "@rebasepro/app";
|
|
6
6
|
import { ErrorBoundary } from "@rebasepro/ui";
|
|
7
7
|
import type { SidePanelBindingProps } from "@rebasepro/types";
|
|
8
8
|
|
|
@@ -9,9 +9,10 @@ import { EditViewBinding } from "./EditViewBinding";
|
|
|
9
9
|
import { DetailViewBinding } from "./DetailViewBinding";
|
|
10
10
|
import { useSideDialogContext } from "./SideDialogs";
|
|
11
11
|
import { useNavigate } from "react-router-dom";
|
|
12
|
-
import { saveEntityToMemoryCache, useComponentOverride } from "@rebasepro/
|
|
13
|
-
import { useCollectionRegistryController
|
|
14
|
-
import {
|
|
12
|
+
import { saveEntityToMemoryCache, useComponentOverride } from "@rebasepro/app";
|
|
13
|
+
import { useCollectionRegistryController } from "../hooks/navigation/contexts/CollectionRegistryContext";
|
|
14
|
+
import { useSidePanel } from "../hooks/useSidePanel";
|
|
15
|
+
import { useUrlController } from "../hooks/navigation/contexts/UrlContext";
|
|
15
16
|
import { resolveDefaultSelectedView } from "@rebasepro/common";
|
|
16
17
|
|
|
17
18
|
/**
|
|
@@ -61,8 +62,10 @@ export function SidePanelBinding(props: SidePanelBindingProps) {
|
|
|
61
62
|
if (props.onUpdate) {
|
|
62
63
|
props.onUpdate(params);
|
|
63
64
|
}
|
|
64
|
-
|
|
65
|
+
setEditInDialog(false);
|
|
65
66
|
if (params.status !== "existing") {
|
|
67
|
+
// A newly created entity replaces the panel with its own address,
|
|
68
|
+
// which already leaves the edit view behind.
|
|
66
69
|
sidePanelController.replace({
|
|
67
70
|
path: params.path,
|
|
68
71
|
entityId: params.entityId,
|
|
@@ -70,6 +73,8 @@ export function SidePanelBinding(props: SidePanelBindingProps) {
|
|
|
70
73
|
updateUrl: collection?.openEntityMode !== "dialog",
|
|
71
74
|
collection: params.collection
|
|
72
75
|
});
|
|
76
|
+
} else {
|
|
77
|
+
closeEditView();
|
|
73
78
|
}
|
|
74
79
|
|
|
75
80
|
if (sideDialogsController.pendingClose) {
|
|
@@ -89,13 +94,46 @@ export function SidePanelBinding(props: SidePanelBindingProps) {
|
|
|
89
94
|
|
|
90
95
|
const collection = collectionRegistryController.getCollection(path) ?? props.collection;
|
|
91
96
|
|
|
92
|
-
|
|
97
|
+
// Dialog mode deliberately stays out of the URL, so it is the only case that
|
|
98
|
+
// needs local edit state. Everywhere else `edit` is a path segment, which
|
|
99
|
+
// keeps refresh and the back button working the same way they do in split.
|
|
100
|
+
const isDialogMode = collection?.openEntityMode === "dialog";
|
|
101
|
+
const [editInDialog, setEditInDialog] = useState(false);
|
|
102
|
+
const showEditInPanel = isDialogMode ? editInDialog : selectedTab === "edit";
|
|
93
103
|
const isDetailMode = collection?.defaultEntityAction === "view" && !showEditInPanel && Boolean(entityId);
|
|
94
104
|
|
|
95
105
|
// Reset edit mode when switching entities
|
|
96
106
|
useEffect(() => {
|
|
97
|
-
|
|
98
|
-
}, [entityId
|
|
107
|
+
setEditInDialog(false);
|
|
108
|
+
}, [entityId]);
|
|
109
|
+
|
|
110
|
+
const openEditView = useCallback(() => {
|
|
111
|
+
if (isDialogMode || !entityId) {
|
|
112
|
+
setEditInDialog(true);
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
sidePanelController.replace({
|
|
116
|
+
path,
|
|
117
|
+
entityId,
|
|
118
|
+
selectedTab: "edit",
|
|
119
|
+
updateUrl: true,
|
|
120
|
+
collection
|
|
121
|
+
});
|
|
122
|
+
}, [isDialogMode, entityId, path, collection, sidePanelController]);
|
|
123
|
+
|
|
124
|
+
const closeEditView = useCallback(() => {
|
|
125
|
+
if (isDialogMode || !entityId) {
|
|
126
|
+
setEditInDialog(false);
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
sidePanelController.replace({
|
|
130
|
+
path,
|
|
131
|
+
entityId,
|
|
132
|
+
selectedTab: undefined,
|
|
133
|
+
updateUrl: true,
|
|
134
|
+
collection
|
|
135
|
+
});
|
|
136
|
+
}, [isDialogMode, entityId, path, collection, sidePanelController]);
|
|
99
137
|
|
|
100
138
|
// One-time correction: when the side panel opens without the correct
|
|
101
139
|
// selectedTab but the resolved collection (from the registry) has a
|
|
@@ -154,7 +192,7 @@ entityId }
|
|
|
154
192
|
entityId={entityId!}
|
|
155
193
|
parentCollectionSlugs={parentCollectionSlugs}
|
|
156
194
|
parentEntityIds={parentEntityIds}
|
|
157
|
-
onEditClick={
|
|
195
|
+
onEditClick={openEditView}
|
|
158
196
|
barActions={({
|
|
159
197
|
status,
|
|
160
198
|
values
|
|
@@ -203,7 +241,7 @@ entityId }
|
|
|
203
241
|
parentCollectionSlugs={parentCollectionSlugs} parentEntityIds={parentEntityIds}
|
|
204
242
|
onValuesModified={onValuesModified}
|
|
205
243
|
onSaved={onUpdate}
|
|
206
|
-
navigateBack={
|
|
244
|
+
navigateBack={closeEditView}
|
|
207
245
|
barActions={({
|
|
208
246
|
status,
|
|
209
247
|
values
|
|
@@ -6,13 +6,14 @@ import { SidePanelControllerContext } from "../hooks/useSidePanel";
|
|
|
6
6
|
import { SideDialogsControllerContext } from "../contexts/SideDialogsControllerContext";
|
|
7
7
|
import { BreadcrumbsProvider } from "../contexts/BreacrumbsContext";
|
|
8
8
|
import { useBreadcrumbsController } from "../hooks/useBreadcrumbsController";
|
|
9
|
-
import { useCollectionRegistryController
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
9
|
+
import { useCollectionRegistryController } from "../hooks/navigation/contexts/CollectionRegistryContext";
|
|
10
|
+
import { useUrlController } from "../hooks/navigation/contexts/UrlContext";
|
|
11
|
+
import { useNavigationStateController } from "../hooks/navigation/contexts/NavigationStateContext";
|
|
12
|
+
import { useAuthController, useBridgeRegistration, NavigationBlockerProvider } from "@rebasepro/app";
|
|
12
13
|
|
|
13
14
|
/**
|
|
14
15
|
* Provider that builds the SidePanelController and makes it available
|
|
15
|
-
* via the SidePanelControllerContext from @rebasepro/
|
|
16
|
+
* via the SidePanelControllerContext from @rebasepro/app.
|
|
16
17
|
*
|
|
17
18
|
* After the CMS extraction refactor, `useBuildSidePanel` lives
|
|
18
19
|
* in the CMS package while the context it feeds into lives in core.
|
|
@@ -54,14 +55,16 @@ export function SidePanelProvider({ children }: { children: React.ReactNode }) {
|
|
|
54
55
|
);
|
|
55
56
|
|
|
56
57
|
return (
|
|
57
|
-
<
|
|
58
|
-
<
|
|
59
|
-
<
|
|
60
|
-
<
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
58
|
+
<NavigationBlockerProvider>
|
|
59
|
+
<BreadcrumbsProvider>
|
|
60
|
+
<SideDialogsControllerContext.Provider value={sideDialogsController}>
|
|
61
|
+
<SidePanelControllerContext.Provider value={sidePanelController}>
|
|
62
|
+
<BridgeAutoRegistrar sidePanelController={sidePanelController}/>
|
|
63
|
+
{children}
|
|
64
|
+
</SidePanelControllerContext.Provider>
|
|
65
|
+
</SideDialogsControllerContext.Provider>
|
|
66
|
+
</BreadcrumbsProvider>
|
|
67
|
+
</NavigationBlockerProvider>
|
|
65
68
|
);
|
|
66
69
|
}
|
|
67
70
|
|
|
@@ -21,7 +21,7 @@ import * as React from "react";
|
|
|
21
21
|
import { useCallback, useEffect, useRef, useState } from "react";
|
|
22
22
|
import { Command as CommandPrimitive } from "cmdk";
|
|
23
23
|
import { User } from "@rebasepro/types";
|
|
24
|
-
import { useRebaseClient, useAuthController, UserDisplay } from "@rebasepro/
|
|
24
|
+
import { useRebaseClient, useAuthController, UserDisplay } from "@rebasepro/app";
|
|
25
25
|
import { EmptyValue } from "../preview";
|
|
26
26
|
|
|
27
27
|
interface UserSelectorItem {
|
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
Tooltip,
|
|
14
14
|
Typography
|
|
15
15
|
} from "@rebasepro/ui";
|
|
16
|
-
import { useSnackbarController, useTranslation } from "@rebasepro/
|
|
16
|
+
import { useSnackbarController, useTranslation } from "@rebasepro/app";
|
|
17
17
|
import { UserCreationResult } from "@rebasepro/types";
|
|
18
18
|
|
|
19
19
|
export function CreationResultDialog({
|
|
@@ -90,8 +90,11 @@ export function CreationResultDialog({
|
|
|
90
90
|
<div className="flex flex-col gap-4 py-2">
|
|
91
91
|
<Alert color="warning">
|
|
92
92
|
<Typography variant="body2">
|
|
93
|
-
{
|
|
94
|
-
"
|
|
93
|
+
{result.emailDeliveryFailed
|
|
94
|
+
? (t("temporary_password_email_failed_description") ??
|
|
95
|
+
"The email could not be delivered. Share this temporary password with the user securely. It will not be shown again.")
|
|
96
|
+
: (t("temporary_password_description") ??
|
|
97
|
+
"Email is not configured. Share this temporary password with the user securely. It will not be shown again.")}
|
|
95
98
|
</Typography>
|
|
96
99
|
</Alert>
|
|
97
100
|
|
|
@@ -3,7 +3,7 @@ import { cls, defaultBorderMixin, IconButton, Sheet, Tooltip } from "@rebasepro/
|
|
|
3
3
|
import { ChevronLeftIcon, ErrorBoundary, MenuIcon } from "@rebasepro/ui";
|
|
4
4
|
import { deepEqual as equal } from "fast-equals"
|
|
5
5
|
|
|
6
|
-
import { useLargeLayout, useAdminModeController, useTranslation } from "@rebasepro/
|
|
6
|
+
import { useLargeLayout, useAdminModeController, useTranslation } from "@rebasepro/app";
|
|
7
7
|
import { AppContext } from "./useApp";
|
|
8
8
|
|
|
9
9
|
export const DRAWER_WIDTH = 280;
|
|
@@ -141,8 +141,12 @@ export const Scaffold = React.memo<PropsWithChildren<ScaffoldProps>>(
|
|
|
141
141
|
|
|
142
142
|
<div
|
|
143
143
|
className={cls(defaultBorderMixin, "bg-surface-50 dark:bg-surface-800", "grow overflow-auto m-0", {
|
|
144
|
-
"lg:mt-4": !hasAppBar,
|
|
145
144
|
"mt-1 lg:m-0 lg:mx-2 lg:mb-2 lg:rounded-lg lg:border-t lg:border-x lg:border-solid": padding,
|
|
145
|
+
// No app bar means no DrawerHeader spacer above, so inset the
|
|
146
|
+
// panel by the same amount as its sides and bottom.
|
|
147
|
+
// Must come after the padding classes, which reset lg margins.
|
|
148
|
+
"lg:mt-2": !hasAppBar && padding,
|
|
149
|
+
"lg:mt-4": !hasAppBar && !padding,
|
|
146
150
|
"border-t": hasAppBar && !padding
|
|
147
151
|
})}>
|
|
148
152
|
|