@rebasepro/admin 0.7.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/LICENSE +21 -0
- package/README.md +20 -20
- package/dist/{CollectionEditorDialog-iGgS4rLX.js → CollectionEditorDialog-B-7uW3iJ.js} +15 -15
- package/dist/CollectionEditorDialog-B-7uW3iJ.js.map +1 -0
- package/dist/{PropertyEditView-C9yhLyja.js → PropertyEditView-7KMTcrqi.js} +140 -106
- package/dist/PropertyEditView-7KMTcrqi.js.map +1 -0
- package/dist/{RouterCollectionsStudioView-Dqx27GD8.js → RouterCollectionsStudioView-epqIbZrJ.js} +4 -4
- package/dist/{RouterCollectionsStudioView-Dqx27GD8.js.map → RouterCollectionsStudioView-epqIbZrJ.js.map} +1 -1
- package/dist/collection_editor/_cms_internals.d.ts +4 -4
- package/dist/collection_editor/api/generateCollectionApi.d.ts +7 -6
- 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 +12 -16
- 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 -5
- 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 +13 -22
- 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/field_configs.d.ts +1 -1
- 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/editor/editor.d.ts +0 -6
- package/dist/editor.js +1 -3
- 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/StorageUploadProgress.d.ts +6 -1
- package/dist/form/form_utils.d.ts +2 -2
- package/dist/form/index.d.ts +0 -1
- package/dist/{history-ChHgyyvM.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 +3 -3
- package/dist/index.js +2 -2
- package/dist/preview/components/StorageThumbnail.d.ts +3 -1
- package/dist/{src-DOX2nOyh.js → src-sUZfe29F.js} +904 -1096
- 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/components/PropertyPreviewProps.d.ts +2 -1
- package/dist/types/fields.d.ts +6 -8
- 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 +18 -18
- package/src/collection_editor/ConfigControllerProvider.tsx +10 -10
- package/src/collection_editor/_cms_internals.ts +4 -4
- package/src/collection_editor/api/generateCollectionApi.ts +7 -6
- package/src/collection_editor/extensibility_types.ts +3 -3
- package/src/collection_editor/index.ts +3 -3
- package/src/collection_editor/pgColumnToProperty.ts +4 -4
- package/src/collection_editor/serializable_types.ts +22 -35
- package/src/collection_editor/serializable_utils.ts +40 -52
- 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 +63 -46
- 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 -16
- 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/properties/StoragePropertyField.tsx +35 -1
- package/src/collection_editor/ui/collection_editor/templates/blog_template.ts +3 -3
- package/src/collection_editor/ui/collection_editor/templates/pages_template.ts +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/ui/collection_editor/utils/supported_fields.tsx +0 -1
- package/src/collection_editor/ui/collection_editor/utils/update_property_for_widget.ts +7 -29
- package/src/collection_editor/useJsonCollectionsConfigController.tsx +14 -14
- 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} +19 -17
- package/src/components/{EntityCollectionTable/EntityCollectionTableProps.tsx → CollectionTableBinding/CollectionTableBindingProps.tsx} +1 -1
- package/src/components/{EntityCollectionTable → CollectionTableBinding}/fields/TableMultipleRelationField.tsx +7 -6
- package/src/components/{EntityCollectionTable → CollectionTableBinding}/fields/TableReferenceField.tsx +10 -10
- package/src/components/{EntityCollectionTable → CollectionTableBinding}/fields/TableRelationField.tsx +7 -6
- package/src/components/{EntityCollectionTable → CollectionTableBinding}/fields/TableStorageUpload.tsx +23 -20
- 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/{EntityCollectionTable → CollectionTableBinding}/table_bindings.tsx +24 -44
- package/src/components/{EntityCollectionView/EntityBoardCard.tsx → CollectionViewBinding/BoardCardBinding.tsx} +15 -15
- package/src/components/{EntityCollectionView/EntityCollectionBoardView.tsx → CollectionViewBinding/CollectionBoardViewBinding.tsx} +15 -14
- package/src/components/{EntityCollectionView/EntityCollectionCardView.tsx → CollectionViewBinding/CollectionCardViewBinding.tsx} +8 -8
- package/src/components/{EntityCollectionView/EntityCollectionListView.tsx → CollectionViewBinding/CollectionListViewBinding.tsx} +24 -13
- package/src/components/{EntityCollectionView/EntityCollectionViewActions.tsx → CollectionViewBinding/CollectionViewActions.tsx} +5 -5
- package/src/components/{EntityCollectionView/EntityCollectionView.tsx → CollectionViewBinding/CollectionViewBinding.tsx} +112 -114
- 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 +6 -6
- package/src/components/{EntityCollectionView → CollectionViewBinding}/hooks/useKanbanDragAndDrop.ts +4 -4
- package/src/components/{EntityCollectionView → CollectionViewBinding}/useBoardDataController.tsx +28 -50
- package/src/components/{EntityCollectionView/useEntityPreviewSlots.ts → CollectionViewBinding/usePreviewSlots.ts} +11 -11
- package/src/components/DefaultDrawer.tsx +1 -1
- package/src/components/DeleteEntityDialog.tsx +6 -6
- package/src/components/{EntityDetailView.tsx → DetailViewBinding.tsx} +28 -31
- package/src/components/{EntityEditViewFormActions.tsx → EditFormActions.tsx} +15 -15
- package/src/components/{EntityEditView.tsx → EditViewBinding.tsx} +31 -34
- package/src/components/{EntityPreview.tsx → EntityPreviewBinding.tsx} +27 -27
- package/src/components/{EntityView.tsx → EntityViewBinding.tsx} +5 -5
- package/src/components/HomePage/ContentHomePage.tsx +1 -1
- package/src/components/HomePage/NavigationCardBinding.tsx +1 -1
- package/src/components/{EntityJsonPreview.tsx → JsonPreviewBinding.tsx} +1 -1
- package/src/components/RebaseCMS.tsx +4 -4
- package/src/components/RebaseNavigation.tsx +20 -10
- package/src/components/ReferenceTable/{EntitySelectionTable.tsx → SelectionTableBinding.tsx} +22 -19
- package/src/components/ReferenceWidget.tsx +4 -4
- package/src/components/RelationSelector.tsx +16 -14
- package/src/components/SelectableTable/SelectableTable.tsx +44 -89
- package/src/components/SelectableTable/SelectableTableContext.tsx +3 -3
- package/src/components/SelectableTable/SelectionStore.ts +22 -52
- 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 +24 -13
- package/src/components/field_configs.tsx +0 -14
- 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/editor/editor.tsx +4 -7
- package/src/form/EntityForm.tsx +2 -2
- package/src/form/EntityFormActions.tsx +4 -4
- package/src/form/EntityFormBinding.tsx +7 -7
- package/src/form/PropertyFieldBinding.tsx +4 -4
- package/src/form/components/StorageUploadProgress.tsx +9 -2
- package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +4 -4
- package/src/form/field_bindings/KeyValueFieldBinding.tsx +19 -19
- package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +12 -1
- package/src/form/field_bindings/MultipleRelationFieldBinding.tsx +6 -6
- package/src/form/field_bindings/ReferenceFieldBinding.tsx +5 -5
- package/src/form/field_bindings/RelationFieldBinding.tsx +8 -10
- package/src/form/field_bindings/StorageUploadFieldBinding.tsx +19 -15
- package/src/form/form_utils.ts +2 -2
- package/src/form/index.tsx +0 -1
- 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 +13 -13
- package/src/preview/PropertyPreview.tsx +1 -16
- package/src/preview/components/ReferencePreview.tsx +10 -10
- package/src/preview/components/RelationPreview.tsx +13 -12
- package/src/preview/components/StorageThumbnail.tsx +24 -7
- 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/components/PropertyPreviewProps.tsx +1 -1
- package/src/types/fields.tsx +4 -9
- package/src/util/dataControllerAdapter.ts +9 -15
- package/src/util/navigation_utils.ts +7 -7
- package/src/util/previews.ts +23 -3
- package/src/util/propertyConfigMapper.ts +3 -3
- package/src/util/property_utils.tsx +2 -3
- package/src/util/{entity_view_constants.ts → view_constants.ts} +1 -1
- package/dist/CollectionEditorDialog-iGgS4rLX.js.map +0 -1
- package/dist/PropertyEditView-C9yhLyja.js.map +0 -1
- package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +0 -28
- package/dist/components/EntityCollectionTable/fields/VirtualTableDateField.d.ts +0 -12
- package/dist/components/EntityCollectionTable/fields/VirtualTableInput.d.ts +0 -10
- package/dist/components/EntityCollectionTable/fields/VirtualTableNumberInput.d.ts +0 -9
- package/dist/components/EntityCollectionTable/fields/VirtualTableSwitch.d.ts +0 -8
- 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/form/field_bindings/ReferenceAsStringFieldBinding.d.ts +0 -11
- package/dist/history-ChHgyyvM.js.map +0 -1
- package/dist/hooks/useBuildSideEntityController.d.ts +0 -6
- package/dist/hooks/useSideEntityController.d.ts +0 -11
- package/dist/src-DOX2nOyh.js.map +0 -1
- package/src/components/EntityCollectionTable/fields/VirtualTableDateField.tsx +0 -39
- package/src/components/EntityCollectionTable/fields/VirtualTableInput.tsx +0 -90
- package/src/components/EntityCollectionTable/fields/VirtualTableNumberInput.tsx +0 -83
- package/src/components/EntityCollectionTable/fields/VirtualTableSwitch.tsx +0 -32
- package/src/components/EntityCollectionTable/index.tsx +0 -14
- package/src/contexts/SideEntityControllerContext.tsx +0 -5
- package/src/form/field_bindings/ReferenceAsStringFieldBinding.tsx +0 -141
- 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/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/{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
|
@@ -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,12 +17,12 @@ 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);
|
|
24
24
|
const res = await accessor.find({
|
|
25
|
-
where: { [name]: "
|
|
25
|
+
where: { [name]: ["==", value] }
|
|
26
26
|
});
|
|
27
27
|
|
|
28
28
|
const conflictingEntities = res.data;
|
|
@@ -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) */
|
|
@@ -238,27 +238,13 @@ export function useBoardDataController<M extends Record<string, unknown> = any,
|
|
|
238
238
|
return;
|
|
239
239
|
}
|
|
240
240
|
|
|
241
|
-
// Build
|
|
242
|
-
const
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
const [op, val] = value;
|
|
247
|
-
const postgrestOp = op === "==" ? "eq" : op === "!=" ? "neq" : op === ">" ? "gt" : op === ">=" ? "gte" : op === "<" ? "lt" : op === "<=" ? "lte" : op === "in" ? "in" : op === "not-in" ? "nin" : op === "array-contains" ? "cs" : op === "array-contains-any" ? "csa" : "eq";
|
|
248
|
-
|
|
249
|
-
let stringVal: string;
|
|
250
|
-
if (Array.isArray(val)) {
|
|
251
|
-
stringVal = `(${val.join(",")})`;
|
|
252
|
-
} else {
|
|
253
|
-
stringVal = String(val);
|
|
254
|
-
}
|
|
255
|
-
whereMap[key] = `${postgrestOp}.${stringVal}`;
|
|
256
|
-
}
|
|
257
|
-
});
|
|
258
|
-
}
|
|
259
|
-
whereMap[currentColumnProperty] = `eq.${column}`;
|
|
241
|
+
// Build filter map for this column — pass FilterValues directly
|
|
242
|
+
const whereFilter: FilterValues<string> = {
|
|
243
|
+
...(currentFilterValues ?? {}),
|
|
244
|
+
[currentColumnProperty]: ["==", column]
|
|
245
|
+
};
|
|
260
246
|
|
|
261
|
-
const orderByParam = currentOrderProperty ?
|
|
247
|
+
const orderByParam: [string, "asc" | "desc"] | undefined = currentOrderProperty ? [currentOrderProperty, "asc"] : undefined;
|
|
262
248
|
|
|
263
249
|
// Mark column as loading
|
|
264
250
|
setColumnData(prev => ({
|
|
@@ -340,18 +326,24 @@ values: { ...e.values,
|
|
|
340
326
|
});
|
|
341
327
|
}
|
|
342
328
|
|
|
343
|
-
// 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.
|
|
344
332
|
if (currentCollection.callbacks?.afterRead) {
|
|
345
333
|
try {
|
|
346
334
|
processed = await Promise.all(
|
|
347
|
-
processed.map(entity =>
|
|
348
|
-
currentCollection.callbacks!.afterRead!({
|
|
335
|
+
processed.map(async (entity) => {
|
|
336
|
+
const processedRow = await currentCollection.callbacks!.afterRead!({
|
|
349
337
|
collection: currentCollection,
|
|
350
338
|
path: currentResolvedPath,
|
|
351
|
-
entity,
|
|
339
|
+
row: { id: entity.id, ...entity.values },
|
|
352
340
|
context: currentContext
|
|
353
|
-
})
|
|
354
|
-
|
|
341
|
+
});
|
|
342
|
+
return {
|
|
343
|
+
...entity,
|
|
344
|
+
values: processedRow as M
|
|
345
|
+
};
|
|
346
|
+
})
|
|
355
347
|
);
|
|
356
348
|
} catch (e) {
|
|
357
349
|
console.error("Error in afterRead callback:", e);
|
|
@@ -420,14 +412,14 @@ values: { ...e.values,
|
|
|
420
412
|
const accessor = currentDataClient.collection(currentResolvedPath);
|
|
421
413
|
if (accessor.listen) {
|
|
422
414
|
const unsubscribe = accessor.listen({
|
|
423
|
-
where:
|
|
415
|
+
where: whereFilter,
|
|
424
416
|
limit: itemCount,
|
|
425
417
|
orderBy: orderByParam
|
|
426
418
|
}, res => onUpdate(res.data as Entity<M>[]), onError);
|
|
427
419
|
unsubscribersRef.current[column] = unsubscribe;
|
|
428
420
|
} else {
|
|
429
421
|
accessor.find({
|
|
430
|
-
where:
|
|
422
|
+
where: whereFilter,
|
|
431
423
|
limit: itemCount,
|
|
432
424
|
orderBy: orderByParam
|
|
433
425
|
})
|
|
@@ -479,27 +471,13 @@ values: { ...e.values,
|
|
|
479
471
|
const accessor = currentDataClient.collection(currentResolvedPath);
|
|
480
472
|
if (accessor.count) {
|
|
481
473
|
|
|
482
|
-
const
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
const [op, val] = value;
|
|
487
|
-
const postgrestOp = op === "==" ? "eq" : op === "!=" ? "neq" : op === ">" ? "gt" : op === ">=" ? "gte" : op === "<" ? "lt" : op === "<=" ? "lte" : op === "in" ? "in" : op === "not-in" ? "nin" : op === "array-contains" ? "cs" : op === "array-contains-any" ? "csa" : "eq";
|
|
488
|
-
|
|
489
|
-
let stringVal: string;
|
|
490
|
-
if (Array.isArray(val)) {
|
|
491
|
-
stringVal = `(${val.join(",")})`;
|
|
492
|
-
} else {
|
|
493
|
-
stringVal = String(val);
|
|
494
|
-
}
|
|
495
|
-
whereMap[key] = `${postgrestOp}.${stringVal}`;
|
|
496
|
-
}
|
|
497
|
-
});
|
|
498
|
-
}
|
|
499
|
-
whereMap[currentColumnProperty] = `eq.${column}`;
|
|
474
|
+
const whereFilter: FilterValues<string> = {
|
|
475
|
+
...(currentFilterValues ?? {}),
|
|
476
|
+
[currentColumnProperty]: ["==", column]
|
|
477
|
+
};
|
|
500
478
|
|
|
501
479
|
accessor.count({
|
|
502
|
-
where:
|
|
480
|
+
where: whereFilter
|
|
503
481
|
}).then(count => {
|
|
504
482
|
if (isCleaningUpRef.current) return;
|
|
505
483
|
setColumnData(prev => ({
|
|
@@ -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 {
|
|
@@ -194,8 +194,8 @@ export function resolveCollectionSlotKeys(
|
|
|
194
194
|
: [...previewKeys].sort((a, b) => {
|
|
195
195
|
const propA = collection.properties[a] as Property | undefined;
|
|
196
196
|
const propB = collection.properties[b] as Property | undefined;
|
|
197
|
-
const scoreA = propA?.type === "string" ? (propA.multiline ? 2 : 1) : 0;
|
|
198
|
-
const scoreB = propB?.type === "string" ? (propB.multiline ? 2 : 1) : 0;
|
|
197
|
+
const scoreA = propA?.type === "string" ? (propA.ui?.multiline ? 2 : 1) : 0;
|
|
198
|
+
const scoreB = propB?.type === "string" ? (propB.ui?.multiline ? 2 : 1) : 0;
|
|
199
199
|
return scoreB - scoreA;
|
|
200
200
|
});
|
|
201
201
|
const subtitleKey = sortedPreviewKeys.length > 0 ? sortedPreviewKeys[0] : undefined;
|
|
@@ -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
|
|
@@ -468,7 +468,7 @@ function resolveRelationDisplayName(
|
|
|
468
468
|
|
|
469
469
|
// Helper to check if a property is a visible, non-id string
|
|
470
470
|
const isDisplayCandidate = (p: Property): boolean => {
|
|
471
|
-
return p.type === "string" && !p.multiline && !p.markdown && !p.storage
|
|
471
|
+
return p.type === "string" && !p.ui?.multiline && !p.ui?.markdown && !p.storage
|
|
472
472
|
&& !("isId" in p && p.isId) && !isHiddenProp(p);
|
|
473
473
|
};
|
|
474
474
|
|
|
@@ -178,7 +178,7 @@ function CMSNavigationContent() {
|
|
|
178
178
|
// Studio mode shows Studio dev views + admin entries (Users/Roles).
|
|
179
179
|
// Content mode shows collections, CMS custom views, and admin entries — but not Studio dev views.
|
|
180
180
|
const filteredEntries = adminModeController.mode === "studio"
|
|
181
|
-
? allNavigationEntries.filter(e => e.type === "view" || e.type === "admin")
|
|
181
|
+
? allNavigationEntries.filter(e => (e.type === "view" && studioViewSlugs.has(e.slug)) || e.type === "admin")
|
|
182
182
|
: allNavigationEntries.filter(e => e.type !== "view" || !studioViewSlugs.has(e.slug));
|
|
183
183
|
|
|
184
184
|
// Derive groups from the filtered entries, preserving the order from topLevelNavigation.groups
|
|
@@ -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}/>
|