@rebasepro/admin 0.10.0 → 0.10.1-canary.0a881d4
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/dist/{CollectionEditorDialog-BOlKGGg7.js → CollectionEditorDialog-DMztwJ5S.js} +12 -12
- package/dist/CollectionEditorDialog-DMztwJ5S.js.map +1 -0
- package/dist/{PropertyEditView-i51tFOfM.js → PropertyEditView-CjFCnftn.js} +18 -18
- package/dist/PropertyEditView-CjFCnftn.js.map +1 -0
- package/dist/{RouterCollectionsStudioView-Dh4W53PU.js → RouterCollectionsStudioView-nDFQdKHA.js} +4 -4
- package/dist/RouterCollectionsStudioView-nDFQdKHA.js.map +1 -0
- package/dist/collection_editor/api/generateCollectionApi.d.ts +4 -4
- package/dist/collection_editor/pgColumnToProperty.d.ts +4 -3
- package/dist/collection_editor/serializable_types.d.ts +31 -30
- package/dist/collection_editor/serializable_utils.d.ts +6 -5
- package/dist/collection_editor/types/collection_editor_controller.d.ts +6 -5
- package/dist/collection_editor/types/collection_inference.d.ts +3 -2
- package/dist/collection_editor/types/config_controller.d.ts +8 -7
- package/dist/collection_editor/ui/AddKanbanColumnAction.d.ts +2 -2
- package/dist/collection_editor/ui/CollectionViewHeaderAction.d.ts +3 -2
- package/dist/collection_editor/ui/EditorCollectionAction.d.ts +1 -1
- package/dist/collection_editor/ui/EditorCollectionActionStart.d.ts +1 -1
- package/dist/collection_editor/ui/EditorEntityAction.d.ts +1 -1
- package/dist/collection_editor/ui/HomePageEditorCollectionAction.d.ts +1 -1
- package/dist/collection_editor/ui/KanbanSetupAction.d.ts +2 -2
- package/dist/collection_editor/ui/NewCollectionCard.d.ts +1 -1
- package/dist/collection_editor/ui/PropertyAddColumnComponent.d.ts +2 -2
- package/dist/collection_editor/ui/collection_editor/AICollectionGeneratorPopover.d.ts +3 -3
- package/dist/collection_editor/ui/collection_editor/CollectionDetailsForm.d.ts +2 -2
- package/dist/collection_editor/ui/collection_editor/CollectionEditorDialog.d.ts +5 -4
- package/dist/collection_editor/ui/collection_editor/CollectionEditorWelcomeView.d.ts +2 -2
- package/dist/collection_editor/ui/collection_editor/CollectionJsonImportDialog.d.ts +2 -2
- package/dist/collection_editor/ui/collection_editor/CollectionPropertiesEditorForm.d.ts +3 -2
- package/dist/collection_editor/ui/collection_editor/CollectionStudioView.d.ts +2 -2
- package/dist/collection_editor/ui/collection_editor/CollectionsStudioView.d.ts +2 -2
- package/dist/collection_editor/ui/collection_editor/EntityActionsEditTab.d.ts +2 -2
- package/dist/collection_editor/ui/collection_editor/GeneralSettingsForm.d.ts +2 -2
- package/dist/collection_editor/ui/collection_editor/GetCodeDialog.d.ts +2 -2
- package/dist/collection_editor/ui/collection_editor/PropertyEditView.d.ts +3 -2
- package/dist/collection_editor/ui/collection_editor/PropertyTree.d.ts +2 -1
- package/dist/collection_editor/ui/collection_editor/SubcollectionsEditTab.d.ts +4 -3
- package/dist/collection_editor/ui/collection_editor/ViewModeSwitch.d.ts +1 -1
- package/dist/collection_editor/ui/collection_editor/import/CollectionEditorImportMapping.d.ts +1 -1
- package/dist/collection_editor/ui/collection_editor/properties/BlockPropertyField.d.ts +1 -1
- package/dist/collection_editor/ui/collection_editor/properties/MapPropertyField.d.ts +1 -1
- package/dist/collection_editor/ui/collection_editor/properties/RepeatPropertyField.d.ts +1 -1
- package/dist/collection_editor/ui/collection_editor/templates/blog_template.d.ts +2 -2
- package/dist/collection_editor/ui/collection_editor/templates/pages_template.d.ts +2 -2
- package/dist/collection_editor/ui/collection_editor/templates/products_template.d.ts +2 -2
- package/dist/collection_editor/ui/collection_editor/templates/users_template.d.ts +2 -2
- package/dist/collection_editor/ui/collection_editor/utils/supported_fields.d.ts +1 -1
- package/dist/collection_editor/ui/collection_editor/utils/update_property_for_widget.d.ts +2 -1
- package/dist/collection_editor/useLocalCollectionsConfigController.d.ts +2 -2
- package/dist/collection_editor/validateCollectionJson.d.ts +2 -2
- package/dist/collection_editor_ui.js +4 -4
- package/dist/components/AdminModeSyncer.d.ts +1 -1
- package/dist/components/ClearFilterSortButton.d.ts +1 -1
- package/dist/components/CollectionPanel.d.ts +2 -2
- package/dist/components/CollectionTableBinding/CollectionRowActions.d.ts +4 -4
- package/dist/components/CollectionTableBinding/CollectionTableBinding.d.ts +1 -1
- package/dist/components/CollectionTableBinding/CollectionTableBindingProps.d.ts +3 -2
- package/dist/components/CollectionTableBinding/fields/TableMultipleRelationField.d.ts +3 -3
- package/dist/components/CollectionTableBinding/fields/TableReferenceField.d.ts +3 -3
- package/dist/components/CollectionTableBinding/fields/TableRelationField.d.ts +3 -3
- package/dist/components/CollectionTableBinding/internal/common.d.ts +2 -2
- package/dist/components/CollectionTableBinding/internal/popup_field/PopupFormField.d.ts +2 -2
- package/dist/components/CollectionViewBinding/BoardCardBinding.d.ts +3 -3
- package/dist/components/CollectionViewBinding/CollectionBoardViewBinding.d.ts +3 -3
- package/dist/components/CollectionViewBinding/CollectionCardViewBinding.d.ts +3 -3
- package/dist/components/CollectionViewBinding/CollectionListViewBinding.d.ts +3 -3
- package/dist/components/CollectionViewBinding/CollectionViewActions.d.ts +2 -3
- package/dist/components/CollectionViewBinding/CollectionViewBinding.d.ts +2 -2
- package/dist/components/CollectionViewBinding/CollectionViewStartActions.d.ts +2 -3
- package/dist/components/CollectionViewBinding/EntityCardBinding.d.ts +3 -3
- package/dist/components/CollectionViewBinding/FilterPresetsButton.d.ts +2 -1
- package/dist/components/CollectionViewBinding/SplitListView.d.ts +3 -3
- package/dist/components/CollectionViewBinding/ViewModeToggle.d.ts +1 -1
- package/dist/components/CollectionViewBinding/hooks/useCollectionInlineEditor.d.ts +3 -2
- package/dist/components/CollectionViewBinding/hooks/useKanbanDragAndDrop.d.ts +3 -2
- package/dist/components/CollectionViewBinding/useBoardDataController.d.ts +2 -2
- package/dist/components/CollectionViewBinding/usePreviewSlots.d.ts +9 -6
- package/dist/components/CollectionViewBinding/useSelectionController.d.ts +2 -1
- package/dist/components/DeleteEntityDialog.d.ts +2 -2
- package/dist/components/DetailViewBinding.d.ts +3 -3
- package/dist/components/DrawerNavigationGroup.d.ts +1 -1
- package/dist/components/EditViewBinding.d.ts +3 -3
- package/dist/components/EntityPreviewBinding.d.ts +3 -3
- package/dist/components/EntityViewBinding.d.ts +2 -2
- package/dist/components/HomePage/ContentHomePage.d.ts +1 -1
- package/dist/components/HomePage/HomePageDnD.d.ts +1 -1
- package/dist/components/HomePage/NavigationCardBinding.d.ts +1 -1
- package/dist/components/PropertyConfigBadge.d.ts +1 -1
- package/dist/components/RebaseAdmin.d.ts +1 -1
- package/dist/components/RebaseLayout.d.ts +1 -1
- package/dist/components/ReferenceTable/SelectionTableBinding.d.ts +2 -2
- package/dist/components/SelectableTable/SelectableTable.d.ts +3 -2
- package/dist/components/SelectableTable/SelectionStore.d.ts +1 -1
- package/dist/components/SelectableTable/filters/FilterFieldBinding.d.ts +2 -2
- package/dist/components/SidePanelBinding.d.ts +1 -1
- package/dist/components/admin/CreationResultDialog.d.ts +1 -1
- package/dist/components/common/default_entity_actions.d.ts +2 -1
- package/dist/components/field_configs.d.ts +3 -2
- package/dist/components/history/EntityHistoryEntry.d.ts +2 -2
- package/dist/components/history/EntityHistoryView.d.ts +1 -1
- package/dist/components/history/LastEditedByFormAction.d.ts +1 -1
- package/dist/components/history/LastEditedByIndicator.d.ts +2 -2
- package/dist/contexts/BreacrumbsContext.d.ts +1 -1
- package/dist/contexts/SideDialogsControllerContext.d.ts +1 -1
- package/dist/contexts/SidePanelControllerContext.d.ts +1 -1
- package/dist/data_export/export/ExportCollectionAction.d.ts +4 -3
- package/dist/data_import/components/ImportSaveInProgress.d.ts +2 -2
- package/dist/data_import/import/ImportCollectionAction.d.ts +2 -1
- package/dist/data_import/utils/data.d.ts +2 -1
- package/dist/{export-BM6HPujv.js → export-CavEbZVF.js} +2 -2
- package/dist/export-CavEbZVF.js.map +1 -0
- package/dist/form/PropertyFieldBinding.d.ts +1 -1
- package/dist/form/form_utils.d.ts +4 -3
- package/dist/{history-CtIPJxvQ.js → history-B1lIsrkX.js} +2 -2
- package/dist/history-B1lIsrkX.js.map +1 -0
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/navigation/contexts/CollectionRegistryContext.d.ts +2 -2
- package/dist/hooks/navigation/contexts/NavigationStateContext.d.ts +1 -1
- package/dist/hooks/navigation/contexts/UrlContext.d.ts +1 -1
- package/dist/hooks/navigation/useBuildCollectionRegistryController.d.ts +2 -1
- package/dist/hooks/navigation/useBuildNavigationStateController.d.ts +7 -5
- package/dist/hooks/navigation/useBuildUrlController.d.ts +1 -1
- package/dist/hooks/navigation/useNavigationResolution.d.ts +6 -5
- package/dist/hooks/navigation/useResolvedCollections.d.ts +8 -7
- package/dist/hooks/navigation/useResolvedViews.d.ts +4 -2
- package/dist/hooks/navigation/useTopLevelNavigation.d.ts +2 -2
- package/dist/hooks/navigation/utils.d.ts +5 -5
- package/dist/hooks/useBreadcrumbsController.d.ts +1 -1
- package/dist/hooks/useBuildSidePanel.d.ts +4 -4
- package/dist/hooks/useCMSContext.d.ts +4 -2
- package/dist/hooks/useResolvedNavigationFrom.d.ts +5 -4
- package/dist/hooks/useResolvedUsers.d.ts +8 -0
- package/dist/hooks/useSideDialogsController.d.ts +1 -1
- package/dist/hooks/useSidePanel.d.ts +1 -1
- package/dist/{import-DzQnT03v.js → import-36UcGe71.js} +2 -2
- package/dist/import-36UcGe71.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +16 -16
- package/dist/index.js.map +1 -1
- package/dist/preview/components/UrlComponentPreview.d.ts +1 -1
- package/dist/preview/components/UserPreview.d.ts +3 -2
- package/dist/preview/property_previews/StringPropertyPreview.d.ts +1 -1
- package/dist/preview/util.d.ts +1 -1
- package/dist/routes/CustomViewRoute.d.ts +1 -1
- package/dist/types/components/EntityFormActionsProps.d.ts +2 -2
- package/dist/types/components/EntityFormProps.d.ts +3 -3
- package/dist/types/fields.d.ts +2 -2
- package/dist/util/dataControllerAdapter.d.ts +1 -1
- package/dist/util/entity_actions.d.ts +1 -1
- package/dist/util/navigation_utils.d.ts +3 -3
- package/dist/util/previews.d.ts +22 -4
- package/dist/util/property_utils.d.ts +3 -2
- package/dist/util/resolutions.d.ts +1 -1
- package/dist/util/view_mode.d.ts +3 -3
- package/dist/{util-XFwQ9FEc.js → util-CPgUM4M8.js} +353 -221
- package/dist/util-CPgUM4M8.js.map +1 -0
- package/package.json +11 -9
- package/src/collection_editor/ConfigControllerProvider.tsx +11 -12
- package/src/collection_editor/api/generateCollectionApi.ts +4 -4
- package/src/collection_editor/pgColumnToProperty.ts +4 -3
- package/src/collection_editor/serializable_types.ts +36 -34
- package/src/collection_editor/serializable_utils.ts +17 -32
- package/src/collection_editor/types/collection_editor_controller.tsx +6 -5
- package/src/collection_editor/types/collection_inference.ts +3 -2
- package/src/collection_editor/types/config_controller.tsx +8 -7
- package/src/collection_editor/ui/AddKanbanColumnAction.tsx +3 -2
- package/src/collection_editor/ui/CollectionViewHeaderAction.tsx +3 -2
- package/src/collection_editor/ui/EditorCollectionAction.tsx +3 -2
- package/src/collection_editor/ui/EditorCollectionActionStart.tsx +3 -2
- package/src/collection_editor/ui/EditorEntityAction.tsx +3 -2
- package/src/collection_editor/ui/HomePageEditorCollectionAction.tsx +1 -1
- package/src/collection_editor/ui/KanbanSetupAction.tsx +3 -2
- package/src/collection_editor/ui/MissingReferenceWidget.tsx +1 -1
- package/src/collection_editor/ui/NewCollectionCard.tsx +1 -1
- package/src/collection_editor/ui/PropertyAddColumnComponent.tsx +3 -2
- package/src/collection_editor/ui/collection_editor/AICollectionGeneratorPopover.tsx +6 -5
- package/src/collection_editor/ui/collection_editor/CollectionDetailsForm.tsx +5 -7
- package/src/collection_editor/ui/collection_editor/CollectionEditorDialog.tsx +28 -38
- package/src/collection_editor/ui/collection_editor/CollectionEditorWelcomeView.tsx +4 -3
- package/src/collection_editor/ui/collection_editor/CollectionJsonImportDialog.tsx +3 -2
- package/src/collection_editor/ui/collection_editor/CollectionPropertiesEditorForm.tsx +4 -3
- package/src/collection_editor/ui/collection_editor/CollectionRLSTab.tsx +4 -3
- package/src/collection_editor/ui/collection_editor/CollectionRelationsTab.tsx +3 -2
- package/src/collection_editor/ui/collection_editor/CollectionStudioView.tsx +2 -2
- package/src/collection_editor/ui/collection_editor/CollectionsStudioView.tsx +3 -2
- package/src/collection_editor/ui/collection_editor/DisplaySettingsForm.tsx +4 -3
- package/src/collection_editor/ui/collection_editor/EntityActionsEditTab.tsx +4 -4
- package/src/collection_editor/ui/collection_editor/GeneralSettingsForm.tsx +4 -4
- package/src/collection_editor/ui/collection_editor/GetCodeDialog.tsx +5 -4
- package/src/collection_editor/ui/collection_editor/KanbanConfigSection.tsx +3 -2
- package/src/collection_editor/ui/collection_editor/PropertyEditView.tsx +4 -3
- package/src/collection_editor/ui/collection_editor/PropertyTree.tsx +2 -1
- package/src/collection_editor/ui/collection_editor/SubcollectionsEditTab.tsx +6 -5
- package/src/collection_editor/ui/collection_editor/ViewModeSwitch.tsx +1 -1
- package/src/collection_editor/ui/collection_editor/import/CollectionEditorImportMapping.tsx +3 -2
- package/src/collection_editor/ui/collection_editor/properties/BlockPropertyField.tsx +2 -1
- package/src/collection_editor/ui/collection_editor/properties/MapPropertyField.tsx +3 -2
- package/src/collection_editor/ui/collection_editor/properties/RelationPropertyField.tsx +3 -2
- package/src/collection_editor/ui/collection_editor/properties/RepeatPropertyField.tsx +2 -1
- package/src/collection_editor/ui/collection_editor/templates/blog_template.ts +3 -3
- package/src/collection_editor/ui/collection_editor/templates/pages_template.ts +3 -3
- package/src/collection_editor/ui/collection_editor/templates/products_template.ts +4 -4
- package/src/collection_editor/ui/collection_editor/templates/users_template.ts +2 -2
- package/src/collection_editor/ui/collection_editor/utils/supported_fields.tsx +1 -1
- package/src/collection_editor/ui/collection_editor/utils/update_property_for_widget.ts +10 -8
- package/src/collection_editor/useJsonCollectionsConfigController.tsx +10 -9
- package/src/collection_editor/useLocalCollectionsConfigController.tsx +5 -5
- package/src/collection_editor/validateCollectionJson.ts +4 -5
- package/src/components/AdminModeSyncer.tsx +1 -1
- package/src/components/ClearFilterSortButton.tsx +1 -1
- package/src/components/CollectionPanel.tsx +5 -4
- package/src/components/CollectionTableBinding/CollectionRowActions.tsx +6 -6
- package/src/components/CollectionTableBinding/CollectionTableBinding.tsx +5 -4
- package/src/components/CollectionTableBinding/CollectionTableBindingProps.tsx +3 -2
- package/src/components/CollectionTableBinding/PropertyTableCell.tsx +5 -5
- package/src/components/CollectionTableBinding/fields/TableMultipleRelationField.tsx +4 -3
- package/src/components/CollectionTableBinding/fields/TableReferenceField.tsx +5 -4
- package/src/components/CollectionTableBinding/fields/TableRelationField.tsx +4 -3
- package/src/components/CollectionTableBinding/internal/common.tsx +8 -7
- package/src/components/CollectionTableBinding/internal/popup_field/PopupFormField.tsx +5 -4
- package/src/components/CollectionTableBinding/table_bindings.tsx +7 -7
- package/src/components/CollectionViewBinding/BoardCardBinding.tsx +6 -5
- package/src/components/CollectionViewBinding/CollectionBoardViewBinding.tsx +5 -6
- package/src/components/CollectionViewBinding/CollectionCardViewBinding.tsx +4 -3
- package/src/components/CollectionViewBinding/CollectionListViewBinding.tsx +10 -13
- package/src/components/CollectionViewBinding/CollectionViewActions.tsx +3 -3
- package/src/components/CollectionViewBinding/CollectionViewBinding.tsx +17 -16
- package/src/components/CollectionViewBinding/CollectionViewStartActions.tsx +3 -3
- package/src/components/CollectionViewBinding/EntityCardBinding.tsx +6 -5
- package/src/components/CollectionViewBinding/FilterPresetsButton.tsx +2 -1
- package/src/components/CollectionViewBinding/FiltersDialog.tsx +2 -2
- package/src/components/CollectionViewBinding/SplitListView.tsx +6 -5
- package/src/components/CollectionViewBinding/ViewModeToggle.tsx +1 -1
- package/src/components/CollectionViewBinding/hooks/useCollectionInlineEditor.ts +3 -2
- package/src/components/CollectionViewBinding/hooks/useKanbanDragAndDrop.ts +3 -2
- package/src/components/CollectionViewBinding/useBoardDataController.tsx +3 -2
- package/src/components/CollectionViewBinding/usePreviewSlots.ts +57 -25
- package/src/components/CollectionViewBinding/useSelectionController.tsx +2 -1
- package/src/components/DefaultDrawer.tsx +2 -2
- package/src/components/DeleteEntityDialog.tsx +3 -2
- package/src/components/DetailViewBinding.tsx +23 -18
- package/src/components/DrawerNavigationGroup.tsx +1 -1
- package/src/components/EditFormActions.tsx +5 -5
- package/src/components/EditViewBinding.tsx +11 -15
- package/src/components/EntityPreviewBinding.tsx +7 -6
- package/src/components/EntityViewBinding.tsx +3 -3
- package/src/components/HomePage/ContentHomePage.tsx +2 -2
- package/src/components/HomePage/FavouritesView.tsx +1 -1
- package/src/components/HomePage/HomePageDnD.tsx +1 -1
- package/src/components/HomePage/NavigationCardBinding.tsx +2 -2
- package/src/components/PropertyConfigBadge.tsx +2 -1
- package/src/components/RebaseAdmin.tsx +1 -1
- package/src/components/RebaseAuthGate.tsx +1 -1
- package/src/components/RebaseLayout.tsx +1 -1
- package/src/components/RebaseNavigation.tsx +4 -3
- package/src/components/ReferenceTable/SelectionTableBinding.tsx +6 -5
- package/src/components/ReferenceWidget.tsx +3 -2
- package/src/components/SelectableTable/SelectableTable.tsx +3 -3
- package/src/components/SelectableTable/SelectionStore.ts +1 -1
- package/src/components/SelectableTable/filters/FilterFieldBinding.tsx +9 -6
- package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +3 -2
- package/src/components/SideDialogs.tsx +2 -2
- package/src/components/SidePanelBinding.tsx +5 -5
- package/src/components/SidePanelProvider.tsx +1 -1
- package/src/components/admin/CreationResultDialog.tsx +1 -1
- package/src/components/common/default_entity_actions.tsx +3 -2
- package/src/components/field_configs.tsx +30 -29
- package/src/components/history/EntityHistoryEntry.tsx +3 -2
- package/src/components/history/EntityHistoryView.tsx +1 -1
- package/src/components/history/LastEditedByFormAction.tsx +1 -1
- package/src/components/history/LastEditedByIndicator.tsx +3 -2
- package/src/contexts/BreacrumbsContext.tsx +1 -1
- package/src/contexts/SideDialogsControllerContext.tsx +1 -1
- package/src/contexts/SidePanelControllerContext.tsx +1 -1
- package/src/data_export/export/ExportCollectionAction.tsx +5 -4
- package/src/data_import/components/ImportSaveInProgress.tsx +4 -3
- package/src/data_import/import/ImportCollectionAction.tsx +3 -2
- package/src/data_import/utils/data.ts +3 -2
- package/src/form/EntityForm.tsx +19 -10
- package/src/form/EntityFormActions.tsx +3 -3
- package/src/form/EntityFormBinding.tsx +6 -4
- package/src/form/PropertyFieldBinding.tsx +15 -12
- package/src/form/components/FieldHelperText.tsx +1 -1
- package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +5 -4
- package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +7 -6
- package/src/form/field_bindings/BlockFieldBinding.tsx +4 -4
- package/src/form/field_bindings/DateTimeFieldBinding.tsx +1 -1
- package/src/form/field_bindings/KeyValueFieldBinding.tsx +1 -1
- package/src/form/field_bindings/MapFieldBinding.tsx +7 -7
- package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +1 -1
- package/src/form/field_bindings/MultipleRelationFieldBinding.tsx +2 -2
- package/src/form/field_bindings/ReferenceFieldBinding.tsx +4 -3
- package/src/form/field_bindings/RelationFieldBinding.tsx +2 -2
- package/src/form/field_bindings/RepeatFieldBinding.tsx +5 -5
- package/src/form/field_bindings/SelectFieldBinding.tsx +1 -1
- package/src/form/field_bindings/StorageUploadFieldBinding.tsx +2 -2
- package/src/form/field_bindings/SwitchFieldBinding.tsx +1 -1
- package/src/form/field_bindings/TextFieldBinding.tsx +8 -8
- package/src/form/field_bindings/UserSelectFieldBinding.tsx +1 -1
- package/src/form/form_utils.ts +5 -3
- package/src/form/useClearRestoreValue.tsx +1 -1
- package/src/form/validation.ts +1 -1
- package/src/hooks/index.ts +1 -0
- package/src/hooks/navigation/contexts/CollectionRegistryContext.tsx +3 -2
- package/src/hooks/navigation/contexts/NavigationStateContext.tsx +1 -1
- package/src/hooks/navigation/contexts/UrlContext.tsx +1 -1
- package/src/hooks/navigation/useBuildCollectionRegistryController.tsx +19 -15
- package/src/hooks/navigation/useBuildNavigationStateController.tsx +8 -6
- package/src/hooks/navigation/useBuildUrlController.tsx +2 -2
- package/src/hooks/navigation/useNavigationResolution.ts +15 -21
- package/src/hooks/navigation/useResolvedCollections.ts +10 -9
- package/src/hooks/navigation/useResolvedViews.tsx +4 -2
- package/src/hooks/navigation/useTopLevelNavigation.ts +3 -2
- package/src/hooks/navigation/utils.ts +6 -5
- package/src/hooks/useBreadcrumbsController.tsx +1 -1
- package/src/hooks/useBuildSidePanel.tsx +9 -12
- package/src/hooks/useCMSContext.tsx +8 -4
- package/src/hooks/useResolvedNavigationFrom.tsx +7 -5
- package/src/hooks/useResolvedUsers.ts +143 -0
- package/src/hooks/useSelectionDialog.tsx +3 -2
- package/src/hooks/useSideDialogsController.tsx +1 -1
- package/src/hooks/useSidePanel.tsx +1 -1
- package/src/index.ts +2 -1
- package/src/preview/PropertyPreview.tsx +11 -11
- package/src/preview/components/ReferencePreview.tsx +6 -5
- package/src/preview/components/RelationPreview.tsx +6 -5
- package/src/preview/components/UrlComponentPreview.tsx +1 -1
- package/src/preview/components/UserPreview.tsx +13 -4
- package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +1 -1
- package/src/preview/property_previews/ArrayOfRelationsPreview.tsx +1 -1
- package/src/preview/property_previews/SkeletonPropertyComponent.tsx +2 -2
- package/src/preview/property_previews/StringPropertyPreview.tsx +19 -13
- package/src/preview/util.ts +1 -1
- package/src/routes/CustomViewRoute.tsx +1 -1
- package/src/routes/RebaseRoute.tsx +7 -5
- package/src/types/components/EntityFormActionsProps.tsx +3 -2
- package/src/types/components/EntityFormProps.tsx +4 -3
- package/src/types/fields.tsx +3 -2
- package/src/util/dataControllerAdapter.ts +2 -1
- package/src/util/entity_actions.ts +1 -1
- package/src/util/navigation_utils.ts +4 -13
- package/src/util/previews.ts +43 -53
- package/src/util/propertyConfigMapper.ts +7 -7
- package/src/util/property_utils.tsx +5 -4
- package/src/util/resolutions.ts +1 -1
- package/src/util/view_mode.ts +4 -3
- package/dist/CollectionEditorDialog-BOlKGGg7.js.map +0 -1
- package/dist/PropertyEditView-i51tFOfM.js.map +0 -1
- package/dist/RouterCollectionsStudioView-Dh4W53PU.js.map +0 -1
- package/dist/export-BM6HPujv.js.map +0 -1
- package/dist/history-CtIPJxvQ.js.map +0 -1
- package/dist/import-DzQnT03v.js.map +0 -1
- package/dist/util-XFwQ9FEc.js.map +0 -1
|
@@ -1,14 +1,17 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { Property } from "@rebasepro/types";
|
|
2
|
+
import type { AdditionalFieldDelegate, EntityAction, AdminCollection } from "@rebasepro/admin-types";
|
|
2
3
|
import {
|
|
3
|
-
CollectionSize,
|
|
4
4
|
Entity,
|
|
5
5
|
EntityReference,
|
|
6
|
-
EntityTableController,
|
|
7
6
|
FilterValues,
|
|
8
|
-
getCollectionDataPath
|
|
7
|
+
getCollectionDataPath
|
|
8
|
+
} from "@rebasepro/types";
|
|
9
|
+
import {
|
|
10
|
+
CollectionSize,
|
|
11
|
+
EntityTableController,
|
|
9
12
|
PartialCollectionConfig,
|
|
10
13
|
ViewMode
|
|
11
|
-
} from "@rebasepro/types";
|
|
14
|
+
} from "@rebasepro/admin-types";
|
|
12
15
|
import React, { useCallback, useEffect, useMemo, useState } from "react";
|
|
13
16
|
import { useSearchParams } from "react-router-dom";
|
|
14
17
|
|
|
@@ -120,10 +123,10 @@ export type CollectionViewBindingProps<M extends Record<string, unknown>> = {
|
|
|
120
123
|
*/
|
|
121
124
|
selectedTab?: string;
|
|
122
125
|
|
|
123
|
-
} &
|
|
126
|
+
} & AdminCollection<M>;
|
|
124
127
|
|
|
125
128
|
/**
|
|
126
|
-
* This component is in charge of binding a driver path with an {@link
|
|
129
|
+
* This component is in charge of binding a driver path with an {@link AdminCollection}
|
|
127
130
|
* where it's configuration is defined. It includes an infinite scrolling table
|
|
128
131
|
* and a 'Add' new entities button,
|
|
129
132
|
*
|
|
@@ -181,7 +184,7 @@ const CollectionViewBindingInner = React.memo(
|
|
|
181
184
|
const collection = useMemo(() => {
|
|
182
185
|
const registryCollection = collectionRegistry.getCollection(path) || collectionProp;
|
|
183
186
|
const userOverride = userConfigPersistence?.getCollectionConfig<M>(path);
|
|
184
|
-
return (userOverride ? mergeDeep(registryCollection, userOverride) : registryCollection) as
|
|
187
|
+
return (userOverride ? mergeDeep(registryCollection, userOverride) : registryCollection) as AdminCollection<M>;
|
|
185
188
|
}, [collectionProp, path, userConfigPersistence, collectionRegistry]);
|
|
186
189
|
|
|
187
190
|
const collectionRef = React.useRef(collection);
|
|
@@ -601,7 +604,6 @@ parentEntityIds: parentEntityIds ?? EMPTY_ARRAY,
|
|
|
601
604
|
property = getPropertyInPath(resolvedCollection.properties, propertyKey);
|
|
602
605
|
}
|
|
603
606
|
|
|
604
|
-
|
|
605
607
|
// In v4, properties are already resolved, so we return them directly
|
|
606
608
|
return property ?? null;
|
|
607
609
|
}, [collection.properties, resolvedCollection.properties]);
|
|
@@ -622,7 +624,7 @@ parentEntityIds: parentEntityIds ?? EMPTY_ARRAY,
|
|
|
622
624
|
const additionalFields = useMemo(() => {
|
|
623
625
|
// v4: use getSubcollections helper to access subcollections
|
|
624
626
|
const subcollectionsList = getSubcollections(collection);
|
|
625
|
-
const subcollectionColumns: AdditionalFieldDelegate<M, any>[] = subcollectionsList.map((subcollection:
|
|
627
|
+
const subcollectionColumns: AdditionalFieldDelegate<M, any>[] = subcollectionsList.map((subcollection: AdminCollection) => {
|
|
626
628
|
return {
|
|
627
629
|
key: getSubcollectionColumnId(subcollection),
|
|
628
630
|
name: subcollection.name,
|
|
@@ -778,7 +780,7 @@ parentEntityIds: parentEntityIds ?? EMPTY_ARRAY,
|
|
|
778
780
|
propertyKey,
|
|
779
781
|
onHover,
|
|
780
782
|
path,
|
|
781
|
-
collection: collection as
|
|
783
|
+
collection: collection as AdminCollection,
|
|
782
784
|
tableController: tableController as EntityTableController,
|
|
783
785
|
parentCollectionSlugs: parentCollectionSlugs ?? EMPTY_ARRAY,
|
|
784
786
|
parentEntityIds: parentEntityIds ?? EMPTY_ARRAY
|
|
@@ -1062,7 +1064,6 @@ parentEntityIds,
|
|
|
1062
1064
|
</div>
|
|
1063
1065
|
)}
|
|
1064
1066
|
|
|
1065
|
-
|
|
1066
1067
|
{/* When isSplitLayout, SplitListView is ALWAYS mounted — regardless
|
|
1067
1068
|
of viewMode. The toolbar + current view live in the left panel;
|
|
1068
1069
|
the right panel (entity detail) shows/hides based on selection.
|
|
@@ -1168,7 +1169,7 @@ export const CollectionViewBinding = React.memo(
|
|
|
1168
1169
|
|
|
1169
1170
|
if (collection) {
|
|
1170
1171
|
return (
|
|
1171
|
-
<CollectionScopeProvider collection={collection as
|
|
1172
|
+
<CollectionScopeProvider collection={collection as AdminCollection}>
|
|
1172
1173
|
{content}
|
|
1173
1174
|
</CollectionScopeProvider>
|
|
1174
1175
|
);
|
|
@@ -1233,7 +1234,7 @@ function EntitiesCount({
|
|
|
1233
1234
|
onCountChange
|
|
1234
1235
|
}: {
|
|
1235
1236
|
path: string,
|
|
1236
|
-
collection:
|
|
1237
|
+
collection: AdminCollection,
|
|
1237
1238
|
filter?: FilterValues<any>,
|
|
1238
1239
|
sortBy?: [string, "asc" | "desc"],
|
|
1239
1240
|
onCountChange?: (count: number | null | undefined) => void,
|
|
@@ -1298,7 +1299,7 @@ function buildPropertyWidthOverwrite(key: string, width: number): PartialCollect
|
|
|
1298
1299
|
const [parentKey, ...childKey] = key.split(".");
|
|
1299
1300
|
return { properties: { [parentKey]: buildPropertyWidthOverwrite(childKey.join("."), width) } } as PartialCollectionConfig;
|
|
1300
1301
|
}
|
|
1301
|
-
return { properties: { [key]: {
|
|
1302
|
+
return { properties: { [key]: { admin: { columnWidth: width } } } } as PartialCollectionConfig;
|
|
1302
1303
|
}
|
|
1303
1304
|
|
|
1304
1305
|
function EntityIdHeaderWidget({
|
|
@@ -1307,7 +1308,7 @@ function EntityIdHeaderWidget({
|
|
|
1307
1308
|
idPath,
|
|
1308
1309
|
openEntityMode
|
|
1309
1310
|
}: {
|
|
1310
|
-
collection:
|
|
1311
|
+
collection: AdminCollection,
|
|
1311
1312
|
path: string,
|
|
1312
1313
|
idPath: string,
|
|
1313
1314
|
/**
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { Properties } from "@rebasepro/types";
|
|
2
|
-
|
|
2
|
+
|
|
3
3
|
import React, { useState, useCallback } from "react";
|
|
4
4
|
import { useAuthController, useLargeLayout, useTranslation, useSlot } from "@rebasepro/app";
|
|
5
|
-
import { CollectionActionsProps, EntityTableController, SelectionController } from "@rebasepro/types";
|
|
5
|
+
import { CollectionActionsProps, EntityTableController, SelectionController, AdminCollection } from "@rebasepro/admin-types";
|
|
6
6
|
import { ErrorBoundary, iconSize } from "@rebasepro/ui";
|
|
7
7
|
import { ArrowLeftIcon, Badge, Button, cls, FilterIcon, IconButton, Tooltip } from "@rebasepro/ui";
|
|
8
8
|
import { ClearFilterSortButton } from "../ClearFilterSortButton";
|
|
@@ -15,7 +15,7 @@ import { useCMSContext } from "../../hooks/useCMSContext";
|
|
|
15
15
|
import { withViewMode } from "../../util/view_mode";
|
|
16
16
|
|
|
17
17
|
export type CollectionViewStartActionsProps<M extends Record<string, unknown>> = {
|
|
18
|
-
collection:
|
|
18
|
+
collection: AdminCollection<M>;
|
|
19
19
|
path: string;
|
|
20
20
|
relativePath: string;
|
|
21
21
|
parentCollectionSlugs: string[], parentEntityIds: string[];
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
|
|
1
|
+
|
|
2
2
|
import React, { useMemo } from "react";
|
|
3
|
-
import {
|
|
3
|
+
import { Entity } from "@rebasepro/types";
|
|
4
|
+
import { CollectionSize, AdminCollection } from "@rebasepro/admin-types";
|
|
4
5
|
import {
|
|
5
6
|
Card,
|
|
6
7
|
Checkbox,
|
|
@@ -19,7 +20,7 @@ import { useCollectionSlotKeys, resolveEntitySlots } from "./usePreviewSlots";
|
|
|
19
20
|
|
|
20
21
|
export type EntityCardBindingProps<M extends Record<string, unknown> = Record<string, unknown>> = {
|
|
21
22
|
entity: Entity<M>;
|
|
22
|
-
collection:
|
|
23
|
+
collection: AdminCollection<M>;
|
|
23
24
|
onClick?: (entity: Entity<M>) => void;
|
|
24
25
|
selected?: boolean;
|
|
25
26
|
highlighted?: boolean;
|
|
@@ -50,7 +51,7 @@ export function EntityCardBinding<M extends Record<string, unknown> = Record<str
|
|
|
50
51
|
const customizationController = useCustomizationController();
|
|
51
52
|
|
|
52
53
|
const slotKeys = useCollectionSlotKeys(
|
|
53
|
-
collection as
|
|
54
|
+
collection as AdminCollection<Record<string, unknown>>,
|
|
54
55
|
authController,
|
|
55
56
|
customizationController.propertyConfigs
|
|
56
57
|
);
|
|
@@ -58,7 +59,7 @@ export function EntityCardBinding<M extends Record<string, unknown> = Record<str
|
|
|
58
59
|
const slots = useMemo(
|
|
59
60
|
() => resolveEntitySlots(
|
|
60
61
|
entity as Entity<Record<string, unknown>>,
|
|
61
|
-
collection as
|
|
62
|
+
collection as AdminCollection<Record<string, unknown>>,
|
|
62
63
|
slotKeys
|
|
63
64
|
),
|
|
64
65
|
[entity, collection, slotKeys]
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import React, { useCallback, useMemo } from "react";
|
|
2
2
|
import { CheckIcon, ChevronsUpDownIcon, cls, FilterChip, Menu, MenuItem, Tooltip } from "@rebasepro/ui";
|
|
3
|
-
import type {
|
|
3
|
+
import type { FilterValues, FilterPreset } from "@rebasepro/types";
|
|
4
|
+
import type { EntityTableController } from "@rebasepro/admin-types";
|
|
4
5
|
|
|
5
6
|
export interface FilterPresetsButtonProps<M extends Record<string, unknown>> {
|
|
6
7
|
filterPresets: FilterPreset<Extract<keyof M, string> | (string & {})>[];
|
|
@@ -4,7 +4,7 @@ import React, { useCallback, useMemo, useState } from "react";
|
|
|
4
4
|
import { FilterValues, WhereFilterOp } from "@rebasepro/types";
|
|
5
5
|
import { Button, cls, defaultBorderMixin, Dialog, DialogActions, DialogContent, DialogTitle, Typography } from "@rebasepro/ui";
|
|
6
6
|
import { FilterIcon, VirtualTableWhereFilterOp } from "@rebasepro/ui";
|
|
7
|
-
import { resolveFilterOperators } from "@rebasepro/
|
|
7
|
+
import { resolveFilterOperators } from "@rebasepro/app";
|
|
8
8
|
import { useCollectionScope, useTranslation } from "@rebasepro/app";
|
|
9
9
|
import { FilterFieldBinding } from "../SelectableTable/filters/FilterFieldBinding";
|
|
10
10
|
|
|
@@ -77,7 +77,7 @@ export function FiltersDialog({
|
|
|
77
77
|
// A property is filterable when it has a custom filter field, or
|
|
78
78
|
// when at least one operator survives the engine ∩ type ∩
|
|
79
79
|
// property-narrowing resolution.
|
|
80
|
-
if (baseProperty.
|
|
80
|
+
if (baseProperty.admin?.Filter) return true;
|
|
81
81
|
return resolveFilterOperators({ property: baseProperty, isArray, engine }).length > 0;
|
|
82
82
|
});
|
|
83
83
|
}, [properties, fixedFilter, engine]);
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
|
|
1
|
+
|
|
2
2
|
import React, { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
3
|
-
import {
|
|
3
|
+
import { Entity } from "@rebasepro/types";
|
|
4
|
+
import { CollectionSize, EntityTableController, SelectionController, AdminCollection } from "@rebasepro/admin-types";
|
|
4
5
|
import { EditViewBinding } from "../EditViewBinding";
|
|
5
6
|
import { DetailViewBinding } from "../DetailViewBinding";
|
|
6
7
|
import {
|
|
@@ -16,7 +17,7 @@ import { ErrorBoundary } from "@rebasepro/ui";
|
|
|
16
17
|
import { withViewMode } from "../../util/view_mode";
|
|
17
18
|
|
|
18
19
|
export type SplitListViewProps<M extends Record<string, unknown> = Record<string, unknown>> = {
|
|
19
|
-
collection:
|
|
20
|
+
collection: AdminCollection<M>;
|
|
20
21
|
tableController: EntityTableController<M>;
|
|
21
22
|
onEntityClick?: (entity: Entity<M>) => void;
|
|
22
23
|
onNewClick?: () => void;
|
|
@@ -358,7 +359,7 @@ export function SplitListView<M extends Record<string, unknown> = Record<string,
|
|
|
358
359
|
? <DetailViewBinding
|
|
359
360
|
key={String(renderedEntityId)}
|
|
360
361
|
path={path}
|
|
361
|
-
collection={collection as
|
|
362
|
+
collection={collection as AdminCollection<Record<string, unknown>>}
|
|
362
363
|
entityId={renderedEntityId}
|
|
363
364
|
parentCollectionSlugs={usedParentCollectionIds}
|
|
364
365
|
parentEntityIds={usedParentEntityIds}
|
|
@@ -379,7 +380,7 @@ export function SplitListView<M extends Record<string, unknown> = Record<string,
|
|
|
379
380
|
: <EditViewBinding
|
|
380
381
|
key={String(renderedEntityId)}
|
|
381
382
|
path={path}
|
|
382
|
-
collection={collection as
|
|
383
|
+
collection={collection as AdminCollection<Record<string, unknown>>}
|
|
383
384
|
entityId={renderedEntityId}
|
|
384
385
|
parentCollectionSlugs={usedParentCollectionIds}
|
|
385
386
|
parentEntityIds={usedParentEntityIds}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { useCallback, useMemo } from "react";
|
|
2
2
|
import { setIn } from "@rebasepro/forms";
|
|
3
|
-
import {
|
|
3
|
+
import { RebaseData } from "@rebasepro/types";
|
|
4
|
+
import { RebaseContext, AdminCollection } from "@rebasepro/admin-types";
|
|
4
5
|
import { OnCellValueChange, saveEntityWithCallbacks, SaveEntityWithCallbacksProps, UniqueFieldValidator } from "@rebasepro/app";
|
|
5
6
|
|
|
6
7
|
export interface UseCollectionInlineEditorParams<M extends Record<string, unknown>> {
|
|
7
8
|
path: string;
|
|
8
|
-
collection:
|
|
9
|
+
collection: AdminCollection<M>;
|
|
9
10
|
dataClient: RebaseData;
|
|
10
11
|
context: RebaseContext;
|
|
11
12
|
}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { useCallback, useMemo } from "react";
|
|
2
2
|
import { setIn } from "@rebasepro/forms";
|
|
3
|
-
import {
|
|
3
|
+
import { RebaseData, Entity } from "@rebasepro/types";
|
|
4
|
+
import { RebaseContext, AnalyticsController, AdminCollection } from "@rebasepro/admin-types";
|
|
4
5
|
import { saveEntityWithCallbacks, SaveEntityWithCallbacksProps } from "@rebasepro/app";
|
|
5
6
|
import { BoardItem } from "@rebasepro/ui";
|
|
6
7
|
import { BoardDataController } from "../useBoardDataController";
|
|
7
8
|
import { generateKeyBetween } from "fractional-indexing";
|
|
8
9
|
|
|
9
10
|
export interface UseKanbanDragAndDropParams<M extends Record<string, unknown>> {
|
|
10
|
-
collection:
|
|
11
|
+
collection: AdminCollection<M>;
|
|
11
12
|
fullPath: string;
|
|
12
13
|
columnProperty: string;
|
|
13
14
|
orderProperty?: string;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
|
|
1
|
+
|
|
2
2
|
import { Entity, FilterValues } from "@rebasepro/types";
|
|
3
3
|
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
4
4
|
import { getRelationIncludeParams, useData, useRebaseContext } from "@rebasepro/app";
|
|
5
|
+
import type { AdminCollection } from "@rebasepro/admin-types";
|
|
5
6
|
|
|
6
7
|
const DEFAULT_PAGE_SIZE = 20;
|
|
7
8
|
|
|
@@ -67,7 +68,7 @@ export interface UseBoardDataControllerProps<M extends Record<string, unknown> =
|
|
|
67
68
|
/** Full path to the collection */
|
|
68
69
|
fullPath: string;
|
|
69
70
|
/** The entity collection configuration */
|
|
70
|
-
collection:
|
|
71
|
+
collection: AdminCollection<M>;
|
|
71
72
|
/** Property key used for column assignment */
|
|
72
73
|
columnProperty: string;
|
|
73
74
|
/** Array of column values (enum values from columnProperty) */
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import { useMemo } from "react";
|
|
2
|
-
import type {
|
|
3
|
-
import type { Entity,
|
|
4
|
-
import {
|
|
2
|
+
import type { Property, RelationProperty } from "@rebasepro/types";
|
|
3
|
+
import type { Entity, EntityRelation } from "@rebasepro/types";
|
|
4
|
+
import type { PropertyConfig, AdminCollection } from "@rebasepro/admin-types";
|
|
5
|
+
import { getEntityImagePreviewPropertyKey } from "@rebasepro/app";
|
|
6
|
+
import { getTitlePropertyCandidates, looksLikeIdentifierValue } from "@rebasepro/app";
|
|
5
7
|
import { getEntityFromCache } from "@rebasepro/app";
|
|
6
|
-
import {
|
|
8
|
+
import { getEntityPreviewKeys } from "../../util/previews";
|
|
7
9
|
import { getValueInPath } from "@rebasepro/utils";
|
|
8
|
-
import type { AuthController } from "@rebasepro/types";
|
|
10
|
+
import type { AuthController } from "@rebasepro/admin-types";
|
|
9
11
|
import { ChipColorScheme, CHIP_COLORS } from "@rebasepro/ui";
|
|
10
12
|
|
|
11
|
-
|
|
12
13
|
// ── Slot types ────────────────────────────────────────────────────────
|
|
13
14
|
|
|
14
15
|
/**
|
|
@@ -90,6 +91,8 @@ export interface EntityPreviewSlots {
|
|
|
90
91
|
*/
|
|
91
92
|
export interface CollectionSlotKeys {
|
|
92
93
|
titleKey: string | undefined;
|
|
94
|
+
/** Every property that could act as the title, best first (see `getTitlePropertyCandidates`) */
|
|
95
|
+
titleKeyCandidates: string[];
|
|
93
96
|
imageKey: string | undefined;
|
|
94
97
|
subtitleKey: string | undefined;
|
|
95
98
|
relationKeys: string[];
|
|
@@ -102,11 +105,12 @@ export interface CollectionSlotKeys {
|
|
|
102
105
|
* Pure function — call inside `useMemo`.
|
|
103
106
|
*/
|
|
104
107
|
export function resolveCollectionSlotKeys(
|
|
105
|
-
collection:
|
|
108
|
+
collection: AdminCollection<Record<string, unknown>>,
|
|
106
109
|
authController: AuthController,
|
|
107
110
|
propertyConfigs: Record<string, PropertyConfig>
|
|
108
111
|
): CollectionSlotKeys {
|
|
109
|
-
const
|
|
112
|
+
const titleKeyCandidates = getTitlePropertyCandidates(collection);
|
|
113
|
+
const titleKey = titleKeyCandidates[0];
|
|
110
114
|
const imageKey = getEntityImagePreviewPropertyKey(collection);
|
|
111
115
|
|
|
112
116
|
// Status: first string-enum that isn't the title
|
|
@@ -194,13 +198,14 @@ export function resolveCollectionSlotKeys(
|
|
|
194
198
|
: [...previewKeys].sort((a, b) => {
|
|
195
199
|
const propA = collection.properties[a] as Property | undefined;
|
|
196
200
|
const propB = collection.properties[b] as Property | undefined;
|
|
197
|
-
const scoreA = propA?.type === "string" ? (propA.
|
|
198
|
-
const scoreB = propB?.type === "string" ? (propB.
|
|
201
|
+
const scoreA = propA?.type === "string" ? (propA.admin?.multiline ? 2 : 1) : 0;
|
|
202
|
+
const scoreB = propB?.type === "string" ? (propB.admin?.multiline ? 2 : 1) : 0;
|
|
199
203
|
return scoreB - scoreA;
|
|
200
204
|
});
|
|
201
205
|
const subtitleKey = sortedPreviewKeys.length > 0 ? sortedPreviewKeys[0] : undefined;
|
|
202
206
|
|
|
203
207
|
return { titleKey,
|
|
208
|
+
titleKeyCandidates,
|
|
204
209
|
imageKey,
|
|
205
210
|
subtitleKey,
|
|
206
211
|
relationKeys,
|
|
@@ -216,7 +221,7 @@ dateKey };
|
|
|
216
221
|
* and value is the first element (for arrays) or the raw value.
|
|
217
222
|
*/
|
|
218
223
|
function resolveImageSlot(
|
|
219
|
-
collection:
|
|
224
|
+
collection: AdminCollection<Record<string, unknown>>,
|
|
220
225
|
imageKey: string,
|
|
221
226
|
entity: Entity<Record<string, unknown>>
|
|
222
227
|
): PreviewSlot | undefined {
|
|
@@ -242,6 +247,30 @@ function resolveImageSlot(
|
|
|
242
247
|
};
|
|
243
248
|
}
|
|
244
249
|
|
|
250
|
+
// ── Title resolution (entity-level) ───────────────────────────────────
|
|
251
|
+
|
|
252
|
+
/**
|
|
253
|
+
* Walk the collection's ranked title candidates and return the first one that
|
|
254
|
+
* holds something a person can read for this entity. Candidates are already
|
|
255
|
+
* ordered and free of identifier properties; this only rejects values —
|
|
256
|
+
* empties, and strings that turn out to be an id at runtime.
|
|
257
|
+
*/
|
|
258
|
+
function resolveEntityTitleKey(
|
|
259
|
+
entity: Entity<Record<string, unknown>>,
|
|
260
|
+
candidates: string[]
|
|
261
|
+
): string | undefined {
|
|
262
|
+
for (const key of candidates) {
|
|
263
|
+
const value = getValueInPath(entity.values, key);
|
|
264
|
+
if (value === undefined || value === null || value === "") continue;
|
|
265
|
+
if (typeof value === "string") {
|
|
266
|
+
if (looksLikeIdentifierValue(value)) continue;
|
|
267
|
+
if (value === String(entity.id)) continue;
|
|
268
|
+
}
|
|
269
|
+
return key;
|
|
270
|
+
}
|
|
271
|
+
return candidates[0];
|
|
272
|
+
}
|
|
273
|
+
|
|
245
274
|
// ── Date formatting ───────────────────────────────────────────────────
|
|
246
275
|
|
|
247
276
|
function formatDateValue(value: unknown): string {
|
|
@@ -277,7 +306,7 @@ function formatDateValue(value: unknown): string {
|
|
|
277
306
|
* `resolveEntitySlots` for each entity row.
|
|
278
307
|
*/
|
|
279
308
|
export function useCollectionSlotKeys(
|
|
280
|
-
collection:
|
|
309
|
+
collection: AdminCollection<Record<string, unknown>>,
|
|
281
310
|
authController: AuthController,
|
|
282
311
|
propertyConfigs: Record<string, PropertyConfig>
|
|
283
312
|
): CollectionSlotKeys {
|
|
@@ -296,27 +325,30 @@ export function useCollectionSlotKeys(
|
|
|
296
325
|
*/
|
|
297
326
|
export function resolveEntitySlots(
|
|
298
327
|
entity: Entity<Record<string, unknown>>,
|
|
299
|
-
collection:
|
|
328
|
+
collection: AdminCollection<Record<string, unknown>>,
|
|
300
329
|
slotKeys: CollectionSlotKeys
|
|
301
330
|
): EntityPreviewSlots {
|
|
302
|
-
const { titleKey, imageKey, subtitleKey, relationKeys, statusKey, dateKey } = slotKeys;
|
|
331
|
+
const { titleKey, titleKeyCandidates, imageKey, subtitleKey, relationKeys, statusKey, dateKey } = slotKeys;
|
|
303
332
|
|
|
304
333
|
// Image
|
|
305
334
|
const image = imageKey ? resolveImageSlot(collection, imageKey, entity) : undefined;
|
|
306
335
|
|
|
307
|
-
// Title
|
|
336
|
+
// Title — the best-ranked candidate that carries a readable value for THIS
|
|
337
|
+
// entity, so a row whose name is empty (or whose column happens to hold a
|
|
338
|
+
// UUID) falls through to the next candidate instead of showing an id.
|
|
339
|
+
const resolvedTitleKey = resolveEntityTitleKey(entity, titleKeyCandidates ?? (titleKey ? [titleKey] : []));
|
|
308
340
|
let title: PreviewSlot | undefined;
|
|
309
|
-
if (
|
|
310
|
-
const prop = collection.properties[
|
|
311
|
-
const val = getValueInPath(entity.values,
|
|
341
|
+
if (resolvedTitleKey) {
|
|
342
|
+
const prop = collection.properties[resolvedTitleKey] as Property | undefined;
|
|
343
|
+
const val = getValueInPath(entity.values, resolvedTitleKey);
|
|
312
344
|
if (prop) title = { property: prop,
|
|
313
|
-
propertyKey:
|
|
345
|
+
propertyKey: resolvedTitleKey,
|
|
314
346
|
value: val };
|
|
315
347
|
}
|
|
316
348
|
|
|
317
349
|
// Subtitle
|
|
318
350
|
let subtitle: PreviewSlot | undefined;
|
|
319
|
-
if (subtitleKey) {
|
|
351
|
+
if (subtitleKey && subtitleKey !== resolvedTitleKey) {
|
|
320
352
|
const prop = collection.properties[subtitleKey] as Property | undefined;
|
|
321
353
|
const val = getValueInPath(entity.values, subtitleKey);
|
|
322
354
|
if (prop && val !== undefined && val !== null && val !== "") {
|
|
@@ -441,11 +473,11 @@ function resolveRelationDisplayName(
|
|
|
441
473
|
const data = "data" in relation ? (relation as EntityRelation).data : undefined;
|
|
442
474
|
|
|
443
475
|
// Resolve target collection from either `prop.relation.target()` or `prop.target()` (inline API)
|
|
444
|
-
let targetCollection:
|
|
476
|
+
let targetCollection: AdminCollection | undefined;
|
|
445
477
|
try {
|
|
446
478
|
const resolved = prop.relation?.target?.() ?? (typeof prop.target === "function" ? prop.target() : undefined);
|
|
447
479
|
if (resolved && typeof resolved === "object") {
|
|
448
|
-
targetCollection = resolved as
|
|
480
|
+
targetCollection = resolved as AdminCollection;
|
|
449
481
|
}
|
|
450
482
|
} catch {
|
|
451
483
|
// Target collection may not be resolvable
|
|
@@ -461,14 +493,14 @@ function resolveRelationDisplayName(
|
|
|
461
493
|
|
|
462
494
|
// Helper to check if a property is hidden/internal
|
|
463
495
|
const isHiddenProp = (p: Property): boolean => {
|
|
464
|
-
if (p.
|
|
465
|
-
if (typeof p.
|
|
496
|
+
if (p.admin?.hideFromCollection) return true;
|
|
497
|
+
if (typeof p.admin?.disabled === "object" && p.admin.disabled.hidden) return true;
|
|
466
498
|
return false;
|
|
467
499
|
};
|
|
468
500
|
|
|
469
501
|
// Helper to check if a property is a visible, non-id string
|
|
470
502
|
const isDisplayCandidate = (p: Property): boolean => {
|
|
471
|
-
return p.type === "string" && !p.
|
|
503
|
+
return p.type === "string" && !p.admin?.multiline && !p.admin?.markdown && !p.storage
|
|
472
504
|
&& !("isId" in p && p.isId) && !isHiddenProp(p);
|
|
473
505
|
};
|
|
474
506
|
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { useCallback, useMemo, useRef, useState } from "react";
|
|
2
|
-
import { Entity
|
|
2
|
+
import { Entity } from "@rebasepro/types";
|
|
3
|
+
import { SelectionController } from "@rebasepro/admin-types";
|
|
3
4
|
|
|
4
5
|
export function useSelectionController<M extends Record<string, unknown> = Record<string, unknown>>(
|
|
5
6
|
onSelectionChange?: (entity: Entity<M>, selected: boolean) => void
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { NavigationEntry, NavigationResult } from "@rebasepro/types";
|
|
1
|
+
import type { NavigationEntry, NavigationResult } from "@rebasepro/admin-types";
|
|
2
2
|
import React, { useMemo } from "react";
|
|
3
3
|
|
|
4
4
|
import { useCollapsedGroups, buildCollapsedDefaults, useLargeLayout, useAdminModeController, useAuthController, useModeController, useTranslation, useSlot, useRebaseContext, useAnalyticsController, useRebaseRegistry, useComponentOverride } from "@rebasepro/app";
|
|
@@ -7,7 +7,7 @@ import { useNavigationStateController } from "../hooks/navigation/contexts/Navig
|
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
import { Link, useNavigate } from "react-router-dom";
|
|
10
|
-
import { AnalyticsEvent } from "@rebasepro/types";
|
|
10
|
+
import { AnalyticsEvent } from "@rebasepro/admin-types";
|
|
11
11
|
import {
|
|
12
12
|
Avatar,
|
|
13
13
|
ChevronsLeftIcon,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
|
|
2
2
|
import { Entity, CollectionCallbacks } from "@rebasepro/types";
|
|
3
3
|
import React, { useCallback, useMemo, useState } from "react";
|
|
4
4
|
import { Button, CircularProgress, Dialog, DialogActions, DialogContent, DialogTitle } from "@rebasepro/ui";
|
|
@@ -12,11 +12,12 @@ import {
|
|
|
12
12
|
} from "@rebasepro/app";
|
|
13
13
|
import { useCMSContext } from "../hooks";
|
|
14
14
|
import { EntityViewBinding } from "./EntityViewBinding";
|
|
15
|
+
import type { AdminCollection } from "@rebasepro/admin-types";
|
|
15
16
|
|
|
16
17
|
export interface DeleteEntityDialogProps<M extends Record<string, unknown>> {
|
|
17
18
|
entityOrEntitiesToDelete?: Entity<M> | Entity<M>[],
|
|
18
19
|
path: string,
|
|
19
|
-
collection:
|
|
20
|
+
collection: AdminCollection<M>
|
|
20
21
|
open: boolean;
|
|
21
22
|
onClose: () => void;
|
|
22
23
|
callbacks?: CollectionCallbacks<M>,
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import type { ComponentRef
|
|
1
|
+
import type { ComponentRef } from "@rebasepro/types";
|
|
2
|
+
import type { EntityCustomViewParams, FormViewConfig, AdminCollection } from "@rebasepro/admin-types";
|
|
2
3
|
import type { FormContext } from "../types/fields";
|
|
3
|
-
import type { PluginFormActionProps } from "@rebasepro/types";
|
|
4
|
+
import type { PluginFormActionProps } from "@rebasepro/admin-types";
|
|
4
5
|
import React, { lazy, Suspense, useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
5
6
|
import { Entity, EntityStatus, getCollectionDataPath, Property } from "@rebasepro/types";
|
|
6
|
-
import { PluginProviderStack, resolveComponentRef, useComponentOverride, CollectionScopeProvider } from "@rebasepro/app";
|
|
7
|
+
import { PluginProviderStack, resolveComponentRef, useComponentOverride, CollectionScopeProvider, getAdminSubcollections } from "@rebasepro/app";
|
|
7
8
|
|
|
8
9
|
import { CollectionViewBinding } from "./CollectionViewBinding/CollectionViewBinding";
|
|
9
10
|
import { EntityViewBinding } from "./EntityViewBinding";
|
|
@@ -27,11 +28,8 @@ import {
|
|
|
27
28
|
} from "@rebasepro/ui";
|
|
28
29
|
import { ErrorBoundary } from "@rebasepro/ui";
|
|
29
30
|
import { ErrorView, createFormexStub, usePermissions, useTranslation, getIcon } from "@rebasepro/app";
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
removeInitialAndTrailingSlashes,
|
|
33
|
-
resolveDefaultSelectedView
|
|
34
|
-
} from "@rebasepro/common";
|
|
31
|
+
|
|
32
|
+
import { removeInitialAndTrailingSlashes, resolveDefaultSelectedView } from "@rebasepro/app";
|
|
35
33
|
import { resolvedSelectedEntityView } from "../util/resolutions";
|
|
36
34
|
import {
|
|
37
35
|
useCustomizationController,
|
|
@@ -44,7 +42,8 @@ import { useUrlController } from "../hooks/navigation/contexts/UrlContext";
|
|
|
44
42
|
import { useCollectionRegistryController } from "../hooks/navigation/contexts/CollectionRegistryContext";
|
|
45
43
|
import { useNavigate } from "react-router-dom";
|
|
46
44
|
import { getValueInPath } from "@rebasepro/utils";
|
|
47
|
-
import {
|
|
45
|
+
import { getEntityTitlePropertyKeyForEntity, isUserSelectProperty, resolveTitleToString } from "../util/previews";
|
|
46
|
+
import { getUserLabel, useResolvedUser } from "../hooks/useResolvedUsers";
|
|
48
47
|
import { JsonPreviewBinding } from "../components/JsonPreviewBinding";
|
|
49
48
|
|
|
50
49
|
const EntityHistoryView = lazy(() => import("../components/history").then(m => ({ default: m.EntityHistoryView })));
|
|
@@ -62,12 +61,12 @@ export type OnTabChangeParams<M extends Record<string, unknown>> = {
|
|
|
62
61
|
path: string;
|
|
63
62
|
entityId?: string | number;
|
|
64
63
|
selectedTab?: string;
|
|
65
|
-
collection:
|
|
64
|
+
collection: AdminCollection<M>;
|
|
66
65
|
};
|
|
67
66
|
|
|
68
67
|
export interface DetailViewBindingProps<M extends Record<string, unknown> = Record<string, unknown>> {
|
|
69
68
|
path: string;
|
|
70
|
-
collection:
|
|
69
|
+
collection: AdminCollection<M>;
|
|
71
70
|
entityId: string | number;
|
|
72
71
|
selectedTab?: string;
|
|
73
72
|
parentCollectionSlugs: string[];
|
|
@@ -182,7 +181,7 @@ entityId }
|
|
|
182
181
|
}
|
|
183
182
|
}, [selectedTabProp, defaultSelectedView]);
|
|
184
183
|
|
|
185
|
-
const subcollections =
|
|
184
|
+
const subcollections = getAdminSubcollections(collection).filter(c => !c.hideFromNavigation);
|
|
186
185
|
const subcollectionsCount = subcollections?.length ?? 0;
|
|
187
186
|
const customViews = collection.entityViews ?? [];
|
|
188
187
|
const customViewsCount = customViews?.length ?? 0;
|
|
@@ -263,15 +262,21 @@ entityId }
|
|
|
263
262
|
const pluginActionsTop = useSlot("form.actions.top", formActionTopProps);
|
|
264
263
|
|
|
265
264
|
// Resolve formView.Builder if provided
|
|
266
|
-
const formViewConfig = (collection as
|
|
265
|
+
const formViewConfig = (collection as AdminCollection<M> & { formView?: FormViewConfig<M> }).formView;
|
|
267
266
|
const FormViewBuilder = formViewConfig?.Builder ? resolveComponentRef<EntityCustomViewParams>(formViewConfig.Builder as ComponentRef<EntityCustomViewParams>) : null;
|
|
268
267
|
|
|
269
268
|
// Title resolution
|
|
270
|
-
const titlePropertyKey =
|
|
269
|
+
const titlePropertyKey = getEntityTitlePropertyKeyForEntity(collection, usedEntity?.values, usedEntity?.id);
|
|
271
270
|
const rawTitle = usedEntity?.values && titlePropertyKey ? getValueInPath(usedEntity.values, titlePropertyKey) : undefined;
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
271
|
+
// A user picker stores an id: resolve it to the person, like a relation.
|
|
272
|
+
const titleUser = useResolvedUser(isUserSelectProperty(collection, titlePropertyKey) && typeof rawTitle === "string"
|
|
273
|
+
? rawTitle
|
|
274
|
+
: undefined);
|
|
275
|
+
const title = titleUser
|
|
276
|
+
? getUserLabel(titleUser)
|
|
277
|
+
: (rawTitle !== undefined && rawTitle !== null
|
|
278
|
+
? resolveTitleToString(rawTitle)
|
|
279
|
+
: (collection.singularName ?? collection.name));
|
|
275
280
|
|
|
276
281
|
// Non-action custom views
|
|
277
282
|
const nonActionCustomViews = useMemo(() =>
|
|
@@ -638,7 +643,7 @@ entityId }
|
|
|
638
643
|
return result;
|
|
639
644
|
}
|
|
640
645
|
|
|
641
|
-
function DetailViewSkeleton({ collection }: { collection:
|
|
646
|
+
function DetailViewSkeleton({ collection }: { collection: AdminCollection<Record<string, unknown>> }) {
|
|
642
647
|
return (
|
|
643
648
|
<div className="flex-1 flex flex-row w-full overflow-y-auto justify-center">
|
|
644
649
|
<div className="relative flex flex-row max-w-4xl lg:max-w-3xl xl:max-w-4xl 2xl:max-w-6xl w-full h-fit">
|