@rebasepro/cms 0.17.3 → 0.18.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -0
- package/dist/{CollectionEditorDialog-B-akreOU.js → CollectionEditorDialog-BeX4b92r.js} +13 -7
- package/dist/{CollectionEditorDialog-B-akreOU.js.map → CollectionEditorDialog-BeX4b92r.js.map} +1 -1
- package/dist/{PropertyEditView-CiY84wkR.js → PropertyEditView-C7thfj4L.js} +3 -3
- package/dist/{PropertyEditView-CiY84wkR.js.map → PropertyEditView-C7thfj4L.js.map} +1 -1
- package/dist/{RouterCollectionsStudioView-DkAWda4N.js → RouterCollectionsStudioView-BtjzvB6E.js} +4 -4
- package/dist/{RouterCollectionsStudioView-DkAWda4N.js.map → RouterCollectionsStudioView-BtjzvB6E.js.map} +1 -1
- package/dist/{SchemaChangeDialog-DceT8QFX.js → SchemaChangeDialog-CkqK6KOC.js} +4 -2
- package/dist/{SchemaChangeDialog-DceT8QFX.js.map → SchemaChangeDialog-CkqK6KOC.js.map} +1 -1
- package/dist/collection_editor/api/generateCollectionApi.d.ts +1 -2
- package/dist/collection_editor_ui.d.ts +2 -0
- package/dist/collection_editor_ui.js +6 -5
- package/dist/collection_editor_ui.js.map +1 -1
- package/dist/components/DeleteEntityDialog.d.ts +2 -3
- package/dist/components/RebaseLayout.d.ts +11 -4
- package/dist/components/field_configs.d.ts +1 -1
- package/dist/editor/sanitize-html.d.ts +15 -0
- package/dist/editor.js +195 -10
- package/dist/editor.js.map +1 -1
- package/dist/{export-Ben8E355.js → export--arni_VY.js} +2 -2
- package/dist/{export-Ben8E355.js.map → export--arni_VY.js.map} +1 -1
- package/dist/form/components/LabelWithIcon.d.ts +10 -0
- package/dist/{history-DIEVd26f.js → history-C2TpoQwi.js} +2 -2
- package/dist/{history-DIEVd26f.js.map → history-C2TpoQwi.js.map} +1 -1
- package/dist/hooks/navigation/useBuildNavigationStateController.d.ts +1 -1
- package/dist/hooks/navigation/useResolvedViews.d.ts +1 -1
- package/dist/hooks/navigation/useTopLevelNavigation.d.ts +1 -1
- package/dist/{import-D25x7ko-.js → import-DTkXNoBg.js} +2 -2
- package/dist/{import-D25x7ko-.js.map → import-DTkXNoBg.js.map} +1 -1
- package/dist/index.js +78 -33
- package/dist/index.js.map +1 -1
- package/dist/util/propertyConfigMapper.d.ts +1 -1
- package/dist/util-CfLFggP7.js +57 -0
- package/dist/util-CfLFggP7.js.map +1 -0
- package/dist/{util-DVqnqlLn.js → util-DE1WQW6h.js} +134 -112
- package/dist/util-DE1WQW6h.js.map +1 -0
- package/package.json +42 -34
- package/dist/util-DVqnqlLn.js.map +0 -1
- package/src/collection_editor/CollectionEditorDialogsContext.tsx +0 -25
- package/src/collection_editor/ConfigControllerProvider.tsx +0 -395
- package/src/collection_editor/_cms_internals.ts +0 -41
- package/src/collection_editor/api/generateCollectionApi.ts +0 -126
- package/src/collection_editor/api/index.ts +0 -1
- package/src/collection_editor/extensibility_types.ts +0 -168
- package/src/collection_editor/index.ts +0 -108
- package/src/collection_editor/liveSchemaClient.ts +0 -285
- package/src/collection_editor/relation_kinds.ts +0 -44
- package/src/collection_editor/serializable_types.ts +0 -535
- package/src/collection_editor/serializable_utils.ts +0 -729
- package/src/collection_editor/types/collection_editor_controller.tsx +0 -62
- package/src/collection_editor/types/collection_inference.ts +0 -18
- package/src/collection_editor/types/config_controller.tsx +0 -121
- package/src/collection_editor/ui/AddKanbanColumnAction.tsx +0 -199
- package/src/collection_editor/ui/CollectionViewHeaderAction.tsx +0 -51
- package/src/collection_editor/ui/EditorCollectionAction.tsx +0 -54
- package/src/collection_editor/ui/EditorCollectionActionStart.tsx +0 -90
- package/src/collection_editor/ui/EditorEntityAction.tsx +0 -50
- package/src/collection_editor/ui/HomePageEditorCollectionAction.tsx +0 -114
- package/src/collection_editor/ui/KanbanSetupAction.tsx +0 -43
- package/src/collection_editor/ui/MissingReferenceWidget.tsx +0 -35
- package/src/collection_editor/ui/NewCollectionButton.tsx +0 -27
- package/src/collection_editor/ui/NewCollectionCard.tsx +0 -48
- package/src/collection_editor/ui/PropertyAddColumnComponent.tsx +0 -49
- package/src/collection_editor/ui/collection_editor/AICollectionGeneratorPopover.tsx +0 -260
- package/src/collection_editor/ui/collection_editor/AIModifiedPathsContext.tsx +0 -90
- package/src/collection_editor/ui/collection_editor/CollectionDetailsForm.tsx +0 -388
- package/src/collection_editor/ui/collection_editor/CollectionEditorDialog.tsx +0 -1098
- package/src/collection_editor/ui/collection_editor/CollectionEditorWelcomeView.tsx +0 -301
- package/src/collection_editor/ui/collection_editor/CollectionJsonImportDialog.tsx +0 -172
- package/src/collection_editor/ui/collection_editor/CollectionPropertiesEditorForm.tsx +0 -620
- package/src/collection_editor/ui/collection_editor/CollectionRLSTab.tsx +0 -530
- package/src/collection_editor/ui/collection_editor/CollectionRelationsTab.tsx +0 -462
- package/src/collection_editor/ui/collection_editor/CollectionStudioView.tsx +0 -104
- package/src/collection_editor/ui/collection_editor/CollectionYupValidation.tsx +0 -9
- package/src/collection_editor/ui/collection_editor/CollectionsStudioView.tsx +0 -199
- package/src/collection_editor/ui/collection_editor/DisplaySettingsForm.tsx +0 -315
- package/src/collection_editor/ui/collection_editor/EntityActionsEditTab.tsx +0 -164
- package/src/collection_editor/ui/collection_editor/EntityActionsSelectDialog.tsx +0 -40
- package/src/collection_editor/ui/collection_editor/EntityCustomViewsSelectDialog.tsx +0 -39
- package/src/collection_editor/ui/collection_editor/EnumForm.tsx +0 -373
- package/src/collection_editor/ui/collection_editor/GeneralSettingsForm.tsx +0 -288
- package/src/collection_editor/ui/collection_editor/GetCodeDialog.tsx +0 -141
- package/src/collection_editor/ui/collection_editor/KanbanConfigSection.tsx +0 -194
- package/src/collection_editor/ui/collection_editor/LayoutModeSwitch.tsx +0 -53
- package/src/collection_editor/ui/collection_editor/PropertyEditView.tsx +0 -980
- package/src/collection_editor/ui/collection_editor/PropertyFieldPreview.tsx +0 -164
- package/src/collection_editor/ui/collection_editor/PropertyTree.tsx +0 -364
- package/src/collection_editor/ui/collection_editor/RouterCollectionStudioView.tsx +0 -44
- package/src/collection_editor/ui/collection_editor/RouterCollectionsStudioView.tsx +0 -41
- package/src/collection_editor/ui/collection_editor/SchemaChangeDialog.tsx +0 -470
- package/src/collection_editor/ui/collection_editor/SubcollectionsEditTab.tsx +0 -256
- package/src/collection_editor/ui/collection_editor/SwitchControl.tsx +0 -39
- package/src/collection_editor/ui/collection_editor/ViewModeSwitch.tsx +0 -68
- package/src/collection_editor/ui/collection_editor/import/CollectionEditorImportDataPreview.tsx +0 -67
- package/src/collection_editor/ui/collection_editor/import/CollectionEditorImportMapping.tsx +0 -296
- package/src/collection_editor/ui/collection_editor/import/clean_import_data.ts +0 -57
- package/src/collection_editor/ui/collection_editor/properties/BlockPropertyField.tsx +0 -147
- package/src/collection_editor/ui/collection_editor/properties/BooleanPropertyField.tsx +0 -41
- package/src/collection_editor/ui/collection_editor/properties/CommonPropertyFields.tsx +0 -113
- package/src/collection_editor/ui/collection_editor/properties/DateTimePropertyField.tsx +0 -250
- package/src/collection_editor/ui/collection_editor/properties/EnumPropertyField.tsx +0 -126
- package/src/collection_editor/ui/collection_editor/properties/KeyValuePropertyField.tsx +0 -20
- package/src/collection_editor/ui/collection_editor/properties/MapPropertyField.tsx +0 -153
- package/src/collection_editor/ui/collection_editor/properties/MarkdownPropertyField.tsx +0 -217
- package/src/collection_editor/ui/collection_editor/properties/NumberPropertyField.tsx +0 -117
- package/src/collection_editor/ui/collection_editor/properties/ReferencePropertyField.tsx +0 -129
- package/src/collection_editor/ui/collection_editor/properties/RelationPropertyField.tsx +0 -335
- package/src/collection_editor/ui/collection_editor/properties/RepeatPropertyField.tsx +0 -107
- package/src/collection_editor/ui/collection_editor/properties/StoragePropertyField.tsx +0 -403
- package/src/collection_editor/ui/collection_editor/properties/StringPropertyField.tsx +0 -148
- package/src/collection_editor/ui/collection_editor/properties/UrlPropertyField.tsx +0 -91
- package/src/collection_editor/ui/collection_editor/properties/VectorPropertyField.tsx +0 -34
- package/src/collection_editor/ui/collection_editor/properties/advanced/AdvancedPropertyValidation.tsx +0 -49
- package/src/collection_editor/ui/collection_editor/properties/conditions/ConditionsEditor.tsx +0 -925
- package/src/collection_editor/ui/collection_editor/properties/conditions/ConditionsPanel.tsx +0 -28
- package/src/collection_editor/ui/collection_editor/properties/conditions/EnumConditionsEditor.tsx +0 -626
- package/src/collection_editor/ui/collection_editor/properties/conditions/index.ts +0 -6
- package/src/collection_editor/ui/collection_editor/properties/conditions/property_paths.ts +0 -93
- package/src/collection_editor/ui/collection_editor/properties/validation/ArrayPropertyValidation.tsx +0 -52
- package/src/collection_editor/ui/collection_editor/properties/validation/GeneralPropertyValidation.tsx +0 -63
- package/src/collection_editor/ui/collection_editor/properties/validation/NumberPropertyValidation.tsx +0 -114
- package/src/collection_editor/ui/collection_editor/properties/validation/StringPropertyValidation.tsx +0 -154
- package/src/collection_editor/ui/collection_editor/properties/validation/ValidationPanel.tsx +0 -28
- package/src/collection_editor/ui/collection_editor/templates/blog_template.ts +0 -112
- package/src/collection_editor/ui/collection_editor/templates/pages_template.ts +0 -183
- package/src/collection_editor/ui/collection_editor/templates/products_template.ts +0 -88
- package/src/collection_editor/ui/collection_editor/templates/users_template.ts +0 -42
- package/src/collection_editor/ui/collection_editor/util.ts +0 -28
- package/src/collection_editor/ui/collection_editor/utils/strings.ts +0 -1
- package/src/collection_editor/ui/collection_editor/utils/supported_fields.tsx +0 -39
- package/src/collection_editor/ui/collection_editor/utils/update_property_for_widget.ts +0 -276
- package/src/collection_editor/useCollectionEditorController.tsx +0 -9
- package/src/collection_editor/useCollectionsConfigController.tsx +0 -9
- package/src/collection_editor/useJsonCollectionsConfigController.tsx +0 -297
- package/src/collection_editor/useLiveSchemaEditing.tsx +0 -315
- package/src/collection_editor/useLocalCollectionsConfigController.tsx +0 -341
- package/src/collection_editor/useSafeSnackbarController.ts +0 -9
- package/src/collection_editor/validateCollectionJson.ts +0 -440
- package/src/collection_editor_ui.ts +0 -21
- package/src/components/AdditionalFieldValue.tsx +0 -68
- package/src/components/AdminModeSyncer.tsx +0 -56
- package/src/components/ArrayContainer.tsx +0 -542
- package/src/components/ClearFilterSortButton.tsx +0 -56
- package/src/components/CollectionEditorDialogs.tsx +0 -69
- package/src/components/CollectionPanel.tsx +0 -179
- package/src/components/CollectionTableBinding/CollectionRowActions.tsx +0 -244
- package/src/components/CollectionTableBinding/CollectionTableBinding.tsx +0 -394
- package/src/components/CollectionTableBinding/CollectionTableBindingProps.tsx +0 -172
- package/src/components/CollectionTableBinding/PropertyTableCell.tsx +0 -350
- package/src/components/CollectionTableBinding/column_utils.tsx +0 -155
- package/src/components/CollectionTableBinding/fields/TableMultipleRelationField.tsx +0 -131
- package/src/components/CollectionTableBinding/fields/TableReferenceField.tsx +0 -193
- package/src/components/CollectionTableBinding/fields/TableRelationField.tsx +0 -192
- package/src/components/CollectionTableBinding/fields/TableRelationSelectorField.tsx +0 -42
- package/src/components/CollectionTableBinding/fields/TableStorageUpload.tsx +0 -324
- package/src/components/CollectionTableBinding/fields/VirtualTableSelect.tsx +0 -132
- package/src/components/CollectionTableBinding/fields/VirtualTableUserSelect.tsx +0 -41
- package/src/components/CollectionTableBinding/index.tsx +0 -14
- package/src/components/CollectionTableBinding/internal/CollectionTableToolbar.tsx +0 -96
- package/src/components/CollectionTableBinding/internal/EntityTableCell.tsx +0 -309
- package/src/components/CollectionTableBinding/internal/EntityTableCellActions.tsx +0 -80
- package/src/components/CollectionTableBinding/internal/common.tsx +0 -74
- package/src/components/CollectionTableBinding/internal/popup_field/PopupFormField.tsx +0 -422
- package/src/components/CollectionTableBinding/internal/popup_field/useDraggable.tsx +0 -99
- package/src/components/CollectionTableBinding/internal/popup_field/useWindowSize.tsx +0 -22
- package/src/components/CollectionTableBinding/table_bindings.tsx +0 -350
- package/src/components/CollectionViewBinding/BoardCardBinding.tsx +0 -263
- package/src/components/CollectionViewBinding/CollectionBoardViewBinding.tsx +0 -662
- package/src/components/CollectionViewBinding/CollectionCardViewBinding.tsx +0 -159
- package/src/components/CollectionViewBinding/CollectionListViewBinding.tsx +0 -1430
- package/src/components/CollectionViewBinding/CollectionViewActions.tsx +0 -227
- package/src/components/CollectionViewBinding/CollectionViewBinding.tsx +0 -1603
- package/src/components/CollectionViewBinding/CollectionViewStartActions.tsx +0 -240
- package/src/components/CollectionViewBinding/EntityCardBinding.tsx +0 -239
- package/src/components/CollectionViewBinding/FilterPresetsButton.tsx +0 -298
- package/src/components/CollectionViewBinding/FiltersDialog.tsx +0 -218
- package/src/components/CollectionViewBinding/SearchExplanation.tsx +0 -106
- package/src/components/CollectionViewBinding/SearchHighlight.tsx +0 -311
- package/src/components/CollectionViewBinding/SlotValue.tsx +0 -156
- package/src/components/CollectionViewBinding/SortButton.tsx +0 -354
- package/src/components/CollectionViewBinding/SplitListCloseButton.tsx +0 -49
- package/src/components/CollectionViewBinding/SplitListShowButton.tsx +0 -28
- package/src/components/CollectionViewBinding/SplitListView.tsx +0 -488
- package/src/components/CollectionViewBinding/SplitViewContext.tsx +0 -34
- package/src/components/CollectionViewBinding/ViewModeToggle.tsx +0 -250
- package/src/components/CollectionViewBinding/hooks/useCollectionInlineEditor.ts +0 -81
- package/src/components/CollectionViewBinding/hooks/useKanbanDragAndDrop.ts +0 -181
- package/src/components/CollectionViewBinding/useBoardDataController.tsx +0 -802
- package/src/components/CollectionViewBinding/usePreviewSlots.ts +0 -703
- package/src/components/CollectionViewBinding/useSelectionController.tsx +0 -40
- package/src/components/CollectionViewBinding/utils.ts +0 -22
- package/src/components/DefaultAppBar.tsx +0 -264
- package/src/components/DefaultDrawer.tsx +0 -593
- package/src/components/DeleteEntityDialog.tsx +0 -205
- package/src/components/DetailViewBinding.tsx +0 -731
- package/src/components/DrawerNavigationGroup.tsx +0 -141
- package/src/components/DrawerNavigationItem.tsx +0 -115
- package/src/components/EditFormActions.tsx +0 -303
- package/src/components/EditViewBinding.tsx +0 -1069
- package/src/components/EntityDisplayHeader.tsx +0 -170
- package/src/components/EntityIdentityBar.tsx +0 -428
- package/src/components/EntityInspector.tsx +0 -156
- package/src/components/EntityPreviewBinding.tsx +0 -432
- package/src/components/EntityPreviewNesting.tsx +0 -50
- package/src/components/EntityViewBinding.tsx +0 -374
- package/src/components/FieldCaption.tsx +0 -14
- package/src/components/HomePage/ContentHomePage.tsx +0 -586
- package/src/components/HomePage/FavouritesView.tsx +0 -60
- package/src/components/HomePage/HomePageDnD.tsx +0 -704
- package/src/components/HomePage/NavigationCard.tsx +0 -81
- package/src/components/HomePage/NavigationCardBinding.tsx +0 -107
- package/src/components/HomePage/NavigationGroup.tsx +0 -156
- package/src/components/HomePage/RenameGroupDialog.tsx +0 -123
- package/src/components/HomePage/SmallNavigationCard.tsx +0 -41
- package/src/components/HomePage/index.tsx +0 -5
- package/src/components/InlineEntityPreview.tsx +0 -149
- package/src/components/JsonPreviewBinding.tsx +0 -66
- package/src/components/PropertyCollectionView.tsx +0 -336
- package/src/components/PropertyConfigBadge.tsx +0 -28
- package/src/components/PropertyIdCopyTooltip.tsx +0 -47
- package/src/components/RebaseAuthGate.tsx +0 -44
- package/src/components/RebaseCMS.tsx +0 -30
- package/src/components/RebaseLayout.tsx +0 -80
- package/src/components/RebaseNavigation.tsx +0 -369
- package/src/components/RebaseRouteDefs.tsx +0 -127
- package/src/components/RebaseShell.tsx +0 -83
- package/src/components/ReferenceTable/SelectionTableBinding.tsx +0 -389
- package/src/components/ReferenceWidget.tsx +0 -156
- package/src/components/RelationSelector.tsx +0 -926
- package/src/components/SearchIconsView.tsx +0 -78
- package/src/components/SelectableTable/SelectableTable.tsx +0 -309
- package/src/components/SelectableTable/SelectableTableContext.tsx +0 -7
- package/src/components/SelectableTable/SelectionStore.ts +0 -43
- package/src/components/SelectableTable/filters/BooleanFilterField.tsx +0 -59
- package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +0 -146
- package/src/components/SelectableTable/filters/FilterFieldBinding.tsx +0 -190
- package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +0 -250
- package/src/components/SelectableTable/filters/RelationFilterField.tsx +0 -238
- package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +0 -282
- package/src/components/SelectableTable/filters/null_filter.ts +0 -63
- package/src/components/SideDialogs.tsx +0 -238
- package/src/components/SidePanelBinding.tsx +0 -361
- package/src/components/SidePanelProvider.tsx +0 -80
- package/src/components/UserSelector.tsx +0 -513
- package/src/components/admin/CreationResultDialog.tsx +0 -138
- package/src/components/admin/index.ts +0 -1
- package/src/components/app/AppBar.tsx +0 -17
- package/src/components/app/Drawer.tsx +0 -38
- package/src/components/app/Scaffold.tsx +0 -366
- package/src/components/app/index.ts +0 -4
- package/src/components/app/useApp.tsx +0 -36
- package/src/components/common/default_entity_actions.tsx +0 -440
- package/src/components/common/index.ts +0 -1
- package/src/components/field_configs.tsx +0 -506
- package/src/components/history/EntityHistoryEntry.tsx +0 -203
- package/src/components/history/EntityHistoryView.tsx +0 -206
- package/src/components/history/LastEditedByFormAction.tsx +0 -24
- package/src/components/history/LastEditedByIndicator.tsx +0 -95
- package/src/components/history/UserChip.tsx +0 -15
- package/src/components/history/index.tsx +0 -5
- package/src/components/index.ts +0 -63
- package/src/contexts/BreacrumbsContext.tsx +0 -45
- package/src/contexts/SideDialogsControllerContext.tsx +0 -5
- package/src/contexts/SidePanelControllerContext.tsx +0 -5
- package/src/data_export/export/BasicExportAction.tsx +0 -142
- package/src/data_export/export/ExportCollectionAction.tsx +0 -321
- package/src/data_export/export/export.ts +0 -295
- package/src/data_export/export/fetch_export_data.ts +0 -90
- package/src/data_export/export/index.ts +0 -4
- package/src/data_export/index.ts +0 -1
- package/src/data_import/components/DataNewPropertiesMapping.tsx +0 -261
- package/src/data_import/components/ImportFileUpload.tsx +0 -42
- package/src/data_import/components/ImportNewPropertyFieldPreview.tsx +0 -58
- package/src/data_import/components/ImportSaveInProgress.tsx +0 -121
- package/src/data_import/components/index.ts +0 -4
- package/src/data_import/hooks/index.ts +0 -1
- package/src/data_import/hooks/useImportConfig.tsx +0 -34
- package/src/data_import/import/ImportCollectionAction.tsx +0 -461
- package/src/data_import/import/index.ts +0 -1
- package/src/data_import/index.ts +0 -5
- package/src/data_import/types/column_mapping.ts +0 -32
- package/src/data_import/types/index.ts +0 -1
- package/src/data_import/utils/csv.ts +0 -153
- package/src/data_import/utils/data.ts +0 -181
- package/src/data_import/utils/file_headers.ts +0 -14
- package/src/data_import/utils/file_to_json.ts +0 -149
- package/src/data_import/utils/get_import_inference_type.ts +0 -33
- package/src/data_import/utils/get_properties_mapping.ts +0 -67
- package/src/data_import/utils/index.ts +0 -5
- package/src/data_import/utils/save_entities.ts +0 -138
- package/src/data_import/utils/transforms.ts +0 -70
- package/src/editor/components/SlashCommandMenu.tsx +0 -532
- package/src/editor/components/editor-bubble-item.tsx +0 -32
- package/src/editor/components/editor-bubble.tsx +0 -143
- package/src/editor/components/image-bubble.tsx +0 -183
- package/src/editor/components/index.ts +0 -14
- package/src/editor/components/table-bubble.tsx +0 -233
- package/src/editor/editor.tsx +0 -529
- package/src/editor/extensions/HighlightDecorationExtension.ts +0 -115
- package/src/editor/extensions/Image.ts +0 -159
- package/src/editor/extensions/TextLoadingDecorationExtension.tsx +0 -107
- package/src/editor/extensions/clipboard.ts +0 -72
- package/src/editor/extensions/custom-keymap.ts +0 -25
- package/src/editor/extensions/drag-and-drop.tsx +0 -508
- package/src/editor/hooks/useProseMirror.ts +0 -126
- package/src/editor/hooks/useProseMirrorContext.ts +0 -15
- package/src/editor/index.ts +0 -2
- package/src/editor/markdown-it-plugins.d.ts +0 -24
- package/src/editor/markdown.ts +0 -204
- package/src/editor/nodeViews/ImageComponent.tsx +0 -20
- package/src/editor/nodeViews/ReactNodeView.tsx +0 -89
- package/src/editor/nodeViews/TaskItemComponent.tsx +0 -30
- package/src/editor/nodeViews/index.ts +0 -35
- package/src/editor/plugins/index.ts +0 -58
- package/src/editor/plugins/inputrules.ts +0 -82
- package/src/editor/plugins/placeholderPlugin.ts +0 -55
- package/src/editor/plugins/slashCommandPlugin.ts +0 -65
- package/src/editor/schema.ts +0 -339
- package/src/editor/selectors/ai-selector.tsx +0 -110
- package/src/editor/selectors/color-selector.tsx +0 -199
- package/src/editor/selectors/link-selector.tsx +0 -122
- package/src/editor/selectors/node-selector.tsx +0 -159
- package/src/editor/selectors/text-buttons.tsx +0 -79
- package/src/editor/types.ts +0 -6
- package/src/editor/useProseMirror.ts +0 -125
- package/src/editor/utils/prosemirror-utils.ts +0 -113
- package/src/editor/utils/remove_classes.ts +0 -18
- package/src/editor/utils/useDebouncedCallback.ts +0 -25
- package/src/form/EntityForm.tsx +0 -761
- package/src/form/EntityFormActions.tsx +0 -160
- package/src/form/EntityFormBinding.tsx +0 -342
- package/src/form/PropertyFieldBinding.tsx +0 -348
- package/src/form/components/ErrorFocus.tsx +0 -44
- package/src/form/components/FieldBlock.tsx +0 -189
- package/src/form/components/FieldHelperText.tsx +0 -84
- package/src/form/components/FormRail.tsx +0 -153
- package/src/form/components/FormSections.tsx +0 -145
- package/src/form/components/LabelWithIcon.tsx +0 -43
- package/src/form/components/LabelWithIconAndTooltip.tsx +0 -28
- package/src/form/components/LocalChangesMenu.tsx +0 -147
- package/src/form/components/StorageItemPreview.tsx +0 -81
- package/src/form/components/StorageUploadProgress.tsx +0 -118
- package/src/form/components/index.tsx +0 -6
- package/src/form/components/useRailVisible.tsx +0 -47
- package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +0 -109
- package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +0 -172
- package/src/form/field_bindings/BinaryFieldBinding.tsx +0 -177
- package/src/form/field_bindings/BlockFieldBinding.tsx +0 -282
- package/src/form/field_bindings/DateTimeFieldBinding.tsx +0 -78
- package/src/form/field_bindings/GeopointFieldBinding.tsx +0 -200
- package/src/form/field_bindings/KeyValueFieldBinding.tsx +0 -574
- package/src/form/field_bindings/MapFieldBinding.tsx +0 -120
- package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +0 -259
- package/src/form/field_bindings/MultiSelectFieldBinding.tsx +0 -130
- package/src/form/field_bindings/MultipleRelationFieldBinding.tsx +0 -168
- package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +0 -94
- package/src/form/field_bindings/ReferenceFieldBinding.tsx +0 -146
- package/src/form/field_bindings/RelationFieldBinding.tsx +0 -202
- package/src/form/field_bindings/RepeatFieldBinding.tsx +0 -143
- package/src/form/field_bindings/SelectFieldBinding.tsx +0 -111
- package/src/form/field_bindings/StorageUploadFieldBinding.tsx +0 -521
- package/src/form/field_bindings/SwitchFieldBinding.tsx +0 -70
- package/src/form/field_bindings/TextFieldBinding.tsx +0 -189
- package/src/form/field_bindings/UserSelectFieldBinding.tsx +0 -71
- package/src/form/field_bindings/VectorFieldBinding.tsx +0 -209
- package/src/form/form_utils.ts +0 -243
- package/src/form/index.tsx +0 -36
- package/src/form/useClearRestoreValue.tsx +0 -36
- package/src/form/useUndoableDiscard.ts +0 -39
- package/src/form/validation.ts +0 -583
- package/src/hooks/index.ts +0 -16
- package/src/hooks/navigation/contexts/CollectionRegistryContext.tsx +0 -22
- package/src/hooks/navigation/contexts/NavigationStateContext.tsx +0 -16
- package/src/hooks/navigation/contexts/UrlContext.tsx +0 -24
- package/src/hooks/navigation/contexts/index.ts +0 -14
- package/src/hooks/navigation/useAsyncResolver.ts +0 -100
- package/src/hooks/navigation/useBuildCollectionRegistryController.tsx +0 -218
- package/src/hooks/navigation/useBuildNavigationStateController.tsx +0 -134
- package/src/hooks/navigation/useBuildUrlController.tsx +0 -66
- package/src/hooks/navigation/useNavigationResolution.ts +0 -271
- package/src/hooks/navigation/useResolvedCollections.ts +0 -102
- package/src/hooks/navigation/useResolvedViews.tsx +0 -139
- package/src/hooks/navigation/useTopLevelNavigation.ts +0 -273
- package/src/hooks/navigation/utils.ts +0 -200
- package/src/hooks/useAdminContext.tsx +0 -83
- package/src/hooks/useBreadcrumbsController.tsx +0 -17
- package/src/hooks/useBuildSideDialogsController.tsx +0 -145
- package/src/hooks/useBuildSidePanel.tsx +0 -315
- package/src/hooks/useChildViewSource.ts +0 -46
- package/src/hooks/useEntityDisplay.tsx +0 -262
- package/src/hooks/useEntityDisplayTitle.tsx +0 -49
- package/src/hooks/useHistory.ts +0 -178
- package/src/hooks/useRecordActions.tsx +0 -69
- package/src/hooks/useResolvedNavigationFrom.tsx +0 -167
- package/src/hooks/useResolvedUsers.ts +0 -148
- package/src/hooks/useSelectionDialog.tsx +0 -58
- package/src/hooks/useSideDialogsController.tsx +0 -25
- package/src/hooks/useSidePanel.tsx +0 -13
- package/src/index.ts +0 -124
- package/src/preview/PropertyPreview.tsx +0 -331
- package/src/preview/compact_text.ts +0 -68
- package/src/preview/components/ArrayEnumPreview.tsx +0 -39
- package/src/preview/components/BooleanPreview.tsx +0 -28
- package/src/preview/components/DatePreview.tsx +0 -106
- package/src/preview/components/EmptyValue.tsx +0 -10
- package/src/preview/components/EnumValuesChip.tsx +0 -39
- package/src/preview/components/ImagePreview.tsx +0 -144
- package/src/preview/components/InlineEntityListPreview.tsx +0 -42
- package/src/preview/components/ReferencePreview.tsx +0 -235
- package/src/preview/components/RelationPreview.tsx +0 -271
- package/src/preview/components/StorageThumbnail.tsx +0 -147
- package/src/preview/components/UrlComponentPreview.tsx +0 -116
- package/src/preview/components/UserPreview.tsx +0 -30
- package/src/preview/components/date_fns_locales.ts +0 -125
- package/src/preview/index.ts +0 -26
- package/src/preview/property_previews/ArrayOfMapsPreview.tsx +0 -73
- package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +0 -67
- package/src/preview/property_previews/ArrayOfRelationsPreview.tsx +0 -77
- package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +0 -49
- package/src/preview/property_previews/ArrayOfStringsPreview.tsx +0 -70
- package/src/preview/property_previews/ArrayOneOfPreview.tsx +0 -79
- package/src/preview/property_previews/ArrayPropertyEnumPreview.tsx +0 -35
- package/src/preview/property_previews/ArrayPropertyPreview.tsx +0 -79
- package/src/preview/property_previews/MapPropertyPreview.tsx +0 -198
- package/src/preview/property_previews/NumberPropertyPreview.tsx +0 -39
- package/src/preview/property_previews/SkeletonPropertyComponent.tsx +0 -276
- package/src/preview/property_previews/StringPropertyPreview.tsx +0 -70
- package/src/preview/util.ts +0 -39
- package/src/routes/CustomViewRoute.tsx +0 -33
- package/src/routes/RebaseRoute.tsx +0 -467
- package/src/routes/index.ts +0 -2
- package/src/types/components/EntityFormActionsProps.tsx +0 -20
- package/src/types/components/EntityFormProps.tsx +0 -119
- package/src/types/components/PropertyPreviewProps.tsx +0 -85
- package/src/types/components/formex.tsx +0 -2
- package/src/types/components/index.ts +0 -3
- package/src/types/fields.tsx +0 -340
- package/src/types/index.ts +0 -4
- package/src/util/dataControllerAdapter.ts +0 -88
- package/src/util/entity_actions.ts +0 -28
- package/src/util/index.ts +0 -5
- package/src/util/navigation_utils.ts +0 -89
- package/src/util/number_format.ts +0 -46
- package/src/util/previews.ts +0 -131
- package/src/util/propertyConfigMapper.ts +0 -134
- package/src/util/property_utils.tsx +0 -236
- package/src/util/resolutions.ts +0 -96
- package/src/util/view_constants.ts +0 -33
- package/src/util/view_mode.ts +0 -176
|
@@ -1,369 +0,0 @@
|
|
|
1
|
-
import React, { useMemo, useRef, useEffect, useCallback, useContext, Suspense } from "react";
|
|
2
|
-
import {
|
|
3
|
-
useRebaseRegistry,
|
|
4
|
-
useRebaseContext,
|
|
5
|
-
useAuthController,
|
|
6
|
-
useCustomizationController,
|
|
7
|
-
useAdminModeController,
|
|
8
|
-
useBuildLocalConfigurationPersistence,
|
|
9
|
-
useRebaseClient,
|
|
10
|
-
useData,
|
|
11
|
-
useDataSources,
|
|
12
|
-
CollectionResolverRegistrationContext,
|
|
13
|
-
StudioBridgeRegistryProvider,
|
|
14
|
-
useBridgeRegistration,
|
|
15
|
-
CustomizationControllerContext,
|
|
16
|
-
RebaseDataContext
|
|
17
|
-
} from "@rebasepro/app";
|
|
18
|
-
import { buildRoutedRebaseData, resolveDataSource } from "@rebasepro/common";
|
|
19
|
-
import { CircularProgressCenter, lazyChunk } from "@rebasepro/ui";
|
|
20
|
-
|
|
21
|
-
import type { AppView, CollectionCustomView, CollectionEditorOptions, EntityCustomView, EntityAction, RebasePlugin, AdminCollection } from "@rebasepro/cms-types";
|
|
22
|
-
import type { CollectionRegistryController } from "@rebasepro/types";
|
|
23
|
-
import type { UrlController, NavigationStateController } from "@rebasepro/cms-types";
|
|
24
|
-
|
|
25
|
-
const EMPTY_PLUGINS: RebasePlugin[] = [];
|
|
26
|
-
const EMPTY_COLLECTIONS: AdminCollection[] = [];
|
|
27
|
-
|
|
28
|
-
import { useBuildNavigationStateController } from "../hooks/navigation/useBuildNavigationStateController";
|
|
29
|
-
import { useBuildUrlController } from "../hooks/navigation/useBuildUrlController";
|
|
30
|
-
import { useBuildCollectionRegistryController } from "../hooks/navigation/useBuildCollectionRegistryController";
|
|
31
|
-
|
|
32
|
-
import { CollectionRegistryContext } from "../hooks/navigation/contexts/CollectionRegistryContext";
|
|
33
|
-
import { UrlContext } from "../hooks/navigation/contexts/UrlContext";
|
|
34
|
-
import { NavigationStateContext } from "../hooks/navigation/contexts/NavigationStateContext";
|
|
35
|
-
|
|
36
|
-
import { SidePanelProvider } from "./SidePanelProvider";
|
|
37
|
-
|
|
38
|
-
// Collection editor internals — used when collectionEditor is enabled
|
|
39
|
-
import { useLocalCollectionsConfigController } from "../collection_editor/useLocalCollectionsConfigController";
|
|
40
|
-
import { ConfigControllerProvider } from "../collection_editor/ConfigControllerProvider";
|
|
41
|
-
import { useCollectionsConfigController } from "../collection_editor/useCollectionsConfigController";
|
|
42
|
-
|
|
43
|
-
// Lazy-load the schema view — only fetched when studio schema tool is active
|
|
44
|
-
const CollectionsStudioView = lazyChunk(() =>
|
|
45
|
-
import("../collection_editor/ui/collection_editor/RouterCollectionsStudioView")
|
|
46
|
-
.then(m => ({ default: m.RouterCollectionsStudioView }))
|
|
47
|
-
);
|
|
48
|
-
|
|
49
|
-
export interface RebaseNavigationProps {
|
|
50
|
-
children: React.ReactNode;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* Navigation layer — builds and provides all admin navigation controllers:
|
|
55
|
-
* collection registry, URL controller, navigation state, side entity,
|
|
56
|
-
* and the self-assembling Studio bridge.
|
|
57
|
-
*
|
|
58
|
-
* Also handles the collection editor config controller when enabled.
|
|
59
|
-
*
|
|
60
|
-
* **Independently usable**: Use this when you need admin navigation
|
|
61
|
-
* (entity tables, side panels) in a custom layout.
|
|
62
|
-
*
|
|
63
|
-
* @example
|
|
64
|
-
* ```tsx
|
|
65
|
-
* <RebaseNavigation>
|
|
66
|
-
* <MyCustomLayout>
|
|
67
|
-
* <CollectionViewBinding ... />
|
|
68
|
-
* </MyCustomLayout>
|
|
69
|
-
* </RebaseNavigation>
|
|
70
|
-
* ```
|
|
71
|
-
*/
|
|
72
|
-
export function RebaseNavigation({ children }: RebaseNavigationProps) {
|
|
73
|
-
const registry = useRebaseRegistry();
|
|
74
|
-
const context = useRebaseContext();
|
|
75
|
-
const adminModeController = useAdminModeController();
|
|
76
|
-
const userConfigPersistence = useBuildLocalConfigurationPersistence();
|
|
77
|
-
|
|
78
|
-
// ── Collection Editor resolution ──────────────────────────────────
|
|
79
|
-
// The collection editor is ALWAYS enabled when Studio is registered.
|
|
80
|
-
// The `collectionEditor` admin config is for fine-tuning (readOnly, auth, etc.),
|
|
81
|
-
// not for opting-in. When omitted, the editor defaults to enabled
|
|
82
|
-
// (read-only in production).
|
|
83
|
-
const collectionEditorConfig = registry.cmsConfig?.collectionEditor;
|
|
84
|
-
const collectionEditorEnabled = Boolean(collectionEditorConfig) || Boolean(registry.studioConfig);
|
|
85
|
-
const collectionEditorOptions: CollectionEditorOptions | undefined = useMemo(() => {
|
|
86
|
-
if (collectionEditorConfig === true || !collectionEditorConfig) return {};
|
|
87
|
-
return collectionEditorConfig;
|
|
88
|
-
}, [collectionEditorConfig]);
|
|
89
|
-
|
|
90
|
-
// ── Combine admin and Studio Configs ────────────────────────────────
|
|
91
|
-
const cmsCollections = registry.cmsConfig?.collections ?? EMPTY_COLLECTIONS;
|
|
92
|
-
|
|
93
|
-
// ── Build the navigation controllers ──────────────────────────────
|
|
94
|
-
const collectionsBuilder = useMemo(() => Array.isArray(cmsCollections) ? () => [...cmsCollections] : cmsCollections, [cmsCollections]);
|
|
95
|
-
|
|
96
|
-
const dataSources = useDataSources();
|
|
97
|
-
const collectionRegistryController = useBuildCollectionRegistryController({ userConfigPersistence, dataSources: dataSources.registry });
|
|
98
|
-
|
|
99
|
-
// ── Multi-data-source routing ─────────────────────────────────────
|
|
100
|
-
// Combine the default data source (server transport) with the registered
|
|
101
|
-
// direct/custom sources from <Rebase> and route each collection by its
|
|
102
|
-
// resolved data-source key, looked up by path against the collection
|
|
103
|
-
// registry. A stable resolver ref keeps the routed data instance
|
|
104
|
-
// referentially stable across registry rebuilds, so data-effect
|
|
105
|
-
// dependencies don't thrash.
|
|
106
|
-
const defaultData = useData();
|
|
107
|
-
const getCollectionRef = useRef(collectionRegistryController.getCollection);
|
|
108
|
-
getCollectionRef.current = collectionRegistryController.getCollection;
|
|
109
|
-
|
|
110
|
-
// Hand the data layer a way to read this registry. It was built by <Rebase>,
|
|
111
|
-
// above us, and needs a collection's primary keys to give its rows an
|
|
112
|
-
// address — rows themselves carry only columns.
|
|
113
|
-
//
|
|
114
|
-
// Registered during render, not in an effect: the views that fetch rows are
|
|
115
|
-
// below us, and their effects run before ours, so an effect here would bind
|
|
116
|
-
// after the first page had already been converted. The call only assigns a
|
|
117
|
-
// ref, so repeating it per render is free.
|
|
118
|
-
const registerCollectionResolver = useContext(CollectionResolverRegistrationContext);
|
|
119
|
-
const resolveCollection = useCallback(
|
|
120
|
-
(slug: string) => getCollectionRef.current(slug),
|
|
121
|
-
[]);
|
|
122
|
-
registerCollectionResolver(resolveCollection);
|
|
123
|
-
const routedData = useMemo(() => buildRoutedRebaseData({
|
|
124
|
-
defaultData,
|
|
125
|
-
sources: dataSources.sources,
|
|
126
|
-
resolveKey: (slugOrPath) => resolveDataSource(getCollectionRef.current(slugOrPath), dataSources.registry).key
|
|
127
|
-
}), [defaultData, dataSources]);
|
|
128
|
-
|
|
129
|
-
// Normalize the configured mount prefix to a leading-slash, no-trailing-slash
|
|
130
|
-
// form (e.g. "admin" or "/admin/" -> "/admin"); empty/"/" stays "/".
|
|
131
|
-
const basePath = useMemo(() => {
|
|
132
|
-
const raw = registry.cmsConfig?.basePath;
|
|
133
|
-
if (!raw || raw === "/") return "/";
|
|
134
|
-
const trimmed = raw.replace(/^\/+/, "").replace(/\/+$/, "");
|
|
135
|
-
return trimmed ? `/${trimmed}` : "/";
|
|
136
|
-
}, [registry.cmsConfig?.basePath]);
|
|
137
|
-
|
|
138
|
-
const urlController = useBuildUrlController({
|
|
139
|
-
basePath,
|
|
140
|
-
baseCollectionPath: "/c",
|
|
141
|
-
collectionRegistryController
|
|
142
|
-
});
|
|
143
|
-
|
|
144
|
-
// ── Build config controller internally when collection editor is enabled ──
|
|
145
|
-
const rebaseClient = useRebaseClient();
|
|
146
|
-
const authController = useAuthController();
|
|
147
|
-
const resolvedCollections = useMemo(
|
|
148
|
-
() => Array.isArray(cmsCollections) ? cmsCollections : [],
|
|
149
|
-
[cmsCollections]
|
|
150
|
-
);
|
|
151
|
-
|
|
152
|
-
// ── Dev-only data-source sanity check ─────────────────────────────
|
|
153
|
-
// Warn about data sources declared with a direct/custom transport that
|
|
154
|
-
// have no client-side driver — these silently fall back to the default
|
|
155
|
-
// (server) source, a common source of misrouting. Unambiguous: it never
|
|
156
|
-
// false-positives on server-mediated sources (which intentionally have
|
|
157
|
-
// no client driver).
|
|
158
|
-
useEffect(() => {
|
|
159
|
-
if (process.env.NODE_ENV === "production") return;
|
|
160
|
-
const { registry, sources } = dataSources;
|
|
161
|
-
const missing = Object.values(registry)
|
|
162
|
-
.filter((d) => (d.transport === "direct" || d.transport === "custom") && !sources[d.key])
|
|
163
|
-
.map((d) => d.key);
|
|
164
|
-
if (missing.length > 0) {
|
|
165
|
-
console.warn(
|
|
166
|
-
`[Rebase] These data source(s) declare a direct/custom transport but have no client-side driver and will fall back to the default data source: ${missing.map(k => `"${k}"`).join(", ")}. ` +
|
|
167
|
-
`Provide a \`driver\` for them in \`dataSources\` on <Rebase>.`
|
|
168
|
-
);
|
|
169
|
-
}
|
|
170
|
-
}, [dataSources]);
|
|
171
|
-
|
|
172
|
-
// `readOnly` is left undefined unless the developer set it: the controller
|
|
173
|
-
// asks the backend whether its schema editor will accept a write, which is
|
|
174
|
-
// the only process that knows. Deciding it here from `process.env.NODE_ENV`
|
|
175
|
-
// — the *frontend bundle's* build mode — is what made the editor offer
|
|
176
|
-
// itself against production backends, `baas` projects and servers without
|
|
177
|
-
// `ts-morph`, and turned every save into a bare 404.
|
|
178
|
-
const internalConfigController = useLocalCollectionsConfigController(
|
|
179
|
-
rebaseClient,
|
|
180
|
-
resolvedCollections,
|
|
181
|
-
collectionEditorEnabled ? {
|
|
182
|
-
readOnly: collectionEditorOptions?.readOnly,
|
|
183
|
-
getAuthToken: collectionEditorOptions?.getAuthToken ?? authController?.getAuthToken,
|
|
184
|
-
authKey: authController?.user?.uid ?? null
|
|
185
|
-
} : { readOnly: true }
|
|
186
|
-
);
|
|
187
|
-
|
|
188
|
-
// ── Auto-inject schema view into Studio devViews ──────────────────
|
|
189
|
-
const schemaView: AppView | undefined = useMemo(() => {
|
|
190
|
-
if (!collectionEditorEnabled) return undefined;
|
|
191
|
-
// Only inject when Studio is registered and includes "schema" tool (or all tools)
|
|
192
|
-
const studioTools = registry.studioConfig?.tools ?? ["sql", "js", "rls", "schema", "storage"];
|
|
193
|
-
if (!registry.studioConfig || !studioTools.includes("schema")) return undefined;
|
|
194
|
-
return {
|
|
195
|
-
slug: "schema",
|
|
196
|
-
name: "Edit collections",
|
|
197
|
-
group: "Database",
|
|
198
|
-
icon: "LayoutList",
|
|
199
|
-
nestedRoutes: true,
|
|
200
|
-
// Reads the controller from context at render time rather than
|
|
201
|
-
// capturing it here. A view is a React *element*, and the
|
|
202
|
-
// navigation state controller resolves the view list once and holds
|
|
203
|
-
// on to the elements it resolved — so a controller passed as a prop
|
|
204
|
-
// is frozen at whatever it was on the first render, forever. That
|
|
205
|
-
// hid every later change: the editor stayed writable after the
|
|
206
|
-
// backend said it was read-only, and the collection list never
|
|
207
|
-
// refreshed. Everything else in the editor already reads this from
|
|
208
|
-
// `ConfigControllerProvider`, which wraps this subtree.
|
|
209
|
-
view: (
|
|
210
|
-
<Suspense fallback={<CircularProgressCenter/>}>
|
|
211
|
-
<CollectionsStudioViewFromContext/>
|
|
212
|
-
</Suspense>
|
|
213
|
-
)
|
|
214
|
-
};
|
|
215
|
-
}, [collectionEditorEnabled, registry.studioConfig]);
|
|
216
|
-
|
|
217
|
-
const devViews = useMemo(() => {
|
|
218
|
-
const base = registry.studioConfig?.devViews ?? [];
|
|
219
|
-
if (schemaView) return [...base, schemaView];
|
|
220
|
-
return base;
|
|
221
|
-
}, [registry.studioConfig?.devViews, schemaView]);
|
|
222
|
-
|
|
223
|
-
// Merge admin-registered views with Studio dev views.
|
|
224
|
-
// Order: admin views (developer's primary content) → Studio dev views (tooling).
|
|
225
|
-
// Plugin views are merged later inside resolveAppViews.
|
|
226
|
-
const cmsViews = registry.cmsConfig?.views;
|
|
227
|
-
const mergedViews = useMemo(() => {
|
|
228
|
-
if (!cmsViews) return devViews;
|
|
229
|
-
if (Array.isArray(cmsViews) && cmsViews.length === 0) return devViews;
|
|
230
|
-
// When cmsViews is a builder function, wrap it to append devViews after resolution
|
|
231
|
-
if (typeof cmsViews === "function") {
|
|
232
|
-
return async (params: Parameters<typeof cmsViews>[0]) => {
|
|
233
|
-
const resolved = await cmsViews(params) ?? [];
|
|
234
|
-
return [...resolved, ...devViews];
|
|
235
|
-
};
|
|
236
|
-
}
|
|
237
|
-
return [...cmsViews, ...devViews];
|
|
238
|
-
}, [cmsViews, devViews]);
|
|
239
|
-
|
|
240
|
-
const parentCustomizationController = useCustomizationController();
|
|
241
|
-
|
|
242
|
-
const navigationStateController = useBuildNavigationStateController({
|
|
243
|
-
plugins: parentCustomizationController.plugins ?? EMPTY_PLUGINS,
|
|
244
|
-
collections: collectionsBuilder,
|
|
245
|
-
views: mergedViews,
|
|
246
|
-
navigationGroupMappings: registry.cmsConfig?.navigationGroupMappings,
|
|
247
|
-
authController: context.authController!,
|
|
248
|
-
data: routedData,
|
|
249
|
-
collectionRegistryController,
|
|
250
|
-
urlController,
|
|
251
|
-
adminMode: adminModeController?.mode
|
|
252
|
-
});
|
|
253
|
-
|
|
254
|
-
// ── Merge admin-registered entityViews/entityActions into the customization controller ──
|
|
255
|
-
// The <Rebase> component builds the customizationController from its own props,
|
|
256
|
-
// but entity views passed to <RebaseCMS> are stored in the registry and not
|
|
257
|
-
// automatically merged. We re-provide an enriched controller here so that
|
|
258
|
-
// downstream consumers (EditViewBinding, side panels, etc.) can resolve
|
|
259
|
-
// string-keyed entity views like "blog_preview".
|
|
260
|
-
const enrichedCustomizationController = useMemo(() => {
|
|
261
|
-
const cmsEntityViews = (registry.cmsConfig?.entityViews ?? []) as EntityCustomView[];
|
|
262
|
-
const cmsEntityActions = (registry.cmsConfig?.entityActions ?? []) as EntityAction[];
|
|
263
|
-
// Collection view modes ride the same channel, for the same reason:
|
|
264
|
-
// `admin.customViews: ["map"]` has to find the component somewhere.
|
|
265
|
-
const cmsCollectionViews = (registry.cmsConfig?.collectionViews ?? []) as CollectionCustomView[];
|
|
266
|
-
if (cmsEntityViews.length === 0 && cmsEntityActions.length === 0 && cmsCollectionViews.length === 0) {
|
|
267
|
-
return parentCustomizationController;
|
|
268
|
-
}
|
|
269
|
-
return {
|
|
270
|
-
...parentCustomizationController,
|
|
271
|
-
entityViews: [
|
|
272
|
-
...(parentCustomizationController.entityViews ?? []),
|
|
273
|
-
...cmsEntityViews.filter(v => !(parentCustomizationController.entityViews ?? []).some(ev => ev.key === v.key))
|
|
274
|
-
],
|
|
275
|
-
entityActions: [
|
|
276
|
-
...(parentCustomizationController.entityActions ?? []),
|
|
277
|
-
...cmsEntityActions.filter(a => !(parentCustomizationController.entityActions ?? []).some(ea => ea.key === a.key))
|
|
278
|
-
],
|
|
279
|
-
collectionViews: [
|
|
280
|
-
...(parentCustomizationController.collectionViews ?? []),
|
|
281
|
-
...cmsCollectionViews.filter(v => !(parentCustomizationController.collectionViews ?? []).some(cv => cv.key === v.key))
|
|
282
|
-
]
|
|
283
|
-
};
|
|
284
|
-
}, [parentCustomizationController, registry.cmsConfig?.entityViews, registry.cmsConfig?.entityActions, registry.cmsConfig?.collectionViews]);
|
|
285
|
-
|
|
286
|
-
// ── Inner content with all context providers ──────────────────────
|
|
287
|
-
// Re-provide RebaseDataContext with the routed data so that every admin
|
|
288
|
-
// consumer (list/entity views, references, board, import/export, and
|
|
289
|
-
// `context.data`) is routed to the correct driver by collection path.
|
|
290
|
-
const navigationContent = (
|
|
291
|
-
<RebaseDataContext.Provider value={routedData}>
|
|
292
|
-
<CustomizationControllerContext.Provider value={enrichedCustomizationController}>
|
|
293
|
-
<StudioBridgeRegistryProvider>
|
|
294
|
-
<CollectionRegistryContext.Provider value={collectionRegistryController}>
|
|
295
|
-
<UrlContext.Provider value={urlController}>
|
|
296
|
-
<NavigationStateContext.Provider value={navigationStateController}>
|
|
297
|
-
<SidePanelProvider>
|
|
298
|
-
<BridgeAutoRegistrar
|
|
299
|
-
collectionRegistryController={collectionRegistryController}
|
|
300
|
-
urlController={urlController}
|
|
301
|
-
navigationStateController={navigationStateController}
|
|
302
|
-
canWriteToCodebase={!internalConfigController.readOnly}
|
|
303
|
-
/>
|
|
304
|
-
{children}
|
|
305
|
-
</SidePanelProvider>
|
|
306
|
-
</NavigationStateContext.Provider>
|
|
307
|
-
</UrlContext.Provider>
|
|
308
|
-
</CollectionRegistryContext.Provider>
|
|
309
|
-
</StudioBridgeRegistryProvider>
|
|
310
|
-
</CustomizationControllerContext.Provider>
|
|
311
|
-
</RebaseDataContext.Provider>
|
|
312
|
-
);
|
|
313
|
-
|
|
314
|
-
// ── Wrap with ConfigControllerProvider when collection editor is enabled ──
|
|
315
|
-
if (collectionEditorEnabled) {
|
|
316
|
-
return (
|
|
317
|
-
<ConfigControllerProvider
|
|
318
|
-
collectionConfigController={internalConfigController}
|
|
319
|
-
pathSuggestions={collectionEditorOptions?.pathSuggestions}
|
|
320
|
-
>
|
|
321
|
-
{navigationContent}
|
|
322
|
-
</ConfigControllerProvider>
|
|
323
|
-
);
|
|
324
|
-
}
|
|
325
|
-
|
|
326
|
-
return navigationContent;
|
|
327
|
-
}
|
|
328
|
-
|
|
329
|
-
/**
|
|
330
|
-
* The injected "Edit collections" view, bound to the live config controller.
|
|
331
|
-
*
|
|
332
|
-
* Exists so the element stored in the navigation state does not close over a
|
|
333
|
-
* controller instance — see the comment at its construction site.
|
|
334
|
-
*/
|
|
335
|
-
function CollectionsStudioViewFromContext() {
|
|
336
|
-
const configController = useCollectionsConfigController();
|
|
337
|
-
return <CollectionsStudioView configController={configController}/>;
|
|
338
|
-
}
|
|
339
|
-
|
|
340
|
-
/**
|
|
341
|
-
* Internal component that auto-registers admin controllers into the
|
|
342
|
-
* self-assembling Studio bridge. Must be rendered inside both the
|
|
343
|
-
* navigation contexts and the StudioBridgeRegistryProvider.
|
|
344
|
-
*/
|
|
345
|
-
function BridgeAutoRegistrar({
|
|
346
|
-
collectionRegistryController,
|
|
347
|
-
urlController,
|
|
348
|
-
navigationStateController,
|
|
349
|
-
canWriteToCodebase
|
|
350
|
-
}: {
|
|
351
|
-
collectionRegistryController: CollectionRegistryController;
|
|
352
|
-
urlController: UrlController;
|
|
353
|
-
navigationStateController: NavigationStateController;
|
|
354
|
-
canWriteToCodebase: boolean;
|
|
355
|
-
}) {
|
|
356
|
-
useBridgeRegistration("collectionRegistry", collectionRegistryController);
|
|
357
|
-
useBridgeRegistration("urlController", urlController);
|
|
358
|
-
useBridgeRegistration("navigationState", navigationStateController);
|
|
359
|
-
|
|
360
|
-
// Studio tools that would write into the project's collection source — the
|
|
361
|
-
// RLS editor's policy save for a mapped table, its "Import to codebase" —
|
|
362
|
-
// ask the bridge whether that write can land. The default is `true`, which
|
|
363
|
-
// is what an admin panel sitting next to its own `collectionsDir` assumes;
|
|
364
|
-
// it is wrong for exactly the same backends that make the collection editor
|
|
365
|
-
// read-only, so the two now answer from one source.
|
|
366
|
-
const capabilities = useMemo(() => ({ codebase: canWriteToCodebase }), [canWriteToCodebase]);
|
|
367
|
-
useBridgeRegistration("capabilities", capabilities);
|
|
368
|
-
return null;
|
|
369
|
-
}
|
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
import React, { lazy, Suspense, useMemo } from "react";
|
|
2
|
-
import { Route } from "react-router";
|
|
3
|
-
import {
|
|
4
|
-
useRebaseRegistry,
|
|
5
|
-
RebaseRoutes,
|
|
6
|
-
UserSettingsView,
|
|
7
|
-
UIReferenceView,
|
|
8
|
-
NotFoundPage,
|
|
9
|
-
useComponentOverride
|
|
10
|
-
} from "@rebasepro/app";
|
|
11
|
-
import { CircularProgressCenter } from "@rebasepro/ui";
|
|
12
|
-
|
|
13
|
-
import { ContentHomePage as DefaultHomePage } from "./HomePage/ContentHomePage";
|
|
14
|
-
|
|
15
|
-
import { RebaseRoute } from "../routes/RebaseRoute";
|
|
16
|
-
import { CustomViewRoute } from "../routes/CustomViewRoute";
|
|
17
|
-
import { useNavigationStateController } from "../hooks/navigation/contexts/NavigationStateContext";
|
|
18
|
-
import { CollectionEditorDialogs } from "./CollectionEditorDialogs";
|
|
19
|
-
import { useEffect } from "react";
|
|
20
|
-
import { useTranslation } from "@rebasepro/app";
|
|
21
|
-
import { useBreadcrumbsController } from "../hooks/useBreadcrumbsController";
|
|
22
|
-
|
|
23
|
-
function SettingsView() {
|
|
24
|
-
const { t } = useTranslation();
|
|
25
|
-
const breadcrumbs = useBreadcrumbsController();
|
|
26
|
-
useEffect(() => {
|
|
27
|
-
breadcrumbs.set({
|
|
28
|
-
breadcrumbs: [{ title: t("account_settings"),
|
|
29
|
-
url: "/settings" }]
|
|
30
|
-
});
|
|
31
|
-
|
|
32
|
-
}, []);
|
|
33
|
-
return <UserSettingsView/>;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
export interface RebaseRouteDefsProps {
|
|
37
|
-
/** User-provided custom routes to include. */
|
|
38
|
-
children?: React.ReactNode;
|
|
39
|
-
/**
|
|
40
|
-
* Wrap function — receives the route tree and lets you wrap it in a layout.
|
|
41
|
-
* If provided, the routes are rendered inside this wrapper.
|
|
42
|
-
* If not provided, routes are rendered directly inside <RebaseRoutes>.
|
|
43
|
-
*/
|
|
44
|
-
layout?: React.ReactElement;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
* Route definitions for the admin.
|
|
49
|
-
*
|
|
50
|
-
* Defines all standard routes: home, studio home, collection view,
|
|
51
|
-
* settings, debug, custom views, and a catch-all 404.
|
|
52
|
-
*
|
|
53
|
-
* **Independently usable**: Use this when you want Rebase routes
|
|
54
|
-
* inside your own layout/navigation setup.
|
|
55
|
-
*
|
|
56
|
-
* @example
|
|
57
|
-
* ```tsx
|
|
58
|
-
* <RebaseNavigation>
|
|
59
|
-
* <RebaseRouteDefs layout={<MyCustomLayout />}>
|
|
60
|
-
* <Route path="/my-custom" element={<MyView />} />
|
|
61
|
-
* </RebaseRouteDefs>
|
|
62
|
-
* </RebaseNavigation>
|
|
63
|
-
* ```
|
|
64
|
-
*/
|
|
65
|
-
export function RebaseRouteDefs({ children, layout }: RebaseRouteDefsProps) {
|
|
66
|
-
const registry = useRebaseRegistry();
|
|
67
|
-
const navigationStateController = useNavigationStateController();
|
|
68
|
-
|
|
69
|
-
const ResolvedHomePage = useComponentOverride("HomePage", DefaultHomePage);
|
|
70
|
-
const cmsHomePage = registry.cmsConfig?.homePage ?? <Suspense fallback={<CircularProgressCenter/>}><ResolvedHomePage/></Suspense>;
|
|
71
|
-
const studioHomePage = registry.studioConfig?.homePage;
|
|
72
|
-
|
|
73
|
-
const combinedViews = useMemo(() => [
|
|
74
|
-
...(navigationStateController.views ?? []),
|
|
75
|
-
...(navigationStateController.adminViews ?? [])
|
|
76
|
-
], [navigationStateController.views, navigationStateController.adminViews]);
|
|
77
|
-
|
|
78
|
-
const routeContents = (
|
|
79
|
-
<>
|
|
80
|
-
{/* Core admin Routes */}
|
|
81
|
-
<Route path={"/"} element={cmsHomePage}/>
|
|
82
|
-
{registry.studioConfig && (
|
|
83
|
-
<Route path={"/s"} element={studioHomePage}/>
|
|
84
|
-
)}
|
|
85
|
-
|
|
86
|
-
<Route path={"/c/*"} element={<RebaseRoute/>}/>
|
|
87
|
-
<Route path={"/settings"} element={<SettingsView/>}/>
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
{/* Hidden debug route */}
|
|
91
|
-
<Route path={"/debug/ui"} element={<UIReferenceView/>}/>
|
|
92
|
-
|
|
93
|
-
{/* Custom Registered Views */}
|
|
94
|
-
{combinedViews.map(view => {
|
|
95
|
-
const slugs = Array.isArray(view.slug) ? view.slug : [view.slug];
|
|
96
|
-
return slugs.flatMap(slug => {
|
|
97
|
-
const routes = [
|
|
98
|
-
<Route key={slug} path={slug} element={<CustomViewRoute view={view}/>}/>
|
|
99
|
-
];
|
|
100
|
-
if (view.nestedRoutes) {
|
|
101
|
-
routes.push(
|
|
102
|
-
<Route key={slug + "/*"} path={slug + "/*"} element={<CustomViewRoute view={view}/>}/>
|
|
103
|
-
);
|
|
104
|
-
}
|
|
105
|
-
return routes;
|
|
106
|
-
});
|
|
107
|
-
})}
|
|
108
|
-
|
|
109
|
-
{/* User Provided Custom Routes */}
|
|
110
|
-
{children}
|
|
111
|
-
|
|
112
|
-
<Route path={"*"} element={navigationStateController.loading ? <CircularProgressCenter/> : <NotFoundPage/>}/>
|
|
113
|
-
</>
|
|
114
|
-
);
|
|
115
|
-
|
|
116
|
-
return (
|
|
117
|
-
<>
|
|
118
|
-
<RebaseRoutes>
|
|
119
|
-
{layout
|
|
120
|
-
? <Route element={layout}>{routeContents}</Route>
|
|
121
|
-
: <Route element={<>{routeContents}</>}>{routeContents}</Route>
|
|
122
|
-
}
|
|
123
|
-
</RebaseRoutes>
|
|
124
|
-
<CollectionEditorDialogs/>
|
|
125
|
-
</>
|
|
126
|
-
);
|
|
127
|
-
}
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
import React, { useMemo } from "react";
|
|
2
|
-
import {
|
|
3
|
-
useRebaseRegistry
|
|
4
|
-
} from "@rebasepro/app";
|
|
5
|
-
import { ErrorBoundary } from "@rebasepro/ui";
|
|
6
|
-
|
|
7
|
-
import { RebaseAuthGate } from "./RebaseAuthGate";
|
|
8
|
-
import { RebaseNavigation } from "./RebaseNavigation";
|
|
9
|
-
import { RebaseLayout } from "./RebaseLayout";
|
|
10
|
-
import { RebaseRouteDefs } from "./RebaseRouteDefs";
|
|
11
|
-
|
|
12
|
-
export interface RebaseShellProps {
|
|
13
|
-
title?: string;
|
|
14
|
-
/** Top bar. Only rendered if provided — pass `<AppBar/>` for the default one. */
|
|
15
|
-
appBar?: React.ReactNode;
|
|
16
|
-
drawer?: React.ReactNode;
|
|
17
|
-
/** Expand the drawer while the pointer is over it. On by default; pass `false` to opt out. Not a load-time default — that is `defaultDrawerOpen`. */
|
|
18
|
-
autoOpenDrawer?: boolean;
|
|
19
|
-
/** Start with the drawer expanded instead of collapsed to icons. Ignored on small layouts. */
|
|
20
|
-
defaultDrawerOpen?: boolean;
|
|
21
|
-
/** Path to the logo shown in the drawer and top bar. Falls back to the Rebase mark. */
|
|
22
|
-
logo?: string;
|
|
23
|
-
children?: React.ReactNode;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* Convenience component that composes all four admin layers:
|
|
28
|
-
*
|
|
29
|
-
* ```
|
|
30
|
-
* <RebaseAuthGate>
|
|
31
|
-
* <RebaseNavigation>
|
|
32
|
-
* <RebaseRouteDefs layout={<RebaseLayout>}>
|
|
33
|
-
* {children}
|
|
34
|
-
* </RebaseRouteDefs>
|
|
35
|
-
* </RebaseNavigation>
|
|
36
|
-
* </RebaseAuthGate>
|
|
37
|
-
* ```
|
|
38
|
-
*
|
|
39
|
-
* Each layer is independently usable — see their individual docs.
|
|
40
|
-
* RebaseShell is sugar that composes them all with sensible defaults.
|
|
41
|
-
*/
|
|
42
|
-
export function RebaseShell(props: RebaseShellProps) {
|
|
43
|
-
const {
|
|
44
|
-
title = "Rebase",
|
|
45
|
-
appBar,
|
|
46
|
-
drawer,
|
|
47
|
-
autoOpenDrawer = true,
|
|
48
|
-
defaultDrawerOpen = false,
|
|
49
|
-
logo,
|
|
50
|
-
children
|
|
51
|
-
} = props;
|
|
52
|
-
|
|
53
|
-
const registry = useRebaseRegistry();
|
|
54
|
-
|
|
55
|
-
// Compute devViews for the layout's AdminModeSyncer
|
|
56
|
-
const devViews = useMemo(() => {
|
|
57
|
-
return registry.studioConfig?.devViews ?? [];
|
|
58
|
-
}, [registry.studioConfig?.devViews]);
|
|
59
|
-
|
|
60
|
-
return (
|
|
61
|
-
<RebaseAuthGate>
|
|
62
|
-
<RebaseNavigation>
|
|
63
|
-
<ErrorBoundary fullPage>
|
|
64
|
-
<RebaseRouteDefs
|
|
65
|
-
layout={
|
|
66
|
-
<RebaseLayout
|
|
67
|
-
title={title}
|
|
68
|
-
appBar={appBar}
|
|
69
|
-
drawer={drawer}
|
|
70
|
-
autoOpenDrawer={autoOpenDrawer}
|
|
71
|
-
defaultDrawerOpen={defaultDrawerOpen}
|
|
72
|
-
logo={logo}
|
|
73
|
-
devViews={devViews}
|
|
74
|
-
/>
|
|
75
|
-
}
|
|
76
|
-
>
|
|
77
|
-
{children}
|
|
78
|
-
</RebaseRouteDefs>
|
|
79
|
-
</ErrorBoundary>
|
|
80
|
-
</RebaseNavigation>
|
|
81
|
-
</RebaseAuthGate>
|
|
82
|
-
);
|
|
83
|
-
}
|