@rebasepro/admin 0.0.1-canary.eae7889 → 0.0.1-canary.eb08332
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 -6
- package/README.md +139 -0
- package/dist/CollectionEditorDialog-DKGlYDPc.js +3630 -0
- package/dist/CollectionEditorDialog-DKGlYDPc.js.map +1 -0
- package/dist/PropertyEditView-h0N-AMCY.js +3808 -0
- package/dist/PropertyEditView-h0N-AMCY.js.map +1 -0
- package/dist/RouterCollectionsStudioView-DdEStpFk.js +192 -0
- package/dist/RouterCollectionsStudioView-DdEStpFk.js.map +1 -0
- package/dist/collection_editor/ConfigControllerProvider.d.ts +2 -11
- package/dist/collection_editor/_cms_internals.d.ts +4 -4
- package/dist/collection_editor/api/generateCollectionApi.d.ts +10 -9
- package/dist/collection_editor/extensibility_types.d.ts +135 -0
- package/dist/collection_editor/index.d.ts +6 -1
- package/dist/collection_editor/pgColumnToProperty.d.ts +3 -3
- package/dist/collection_editor/serializable_types.d.ts +370 -0
- package/dist/collection_editor/serializable_utils.d.ts +50 -0
- package/dist/collection_editor/types/collection_editor_controller.d.ts +11 -10
- package/dist/collection_editor/types/collection_inference.d.ts +2 -2
- package/dist/collection_editor/types/config_controller.d.ts +21 -14
- package/dist/collection_editor/ui/AddKanbanColumnAction.d.ts +7 -5
- package/dist/collection_editor/ui/CollectionViewHeaderAction.d.ts +7 -5
- package/dist/collection_editor/ui/EditorCollectionAction.d.ts +1 -1
- package/dist/collection_editor/ui/EditorCollectionActionStart.d.ts +1 -1
- package/dist/collection_editor/ui/EditorEntityAction.d.ts +1 -1
- package/dist/collection_editor/ui/HomePageEditorCollectionAction.d.ts +1 -1
- package/dist/collection_editor/ui/KanbanSetupAction.d.ts +7 -5
- package/dist/collection_editor/ui/MissingReferenceWidget.d.ts +1 -1
- package/dist/collection_editor/ui/NewCollectionButton.d.ts +1 -1
- package/dist/collection_editor/ui/NewCollectionCard.d.ts +1 -1
- package/dist/collection_editor/ui/PropertyAddColumnComponent.d.ts +6 -5
- package/dist/collection_editor/ui/collection_editor/AICollectionGeneratorPopover.d.ts +4 -4
- package/dist/collection_editor/ui/collection_editor/AIModifiedPathsContext.d.ts +1 -1
- package/dist/collection_editor/ui/collection_editor/CollectionDetailsForm.d.ts +7 -7
- package/dist/collection_editor/ui/collection_editor/CollectionEditorDialog.d.ts +10 -11
- package/dist/collection_editor/ui/collection_editor/CollectionEditorWelcomeView.d.ts +4 -4
- package/dist/collection_editor/ui/collection_editor/CollectionJsonImportDialog.d.ts +4 -3
- package/dist/collection_editor/ui/collection_editor/CollectionPropertiesEditorForm.d.ts +17 -7
- package/dist/collection_editor/ui/collection_editor/CollectionRLSTab.d.ts +2 -1
- package/dist/collection_editor/ui/collection_editor/CollectionRelationsTab.d.ts +2 -1
- package/dist/collection_editor/ui/collection_editor/CollectionStudioView.d.ts +14 -1
- package/dist/collection_editor/ui/collection_editor/CollectionYupValidation.d.ts +1 -9
- package/dist/collection_editor/ui/collection_editor/CollectionsStudioView.d.ts +25 -2
- package/dist/collection_editor/ui/collection_editor/DisplaySettingsForm.d.ts +4 -2
- package/dist/collection_editor/ui/collection_editor/EntityActionsEditTab.d.ts +4 -3
- package/dist/collection_editor/ui/collection_editor/EntityActionsSelectDialog.d.ts +2 -1
- package/dist/collection_editor/ui/collection_editor/EntityCustomViewsSelectDialog.d.ts +2 -1
- package/dist/collection_editor/ui/collection_editor/EnumForm.d.ts +2 -1
- package/dist/collection_editor/ui/collection_editor/GeneralSettingsForm.d.ts +8 -4
- package/dist/collection_editor/ui/collection_editor/GetCodeDialog.d.ts +4 -3
- package/dist/collection_editor/ui/collection_editor/KanbanConfigSection.d.ts +2 -1
- package/dist/collection_editor/ui/collection_editor/LayoutModeSwitch.d.ts +3 -3
- package/dist/collection_editor/ui/collection_editor/PropertyEditView.d.ts +17 -5
- package/dist/collection_editor/ui/collection_editor/PropertyFieldPreview.d.ts +2 -2
- package/dist/collection_editor/ui/collection_editor/PropertyTree.d.ts +2 -2
- package/dist/collection_editor/ui/collection_editor/RouterCollectionStudioView.d.ts +15 -0
- package/dist/collection_editor/ui/collection_editor/RouterCollectionsStudioView.d.ts +14 -0
- package/dist/collection_editor/ui/collection_editor/SubcollectionsEditTab.d.ts +8 -6
- package/dist/collection_editor/ui/collection_editor/SwitchControl.d.ts +3 -2
- package/dist/collection_editor/ui/collection_editor/ViewModeSwitch.d.ts +1 -1
- package/dist/collection_editor/ui/collection_editor/import/CollectionEditorImportDataPreview.d.ts +1 -1
- package/dist/collection_editor/ui/collection_editor/import/CollectionEditorImportMapping.d.ts +3 -2
- package/dist/collection_editor/ui/collection_editor/properties/BlockPropertyField.d.ts +2 -1
- package/dist/collection_editor/ui/collection_editor/properties/BooleanPropertyField.d.ts +2 -1
- package/dist/collection_editor/ui/collection_editor/properties/DateTimePropertyField.d.ts +2 -1
- package/dist/collection_editor/ui/collection_editor/properties/EnumPropertyField.d.ts +2 -1
- package/dist/collection_editor/ui/collection_editor/properties/KeyValuePropertyField.d.ts +2 -1
- package/dist/collection_editor/ui/collection_editor/properties/MapPropertyField.d.ts +2 -1
- package/dist/collection_editor/ui/collection_editor/properties/MarkdownPropertyField.d.ts +2 -1
- package/dist/collection_editor/ui/collection_editor/properties/NumberPropertyField.d.ts +2 -1
- package/dist/collection_editor/ui/collection_editor/properties/ReferencePropertyField.d.ts +3 -2
- package/dist/collection_editor/ui/collection_editor/properties/RelationPropertyField.d.ts +3 -8
- package/dist/collection_editor/ui/collection_editor/properties/RepeatPropertyField.d.ts +2 -1
- package/dist/collection_editor/ui/collection_editor/properties/StoragePropertyField.d.ts +2 -1
- package/dist/collection_editor/ui/collection_editor/properties/StringPropertyField.d.ts +2 -1
- package/dist/collection_editor/ui/collection_editor/properties/UrlPropertyField.d.ts +2 -1
- package/dist/collection_editor/ui/collection_editor/properties/VectorPropertyField.d.ts +4 -0
- package/dist/collection_editor/ui/collection_editor/properties/advanced/AdvancedPropertyValidation.d.ts +2 -1
- package/dist/collection_editor/ui/collection_editor/properties/conditions/ConditionsEditor.d.ts +2 -1
- package/dist/collection_editor/ui/collection_editor/properties/conditions/ConditionsPanel.d.ts +1 -1
- package/dist/collection_editor/ui/collection_editor/properties/conditions/EnumConditionsEditor.d.ts +2 -1
- package/dist/collection_editor/ui/collection_editor/properties/validation/ArrayPropertyValidation.d.ts +2 -1
- package/dist/collection_editor/ui/collection_editor/properties/validation/GeneralPropertyValidation.d.ts +2 -1
- package/dist/collection_editor/ui/collection_editor/properties/validation/NumberPropertyValidation.d.ts +2 -1
- package/dist/collection_editor/ui/collection_editor/properties/validation/StringPropertyValidation.d.ts +2 -1
- package/dist/collection_editor/ui/collection_editor/properties/validation/ValidationPanel.d.ts +1 -1
- package/dist/collection_editor/ui/collection_editor/templates/blog_template.d.ts +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/useJsonCollectionsConfigController.d.ts +37 -0
- package/dist/collection_editor/useLocalCollectionsConfigController.d.ts +2 -2
- package/dist/collection_editor/useSafeSnackbarController.d.ts +2 -0
- package/dist/collection_editor/validateCollectionJson.d.ts +2 -2
- package/dist/collection_editor_ui.d.ts +4 -0
- package/dist/collection_editor_ui.js +33 -11
- package/dist/collection_editor_ui.js.map +1 -1
- package/dist/components/ArrayContainer.d.ts +5 -5
- package/dist/components/ClearFilterSortButton.d.ts +1 -1
- package/dist/components/CollectionEditorDialogs.d.ts +2 -1
- package/dist/components/CollectionPanel.d.ts +58 -0
- package/dist/components/{EntityCollectionTable/EntityCollectionRowActions.d.ts → CollectionTableBinding/CollectionRowActions.d.ts} +5 -5
- package/dist/components/CollectionTableBinding/CollectionTableBinding.d.ts +28 -0
- package/dist/components/{EntityCollectionTable/EntityCollectionTableProps.d.ts → CollectionTableBinding/CollectionTableBindingProps.d.ts} +4 -4
- package/dist/components/{EntityCollectionTable → CollectionTableBinding}/column_utils.d.ts +2 -2
- package/dist/components/{EntityCollectionTable → CollectionTableBinding}/fields/TableMultipleRelationField.d.ts +6 -6
- package/dist/components/{EntityCollectionTable → CollectionTableBinding}/fields/TableReferenceField.d.ts +6 -6
- package/dist/components/{EntityCollectionTable → CollectionTableBinding}/fields/TableRelationField.d.ts +6 -6
- package/dist/components/{EntityCollectionTable → CollectionTableBinding}/fields/TableRelationSelectorField.d.ts +3 -2
- package/dist/components/{EntityCollectionTable → CollectionTableBinding}/fields/TableStorageUpload.d.ts +4 -4
- package/dist/components/{EntityCollectionTable → CollectionTableBinding}/fields/VirtualTableSelect.d.ts +1 -1
- package/dist/components/{EntityCollectionTable → CollectionTableBinding}/fields/VirtualTableUserSelect.d.ts +1 -1
- package/dist/components/CollectionTableBinding/index.d.ts +6 -0
- package/dist/components/{EntityCollectionTable → CollectionTableBinding}/internal/CollectionTableToolbar.d.ts +5 -1
- package/dist/components/{EntityCollectionTable → CollectionTableBinding}/internal/EntityTableCell.d.ts +3 -3
- package/dist/components/{EntityCollectionTable → CollectionTableBinding}/internal/EntityTableCellActions.d.ts +1 -1
- package/dist/components/{EntityCollectionTable → CollectionTableBinding}/internal/common.d.ts +2 -2
- package/dist/components/{EntityCollectionTable → CollectionTableBinding}/internal/popup_field/PopupFormField.d.ts +7 -6
- package/dist/components/{EntityCollectionTable → CollectionTableBinding}/table_bindings.d.ts +4 -3
- package/dist/components/CollectionViewBinding/BoardCardBinding.d.ts +31 -0
- package/dist/components/CollectionViewBinding/CollectionBoardViewBinding.d.ts +22 -0
- package/dist/components/{EntityCollectionView/EntityCollectionCardView.d.ts → CollectionViewBinding/CollectionCardViewBinding.d.ts} +5 -5
- package/dist/components/CollectionViewBinding/CollectionListViewBinding.d.ts +50 -0
- package/dist/components/CollectionViewBinding/CollectionViewActions.d.ts +20 -0
- package/dist/components/CollectionViewBinding/CollectionViewBinding.d.ts +41 -0
- package/dist/components/CollectionViewBinding/CollectionViewStartActions.d.ts +21 -0
- package/dist/components/CollectionViewBinding/EntityCardBinding.d.ts +21 -0
- package/dist/components/CollectionViewBinding/FilterPresetsButton.d.ts +22 -0
- package/dist/components/{EntityCollectionView → CollectionViewBinding}/FiltersDialog.d.ts +3 -2
- package/dist/components/{EntityCollectionView → CollectionViewBinding}/SplitListView.d.ts +6 -5
- package/dist/components/{EntityCollectionView → CollectionViewBinding}/ViewModeToggle.d.ts +2 -1
- package/dist/components/{EntityCollectionView → CollectionViewBinding}/hooks/useCollectionInlineEditor.d.ts +3 -3
- package/dist/components/{EntityCollectionView → CollectionViewBinding}/hooks/useKanbanDragAndDrop.d.ts +7 -6
- 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/DefaultAppBar.d.ts +18 -1
- package/dist/components/DefaultDrawer.d.ts +53 -5
- package/dist/components/DeleteEntityDialog.d.ts +6 -5
- package/dist/components/DetailViewBinding.d.ts +28 -0
- package/dist/components/DrawerNavigationGroup.d.ts +1 -1
- package/dist/components/DrawerNavigationItem.d.ts +1 -1
- package/dist/components/EditFormActions.d.ts +3 -0
- package/dist/components/EditViewBinding.d.ts +58 -0
- package/dist/components/{EntityPreview.d.ts → EntityPreviewBinding.d.ts} +14 -14
- package/dist/components/EntityViewBinding.d.ts +13 -0
- package/dist/components/FieldCaption.d.ts +1 -1
- package/dist/components/HomePage/ContentHomePage.d.ts +1 -1
- package/dist/components/HomePage/FavouritesView.d.ts +1 -1
- package/dist/components/HomePage/HomePageDnD.d.ts +7 -7
- package/dist/components/HomePage/NavigationCard.d.ts +1 -1
- package/dist/components/HomePage/NavigationCardBinding.d.ts +2 -1
- package/dist/components/HomePage/NavigationGroup.d.ts +2 -2
- package/dist/components/HomePage/RenameGroupDialog.d.ts +2 -1
- package/dist/components/HomePage/SmallNavigationCard.d.ts +1 -1
- package/dist/components/JsonPreviewBinding.d.ts +4 -0
- package/dist/components/PropertyCollectionView.d.ts +3 -2
- package/dist/components/PropertyIdCopyTooltip.d.ts +3 -3
- package/dist/components/{RebaseCMS.d.ts → RebaseAdmin.d.ts} +2 -2
- package/dist/components/RebaseAuthGate.d.ts +1 -1
- package/dist/components/RebaseLayout.d.ts +6 -5
- package/dist/components/RebaseNavigation.d.ts +2 -2
- package/dist/components/RebaseRouteDefs.d.ts +2 -2
- package/dist/components/RebaseShell.d.ts +2 -1
- package/dist/components/ReferenceTable/{EntitySelectionTable.d.ts → SelectionTableBinding.d.ts} +6 -6
- package/dist/components/ReferenceWidget.d.ts +3 -2
- package/dist/components/RelationSelector.d.ts +1 -1
- package/dist/components/SearchIconsView.d.ts +2 -1
- package/dist/components/SelectableTable/SelectableTable.d.ts +11 -11
- package/dist/components/SelectableTable/SelectableTableContext.d.ts +3 -3
- package/dist/components/SelectableTable/SelectionStore.d.ts +16 -22
- package/dist/components/SelectableTable/filters/BooleanFilterField.d.ts +9 -3
- package/dist/components/SelectableTable/filters/DateTimeFilterField.d.ts +10 -3
- package/dist/components/SelectableTable/filters/FilterFieldBinding.d.ts +40 -0
- package/dist/components/SelectableTable/filters/ReferenceFilterField.d.ts +10 -3
- package/dist/components/SelectableTable/filters/RelationFilterField.d.ts +8 -1
- package/dist/components/SelectableTable/filters/StringNumberFilterField.d.ts +10 -3
- package/dist/components/SideDialogs.d.ts +2 -2
- package/dist/components/SidePanelBinding.d.ts +11 -0
- package/dist/components/{SideEntityProvider.d.ts → SidePanelProvider.d.ts} +8 -8
- package/dist/components/admin/CreationResultDialog.d.ts +6 -0
- package/dist/components/admin/index.d.ts +1 -3
- package/dist/components/app/AppBar.d.ts +1 -1
- package/dist/components/app/Drawer.d.ts +9 -2
- package/dist/components/common/default_entity_actions.d.ts +8 -1
- package/dist/components/field_configs.d.ts +1 -1
- package/dist/components/history/EntityHistoryEntry.d.ts +3 -3
- package/dist/components/history/EntityHistoryView.d.ts +1 -1
- package/dist/components/history/LastEditedByFormAction.d.ts +2 -1
- package/dist/components/history/LastEditedByIndicator.d.ts +4 -3
- package/dist/components/history/UserChip.d.ts +1 -1
- package/dist/components/index.d.ts +16 -13
- package/dist/contexts/SidePanelControllerContext.d.ts +3 -0
- package/dist/data_export/export/BasicExportAction.d.ts +2 -1
- package/dist/data_export/export/ExportCollectionAction.d.ts +4 -4
- package/dist/data_export/export/export.d.ts +3 -3
- package/dist/data_import/components/DataNewPropertiesMapping.d.ts +1 -1
- package/dist/data_import/components/ImportFileUpload.d.ts +1 -1
- package/dist/data_import/components/ImportNewPropertyFieldPreview.d.ts +2 -1
- package/dist/data_import/components/ImportSaveInProgress.d.ts +3 -3
- package/dist/data_import/import/ImportCollectionAction.d.ts +4 -3
- package/dist/data_import/utils/data.d.ts +1 -1
- package/dist/data_import/utils/file_headers.d.ts +6 -1
- package/dist/data_import/utils/file_to_json.d.ts +1 -11
- package/dist/data_import/utils/transforms.d.ts +11 -0
- package/dist/editor/components/SlashCommandMenu.d.ts +2 -1
- package/dist/editor/components/editor-bubble.d.ts +5 -1
- package/dist/editor/components/image-bubble.d.ts +5 -1
- package/dist/editor/components/index.d.ts +3 -3
- package/dist/editor/components/table-bubble.d.ts +5 -1
- package/dist/editor/editor.d.ts +4 -4
- package/dist/editor/nodeViews/ReactNodeView.d.ts +4 -1
- package/dist/editor/selectors/color-selector.d.ts +1 -1
- package/dist/editor/selectors/link-selector.d.ts +1 -1
- package/dist/editor/selectors/node-selector.d.ts +1 -1
- package/dist/editor/selectors/text-buttons.d.ts +1 -1
- package/dist/editor/useProseMirror.d.ts +2 -2
- package/dist/editor/utils/remove_classes.d.ts +1 -1
- package/dist/editor.js +2625 -3569
- package/dist/editor.js.map +1 -1
- package/dist/form/EntityForm.d.ts +11 -9
- package/dist/form/EntityFormActions.d.ts +2 -1
- package/dist/form/EntityFormBinding.d.ts +27 -0
- package/dist/form/PropertyFieldBinding.d.ts +1 -1
- package/dist/form/components/FieldHelperText.d.ts +1 -1
- package/dist/form/components/FormEntry.d.ts +1 -1
- package/dist/form/components/FormLayout.d.ts +1 -1
- package/dist/form/components/LabelWithIconAndTooltip.d.ts +1 -1
- package/dist/form/components/LocalChangesMenu.d.ts +3 -2
- package/dist/form/components/StorageItemPreview.d.ts +2 -1
- package/dist/form/components/StorageUploadProgress.d.ts +10 -4
- package/dist/form/field_bindings/ArrayCustomShapedFieldBinding.d.ts +2 -1
- package/dist/form/field_bindings/ArrayOfReferencesFieldBinding.d.ts +2 -1
- package/dist/form/field_bindings/BlockFieldBinding.d.ts +2 -1
- package/dist/form/field_bindings/DateTimeFieldBinding.d.ts +2 -1
- package/dist/form/field_bindings/KeyValueFieldBinding.d.ts +2 -1
- package/dist/form/field_bindings/MapFieldBinding.d.ts +2 -1
- package/dist/form/field_bindings/MarkdownEditorFieldBinding.d.ts +4 -3
- package/dist/form/field_bindings/MultiSelectFieldBinding.d.ts +2 -1
- package/dist/form/field_bindings/MultipleRelationFieldBinding.d.ts +2 -1
- package/dist/form/field_bindings/ReadOnlyFieldBinding.d.ts +2 -1
- package/dist/form/field_bindings/ReferenceFieldBinding.d.ts +2 -1
- package/dist/form/field_bindings/RelationFieldBinding.d.ts +2 -1
- package/dist/form/field_bindings/RepeatFieldBinding.d.ts +2 -1
- package/dist/form/field_bindings/SelectFieldBinding.d.ts +2 -1
- package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +5 -4
- package/dist/form/field_bindings/SwitchFieldBinding.d.ts +2 -1
- package/dist/form/field_bindings/TextFieldBinding.d.ts +2 -1
- package/dist/form/field_bindings/UserSelectFieldBinding.d.ts +2 -1
- package/dist/form/field_bindings/VectorFieldBinding.d.ts +12 -0
- package/dist/form/form_utils.d.ts +8 -0
- package/dist/form/index.d.ts +6 -2
- package/dist/form/validation.d.ts +3 -3
- package/dist/history-C0FdqGNz.js +311 -0
- package/dist/history-C0FdqGNz.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/useAsyncResolver.d.ts +26 -0
- package/dist/hooks/navigation/useBuildCollectionRegistryController.d.ts +2 -0
- package/dist/hooks/navigation/useBuildNavigationStateController.d.ts +6 -8
- package/dist/hooks/navigation/useNavigationResolution.d.ts +6 -7
- package/dist/hooks/navigation/useResolvedCollections.d.ts +11 -7
- package/dist/hooks/navigation/useResolvedViews.d.ts +2 -5
- package/dist/hooks/navigation/useTopLevelNavigation.d.ts +3 -3
- package/dist/hooks/navigation/utils.d.ts +5 -5
- package/dist/hooks/useBreadcrumbsController.d.ts +2 -32
- 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} +2 -2
- 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 +6 -3
- package/dist/index.js +2 -799
- package/dist/markdown-CklalUUk.js +526 -0
- package/dist/markdown-CklalUUk.js.map +1 -0
- package/dist/preview/components/ArrayEnumPreview.d.ts +2 -1
- package/dist/preview/components/EmptyValue.d.ts +2 -1
- package/dist/preview/components/EnumValuesChip.d.ts +1 -1
- package/dist/preview/components/ImagePreview.d.ts +2 -1
- package/dist/preview/components/ReferencePreview.d.ts +2 -1
- package/dist/preview/components/RelationPreview.d.ts +2 -1
- package/dist/preview/components/StorageThumbnail.d.ts +3 -1
- package/dist/preview/components/UrlComponentPreview.d.ts +1 -0
- package/dist/preview/components/UserPreview.d.ts +6 -3
- package/dist/preview/property_previews/ArrayOfMapsPreview.d.ts +2 -1
- package/dist/preview/property_previews/ArrayOfReferencesPreview.d.ts +1 -1
- package/dist/preview/property_previews/ArrayOfRelationsPreview.d.ts +1 -1
- package/dist/preview/property_previews/ArrayOfStorageComponentsPreview.d.ts +2 -1
- package/dist/preview/property_previews/ArrayOfStringsPreview.d.ts +2 -1
- package/dist/preview/property_previews/ArrayOneOfPreview.d.ts +2 -1
- package/dist/preview/property_previews/ArrayPropertyEnumPreview.d.ts +1 -1
- package/dist/preview/property_previews/ArrayPropertyPreview.d.ts +2 -1
- package/dist/preview/property_previews/MapPropertyPreview.d.ts +3 -2
- package/dist/preview/property_previews/SkeletonPropertyComponent.d.ts +5 -4
- package/dist/rolldown-runtime-D7D4PA-g.js +13 -0
- package/dist/routes/CustomViewRoute.d.ts +2 -1
- package/dist/routes/RebaseRoute.d.ts +1 -1
- package/dist/src-DLAFyeZI.js +24222 -0
- package/dist/src-DLAFyeZI.js.map +1 -0
- package/dist/types/components/EntityFormActionsProps.d.ts +4 -4
- package/dist/types/components/EntityFormProps.d.ts +65 -5
- package/dist/types/components/PropertyPreviewProps.d.ts +6 -1
- package/dist/types/components/formex.d.ts +1 -40
- package/dist/types/fields.d.ts +23 -12
- package/dist/util/dataControllerAdapter.d.ts +27 -0
- package/dist/util/navigation_utils.d.ts +16 -6
- package/dist/util/previews.d.ts +8 -3
- package/dist/util/propertyConfigMapper.d.ts +17 -0
- package/dist/util/property_utils.d.ts +3 -3
- package/dist/util/resolutions.d.ts +1 -2
- package/dist/util/view_constants.d.ts +6 -0
- package/package.json +56 -55
- package/src/collection_editor/ConfigControllerProvider.tsx +37 -53
- package/src/collection_editor/_cms_internals.ts +4 -4
- package/src/collection_editor/api/generateCollectionApi.ts +10 -9
- package/src/collection_editor/extensibility_types.ts +168 -0
- package/src/collection_editor/index.ts +47 -3
- package/src/collection_editor/pgColumnToProperty.ts +23 -6
- package/src/collection_editor/serializable_types.ts +474 -0
- package/src/collection_editor/serializable_utils.ts +576 -0
- package/src/collection_editor/types/collection_editor_controller.tsx +8 -11
- package/src/collection_editor/types/collection_inference.ts +2 -2
- package/src/collection_editor/types/config_controller.tsx +14 -14
- package/src/collection_editor/ui/AddKanbanColumnAction.tsx +21 -9
- package/src/collection_editor/ui/CollectionViewHeaderAction.tsx +8 -8
- package/src/collection_editor/ui/EditorCollectionAction.tsx +9 -14
- package/src/collection_editor/ui/EditorCollectionActionStart.tsx +13 -18
- package/src/collection_editor/ui/EditorEntityAction.tsx +9 -14
- package/src/collection_editor/ui/HomePageEditorCollectionAction.tsx +13 -19
- package/src/collection_editor/ui/KanbanSetupAction.tsx +8 -6
- package/src/collection_editor/ui/MissingReferenceWidget.tsx +5 -3
- package/src/collection_editor/ui/NewCollectionButton.tsx +4 -4
- package/src/collection_editor/ui/NewCollectionCard.tsx +8 -13
- package/src/collection_editor/ui/PropertyAddColumnComponent.tsx +11 -16
- package/src/collection_editor/ui/collection_editor/AICollectionGeneratorPopover.tsx +20 -12
- package/src/collection_editor/ui/collection_editor/CollectionDetailsForm.tsx +29 -59
- package/src/collection_editor/ui/collection_editor/CollectionEditorDialog.tsx +213 -135
- package/src/collection_editor/ui/collection_editor/CollectionEditorWelcomeView.tsx +21 -7
- package/src/collection_editor/ui/collection_editor/CollectionJsonImportDialog.tsx +29 -23
- package/src/collection_editor/ui/collection_editor/CollectionPropertiesEditorForm.tsx +142 -112
- package/src/collection_editor/ui/collection_editor/CollectionRLSTab.tsx +49 -12
- package/src/collection_editor/ui/collection_editor/CollectionRelationsTab.tsx +29 -10
- package/src/collection_editor/ui/collection_editor/CollectionStudioView.tsx +26 -23
- package/src/collection_editor/ui/collection_editor/CollectionsStudioView.tsx +104 -37
- package/src/collection_editor/ui/collection_editor/DisplaySettingsForm.tsx +26 -14
- package/src/collection_editor/ui/collection_editor/EntityActionsEditTab.tsx +21 -8
- package/src/collection_editor/ui/collection_editor/EntityActionsSelectDialog.tsx +1 -1
- package/src/collection_editor/ui/collection_editor/EntityCustomViewsSelectDialog.tsx +1 -1
- package/src/collection_editor/ui/collection_editor/EnumForm.tsx +20 -5
- package/src/collection_editor/ui/collection_editor/GeneralSettingsForm.tsx +45 -12
- package/src/collection_editor/ui/collection_editor/GetCodeDialog.tsx +10 -12
- package/src/collection_editor/ui/collection_editor/KanbanConfigSection.tsx +5 -6
- package/src/collection_editor/ui/collection_editor/LayoutModeSwitch.tsx +17 -5
- package/src/collection_editor/ui/collection_editor/PropertyEditView.tsx +190 -27
- package/src/collection_editor/ui/collection_editor/PropertyFieldPreview.tsx +58 -49
- package/src/collection_editor/ui/collection_editor/PropertyTree.tsx +17 -4
- package/src/collection_editor/ui/collection_editor/RouterCollectionStudioView.tsx +44 -0
- package/src/collection_editor/ui/collection_editor/RouterCollectionsStudioView.tsx +41 -0
- package/src/collection_editor/ui/collection_editor/SubcollectionsEditTab.tsx +27 -13
- package/src/collection_editor/ui/collection_editor/SwitchControl.tsx +1 -1
- package/src/collection_editor/ui/collection_editor/ViewModeSwitch.tsx +9 -2
- package/src/collection_editor/ui/collection_editor/import/CollectionEditorImportDataPreview.tsx +4 -4
- package/src/collection_editor/ui/collection_editor/import/CollectionEditorImportMapping.tsx +4 -4
- package/src/collection_editor/ui/collection_editor/properties/BlockPropertyField.tsx +5 -6
- package/src/collection_editor/ui/collection_editor/properties/BooleanPropertyField.tsx +1 -1
- package/src/collection_editor/ui/collection_editor/properties/CommonPropertyFields.tsx +5 -5
- package/src/collection_editor/ui/collection_editor/properties/DateTimePropertyField.tsx +10 -10
- package/src/collection_editor/ui/collection_editor/properties/EnumPropertyField.tsx +10 -9
- package/src/collection_editor/ui/collection_editor/properties/MapPropertyField.tsx +7 -8
- package/src/collection_editor/ui/collection_editor/properties/MarkdownPropertyField.tsx +17 -10
- package/src/collection_editor/ui/collection_editor/properties/NumberPropertyField.tsx +7 -7
- package/src/collection_editor/ui/collection_editor/properties/ReferencePropertyField.tsx +19 -53
- package/src/collection_editor/ui/collection_editor/properties/RelationPropertyField.tsx +43 -60
- package/src/collection_editor/ui/collection_editor/properties/RepeatPropertyField.tsx +3 -3
- package/src/collection_editor/ui/collection_editor/properties/StoragePropertyField.tsx +56 -13
- package/src/collection_editor/ui/collection_editor/properties/StringPropertyField.tsx +7 -7
- package/src/collection_editor/ui/collection_editor/properties/UrlPropertyField.tsx +4 -3
- package/src/collection_editor/ui/collection_editor/properties/VectorPropertyField.tsx +34 -0
- package/src/collection_editor/ui/collection_editor/properties/advanced/AdvancedPropertyValidation.tsx +5 -6
- package/src/collection_editor/ui/collection_editor/properties/conditions/ConditionsEditor.tsx +18 -9
- package/src/collection_editor/ui/collection_editor/properties/conditions/ConditionsPanel.tsx +1 -2
- package/src/collection_editor/ui/collection_editor/properties/conditions/EnumConditionsEditor.tsx +17 -5
- package/src/collection_editor/ui/collection_editor/properties/conditions/property_paths.ts +1 -1
- package/src/collection_editor/ui/collection_editor/properties/validation/ArrayPropertyValidation.tsx +4 -4
- package/src/collection_editor/ui/collection_editor/properties/validation/GeneralPropertyValidation.tsx +3 -3
- package/src/collection_editor/ui/collection_editor/properties/validation/NumberPropertyValidation.tsx +6 -9
- package/src/collection_editor/ui/collection_editor/properties/validation/StringPropertyValidation.tsx +6 -6
- package/src/collection_editor/ui/collection_editor/properties/validation/ValidationPanel.tsx +1 -2
- package/src/collection_editor/ui/collection_editor/templates/blog_template.ts +3 -3
- package/src/collection_editor/ui/collection_editor/templates/pages_template.ts +3 -3
- package/src/collection_editor/ui/collection_editor/templates/products_template.ts +4 -4
- package/src/collection_editor/ui/collection_editor/templates/users_template.ts +2 -2
- package/src/collection_editor/ui/collection_editor/utils/supported_fields.tsx +0 -1
- package/src/collection_editor/ui/collection_editor/utils/update_property_for_widget.ts +7 -29
- package/src/collection_editor/useJsonCollectionsConfigController.tsx +286 -0
- package/src/collection_editor/useLocalCollectionsConfigController.tsx +11 -8
- package/src/collection_editor/useSafeSnackbarController.ts +9 -0
- package/src/collection_editor/validateCollectionJson.ts +111 -24
- package/src/collection_editor_ui.ts +6 -0
- package/src/components/AdminModeSyncer.tsx +2 -2
- package/src/components/ArrayContainer.tsx +28 -24
- package/src/components/ClearFilterSortButton.tsx +2 -3
- package/src/components/CollectionEditorDialogs.tsx +1 -1
- package/src/components/CollectionPanel.tsx +178 -0
- package/src/components/{EntityCollectionTable/EntityCollectionRowActions.tsx → CollectionTableBinding/CollectionRowActions.tsx} +26 -16
- package/src/components/{EntityCollectionTable/EntityCollectionTable.tsx → CollectionTableBinding/CollectionTableBinding.tsx} +34 -31
- package/src/components/{EntityCollectionTable/EntityCollectionTableProps.tsx → CollectionTableBinding/CollectionTableBindingProps.tsx} +4 -4
- package/src/components/{EntityCollectionTable → CollectionTableBinding}/PropertyTableCell.tsx +14 -12
- package/src/components/{EntityCollectionTable → CollectionTableBinding}/column_utils.tsx +4 -4
- package/src/components/{EntityCollectionTable → CollectionTableBinding}/fields/TableMultipleRelationField.tsx +13 -13
- package/src/components/{EntityCollectionTable → CollectionTableBinding}/fields/TableReferenceField.tsx +39 -19
- package/src/components/{EntityCollectionTable → CollectionTableBinding}/fields/TableRelationField.tsx +14 -14
- package/src/components/{EntityCollectionTable → CollectionTableBinding}/fields/TableRelationSelectorField.tsx +3 -3
- package/src/components/{EntityCollectionTable → CollectionTableBinding}/fields/TableStorageUpload.tsx +29 -27
- package/src/components/{EntityCollectionTable → CollectionTableBinding}/fields/VirtualTableSelect.tsx +0 -1
- package/src/components/CollectionTableBinding/index.tsx +14 -0
- package/src/components/{EntityCollectionTable → CollectionTableBinding}/internal/CollectionTableToolbar.tsx +22 -28
- package/src/components/{EntityCollectionTable → CollectionTableBinding}/internal/EntityTableCell.tsx +8 -9
- package/src/components/{EntityCollectionTable → CollectionTableBinding}/internal/EntityTableCellActions.tsx +2 -3
- package/src/components/{EntityCollectionTable → CollectionTableBinding}/internal/common.tsx +7 -7
- package/src/components/{EntityCollectionTable → CollectionTableBinding}/internal/popup_field/PopupFormField.tsx +12 -13
- package/src/components/{EntityCollectionTable → CollectionTableBinding}/internal/popup_field/useDraggable.tsx +5 -2
- package/src/components/{EntityCollectionTable → CollectionTableBinding}/table_bindings.tsx +101 -104
- package/src/components/{EntityCollectionView/EntityBoardCard.tsx → CollectionViewBinding/BoardCardBinding.tsx} +39 -40
- package/src/components/{EntityCollectionView/EntityCollectionBoardView.tsx → CollectionViewBinding/CollectionBoardViewBinding.tsx} +88 -52
- package/src/components/CollectionViewBinding/CollectionCardViewBinding.tsx +157 -0
- package/src/components/{EntityCollectionView/EntityCollectionListView.tsx → CollectionViewBinding/CollectionListViewBinding.tsx} +234 -151
- package/src/components/{EntityCollectionView/EntityCollectionViewActions.tsx → CollectionViewBinding/CollectionViewActions.tsx} +36 -26
- package/src/components/{EntityCollectionView/EntityCollectionView.tsx → CollectionViewBinding/CollectionViewBinding.tsx} +392 -213
- package/src/components/{EntityCollectionView/EntityCollectionViewStartActions.tsx → CollectionViewBinding/CollectionViewStartActions.tsx} +42 -23
- package/src/components/{EntityCollectionView/EntityCard.tsx → CollectionViewBinding/EntityCardBinding.tsx} +14 -14
- package/src/components/CollectionViewBinding/FilterPresetsButton.tsx +294 -0
- package/src/components/{EntityCollectionView → CollectionViewBinding}/FiltersDialog.tsx +37 -79
- package/src/components/{EntityCollectionView → CollectionViewBinding}/SplitListView.tsx +97 -30
- package/src/components/{EntityCollectionView → CollectionViewBinding}/ViewModeToggle.tsx +20 -8
- package/src/components/{EntityCollectionView → CollectionViewBinding}/hooks/useCollectionInlineEditor.ts +9 -8
- package/src/components/{EntityCollectionView → CollectionViewBinding}/hooks/useKanbanDragAndDrop.ts +17 -16
- package/src/components/{EntityCollectionView → CollectionViewBinding}/useBoardDataController.tsx +118 -70
- package/src/components/{EntityCollectionView/useEntityPreviewSlots.ts → CollectionViewBinding/usePreviewSlots.ts} +136 -48
- package/src/components/DefaultAppBar.tsx +73 -41
- package/src/components/DefaultDrawer.tsx +317 -85
- package/src/components/DeleteEntityDialog.tsx +7 -7
- package/src/components/DetailViewBinding.tsx +670 -0
- package/src/components/DrawerNavigationGroup.tsx +11 -11
- package/src/components/DrawerNavigationItem.tsx +6 -6
- package/src/components/{EntityEditViewFormActions.tsx → EditFormActions.tsx} +78 -59
- package/src/components/EditViewBinding.tsx +761 -0
- package/src/components/{EntityPreview.tsx → EntityPreviewBinding.tsx} +53 -39
- package/src/components/{EntityView.tsx → EntityViewBinding.tsx} +8 -9
- package/src/components/HomePage/ContentHomePage.tsx +35 -17
- package/src/components/HomePage/FavouritesView.tsx +2 -3
- package/src/components/HomePage/HomePageDnD.tsx +3 -2
- package/src/components/HomePage/NavigationCard.tsx +9 -16
- package/src/components/HomePage/NavigationCardBinding.tsx +6 -7
- package/src/components/HomePage/NavigationGroup.tsx +4 -5
- package/src/components/HomePage/RenameGroupDialog.tsx +1 -1
- package/src/components/HomePage/SmallNavigationCard.tsx +0 -5
- package/src/components/{EntityJsonPreview.tsx → JsonPreviewBinding.tsx} +2 -2
- package/src/components/PropertyCollectionView.tsx +2 -1
- package/src/components/PropertyIdCopyTooltip.tsx +2 -3
- package/src/components/{RebaseCMS.tsx → RebaseAdmin.tsx} +8 -6
- package/src/components/RebaseAuthGate.tsx +5 -3
- package/src/components/RebaseLayout.tsx +10 -9
- package/src/components/RebaseNavigation.tsx +107 -31
- package/src/components/RebaseRouteDefs.tsx +10 -13
- package/src/components/RebaseShell.tsx +18 -14
- package/src/components/ReferenceTable/{EntitySelectionTable.tsx → SelectionTableBinding.tsx} +40 -33
- package/src/components/ReferenceWidget.tsx +7 -7
- package/src/components/RelationSelector.tsx +82 -24
- package/src/components/SearchIconsView.tsx +13 -12
- package/src/components/SelectableTable/SelectableTable.tsx +68 -115
- package/src/components/SelectableTable/SelectableTableContext.tsx +4 -3
- package/src/components/SelectableTable/SelectionStore.ts +20 -44
- package/src/components/SelectableTable/filters/BooleanFilterField.tsx +13 -5
- package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +37 -16
- package/src/components/SelectableTable/filters/FilterFieldBinding.tsx +187 -0
- package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +27 -13
- package/src/components/SelectableTable/filters/RelationFilterField.tsx +17 -3
- package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +95 -35
- package/src/components/SideDialogs.tsx +58 -40
- package/src/components/SidePanelBinding.tsx +261 -0
- package/src/components/{SideEntityProvider.tsx → SidePanelProvider.tsx} +17 -16
- package/src/components/UserSelector.tsx +123 -9
- package/src/components/admin/CreationResultDialog.tsx +138 -0
- package/src/components/admin/index.ts +1 -3
- package/src/components/app/Drawer.tsx +9 -1
- package/src/components/app/Scaffold.tsx +16 -9
- package/src/components/common/default_entity_actions.tsx +270 -29
- package/src/components/field_configs.tsx +68 -46
- package/src/components/history/EntityHistoryEntry.tsx +4 -5
- package/src/components/history/EntityHistoryView.tsx +18 -8
- package/src/components/history/LastEditedByIndicator.tsx +4 -4
- package/src/components/index.ts +20 -17
- package/src/contexts/BreacrumbsContext.tsx +15 -6
- package/src/contexts/SidePanelControllerContext.tsx +5 -0
- package/src/data_export/export/BasicExportAction.tsx +42 -43
- package/src/data_export/export/ExportCollectionAction.tsx +55 -54
- package/src/data_export/export/export.ts +17 -17
- package/src/data_import/components/DataNewPropertiesMapping.tsx +17 -4
- package/src/data_import/components/ImportFileUpload.tsx +2 -3
- package/src/data_import/components/ImportNewPropertyFieldPreview.tsx +2 -3
- package/src/data_import/components/ImportSaveInProgress.tsx +4 -4
- package/src/data_import/import/ImportCollectionAction.tsx +26 -13
- package/src/data_import/utils/data.ts +26 -8
- package/src/data_import/utils/file_headers.ts +13 -89
- package/src/data_import/utils/file_to_json.ts +43 -68
- package/src/data_import/utils/get_properties_mapping.ts +1 -1
- package/src/data_import/utils/transforms.ts +47 -0
- package/src/editor/components/SlashCommandMenu.tsx +17 -2
- package/src/editor/components/editor-bubble-item.tsx +1 -1
- package/src/editor/components/editor-bubble.tsx +32 -9
- package/src/editor/components/image-bubble.tsx +28 -12
- package/src/editor/components/index.ts +3 -3
- package/src/editor/components/table-bubble.tsx +80 -18
- package/src/editor/editor.tsx +34 -15
- package/src/editor/extensions/HighlightDecorationExtension.ts +3 -2
- package/src/editor/extensions/Image/index.ts +3 -3
- package/src/editor/extensions/Image.ts +3 -3
- package/src/editor/extensions/clipboard.ts +2 -2
- package/src/editor/markdown-it-plugins.d.ts +24 -0
- package/src/editor/markdown.ts +2 -3
- package/src/editor/nodeViews/ReactNodeView.tsx +1 -1
- package/src/editor/nodeViews/TaskItemComponent.tsx +9 -8
- package/src/editor/schema.ts +135 -59
- package/src/editor/selectors/ai-selector.tsx +0 -1
- package/src/editor/selectors/color-selector.tsx +1 -2
- package/src/editor/selectors/link-selector.tsx +9 -7
- package/src/editor/selectors/node-selector.tsx +17 -3
- package/src/editor/selectors/text-buttons.tsx +1 -2
- package/src/editor/useProseMirror.ts +2 -2
- package/src/editor/utils/prosemirror-utils.ts +1 -1
- package/src/editor/utils/remove_classes.ts +6 -5
- package/src/form/EntityForm.tsx +222 -442
- package/src/form/EntityFormActions.tsx +49 -55
- package/src/form/EntityFormBinding.tsx +323 -0
- package/src/form/PropertyFieldBinding.tsx +81 -84
- package/src/form/components/ErrorFocus.tsx +1 -1
- package/src/form/components/FieldHelperText.tsx +6 -7
- package/src/form/components/FormLayout.tsx +1 -1
- package/src/form/components/LocalChangesMenu.tsx +20 -5
- package/src/form/components/StorageItemPreview.tsx +2 -3
- package/src/form/components/StorageUploadProgress.tsx +14 -7
- package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +5 -5
- package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +12 -13
- package/src/form/field_bindings/BlockFieldBinding.tsx +59 -58
- package/src/form/field_bindings/DateTimeFieldBinding.tsx +2 -2
- package/src/form/field_bindings/KeyValueFieldBinding.tsx +319 -303
- package/src/form/field_bindings/MapFieldBinding.tsx +14 -56
- package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +28 -10
- package/src/form/field_bindings/MultiSelectFieldBinding.tsx +3 -4
- package/src/form/field_bindings/MultipleRelationFieldBinding.tsx +11 -12
- package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +9 -2
- package/src/form/field_bindings/ReferenceFieldBinding.tsx +17 -15
- package/src/form/field_bindings/RelationFieldBinding.tsx +157 -156
- package/src/form/field_bindings/RepeatFieldBinding.tsx +8 -8
- package/src/form/field_bindings/SelectFieldBinding.tsx +3 -4
- package/src/form/field_bindings/StorageUploadFieldBinding.tsx +107 -103
- package/src/form/field_bindings/SwitchFieldBinding.tsx +17 -17
- package/src/form/field_bindings/TextFieldBinding.tsx +90 -78
- package/src/form/field_bindings/UserSelectFieldBinding.tsx +18 -18
- package/src/form/field_bindings/VectorFieldBinding.tsx +202 -0
- package/src/form/form_utils.ts +163 -0
- package/src/form/index.tsx +15 -6
- package/src/form/useClearRestoreValue.tsx +1 -1
- package/src/form/validation.ts +104 -50
- package/src/hooks/index.ts +4 -4
- package/src/hooks/navigation/contexts/CollectionRegistryContext.tsx +5 -4
- package/src/hooks/navigation/contexts/NavigationStateContext.tsx +2 -2
- package/src/hooks/navigation/contexts/UrlContext.tsx +1 -2
- package/src/hooks/navigation/useAsyncResolver.ts +100 -0
- package/src/hooks/navigation/useBuildCollectionRegistryController.tsx +40 -21
- package/src/hooks/navigation/useBuildNavigationStateController.tsx +21 -22
- package/src/hooks/navigation/useNavigationResolution.ts +193 -21
- package/src/hooks/navigation/useResolvedCollections.ts +45 -77
- package/src/hooks/navigation/useResolvedViews.tsx +44 -123
- package/src/hooks/navigation/useTopLevelNavigation.ts +22 -18
- package/src/hooks/navigation/utils.ts +12 -9
- package/src/hooks/useBreadcrumbsController.tsx +2 -34
- package/src/hooks/{useBuildSideEntityController.tsx → useBuildSidePanel.tsx} +63 -24
- package/src/hooks/useCMSContext.tsx +7 -7
- package/src/hooks/{useEntityHistory.ts → useHistory.ts} +9 -4
- 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 +34 -20
- package/src/preview/PropertyPreview.tsx +34 -41
- package/src/preview/components/DatePreview.tsx +1 -1
- package/src/preview/components/EnumValuesChip.tsx +1 -1
- package/src/preview/components/ImagePreview.tsx +4 -3
- package/src/preview/components/ReferencePreview.tsx +69 -18
- package/src/preview/components/RelationPreview.tsx +107 -18
- package/src/preview/components/StorageThumbnail.tsx +28 -8
- package/src/preview/components/UrlComponentPreview.tsx +12 -4
- package/src/preview/components/UserPreview.tsx +6 -15
- package/src/preview/property_previews/ArrayOfMapsPreview.tsx +5 -5
- package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +5 -5
- package/src/preview/property_previews/ArrayOfRelationsPreview.tsx +4 -4
- package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +4 -4
- package/src/preview/property_previews/ArrayOfStringsPreview.tsx +3 -2
- package/src/preview/property_previews/ArrayOneOfPreview.tsx +7 -9
- package/src/preview/property_previews/ArrayPropertyEnumPreview.tsx +1 -1
- package/src/preview/property_previews/ArrayPropertyPreview.tsx +4 -4
- package/src/preview/property_previews/MapPropertyPreview.tsx +4 -3
- package/src/preview/property_previews/NumberPropertyPreview.tsx +5 -3
- package/src/preview/property_previews/SkeletonPropertyComponent.tsx +24 -25
- package/src/preview/property_previews/StringPropertyPreview.tsx +13 -11
- package/src/routes/CustomViewRoute.tsx +14 -6
- package/src/routes/RebaseRoute.tsx +112 -36
- package/src/types/components/EntityFormActionsProps.tsx +4 -4
- package/src/types/components/EntityFormProps.tsx +75 -5
- package/src/types/components/PropertyPreviewProps.tsx +6 -1
- package/src/types/components/formex.tsx +1 -45
- package/src/types/fields.tsx +26 -15
- package/src/util/dataControllerAdapter.ts +87 -0
- package/src/util/navigation_utils.ts +43 -13
- package/src/util/previews.ts +149 -13
- package/src/util/propertyConfigMapper.ts +134 -0
- package/src/util/property_utils.tsx +24 -9
- package/src/util/resolutions.ts +4 -8
- package/src/util/view_constants.ts +6 -0
- package/dist/CollectionEditorDialog-B2M9lCyL.js +0 -4720
- package/dist/CollectionEditorDialog-B2M9lCyL.js.map +0 -1
- package/dist/CollectionsStudioView-WG6soyfs.js +0 -218
- package/dist/CollectionsStudioView-WG6soyfs.js.map +0 -1
- package/dist/ContentHomePage-CDF_a6Lp.js +0 -1786
- package/dist/ContentHomePage-CDF_a6Lp.js.map +0 -1
- package/dist/ExportCollectionAction-Dc0VOWMN.js +0 -439
- package/dist/ExportCollectionAction-Dc0VOWMN.js.map +0 -1
- package/dist/ImportCollectionAction-DpCagAOy.js +0 -686
- package/dist/ImportCollectionAction-DpCagAOy.js.map +0 -1
- package/dist/PropertyEditView-DS67DxoT.js +0 -8138
- package/dist/PropertyEditView-DS67DxoT.js.map +0 -1
- package/dist/RoleChip-QtUFXeTp.js +0 -67
- package/dist/RoleChip-QtUFXeTp.js.map +0 -1
- package/dist/RolesView-CIuYBimF.js +0 -424
- package/dist/RolesView-CIuYBimF.js.map +0 -1
- package/dist/UsersView-B5zelXnH.js +0 -493
- package/dist/UsersView-B5zelXnH.js.map +0 -1
- package/dist/collection_editor/types/config_permissions.d.ts +0 -19
- package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +0 -27
- package/dist/components/EntityCollectionTable/fields/VirtualTableDateField.d.ts +0 -12
- package/dist/components/EntityCollectionTable/fields/VirtualTableInput.d.ts +0 -9
- package/dist/components/EntityCollectionTable/fields/VirtualTableNumberInput.d.ts +0 -8
- package/dist/components/EntityCollectionTable/fields/VirtualTableSwitch.d.ts +0 -7
- package/dist/components/EntityCollectionTable/index.d.ts +0 -6
- package/dist/components/EntityCollectionView/Board.d.ts +0 -2
- package/dist/components/EntityCollectionView/BoardColumn.d.ts +0 -42
- package/dist/components/EntityCollectionView/BoardColumnTitle.d.ts +0 -9
- package/dist/components/EntityCollectionView/BoardSortableList.d.ts +0 -14
- package/dist/components/EntityCollectionView/EntityBoardCard.d.ts +0 -31
- package/dist/components/EntityCollectionView/EntityCard.d.ts +0 -20
- package/dist/components/EntityCollectionView/EntityCollectionBoardView.d.ts +0 -21
- package/dist/components/EntityCollectionView/EntityCollectionListView.d.ts +0 -34
- package/dist/components/EntityCollectionView/EntityCollectionView.d.ts +0 -64
- package/dist/components/EntityCollectionView/EntityCollectionViewActions.d.ts +0 -18
- package/dist/components/EntityCollectionView/EntityCollectionViewStartActions.d.ts +0 -18
- package/dist/components/EntityCollectionView/board_types.d.ts +0 -105
- package/dist/components/EntityEditView.d.ts +0 -49
- package/dist/components/EntityEditViewFormActions.d.ts +0 -2
- package/dist/components/EntityJsonPreview.d.ts +0 -3
- package/dist/components/EntitySidePanel.d.ts +0 -10
- package/dist/components/EntityView.d.ts +0 -12
- package/dist/components/admin/RoleChip.d.ts +0 -4
- package/dist/components/admin/RolesView.d.ts +0 -4
- package/dist/components/admin/UsersView.d.ts +0 -4
- package/dist/contexts/SideEntityControllerContext.d.ts +0 -3
- package/dist/form/field_bindings/ReferenceAsStringFieldBinding.d.ts +0 -10
- package/dist/hooks/navigation/useNavigationRegistry.d.ts +0 -11
- package/dist/hooks/navigation/useNavigationURLs.d.ts +0 -11
- package/dist/hooks/useBuildSideEntityController.d.ts +0 -6
- package/dist/hooks/useSideEntityController.d.ts +0 -11
- package/dist/index-CBhrgpR7.js +0 -12
- package/dist/index-CBhrgpR7.js.map +0 -1
- package/dist/index-CHxgwt6E.js +0 -456
- package/dist/index-CHxgwt6E.js.map +0 -1
- package/dist/index-Dey5WJpO.js +0 -8
- package/dist/index-Dey5WJpO.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/markdown-z2Ir7Cgo.js +0 -618
- package/dist/markdown-z2Ir7Cgo.js.map +0 -1
- package/dist/useEntityHistory-Dcj4zhGj.js +0 -121
- package/dist/useEntityHistory-Dcj4zhGj.js.map +0 -1
- package/dist/util-BQ82ySL3.js +0 -27720
- package/dist/util-BQ82ySL3.js.map +0 -1
- package/src/collection_editor/types/config_permissions.ts +0 -20
- 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 -80
- package/src/components/EntityCollectionTable/fields/VirtualTableSwitch.tsx +0 -32
- package/src/components/EntityCollectionTable/index.tsx +0 -14
- package/src/components/EntityCollectionView/Board.tsx +0 -474
- package/src/components/EntityCollectionView/BoardColumn.tsx +0 -158
- package/src/components/EntityCollectionView/BoardColumnTitle.tsx +0 -45
- package/src/components/EntityCollectionView/BoardSortableList.tsx +0 -177
- package/src/components/EntityCollectionView/EntityCollectionCardView.tsx +0 -267
- package/src/components/EntityCollectionView/board_types.ts +0 -113
- package/src/components/EntityEditView.tsx +0 -632
- package/src/components/EntitySidePanel.tsx +0 -160
- package/src/components/admin/RoleChip.tsx +0 -23
- package/src/components/admin/RolesView.tsx +0 -419
- package/src/components/admin/UsersView.tsx +0 -782
- package/src/contexts/SideEntityControllerContext.tsx +0 -5
- package/src/form/field_bindings/ReferenceAsStringFieldBinding.tsx +0 -141
- package/src/hooks/navigation/useNavigationRegistry.ts +0 -153
- package/src/hooks/navigation/useNavigationURLs.ts +0 -56
- package/src/hooks/useSideEntityController.tsx +0 -13
- /package/dist/components/{EntityCollectionTable → CollectionTableBinding}/PropertyTableCell.d.ts +0 -0
- /package/dist/components/{EntityCollectionTable → CollectionTableBinding}/internal/popup_field/useDraggable.d.ts +0 -0
- /package/dist/components/{EntityCollectionTable → CollectionTableBinding}/internal/popup_field/useWindowSize.d.ts +0 -0
- /package/dist/components/{EntityCollectionView → CollectionViewBinding}/useSelectionController.d.ts +0 -0
- /package/dist/components/{EntityCollectionView → CollectionViewBinding}/utils.d.ts +0 -0
- /package/src/components/{EntityCollectionTable → CollectionTableBinding}/fields/VirtualTableUserSelect.tsx +0 -0
- /package/src/components/{EntityCollectionTable → CollectionTableBinding}/internal/popup_field/useWindowSize.tsx +0 -0
- /package/src/components/{EntityCollectionView → CollectionViewBinding}/useSelectionController.tsx +0 -0
- /package/src/components/{EntityCollectionView → CollectionViewBinding}/utils.ts +0 -0
package/src/components/{EntityCollectionView → CollectionViewBinding}/useBoardDataController.tsx
RENAMED
|
@@ -1,10 +1,30 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
1
|
+
import type { CollectionConfig } from "@rebasepro/types";
|
|
3
2
|
import { Entity, FilterValues } from "@rebasepro/types";
|
|
4
|
-
import {
|
|
3
|
+
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
4
|
+
import { useData, useRebaseContext } from "@rebasepro/app";
|
|
5
5
|
|
|
6
6
|
const DEFAULT_PAGE_SIZE = 20;
|
|
7
7
|
|
|
8
|
+
/**
|
|
9
|
+
* Shallow equality for entity value records.
|
|
10
|
+
* Handles primitives and reference equality for nested values.
|
|
11
|
+
* Avoids JSON.stringify allocation on every comparison.
|
|
12
|
+
*/
|
|
13
|
+
function shallowEqualValues(
|
|
14
|
+
a: Record<string, unknown> | undefined,
|
|
15
|
+
b: Record<string, unknown> | undefined
|
|
16
|
+
): boolean {
|
|
17
|
+
if (a === b) return true;
|
|
18
|
+
if (!a || !b) return false;
|
|
19
|
+
const keysA = Object.keys(a);
|
|
20
|
+
const keysB = Object.keys(b);
|
|
21
|
+
if (keysA.length !== keysB.length) return false;
|
|
22
|
+
for (const key of keysA) {
|
|
23
|
+
if (a[key] !== b[key]) return false;
|
|
24
|
+
}
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
|
|
8
28
|
/**
|
|
9
29
|
* Data state for a single board column
|
|
10
30
|
*/
|
|
@@ -47,7 +67,7 @@ export interface UseBoardDataControllerProps<M extends Record<string, unknown> =
|
|
|
47
67
|
/** Full path to the collection */
|
|
48
68
|
fullPath: string;
|
|
49
69
|
/** The entity collection configuration */
|
|
50
|
-
collection:
|
|
70
|
+
collection: CollectionConfig<M>;
|
|
51
71
|
/** Property key used for column assignment */
|
|
52
72
|
columnProperty: string;
|
|
53
73
|
/** Array of column values (enum values from columnProperty) */
|
|
@@ -159,6 +179,34 @@ export function useBoardDataController<M extends Record<string, unknown> = any,
|
|
|
159
179
|
};
|
|
160
180
|
}, []);
|
|
161
181
|
|
|
182
|
+
/**
|
|
183
|
+
* Check if a column value is excluded by the active filter on the columnProperty.
|
|
184
|
+
* E.g. if the user sets "Status IN (Open, In Progress)", this returns true
|
|
185
|
+
* for "Waiting on Customer" since that column should show as empty.
|
|
186
|
+
*/
|
|
187
|
+
const isColumnExcludedByFilter = useCallback((column: string, filterValues?: FilterValues<string>, colProperty?: string): boolean => {
|
|
188
|
+
if (!filterValues || !colProperty) return false;
|
|
189
|
+
const filterForColumn = filterValues[colProperty as keyof typeof filterValues];
|
|
190
|
+
if (!filterForColumn || !Array.isArray(filterForColumn)) return false;
|
|
191
|
+
|
|
192
|
+
const [op, val] = filterForColumn as [string, unknown];
|
|
193
|
+
|
|
194
|
+
if (op === "==" && typeof val === "string") {
|
|
195
|
+
return column !== val;
|
|
196
|
+
}
|
|
197
|
+
if (op === "!=" && typeof val === "string") {
|
|
198
|
+
return column === val;
|
|
199
|
+
}
|
|
200
|
+
if (op === "in" && Array.isArray(val)) {
|
|
201
|
+
return !val.map(String).includes(column);
|
|
202
|
+
}
|
|
203
|
+
if (op === "not-in" && Array.isArray(val)) {
|
|
204
|
+
return val.map(String).includes(column);
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
return false;
|
|
208
|
+
}, []);
|
|
209
|
+
|
|
162
210
|
// Helper function to subscribe to a single column - uses refs to avoid dependency issues
|
|
163
211
|
const subscribeToColumn = useCallback((column: string, itemCount: number) => {
|
|
164
212
|
// Skip if we're in the middle of cleanup
|
|
@@ -173,27 +221,30 @@ export function useBoardDataController<M extends Record<string, unknown> = any,
|
|
|
173
221
|
const currentSearchString = searchStringRef.current;
|
|
174
222
|
const currentResolvedPath = resolvedPathRef.current;
|
|
175
223
|
|
|
176
|
-
//
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
stringVal = String(val);
|
|
189
|
-
}
|
|
190
|
-
whereMap[key] = `${postgrestOp}.${stringVal}`;
|
|
224
|
+
// If the column is excluded by the active filter on the column property,
|
|
225
|
+
// set it as empty immediately without querying.
|
|
226
|
+
const excluded = isColumnExcludedByFilter(column, currentFilterValues, currentColumnProperty);
|
|
227
|
+
if (excluded) {
|
|
228
|
+
setColumnData(prev => ({
|
|
229
|
+
...prev,
|
|
230
|
+
[column]: {
|
|
231
|
+
entities: [],
|
|
232
|
+
loading: false,
|
|
233
|
+
hasMore: false,
|
|
234
|
+
error: undefined,
|
|
235
|
+
totalCount: 0
|
|
191
236
|
}
|
|
192
|
-
});
|
|
237
|
+
}));
|
|
238
|
+
return;
|
|
193
239
|
}
|
|
194
|
-
whereMap[currentColumnProperty] = `eq.${column}`;
|
|
195
240
|
|
|
196
|
-
|
|
241
|
+
// Build filter map for this column — pass FilterValues directly
|
|
242
|
+
const whereFilter: FilterValues<string> = {
|
|
243
|
+
...(currentFilterValues ?? {}),
|
|
244
|
+
[currentColumnProperty]: ["==", column]
|
|
245
|
+
};
|
|
246
|
+
|
|
247
|
+
const orderByParam: [string, "asc" | "desc"] | undefined = currentOrderProperty ? [currentOrderProperty, "asc"] : undefined;
|
|
197
248
|
|
|
198
249
|
// Mark column as loading
|
|
199
250
|
setColumnData(prev => ({
|
|
@@ -211,7 +262,7 @@ export function useBoardDataController<M extends Record<string, unknown> = any,
|
|
|
211
262
|
if (isCleaningUpRef.current) return;
|
|
212
263
|
|
|
213
264
|
const pendingMap = pendingItemsRef.current;
|
|
214
|
-
|
|
265
|
+
|
|
215
266
|
// Apply pending updates to incoming entities
|
|
216
267
|
const mergedEntities = entities.map(e => {
|
|
217
268
|
const pending = pendingMap[String(e.id)];
|
|
@@ -219,7 +270,7 @@ export function useBoardDataController<M extends Record<string, unknown> = any,
|
|
|
219
270
|
// Check if DB entity has caught up to the expected column and order
|
|
220
271
|
const expectedCol = pending.expectedValues[currentColumnProperty];
|
|
221
272
|
const expectedOrder = currentOrderProperty ? pending.expectedValues[currentOrderProperty] : undefined;
|
|
222
|
-
|
|
273
|
+
|
|
223
274
|
let caughtUp = true;
|
|
224
275
|
if (e.values?.[currentColumnProperty] !== expectedCol) {
|
|
225
276
|
caughtUp = false;
|
|
@@ -227,15 +278,17 @@ export function useBoardDataController<M extends Record<string, unknown> = any,
|
|
|
227
278
|
if (currentOrderProperty && e.values?.[currentOrderProperty] !== expectedOrder) {
|
|
228
279
|
caughtUp = false;
|
|
229
280
|
}
|
|
230
|
-
|
|
281
|
+
|
|
231
282
|
if (caughtUp) {
|
|
232
283
|
// DB has caught up, clear pending state
|
|
233
284
|
delete pendingMap[String(e.id)];
|
|
234
285
|
return e; // Use the real DB entity
|
|
235
286
|
}
|
|
236
|
-
|
|
287
|
+
|
|
237
288
|
// DB hasn't caught up, overlay expected values
|
|
238
|
-
return { ...e,
|
|
289
|
+
return { ...e,
|
|
290
|
+
values: { ...e.values,
|
|
291
|
+
...pending.expectedValues } };
|
|
239
292
|
}
|
|
240
293
|
return e;
|
|
241
294
|
});
|
|
@@ -261,30 +314,36 @@ export function useBoardDataController<M extends Record<string, unknown> = any,
|
|
|
261
314
|
processed = [...processed].sort((a, b) => {
|
|
262
315
|
const valA = a.values?.[currentOrderProperty] as string | undefined | null;
|
|
263
316
|
const valB = b.values?.[currentOrderProperty] as string | undefined | null;
|
|
264
|
-
|
|
317
|
+
|
|
265
318
|
const isAEmpty = valA === undefined || valA === null || valA === "";
|
|
266
319
|
const isBEmpty = valB === undefined || valB === null || valB === "";
|
|
267
|
-
|
|
320
|
+
|
|
268
321
|
if (isAEmpty && isBEmpty) return 0;
|
|
269
322
|
if (isAEmpty) return 1;
|
|
270
323
|
if (isBEmpty) return -1;
|
|
271
|
-
|
|
324
|
+
|
|
272
325
|
return valA < valB ? -1 : valA > valB ? 1 : 0;
|
|
273
326
|
});
|
|
274
327
|
}
|
|
275
328
|
|
|
276
|
-
// 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.
|
|
277
332
|
if (currentCollection.callbacks?.afterRead) {
|
|
278
333
|
try {
|
|
279
334
|
processed = await Promise.all(
|
|
280
|
-
processed.map(entity =>
|
|
281
|
-
currentCollection.callbacks!.afterRead!({
|
|
335
|
+
processed.map(async (entity) => {
|
|
336
|
+
const processedRow = await currentCollection.callbacks!.afterRead!({
|
|
282
337
|
collection: currentCollection,
|
|
283
338
|
path: currentResolvedPath,
|
|
284
|
-
entity,
|
|
339
|
+
row: { id: entity.id, ...entity.values },
|
|
285
340
|
context: currentContext
|
|
286
|
-
})
|
|
287
|
-
|
|
341
|
+
});
|
|
342
|
+
return {
|
|
343
|
+
...entity,
|
|
344
|
+
values: processedRow as M
|
|
345
|
+
};
|
|
346
|
+
})
|
|
288
347
|
);
|
|
289
348
|
} catch (e) {
|
|
290
349
|
console.error("Error in afterRead callback:", e);
|
|
@@ -293,8 +352,6 @@ export function useBoardDataController<M extends Record<string, unknown> = any,
|
|
|
293
352
|
|
|
294
353
|
const newHasMore = entities.length >= itemCount;
|
|
295
354
|
|
|
296
|
-
console.log(`[useBoardDataController] Listener update for col ${column}. Length: ${processed.length}. Entities:`, processed.map(e => e.id));
|
|
297
|
-
|
|
298
355
|
// Compare with current state — skip update if identical to avoid UI flash
|
|
299
356
|
setColumnData(prev => {
|
|
300
357
|
const existing = prev[column];
|
|
@@ -308,9 +365,9 @@ export function useBoardDataController<M extends Record<string, unknown> = any,
|
|
|
308
365
|
identical = false;
|
|
309
366
|
break;
|
|
310
367
|
}
|
|
311
|
-
//
|
|
312
|
-
//
|
|
313
|
-
if (
|
|
368
|
+
// Shallow-compare values to avoid JSON.stringify allocations
|
|
369
|
+
// entity.values are flat records from the DB, so shallow suffices
|
|
370
|
+
if (!shallowEqualValues(a.values, b.values)) {
|
|
314
371
|
identical = false;
|
|
315
372
|
break;
|
|
316
373
|
}
|
|
@@ -355,14 +412,14 @@ export function useBoardDataController<M extends Record<string, unknown> = any,
|
|
|
355
412
|
const accessor = currentDataClient.collection(currentResolvedPath);
|
|
356
413
|
if (accessor.listen) {
|
|
357
414
|
const unsubscribe = accessor.listen({
|
|
358
|
-
where:
|
|
415
|
+
where: whereFilter,
|
|
359
416
|
limit: itemCount,
|
|
360
417
|
orderBy: orderByParam
|
|
361
418
|
}, res => onUpdate(res.data as Entity<M>[]), onError);
|
|
362
419
|
unsubscribersRef.current[column] = unsubscribe;
|
|
363
420
|
} else {
|
|
364
421
|
accessor.find({
|
|
365
|
-
where:
|
|
422
|
+
where: whereFilter,
|
|
366
423
|
limit: itemCount,
|
|
367
424
|
orderBy: orderByParam
|
|
368
425
|
})
|
|
@@ -404,31 +461,23 @@ export function useBoardDataController<M extends Record<string, unknown> = any,
|
|
|
404
461
|
const itemCount = currentColumnItemCounts[column] ?? pageSize;
|
|
405
462
|
subscribeToColumn(column, itemCount);
|
|
406
463
|
|
|
464
|
+
// Skip count query for columns excluded by the filter — subscribeToColumn
|
|
465
|
+
// already set them to totalCount: 0.
|
|
466
|
+
if (isColumnExcludedByFilter(column, currentFilterValues, currentColumnProperty)) {
|
|
467
|
+
return;
|
|
468
|
+
}
|
|
469
|
+
|
|
407
470
|
// Count query for column (for display in column header)
|
|
408
471
|
const accessor = currentDataClient.collection(currentResolvedPath);
|
|
409
472
|
if (accessor.count) {
|
|
410
473
|
|
|
411
|
-
const
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
const [op, val] = value;
|
|
416
|
-
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";
|
|
417
|
-
|
|
418
|
-
let stringVal: string;
|
|
419
|
-
if (Array.isArray(val)) {
|
|
420
|
-
stringVal = `(${val.join(",")})`;
|
|
421
|
-
} else {
|
|
422
|
-
stringVal = String(val);
|
|
423
|
-
}
|
|
424
|
-
whereMap[key] = `${postgrestOp}.${stringVal}`;
|
|
425
|
-
}
|
|
426
|
-
});
|
|
427
|
-
}
|
|
428
|
-
whereMap[currentColumnProperty] = `eq.${column}`;
|
|
474
|
+
const whereFilter: FilterValues<string> = {
|
|
475
|
+
...(currentFilterValues ?? {}),
|
|
476
|
+
[currentColumnProperty]: ["==", column]
|
|
477
|
+
};
|
|
429
478
|
|
|
430
479
|
accessor.count({
|
|
431
|
-
where:
|
|
480
|
+
where: whereFilter
|
|
432
481
|
}).then(count => {
|
|
433
482
|
if (isCleaningUpRef.current) return;
|
|
434
483
|
setColumnData(prev => ({
|
|
@@ -549,7 +598,7 @@ export function useBoardDataController<M extends Record<string, unknown> = any,
|
|
|
549
598
|
...itemToMove.values,
|
|
550
599
|
...(newValues || {})
|
|
551
600
|
};
|
|
552
|
-
|
|
601
|
+
|
|
553
602
|
const updatedEntity = {
|
|
554
603
|
...itemToMove,
|
|
555
604
|
values: newValuesMerged
|
|
@@ -562,7 +611,7 @@ export function useBoardDataController<M extends Record<string, unknown> = any,
|
|
|
562
611
|
};
|
|
563
612
|
|
|
564
613
|
const targetEntities = sourceColumn === targetColumn ? sourceEntities : [...(updated[targetColumn]?.entities || [])];
|
|
565
|
-
|
|
614
|
+
|
|
566
615
|
if (newIndex !== undefined && newIndex >= 0 && newIndex <= targetEntities.length) {
|
|
567
616
|
targetEntities.splice(newIndex, 0, updatedEntity);
|
|
568
617
|
} else {
|
|
@@ -572,15 +621,15 @@ export function useBoardDataController<M extends Record<string, unknown> = any,
|
|
|
572
621
|
targetEntities.sort((a, b) => {
|
|
573
622
|
const valA = a.values?.[orderProp] as string | undefined | null;
|
|
574
623
|
const valB = b.values?.[orderProp] as string | undefined | null;
|
|
575
|
-
|
|
624
|
+
|
|
576
625
|
// Handle nulls/empty strings to match Postgres NULLS LAST (ASC) behavior
|
|
577
626
|
const isAEmpty = valA === undefined || valA === null || valA === "";
|
|
578
627
|
const isBEmpty = valB === undefined || valB === null || valB === "";
|
|
579
|
-
|
|
628
|
+
|
|
580
629
|
if (isAEmpty && isBEmpty) return 0;
|
|
581
630
|
if (isAEmpty) return 1; // A is null, B is not -> A goes after B
|
|
582
631
|
if (isBEmpty) return -1; // B is null, A is not -> A goes before B
|
|
583
|
-
|
|
632
|
+
|
|
584
633
|
return valA < valB ? -1 : valA > valB ? 1 : 0;
|
|
585
634
|
});
|
|
586
635
|
}
|
|
@@ -589,8 +638,8 @@ export function useBoardDataController<M extends Record<string, unknown> = any,
|
|
|
589
638
|
updated[sourceColumn] = {
|
|
590
639
|
...updated[sourceColumn],
|
|
591
640
|
entities: sourceColumn === targetColumn ? targetEntities : sourceEntities,
|
|
592
|
-
totalCount: sourceColumn === targetColumn
|
|
593
|
-
? updated[sourceColumn].totalCount
|
|
641
|
+
totalCount: sourceColumn === targetColumn
|
|
642
|
+
? updated[sourceColumn].totalCount
|
|
594
643
|
: Math.max(0, (updated[sourceColumn].totalCount ?? 0) - 1)
|
|
595
644
|
};
|
|
596
645
|
|
|
@@ -602,7 +651,6 @@ export function useBoardDataController<M extends Record<string, unknown> = any,
|
|
|
602
651
|
};
|
|
603
652
|
}
|
|
604
653
|
|
|
605
|
-
console.log(`[useBoardDataController] moveItemOptimistically: ${itemId} from ${sourceColumn} (${updated[sourceColumn].entities.length}) to ${targetColumn} (${updated[targetColumn].entities.length})`);
|
|
606
654
|
} else if (sourceColumn !== targetColumn) {
|
|
607
655
|
// If item not found locally but counts need update
|
|
608
656
|
if (updated[sourceColumn]?.totalCount !== undefined) {
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { useMemo } from "react";
|
|
2
|
-
import type {
|
|
2
|
+
import type { CollectionConfig, Property, RelationProperty } from "@rebasepro/types";
|
|
3
3
|
import type { Entity, PropertyConfig, EntityRelation } from "@rebasepro/types";
|
|
4
4
|
import { getEntityImagePreviewPropertyKey } from "@rebasepro/common";
|
|
5
|
+
import { getEntityFromCache } from "@rebasepro/app";
|
|
5
6
|
import { getEntityTitlePropertyKey, getEntityPreviewKeys } from "../../util/previews";
|
|
6
7
|
import { getValueInPath } from "@rebasepro/utils";
|
|
7
8
|
import type { AuthController } from "@rebasepro/types";
|
|
@@ -12,7 +13,7 @@ import { ChipColorScheme, CHIP_COLORS } from "@rebasepro/ui";
|
|
|
12
13
|
|
|
13
14
|
/**
|
|
14
15
|
* A resolved "slot" containing the property definition, key, and the
|
|
15
|
-
* concrete value extracted from
|
|
16
|
+
* concrete value extracted from a entity.
|
|
16
17
|
*/
|
|
17
18
|
export interface PreviewSlot {
|
|
18
19
|
property: Property;
|
|
@@ -101,7 +102,7 @@ export interface CollectionSlotKeys {
|
|
|
101
102
|
* Pure function — call inside `useMemo`.
|
|
102
103
|
*/
|
|
103
104
|
export function resolveCollectionSlotKeys(
|
|
104
|
-
collection:
|
|
105
|
+
collection: CollectionConfig<Record<string, unknown>>,
|
|
105
106
|
authController: AuthController,
|
|
106
107
|
propertyConfigs: Record<string, PropertyConfig>
|
|
107
108
|
): CollectionSlotKeys {
|
|
@@ -110,11 +111,39 @@ export function resolveCollectionSlotKeys(
|
|
|
110
111
|
|
|
111
112
|
// Status: first string-enum that isn't the title
|
|
112
113
|
let statusKey: string | undefined;
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
114
|
+
|
|
115
|
+
// 1. Explicitly defined in previewProperties
|
|
116
|
+
if (!statusKey && collection.previewProperties) {
|
|
117
|
+
for (const key of collection.previewProperties) {
|
|
118
|
+
const p = collection.properties[key] as Property | undefined;
|
|
119
|
+
if (p?.type === "string" && "enum" in p && p.enum && key !== titleKey) {
|
|
120
|
+
statusKey = key;
|
|
121
|
+
break;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
// 2. Explicitly defined in propertiesOrder
|
|
127
|
+
if (!statusKey && collection.propertiesOrder) {
|
|
128
|
+
for (const key of collection.propertiesOrder) {
|
|
129
|
+
if (typeof key === "string" && !key.startsWith("subcollection:")) {
|
|
130
|
+
const p = collection.properties[key] as Property | undefined;
|
|
131
|
+
if (p?.type === "string" && "enum" in p && p.enum && key !== titleKey) {
|
|
132
|
+
statusKey = key;
|
|
133
|
+
break;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
// 3. Default automatic inference
|
|
140
|
+
if (!statusKey) {
|
|
141
|
+
for (const [key, prop] of Object.entries(collection.properties)) {
|
|
142
|
+
const p = prop as Property;
|
|
143
|
+
if (p.type === "string" && "enum" in p && p.enum && key !== titleKey) {
|
|
144
|
+
statusKey = key;
|
|
145
|
+
break;
|
|
146
|
+
}
|
|
118
147
|
}
|
|
119
148
|
}
|
|
120
149
|
|
|
@@ -137,31 +166,38 @@ export function resolveCollectionSlotKeys(
|
|
|
137
166
|
}
|
|
138
167
|
}
|
|
139
168
|
|
|
140
|
-
// Relations: collect
|
|
141
|
-
//
|
|
142
|
-
//
|
|
169
|
+
// Relations: collect relation property keys for chip rendering.
|
|
170
|
+
// When propertiesOrder is explicitly set, skip this — relations will
|
|
171
|
+
// be shown in the developer-defined order, not as separate chips.
|
|
172
|
+
const hasExplicitOrder = !!(collection.propertiesOrder as string[] | undefined);
|
|
143
173
|
const relationKeys: string[] = [];
|
|
144
|
-
|
|
145
|
-
const
|
|
146
|
-
|
|
147
|
-
|
|
174
|
+
if (!hasExplicitOrder) {
|
|
175
|
+
for (const [key, prop] of Object.entries(collection.properties)) {
|
|
176
|
+
const p = prop as Property;
|
|
177
|
+
if (p.type === "relation") {
|
|
178
|
+
relationKeys.push(key);
|
|
179
|
+
}
|
|
148
180
|
}
|
|
149
181
|
}
|
|
150
182
|
|
|
151
|
-
// Subtitle: first preview key that isn't title/image/status/date/
|
|
183
|
+
// Subtitle: first preview key that isn't title/image/status/date/id.
|
|
184
|
+
// When propertiesOrder is not set, also exclude relation keys (they render as chips).
|
|
152
185
|
// Prefer string fields (especially multiline/description-like) over numbers.
|
|
153
186
|
const excludeKeys = new Set([titleKey, imageKey, statusKey, dateKey, ...relationKeys]);
|
|
154
187
|
const previewKeys = getEntityPreviewKeys(authController, collection, propertyConfigs, undefined, 10)
|
|
155
188
|
.filter(k => !excludeKeys.has(k) && k !== "id");
|
|
156
189
|
|
|
157
|
-
//
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
190
|
+
// When propertiesOrder is set, respect the developer-defined order (no re-sorting).
|
|
191
|
+
// When not set, sort: strings first (prefer multiline → good description candidate).
|
|
192
|
+
const sortedPreviewKeys = hasExplicitOrder
|
|
193
|
+
? previewKeys
|
|
194
|
+
: [...previewKeys].sort((a, b) => {
|
|
195
|
+
const propA = collection.properties[a] as Property | undefined;
|
|
196
|
+
const propB = collection.properties[b] as Property | undefined;
|
|
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
|
+
return scoreB - scoreA;
|
|
200
|
+
});
|
|
165
201
|
const subtitleKey = sortedPreviewKeys.length > 0 ? sortedPreviewKeys[0] : undefined;
|
|
166
202
|
|
|
167
203
|
return { titleKey,
|
|
@@ -180,7 +216,7 @@ dateKey };
|
|
|
180
216
|
* and value is the first element (for arrays) or the raw value.
|
|
181
217
|
*/
|
|
182
218
|
function resolveImageSlot(
|
|
183
|
-
collection:
|
|
219
|
+
collection: CollectionConfig<Record<string, unknown>>,
|
|
184
220
|
imageKey: string,
|
|
185
221
|
entity: Entity<Record<string, unknown>>
|
|
186
222
|
): PreviewSlot | undefined {
|
|
@@ -241,7 +277,7 @@ function formatDateValue(value: unknown): string {
|
|
|
241
277
|
* `resolveEntitySlots` for each entity row.
|
|
242
278
|
*/
|
|
243
279
|
export function useCollectionSlotKeys(
|
|
244
|
-
collection:
|
|
280
|
+
collection: CollectionConfig<Record<string, unknown>>,
|
|
245
281
|
authController: AuthController,
|
|
246
282
|
propertyConfigs: Record<string, PropertyConfig>
|
|
247
283
|
): CollectionSlotKeys {
|
|
@@ -260,7 +296,7 @@ export function useCollectionSlotKeys(
|
|
|
260
296
|
*/
|
|
261
297
|
export function resolveEntitySlots(
|
|
262
298
|
entity: Entity<Record<string, unknown>>,
|
|
263
|
-
collection:
|
|
299
|
+
collection: CollectionConfig<Record<string, unknown>>,
|
|
264
300
|
slotKeys: CollectionSlotKeys
|
|
265
301
|
): EntityPreviewSlots {
|
|
266
302
|
const { titleKey, imageKey, subtitleKey, relationKeys, statusKey, dateKey } = slotKeys;
|
|
@@ -304,7 +340,7 @@ value: val };
|
|
|
304
340
|
const items: RelationChipItem[] = [];
|
|
305
341
|
let totalCount = 0;
|
|
306
342
|
|
|
307
|
-
const isMany = prop.relation?.cardinality === "many";
|
|
343
|
+
const isMany = prop.cardinality === "many" || prop.relation?.cardinality === "many";
|
|
308
344
|
|
|
309
345
|
if (isMany && Array.isArray(val)) {
|
|
310
346
|
// cardinality:"many" → array of EntityRelation
|
|
@@ -322,9 +358,12 @@ id });
|
|
|
322
358
|
}
|
|
323
359
|
} else if (!isMany && val && typeof val === "object") {
|
|
324
360
|
// cardinality:"one" → single EntityRelation
|
|
325
|
-
const
|
|
361
|
+
const obj = val as Record<string, unknown>;
|
|
362
|
+
const isRelation = ("__type" in obj && obj.__type === "relation")
|
|
363
|
+
|| (typeof obj.isEntityRelation === "function"
|
|
364
|
+
&& (obj.isEntityRelation as () => boolean)());
|
|
326
365
|
if (isRelation) {
|
|
327
|
-
const relation =
|
|
366
|
+
const relation = obj as unknown as EntityRelation;
|
|
328
367
|
const displayName = resolveRelationDisplayName(relation, prop);
|
|
329
368
|
totalCount = 1;
|
|
330
369
|
if (displayName) {
|
|
@@ -400,43 +439,92 @@ function resolveRelationDisplayName(
|
|
|
400
439
|
): string | undefined {
|
|
401
440
|
// Support both EntityRelation instances and plain objects
|
|
402
441
|
const data = "data" in relation ? (relation as EntityRelation).data : undefined;
|
|
403
|
-
if (!data || !data.values) {
|
|
404
|
-
// No eagerly-loaded data — fall back to ID
|
|
405
|
-
const id = "id" in relation ? relation.id : undefined;
|
|
406
|
-
return id !== undefined ? String(id) : undefined;
|
|
407
|
-
}
|
|
408
|
-
|
|
409
|
-
const values = data.values as Record<string, unknown>;
|
|
410
442
|
|
|
411
|
-
//
|
|
443
|
+
// Resolve target collection from either `prop.relation.target()` or `prop.target()` (inline API)
|
|
444
|
+
let targetCollection: CollectionConfig | undefined;
|
|
412
445
|
try {
|
|
413
|
-
const
|
|
446
|
+
const resolved = prop.relation?.target?.() ?? (typeof prop.target === "function" ? prop.target() : undefined);
|
|
447
|
+
if (resolved && typeof resolved === "object") {
|
|
448
|
+
targetCollection = resolved as CollectionConfig;
|
|
449
|
+
}
|
|
450
|
+
} catch {
|
|
451
|
+
// Target collection may not be resolvable
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
// Helper: extract display name from entity values using the target collection
|
|
455
|
+
const extractDisplayName = (values: Record<string, unknown>): string | undefined => {
|
|
414
456
|
if (targetCollection) {
|
|
415
457
|
const targetTitleKey = targetCollection.titleProperty as string | undefined;
|
|
416
458
|
if (targetTitleKey && values[targetTitleKey] !== undefined) {
|
|
417
459
|
return String(values[targetTitleKey]);
|
|
418
460
|
}
|
|
419
|
-
|
|
461
|
+
|
|
462
|
+
// Helper to check if a property is hidden/internal
|
|
463
|
+
const isHiddenProp = (p: Property): boolean => {
|
|
464
|
+
if (p.ui?.hideFromCollection) return true;
|
|
465
|
+
if (typeof p.ui?.disabled === "object" && p.ui.disabled.hidden) return true;
|
|
466
|
+
return false;
|
|
467
|
+
};
|
|
468
|
+
|
|
469
|
+
// Helper to check if a property is a visible, non-id string
|
|
470
|
+
const isDisplayCandidate = (p: Property): boolean => {
|
|
471
|
+
return p.type === "string" && !p.ui?.multiline && !p.ui?.markdown && !p.storage
|
|
472
|
+
&& !("isId" in p && p.isId) && !isHiddenProp(p);
|
|
473
|
+
};
|
|
474
|
+
|
|
475
|
+
// Prioritize common title-like fields: name, title, label, displayName
|
|
476
|
+
const priorityKeys = ["name", "title", "label", "displayName"];
|
|
477
|
+
for (const pk of priorityKeys) {
|
|
478
|
+
const p = targetCollection.properties[pk] as Property | undefined;
|
|
479
|
+
if (p && isDisplayCandidate(p) && values[pk] !== undefined && values[pk] !== null) {
|
|
480
|
+
return String(values[pk]);
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
// Fallback: find first visible, non-id string property in target
|
|
420
485
|
for (const [k, p] of Object.entries(targetCollection.properties)) {
|
|
421
486
|
const tp = p as Property;
|
|
422
|
-
if (
|
|
487
|
+
if (isDisplayCandidate(tp)) {
|
|
423
488
|
if (values[k] !== undefined && values[k] !== null) {
|
|
424
489
|
return String(values[k]);
|
|
425
490
|
}
|
|
426
491
|
}
|
|
427
492
|
}
|
|
428
493
|
}
|
|
429
|
-
|
|
430
|
-
|
|
494
|
+
// Generic fallback: walk entity values for any short string.
|
|
495
|
+
for (const [, v] of Object.entries(values)) {
|
|
496
|
+
if (typeof v === "string" && v.length > 0 && v.length < 200) {
|
|
497
|
+
return v;
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
return undefined;
|
|
501
|
+
};
|
|
502
|
+
|
|
503
|
+
// 1. Try eagerly-loaded data on the relation object
|
|
504
|
+
if (data && data.values) {
|
|
505
|
+
const result = extractDisplayName(data.values as Record<string, unknown>);
|
|
506
|
+
if (result) return result;
|
|
431
507
|
}
|
|
432
508
|
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
509
|
+
const id = "id" in relation ? relation.id : undefined;
|
|
510
|
+
|
|
511
|
+
// 2. Try the entity cache (sessionStorage) as a fallback
|
|
512
|
+
if (id !== undefined && targetCollection) {
|
|
513
|
+
try {
|
|
514
|
+
const slug = targetCollection.slug ?? ("table" in targetCollection ? targetCollection.table : undefined);
|
|
515
|
+
if (slug) {
|
|
516
|
+
const cacheKey = `${slug}/${id}`;
|
|
517
|
+
const cached = getEntityFromCache(cacheKey) as { values?: Record<string, unknown> } | undefined;
|
|
518
|
+
if (cached?.values) {
|
|
519
|
+
const result = extractDisplayName(cached.values);
|
|
520
|
+
if (result) return result;
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
} catch {
|
|
524
|
+
// Cache lookup failed — fall through
|
|
437
525
|
}
|
|
438
526
|
}
|
|
439
527
|
|
|
440
|
-
|
|
528
|
+
// 3. Final fallback: show the ID
|
|
441
529
|
return id !== undefined ? String(id) : undefined;
|
|
442
530
|
}
|