@rebasepro/admin 0.8.0 → 0.9.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 +20 -20
- package/dist/{CollectionEditorDialog-BO_aQ-Z4.js → CollectionEditorDialog-B-7uW3iJ.js} +11 -11
- package/dist/CollectionEditorDialog-B-7uW3iJ.js.map +1 -0
- package/dist/{PropertyEditView-DKzOpMjR.js → PropertyEditView-7KMTcrqi.js} +78 -70
- package/dist/PropertyEditView-7KMTcrqi.js.map +1 -0
- package/dist/{RouterCollectionsStudioView-BQTIExjA.js → RouterCollectionsStudioView-epqIbZrJ.js} +4 -4
- package/dist/{RouterCollectionsStudioView-BQTIExjA.js.map → RouterCollectionsStudioView-epqIbZrJ.js.map} +1 -1
- package/dist/collection_editor/_cms_internals.d.ts +3 -3
- package/dist/collection_editor/api/generateCollectionApi.d.ts +4 -4
- 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 +4 -4
- package/dist/collection_editor/ui/collection_editor/SubcollectionsEditTab.d.ts +3 -3
- 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/validateCollectionJson.d.ts +2 -2
- package/dist/collection_editor_ui.js +4 -4
- 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} +1 -1
- 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/common.d.ts +2 -2
- package/dist/components/{EntityCollectionTable → CollectionTableBinding}/internal/popup_field/PopupFormField.d.ts +2 -2
- 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 +2 -2
- 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 +1 -1
- package/dist/components/RebaseNavigation.d.ts +1 -1
- package/dist/components/ReferenceTable/{EntitySelectionTable.d.ts → SelectionTableBinding.d.ts} +5 -5
- package/dist/components/SelectableTable/SelectableTable.d.ts +5 -5
- 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 +14 -13
- 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/form/EntityForm.d.ts +1 -1
- package/dist/form/PropertyFieldBinding.d.ts +1 -1
- package/dist/form/form_utils.d.ts +2 -2
- package/dist/{history-B3cqBzEV.js → history-7X5bON_n.js} +4 -4
- package/dist/history-7X5bON_n.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-sUZfe29F.js} +737 -647
- package/dist/src-sUZfe29F.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/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 +8 -8
- package/src/collection_editor/ConfigControllerProvider.tsx +10 -10
- package/src/collection_editor/_cms_internals.ts +3 -3
- package/src/collection_editor/api/generateCollectionApi.ts +4 -4
- 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 +2 -2
- package/src/collection_editor/ui/CollectionViewHeaderAction.tsx +2 -2
- package/src/collection_editor/ui/EditorCollectionAction.tsx +2 -2
- package/src/collection_editor/ui/EditorCollectionActionStart.tsx +2 -2
- package/src/collection_editor/ui/EditorEntityAction.tsx +2 -2
- package/src/collection_editor/ui/KanbanSetupAction.tsx +2 -2
- package/src/collection_editor/ui/PropertyAddColumnComponent.tsx +2 -2
- package/src/collection_editor/ui/collection_editor/AICollectionGeneratorPopover.tsx +5 -5
- package/src/collection_editor/ui/collection_editor/CollectionDetailsForm.tsx +3 -3
- package/src/collection_editor/ui/collection_editor/CollectionEditorDialog.tsx +26 -26
- package/src/collection_editor/ui/collection_editor/CollectionEditorWelcomeView.tsx +3 -3
- package/src/collection_editor/ui/collection_editor/CollectionJsonImportDialog.tsx +2 -2
- package/src/collection_editor/ui/collection_editor/CollectionPropertiesEditorForm.tsx +8 -8
- package/src/collection_editor/ui/collection_editor/CollectionRLSTab.tsx +2 -2
- package/src/collection_editor/ui/collection_editor/CollectionRelationsTab.tsx +2 -2
- package/src/collection_editor/ui/collection_editor/CollectionStudioView.tsx +2 -2
- package/src/collection_editor/ui/collection_editor/CollectionsStudioView.tsx +2 -2
- package/src/collection_editor/ui/collection_editor/DisplaySettingsForm.tsx +2 -2
- package/src/collection_editor/ui/collection_editor/EntityActionsEditTab.tsx +3 -3
- package/src/collection_editor/ui/collection_editor/GeneralSettingsForm.tsx +5 -5
- package/src/collection_editor/ui/collection_editor/GetCodeDialog.tsx +4 -4
- package/src/collection_editor/ui/collection_editor/KanbanConfigSection.tsx +2 -2
- package/src/collection_editor/ui/collection_editor/PropertyEditView.tsx +7 -7
- package/src/collection_editor/ui/collection_editor/PropertyFieldPreview.tsx +45 -36
- package/src/collection_editor/ui/collection_editor/PropertyTree.tsx +1 -1
- package/src/collection_editor/ui/collection_editor/SubcollectionsEditTab.tsx +5 -5
- package/src/collection_editor/ui/collection_editor/import/CollectionEditorImportDataPreview.tsx +3 -3
- package/src/collection_editor/ui/collection_editor/import/CollectionEditorImportMapping.tsx +2 -2
- package/src/collection_editor/ui/collection_editor/properties/RelationPropertyField.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/validateCollectionJson.ts +3 -3
- package/src/components/CollectionPanel.tsx +14 -17
- package/src/components/{EntityCollectionTable/EntityCollectionRowActions.tsx → CollectionTableBinding/CollectionRowActions.tsx} +6 -6
- package/src/components/{EntityCollectionTable/EntityCollectionTable.tsx → CollectionTableBinding/CollectionTableBinding.tsx} +10 -10
- package/src/components/{EntityCollectionTable/EntityCollectionTableProps.tsx → CollectionTableBinding/CollectionTableBindingProps.tsx} +1 -1
- package/src/components/{EntityCollectionTable → CollectionTableBinding}/fields/TableMultipleRelationField.tsx +5 -5
- package/src/components/{EntityCollectionTable → CollectionTableBinding}/fields/TableReferenceField.tsx +10 -10
- package/src/components/{EntityCollectionTable → CollectionTableBinding}/fields/TableRelationField.tsx +5 -5
- package/src/components/CollectionTableBinding/index.tsx +14 -0
- package/src/components/{EntityCollectionTable → CollectionTableBinding}/internal/common.tsx +2 -2
- package/src/components/{EntityCollectionTable → CollectionTableBinding}/internal/popup_field/PopupFormField.tsx +2 -2
- package/src/components/{EntityCollectionView/EntityBoardCard.tsx → CollectionViewBinding/BoardCardBinding.tsx} +15 -15
- package/src/components/{EntityCollectionView/EntityCollectionBoardView.tsx → CollectionViewBinding/CollectionBoardViewBinding.tsx} +14 -13
- package/src/components/{EntityCollectionView/EntityCollectionCardView.tsx → CollectionViewBinding/CollectionCardViewBinding.tsx} +8 -8
- package/src/components/{EntityCollectionView/EntityCollectionListView.tsx → CollectionViewBinding/CollectionListViewBinding.tsx} +12 -12
- package/src/components/{EntityCollectionView/EntityCollectionViewActions.tsx → CollectionViewBinding/CollectionViewActions.tsx} +5 -5
- package/src/components/{EntityCollectionView/EntityCollectionView.tsx → CollectionViewBinding/CollectionViewBinding.tsx} +106 -91
- package/src/components/{EntityCollectionView/EntityCollectionViewStartActions.tsx → CollectionViewBinding/CollectionViewStartActions.tsx} +5 -5
- package/src/components/{EntityCollectionView/EntityCard.tsx → CollectionViewBinding/EntityCardBinding.tsx} +9 -9
- package/src/components/{EntityCollectionView → CollectionViewBinding}/FiltersDialog.tsx +31 -72
- package/src/components/{EntityCollectionView → CollectionViewBinding}/SplitListView.tsx +9 -9
- package/src/components/{EntityCollectionView → CollectionViewBinding}/hooks/useCollectionInlineEditor.ts +5 -5
- package/src/components/{EntityCollectionView → CollectionViewBinding}/hooks/useKanbanDragAndDrop.ts +4 -4
- package/src/components/{EntityCollectionView → CollectionViewBinding}/useBoardDataController.tsx +16 -10
- package/src/components/{EntityCollectionView/useEntityPreviewSlots.ts → CollectionViewBinding/usePreviewSlots.ts} +8 -8
- package/src/components/DeleteEntityDialog.tsx +6 -6
- package/src/components/{EntityDetailView.tsx → DetailViewBinding.tsx} +26 -29
- package/src/components/{EntityEditViewFormActions.tsx → EditFormActions.tsx} +12 -12
- package/src/components/{EntityEditView.tsx → EditViewBinding.tsx} +29 -32
- package/src/components/{EntityPreview.tsx → EntityPreviewBinding.tsx} +27 -27
- package/src/components/{EntityView.tsx → EntityViewBinding.tsx} +5 -5
- package/src/components/HomePage/NavigationCardBinding.tsx +1 -1
- package/src/components/{EntityJsonPreview.tsx → JsonPreviewBinding.tsx} +1 -1
- package/src/components/RebaseCMS.tsx +4 -3
- package/src/components/RebaseNavigation.tsx +17 -8
- package/src/components/ReferenceTable/{EntitySelectionTable.tsx → SelectionTableBinding.tsx} +22 -19
- package/src/components/ReferenceWidget.tsx +4 -4
- package/src/components/RelationSelector.tsx +14 -12
- package/src/components/SelectableTable/SelectableTable.tsx +34 -87
- package/src/components/SelectableTable/SelectableTableContext.tsx +3 -3
- package/src/components/SelectableTable/SelectionStore.ts +4 -4
- package/src/components/SelectableTable/filters/BooleanFilterField.tsx +9 -1
- package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +33 -12
- package/src/components/SelectableTable/filters/FilterFieldBinding.tsx +187 -0
- package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +21 -7
- package/src/components/SelectableTable/filters/RelationFilterField.tsx +17 -3
- package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +66 -12
- package/src/components/SideDialogs.tsx +3 -3
- package/src/components/{EntitySidePanel.tsx → SidePanelBinding.tsx} +19 -19
- package/src/components/{SideEntityProvider.tsx → SidePanelProvider.tsx} +16 -16
- package/src/components/common/default_entity_actions.tsx +9 -9
- package/src/components/history/EntityHistoryEntry.tsx +2 -2
- package/src/components/history/EntityHistoryView.tsx +3 -3
- package/src/components/history/LastEditedByIndicator.tsx +2 -2
- package/src/components/index.ts +15 -14
- package/src/contexts/SidePanelControllerContext.tsx +5 -0
- package/src/data_export/export/ExportCollectionAction.tsx +4 -4
- package/src/data_import/components/ImportSaveInProgress.tsx +3 -3
- package/src/data_import/import/ImportCollectionAction.tsx +4 -4
- package/src/data_import/utils/data.ts +2 -2
- package/src/form/EntityForm.tsx +2 -2
- package/src/form/EntityFormActions.tsx +3 -3
- package/src/form/EntityFormBinding.tsx +6 -6
- package/src/form/PropertyFieldBinding.tsx +4 -4
- package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +4 -4
- package/src/form/field_bindings/KeyValueFieldBinding.tsx +19 -19
- package/src/form/field_bindings/MultipleRelationFieldBinding.tsx +2 -2
- package/src/form/field_bindings/ReferenceFieldBinding.tsx +5 -5
- package/src/form/field_bindings/RelationFieldBinding.tsx +3 -3
- package/src/form/form_utils.ts +2 -2
- 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 +10 -10
- 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} +28 -28
- package/src/hooks/useCMSContext.tsx +6 -6
- package/src/hooks/{useEntityHistory.ts → useHistory.ts} +1 -1
- package/src/hooks/useResolvedNavigationFrom.tsx +8 -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 +12 -12
- package/src/preview/components/ReferencePreview.tsx +10 -10
- package/src/preview/components/RelationPreview.tsx +13 -12
- package/src/routes/RebaseRoute.tsx +10 -10
- package/src/types/components/EntityFormActionsProps.tsx +2 -2
- package/src/types/components/EntityFormProps.tsx +3 -3
- 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 +3 -3
- 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/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/EntityTableCell.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/{EntityCollectionTable → CollectionTableBinding}/table_bindings.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}/PropertyTableCell.tsx +0 -0
- /package/src/components/{EntityCollectionTable → CollectionTableBinding}/column_utils.tsx +0 -0
- /package/src/components/{EntityCollectionTable → CollectionTableBinding}/fields/TableRelationSelectorField.tsx +0 -0
- /package/src/components/{EntityCollectionTable → CollectionTableBinding}/fields/TableStorageUpload.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/CollectionTableToolbar.tsx +0 -0
- /package/src/components/{EntityCollectionTable → CollectionTableBinding}/internal/EntityTableCell.tsx +0 -0
- /package/src/components/{EntityCollectionTable → CollectionTableBinding}/internal/EntityTableCellActions.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/{EntityCollectionTable → CollectionTableBinding}/table_bindings.tsx +0 -0
- /package/src/components/{EntityCollectionView → CollectionViewBinding}/FilterPresetsButton.tsx +0 -0
- /package/src/components/{EntityCollectionView → CollectionViewBinding}/ViewModeToggle.tsx +0 -0
- /package/src/components/{EntityCollectionView → CollectionViewBinding}/useSelectionController.tsx +0 -0
- /package/src/components/{EntityCollectionView → CollectionViewBinding}/utils.ts +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { CollectionConfig } from "@rebasepro/types";
|
|
2
2
|
import React, { useMemo } from "react";
|
|
3
3
|
import { CollectionSize, Entity } from "@rebasepro/types";
|
|
4
4
|
import {
|
|
@@ -15,11 +15,11 @@ import {
|
|
|
15
15
|
} from "@rebasepro/core";
|
|
16
16
|
import { useAnalyticsController } from "@rebasepro/core";
|
|
17
17
|
import { IconForView } from "@rebasepro/core";
|
|
18
|
-
import { useCollectionSlotKeys, resolveEntitySlots } from "./
|
|
18
|
+
import { useCollectionSlotKeys, resolveEntitySlots } from "./usePreviewSlots";
|
|
19
19
|
|
|
20
|
-
export type
|
|
20
|
+
export type EntityCardBindingProps<M extends Record<string, unknown> = Record<string, unknown>> = {
|
|
21
21
|
entity: Entity<M>;
|
|
22
|
-
collection:
|
|
22
|
+
collection: CollectionConfig<M>;
|
|
23
23
|
onClick?: (entity: Entity<M>) => void;
|
|
24
24
|
selected?: boolean;
|
|
25
25
|
highlighted?: boolean;
|
|
@@ -32,10 +32,10 @@ export type EntityCardProps<M extends Record<string, unknown> = Record<string, u
|
|
|
32
32
|
};
|
|
33
33
|
|
|
34
34
|
/**
|
|
35
|
-
* Card component for displaying
|
|
35
|
+
* Card component for displaying a entity in a grid view.
|
|
36
36
|
* Shows thumbnail, title, and preview properties via the shared slot system.
|
|
37
37
|
*/
|
|
38
|
-
export function
|
|
38
|
+
export function EntityCardBinding<M extends Record<string, unknown> = Record<string, unknown>>({
|
|
39
39
|
entity,
|
|
40
40
|
collection,
|
|
41
41
|
onClick,
|
|
@@ -44,13 +44,13 @@ export function EntityCard<M extends Record<string, unknown> = Record<string, un
|
|
|
44
44
|
onSelectionChange,
|
|
45
45
|
selectionEnabled,
|
|
46
46
|
size = "m"
|
|
47
|
-
}:
|
|
47
|
+
}: EntityCardBindingProps<M>) {
|
|
48
48
|
const authController = useAuthController();
|
|
49
49
|
const analyticsController = useAnalyticsController();
|
|
50
50
|
const customizationController = useCustomizationController();
|
|
51
51
|
|
|
52
52
|
const slotKeys = useCollectionSlotKeys(
|
|
53
|
-
collection as
|
|
53
|
+
collection as CollectionConfig<Record<string, unknown>>,
|
|
54
54
|
authController,
|
|
55
55
|
customizationController.propertyConfigs
|
|
56
56
|
);
|
|
@@ -58,7 +58,7 @@ export function EntityCard<M extends Record<string, unknown> = Record<string, un
|
|
|
58
58
|
const slots = useMemo(
|
|
59
59
|
() => resolveEntitySlots(
|
|
60
60
|
entity as Entity<Record<string, unknown>>,
|
|
61
|
-
collection as
|
|
61
|
+
collection as CollectionConfig<Record<string, unknown>>,
|
|
62
62
|
slotKeys
|
|
63
63
|
),
|
|
64
64
|
[entity, collection, slotKeys]
|
|
@@ -4,12 +4,9 @@ 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
|
-
import { ReferenceFilterField } from "../SelectableTable/filters/ReferenceFilterField";
|
|
11
|
-
import { enumToObjectEntries } from "@rebasepro/common";
|
|
12
|
-
import { useTranslation } from "@rebasepro/core";
|
|
7
|
+
import { resolveFilterOperators } from "@rebasepro/common";
|
|
8
|
+
import { useCollectionScope, useTranslation } from "@rebasepro/core";
|
|
9
|
+
import { FilterFieldBinding } from "../SelectableTable/filters/FilterFieldBinding";
|
|
13
10
|
|
|
14
11
|
export interface FiltersDialogProps {
|
|
15
12
|
open: boolean;
|
|
@@ -33,6 +30,9 @@ export function FiltersDialog({
|
|
|
33
30
|
fixedFilter
|
|
34
31
|
}: FiltersDialogProps) {
|
|
35
32
|
const { t } = useTranslation();
|
|
33
|
+
// Engine of the collection this dialog filters — read from the
|
|
34
|
+
// surrounding CollectionScopeProvider mounted by the collection view.
|
|
35
|
+
const engine = useCollectionScope()?.engine;
|
|
36
36
|
// Local state for filters being edited
|
|
37
37
|
const [localFilters, setLocalFilters] = useState<FilterValues<any>>(filterValues ?? {});
|
|
38
38
|
|
|
@@ -52,12 +52,17 @@ export function FiltersDialog({
|
|
|
52
52
|
if (!property) return false;
|
|
53
53
|
// Force filter properties should not be editable
|
|
54
54
|
if (fixedFilter && key in fixedFilter) return false;
|
|
55
|
-
|
|
56
|
-
const
|
|
57
|
-
|
|
58
|
-
|
|
55
|
+
const isArray = property.type === "array";
|
|
56
|
+
const ofProp = isArray && "of" in property ? property.of : undefined;
|
|
57
|
+
const baseProperty = isArray ? (Array.isArray(ofProp) ? ofProp[0] : ofProp) as Property | undefined : property;
|
|
58
|
+
if (!baseProperty) return false;
|
|
59
|
+
// A property is filterable when it has a custom filter field, or
|
|
60
|
+
// when at least one operator survives the engine ∩ type ∩
|
|
61
|
+
// property-narrowing resolution.
|
|
62
|
+
if (baseProperty.ui?.Filter) return true;
|
|
63
|
+
return resolveFilterOperators({ property: baseProperty, isArray, engine }).length > 0;
|
|
59
64
|
});
|
|
60
|
-
}, [properties, fixedFilter]);
|
|
65
|
+
}, [properties, fixedFilter, engine]);
|
|
61
66
|
|
|
62
67
|
const handleFilterChange = useCallback((propertyKey: string, value?: [VirtualTableWhereFilterOp, any]) => {
|
|
63
68
|
setLocalFilters(prev => {
|
|
@@ -94,67 +99,21 @@ export function FiltersDialog({
|
|
|
94
99
|
const activeFilterCount = Object.keys(localFilters).length;
|
|
95
100
|
|
|
96
101
|
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]);
|
|
102
|
+
const filterValue = localFilters[propertyKey] as [WhereFilterOp, any] | undefined;
|
|
103
|
+
const setValue = (value?: [WhereFilterOp, any]) => handleFilterChange(propertyKey, value as [VirtualTableWhereFilterOp, any] | undefined);
|
|
104
|
+
|
|
105
|
+
return (
|
|
106
|
+
<FilterFieldBinding
|
|
107
|
+
propertyKey={propertyKey}
|
|
108
|
+
property={property}
|
|
109
|
+
engine={engine}
|
|
110
|
+
value={filterValue}
|
|
111
|
+
setValue={setValue}
|
|
112
|
+
hidden={hiddenFields[propertyKey] ?? false}
|
|
113
|
+
setHidden={(hidden) => setHiddenForField(propertyKey, hidden)}
|
|
114
|
+
/>
|
|
115
|
+
);
|
|
116
|
+
}, [localFilters, handleFilterChange, hiddenFields, setHiddenForField, engine]);
|
|
158
117
|
|
|
159
118
|
return (
|
|
160
119
|
<Dialog
|
|
@@ -1,8 +1,8 @@
|
|
|
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,
|
|
@@ -15,7 +15,7 @@ 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
2
|
import { setIn } from "@rebasepro/formex";
|
|
3
|
-
import {
|
|
4
|
-
import { OnCellValueChange, saveEntityWithCallbacks, UniqueFieldValidator } from "@rebasepro/core";
|
|
3
|
+
import { CollectionConfig, RebaseData, RebaseContext } from "@rebasepro/types";
|
|
4
|
+
import { OnCellValueChange, saveEntityWithCallbacks, SaveEntityWithCallbacksProps, UniqueFieldValidator } from "@rebasepro/core";
|
|
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
2
|
import { setIn } from "@rebasepro/formex";
|
|
3
|
-
import {
|
|
4
|
-
import { saveEntityWithCallbacks } from "@rebasepro/core";
|
|
3
|
+
import { CollectionConfig, RebaseData, RebaseContext, AnalyticsController, Entity } from "@rebasepro/types";
|
|
4
|
+
import { saveEntityWithCallbacks, SaveEntityWithCallbacksProps } from "@rebasepro/core";
|
|
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,6 +1,6 @@
|
|
|
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";
|
|
3
|
+
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
4
4
|
import { useData, useRebaseContext } from "@rebasepro/core";
|
|
5
5
|
|
|
6
6
|
const DEFAULT_PAGE_SIZE = 20;
|
|
@@ -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);
|
|
@@ -1,5 +1,5 @@
|
|
|
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
5
|
import { getEntityFromCache } from "@rebasepro/core";
|
|
@@ -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
|
|
@@ -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 {
|
|
@@ -11,15 +11,15 @@ import {
|
|
|
11
11
|
useTranslation
|
|
12
12
|
} from "@rebasepro/core";
|
|
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}/>
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import type { ComponentRef,
|
|
1
|
+
import type { ComponentRef, CollectionConfig, EntityCustomViewParams, FormViewConfig } from "@rebasepro/types";
|
|
2
2
|
import type { FormContext } from "../types/fields";
|
|
3
3
|
import type { PluginFormActionProps } from "@rebasepro/types";
|
|
4
4
|
import React, { lazy, Suspense, useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
5
5
|
import { Entity, EntityStatus, getCollectionDataPath, Property } from "@rebasepro/types";
|
|
6
|
-
import { PluginProviderStack, resolveComponentRef, useComponentOverride,
|
|
6
|
+
import { PluginProviderStack, resolveComponentRef, useComponentOverride, CollectionScopeProvider } from "@rebasepro/core";
|
|
7
7
|
|
|
8
|
-
import {
|
|
8
|
+
import { CollectionViewBinding, EntityViewBinding } from "../components";
|
|
9
9
|
import { CircularProgressCenter, iconSize } from "@rebasepro/ui";
|
|
10
10
|
import {
|
|
11
11
|
Alert,
|
|
@@ -34,7 +34,7 @@ import {
|
|
|
34
34
|
import { resolvedSelectedEntityView } from "../util/resolutions";
|
|
35
35
|
import {
|
|
36
36
|
useCustomizationController,
|
|
37
|
-
|
|
37
|
+
useFetch,
|
|
38
38
|
useRebaseContext,
|
|
39
39
|
useLargeLayout,
|
|
40
40
|
useSlot
|
|
@@ -43,11 +43,11 @@ import { useUrlController, useCollectionRegistryController } from "../index";
|
|
|
43
43
|
import { useNavigate } from "react-router-dom";
|
|
44
44
|
import { getValueInPath } from "@rebasepro/utils";
|
|
45
45
|
import { getEntityTitlePropertyKey, resolveTitleToString } from "../util/previews";
|
|
46
|
-
import {
|
|
46
|
+
import { JsonPreviewBinding } from "../components/JsonPreviewBinding";
|
|
47
47
|
|
|
48
48
|
const EntityHistoryView = lazy(() => import("../components/history").then(m => ({ default: m.EntityHistoryView })));
|
|
49
49
|
|
|
50
|
-
import { MAIN_TAB_VALUE, JSON_TAB_VALUE, HISTORY_TAB_VALUE } from "../util/
|
|
50
|
+
import { MAIN_TAB_VALUE, JSON_TAB_VALUE, HISTORY_TAB_VALUE } from "../util/view_constants";
|
|
51
51
|
|
|
52
52
|
export type BarActionsParams = {
|
|
53
53
|
values: object,
|
|
@@ -60,12 +60,12 @@ export type OnTabChangeParams<M extends Record<string, unknown>> = {
|
|
|
60
60
|
path: string;
|
|
61
61
|
entityId?: string | number;
|
|
62
62
|
selectedTab?: string;
|
|
63
|
-
collection:
|
|
63
|
+
collection: CollectionConfig<M>;
|
|
64
64
|
};
|
|
65
65
|
|
|
66
|
-
export interface
|
|
66
|
+
export interface DetailViewBindingProps<M extends Record<string, unknown> = Record<string, unknown>> {
|
|
67
67
|
path: string;
|
|
68
|
-
collection:
|
|
68
|
+
collection: CollectionConfig<M>;
|
|
69
69
|
entityId: string | number;
|
|
70
70
|
selectedTab?: string;
|
|
71
71
|
parentCollectionSlugs: string[];
|
|
@@ -76,16 +76,16 @@ export interface EntityDetailViewProps<M extends Record<string, unknown> = Recor
|
|
|
76
76
|
barActions?: (params: BarActionsParams) => React.ReactNode;
|
|
77
77
|
}
|
|
78
78
|
|
|
79
|
-
export function
|
|
79
|
+
export function DetailViewBinding<M extends Record<string, unknown>>({
|
|
80
80
|
entityId,
|
|
81
81
|
...props
|
|
82
|
-
}:
|
|
82
|
+
}: DetailViewBindingProps<M>) {
|
|
83
83
|
|
|
84
84
|
const {
|
|
85
85
|
entity,
|
|
86
86
|
dataLoading,
|
|
87
87
|
dataLoadingError
|
|
88
|
-
} =
|
|
88
|
+
} = useFetch<M>({
|
|
89
89
|
path: props.path,
|
|
90
90
|
entityId: entityId,
|
|
91
91
|
collection: props.collection,
|
|
@@ -105,7 +105,7 @@ export function EntityDetailView<M extends Record<string, unknown>>({
|
|
|
105
105
|
}
|
|
106
106
|
|
|
107
107
|
const content = (
|
|
108
|
-
<
|
|
108
|
+
<DetailViewBindingInner<M>
|
|
109
109
|
{...props}
|
|
110
110
|
entityId={entityId}
|
|
111
111
|
entity={entity}
|
|
@@ -113,17 +113,14 @@ export function EntityDetailView<M extends Record<string, unknown>>({
|
|
|
113
113
|
/>
|
|
114
114
|
);
|
|
115
115
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
);
|
|
122
|
-
}
|
|
123
|
-
return content;
|
|
116
|
+
return (
|
|
117
|
+
<CollectionScopeProvider collection={props.collection}>
|
|
118
|
+
{content}
|
|
119
|
+
</CollectionScopeProvider>
|
|
120
|
+
);
|
|
124
121
|
}
|
|
125
122
|
|
|
126
|
-
function
|
|
123
|
+
function DetailViewBindingInner<M extends Record<string, unknown>>({
|
|
127
124
|
path,
|
|
128
125
|
entityId,
|
|
129
126
|
selectedTab: selectedTabProp,
|
|
@@ -136,11 +133,11 @@ function EntityDetailViewInner<M extends Record<string, unknown>>({
|
|
|
136
133
|
dataLoading,
|
|
137
134
|
layout = "full_screen",
|
|
138
135
|
barActions
|
|
139
|
-
}:
|
|
136
|
+
}: DetailViewBindingProps<M> & {
|
|
140
137
|
entity?: Entity<M>,
|
|
141
138
|
dataLoading: boolean,
|
|
142
139
|
}) {
|
|
143
|
-
const ResolvedCollectionView = useComponentOverride("Collection.View",
|
|
140
|
+
const ResolvedCollectionView = useComponentOverride("Collection.View", CollectionViewBinding);
|
|
144
141
|
const { t } = useTranslation();
|
|
145
142
|
const context = useRebaseContext();
|
|
146
143
|
const urlController = useUrlController();
|
|
@@ -166,7 +163,7 @@ entityId }
|
|
|
166
163
|
), [collection, entityId]);
|
|
167
164
|
|
|
168
165
|
// Track whether the user has explicitly clicked a tab in this component
|
|
169
|
-
// instance. See
|
|
166
|
+
// instance. See EditViewBindingInner for full explanation.
|
|
170
167
|
const userHasChangedTab = useRef(false);
|
|
171
168
|
|
|
172
169
|
const [selectedTab, setSelectedTab] = useState<string>(() => {
|
|
@@ -264,7 +261,7 @@ entityId }
|
|
|
264
261
|
const pluginActionsTop = useSlot("form.actions.top", formActionTopProps);
|
|
265
262
|
|
|
266
263
|
// Resolve formView.Builder if provided
|
|
267
|
-
const formViewConfig = (collection as
|
|
264
|
+
const formViewConfig = (collection as CollectionConfig<M> & { formView?: FormViewConfig<M> }).formView;
|
|
268
265
|
const FormViewBuilder = formViewConfig?.Builder ? resolveComponentRef<EntityCustomViewParams>(formViewConfig.Builder as ComponentRef<EntityCustomViewParams>) : null;
|
|
269
266
|
|
|
270
267
|
// Title resolution
|
|
@@ -323,7 +320,7 @@ entityId }
|
|
|
323
320
|
key={"json_view"}
|
|
324
321
|
role="tabpanel">
|
|
325
322
|
<ErrorBoundary>
|
|
326
|
-
<
|
|
323
|
+
<JsonPreviewBinding values={usedEntity?.values ?? {}} />
|
|
327
324
|
</ErrorBoundary>
|
|
328
325
|
</div> : null;
|
|
329
326
|
|
|
@@ -405,7 +402,7 @@ entityId }
|
|
|
405
402
|
|
|
406
403
|
return (
|
|
407
404
|
<>
|
|
408
|
-
{usedEntity && <
|
|
405
|
+
{usedEntity && <EntityViewBinding
|
|
409
406
|
entity={usedEntity}
|
|
410
407
|
collection={collection}
|
|
411
408
|
path={path}
|
|
@@ -639,7 +636,7 @@ entityId }
|
|
|
639
636
|
return result;
|
|
640
637
|
}
|
|
641
638
|
|
|
642
|
-
function DetailViewSkeleton({ collection }: { collection:
|
|
639
|
+
function DetailViewSkeleton({ collection }: { collection: CollectionConfig<Record<string, unknown>> }) {
|
|
643
640
|
return (
|
|
644
641
|
<div className="flex-1 flex flex-row w-full overflow-y-auto justify-center">
|
|
645
642
|
<div className="relative flex flex-row max-w-4xl lg:max-w-3xl xl:max-w-4xl 2xl:max-w-6xl w-full h-fit">
|