@rebasepro/cms 0.17.3 → 0.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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,273 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
import type { AppView, UrlController, RebasePlugin, NavigationEntry, NavigationGroupMapping, NavigationResult, AdminCollection } from "@rebasepro/cms-types";
|
|
3
|
-
import { useCallback, useMemo, useRef } from "react";
|
|
4
|
-
import { deepEqual as equal } from "fast-equals";
|
|
5
|
-
|
|
6
|
-
import { CollectionRegistryController } from "@rebasepro/types";
|
|
7
|
-
import { CollectionRegistry } from "@rebasepro/common";
|
|
8
|
-
|
|
9
|
-
import { computeNavigationGroups, getGroup, isBottomPinnedGroupName, NAVIGATION_ADMIN_GROUP_NAME, NAVIGATION_DEFAULT_GROUP_NAME } from "./utils";
|
|
10
|
-
|
|
11
|
-
export type UseTopLevelNavigationProps = {
|
|
12
|
-
collections: AdminCollection[];
|
|
13
|
-
views: AppView[] | undefined;
|
|
14
|
-
adminViews: AppView[] | undefined;
|
|
15
|
-
plugins?: RebasePlugin[];
|
|
16
|
-
navigationGroupMappings?: NavigationGroupMapping[];
|
|
17
|
-
viewsOrder?: string[];
|
|
18
|
-
urlController: UrlController;
|
|
19
|
-
adminMode?: "cms" | "studio" | "settings";
|
|
20
|
-
collectionRegistryController: CollectionRegistryController & { collectionRegistryRef: React.MutableRefObject<CollectionRegistry> };
|
|
21
|
-
};
|
|
22
|
-
|
|
23
|
-
export type UseTopLevelNavigationResult = {
|
|
24
|
-
topLevelNavigation: NavigationResult | undefined;
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* Hook that computes the top-level NavigationResult from resolved collections,
|
|
29
|
-
* views, and admin views. Pure computation — no async, no effects.
|
|
30
|
-
*
|
|
31
|
-
* The `onNavigationEntriesUpdate` callback is embedded in the result for API
|
|
32
|
-
* compatibility, but its reference is stable via useCallback.
|
|
33
|
-
*/
|
|
34
|
-
export function useTopLevelNavigation(
|
|
35
|
-
props: UseTopLevelNavigationProps
|
|
36
|
-
): UseTopLevelNavigationResult {
|
|
37
|
-
|
|
38
|
-
const {
|
|
39
|
-
collections,
|
|
40
|
-
views,
|
|
41
|
-
adminViews,
|
|
42
|
-
plugins,
|
|
43
|
-
navigationGroupMappings,
|
|
44
|
-
viewsOrder,
|
|
45
|
-
urlController,
|
|
46
|
-
adminMode,
|
|
47
|
-
collectionRegistryController
|
|
48
|
-
} = props;
|
|
49
|
-
|
|
50
|
-
const pluginGroups = useMemo(() => {
|
|
51
|
-
const allPluginGroups = plugins?.flatMap(plugin => plugin.hooks?.navigationEntries ? plugin.hooks.navigationEntries.map(e => e.name) : []) ?? [];
|
|
52
|
-
return [...new Set(allPluginGroups)];
|
|
53
|
-
}, [plugins]);
|
|
54
|
-
|
|
55
|
-
// Stable reference to the drag-and-drop update callback.
|
|
56
|
-
// We use a ref-based approach internally so the callback identity doesn't
|
|
57
|
-
// change when collections/views change (which would cause NavigationResult
|
|
58
|
-
// equality to always fail).
|
|
59
|
-
const onNavigationEntriesOrderUpdate = useCallback((entries: NavigationGroupMapping[]) => {
|
|
60
|
-
if (!plugins) {
|
|
61
|
-
return;
|
|
62
|
-
}
|
|
63
|
-
// remove all groups that have no entries
|
|
64
|
-
const filteredEntries = entries.filter(entry => entry.entries.length > 0);
|
|
65
|
-
|
|
66
|
-
// Persist to backend via plugins
|
|
67
|
-
if (plugins.some((plugin: RebasePlugin) => plugin.hooks?.onNavigationEntriesUpdate)) {
|
|
68
|
-
plugins.forEach((plugin: RebasePlugin) => {
|
|
69
|
-
if (plugin.hooks?.onNavigationEntriesUpdate) {
|
|
70
|
-
plugin.hooks.onNavigationEntriesUpdate(filteredEntries);
|
|
71
|
-
}
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
}, [plugins]);
|
|
75
|
-
|
|
76
|
-
const topLevelNavigationRef = useRef<NavigationResult | undefined>(undefined);
|
|
77
|
-
|
|
78
|
-
const topLevelNavigation = useMemo(() => {
|
|
79
|
-
// Don't compute until we have collections and views resolved
|
|
80
|
-
if (!views && !adminViews && collections.length === 0) {
|
|
81
|
-
return undefined;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
const finalNavigationGroupMappings: NavigationGroupMapping[] = computeNavigationGroups({
|
|
85
|
-
navigationGroupMappings,
|
|
86
|
-
collections,
|
|
87
|
-
views: views,
|
|
88
|
-
plugins
|
|
89
|
-
});
|
|
90
|
-
|
|
91
|
-
const allPluginNavigationEntries = finalNavigationGroupMappings.map((g) => g.entries).flat() ?? [];
|
|
92
|
-
const navigationEntriesOrder = ([...new Set(allPluginNavigationEntries)]);
|
|
93
|
-
|
|
94
|
-
let navigationEntries: NavigationEntry[] = [
|
|
95
|
-
...(collections ?? []).reduce((acc, collection) => {
|
|
96
|
-
if (collection.hideFromNavigation) return acc;
|
|
97
|
-
|
|
98
|
-
const pathKey = collection.slug;
|
|
99
|
-
let groupName = getGroup(collection);
|
|
100
|
-
|
|
101
|
-
if (finalNavigationGroupMappings) {
|
|
102
|
-
for (const pluginGroupDef of finalNavigationGroupMappings) {
|
|
103
|
-
if (pluginGroupDef.entries.includes(pathKey)) {
|
|
104
|
-
groupName = pluginGroupDef.name;
|
|
105
|
-
break;
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
acc.push({
|
|
111
|
-
id: `collection:${pathKey}`,
|
|
112
|
-
url: urlController.buildUrlCollectionPath(pathKey),
|
|
113
|
-
type: "collection",
|
|
114
|
-
name: collection.name.trim(),
|
|
115
|
-
slug: pathKey,
|
|
116
|
-
collection,
|
|
117
|
-
description: collection.description?.trim(),
|
|
118
|
-
group: groupName ?? NAVIGATION_DEFAULT_GROUP_NAME
|
|
119
|
-
});
|
|
120
|
-
return acc;
|
|
121
|
-
}, [] as NavigationEntry[]),
|
|
122
|
-
|
|
123
|
-
...(views ?? []).reduce((acc, view) => {
|
|
124
|
-
if (view.hideFromNavigation) return acc;
|
|
125
|
-
|
|
126
|
-
const pathKey = view.slug;
|
|
127
|
-
let groupName = getGroup(view);
|
|
128
|
-
|
|
129
|
-
if (finalNavigationGroupMappings) {
|
|
130
|
-
for (const pluginGroupDef of finalNavigationGroupMappings) {
|
|
131
|
-
if (pluginGroupDef.entries.includes(pathKey)) {
|
|
132
|
-
groupName = pluginGroupDef.name;
|
|
133
|
-
break;
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
const basePathKey = Array.isArray(pathKey) ? pathKey[0] : pathKey;
|
|
139
|
-
acc.push({
|
|
140
|
-
id: `view:${pathKey}`,
|
|
141
|
-
url: urlController.buildAppUrlPath(basePathKey),
|
|
142
|
-
name: view.name.trim(),
|
|
143
|
-
type: "view",
|
|
144
|
-
slug: view.slug,
|
|
145
|
-
view,
|
|
146
|
-
description: view.description?.trim(),
|
|
147
|
-
group: groupName ?? NAVIGATION_DEFAULT_GROUP_NAME
|
|
148
|
-
});
|
|
149
|
-
return acc;
|
|
150
|
-
}, [] as NavigationEntry[]),
|
|
151
|
-
|
|
152
|
-
...(adminViews ?? []).reduce((acc, adminView) => {
|
|
153
|
-
if (adminView.hideFromNavigation) return acc;
|
|
154
|
-
|
|
155
|
-
const pathKey = adminView.slug;
|
|
156
|
-
let groupName = adminView.group?.trim() || NAVIGATION_ADMIN_GROUP_NAME;
|
|
157
|
-
|
|
158
|
-
if (finalNavigationGroupMappings) {
|
|
159
|
-
for (const pluginGroupDef of finalNavigationGroupMappings) {
|
|
160
|
-
if (pluginGroupDef.entries.includes(pathKey)) {
|
|
161
|
-
groupName = pluginGroupDef.name;
|
|
162
|
-
break;
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
acc.push({
|
|
168
|
-
id: `admin:${pathKey}`,
|
|
169
|
-
url: urlController.buildAppUrlPath(pathKey),
|
|
170
|
-
name: adminView.name.trim(),
|
|
171
|
-
type: "admin",
|
|
172
|
-
slug: adminView.slug,
|
|
173
|
-
view: adminView,
|
|
174
|
-
description: adminView.description?.trim(),
|
|
175
|
-
group: groupName
|
|
176
|
-
});
|
|
177
|
-
return acc;
|
|
178
|
-
}, [] as NavigationEntry[])
|
|
179
|
-
];
|
|
180
|
-
|
|
181
|
-
// Groups that sink to the bottom. Two sources, because the string
|
|
182
|
-
// comparison predates the flag and apps depend on it: the names in
|
|
183
|
-
// `NAVIGATION_BOTTOM_GROUP_NAMES`, and any group holding a view that
|
|
184
|
-
// asked for it — which is the only one of the two that survives the
|
|
185
|
-
// group being renamed or translated.
|
|
186
|
-
const pinnedGroups = new Set<string>();
|
|
187
|
-
for (const view of [...(views ?? []), ...(adminViews ?? [])]) {
|
|
188
|
-
if (view.pinToBottom) pinnedGroups.add(getGroup(view));
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
const groupOrderValue = (groupName?: string): number =>
|
|
192
|
-
(isBottomPinnedGroupName(groupName) || (groupName !== undefined && pinnedGroups.has(groupName))) ? 1 : 0;
|
|
193
|
-
|
|
194
|
-
const usedViewsOrder = viewsOrder ?? navigationEntriesOrder;
|
|
195
|
-
navigationEntries = navigationEntries.sort((a, b) => {
|
|
196
|
-
// Primary: group priority (admin/settings last)
|
|
197
|
-
const groupDiff = groupOrderValue(a.group) - groupOrderValue(b.group);
|
|
198
|
-
if (groupDiff !== 0) return groupDiff;
|
|
199
|
-
|
|
200
|
-
// Secondary: explicit view order (if provided)
|
|
201
|
-
if (usedViewsOrder) {
|
|
202
|
-
const getSortPath = (navEntry: NavigationEntry) => typeof navEntry.slug === "string" ? navEntry.slug : navEntry.slug[0];
|
|
203
|
-
const aIndex = usedViewsOrder.indexOf(getSortPath(a));
|
|
204
|
-
const bIndex = usedViewsOrder.indexOf(getSortPath(b));
|
|
205
|
-
if (aIndex !== -1 || bIndex !== -1) {
|
|
206
|
-
if (aIndex === -1) return 1;
|
|
207
|
-
if (bIndex === -1) return -1;
|
|
208
|
-
return aIndex - bIndex;
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
return 0;
|
|
213
|
-
});
|
|
214
|
-
|
|
215
|
-
const collectedGroupsFromEntries = navigationEntries
|
|
216
|
-
.map(e => e.group)
|
|
217
|
-
.filter(Boolean) as string[];
|
|
218
|
-
|
|
219
|
-
const groupsFromMappings = finalNavigationGroupMappings.map(g => g.name);
|
|
220
|
-
const additionalGroups = collectedGroupsFromEntries.filter(g => !groupsFromMappings.includes(g));
|
|
221
|
-
|
|
222
|
-
const allDefinedGroups = [
|
|
223
|
-
...(pluginGroups ?? []),
|
|
224
|
-
...groupsFromMappings,
|
|
225
|
-
...additionalGroups
|
|
226
|
-
];
|
|
227
|
-
|
|
228
|
-
const uniqueGroupsArray = [...new Set(allDefinedGroups)];
|
|
229
|
-
// Same rule the entry sort uses — read through `groupOrderValue` rather
|
|
230
|
-
// than repeated inline, so the drawer's group order and the entries
|
|
231
|
-
// inside it cannot disagree about which groups are last.
|
|
232
|
-
const lastGroups = uniqueGroupsArray.filter(g => groupOrderValue(g) === 1);
|
|
233
|
-
const otherGroups = uniqueGroupsArray.filter(g => groupOrderValue(g) === 0);
|
|
234
|
-
const uniqueGroups = [...otherGroups, ...lastGroups] as string[];
|
|
235
|
-
|
|
236
|
-
const computedTopLevelNav = {
|
|
237
|
-
allowDragAndDrop: plugins?.some((plugin: RebasePlugin) => plugin.hooks?.allowDragAndDrop) ?? false,
|
|
238
|
-
navigationEntries,
|
|
239
|
-
groups: uniqueGroups,
|
|
240
|
-
onNavigationEntriesUpdate: onNavigationEntriesOrderUpdate
|
|
241
|
-
};
|
|
242
|
-
|
|
243
|
-
// Cache the newly computed navigation result and return the cached reference
|
|
244
|
-
// if it is deeply equal to the previous one, to prevent reference churn.
|
|
245
|
-
const isNavEqual = topLevelNavigationRef.current &&
|
|
246
|
-
equal(topLevelNavigationRef.current.navigationEntries, computedTopLevelNav.navigationEntries) &&
|
|
247
|
-
equal(topLevelNavigationRef.current.groups, computedTopLevelNav.groups) &&
|
|
248
|
-
topLevelNavigationRef.current.allowDragAndDrop === computedTopLevelNav.allowDragAndDrop;
|
|
249
|
-
|
|
250
|
-
if (isNavEqual) {
|
|
251
|
-
return topLevelNavigationRef.current;
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
topLevelNavigationRef.current = computedTopLevelNav;
|
|
255
|
-
return computedTopLevelNav;
|
|
256
|
-
}, [
|
|
257
|
-
collections,
|
|
258
|
-
views,
|
|
259
|
-
adminViews,
|
|
260
|
-
navigationGroupMappings,
|
|
261
|
-
urlController.buildAppUrlPath,
|
|
262
|
-
urlController.buildUrlCollectionPath,
|
|
263
|
-
pluginGroups,
|
|
264
|
-
plugins,
|
|
265
|
-
adminMode,
|
|
266
|
-
viewsOrder,
|
|
267
|
-
onNavigationEntriesOrderUpdate
|
|
268
|
-
]);
|
|
269
|
-
|
|
270
|
-
return useMemo(() => ({
|
|
271
|
-
topLevelNavigation
|
|
272
|
-
}), [topLevelNavigation]);
|
|
273
|
-
}
|
|
@@ -1,200 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
import type { AppView, RebasePlugin, NavigationGroupMapping, AdminCollection } from "@rebasepro/cms-types";
|
|
3
|
-
|
|
4
|
-
import { getSubcollections } from "@rebasepro/common";
|
|
5
|
-
import { deepEqual as equal } from "fast-equals";
|
|
6
|
-
|
|
7
|
-
export const NAVIGATION_DEFAULT_GROUP_NAME = "Views";
|
|
8
|
-
export const NAVIGATION_ADMIN_GROUP_NAME = "Admin";
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Group names that sink to the bottom of the drawer on their name alone.
|
|
12
|
-
*
|
|
13
|
-
* A magic string, and it stays one for compatibility: apps have been relying on
|
|
14
|
-
* `group: "Settings"` landing last since before there was a flag, and taking it
|
|
15
|
-
* away would silently reshuffle their navigation.
|
|
16
|
-
*
|
|
17
|
-
* It is a bad way to ask for the behaviour, though — it is invisible from the
|
|
18
|
-
* `group?: string` type, and it is defeated by the most ordinary edit there is:
|
|
19
|
-
* translating the label. `group: "Ajustes"` is the same group to a reader and a
|
|
20
|
-
* different one to this comparison, so the ordering just quietly stops
|
|
21
|
-
* happening. Set {@link AppView.pinToBottom} instead, which says so.
|
|
22
|
-
*/
|
|
23
|
-
export const NAVIGATION_BOTTOM_GROUP_NAMES = ["Admin", "Settings"] as const;
|
|
24
|
-
|
|
25
|
-
/** Whether a group sinks to the bottom by virtue of its name. @see NAVIGATION_BOTTOM_GROUP_NAMES */
|
|
26
|
-
export function isBottomPinnedGroupName(groupName?: string): boolean {
|
|
27
|
-
return groupName !== undefined && (NAVIGATION_BOTTOM_GROUP_NAMES as readonly string[]).includes(groupName);
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
export function getGroup(collectionOrView: AdminCollection | AppView) {
|
|
31
|
-
const trimmed = collectionOrView.group?.trim();
|
|
32
|
-
if (!trimmed || trimmed === "") {
|
|
33
|
-
return NAVIGATION_DEFAULT_GROUP_NAME;
|
|
34
|
-
}
|
|
35
|
-
return trimmed;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
export function computeNavigationGroups({
|
|
39
|
-
navigationGroupMappings,
|
|
40
|
-
collections,
|
|
41
|
-
views,
|
|
42
|
-
plugins
|
|
43
|
-
}: {
|
|
44
|
-
navigationGroupMappings?: NavigationGroupMapping[],
|
|
45
|
-
collections?: AdminCollection[],
|
|
46
|
-
views?: AppView[],
|
|
47
|
-
plugins?: RebasePlugin[]
|
|
48
|
-
}): NavigationGroupMapping[] {
|
|
49
|
-
|
|
50
|
-
// Deep clone the input groups upfront to avoid mutating the caller's data
|
|
51
|
-
let result = navigationGroupMappings
|
|
52
|
-
? navigationGroupMappings.map(g => ({
|
|
53
|
-
name: g.name,
|
|
54
|
-
entries: [...g.entries],
|
|
55
|
-
...(g.collapsedByDefault !== undefined && { collapsedByDefault: g.collapsedByDefault })
|
|
56
|
-
}))
|
|
57
|
-
: navigationGroupMappings;
|
|
58
|
-
|
|
59
|
-
// Merge plugin navigation entries
|
|
60
|
-
if (plugins) {
|
|
61
|
-
result = plugins.reduce((acc, plugin) => {
|
|
62
|
-
if (plugin.hooks?.navigationEntries) {
|
|
63
|
-
plugin.hooks.navigationEntries.forEach((entry) => {
|
|
64
|
-
const {
|
|
65
|
-
name,
|
|
66
|
-
entries
|
|
67
|
-
} = entry;
|
|
68
|
-
const existingGroup = acc.find(g => g.name === name);
|
|
69
|
-
if (existingGroup) {
|
|
70
|
-
existingGroup.entries.push(...entries);
|
|
71
|
-
} else {
|
|
72
|
-
acc.push({
|
|
73
|
-
name,
|
|
74
|
-
entries: [...entries]
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
});
|
|
78
|
-
|
|
79
|
-
}
|
|
80
|
-
return acc;
|
|
81
|
-
}, result ?? []);
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
// Track all entries that are already assigned to groups
|
|
85
|
-
const assignedEntries = new Set<string>();
|
|
86
|
-
if (result) {
|
|
87
|
-
result.forEach(group => {
|
|
88
|
-
group.entries.forEach(entry => assignedEntries.add(entry));
|
|
89
|
-
});
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
// Find collections and views that are NOT in any persisted group
|
|
93
|
-
const unassignedGroupMap: Record<string, string[]> = {};
|
|
94
|
-
|
|
95
|
-
// Check collections
|
|
96
|
-
(collections ?? []).forEach(collection => {
|
|
97
|
-
if (collection.hideFromNavigation) return;
|
|
98
|
-
const entry = collection.slug;
|
|
99
|
-
if (!assignedEntries.has(entry)) {
|
|
100
|
-
const groupName = getGroup(collection);
|
|
101
|
-
if (!unassignedGroupMap[groupName]) unassignedGroupMap[groupName] = [];
|
|
102
|
-
unassignedGroupMap[groupName].push(entry);
|
|
103
|
-
}
|
|
104
|
-
});
|
|
105
|
-
|
|
106
|
-
// Check views
|
|
107
|
-
(views ?? []).forEach(view => {
|
|
108
|
-
if (view.hideFromNavigation) return;
|
|
109
|
-
const entry = Array.isArray(view.slug) ? view.slug[0] : view.slug;
|
|
110
|
-
if (!assignedEntries.has(entry)) {
|
|
111
|
-
const groupName = getGroup(view);
|
|
112
|
-
if (!unassignedGroupMap[groupName]) unassignedGroupMap[groupName] = [];
|
|
113
|
-
unassignedGroupMap[groupName].push(entry);
|
|
114
|
-
}
|
|
115
|
-
});
|
|
116
|
-
|
|
117
|
-
// Merge unassigned entries into existing groups or create new groups
|
|
118
|
-
Object.entries(unassignedGroupMap).forEach(([groupName, entries]) => {
|
|
119
|
-
if (result) {
|
|
120
|
-
const existingGroup = result.find(g => g.name === groupName);
|
|
121
|
-
if (existingGroup) {
|
|
122
|
-
existingGroup.entries.push(...entries);
|
|
123
|
-
} else {
|
|
124
|
-
result.push({
|
|
125
|
-
name: groupName,
|
|
126
|
-
entries
|
|
127
|
-
});
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
});
|
|
131
|
-
|
|
132
|
-
if (!result) {
|
|
133
|
-
// No persisted data at all - create from scratch
|
|
134
|
-
result = [];
|
|
135
|
-
const groupMap: Record<string, string[]> = {};
|
|
136
|
-
|
|
137
|
-
// Add collections
|
|
138
|
-
(collections ?? []).forEach(collection => {
|
|
139
|
-
if (collection.hideFromNavigation) return;
|
|
140
|
-
const name = getGroup(collection);
|
|
141
|
-
const entry = collection.slug;
|
|
142
|
-
if (!groupMap[name]) groupMap[name] = [];
|
|
143
|
-
groupMap[name].push(entry);
|
|
144
|
-
});
|
|
145
|
-
|
|
146
|
-
// Add views
|
|
147
|
-
(views ?? []).forEach(view => {
|
|
148
|
-
if (view.hideFromNavigation) return;
|
|
149
|
-
const name = getGroup(view);
|
|
150
|
-
const entry = Array.isArray(view.slug) ? view.slug[0] : view.slug;
|
|
151
|
-
if (!groupMap[name]) groupMap[name] = [];
|
|
152
|
-
groupMap[name].push(entry);
|
|
153
|
-
});
|
|
154
|
-
|
|
155
|
-
// Convert groupMap to result array
|
|
156
|
-
result = Object.entries(groupMap).map(([name, entries]) => ({
|
|
157
|
-
name,
|
|
158
|
-
entries
|
|
159
|
-
}));
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
// Remove duplicates in entries
|
|
163
|
-
result.forEach(group => {
|
|
164
|
-
group.entries = [...new Set(group.entries)];
|
|
165
|
-
});
|
|
166
|
-
|
|
167
|
-
return result;
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
export function areCollectionListsEqual(a: AdminCollection[], b: AdminCollection[], visitedSlugs: string[] = []) {
|
|
171
|
-
if (a.length !== b.length) {
|
|
172
|
-
return false;
|
|
173
|
-
}
|
|
174
|
-
const aCopy = [...a];
|
|
175
|
-
const bCopy = [...b];
|
|
176
|
-
const aSorted = aCopy.sort((x, y) => x.slug.localeCompare(y.slug));
|
|
177
|
-
const bSorted = bCopy.sort((x, y) => x.slug.localeCompare(y.slug));
|
|
178
|
-
return aSorted.every((value, index) => areCollectionsEqual(value, bSorted[index], visitedSlugs));
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
export function areCollectionsEqual(a: AdminCollection, b: AdminCollection, visitedSlugs: string[] = []) {
|
|
182
|
-
if (a.slug !== b.slug) {
|
|
183
|
-
return false;
|
|
184
|
-
}
|
|
185
|
-
if (visitedSlugs.includes(a.slug)) {
|
|
186
|
-
return true;
|
|
187
|
-
}
|
|
188
|
-
const newVisited = [...visitedSlugs, a.slug];
|
|
189
|
-
|
|
190
|
-
if (!areCollectionListsEqual(getSubcollections(a), getSubcollections(b), newVisited)) {
|
|
191
|
-
return false;
|
|
192
|
-
}
|
|
193
|
-
const restAWithoutFunctions = Object.fromEntries(
|
|
194
|
-
Object.entries(a).filter(([k, v]) => typeof v !== "function" && k !== "subcollections")
|
|
195
|
-
);
|
|
196
|
-
const restBWithoutFunctions = Object.fromEntries(
|
|
197
|
-
Object.entries(b).filter(([k, v]) => typeof v !== "function" && k !== "subcollections")
|
|
198
|
-
);
|
|
199
|
-
return equal(restAWithoutFunctions, restBWithoutFunctions);
|
|
200
|
-
}
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
import { useMemo } from "react";
|
|
2
|
-
import { useRebaseContext } from "@rebasepro/app";
|
|
3
|
-
import type {
|
|
4
|
-
User
|
|
5
|
-
} from "@rebasepro/types";
|
|
6
|
-
import type {
|
|
7
|
-
AuthController,
|
|
8
|
-
RebaseContext,
|
|
9
|
-
SideDialogsController,
|
|
10
|
-
SidePanelController
|
|
11
|
-
} from "@rebasepro/cms-types";
|
|
12
|
-
import type {
|
|
13
|
-
CollectionRegistryController
|
|
14
|
-
} from "@rebasepro/types";
|
|
15
|
-
import type {
|
|
16
|
-
NavigationStateController,
|
|
17
|
-
UrlController
|
|
18
|
-
} from "@rebasepro/cms-types";
|
|
19
|
-
import { useSidePanel } from "./useSidePanel";
|
|
20
|
-
import { useSideDialogsController } from "./useSideDialogsController";
|
|
21
|
-
import {
|
|
22
|
-
useUrlController,
|
|
23
|
-
useNavigationStateController,
|
|
24
|
-
useCollectionRegistryController
|
|
25
|
-
} from "./navigation/contexts";
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* The admin context extends the core RebaseContext with admin-specific
|
|
29
|
-
* controllers that are only available inside the admin routing tree.
|
|
30
|
-
*
|
|
31
|
-
* Use {@link useAdminContext} to obtain an instance.
|
|
32
|
-
* @group Hooks and utilities
|
|
33
|
-
*/
|
|
34
|
-
export type AdminContext<
|
|
35
|
-
DB = Record<string, unknown>,
|
|
36
|
-
USER extends User = User,
|
|
37
|
-
AuthControllerType extends AuthController<USER> = AuthController<USER>
|
|
38
|
-
> = RebaseContext<USER, AuthControllerType> & {
|
|
39
|
-
sidePanelController: SidePanelController;
|
|
40
|
-
sideDialogsController: SideDialogsController;
|
|
41
|
-
urlController: UrlController;
|
|
42
|
-
navigationStateController: NavigationStateController;
|
|
43
|
-
collectionRegistryController: CollectionRegistryController<DB>;
|
|
44
|
-
};
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
* Hook that builds a fully-populated admin context by combining the
|
|
48
|
-
* core {@link RebaseContext} with admin-specific controllers.
|
|
49
|
-
*
|
|
50
|
-
* Use this instead of `useRebaseContext()` in admin components that
|
|
51
|
-
* need to pass context to entity action callbacks, plugin slots,
|
|
52
|
-
* or any consumer that expects admin controllers on the context object.
|
|
53
|
-
*
|
|
54
|
-
* @group Hooks and utilities
|
|
55
|
-
*/
|
|
56
|
-
export function useAdminContext<
|
|
57
|
-
DB = Record<string, unknown>,
|
|
58
|
-
USER extends User = User,
|
|
59
|
-
AuthControllerType extends AuthController<USER> = AuthController<USER>
|
|
60
|
-
>(): AdminContext<DB, USER, AuthControllerType> {
|
|
61
|
-
const baseContext = useRebaseContext<USER, AuthControllerType>();
|
|
62
|
-
const sidePanelController = useSidePanel();
|
|
63
|
-
const sideDialogsController = useSideDialogsController();
|
|
64
|
-
const urlController = useUrlController();
|
|
65
|
-
const navigationStateController = useNavigationStateController();
|
|
66
|
-
const collectionRegistryController = useCollectionRegistryController<DB>();
|
|
67
|
-
|
|
68
|
-
return useMemo(() => ({
|
|
69
|
-
...baseContext,
|
|
70
|
-
sidePanelController,
|
|
71
|
-
sideDialogsController,
|
|
72
|
-
urlController,
|
|
73
|
-
navigationStateController,
|
|
74
|
-
collectionRegistryController
|
|
75
|
-
}), [
|
|
76
|
-
baseContext,
|
|
77
|
-
sidePanelController,
|
|
78
|
-
sideDialogsController,
|
|
79
|
-
urlController,
|
|
80
|
-
navigationStateController,
|
|
81
|
-
collectionRegistryController
|
|
82
|
-
]);
|
|
83
|
-
}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { useContext } from "react";
|
|
2
|
-
import { BreadcrumbContext } from "../contexts/BreacrumbsContext";
|
|
3
|
-
import { BreadcrumbEntry, BreadcrumbsController } from "@rebasepro/cms-types";
|
|
4
|
-
|
|
5
|
-
export type { BreadcrumbEntry, BreadcrumbsController };
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Hook to retrieve the BreadcrumbsController.
|
|
10
|
-
*
|
|
11
|
-
* Consider that in order to use this hook you need to have a parent
|
|
12
|
-
* `Rebase`
|
|
13
|
-
*
|
|
14
|
-
* @see BreadcrumbsController
|
|
15
|
-
* @group Hooks and utilities
|
|
16
|
-
*/
|
|
17
|
-
export const useBreadcrumbsController = (): BreadcrumbsController => useContext(BreadcrumbContext);
|