@rebasepro/admin 0.4.0 → 0.6.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 +135 -0
- package/dist/CollectionEditorDialog-jA-PLh6N.js +3549 -0
- package/dist/CollectionEditorDialog-jA-PLh6N.js.map +1 -0
- package/dist/CollectionsStudioView-UKouBPOm.js +170 -0
- package/dist/CollectionsStudioView-UKouBPOm.js.map +1 -0
- package/dist/PropertyEditView-DEUddmg_.js +3660 -0
- package/dist/PropertyEditView-DEUddmg_.js.map +1 -0
- package/dist/collection_editor/ConfigControllerProvider.d.ts +2 -2
- package/dist/collection_editor/ui/AddKanbanColumnAction.d.ts +2 -1
- package/dist/collection_editor/ui/CollectionViewHeaderAction.d.ts +2 -1
- 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 -1
- package/dist/collection_editor/ui/MissingReferenceWidget.d.ts +1 -1
- package/dist/collection_editor/ui/NewCollectionButton.d.ts +1 -1
- package/dist/collection_editor/ui/NewCollectionCard.d.ts +1 -1
- package/dist/collection_editor/ui/PropertyAddColumnComponent.d.ts +1 -1
- package/dist/collection_editor/ui/collection_editor/AICollectionGeneratorPopover.d.ts +1 -1
- package/dist/collection_editor/ui/collection_editor/AIModifiedPathsContext.d.ts +1 -1
- package/dist/collection_editor/ui/collection_editor/CollectionDetailsForm.d.ts +2 -1
- package/dist/collection_editor/ui/collection_editor/CollectionEditorDialog.d.ts +2 -2
- package/dist/collection_editor/ui/collection_editor/CollectionEditorWelcomeView.d.ts +2 -2
- package/dist/collection_editor/ui/collection_editor/CollectionJsonImportDialog.d.ts +2 -1
- package/dist/collection_editor/ui/collection_editor/CollectionPropertiesEditorForm.d.ts +1 -1
- package/dist/collection_editor/ui/collection_editor/CollectionRLSTab.d.ts +2 -1
- package/dist/collection_editor/ui/collection_editor/CollectionRelationsTab.d.ts +2 -1
- package/dist/collection_editor/ui/collection_editor/CollectionStudioView.d.ts +2 -1
- package/dist/collection_editor/ui/collection_editor/CollectionYupValidation.d.ts +1 -9
- package/dist/collection_editor/ui/collection_editor/CollectionsStudioView.d.ts +2 -1
- package/dist/collection_editor/ui/collection_editor/DisplaySettingsForm.d.ts +2 -1
- package/dist/collection_editor/ui/collection_editor/EntityActionsEditTab.d.ts +2 -1
- package/dist/collection_editor/ui/collection_editor/EntityActionsSelectDialog.d.ts +2 -1
- package/dist/collection_editor/ui/collection_editor/EntityCustomViewsSelectDialog.d.ts +2 -1
- package/dist/collection_editor/ui/collection_editor/EnumForm.d.ts +2 -1
- package/dist/collection_editor/ui/collection_editor/GeneralSettingsForm.d.ts +2 -1
- package/dist/collection_editor/ui/collection_editor/GetCodeDialog.d.ts +2 -1
- package/dist/collection_editor/ui/collection_editor/KanbanConfigSection.d.ts +2 -1
- package/dist/collection_editor/ui/collection_editor/LayoutModeSwitch.d.ts +1 -1
- package/dist/collection_editor/ui/collection_editor/PropertyEditView.d.ts +4 -3
- package/dist/collection_editor/ui/collection_editor/PropertyFieldPreview.d.ts +2 -2
- package/dist/collection_editor/ui/collection_editor/PropertyTree.d.ts +2 -2
- package/dist/collection_editor/ui/collection_editor/SubcollectionsEditTab.d.ts +2 -1
- package/dist/collection_editor/ui/collection_editor/SwitchControl.d.ts +2 -1
- package/dist/collection_editor/ui/collection_editor/ViewModeSwitch.d.ts +1 -1
- package/dist/collection_editor/ui/collection_editor/import/CollectionEditorImportDataPreview.d.ts +1 -1
- package/dist/collection_editor/ui/collection_editor/import/CollectionEditorImportMapping.d.ts +3 -2
- package/dist/collection_editor/ui/collection_editor/properties/BlockPropertyField.d.ts +2 -1
- package/dist/collection_editor/ui/collection_editor/properties/BooleanPropertyField.d.ts +2 -1
- package/dist/collection_editor/ui/collection_editor/properties/DateTimePropertyField.d.ts +2 -1
- package/dist/collection_editor/ui/collection_editor/properties/EnumPropertyField.d.ts +2 -1
- package/dist/collection_editor/ui/collection_editor/properties/KeyValuePropertyField.d.ts +2 -1
- package/dist/collection_editor/ui/collection_editor/properties/MapPropertyField.d.ts +2 -1
- package/dist/collection_editor/ui/collection_editor/properties/MarkdownPropertyField.d.ts +2 -1
- package/dist/collection_editor/ui/collection_editor/properties/NumberPropertyField.d.ts +2 -1
- package/dist/collection_editor/ui/collection_editor/properties/ReferencePropertyField.d.ts +3 -2
- package/dist/collection_editor/ui/collection_editor/properties/RelationPropertyField.d.ts +2 -1
- package/dist/collection_editor/ui/collection_editor/properties/RepeatPropertyField.d.ts +2 -1
- package/dist/collection_editor/ui/collection_editor/properties/StoragePropertyField.d.ts +2 -1
- package/dist/collection_editor/ui/collection_editor/properties/StringPropertyField.d.ts +2 -1
- package/dist/collection_editor/ui/collection_editor/properties/UrlPropertyField.d.ts +2 -1
- package/dist/collection_editor/ui/collection_editor/properties/VectorPropertyField.d.ts +2 -1
- package/dist/collection_editor/ui/collection_editor/properties/advanced/AdvancedPropertyValidation.d.ts +2 -1
- package/dist/collection_editor/ui/collection_editor/properties/conditions/ConditionsEditor.d.ts +2 -1
- package/dist/collection_editor/ui/collection_editor/properties/conditions/ConditionsPanel.d.ts +1 -1
- package/dist/collection_editor/ui/collection_editor/properties/conditions/EnumConditionsEditor.d.ts +2 -1
- package/dist/collection_editor/ui/collection_editor/properties/validation/ArrayPropertyValidation.d.ts +2 -1
- package/dist/collection_editor/ui/collection_editor/properties/validation/GeneralPropertyValidation.d.ts +2 -1
- package/dist/collection_editor/ui/collection_editor/properties/validation/NumberPropertyValidation.d.ts +2 -1
- package/dist/collection_editor/ui/collection_editor/properties/validation/StringPropertyValidation.d.ts +2 -1
- package/dist/collection_editor/ui/collection_editor/properties/validation/ValidationPanel.d.ts +1 -1
- package/dist/collection_editor/ui/collection_editor/templates/blog_template.d.ts +1 -1
- package/dist/collection_editor/ui/collection_editor/templates/pages_template.d.ts +1 -1
- package/dist/collection_editor/ui/collection_editor/templates/products_template.d.ts +1 -1
- package/dist/collection_editor/ui/collection_editor/templates/users_template.d.ts +1 -1
- package/dist/collection_editor_ui.js +4 -11
- package/dist/components/ArrayContainer.d.ts +3 -3
- package/dist/components/ClearFilterSortButton.d.ts +1 -1
- package/dist/components/CollectionEditorDialogs.d.ts +2 -1
- package/dist/components/CollectionPanel.d.ts +2 -27
- package/dist/components/DefaultAppBar.d.ts +1 -1
- package/dist/components/DefaultDrawer.d.ts +4 -4
- package/dist/components/DeleteEntityDialog.d.ts +2 -1
- package/dist/components/DrawerNavigationGroup.d.ts +1 -1
- package/dist/components/DrawerNavigationItem.d.ts +1 -1
- package/dist/components/EntityCollectionTable/EntityCollectionRowActions.d.ts +1 -1
- package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +2 -1
- package/dist/components/EntityCollectionTable/fields/TableMultipleRelationField.d.ts +3 -3
- package/dist/components/EntityCollectionTable/fields/TableReferenceField.d.ts +3 -3
- package/dist/components/EntityCollectionTable/fields/TableRelationField.d.ts +3 -3
- package/dist/components/EntityCollectionTable/fields/TableRelationSelectorField.d.ts +2 -1
- package/dist/components/EntityCollectionTable/fields/TableStorageUpload.d.ts +2 -2
- package/dist/components/EntityCollectionTable/fields/VirtualTableDateField.d.ts +1 -1
- package/dist/components/EntityCollectionTable/fields/VirtualTableInput.d.ts +2 -1
- package/dist/components/EntityCollectionTable/fields/VirtualTableNumberInput.d.ts +2 -1
- package/dist/components/EntityCollectionTable/fields/VirtualTableSelect.d.ts +1 -1
- package/dist/components/EntityCollectionTable/fields/VirtualTableSwitch.d.ts +2 -1
- package/dist/components/EntityCollectionTable/fields/VirtualTableUserSelect.d.ts +1 -1
- package/dist/components/EntityCollectionTable/internal/CollectionTableToolbar.d.ts +1 -1
- package/dist/components/EntityCollectionTable/internal/EntityTableCellActions.d.ts +1 -1
- package/dist/components/EntityCollectionTable/internal/popup_field/PopupFormField.d.ts +4 -3
- package/dist/components/EntityCollectionView/Board.d.ts +2 -1
- package/dist/components/EntityCollectionView/BoardColumnTitle.d.ts +1 -1
- package/dist/components/EntityCollectionView/BoardSortableList.d.ts +1 -1
- package/dist/components/EntityCollectionView/EntityBoardCard.d.ts +1 -1
- package/dist/components/EntityCollectionView/EntityCard.d.ts +2 -1
- package/dist/components/EntityCollectionView/EntityCollectionBoardView.d.ts +1 -1
- package/dist/components/EntityCollectionView/EntityCollectionCardView.d.ts +1 -1
- package/dist/components/EntityCollectionView/EntityCollectionListView.d.ts +1 -1
- package/dist/components/EntityCollectionView/EntityCollectionView.d.ts +0 -24
- package/dist/components/EntityCollectionView/EntityCollectionViewActions.d.ts +1 -1
- package/dist/components/EntityCollectionView/EntityCollectionViewStartActions.d.ts +2 -1
- package/dist/components/EntityCollectionView/FilterPresetsButton.d.ts +2 -1
- package/dist/components/EntityCollectionView/FiltersDialog.d.ts +2 -1
- package/dist/components/EntityCollectionView/SplitListView.d.ts +1 -1
- package/dist/components/EntityCollectionView/ViewModeToggle.d.ts +2 -1
- package/dist/components/EntityDetailView.d.ts +1 -1
- package/dist/components/EntityEditView.d.ts +2 -2
- package/dist/components/EntityEditViewFormActions.d.ts +2 -1
- package/dist/components/EntityJsonPreview.d.ts +2 -1
- package/dist/components/EntityPreview.d.ts +3 -3
- package/dist/components/EntitySidePanel.d.ts +2 -1
- package/dist/components/EntityView.d.ts +2 -1
- package/dist/components/FieldCaption.d.ts +1 -1
- package/dist/components/HomePage/ContentHomePage.d.ts +1 -1
- package/dist/components/HomePage/FavouritesView.d.ts +1 -1
- package/dist/components/HomePage/HomePageDnD.d.ts +4 -4
- package/dist/components/HomePage/NavigationCard.d.ts +1 -1
- package/dist/components/HomePage/NavigationCardBinding.d.ts +2 -1
- package/dist/components/HomePage/NavigationGroup.d.ts +2 -2
- package/dist/components/HomePage/RenameGroupDialog.d.ts +2 -1
- package/dist/components/HomePage/SmallNavigationCard.d.ts +1 -1
- package/dist/components/PropertyCollectionView.d.ts +2 -1
- package/dist/components/PropertyIdCopyTooltip.d.ts +2 -2
- package/dist/components/RebaseAuthGate.d.ts +1 -1
- package/dist/components/RebaseLayout.d.ts +1 -1
- package/dist/components/RebaseNavigation.d.ts +1 -1
- package/dist/components/RebaseRouteDefs.d.ts +1 -1
- package/dist/components/RebaseShell.d.ts +1 -1
- package/dist/components/ReferenceTable/EntitySelectionTable.d.ts +1 -1
- package/dist/components/ReferenceWidget.d.ts +2 -1
- package/dist/components/SearchIconsView.d.ts +2 -1
- package/dist/components/SelectableTable/SelectableTable.d.ts +2 -2
- package/dist/components/SelectableTable/filters/BooleanFilterField.d.ts +2 -1
- package/dist/components/SelectableTable/filters/DateTimeFilterField.d.ts +2 -1
- package/dist/components/SelectableTable/filters/ReferenceFilterField.d.ts +2 -1
- package/dist/components/SelectableTable/filters/RelationFilterField.d.ts +2 -1
- package/dist/components/SelectableTable/filters/StringNumberFilterField.d.ts +2 -1
- package/dist/components/SideDialogs.d.ts +1 -1
- package/dist/components/SideEntityProvider.d.ts +1 -1
- package/dist/components/admin/CreationResultDialog.d.ts +2 -1
- package/dist/components/app/AppBar.d.ts +1 -1
- package/dist/components/app/Drawer.d.ts +1 -1
- package/dist/components/common/default_entity_actions.d.ts +2 -1
- package/dist/components/history/EntityHistoryEntry.d.ts +1 -1
- package/dist/components/history/EntityHistoryView.d.ts +1 -1
- package/dist/components/history/LastEditedByFormAction.d.ts +2 -1
- package/dist/components/history/LastEditedByIndicator.d.ts +2 -1
- package/dist/components/history/UserChip.d.ts +1 -1
- package/dist/data_export/export/BasicExportAction.d.ts +2 -1
- package/dist/data_export/export/ExportCollectionAction.d.ts +1 -1
- package/dist/data_import/components/DataNewPropertiesMapping.d.ts +1 -1
- package/dist/data_import/components/ImportFileUpload.d.ts +1 -1
- package/dist/data_import/components/ImportNewPropertyFieldPreview.d.ts +2 -1
- package/dist/data_import/components/ImportSaveInProgress.d.ts +1 -1
- package/dist/data_import/import/ImportCollectionAction.d.ts +4 -3
- package/dist/editor/components/SlashCommandMenu.d.ts +2 -1
- package/dist/editor/editor.d.ts +1 -1
- package/dist/editor/selectors/color-selector.d.ts +1 -1
- package/dist/editor/selectors/link-selector.d.ts +1 -1
- package/dist/editor/selectors/node-selector.d.ts +1 -1
- package/dist/editor/selectors/text-buttons.d.ts +1 -1
- package/dist/editor.js +2621 -3574
- package/dist/editor.js.map +1 -1
- package/dist/form/EntityForm.d.ts +2 -1
- package/dist/form/EntityFormActions.d.ts +2 -1
- package/dist/form/components/FieldHelperText.d.ts +1 -1
- package/dist/form/components/FormEntry.d.ts +1 -1
- package/dist/form/components/FormLayout.d.ts +1 -1
- package/dist/form/components/LabelWithIconAndTooltip.d.ts +1 -1
- package/dist/form/components/LocalChangesMenu.d.ts +2 -1
- package/dist/form/components/StorageItemPreview.d.ts +2 -1
- package/dist/form/components/StorageUploadProgress.d.ts +2 -1
- package/dist/form/field_bindings/ArrayCustomShapedFieldBinding.d.ts +2 -1
- package/dist/form/field_bindings/ArrayOfReferencesFieldBinding.d.ts +2 -1
- package/dist/form/field_bindings/BlockFieldBinding.d.ts +2 -1
- package/dist/form/field_bindings/DateTimeFieldBinding.d.ts +2 -1
- package/dist/form/field_bindings/KeyValueFieldBinding.d.ts +2 -1
- package/dist/form/field_bindings/MapFieldBinding.d.ts +2 -1
- package/dist/form/field_bindings/MarkdownEditorFieldBinding.d.ts +2 -1
- package/dist/form/field_bindings/MultiSelectFieldBinding.d.ts +2 -1
- package/dist/form/field_bindings/MultipleRelationFieldBinding.d.ts +2 -1
- package/dist/form/field_bindings/ReadOnlyFieldBinding.d.ts +2 -1
- package/dist/form/field_bindings/ReferenceAsStringFieldBinding.d.ts +2 -1
- package/dist/form/field_bindings/ReferenceFieldBinding.d.ts +2 -1
- package/dist/form/field_bindings/RelationFieldBinding.d.ts +2 -1
- package/dist/form/field_bindings/RepeatFieldBinding.d.ts +2 -1
- package/dist/form/field_bindings/SelectFieldBinding.d.ts +2 -1
- package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +3 -2
- package/dist/form/field_bindings/SwitchFieldBinding.d.ts +2 -1
- package/dist/form/field_bindings/TextFieldBinding.d.ts +2 -1
- package/dist/form/field_bindings/UserSelectFieldBinding.d.ts +2 -1
- package/dist/form/field_bindings/VectorFieldBinding.d.ts +2 -1
- package/dist/history-BL49TIDb.js +311 -0
- package/dist/history-BL49TIDb.js.map +1 -0
- package/dist/hooks/navigation/useBuildNavigationStateController.d.ts +0 -2
- package/dist/hooks/navigation/useNavigationResolution.d.ts +5 -6
- package/dist/hooks/navigation/useResolvedCollections.d.ts +0 -2
- package/dist/hooks/useBreadcrumbsController.d.ts +2 -32
- package/dist/index.js +2 -3393
- package/dist/markdown-CklalUUk.js +526 -0
- package/dist/markdown-CklalUUk.js.map +1 -0
- package/dist/preview/components/ArrayEnumPreview.d.ts +2 -1
- package/dist/preview/components/EmptyValue.d.ts +2 -1
- package/dist/preview/components/EnumValuesChip.d.ts +1 -1
- package/dist/preview/components/ImagePreview.d.ts +2 -1
- package/dist/preview/components/ReferencePreview.d.ts +2 -1
- package/dist/preview/components/RelationPreview.d.ts +2 -1
- package/dist/preview/components/StorageThumbnail.d.ts +1 -1
- package/dist/preview/components/UserPreview.d.ts +6 -3
- package/dist/preview/property_previews/ArrayOfMapsPreview.d.ts +2 -1
- package/dist/preview/property_previews/ArrayOfReferencesPreview.d.ts +1 -1
- package/dist/preview/property_previews/ArrayOfRelationsPreview.d.ts +1 -1
- package/dist/preview/property_previews/ArrayOfStorageComponentsPreview.d.ts +2 -1
- package/dist/preview/property_previews/ArrayOfStringsPreview.d.ts +2 -1
- package/dist/preview/property_previews/ArrayOneOfPreview.d.ts +2 -1
- package/dist/preview/property_previews/ArrayPropertyEnumPreview.d.ts +1 -1
- package/dist/preview/property_previews/ArrayPropertyPreview.d.ts +2 -1
- package/dist/preview/property_previews/MapPropertyPreview.d.ts +3 -2
- package/dist/preview/property_previews/SkeletonPropertyComponent.d.ts +5 -4
- package/dist/rolldown-runtime-D7D4PA-g.js +13 -0
- package/dist/routes/RebaseRoute.d.ts +1 -1
- package/dist/src-BJ8fkM8y.js +24010 -0
- package/dist/src-BJ8fkM8y.js.map +1 -0
- package/dist/types/components/PropertyPreviewProps.d.ts +4 -0
- package/dist/types/components/formex.d.ts +1 -40
- package/dist/types/fields.d.ts +9 -1
- package/dist/util/navigation_utils.d.ts +2 -1
- package/dist/util/previews.d.ts +5 -0
- package/dist/util/property_utils.d.ts +1 -1
- package/package.json +29 -27
- package/src/collection_editor/ConfigControllerProvider.tsx +10 -7
- package/src/collection_editor/ui/CollectionViewHeaderAction.tsx +2 -1
- package/src/collection_editor/ui/EditorCollectionAction.tsx +2 -1
- package/src/collection_editor/ui/EditorCollectionActionStart.tsx +2 -1
- package/src/collection_editor/ui/EditorEntityAction.tsx +2 -1
- package/src/collection_editor/ui/KanbanSetupAction.tsx +2 -1
- package/src/collection_editor/ui/MissingReferenceWidget.tsx +2 -1
- package/src/collection_editor/ui/PropertyAddColumnComponent.tsx +2 -1
- package/src/collection_editor/ui/collection_editor/CollectionDetailsForm.tsx +2 -3
- package/src/collection_editor/ui/collection_editor/CollectionEditorDialog.tsx +0 -1
- package/src/collection_editor/ui/collection_editor/CollectionPropertiesEditorForm.tsx +8 -4
- package/src/collection_editor/ui/collection_editor/CollectionRelationsTab.tsx +2 -2
- package/src/collection_editor/ui/collection_editor/DisplaySettingsForm.tsx +2 -1
- package/src/collection_editor/ui/collection_editor/PropertyEditView.tsx +2 -1
- package/src/collection_editor/ui/collection_editor/PropertyFieldPreview.tsx +2 -2
- package/src/collection_editor/ui/collection_editor/properties/RelationPropertyField.tsx +5 -2
- package/src/collection_editor/ui/collection_editor/properties/conditions/ConditionsEditor.tsx +2 -1
- package/src/collection_editor/ui/collection_editor/properties/conditions/EnumConditionsEditor.tsx +1 -1
- package/src/collection_editor/ui/collection_editor/templates/blog_template.ts +1 -1
- package/src/collection_editor/ui/collection_editor/templates/pages_template.ts +1 -1
- package/src/collection_editor/ui/collection_editor/templates/products_template.ts +1 -1
- package/src/collection_editor/ui/collection_editor/templates/users_template.ts +1 -1
- package/src/collection_editor/useLocalCollectionsConfigController.tsx +7 -2
- package/src/collection_editor/validateCollectionJson.ts +2 -2
- package/src/components/CollectionPanel.tsx +51 -25
- package/src/components/DefaultAppBar.tsx +1 -2
- package/src/components/DefaultDrawer.tsx +3 -2
- package/src/components/DrawerNavigationGroup.tsx +3 -2
- package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +30 -9
- package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +1 -1
- package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +1 -0
- package/src/components/EntityCollectionTable/internal/popup_field/useDraggable.tsx +5 -2
- package/src/components/EntityCollectionView/Board.tsx +10 -8
- package/src/components/EntityCollectionView/BoardSortableList.tsx +2 -2
- package/src/components/EntityCollectionView/EntityCollectionBoardView.tsx +4 -2
- package/src/components/EntityCollectionView/EntityCollectionCardView.tsx +14 -4
- package/src/components/EntityCollectionView/EntityCollectionListView.tsx +48 -26
- package/src/components/EntityCollectionView/EntityCollectionView.tsx +146 -73
- package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +2 -1
- package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +3 -2
- package/src/components/EntityCollectionView/FilterPresetsButton.tsx +4 -2
- package/src/components/EntityCollectionView/ViewModeToggle.tsx +0 -1
- package/src/components/EntityCollectionView/useBoardDataController.tsx +17 -15
- package/src/components/EntityCollectionView/useEntityPreviewSlots.ts +32 -23
- package/src/components/EntityDetailView.tsx +72 -39
- package/src/components/EntityEditView.tsx +79 -47
- package/src/components/EntitySidePanel.tsx +9 -3
- package/src/components/HomePage/ContentHomePage.tsx +3 -3
- package/src/components/HomePage/NavigationCard.tsx +5 -5
- package/src/components/HomePage/NavigationCardBinding.tsx +1 -1
- package/src/components/RebaseLayout.tsx +5 -2
- package/src/components/RebaseNavigation.tsx +1 -4
- package/src/components/RebaseRouteDefs.tsx +5 -3
- package/src/components/SearchIconsView.tsx +1 -1
- package/src/components/SelectableTable/SelectableTable.tsx +2 -3
- package/src/components/SelectableTable/SelectionStore.ts +9 -3
- package/src/components/UserSelector.tsx +92 -2
- package/src/components/common/default_entity_actions.tsx +23 -6
- package/src/components/field_configs.tsx +6 -3
- package/src/editor/editor.tsx +1 -1
- package/src/editor/extensions/Image/index.ts +2 -2
- package/src/editor/extensions/Image.ts +2 -2
- package/src/editor/extensions/clipboard.ts +2 -2
- package/src/editor/markdown-it-plugins.d.ts +24 -0
- package/src/editor/markdown.ts +2 -3
- package/src/form/EntityForm.tsx +21 -15
- package/src/form/PropertyFieldBinding.tsx +1 -1
- package/src/form/field_bindings/KeyValueFieldBinding.tsx +1 -1
- package/src/form/field_bindings/MapFieldBinding.tsx +5 -47
- package/src/form/field_bindings/VectorFieldBinding.tsx +3 -3
- package/src/form/validation.ts +17 -15
- package/src/hooks/navigation/useBuildNavigationStateController.tsx +3 -6
- package/src/hooks/navigation/useNavigationResolution.ts +143 -19
- package/src/hooks/navigation/useResolvedCollections.ts +4 -6
- package/src/hooks/useBreadcrumbsController.tsx +2 -34
- package/src/hooks/useBuildSideEntityController.tsx +25 -3
- package/src/preview/PropertyPreview.tsx +6 -2
- package/src/preview/components/ReferencePreview.tsx +64 -13
- package/src/preview/components/RelationPreview.tsx +101 -13
- package/src/preview/components/UserPreview.tsx +5 -14
- package/src/preview/property_previews/ArrayOfMapsPreview.tsx +1 -1
- package/src/routes/RebaseRoute.tsx +5 -4
- package/src/types/components/PropertyPreviewProps.tsx +5 -0
- package/src/types/components/formex.tsx +1 -45
- package/src/types/fields.tsx +10 -1
- package/src/util/navigation_utils.ts +14 -4
- package/src/util/previews.ts +101 -4
- package/dist/CollectionEditorDialog-Bo86h-d-.js +0 -4574
- package/dist/CollectionEditorDialog-Bo86h-d-.js.map +0 -1
- package/dist/CollectionsStudioView-bsg4AT_Z.js +0 -217
- package/dist/CollectionsStudioView-bsg4AT_Z.js.map +0 -1
- package/dist/ExportCollectionAction-Cf-Id5uO.js +0 -446
- package/dist/ExportCollectionAction-Cf-Id5uO.js.map +0 -1
- package/dist/ImportCollectionAction-LN5sreK9.js +0 -685
- package/dist/ImportCollectionAction-LN5sreK9.js.map +0 -1
- package/dist/PropertyEditView-jCWCxmCz.js +0 -8197
- package/dist/PropertyEditView-jCWCxmCz.js.map +0 -1
- package/dist/collection_editor_ui.js.map +0 -1
- package/dist/index-BrqSvMG0.js +0 -8
- package/dist/index-BrqSvMG0.js.map +0 -1
- package/dist/index-Cb0bPnzZ.js +0 -12
- package/dist/index-Cb0bPnzZ.js.map +0 -1
- package/dist/index-z3H8iqsj.js +0 -462
- package/dist/index-z3H8iqsj.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/markdown-DD2JDU1X.js +0 -618
- package/dist/markdown-DD2JDU1X.js.map +0 -1
- package/dist/useEntityHistory-UVsSclfZ.js +0 -123
- package/dist/useEntityHistory-UVsSclfZ.js.map +0 -1
- package/dist/util-CvNp6A-r.js +0 -30505
- package/dist/util-CvNp6A-r.js.map +0 -1
|
@@ -3,10 +3,12 @@ import * as React from "react";
|
|
|
3
3
|
|
|
4
4
|
import { Entity, EntityRelation } from "@rebasepro/types";
|
|
5
5
|
import type { PreviewSize } from "../../types/components/PropertyPreviewProps";
|
|
6
|
-
import { useCustomizationController, useEntityFetch, ErrorView } from "@rebasepro/core";
|
|
6
|
+
import { useCustomizationController, useEntityFetch, ErrorView, useComponentOverride, CollectionComponentOverrideProvider } from "@rebasepro/core";
|
|
7
7
|
import { Skeleton } from "@rebasepro/ui";
|
|
8
8
|
import { EntityPreview, EntityPreviewContainer } from "../../components";
|
|
9
9
|
import { useCollectionRegistryController } from "../../index";
|
|
10
|
+
import { getEntityTitlePropertyKey } from "../../util/previews";
|
|
11
|
+
import { getValueInPath } from "@rebasepro/utils";
|
|
10
12
|
|
|
11
13
|
export type RelationPreviewProps = {
|
|
12
14
|
disabled?: boolean;
|
|
@@ -17,8 +19,45 @@ export type RelationPreviewProps = {
|
|
|
17
19
|
hover?: boolean;
|
|
18
20
|
includeEntityLink?: boolean;
|
|
19
21
|
includeId?: boolean;
|
|
22
|
+
textOnly?: boolean;
|
|
20
23
|
};
|
|
21
24
|
|
|
25
|
+
/**
|
|
26
|
+
* Extract a display name from a plain relation-shaped object that isn't
|
|
27
|
+
* a proper EntityRelation instance. Tries common name fields in the
|
|
28
|
+
* entity's values, then falls back to the id.
|
|
29
|
+
*/
|
|
30
|
+
function extractDisplayFromPlainObject(obj: unknown): string {
|
|
31
|
+
if (!obj || typeof obj !== "object") return "—";
|
|
32
|
+
const record = obj as Record<string, unknown>;
|
|
33
|
+
|
|
34
|
+
// Try data.values.{name,title,...} (EntityRelation.data is an Entity with .values)
|
|
35
|
+
const data = record.data;
|
|
36
|
+
if (data && typeof data === "object") {
|
|
37
|
+
const dataRecord = data as Record<string, unknown>;
|
|
38
|
+
const values = (dataRecord.values && typeof dataRecord.values === "object")
|
|
39
|
+
? dataRecord.values as Record<string, unknown>
|
|
40
|
+
: dataRecord;
|
|
41
|
+
const nameFields = ["name", "title", "label", "display_name", "displayName", "email", "username"];
|
|
42
|
+
for (const field of nameFields) {
|
|
43
|
+
const v = values[field];
|
|
44
|
+
if (v && typeof v === "string") return v;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// Try direct fields on the object itself (some serialization paths flatten the data)
|
|
49
|
+
const directFields = ["name", "title", "label", "display_name", "displayName", "email"];
|
|
50
|
+
for (const field of directFields) {
|
|
51
|
+
const v = record[field];
|
|
52
|
+
if (v && typeof v === "string") return v;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// Last resort: show the id
|
|
56
|
+
if ("id" in record && record.id != null) return String(record.id);
|
|
57
|
+
|
|
58
|
+
return "—";
|
|
59
|
+
}
|
|
60
|
+
|
|
22
61
|
/**
|
|
23
62
|
* @group Preview components
|
|
24
63
|
*/
|
|
@@ -26,6 +65,10 @@ export const RelationPreview = function RelationPreview(props: RelationPreviewPr
|
|
|
26
65
|
const relation = props.relation;
|
|
27
66
|
if (!(typeof relation === "object" && "isEntityRelation" in relation && relation.isEntityRelation())) {
|
|
28
67
|
console.warn("Relation preview received value of type", typeof relation);
|
|
68
|
+
if (props.textOnly) {
|
|
69
|
+
const display = extractDisplayFromPlainObject(relation);
|
|
70
|
+
return <span className="truncate">{display}</span>;
|
|
71
|
+
}
|
|
29
72
|
return <EntityPreviewContainer
|
|
30
73
|
onClick={props.onClick}
|
|
31
74
|
size={props.size}>
|
|
@@ -36,7 +79,9 @@ export const RelationPreview = function RelationPreview(props: RelationPreviewPr
|
|
|
36
79
|
return <RelationPreviewInternal {...props}/>;
|
|
37
80
|
};
|
|
38
81
|
|
|
39
|
-
|
|
82
|
+
const DefaultMissingReference: React.FC<{ path: string }> = () => null;
|
|
83
|
+
|
|
84
|
+
function RelationPreviewInternalInner({
|
|
40
85
|
disabled,
|
|
41
86
|
relation,
|
|
42
87
|
previewProperties,
|
|
@@ -44,18 +89,19 @@ function RelationPreviewInternal({
|
|
|
44
89
|
hover,
|
|
45
90
|
onClick,
|
|
46
91
|
includeEntityLink = true,
|
|
47
|
-
includeId = true
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
const collectionRegistryController = useCollectionRegistryController();
|
|
92
|
+
includeId = true,
|
|
93
|
+
textOnly,
|
|
94
|
+
collection
|
|
95
|
+
}: RelationPreviewProps & { collection?: EntityCollection }) {
|
|
96
|
+
const ResolvedMissingReference = useComponentOverride("Entity.MissingReference", DefaultMissingReference);
|
|
53
97
|
|
|
54
|
-
const collection = collectionRegistryController.getCollection(relation.path);
|
|
55
98
|
if (!collection) {
|
|
56
|
-
if (
|
|
57
|
-
return <
|
|
99
|
+
if (ResolvedMissingReference !== DefaultMissingReference) {
|
|
100
|
+
return <ResolvedMissingReference path={relation.path}/>;
|
|
58
101
|
} else {
|
|
102
|
+
if (textOnly) {
|
|
103
|
+
return <span>{relation.path}</span>;
|
|
104
|
+
}
|
|
59
105
|
return <EntityPreviewContainer size={size}>
|
|
60
106
|
<ErrorView error={`Collection not found: ${relation.path}`}/>
|
|
61
107
|
</EntityPreviewContainer>;
|
|
@@ -71,9 +117,31 @@ function RelationPreviewInternal({
|
|
|
71
117
|
includeEntityLink={includeEntityLink}
|
|
72
118
|
includeId={includeId}
|
|
73
119
|
onClick={onClick}
|
|
120
|
+
textOnly={textOnly}
|
|
74
121
|
hover={hover}/>
|
|
75
122
|
}
|
|
76
123
|
|
|
124
|
+
function RelationPreviewInternal(props: RelationPreviewProps) {
|
|
125
|
+
const collectionRegistryController = useCollectionRegistryController();
|
|
126
|
+
const collection = collectionRegistryController.getCollection(props.relation.path);
|
|
127
|
+
|
|
128
|
+
const content = (
|
|
129
|
+
<RelationPreviewInternalInner
|
|
130
|
+
{...props}
|
|
131
|
+
collection={collection}
|
|
132
|
+
/>
|
|
133
|
+
);
|
|
134
|
+
|
|
135
|
+
if (collection?.components) {
|
|
136
|
+
return (
|
|
137
|
+
<CollectionComponentOverrideProvider overrides={collection.components}>
|
|
138
|
+
{content}
|
|
139
|
+
</CollectionComponentOverrideProvider>
|
|
140
|
+
);
|
|
141
|
+
}
|
|
142
|
+
return content;
|
|
143
|
+
}
|
|
144
|
+
|
|
77
145
|
function RelationPreviewExisting<M extends Record<string, unknown> = Record<string, unknown>>({
|
|
78
146
|
relation,
|
|
79
147
|
collection,
|
|
@@ -83,12 +151,15 @@ function RelationPreviewExisting<M extends Record<string, unknown> = Record<stri
|
|
|
83
151
|
includeEntityLink,
|
|
84
152
|
includeId,
|
|
85
153
|
onClick,
|
|
86
|
-
hover
|
|
154
|
+
hover,
|
|
155
|
+
textOnly
|
|
87
156
|
}: RelationPreviewProps & {
|
|
88
157
|
collection: EntityCollection<M>
|
|
89
158
|
}) {
|
|
90
159
|
|
|
91
160
|
const passedEntity = relation.data;
|
|
161
|
+
const ResolvedEntityPreview = useComponentOverride("Entity.Preview", EntityPreview);
|
|
162
|
+
const customizationController = useCustomizationController();
|
|
92
163
|
|
|
93
164
|
const {
|
|
94
165
|
entity,
|
|
@@ -117,6 +188,9 @@ function RelationPreviewExisting<M extends Record<string, unknown> = Record<stri
|
|
|
117
188
|
}
|
|
118
189
|
|
|
119
190
|
if (body) {
|
|
191
|
+
if (textOnly) {
|
|
192
|
+
return <span>{relation.id}</span>;
|
|
193
|
+
}
|
|
120
194
|
return (
|
|
121
195
|
<EntityPreviewContainer onClick={disabled ? undefined : onClick}
|
|
122
196
|
hover={disabled ? undefined : hover}
|
|
@@ -127,6 +201,9 @@ function RelationPreviewExisting<M extends Record<string, unknown> = Record<stri
|
|
|
127
201
|
}
|
|
128
202
|
|
|
129
203
|
if (dataLoading && !usedEntity) {
|
|
204
|
+
if (textOnly) {
|
|
205
|
+
return <Skeleton className="inline-block w-20 h-4" />;
|
|
206
|
+
}
|
|
130
207
|
return (
|
|
131
208
|
<EntityPreviewContainer onClick={disabled ? undefined : onClick}
|
|
132
209
|
hover={disabled ? undefined : hover}
|
|
@@ -137,6 +214,9 @@ function RelationPreviewExisting<M extends Record<string, unknown> = Record<stri
|
|
|
137
214
|
}
|
|
138
215
|
|
|
139
216
|
if (!usedEntity) {
|
|
217
|
+
if (textOnly) {
|
|
218
|
+
return <span>{relation.id}</span>;
|
|
219
|
+
}
|
|
140
220
|
return (
|
|
141
221
|
<EntityPreviewContainer onClick={disabled ? undefined : onClick}
|
|
142
222
|
hover={disabled ? undefined : hover}
|
|
@@ -145,7 +225,15 @@ function RelationPreviewExisting<M extends Record<string, unknown> = Record<stri
|
|
|
145
225
|
</EntityPreviewContainer>
|
|
146
226
|
);
|
|
147
227
|
}
|
|
148
|
-
|
|
228
|
+
|
|
229
|
+
if (textOnly) {
|
|
230
|
+
const titleProperty = getEntityTitlePropertyKey(collection, customizationController.propertyConfigs);
|
|
231
|
+
const titleValue = titleProperty ? getValueInPath(usedEntity.values, titleProperty) : undefined;
|
|
232
|
+
const displayValue = titleValue !== undefined && titleValue !== null ? String(titleValue) : String(relation.id);
|
|
233
|
+
return <span className="truncate">{displayValue}</span>;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
return <ResolvedEntityPreview size={size}
|
|
149
237
|
previewKeys={previewProperties}
|
|
150
238
|
disabled={disabled}
|
|
151
239
|
entity={usedEntity}
|
|
@@ -1,30 +1,21 @@
|
|
|
1
|
-
|
|
2
1
|
import type { PropertyPreviewProps } from "../../types/components/PropertyPreviewProps";
|
|
3
2
|
import type { StringProperty } from "@rebasepro/types";
|
|
4
3
|
import React from "react";
|
|
5
|
-
import { useInternalUserManagementController } from "@rebasepro/core";
|
|
6
|
-
import { UserDisplay } from "@rebasepro/core";
|
|
7
4
|
import { EmptyValue } from "./EmptyValue";
|
|
8
5
|
import { Typography } from "@rebasepro/ui";
|
|
9
|
-
import { User } from "@rebasepro/types";
|
|
10
6
|
|
|
11
7
|
/**
|
|
12
|
-
* Preview component for displaying user
|
|
13
|
-
*
|
|
8
|
+
* Preview component for displaying a user reference value.
|
|
9
|
+
*
|
|
10
|
+
* Shows the raw user ID. Collection-based user management means
|
|
11
|
+
* user records are fetched through the standard data layer.
|
|
14
12
|
*
|
|
15
13
|
* @group Preview components
|
|
16
14
|
*/
|
|
17
15
|
export function UserPreview({ value }: PropertyPreviewProps<StringProperty>) {
|
|
18
|
-
const getUser = useInternalUserManagementController<User>()?.getUser;
|
|
19
|
-
|
|
20
16
|
if (typeof value !== "string" || !value) {
|
|
21
17
|
return <EmptyValue/>;
|
|
22
18
|
}
|
|
23
19
|
|
|
24
|
-
|
|
25
|
-
if (!user) {
|
|
26
|
-
return <Typography variant={"caption"} color={"secondary"}>User not found: {value}</Typography>;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
return <UserDisplay user={user}/>;
|
|
20
|
+
return <Typography variant={"caption"} color={"secondary"}>{value}</Typography>;
|
|
30
21
|
}
|
|
@@ -25,7 +25,7 @@ export function ArrayOfMapsPreview({
|
|
|
25
25
|
const mapProperty = property.of;
|
|
26
26
|
const properties = mapProperty.properties;
|
|
27
27
|
if (!properties) {
|
|
28
|
-
throw Error(`You need to specify a 'properties' prop (or specify a custom field) in your map property ${propertyKey}`);
|
|
28
|
+
throw Error(`You need to specify a 'properties' prop (or specify a custom field) in your map property '${propertyKey}'${mapProperty.name ? ` ("${mapProperty.name}")` : ""}`);
|
|
29
29
|
}
|
|
30
30
|
const values = value as Record<string, unknown>[];
|
|
31
31
|
const previewProperties: string[] | undefined = (mapProperty as MapProperty).previewProperties;
|
|
@@ -5,7 +5,7 @@ import { EntityDetailView } from "../components/EntityDetailView";
|
|
|
5
5
|
import { useEffect, useRef, useState } from "react";
|
|
6
6
|
import { useNavigate } from "react-router-dom";
|
|
7
7
|
import { EntityCollectionView } from "../components";
|
|
8
|
-
import { NotFoundPage, useUserConfigurationPersistence } from "@rebasepro/core";
|
|
8
|
+
import { NotFoundPage, useUserConfigurationPersistence, useComponentOverride } from "@rebasepro/core";
|
|
9
9
|
import { UnsavedChangesDialog } from "@rebasepro/core";
|
|
10
10
|
import { CircularProgressCenter } from "@rebasepro/ui";
|
|
11
11
|
import { getNavigationEntriesFromPath, NavigationViewCollectionInternal, NavigationViewEntityCustomInternal, NavigationViewInternal } from "@rebasepro/common";
|
|
@@ -20,6 +20,7 @@ export function RebaseRoute() {
|
|
|
20
20
|
const urlController = useUrlController();
|
|
21
21
|
const breadcrumbs = useBreadcrumbsController();
|
|
22
22
|
const userConfigPersistence = useUserConfigurationPersistence();
|
|
23
|
+
const ResolvedCollectionView = useComponentOverride("Collection.View", EntityCollectionView);
|
|
23
24
|
|
|
24
25
|
const hash = location.hash;
|
|
25
26
|
const isSidePanel = hash.includes("#side");
|
|
@@ -91,7 +92,7 @@ export function RebaseRoute() {
|
|
|
91
92
|
}
|
|
92
93
|
return null;
|
|
93
94
|
}
|
|
94
|
-
return <
|
|
95
|
+
return <ResolvedCollectionView
|
|
95
96
|
key={`collection_view_${collection.slug}`}
|
|
96
97
|
{...collection}
|
|
97
98
|
parentCollectionSlugs={[]} parentEntityIds={[]}
|
|
@@ -114,7 +115,7 @@ export function RebaseRoute() {
|
|
|
114
115
|
}
|
|
115
116
|
return null;
|
|
116
117
|
}
|
|
117
|
-
return <
|
|
118
|
+
return <ResolvedCollectionView
|
|
118
119
|
key={`collection_view_${collection.slug}`}
|
|
119
120
|
{...collection}
|
|
120
121
|
parentCollectionSlugs={[]} parentEntityIds={[]}
|
|
@@ -185,7 +186,7 @@ export function RebaseRoute() {
|
|
|
185
186
|
}
|
|
186
187
|
}
|
|
187
188
|
}
|
|
188
|
-
return <
|
|
189
|
+
return <ResolvedCollectionView
|
|
189
190
|
key={`collection_view_${collection.slug}`}
|
|
190
191
|
{...collection}
|
|
191
192
|
parentCollectionSlugs={[]} parentEntityIds={[]}
|
|
@@ -1,46 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
export type { FormexController, FormexResetProps } from "@rebasepro/formex";
|
|
2
2
|
|
|
3
|
-
// this is duplicated from the formex package
|
|
4
|
-
export type FormexController<T extends object> = {
|
|
5
|
-
values: T;
|
|
6
|
-
initialValues: T;
|
|
7
|
-
setValues: (values: T) => void;
|
|
8
|
-
setFieldValue: (key: string, value: unknown, shouldValidate?: boolean) => void;
|
|
9
|
-
touched: Record<string, boolean>;
|
|
10
|
-
setFieldTouched: (key: string, touched: boolean, shouldValidate?: boolean) => void;
|
|
11
|
-
setTouched: (touched: Record<string, boolean>) => void;
|
|
12
|
-
dirty: boolean;
|
|
13
|
-
setDirty: (dirty: boolean) => void;
|
|
14
|
-
setSubmitCount: (submitCount: number) => void;
|
|
15
|
-
errors: Record<string, string>;
|
|
16
|
-
setFieldError: (key: string, error?: string) => void;
|
|
17
|
-
handleChange: (event: React.SyntheticEvent) => void,
|
|
18
|
-
handleBlur: (event: React.FocusEvent) => void,
|
|
19
|
-
handleSubmit: (event?: FormEvent<HTMLFormElement>) => void;
|
|
20
|
-
validate: () => void;
|
|
21
|
-
resetForm: (props?: FormexResetProps<T>) => void;
|
|
22
|
-
submitCount: number;
|
|
23
|
-
isSubmitting: boolean;
|
|
24
|
-
setSubmitting: (isSubmitting: boolean) => void;
|
|
25
|
-
isValidating: boolean;
|
|
26
|
-
/**
|
|
27
|
-
* The version of the form. This is incremented every time the form is reset
|
|
28
|
-
* or the form is submitted.
|
|
29
|
-
*/
|
|
30
|
-
version: number;
|
|
31
|
-
|
|
32
|
-
debugId?: string;
|
|
33
|
-
|
|
34
|
-
undo: () => void;
|
|
35
|
-
redo: () => void;
|
|
36
|
-
|
|
37
|
-
canUndo: boolean;
|
|
38
|
-
canRedo: boolean;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
export type FormexResetProps<T extends object> = {
|
|
42
|
-
values?: T;
|
|
43
|
-
submitCount?: number;
|
|
44
|
-
errors?: Record<string, string>;
|
|
45
|
-
touched?: Record<string, boolean>;
|
|
46
|
-
};
|
package/src/types/fields.tsx
CHANGED
|
@@ -179,10 +179,19 @@ export interface FormContext<M extends Record<string, unknown> = Record<string,
|
|
|
179
179
|
setFieldValue: (key: string, value: unknown, shouldValidate?: boolean) => void;
|
|
180
180
|
|
|
181
181
|
/**
|
|
182
|
-
*
|
|
182
|
+
* Quietly persist the entity to the database without any UI feedback
|
|
183
|
+
* (no validation, no snackbar, no form reset).
|
|
184
|
+
* Use this for programmatic/background saves from custom views.
|
|
183
185
|
*/
|
|
184
186
|
save: (values: M) => void;
|
|
185
187
|
|
|
188
|
+
/**
|
|
189
|
+
* Submit the form — validates, saves, resets the form, and shows
|
|
190
|
+
* a success snackbar. This is what the Save button calls.
|
|
191
|
+
* Use this from custom views when you want the full "user saved" experience.
|
|
192
|
+
*/
|
|
193
|
+
submit: () => void;
|
|
194
|
+
|
|
186
195
|
/**
|
|
187
196
|
* Collection of the entity being modified
|
|
188
197
|
*/
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { EntityCollection, UrlController, SideEntityController } from "@rebasepro/types";
|
|
1
|
+
import type { EntityCollection, UrlController, SideEntityController, NavigateOptions } from "@rebasepro/types";
|
|
2
2
|
|
|
3
3
|
// Canonical path utilities — single source of truth in @rebasepro/common
|
|
4
4
|
export {
|
|
@@ -26,7 +26,8 @@ export function navigateToEntity({
|
|
|
26
26
|
defaultValues,
|
|
27
27
|
sideEntityController,
|
|
28
28
|
onClose,
|
|
29
|
-
navigation
|
|
29
|
+
navigation,
|
|
30
|
+
replace
|
|
30
31
|
}:
|
|
31
32
|
|
|
32
33
|
{
|
|
@@ -47,7 +48,8 @@ export function navigateToEntity({
|
|
|
47
48
|
path: string;
|
|
48
49
|
sideEntityController: SideEntityController;
|
|
49
50
|
onClose?: () => void;
|
|
50
|
-
navigation: UrlController
|
|
51
|
+
navigation: UrlController;
|
|
52
|
+
replace?: boolean;
|
|
51
53
|
}) {
|
|
52
54
|
|
|
53
55
|
if (openEntityMode === "side_panel" || openEntityMode === "dialog") {
|
|
@@ -83,7 +85,15 @@ export function navigateToEntity({
|
|
|
83
85
|
// Use React Router location.state to carry defaultValues — the correct SPA
|
|
84
86
|
// approach. No URL size limits, no encoding, nothing in the address bar.
|
|
85
87
|
// EntityFullScreenRoute reads location.state.defaultValues on mount.
|
|
86
|
-
|
|
88
|
+
const navigateOptions: NavigateOptions = {};
|
|
89
|
+
if (replace !== undefined) {
|
|
90
|
+
navigateOptions.replace = replace;
|
|
91
|
+
}
|
|
92
|
+
if (defaultValues) {
|
|
93
|
+
navigateOptions.state = { defaultValues };
|
|
94
|
+
}
|
|
95
|
+
const hasOptions = Object.keys(navigateOptions).length > 0;
|
|
96
|
+
navigation.navigate(to, hasOptions ? navigateOptions : undefined);
|
|
87
97
|
}
|
|
88
98
|
|
|
89
99
|
}
|
package/src/util/previews.ts
CHANGED
|
@@ -22,16 +22,18 @@ export function getEntityPreviewKeys(
|
|
|
22
22
|
if (listProperties && listProperties.length > 0) {
|
|
23
23
|
return listProperties;
|
|
24
24
|
} else {
|
|
25
|
-
|
|
25
|
+
const hasExplicitOrder = !!(targetCollection.propertiesOrder as string[] | undefined);
|
|
26
|
+
listProperties = (targetCollection.propertiesOrder as string[]) || allProperties;
|
|
26
27
|
return listProperties
|
|
27
28
|
.filter(key => {
|
|
28
29
|
const prop = targetCollection.properties[key];
|
|
29
30
|
const isIdProp = prop && typeof prop === "object" && "isId" in prop && Boolean((prop as { isId?: boolean }).isId);
|
|
30
|
-
return !isIdProp;
|
|
31
|
+
return !isIdProp && key !== "id";
|
|
31
32
|
})
|
|
32
33
|
.filter(key => {
|
|
33
34
|
const property = targetCollection.properties[key];
|
|
34
|
-
return property && !isPropertyBuilder(property) && !isReferenceProperty(property) && !
|
|
35
|
+
return property && !isPropertyBuilder(property) && !isReferenceProperty(property) && !isHiddenProperty(property)
|
|
36
|
+
&& (hasExplicitOrder || !isRelationProperty(property));
|
|
35
37
|
}).slice(0, limit);
|
|
36
38
|
}
|
|
37
39
|
}
|
|
@@ -40,8 +42,27 @@ export function getEntityTitlePropertyKey<M extends Record<string, unknown>>(col
|
|
|
40
42
|
if (collection.titleProperty) {
|
|
41
43
|
return collection.titleProperty as string;
|
|
42
44
|
}
|
|
43
|
-
|
|
45
|
+
|
|
46
|
+
const hasExplicitOrder = !!(collection.propertiesOrder as string[] | undefined);
|
|
44
47
|
const orderToSearch = (collection.propertiesOrder as string[]) || Object.keys(collection.properties);
|
|
48
|
+
|
|
49
|
+
// If explicit propertiesOrder is set, allow the first non-ID relation or string to be the titleKey
|
|
50
|
+
if (hasExplicitOrder) {
|
|
51
|
+
for (const key of orderToSearch) {
|
|
52
|
+
const property = collection.properties[key];
|
|
53
|
+
if (property && !isPropertyBuilder(property)) {
|
|
54
|
+
const prop = property as Property;
|
|
55
|
+
const isIdProp = prop && typeof prop === "object" && "isId" in prop && Boolean((prop as { isId?: boolean }).isId);
|
|
56
|
+
if (isIdProp || key === "id" || isHiddenProperty(prop)) {
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
if (prop.type === "relation" || prop.type === "string") {
|
|
60
|
+
return key;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
45
66
|
let firstStringCandidate: string | undefined;
|
|
46
67
|
|
|
47
68
|
for (const key of orderToSearch) {
|
|
@@ -65,3 +86,79 @@ export function getEntityTitlePropertyKey<M extends Record<string, unknown>>(col
|
|
|
65
86
|
return firstStringCandidate;
|
|
66
87
|
}
|
|
67
88
|
|
|
89
|
+
/**
|
|
90
|
+
* Attempt to turn a title value (which might be a relation, reference, date, array, or other complex object)
|
|
91
|
+
* into a renderable, human-readable string.
|
|
92
|
+
*/
|
|
93
|
+
export function resolveTitleToString(title: any): string {
|
|
94
|
+
if (title === null || title === undefined) {
|
|
95
|
+
return "";
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
if (typeof title !== "object") {
|
|
99
|
+
return String(title);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// Check if it's a relation shape: { __type: "relation", id, path, data }
|
|
103
|
+
if ("__type" in title && title.__type === "relation") {
|
|
104
|
+
if (title.data && title.data.values) {
|
|
105
|
+
const values = title.data.values;
|
|
106
|
+
// Prioritize common title fields in eagerly loaded relation data
|
|
107
|
+
for (const key of ["name", "title", "label", "displayName"]) {
|
|
108
|
+
if (values[key] !== undefined && values[key] !== null) {
|
|
109
|
+
return String(values[key]);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
// Fallback: search for first short string value in values
|
|
113
|
+
for (const val of Object.values(values)) {
|
|
114
|
+
if (typeof val === "string" && val.length > 0 && val.length < 200) {
|
|
115
|
+
return val;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
if (title.id !== undefined && title.id !== null) {
|
|
120
|
+
return String(title.id);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// Check if it's a reference shape: { isEntityReference() } or similar
|
|
125
|
+
if ("isEntityReference" in title && typeof title.isEntityReference === "function" && title.isEntityReference()) {
|
|
126
|
+
return String(title.id);
|
|
127
|
+
}
|
|
128
|
+
if ("id" in title && "path" in title && !("__type" in title)) {
|
|
129
|
+
// Flat reference/relation-like object
|
|
130
|
+
return String(title.id);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
// Check if it's a Date
|
|
134
|
+
if (title instanceof Date) {
|
|
135
|
+
return title.toLocaleDateString();
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
// Check if it has a string/number property like name/title/label/id
|
|
139
|
+
if ("name" in title && title.name !== undefined && title.name !== null && typeof title.name !== "object") {
|
|
140
|
+
return String(title.name);
|
|
141
|
+
}
|
|
142
|
+
if ("title" in title && title.title !== undefined && title.title !== null && typeof title.title !== "object") {
|
|
143
|
+
return String(title.title);
|
|
144
|
+
}
|
|
145
|
+
if ("label" in title && title.label !== undefined && title.label !== null && typeof title.label !== "object") {
|
|
146
|
+
return String(title.label);
|
|
147
|
+
}
|
|
148
|
+
if ("id" in title && title.id !== undefined && title.id !== null && typeof title.id !== "object") {
|
|
149
|
+
return String(title.id);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
// Fallback: try converting to string, or JSON.stringify if it looks like a generic object
|
|
153
|
+
try {
|
|
154
|
+
const str = String(title);
|
|
155
|
+
if (str !== "[object Object]") {
|
|
156
|
+
return str;
|
|
157
|
+
}
|
|
158
|
+
return JSON.stringify(title);
|
|
159
|
+
} catch {
|
|
160
|
+
return "";
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
|