@rebasepro/admin 0.8.0 → 0.9.1-canary.09aaf62
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 +26 -26
- package/dist/{CollectionEditorDialog-BO_aQ-Z4.js → CollectionEditorDialog-DbPpDDwb.js} +40 -18
- package/dist/CollectionEditorDialog-DbPpDDwb.js.map +1 -0
- package/dist/{PropertyEditView-DKzOpMjR.js → PropertyEditView-DfJbZ67t.js} +81 -73
- package/dist/PropertyEditView-DfJbZ67t.js.map +1 -0
- package/dist/{RouterCollectionsStudioView-BQTIExjA.js → RouterCollectionsStudioView-C6XQ7Il5.js} +5 -5
- package/dist/RouterCollectionsStudioView-C6XQ7Il5.js.map +1 -0
- package/dist/collection_editor/_cms_internals.d.ts +3 -3
- package/dist/collection_editor/api/generateCollectionApi.d.ts +8 -8
- package/dist/collection_editor/extensibility_types.d.ts +3 -3
- package/dist/collection_editor/index.d.ts +2 -2
- package/dist/collection_editor/pgColumnToProperty.d.ts +3 -3
- package/dist/collection_editor/serializable_types.d.ts +7 -7
- package/dist/collection_editor/serializable_utils.d.ts +8 -8
- package/dist/collection_editor/types/collection_editor_controller.d.ts +5 -5
- package/dist/collection_editor/types/collection_inference.d.ts +2 -2
- package/dist/collection_editor/types/config_controller.d.ts +7 -7
- package/dist/collection_editor/ui/AddKanbanColumnAction.d.ts +2 -2
- package/dist/collection_editor/ui/CollectionViewHeaderAction.d.ts +2 -2
- package/dist/collection_editor/ui/KanbanSetupAction.d.ts +2 -2
- 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 +4 -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 +4 -4
- 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 +5 -5
- package/dist/collection_editor/ui/collection_editor/SubcollectionsEditTab.d.ts +3 -3
- package/dist/collection_editor/ui/collection_editor/SwitchControl.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/useLocalCollectionsConfigController.d.ts +2 -2
- package/dist/collection_editor/useSafeSnackbarController.d.ts +1 -1
- package/dist/collection_editor/validateCollectionJson.d.ts +2 -2
- package/dist/collection_editor_ui.js +5 -5
- package/dist/collection_editor_ui.js.map +1 -1
- package/dist/components/CollectionPanel.d.ts +4 -4
- package/dist/components/{EntityCollectionTable/EntityCollectionRowActions.d.ts → CollectionTableBinding/CollectionRowActions.d.ts} +3 -3
- package/dist/components/CollectionTableBinding/CollectionTableBinding.d.ts +28 -0
- package/dist/components/{EntityCollectionTable/EntityCollectionTableProps.d.ts → CollectionTableBinding/CollectionTableBindingProps.d.ts} +2 -2
- package/dist/components/{EntityCollectionTable → CollectionTableBinding}/fields/TableMultipleRelationField.d.ts +2 -2
- package/dist/components/{EntityCollectionTable → CollectionTableBinding}/fields/TableReferenceField.d.ts +2 -2
- package/dist/components/{EntityCollectionTable → CollectionTableBinding}/fields/TableRelationField.d.ts +2 -2
- package/dist/components/CollectionTableBinding/index.d.ts +6 -0
- package/dist/components/{EntityCollectionTable → CollectionTableBinding}/internal/EntityTableCell.d.ts +1 -1
- package/dist/components/{EntityCollectionTable → CollectionTableBinding}/internal/common.d.ts +2 -2
- package/dist/components/{EntityCollectionTable → CollectionTableBinding}/internal/popup_field/PopupFormField.d.ts +3 -3
- package/dist/components/{EntityCollectionTable → CollectionTableBinding}/table_bindings.d.ts +1 -1
- package/dist/components/{EntityCollectionView/EntityBoardCard.d.ts → CollectionViewBinding/BoardCardBinding.d.ts} +8 -8
- package/dist/components/{EntityCollectionView/EntityCollectionBoardView.d.ts → CollectionViewBinding/CollectionBoardViewBinding.d.ts} +4 -4
- package/dist/components/{EntityCollectionView/EntityCollectionCardView.d.ts → CollectionViewBinding/CollectionCardViewBinding.d.ts} +5 -5
- package/dist/components/{EntityCollectionView/EntityCollectionListView.d.ts → CollectionViewBinding/CollectionListViewBinding.d.ts} +4 -4
- package/dist/components/{EntityCollectionView/EntityCollectionViewActions.d.ts → CollectionViewBinding/CollectionViewActions.d.ts} +4 -4
- package/dist/components/{EntityCollectionView/EntityCollectionView.d.ts → CollectionViewBinding/CollectionViewBinding.d.ts} +4 -4
- package/dist/components/{EntityCollectionView/EntityCollectionViewStartActions.d.ts → CollectionViewBinding/CollectionViewStartActions.d.ts} +4 -4
- package/dist/components/CollectionViewBinding/EntityCardBinding.d.ts +21 -0
- package/dist/components/{EntityCollectionView → CollectionViewBinding}/SplitListView.d.ts +3 -3
- package/dist/components/{EntityCollectionView → CollectionViewBinding}/hooks/useCollectionInlineEditor.d.ts +3 -3
- package/dist/components/{EntityCollectionView → CollectionViewBinding}/hooks/useKanbanDragAndDrop.d.ts +2 -2
- package/dist/components/{EntityCollectionView → CollectionViewBinding}/useBoardDataController.d.ts +2 -2
- package/dist/components/{EntityCollectionView/useEntityPreviewSlots.d.ts → CollectionViewBinding/usePreviewSlots.d.ts} +5 -5
- package/dist/components/DeleteEntityDialog.d.ts +4 -4
- package/dist/components/{EntityDetailView.d.ts → DetailViewBinding.d.ts} +5 -5
- package/dist/components/EditFormActions.d.ts +3 -0
- package/dist/components/{EntityEditView.d.ts → EditViewBinding.d.ts} +9 -9
- package/dist/components/{EntityPreview.d.ts → EntityPreviewBinding.d.ts} +13 -13
- package/dist/components/EntityViewBinding.d.ts +13 -0
- package/dist/components/{EntityJsonPreview.d.ts → JsonPreviewBinding.d.ts} +1 -1
- package/dist/components/{RebaseCMS.d.ts → RebaseAdmin.d.ts} +2 -2
- package/dist/components/RebaseLayout.d.ts +5 -4
- package/dist/components/RebaseNavigation.d.ts +1 -1
- package/dist/components/RebaseShell.d.ts +1 -0
- package/dist/components/ReferenceTable/{EntitySelectionTable.d.ts → SelectionTableBinding.d.ts} +5 -5
- package/dist/components/SelectableTable/SelectableTable.d.ts +6 -6
- package/dist/components/SelectableTable/SelectableTableContext.d.ts +3 -3
- package/dist/components/SelectableTable/SelectionStore.d.ts +2 -2
- package/dist/components/SelectableTable/filters/BooleanFilterField.d.ts +6 -1
- package/dist/components/SelectableTable/filters/DateTimeFilterField.d.ts +7 -1
- package/dist/components/SelectableTable/filters/FilterFieldBinding.d.ts +40 -0
- package/dist/components/SelectableTable/filters/ReferenceFilterField.d.ts +7 -1
- package/dist/components/SelectableTable/filters/RelationFilterField.d.ts +7 -1
- package/dist/components/SelectableTable/filters/StringNumberFilterField.d.ts +7 -1
- package/dist/components/SideDialogs.d.ts +1 -1
- package/dist/components/SidePanelBinding.d.ts +11 -0
- package/dist/components/{SideEntityProvider.d.ts → SidePanelProvider.d.ts} +7 -7
- package/dist/components/history/EntityHistoryEntry.d.ts +2 -2
- package/dist/components/history/LastEditedByIndicator.d.ts +2 -2
- package/dist/components/index.d.ts +15 -14
- package/dist/contexts/SidePanelControllerContext.d.ts +3 -0
- package/dist/data_export/export/ExportCollectionAction.d.ts +3 -3
- package/dist/data_import/components/ImportSaveInProgress.d.ts +2 -2
- package/dist/editor.js +1 -1
- package/dist/editor.js.map +1 -1
- package/dist/form/EntityForm.d.ts +1 -1
- package/dist/form/PropertyFieldBinding.d.ts +1 -1
- package/dist/form/components/LocalChangesMenu.d.ts +1 -1
- package/dist/form/components/StorageUploadProgress.d.ts +1 -1
- package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +1 -1
- package/dist/form/form_utils.d.ts +2 -2
- package/dist/{history-B3cqBzEV.js → history-GSa4BgDt.js} +7 -7
- package/dist/history-GSa4BgDt.js.map +1 -0
- package/dist/hooks/index.d.ts +4 -4
- package/dist/hooks/navigation/contexts/CollectionRegistryContext.d.ts +2 -2
- package/dist/hooks/navigation/useBuildNavigationStateController.d.ts +5 -5
- package/dist/hooks/navigation/useNavigationResolution.d.ts +4 -4
- package/dist/hooks/navigation/useResolvedCollections.d.ts +7 -7
- package/dist/hooks/navigation/useTopLevelNavigation.d.ts +2 -2
- package/dist/hooks/navigation/utils.d.ts +5 -5
- package/dist/hooks/useBuildSidePanel.d.ts +6 -0
- package/dist/hooks/useCMSContext.d.ts +2 -2
- package/dist/hooks/{useEntityHistory.d.ts → useHistory.d.ts} +1 -1
- package/dist/hooks/useResolvedNavigationFrom.d.ts +3 -3
- package/dist/hooks/{useEntitySelectionDialog.d.ts → useSelectionDialog.d.ts} +2 -2
- package/dist/hooks/useSideDialogsController.d.ts +1 -1
- package/dist/hooks/useSidePanel.d.ts +11 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/{src-cxV1ODRG.js → src-B8WuGSPZ.js} +886 -692
- package/dist/src-B8WuGSPZ.js.map +1 -0
- package/dist/types/components/EntityFormActionsProps.d.ts +2 -2
- package/dist/types/components/EntityFormProps.d.ts +3 -3
- package/dist/types/components/formex.d.ts +1 -1
- package/dist/types/fields.d.ts +2 -2
- package/dist/util/dataControllerAdapter.d.ts +2 -5
- package/dist/util/navigation_utils.d.ts +6 -6
- package/dist/util/previews.d.ts +3 -3
- package/dist/util/property_utils.d.ts +2 -2
- package/dist/util/{entity_view_constants.d.ts → view_constants.d.ts} +1 -1
- package/package.json +12 -17
- package/src/collection_editor/ConfigControllerProvider.tsx +11 -11
- package/src/collection_editor/_cms_internals.ts +3 -3
- package/src/collection_editor/api/generateCollectionApi.ts +8 -8
- package/src/collection_editor/extensibility_types.ts +3 -3
- package/src/collection_editor/index.ts +3 -3
- package/src/collection_editor/pgColumnToProperty.ts +3 -3
- package/src/collection_editor/serializable_types.ts +8 -8
- package/src/collection_editor/serializable_utils.ts +17 -17
- package/src/collection_editor/types/collection_editor_controller.tsx +5 -5
- package/src/collection_editor/types/collection_inference.ts +2 -2
- package/src/collection_editor/types/config_controller.tsx +7 -7
- package/src/collection_editor/ui/AddKanbanColumnAction.tsx +3 -3
- package/src/collection_editor/ui/CollectionViewHeaderAction.tsx +3 -3
- package/src/collection_editor/ui/EditorCollectionAction.tsx +3 -3
- package/src/collection_editor/ui/EditorCollectionActionStart.tsx +3 -3
- package/src/collection_editor/ui/EditorEntityAction.tsx +3 -3
- package/src/collection_editor/ui/HomePageEditorCollectionAction.tsx +1 -1
- package/src/collection_editor/ui/KanbanSetupAction.tsx +3 -3
- package/src/collection_editor/ui/MissingReferenceWidget.tsx +1 -1
- package/src/collection_editor/ui/NewCollectionButton.tsx +1 -1
- package/src/collection_editor/ui/NewCollectionCard.tsx +1 -1
- package/src/collection_editor/ui/PropertyAddColumnComponent.tsx +3 -3
- package/src/collection_editor/ui/collection_editor/AICollectionGeneratorPopover.tsx +6 -6
- package/src/collection_editor/ui/collection_editor/CollectionDetailsForm.tsx +6 -6
- package/src/collection_editor/ui/collection_editor/CollectionEditorDialog.tsx +29 -29
- package/src/collection_editor/ui/collection_editor/CollectionEditorWelcomeView.tsx +5 -5
- package/src/collection_editor/ui/collection_editor/CollectionJsonImportDialog.tsx +2 -2
- package/src/collection_editor/ui/collection_editor/CollectionPropertiesEditorForm.tsx +10 -10
- package/src/collection_editor/ui/collection_editor/CollectionRLSTab.tsx +38 -7
- package/src/collection_editor/ui/collection_editor/CollectionRelationsTab.tsx +3 -3
- package/src/collection_editor/ui/collection_editor/CollectionStudioView.tsx +3 -3
- package/src/collection_editor/ui/collection_editor/CollectionsStudioView.tsx +3 -3
- package/src/collection_editor/ui/collection_editor/DisplaySettingsForm.tsx +4 -4
- package/src/collection_editor/ui/collection_editor/EntityActionsEditTab.tsx +5 -5
- package/src/collection_editor/ui/collection_editor/EntityActionsSelectDialog.tsx +1 -1
- package/src/collection_editor/ui/collection_editor/EntityCustomViewsSelectDialog.tsx +1 -1
- package/src/collection_editor/ui/collection_editor/EnumForm.tsx +2 -2
- package/src/collection_editor/ui/collection_editor/GeneralSettingsForm.tsx +7 -7
- package/src/collection_editor/ui/collection_editor/GetCodeDialog.tsx +5 -5
- package/src/collection_editor/ui/collection_editor/KanbanConfigSection.tsx +4 -4
- package/src/collection_editor/ui/collection_editor/PropertyEditView.tsx +9 -9
- package/src/collection_editor/ui/collection_editor/PropertyFieldPreview.tsx +46 -37
- package/src/collection_editor/ui/collection_editor/PropertyTree.tsx +2 -2
- package/src/collection_editor/ui/collection_editor/RouterCollectionStudioView.tsx +1 -1
- package/src/collection_editor/ui/collection_editor/SubcollectionsEditTab.tsx +7 -7
- package/src/collection_editor/ui/collection_editor/SwitchControl.tsx +1 -1
- package/src/collection_editor/ui/collection_editor/import/CollectionEditorImportDataPreview.tsx +4 -4
- package/src/collection_editor/ui/collection_editor/import/CollectionEditorImportMapping.tsx +4 -4
- package/src/collection_editor/ui/collection_editor/properties/BlockPropertyField.tsx +1 -1
- package/src/collection_editor/ui/collection_editor/properties/BooleanPropertyField.tsx +1 -1
- package/src/collection_editor/ui/collection_editor/properties/CommonPropertyFields.tsx +2 -2
- package/src/collection_editor/ui/collection_editor/properties/DateTimePropertyField.tsx +2 -2
- package/src/collection_editor/ui/collection_editor/properties/EnumPropertyField.tsx +2 -2
- package/src/collection_editor/ui/collection_editor/properties/MapPropertyField.tsx +2 -2
- package/src/collection_editor/ui/collection_editor/properties/MarkdownPropertyField.tsx +2 -2
- package/src/collection_editor/ui/collection_editor/properties/NumberPropertyField.tsx +2 -2
- package/src/collection_editor/ui/collection_editor/properties/ReferencePropertyField.tsx +2 -2
- package/src/collection_editor/ui/collection_editor/properties/RelationPropertyField.tsx +3 -3
- package/src/collection_editor/ui/collection_editor/properties/RepeatPropertyField.tsx +1 -1
- package/src/collection_editor/ui/collection_editor/properties/StoragePropertyField.tsx +2 -2
- package/src/collection_editor/ui/collection_editor/properties/StringPropertyField.tsx +2 -2
- package/src/collection_editor/ui/collection_editor/properties/UrlPropertyField.tsx +1 -1
- package/src/collection_editor/ui/collection_editor/properties/VectorPropertyField.tsx +1 -1
- package/src/collection_editor/ui/collection_editor/properties/advanced/AdvancedPropertyValidation.tsx +1 -1
- package/src/collection_editor/ui/collection_editor/properties/conditions/ConditionsEditor.tsx +1 -1
- package/src/collection_editor/ui/collection_editor/properties/conditions/EnumConditionsEditor.tsx +1 -1
- package/src/collection_editor/ui/collection_editor/properties/validation/ArrayPropertyValidation.tsx +2 -2
- package/src/collection_editor/ui/collection_editor/properties/validation/GeneralPropertyValidation.tsx +2 -2
- package/src/collection_editor/ui/collection_editor/properties/validation/NumberPropertyValidation.tsx +2 -2
- package/src/collection_editor/ui/collection_editor/properties/validation/StringPropertyValidation.tsx +2 -2
- package/src/collection_editor/ui/collection_editor/templates/blog_template.ts +2 -2
- package/src/collection_editor/ui/collection_editor/templates/pages_template.ts +2 -2
- package/src/collection_editor/ui/collection_editor/templates/products_template.ts +2 -2
- package/src/collection_editor/ui/collection_editor/templates/users_template.ts +2 -2
- package/src/collection_editor/useJsonCollectionsConfigController.tsx +13 -13
- package/src/collection_editor/useLocalCollectionsConfigController.tsx +4 -4
- package/src/collection_editor/useSafeSnackbarController.ts +1 -1
- package/src/collection_editor/validateCollectionJson.ts +3 -3
- package/src/components/AdminModeSyncer.tsx +1 -1
- package/src/components/ArrayContainer.tsx +1 -1
- package/src/components/ClearFilterSortButton.tsx +1 -1
- package/src/components/CollectionPanel.tsx +14 -17
- package/src/components/{EntityCollectionTable/EntityCollectionRowActions.tsx → CollectionTableBinding/CollectionRowActions.tsx} +8 -8
- package/src/components/{EntityCollectionTable/EntityCollectionTable.tsx → CollectionTableBinding/CollectionTableBinding.tsx} +13 -13
- package/src/components/{EntityCollectionTable/EntityCollectionTableProps.tsx → CollectionTableBinding/CollectionTableBindingProps.tsx} +2 -2
- package/src/components/{EntityCollectionTable → CollectionTableBinding}/PropertyTableCell.tsx +1 -1
- package/src/components/{EntityCollectionTable → CollectionTableBinding}/column_utils.tsx +1 -1
- package/src/components/{EntityCollectionTable → CollectionTableBinding}/fields/TableMultipleRelationField.tsx +7 -7
- package/src/components/{EntityCollectionTable → CollectionTableBinding}/fields/TableReferenceField.tsx +10 -10
- package/src/components/{EntityCollectionTable → CollectionTableBinding}/fields/TableRelationField.tsx +7 -7
- package/src/components/{EntityCollectionTable → CollectionTableBinding}/fields/TableStorageUpload.tsx +1 -1
- package/src/components/CollectionTableBinding/index.tsx +14 -0
- package/src/components/{EntityCollectionTable → CollectionTableBinding}/internal/CollectionTableToolbar.tsx +1 -1
- package/src/components/{EntityCollectionTable → CollectionTableBinding}/internal/EntityTableCell.tsx +2 -2
- package/src/components/{EntityCollectionTable → CollectionTableBinding}/internal/EntityTableCellActions.tsx +1 -1
- package/src/components/{EntityCollectionTable → CollectionTableBinding}/internal/common.tsx +2 -2
- package/src/components/{EntityCollectionTable → CollectionTableBinding}/internal/popup_field/PopupFormField.tsx +6 -6
- package/src/components/{EntityCollectionTable → CollectionTableBinding}/table_bindings.tsx +1 -1
- package/src/components/{EntityCollectionView/EntityBoardCard.tsx → CollectionViewBinding/BoardCardBinding.tsx} +17 -17
- package/src/components/{EntityCollectionView/EntityCollectionBoardView.tsx → CollectionViewBinding/CollectionBoardViewBinding.tsx} +17 -16
- package/src/components/{EntityCollectionView/EntityCollectionCardView.tsx → CollectionViewBinding/CollectionCardViewBinding.tsx} +9 -9
- package/src/components/{EntityCollectionView/EntityCollectionListView.tsx → CollectionViewBinding/CollectionListViewBinding.tsx} +15 -15
- package/src/components/{EntityCollectionView/EntityCollectionViewActions.tsx → CollectionViewBinding/CollectionViewActions.tsx} +7 -7
- package/src/components/{EntityCollectionView/EntityCollectionView.tsx → CollectionViewBinding/CollectionViewBinding.tsx} +107 -92
- package/src/components/{EntityCollectionView/EntityCollectionViewStartActions.tsx → CollectionViewBinding/CollectionViewStartActions.tsx} +6 -6
- package/src/components/{EntityCollectionView/EntityCard.tsx → CollectionViewBinding/EntityCardBinding.tsx} +12 -12
- package/src/components/{EntityCollectionView → CollectionViewBinding}/FiltersDialog.tsx +49 -72
- package/src/components/{EntityCollectionView → CollectionViewBinding}/SplitListView.tsx +10 -10
- package/src/components/{EntityCollectionView → CollectionViewBinding}/ViewModeToggle.tsx +1 -1
- package/src/components/{EntityCollectionView → CollectionViewBinding}/hooks/useCollectionInlineEditor.ts +6 -6
- package/src/components/{EntityCollectionView → CollectionViewBinding}/hooks/useKanbanDragAndDrop.ts +5 -5
- package/src/components/{EntityCollectionView → CollectionViewBinding}/useBoardDataController.tsx +25 -13
- package/src/components/{EntityCollectionView/useEntityPreviewSlots.ts → CollectionViewBinding/usePreviewSlots.ts} +9 -9
- package/src/components/DefaultAppBar.tsx +3 -3
- package/src/components/DefaultDrawer.tsx +3 -3
- package/src/components/DeleteEntityDialog.tsx +7 -7
- package/src/components/{EntityDetailView.tsx → DetailViewBinding.tsx} +28 -31
- package/src/components/DrawerNavigationGroup.tsx +2 -2
- package/src/components/{EntityEditViewFormActions.tsx → EditFormActions.tsx} +16 -16
- package/src/components/{EntityEditView.tsx → EditViewBinding.tsx} +34 -37
- package/src/components/{EntityPreview.tsx → EntityPreviewBinding.tsx} +30 -30
- package/src/components/{EntityView.tsx → EntityViewBinding.tsx} +7 -7
- package/src/components/HomePage/ContentHomePage.tsx +4 -4
- package/src/components/HomePage/FavouritesView.tsx +1 -1
- package/src/components/HomePage/NavigationCardBinding.tsx +4 -4
- package/src/components/HomePage/NavigationGroup.tsx +1 -1
- package/src/components/HomePage/RenameGroupDialog.tsx +1 -1
- package/src/components/{EntityJsonPreview.tsx → JsonPreviewBinding.tsx} +2 -2
- package/src/components/{RebaseCMS.tsx → RebaseAdmin.tsx} +6 -5
- package/src/components/RebaseAuthGate.tsx +2 -2
- package/src/components/RebaseLayout.tsx +7 -13
- package/src/components/RebaseNavigation.tsx +35 -11
- package/src/components/RebaseRouteDefs.tsx +2 -2
- package/src/components/RebaseShell.tsx +2 -1
- package/src/components/ReferenceTable/{EntitySelectionTable.tsx → SelectionTableBinding.tsx} +27 -24
- package/src/components/ReferenceWidget.tsx +4 -4
- package/src/components/RelationSelector.tsx +15 -13
- package/src/components/SearchIconsView.tsx +2 -2
- package/src/components/SelectableTable/SelectableTable.tsx +35 -88
- package/src/components/SelectableTable/SelectableTableContext.tsx +3 -3
- package/src/components/SelectableTable/SelectionStore.ts +4 -4
- package/src/components/SelectableTable/filters/BooleanFilterField.tsx +10 -2
- package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +34 -13
- package/src/components/SelectableTable/filters/FilterFieldBinding.tsx +187 -0
- package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +22 -8
- package/src/components/SelectableTable/filters/RelationFilterField.tsx +17 -3
- package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +67 -13
- package/src/components/SideDialogs.tsx +4 -4
- package/src/components/{EntitySidePanel.tsx → SidePanelBinding.tsx} +20 -20
- package/src/components/{SideEntityProvider.tsx → SidePanelProvider.tsx} +17 -17
- package/src/components/UserSelector.tsx +1 -1
- package/src/components/admin/CreationResultDialog.tsx +6 -3
- package/src/components/app/Scaffold.tsx +6 -2
- package/src/components/common/default_entity_actions.tsx +132 -34
- package/src/components/field_configs.tsx +1 -1
- package/src/components/history/EntityHistoryEntry.tsx +3 -3
- package/src/components/history/EntityHistoryView.tsx +7 -7
- package/src/components/history/LastEditedByIndicator.tsx +4 -4
- package/src/components/index.ts +16 -15
- package/src/contexts/SidePanelControllerContext.tsx +5 -0
- package/src/data_export/export/BasicExportAction.tsx +1 -1
- package/src/data_export/export/ExportCollectionAction.tsx +5 -5
- package/src/data_import/components/DataNewPropertiesMapping.tsx +1 -1
- package/src/data_import/components/ImportFileUpload.tsx +1 -1
- package/src/data_import/components/ImportNewPropertyFieldPreview.tsx +1 -1
- package/src/data_import/components/ImportSaveInProgress.tsx +4 -4
- package/src/data_import/import/ImportCollectionAction.tsx +6 -6
- package/src/data_import/utils/data.ts +4 -4
- package/src/data_import/utils/get_properties_mapping.ts +1 -1
- package/src/editor/components/image-bubble.tsx +1 -1
- package/src/editor/components/table-bubble.tsx +1 -1
- package/src/editor/editor.tsx +1 -1
- package/src/editor/selectors/link-selector.tsx +1 -1
- package/src/editor/selectors/node-selector.tsx +1 -1
- package/src/form/EntityForm.tsx +6 -6
- package/src/form/EntityFormActions.tsx +4 -4
- package/src/form/EntityFormBinding.tsx +10 -10
- package/src/form/PropertyFieldBinding.tsx +7 -7
- package/src/form/components/ErrorFocus.tsx +1 -1
- package/src/form/components/LocalChangesMenu.tsx +3 -3
- package/src/form/components/StorageItemPreview.tsx +1 -1
- package/src/form/components/StorageUploadProgress.tsx +3 -3
- package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +1 -1
- package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +5 -5
- package/src/form/field_bindings/BlockFieldBinding.tsx +2 -2
- package/src/form/field_bindings/DateTimeFieldBinding.tsx +1 -1
- package/src/form/field_bindings/KeyValueFieldBinding.tsx +21 -21
- package/src/form/field_bindings/MapFieldBinding.tsx +1 -1
- package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +2 -2
- package/src/form/field_bindings/MultipleRelationFieldBinding.tsx +3 -3
- package/src/form/field_bindings/ReferenceFieldBinding.tsx +7 -7
- package/src/form/field_bindings/RelationFieldBinding.tsx +4 -4
- package/src/form/field_bindings/RepeatFieldBinding.tsx +1 -1
- package/src/form/field_bindings/StorageUploadFieldBinding.tsx +3 -3
- package/src/form/form_utils.ts +3 -3
- package/src/hooks/index.ts +4 -4
- package/src/hooks/navigation/contexts/CollectionRegistryContext.tsx +2 -2
- package/src/hooks/navigation/useBuildCollectionRegistryController.tsx +11 -11
- package/src/hooks/navigation/useBuildNavigationStateController.tsx +5 -5
- package/src/hooks/navigation/useNavigationResolution.ts +28 -13
- package/src/hooks/navigation/useResolvedCollections.ts +8 -8
- package/src/hooks/navigation/useTopLevelNavigation.ts +2 -2
- package/src/hooks/navigation/utils.ts +5 -5
- package/src/hooks/{useBuildSideEntityController.tsx → useBuildSidePanel.tsx} +29 -29
- package/src/hooks/useCMSContext.tsx +7 -7
- package/src/hooks/{useEntityHistory.ts → useHistory.ts} +2 -2
- package/src/hooks/useResolvedNavigationFrom.tsx +10 -5
- package/src/hooks/{useEntitySelectionDialog.tsx → useSelectionDialog.tsx} +7 -7
- package/src/hooks/useSideDialogsController.tsx +1 -1
- package/src/hooks/useSidePanel.tsx +13 -0
- package/src/index.ts +15 -15
- package/src/preview/PropertyPreview.tsx +2 -2
- package/src/preview/components/DatePreview.tsx +1 -1
- package/src/preview/components/EnumValuesChip.tsx +1 -1
- package/src/preview/components/ImagePreview.tsx +1 -1
- package/src/preview/components/ReferencePreview.tsx +11 -11
- package/src/preview/components/RelationPreview.tsx +13 -12
- package/src/preview/components/StorageThumbnail.tsx +1 -1
- package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +1 -1
- package/src/preview/property_previews/ArrayOneOfPreview.tsx +1 -1
- package/src/preview/property_previews/ArrayPropertyPreview.tsx +1 -1
- package/src/routes/RebaseRoute.tsx +12 -12
- package/src/types/components/EntityFormActionsProps.tsx +2 -2
- package/src/types/components/EntityFormProps.tsx +3 -3
- package/src/types/components/formex.tsx +1 -1
- package/src/types/fields.tsx +2 -2
- package/src/util/dataControllerAdapter.ts +9 -15
- package/src/util/navigation_utils.ts +7 -7
- package/src/util/previews.ts +7 -5
- package/src/util/property_utils.tsx +2 -2
- package/src/util/{entity_view_constants.ts → view_constants.ts} +1 -1
- package/dist/CollectionEditorDialog-BO_aQ-Z4.js.map +0 -1
- package/dist/PropertyEditView-DKzOpMjR.js.map +0 -1
- package/dist/RouterCollectionsStudioView-BQTIExjA.js.map +0 -1
- package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +0 -28
- package/dist/components/EntityCollectionTable/index.d.ts +0 -6
- package/dist/components/EntityCollectionView/EntityCard.d.ts +0 -21
- package/dist/components/EntityEditViewFormActions.d.ts +0 -3
- package/dist/components/EntitySidePanel.d.ts +0 -11
- package/dist/components/EntityView.d.ts +0 -13
- package/dist/contexts/SideEntityControllerContext.d.ts +0 -3
- package/dist/history-B3cqBzEV.js.map +0 -1
- package/dist/hooks/useBuildSideEntityController.d.ts +0 -6
- package/dist/hooks/useSideEntityController.d.ts +0 -11
- package/dist/src-cxV1ODRG.js.map +0 -1
- package/src/components/EntityCollectionTable/index.tsx +0 -14
- package/src/contexts/SideEntityControllerContext.tsx +0 -5
- package/src/hooks/useSideEntityController.tsx +0 -13
- /package/dist/components/{EntityCollectionTable → CollectionTableBinding}/PropertyTableCell.d.ts +0 -0
- /package/dist/components/{EntityCollectionTable → CollectionTableBinding}/column_utils.d.ts +0 -0
- /package/dist/components/{EntityCollectionTable → CollectionTableBinding}/fields/TableRelationSelectorField.d.ts +0 -0
- /package/dist/components/{EntityCollectionTable → CollectionTableBinding}/fields/TableStorageUpload.d.ts +0 -0
- /package/dist/components/{EntityCollectionTable → CollectionTableBinding}/fields/VirtualTableSelect.d.ts +0 -0
- /package/dist/components/{EntityCollectionTable → CollectionTableBinding}/fields/VirtualTableUserSelect.d.ts +0 -0
- /package/dist/components/{EntityCollectionTable → CollectionTableBinding}/internal/CollectionTableToolbar.d.ts +0 -0
- /package/dist/components/{EntityCollectionTable → CollectionTableBinding}/internal/EntityTableCellActions.d.ts +0 -0
- /package/dist/components/{EntityCollectionTable → CollectionTableBinding}/internal/popup_field/useDraggable.d.ts +0 -0
- /package/dist/components/{EntityCollectionTable → CollectionTableBinding}/internal/popup_field/useWindowSize.d.ts +0 -0
- /package/dist/components/{EntityCollectionView → CollectionViewBinding}/FilterPresetsButton.d.ts +0 -0
- /package/dist/components/{EntityCollectionView → CollectionViewBinding}/FiltersDialog.d.ts +0 -0
- /package/dist/components/{EntityCollectionView → CollectionViewBinding}/ViewModeToggle.d.ts +0 -0
- /package/dist/components/{EntityCollectionView → CollectionViewBinding}/useSelectionController.d.ts +0 -0
- /package/dist/components/{EntityCollectionView → CollectionViewBinding}/utils.d.ts +0 -0
- /package/src/components/{EntityCollectionTable → CollectionTableBinding}/fields/TableRelationSelectorField.tsx +0 -0
- /package/src/components/{EntityCollectionTable → CollectionTableBinding}/fields/VirtualTableSelect.tsx +0 -0
- /package/src/components/{EntityCollectionTable → CollectionTableBinding}/fields/VirtualTableUserSelect.tsx +0 -0
- /package/src/components/{EntityCollectionTable → CollectionTableBinding}/internal/popup_field/useDraggable.tsx +0 -0
- /package/src/components/{EntityCollectionTable → CollectionTableBinding}/internal/popup_field/useWindowSize.tsx +0 -0
- /package/src/components/{EntityCollectionView → CollectionViewBinding}/FilterPresetsButton.tsx +0 -0
- /package/src/components/{EntityCollectionView → CollectionViewBinding}/useSelectionController.tsx +0 -0
- /package/src/components/{EntityCollectionView → CollectionViewBinding}/utils.ts +0 -0
|
@@ -4,12 +4,27 @@ 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 {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
7
|
+
import { resolveFilterOperators } from "@rebasepro/common";
|
|
8
|
+
import { useCollectionScope, useTranslation } from "@rebasepro/app";
|
|
9
|
+
import { FilterFieldBinding } from "../SelectableTable/filters/FilterFieldBinding";
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* `WhereFilterOp` is declared twice: once in `@rebasepro/types` as the canonical
|
|
13
|
+
* operator set every driver translates, and once in `@rebasepro/ui` for the
|
|
14
|
+
* table's own props. That is deliberate — `ui` is a standalone design system and
|
|
15
|
+
* depends on no Rebase package, so it cannot import the canonical one (and a
|
|
16
|
+
* type-only import would not help: `ui` emits declarations with `tsc`, which
|
|
17
|
+
* references external types rather than inlining them, so its published `.d.ts`
|
|
18
|
+
* would demand `@rebasepro/types` from every consumer).
|
|
19
|
+
*
|
|
20
|
+
* This file is where the two meet and get cast into each other, so it is where
|
|
21
|
+
* their agreement is checked. Adding an operator to one and not the other stops
|
|
22
|
+
* this line compiling instead of silently producing a filter the table can build
|
|
23
|
+
* and no driver can run — or one a driver supports and the table cannot offer.
|
|
24
|
+
*/
|
|
25
|
+
type MutuallyAssignable<A, B> = [A] extends [B] ? ([B] extends [A] ? true : never) : never;
|
|
26
|
+
const _whereFilterOpDefinitionsAgree: MutuallyAssignable<WhereFilterOp, VirtualTableWhereFilterOp> = true;
|
|
27
|
+
void _whereFilterOpDefinitionsAgree;
|
|
13
28
|
|
|
14
29
|
export interface FiltersDialogProps {
|
|
15
30
|
open: boolean;
|
|
@@ -33,6 +48,9 @@ export function FiltersDialog({
|
|
|
33
48
|
fixedFilter
|
|
34
49
|
}: FiltersDialogProps) {
|
|
35
50
|
const { t } = useTranslation();
|
|
51
|
+
// Engine of the collection this dialog filters — read from the
|
|
52
|
+
// surrounding CollectionScopeProvider mounted by the collection view.
|
|
53
|
+
const engine = useCollectionScope()?.engine;
|
|
36
54
|
// Local state for filters being edited
|
|
37
55
|
const [localFilters, setLocalFilters] = useState<FilterValues<any>>(filterValues ?? {});
|
|
38
56
|
|
|
@@ -52,12 +70,17 @@ export function FiltersDialog({
|
|
|
52
70
|
if (!property) return false;
|
|
53
71
|
// Force filter properties should not be editable
|
|
54
72
|
if (fixedFilter && key in fixedFilter) return false;
|
|
55
|
-
|
|
56
|
-
const
|
|
57
|
-
|
|
58
|
-
|
|
73
|
+
const isArray = property.type === "array";
|
|
74
|
+
const ofProp = isArray && "of" in property ? property.of : undefined;
|
|
75
|
+
const baseProperty = isArray ? (Array.isArray(ofProp) ? ofProp[0] : ofProp) as Property | undefined : property;
|
|
76
|
+
if (!baseProperty) return false;
|
|
77
|
+
// A property is filterable when it has a custom filter field, or
|
|
78
|
+
// when at least one operator survives the engine ∩ type ∩
|
|
79
|
+
// property-narrowing resolution.
|
|
80
|
+
if (baseProperty.ui?.Filter) return true;
|
|
81
|
+
return resolveFilterOperators({ property: baseProperty, isArray, engine }).length > 0;
|
|
59
82
|
});
|
|
60
|
-
}, [properties, fixedFilter]);
|
|
83
|
+
}, [properties, fixedFilter, engine]);
|
|
61
84
|
|
|
62
85
|
const handleFilterChange = useCallback((propertyKey: string, value?: [VirtualTableWhereFilterOp, any]) => {
|
|
63
86
|
setLocalFilters(prev => {
|
|
@@ -94,67 +117,21 @@ export function FiltersDialog({
|
|
|
94
117
|
const activeFilterCount = Object.keys(localFilters).length;
|
|
95
118
|
|
|
96
119
|
const renderFilterField = useCallback((propertyKey: string, property: Property) => {
|
|
97
|
-
const
|
|
98
|
-
const
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
isArray={isArray}
|
|
113
|
-
path={baseProperty.path}
|
|
114
|
-
title={property.name}
|
|
115
|
-
includeId={baseProperty.includeId}
|
|
116
|
-
previewProperties={baseProperty.ui?.previewProperties}
|
|
117
|
-
hidden={hiddenFields[propertyKey] ?? false}
|
|
118
|
-
setHidden={(hidden) => setHiddenForField(propertyKey, hidden)}
|
|
119
|
-
/>
|
|
120
|
-
);
|
|
121
|
-
} else if (baseProperty.type === "number" || baseProperty.type === "string") {
|
|
122
|
-
const enumValues = baseProperty.enum ? enumToObjectEntries(baseProperty.enum) : undefined;
|
|
123
|
-
return (
|
|
124
|
-
<StringNumberFilterField
|
|
125
|
-
value={filterValue}
|
|
126
|
-
setValue={setValue}
|
|
127
|
-
name={propertyKey}
|
|
128
|
-
type={baseProperty.type}
|
|
129
|
-
isArray={isArray}
|
|
130
|
-
enumValues={enumValues}
|
|
131
|
-
title={property.name}
|
|
132
|
-
/>
|
|
133
|
-
);
|
|
134
|
-
} else if (baseProperty.type === "boolean") {
|
|
135
|
-
return (
|
|
136
|
-
<BooleanFilterField
|
|
137
|
-
value={filterValue}
|
|
138
|
-
setValue={setValue}
|
|
139
|
-
name={propertyKey}
|
|
140
|
-
title={property.name}
|
|
141
|
-
/>
|
|
142
|
-
);
|
|
143
|
-
} else if (baseProperty.type === "date") {
|
|
144
|
-
return (
|
|
145
|
-
<DateTimeFilterField
|
|
146
|
-
value={filterValue}
|
|
147
|
-
setValue={setValue}
|
|
148
|
-
name={propertyKey}
|
|
149
|
-
mode={baseProperty.mode}
|
|
150
|
-
isArray={isArray}
|
|
151
|
-
title={property.name}
|
|
152
|
-
/>
|
|
153
|
-
);
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
return null;
|
|
157
|
-
}, [localFilters, handleFilterChange, hiddenFields, setHiddenForField]);
|
|
120
|
+
const filterValue = localFilters[propertyKey] as [WhereFilterOp, any] | undefined;
|
|
121
|
+
const setValue = (value?: [WhereFilterOp, any]) => handleFilterChange(propertyKey, value as [VirtualTableWhereFilterOp, any] | undefined);
|
|
122
|
+
|
|
123
|
+
return (
|
|
124
|
+
<FilterFieldBinding
|
|
125
|
+
propertyKey={propertyKey}
|
|
126
|
+
property={property}
|
|
127
|
+
engine={engine}
|
|
128
|
+
value={filterValue}
|
|
129
|
+
setValue={setValue}
|
|
130
|
+
hidden={hiddenFields[propertyKey] ?? false}
|
|
131
|
+
setHidden={(hidden) => setHiddenForField(propertyKey, hidden)}
|
|
132
|
+
/>
|
|
133
|
+
);
|
|
134
|
+
}, [localFilters, handleFilterChange, hiddenFields, setHiddenForField, engine]);
|
|
158
135
|
|
|
159
136
|
return (
|
|
160
137
|
<Dialog
|
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { CollectionConfig } from "@rebasepro/types";
|
|
2
2
|
import React, { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
3
3
|
import { CollectionSize, Entity, EntityTableController, SelectionController } from "@rebasepro/types";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
4
|
+
import { EditViewBinding } from "../EditViewBinding";
|
|
5
|
+
import { DetailViewBinding } from "../DetailViewBinding";
|
|
6
6
|
import {
|
|
7
7
|
cls,
|
|
8
8
|
defaultBorderMixin,
|
|
9
9
|
ResizablePanels
|
|
10
10
|
} from "@rebasepro/ui";
|
|
11
|
-
import { useLargeLayout } from "@rebasepro/
|
|
11
|
+
import { useLargeLayout } from "@rebasepro/app";
|
|
12
12
|
import { useCollectionRegistryController } from "../../index";
|
|
13
13
|
import { useNavigate, useLocation } from "react-router-dom";
|
|
14
14
|
import { useUrlController } from "../../index";
|
|
15
15
|
import { ErrorBoundary } from "@rebasepro/ui";
|
|
16
16
|
|
|
17
17
|
export type SplitListViewProps<M extends Record<string, unknown> = Record<string, unknown>> = {
|
|
18
|
-
collection:
|
|
18
|
+
collection: CollectionConfig<M>;
|
|
19
19
|
tableController: EntityTableController<M>;
|
|
20
20
|
onEntityClick?: (entity: Entity<M>) => void;
|
|
21
21
|
onNewClick?: () => void;
|
|
@@ -84,7 +84,7 @@ function savePanelSize(path: string, size: number) {
|
|
|
84
84
|
* State management:
|
|
85
85
|
* - The selected entity is driven by the URL path (e.g. /c/authors/14).
|
|
86
86
|
* `selectedEntityId` comes from props via RebaseRoute, NOT from internal state.
|
|
87
|
-
* - Clicking
|
|
87
|
+
* - Clicking a entity navigates to /c/authors/{id} via the standard onEntityClick handler.
|
|
88
88
|
* - Closing the detail navigates back to /c/authors.
|
|
89
89
|
*/
|
|
90
90
|
export function SplitListView<M extends Record<string, unknown> = Record<string, unknown>>({
|
|
@@ -292,10 +292,10 @@ export function SplitListView<M extends Record<string, unknown> = Record<string,
|
|
|
292
292
|
>
|
|
293
293
|
<ErrorBoundary>
|
|
294
294
|
{collection.defaultEntityAction === "view" && !isEditMode
|
|
295
|
-
? <
|
|
295
|
+
? <DetailViewBinding
|
|
296
296
|
key={String(renderedEntityId)}
|
|
297
297
|
path={path}
|
|
298
|
-
collection={collection as
|
|
298
|
+
collection={collection as CollectionConfig<Record<string, unknown>>}
|
|
299
299
|
entityId={renderedEntityId}
|
|
300
300
|
parentCollectionSlugs={usedParentCollectionIds}
|
|
301
301
|
parentEntityIds={usedParentEntityIds}
|
|
@@ -323,10 +323,10 @@ export function SplitListView<M extends Record<string, unknown> = Record<string,
|
|
|
323
323
|
navigate(entityUrl);
|
|
324
324
|
}}
|
|
325
325
|
/>
|
|
326
|
-
: <
|
|
326
|
+
: <EditViewBinding
|
|
327
327
|
key={String(renderedEntityId)}
|
|
328
328
|
path={path}
|
|
329
|
-
collection={collection as
|
|
329
|
+
collection={collection as CollectionConfig<Record<string, unknown>>}
|
|
330
330
|
entityId={renderedEntityId}
|
|
331
331
|
parentCollectionSlugs={usedParentCollectionIds}
|
|
332
332
|
parentEntityIds={usedParentEntityIds}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { useCallback, useMemo } from "react";
|
|
2
|
-
import { setIn } from "@rebasepro/
|
|
3
|
-
import {
|
|
4
|
-
import { OnCellValueChange, saveEntityWithCallbacks, UniqueFieldValidator } from "@rebasepro/
|
|
2
|
+
import { setIn } from "@rebasepro/forms";
|
|
3
|
+
import { CollectionConfig, RebaseData, RebaseContext } from "@rebasepro/types";
|
|
4
|
+
import { OnCellValueChange, saveEntityWithCallbacks, SaveEntityWithCallbacksProps, UniqueFieldValidator } from "@rebasepro/app";
|
|
5
5
|
|
|
6
6
|
export interface UseCollectionInlineEditorParams<M extends Record<string, unknown>> {
|
|
7
7
|
path: string;
|
|
8
|
-
collection:
|
|
8
|
+
collection: CollectionConfig<M>;
|
|
9
9
|
dataClient: RebaseData;
|
|
10
10
|
context: RebaseContext;
|
|
11
11
|
}
|
|
@@ -17,7 +17,7 @@ export function useCollectionInlineEditor<M extends Record<string, unknown>>({
|
|
|
17
17
|
context
|
|
18
18
|
}: UseCollectionInlineEditorParams<M>) {
|
|
19
19
|
|
|
20
|
-
// Unique field validator (ported from
|
|
20
|
+
// Unique field validator (ported from CollectionViewBinding)
|
|
21
21
|
const uniqueFieldValidator: UniqueFieldValidator = useCallback(
|
|
22
22
|
async ({ name, value, property, entityId }: Parameters<UniqueFieldValidator>[0]) => {
|
|
23
23
|
const accessor = dataClient.collection(path);
|
|
@@ -46,7 +46,7 @@ export function useCollectionInlineEditor<M extends Record<string, unknown>>({
|
|
|
46
46
|
|
|
47
47
|
const updatedValues = setIn({}, propertyKey, value) as Partial<Record<string, unknown>>;
|
|
48
48
|
|
|
49
|
-
const saveProps:
|
|
49
|
+
const saveProps: SaveEntityWithCallbacksProps<Record<string, unknown>> = {
|
|
50
50
|
path: entity.path ?? path,
|
|
51
51
|
entityId: entity.id,
|
|
52
52
|
values: updatedValues,
|
package/src/components/{EntityCollectionView → CollectionViewBinding}/hooks/useKanbanDragAndDrop.ts
RENAMED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { useCallback, useMemo } from "react";
|
|
2
|
-
import { setIn } from "@rebasepro/
|
|
3
|
-
import {
|
|
4
|
-
import { saveEntityWithCallbacks } from "@rebasepro/
|
|
2
|
+
import { setIn } from "@rebasepro/forms";
|
|
3
|
+
import { CollectionConfig, RebaseData, RebaseContext, AnalyticsController, Entity } from "@rebasepro/types";
|
|
4
|
+
import { saveEntityWithCallbacks, SaveEntityWithCallbacksProps } from "@rebasepro/app";
|
|
5
5
|
import { BoardItem } from "@rebasepro/ui";
|
|
6
6
|
import { BoardDataController } from "../useBoardDataController";
|
|
7
7
|
import { generateKeyBetween } from "fractional-indexing";
|
|
8
8
|
|
|
9
9
|
export interface UseKanbanDragAndDropParams<M extends Record<string, unknown>> {
|
|
10
|
-
collection:
|
|
10
|
+
collection: CollectionConfig<M>;
|
|
11
11
|
fullPath: string;
|
|
12
12
|
columnProperty: string;
|
|
13
13
|
orderProperty?: string;
|
|
@@ -106,7 +106,7 @@ export function useKanbanDragAndDrop<M extends Record<string, unknown>>({
|
|
|
106
106
|
);
|
|
107
107
|
}
|
|
108
108
|
|
|
109
|
-
const saveProps:
|
|
109
|
+
const saveProps: SaveEntityWithCallbacksProps<Record<string, unknown>> = {
|
|
110
110
|
path: entity.path,
|
|
111
111
|
entityId: entity.id,
|
|
112
112
|
values: updatedValues as M,
|
package/src/components/{EntityCollectionView → CollectionViewBinding}/useBoardDataController.tsx
RENAMED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
1
|
+
import type { CollectionConfig } from "@rebasepro/types";
|
|
3
2
|
import { Entity, FilterValues } from "@rebasepro/types";
|
|
4
|
-
import {
|
|
3
|
+
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
4
|
+
import { getRelationIncludeParams, useData, useRebaseContext } from "@rebasepro/app";
|
|
5
5
|
|
|
6
6
|
const DEFAULT_PAGE_SIZE = 20;
|
|
7
7
|
|
|
@@ -67,7 +67,7 @@ export interface UseBoardDataControllerProps<M extends Record<string, unknown> =
|
|
|
67
67
|
/** Full path to the collection */
|
|
68
68
|
fullPath: string;
|
|
69
69
|
/** The entity collection configuration */
|
|
70
|
-
collection:
|
|
70
|
+
collection: CollectionConfig<M>;
|
|
71
71
|
/** Property key used for column assignment */
|
|
72
72
|
columnProperty: string;
|
|
73
73
|
/** Array of column values (enum values from columnProperty) */
|
|
@@ -244,7 +244,7 @@ export function useBoardDataController<M extends Record<string, unknown> = any,
|
|
|
244
244
|
[currentColumnProperty]: ["==", column]
|
|
245
245
|
};
|
|
246
246
|
|
|
247
|
-
const orderByParam = currentOrderProperty ?
|
|
247
|
+
const orderByParam: [string, "asc" | "desc"] | undefined = currentOrderProperty ? [currentOrderProperty, "asc"] : undefined;
|
|
248
248
|
|
|
249
249
|
// Mark column as loading
|
|
250
250
|
setColumnData(prev => ({
|
|
@@ -326,18 +326,24 @@ values: { ...e.values,
|
|
|
326
326
|
});
|
|
327
327
|
}
|
|
328
328
|
|
|
329
|
-
// Apply afterRead callbacks if any
|
|
329
|
+
// Apply afterRead callbacks if any.
|
|
330
|
+
// afterRead operates on flat rows; unwrap the Entity view-model
|
|
331
|
+
// before invoking and re-wrap the processed row after.
|
|
330
332
|
if (currentCollection.callbacks?.afterRead) {
|
|
331
333
|
try {
|
|
332
334
|
processed = await Promise.all(
|
|
333
|
-
processed.map(entity =>
|
|
334
|
-
currentCollection.callbacks!.afterRead!({
|
|
335
|
+
processed.map(async (entity) => {
|
|
336
|
+
const processedRow = await currentCollection.callbacks!.afterRead!({
|
|
335
337
|
collection: currentCollection,
|
|
336
338
|
path: currentResolvedPath,
|
|
337
|
-
entity,
|
|
339
|
+
row: { id: entity.id, ...entity.values },
|
|
338
340
|
context: currentContext
|
|
339
|
-
})
|
|
340
|
-
|
|
341
|
+
});
|
|
342
|
+
return {
|
|
343
|
+
...entity,
|
|
344
|
+
values: processedRow as M
|
|
345
|
+
};
|
|
346
|
+
})
|
|
341
347
|
);
|
|
342
348
|
} catch (e) {
|
|
343
349
|
console.error("Error in afterRead callback:", e);
|
|
@@ -404,18 +410,24 @@ values: { ...e.values,
|
|
|
404
410
|
|
|
405
411
|
// Set up listener or fetch
|
|
406
412
|
const accessor = currentDataClient.collection(currentResolvedPath);
|
|
413
|
+
|
|
414
|
+
// Eagerly include relations to avoid N+1 fetches.
|
|
415
|
+
const includeParams = getRelationIncludeParams(currentCollection);
|
|
416
|
+
|
|
407
417
|
if (accessor.listen) {
|
|
408
418
|
const unsubscribe = accessor.listen({
|
|
409
419
|
where: whereFilter,
|
|
410
420
|
limit: itemCount,
|
|
411
|
-
orderBy: orderByParam
|
|
421
|
+
orderBy: orderByParam,
|
|
422
|
+
include: includeParams
|
|
412
423
|
}, res => onUpdate(res.data as Entity<M>[]), onError);
|
|
413
424
|
unsubscribersRef.current[column] = unsubscribe;
|
|
414
425
|
} else {
|
|
415
426
|
accessor.find({
|
|
416
427
|
where: whereFilter,
|
|
417
428
|
limit: itemCount,
|
|
418
|
-
orderBy: orderByParam
|
|
429
|
+
orderBy: orderByParam,
|
|
430
|
+
include: includeParams
|
|
419
431
|
})
|
|
420
432
|
.then(res => onUpdate(res.data as Entity<M>[]))
|
|
421
433
|
.catch(onError);
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { useMemo } from "react";
|
|
2
|
-
import type {
|
|
2
|
+
import type { CollectionConfig, Property, RelationProperty } from "@rebasepro/types";
|
|
3
3
|
import type { Entity, PropertyConfig, EntityRelation } from "@rebasepro/types";
|
|
4
4
|
import { getEntityImagePreviewPropertyKey } from "@rebasepro/common";
|
|
5
|
-
import { getEntityFromCache } from "@rebasepro/
|
|
5
|
+
import { getEntityFromCache } from "@rebasepro/app";
|
|
6
6
|
import { getEntityTitlePropertyKey, getEntityPreviewKeys } from "../../util/previews";
|
|
7
7
|
import { getValueInPath } from "@rebasepro/utils";
|
|
8
8
|
import type { AuthController } from "@rebasepro/types";
|
|
@@ -13,7 +13,7 @@ import { ChipColorScheme, CHIP_COLORS } from "@rebasepro/ui";
|
|
|
13
13
|
|
|
14
14
|
/**
|
|
15
15
|
* A resolved "slot" containing the property definition, key, and the
|
|
16
|
-
* concrete value extracted from
|
|
16
|
+
* concrete value extracted from a entity.
|
|
17
17
|
*/
|
|
18
18
|
export interface PreviewSlot {
|
|
19
19
|
property: Property;
|
|
@@ -102,7 +102,7 @@ export interface CollectionSlotKeys {
|
|
|
102
102
|
* Pure function — call inside `useMemo`.
|
|
103
103
|
*/
|
|
104
104
|
export function resolveCollectionSlotKeys(
|
|
105
|
-
collection:
|
|
105
|
+
collection: CollectionConfig<Record<string, unknown>>,
|
|
106
106
|
authController: AuthController,
|
|
107
107
|
propertyConfigs: Record<string, PropertyConfig>
|
|
108
108
|
): CollectionSlotKeys {
|
|
@@ -216,7 +216,7 @@ dateKey };
|
|
|
216
216
|
* and value is the first element (for arrays) or the raw value.
|
|
217
217
|
*/
|
|
218
218
|
function resolveImageSlot(
|
|
219
|
-
collection:
|
|
219
|
+
collection: CollectionConfig<Record<string, unknown>>,
|
|
220
220
|
imageKey: string,
|
|
221
221
|
entity: Entity<Record<string, unknown>>
|
|
222
222
|
): PreviewSlot | undefined {
|
|
@@ -277,7 +277,7 @@ function formatDateValue(value: unknown): string {
|
|
|
277
277
|
* `resolveEntitySlots` for each entity row.
|
|
278
278
|
*/
|
|
279
279
|
export function useCollectionSlotKeys(
|
|
280
|
-
collection:
|
|
280
|
+
collection: CollectionConfig<Record<string, unknown>>,
|
|
281
281
|
authController: AuthController,
|
|
282
282
|
propertyConfigs: Record<string, PropertyConfig>
|
|
283
283
|
): CollectionSlotKeys {
|
|
@@ -296,7 +296,7 @@ export function useCollectionSlotKeys(
|
|
|
296
296
|
*/
|
|
297
297
|
export function resolveEntitySlots(
|
|
298
298
|
entity: Entity<Record<string, unknown>>,
|
|
299
|
-
collection:
|
|
299
|
+
collection: CollectionConfig<Record<string, unknown>>,
|
|
300
300
|
slotKeys: CollectionSlotKeys
|
|
301
301
|
): EntityPreviewSlots {
|
|
302
302
|
const { titleKey, imageKey, subtitleKey, relationKeys, statusKey, dateKey } = slotKeys;
|
|
@@ -441,11 +441,11 @@ function resolveRelationDisplayName(
|
|
|
441
441
|
const data = "data" in relation ? (relation as EntityRelation).data : undefined;
|
|
442
442
|
|
|
443
443
|
// Resolve target collection from either `prop.relation.target()` or `prop.target()` (inline API)
|
|
444
|
-
let targetCollection:
|
|
444
|
+
let targetCollection: CollectionConfig | undefined;
|
|
445
445
|
try {
|
|
446
446
|
const resolved = prop.relation?.target?.() ?? (typeof prop.target === "function" ? prop.target() : undefined);
|
|
447
447
|
if (resolved && typeof resolved === "object") {
|
|
448
|
-
targetCollection = resolved as
|
|
448
|
+
targetCollection = resolved as CollectionConfig;
|
|
449
449
|
}
|
|
450
450
|
} catch {
|
|
451
451
|
// Target collection may not be resolvable
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import React from "react";
|
|
3
3
|
|
|
4
4
|
import { Link, useNavigate } from "react-router-dom";
|
|
5
|
-
import { RebaseLogo, LanguageToggle } from "@rebasepro/
|
|
5
|
+
import { RebaseLogo, LanguageToggle } from "@rebasepro/app";
|
|
6
6
|
import { ErrorBoundary, iconSize } from "@rebasepro/ui";
|
|
7
7
|
import {
|
|
8
8
|
Avatar,
|
|
@@ -18,12 +18,12 @@ import {
|
|
|
18
18
|
SunMoonIcon,
|
|
19
19
|
Typography
|
|
20
20
|
} from "@rebasepro/ui";
|
|
21
|
-
import { useAuthController, useLargeLayout, useModeController, useAdminModeController, useTranslation } from "@rebasepro/
|
|
21
|
+
import { useAuthController, useLargeLayout, useModeController, useAdminModeController, useTranslation } from "@rebasepro/app";
|
|
22
22
|
import { useUrlController } from "../hooks/navigation/contexts/UrlContext";
|
|
23
23
|
import { User } from "@rebasepro/types";
|
|
24
24
|
import { useApp } from "./app/useApp";
|
|
25
25
|
import { useBreadcrumbsController } from "../hooks/useBreadcrumbsController";
|
|
26
|
-
import { UserSettingsView } from "@rebasepro/
|
|
26
|
+
import { UserSettingsView } from "@rebasepro/app";
|
|
27
27
|
|
|
28
28
|
export type DefaultAppBarProps<ADDITIONAL_PROPS = object> = {
|
|
29
29
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { NavigationEntry, NavigationResult } from "@rebasepro/types";
|
|
2
2
|
import React, { useMemo } from "react";
|
|
3
3
|
|
|
4
|
-
import { useCollapsedGroups, buildCollapsedDefaults, useLargeLayout, useAdminModeController, useAuthController, useModeController, useTranslation, useSlot, useRebaseContext, useAnalyticsController, useRebaseRegistry, useComponentOverride } from "@rebasepro/
|
|
4
|
+
import { useCollapsedGroups, buildCollapsedDefaults, useLargeLayout, useAdminModeController, useAuthController, useModeController, useTranslation, useSlot, useRebaseContext, useAnalyticsController, useRebaseRegistry, useComponentOverride } from "@rebasepro/app";
|
|
5
5
|
import { useUrlController } from "../hooks/navigation/contexts/UrlContext";
|
|
6
6
|
import { useNavigationStateController } from "../hooks/navigation/contexts/NavigationStateContext";
|
|
7
7
|
|
|
@@ -29,7 +29,7 @@ import {
|
|
|
29
29
|
Typography
|
|
30
30
|
} from "@rebasepro/ui";
|
|
31
31
|
import { DrawerNavigationGroup } from "./DrawerNavigationGroup";
|
|
32
|
-
import { LanguageToggle, RebaseLogo } from "@rebasepro/
|
|
32
|
+
import { LanguageToggle, RebaseLogo } from "@rebasepro/app";
|
|
33
33
|
import { useApp } from "./app/useApp";
|
|
34
34
|
|
|
35
35
|
/**
|
|
@@ -166,7 +166,7 @@ function CMSNavigationContent() {
|
|
|
166
166
|
const allNavigationEntries = navigationState.topLevelNavigation?.navigationEntries ?? [];
|
|
167
167
|
|
|
168
168
|
// Build a set of Studio-only dev view slugs so we can distinguish them from
|
|
169
|
-
// CMS custom views added via <
|
|
169
|
+
// CMS custom views added via <RebaseAdmin views={...}> or plugins.
|
|
170
170
|
const studioViewSlugs = useMemo(() => {
|
|
171
171
|
const slugs = new Set<string>();
|
|
172
172
|
(registry.studioConfig?.devViews ?? []).forEach(v => slugs.add(v.slug));
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import { Entity,
|
|
1
|
+
import type { CollectionConfig } from "@rebasepro/types";
|
|
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";
|
|
5
5
|
import {
|
|
@@ -9,17 +9,17 @@ import {
|
|
|
9
9
|
useData,
|
|
10
10
|
useSnackbarController,
|
|
11
11
|
useTranslation
|
|
12
|
-
} from "@rebasepro/
|
|
12
|
+
} from "@rebasepro/app";
|
|
13
13
|
import { useCMSContext } from "../hooks";
|
|
14
|
-
import {
|
|
14
|
+
import { EntityViewBinding } from "./EntityViewBinding";
|
|
15
15
|
|
|
16
16
|
export interface DeleteEntityDialogProps<M extends Record<string, unknown>> {
|
|
17
17
|
entityOrEntitiesToDelete?: Entity<M> | Entity<M>[],
|
|
18
18
|
path: string,
|
|
19
|
-
collection:
|
|
19
|
+
collection: CollectionConfig<M>
|
|
20
20
|
open: boolean;
|
|
21
21
|
onClose: () => void;
|
|
22
|
-
callbacks?:
|
|
22
|
+
callbacks?: CollectionCallbacks<M>,
|
|
23
23
|
|
|
24
24
|
onEntityDelete?(path: string, entity: Entity<M>): void;
|
|
25
25
|
|
|
@@ -135,7 +135,7 @@ export function DeleteEntityDialog<M extends Record<string, unknown>>({
|
|
|
135
135
|
} else {
|
|
136
136
|
const entity = entityOrEntities as Entity<M> | undefined;
|
|
137
137
|
content = entity
|
|
138
|
-
? <
|
|
138
|
+
? <EntityViewBinding
|
|
139
139
|
entity={entity}
|
|
140
140
|
collection={collection}
|
|
141
141
|
path={path}/>
|