@rebasepro/cms 0.17.3 → 0.18.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -0
- package/dist/{CollectionEditorDialog-B-akreOU.js → CollectionEditorDialog-BeX4b92r.js} +13 -7
- package/dist/{CollectionEditorDialog-B-akreOU.js.map → CollectionEditorDialog-BeX4b92r.js.map} +1 -1
- package/dist/{PropertyEditView-CiY84wkR.js → PropertyEditView-C7thfj4L.js} +3 -3
- package/dist/{PropertyEditView-CiY84wkR.js.map → PropertyEditView-C7thfj4L.js.map} +1 -1
- package/dist/{RouterCollectionsStudioView-DkAWda4N.js → RouterCollectionsStudioView-BtjzvB6E.js} +4 -4
- package/dist/{RouterCollectionsStudioView-DkAWda4N.js.map → RouterCollectionsStudioView-BtjzvB6E.js.map} +1 -1
- package/dist/{SchemaChangeDialog-DceT8QFX.js → SchemaChangeDialog-CkqK6KOC.js} +4 -2
- package/dist/{SchemaChangeDialog-DceT8QFX.js.map → SchemaChangeDialog-CkqK6KOC.js.map} +1 -1
- package/dist/collection_editor/api/generateCollectionApi.d.ts +1 -2
- package/dist/collection_editor_ui.d.ts +2 -0
- package/dist/collection_editor_ui.js +6 -5
- package/dist/collection_editor_ui.js.map +1 -1
- package/dist/components/DeleteEntityDialog.d.ts +2 -3
- package/dist/components/RebaseLayout.d.ts +11 -4
- package/dist/components/field_configs.d.ts +1 -1
- package/dist/editor/sanitize-html.d.ts +15 -0
- package/dist/editor.js +195 -10
- package/dist/editor.js.map +1 -1
- package/dist/{export-Ben8E355.js → export--arni_VY.js} +2 -2
- package/dist/{export-Ben8E355.js.map → export--arni_VY.js.map} +1 -1
- package/dist/form/components/LabelWithIcon.d.ts +10 -0
- package/dist/{history-DIEVd26f.js → history-C2TpoQwi.js} +2 -2
- package/dist/{history-DIEVd26f.js.map → history-C2TpoQwi.js.map} +1 -1
- package/dist/hooks/navigation/useBuildNavigationStateController.d.ts +1 -1
- package/dist/hooks/navigation/useResolvedViews.d.ts +1 -1
- package/dist/hooks/navigation/useTopLevelNavigation.d.ts +1 -1
- package/dist/{import-D25x7ko-.js → import-DTkXNoBg.js} +2 -2
- package/dist/{import-D25x7ko-.js.map → import-DTkXNoBg.js.map} +1 -1
- package/dist/index.js +78 -33
- package/dist/index.js.map +1 -1
- package/dist/util/propertyConfigMapper.d.ts +1 -1
- package/dist/util-CfLFggP7.js +57 -0
- package/dist/util-CfLFggP7.js.map +1 -0
- package/dist/{util-DVqnqlLn.js → util-DE1WQW6h.js} +134 -112
- package/dist/util-DE1WQW6h.js.map +1 -0
- package/package.json +42 -34
- package/dist/util-DVqnqlLn.js.map +0 -1
- package/src/collection_editor/CollectionEditorDialogsContext.tsx +0 -25
- package/src/collection_editor/ConfigControllerProvider.tsx +0 -395
- package/src/collection_editor/_cms_internals.ts +0 -41
- package/src/collection_editor/api/generateCollectionApi.ts +0 -126
- package/src/collection_editor/api/index.ts +0 -1
- package/src/collection_editor/extensibility_types.ts +0 -168
- package/src/collection_editor/index.ts +0 -108
- package/src/collection_editor/liveSchemaClient.ts +0 -285
- package/src/collection_editor/relation_kinds.ts +0 -44
- package/src/collection_editor/serializable_types.ts +0 -535
- package/src/collection_editor/serializable_utils.ts +0 -729
- package/src/collection_editor/types/collection_editor_controller.tsx +0 -62
- package/src/collection_editor/types/collection_inference.ts +0 -18
- package/src/collection_editor/types/config_controller.tsx +0 -121
- package/src/collection_editor/ui/AddKanbanColumnAction.tsx +0 -199
- package/src/collection_editor/ui/CollectionViewHeaderAction.tsx +0 -51
- package/src/collection_editor/ui/EditorCollectionAction.tsx +0 -54
- package/src/collection_editor/ui/EditorCollectionActionStart.tsx +0 -90
- package/src/collection_editor/ui/EditorEntityAction.tsx +0 -50
- package/src/collection_editor/ui/HomePageEditorCollectionAction.tsx +0 -114
- package/src/collection_editor/ui/KanbanSetupAction.tsx +0 -43
- package/src/collection_editor/ui/MissingReferenceWidget.tsx +0 -35
- package/src/collection_editor/ui/NewCollectionButton.tsx +0 -27
- package/src/collection_editor/ui/NewCollectionCard.tsx +0 -48
- package/src/collection_editor/ui/PropertyAddColumnComponent.tsx +0 -49
- package/src/collection_editor/ui/collection_editor/AICollectionGeneratorPopover.tsx +0 -260
- package/src/collection_editor/ui/collection_editor/AIModifiedPathsContext.tsx +0 -90
- package/src/collection_editor/ui/collection_editor/CollectionDetailsForm.tsx +0 -388
- package/src/collection_editor/ui/collection_editor/CollectionEditorDialog.tsx +0 -1098
- package/src/collection_editor/ui/collection_editor/CollectionEditorWelcomeView.tsx +0 -301
- package/src/collection_editor/ui/collection_editor/CollectionJsonImportDialog.tsx +0 -172
- package/src/collection_editor/ui/collection_editor/CollectionPropertiesEditorForm.tsx +0 -620
- package/src/collection_editor/ui/collection_editor/CollectionRLSTab.tsx +0 -530
- package/src/collection_editor/ui/collection_editor/CollectionRelationsTab.tsx +0 -462
- package/src/collection_editor/ui/collection_editor/CollectionStudioView.tsx +0 -104
- package/src/collection_editor/ui/collection_editor/CollectionYupValidation.tsx +0 -9
- package/src/collection_editor/ui/collection_editor/CollectionsStudioView.tsx +0 -199
- package/src/collection_editor/ui/collection_editor/DisplaySettingsForm.tsx +0 -315
- package/src/collection_editor/ui/collection_editor/EntityActionsEditTab.tsx +0 -164
- package/src/collection_editor/ui/collection_editor/EntityActionsSelectDialog.tsx +0 -40
- package/src/collection_editor/ui/collection_editor/EntityCustomViewsSelectDialog.tsx +0 -39
- package/src/collection_editor/ui/collection_editor/EnumForm.tsx +0 -373
- package/src/collection_editor/ui/collection_editor/GeneralSettingsForm.tsx +0 -288
- package/src/collection_editor/ui/collection_editor/GetCodeDialog.tsx +0 -141
- package/src/collection_editor/ui/collection_editor/KanbanConfigSection.tsx +0 -194
- package/src/collection_editor/ui/collection_editor/LayoutModeSwitch.tsx +0 -53
- package/src/collection_editor/ui/collection_editor/PropertyEditView.tsx +0 -980
- package/src/collection_editor/ui/collection_editor/PropertyFieldPreview.tsx +0 -164
- package/src/collection_editor/ui/collection_editor/PropertyTree.tsx +0 -364
- package/src/collection_editor/ui/collection_editor/RouterCollectionStudioView.tsx +0 -44
- package/src/collection_editor/ui/collection_editor/RouterCollectionsStudioView.tsx +0 -41
- package/src/collection_editor/ui/collection_editor/SchemaChangeDialog.tsx +0 -470
- package/src/collection_editor/ui/collection_editor/SubcollectionsEditTab.tsx +0 -256
- package/src/collection_editor/ui/collection_editor/SwitchControl.tsx +0 -39
- package/src/collection_editor/ui/collection_editor/ViewModeSwitch.tsx +0 -68
- package/src/collection_editor/ui/collection_editor/import/CollectionEditorImportDataPreview.tsx +0 -67
- package/src/collection_editor/ui/collection_editor/import/CollectionEditorImportMapping.tsx +0 -296
- package/src/collection_editor/ui/collection_editor/import/clean_import_data.ts +0 -57
- package/src/collection_editor/ui/collection_editor/properties/BlockPropertyField.tsx +0 -147
- package/src/collection_editor/ui/collection_editor/properties/BooleanPropertyField.tsx +0 -41
- package/src/collection_editor/ui/collection_editor/properties/CommonPropertyFields.tsx +0 -113
- package/src/collection_editor/ui/collection_editor/properties/DateTimePropertyField.tsx +0 -250
- package/src/collection_editor/ui/collection_editor/properties/EnumPropertyField.tsx +0 -126
- package/src/collection_editor/ui/collection_editor/properties/KeyValuePropertyField.tsx +0 -20
- package/src/collection_editor/ui/collection_editor/properties/MapPropertyField.tsx +0 -153
- package/src/collection_editor/ui/collection_editor/properties/MarkdownPropertyField.tsx +0 -217
- package/src/collection_editor/ui/collection_editor/properties/NumberPropertyField.tsx +0 -117
- package/src/collection_editor/ui/collection_editor/properties/ReferencePropertyField.tsx +0 -129
- package/src/collection_editor/ui/collection_editor/properties/RelationPropertyField.tsx +0 -335
- package/src/collection_editor/ui/collection_editor/properties/RepeatPropertyField.tsx +0 -107
- package/src/collection_editor/ui/collection_editor/properties/StoragePropertyField.tsx +0 -403
- package/src/collection_editor/ui/collection_editor/properties/StringPropertyField.tsx +0 -148
- package/src/collection_editor/ui/collection_editor/properties/UrlPropertyField.tsx +0 -91
- package/src/collection_editor/ui/collection_editor/properties/VectorPropertyField.tsx +0 -34
- package/src/collection_editor/ui/collection_editor/properties/advanced/AdvancedPropertyValidation.tsx +0 -49
- package/src/collection_editor/ui/collection_editor/properties/conditions/ConditionsEditor.tsx +0 -925
- package/src/collection_editor/ui/collection_editor/properties/conditions/ConditionsPanel.tsx +0 -28
- package/src/collection_editor/ui/collection_editor/properties/conditions/EnumConditionsEditor.tsx +0 -626
- package/src/collection_editor/ui/collection_editor/properties/conditions/index.ts +0 -6
- package/src/collection_editor/ui/collection_editor/properties/conditions/property_paths.ts +0 -93
- package/src/collection_editor/ui/collection_editor/properties/validation/ArrayPropertyValidation.tsx +0 -52
- package/src/collection_editor/ui/collection_editor/properties/validation/GeneralPropertyValidation.tsx +0 -63
- package/src/collection_editor/ui/collection_editor/properties/validation/NumberPropertyValidation.tsx +0 -114
- package/src/collection_editor/ui/collection_editor/properties/validation/StringPropertyValidation.tsx +0 -154
- package/src/collection_editor/ui/collection_editor/properties/validation/ValidationPanel.tsx +0 -28
- package/src/collection_editor/ui/collection_editor/templates/blog_template.ts +0 -112
- package/src/collection_editor/ui/collection_editor/templates/pages_template.ts +0 -183
- package/src/collection_editor/ui/collection_editor/templates/products_template.ts +0 -88
- package/src/collection_editor/ui/collection_editor/templates/users_template.ts +0 -42
- package/src/collection_editor/ui/collection_editor/util.ts +0 -28
- package/src/collection_editor/ui/collection_editor/utils/strings.ts +0 -1
- package/src/collection_editor/ui/collection_editor/utils/supported_fields.tsx +0 -39
- package/src/collection_editor/ui/collection_editor/utils/update_property_for_widget.ts +0 -276
- package/src/collection_editor/useCollectionEditorController.tsx +0 -9
- package/src/collection_editor/useCollectionsConfigController.tsx +0 -9
- package/src/collection_editor/useJsonCollectionsConfigController.tsx +0 -297
- package/src/collection_editor/useLiveSchemaEditing.tsx +0 -315
- package/src/collection_editor/useLocalCollectionsConfigController.tsx +0 -341
- package/src/collection_editor/useSafeSnackbarController.ts +0 -9
- package/src/collection_editor/validateCollectionJson.ts +0 -440
- package/src/collection_editor_ui.ts +0 -21
- package/src/components/AdditionalFieldValue.tsx +0 -68
- package/src/components/AdminModeSyncer.tsx +0 -56
- package/src/components/ArrayContainer.tsx +0 -542
- package/src/components/ClearFilterSortButton.tsx +0 -56
- package/src/components/CollectionEditorDialogs.tsx +0 -69
- package/src/components/CollectionPanel.tsx +0 -179
- package/src/components/CollectionTableBinding/CollectionRowActions.tsx +0 -244
- package/src/components/CollectionTableBinding/CollectionTableBinding.tsx +0 -394
- package/src/components/CollectionTableBinding/CollectionTableBindingProps.tsx +0 -172
- package/src/components/CollectionTableBinding/PropertyTableCell.tsx +0 -350
- package/src/components/CollectionTableBinding/column_utils.tsx +0 -155
- package/src/components/CollectionTableBinding/fields/TableMultipleRelationField.tsx +0 -131
- package/src/components/CollectionTableBinding/fields/TableReferenceField.tsx +0 -193
- package/src/components/CollectionTableBinding/fields/TableRelationField.tsx +0 -192
- package/src/components/CollectionTableBinding/fields/TableRelationSelectorField.tsx +0 -42
- package/src/components/CollectionTableBinding/fields/TableStorageUpload.tsx +0 -324
- package/src/components/CollectionTableBinding/fields/VirtualTableSelect.tsx +0 -132
- package/src/components/CollectionTableBinding/fields/VirtualTableUserSelect.tsx +0 -41
- package/src/components/CollectionTableBinding/index.tsx +0 -14
- package/src/components/CollectionTableBinding/internal/CollectionTableToolbar.tsx +0 -96
- package/src/components/CollectionTableBinding/internal/EntityTableCell.tsx +0 -309
- package/src/components/CollectionTableBinding/internal/EntityTableCellActions.tsx +0 -80
- package/src/components/CollectionTableBinding/internal/common.tsx +0 -74
- package/src/components/CollectionTableBinding/internal/popup_field/PopupFormField.tsx +0 -422
- package/src/components/CollectionTableBinding/internal/popup_field/useDraggable.tsx +0 -99
- package/src/components/CollectionTableBinding/internal/popup_field/useWindowSize.tsx +0 -22
- package/src/components/CollectionTableBinding/table_bindings.tsx +0 -350
- package/src/components/CollectionViewBinding/BoardCardBinding.tsx +0 -263
- package/src/components/CollectionViewBinding/CollectionBoardViewBinding.tsx +0 -662
- package/src/components/CollectionViewBinding/CollectionCardViewBinding.tsx +0 -159
- package/src/components/CollectionViewBinding/CollectionListViewBinding.tsx +0 -1430
- package/src/components/CollectionViewBinding/CollectionViewActions.tsx +0 -227
- package/src/components/CollectionViewBinding/CollectionViewBinding.tsx +0 -1603
- package/src/components/CollectionViewBinding/CollectionViewStartActions.tsx +0 -240
- package/src/components/CollectionViewBinding/EntityCardBinding.tsx +0 -239
- package/src/components/CollectionViewBinding/FilterPresetsButton.tsx +0 -298
- package/src/components/CollectionViewBinding/FiltersDialog.tsx +0 -218
- package/src/components/CollectionViewBinding/SearchExplanation.tsx +0 -106
- package/src/components/CollectionViewBinding/SearchHighlight.tsx +0 -311
- package/src/components/CollectionViewBinding/SlotValue.tsx +0 -156
- package/src/components/CollectionViewBinding/SortButton.tsx +0 -354
- package/src/components/CollectionViewBinding/SplitListCloseButton.tsx +0 -49
- package/src/components/CollectionViewBinding/SplitListShowButton.tsx +0 -28
- package/src/components/CollectionViewBinding/SplitListView.tsx +0 -488
- package/src/components/CollectionViewBinding/SplitViewContext.tsx +0 -34
- package/src/components/CollectionViewBinding/ViewModeToggle.tsx +0 -250
- package/src/components/CollectionViewBinding/hooks/useCollectionInlineEditor.ts +0 -81
- package/src/components/CollectionViewBinding/hooks/useKanbanDragAndDrop.ts +0 -181
- package/src/components/CollectionViewBinding/useBoardDataController.tsx +0 -802
- package/src/components/CollectionViewBinding/usePreviewSlots.ts +0 -703
- package/src/components/CollectionViewBinding/useSelectionController.tsx +0 -40
- package/src/components/CollectionViewBinding/utils.ts +0 -22
- package/src/components/DefaultAppBar.tsx +0 -264
- package/src/components/DefaultDrawer.tsx +0 -593
- package/src/components/DeleteEntityDialog.tsx +0 -205
- package/src/components/DetailViewBinding.tsx +0 -731
- package/src/components/DrawerNavigationGroup.tsx +0 -141
- package/src/components/DrawerNavigationItem.tsx +0 -115
- package/src/components/EditFormActions.tsx +0 -303
- package/src/components/EditViewBinding.tsx +0 -1069
- package/src/components/EntityDisplayHeader.tsx +0 -170
- package/src/components/EntityIdentityBar.tsx +0 -428
- package/src/components/EntityInspector.tsx +0 -156
- package/src/components/EntityPreviewBinding.tsx +0 -432
- package/src/components/EntityPreviewNesting.tsx +0 -50
- package/src/components/EntityViewBinding.tsx +0 -374
- package/src/components/FieldCaption.tsx +0 -14
- package/src/components/HomePage/ContentHomePage.tsx +0 -586
- package/src/components/HomePage/FavouritesView.tsx +0 -60
- package/src/components/HomePage/HomePageDnD.tsx +0 -704
- package/src/components/HomePage/NavigationCard.tsx +0 -81
- package/src/components/HomePage/NavigationCardBinding.tsx +0 -107
- package/src/components/HomePage/NavigationGroup.tsx +0 -156
- package/src/components/HomePage/RenameGroupDialog.tsx +0 -123
- package/src/components/HomePage/SmallNavigationCard.tsx +0 -41
- package/src/components/HomePage/index.tsx +0 -5
- package/src/components/InlineEntityPreview.tsx +0 -149
- package/src/components/JsonPreviewBinding.tsx +0 -66
- package/src/components/PropertyCollectionView.tsx +0 -336
- package/src/components/PropertyConfigBadge.tsx +0 -28
- package/src/components/PropertyIdCopyTooltip.tsx +0 -47
- package/src/components/RebaseAuthGate.tsx +0 -44
- package/src/components/RebaseCMS.tsx +0 -30
- package/src/components/RebaseLayout.tsx +0 -80
- package/src/components/RebaseNavigation.tsx +0 -369
- package/src/components/RebaseRouteDefs.tsx +0 -127
- package/src/components/RebaseShell.tsx +0 -83
- package/src/components/ReferenceTable/SelectionTableBinding.tsx +0 -389
- package/src/components/ReferenceWidget.tsx +0 -156
- package/src/components/RelationSelector.tsx +0 -926
- package/src/components/SearchIconsView.tsx +0 -78
- package/src/components/SelectableTable/SelectableTable.tsx +0 -309
- package/src/components/SelectableTable/SelectableTableContext.tsx +0 -7
- package/src/components/SelectableTable/SelectionStore.ts +0 -43
- package/src/components/SelectableTable/filters/BooleanFilterField.tsx +0 -59
- package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +0 -146
- package/src/components/SelectableTable/filters/FilterFieldBinding.tsx +0 -190
- package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +0 -250
- package/src/components/SelectableTable/filters/RelationFilterField.tsx +0 -238
- package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +0 -282
- package/src/components/SelectableTable/filters/null_filter.ts +0 -63
- package/src/components/SideDialogs.tsx +0 -238
- package/src/components/SidePanelBinding.tsx +0 -361
- package/src/components/SidePanelProvider.tsx +0 -80
- package/src/components/UserSelector.tsx +0 -513
- package/src/components/admin/CreationResultDialog.tsx +0 -138
- package/src/components/admin/index.ts +0 -1
- package/src/components/app/AppBar.tsx +0 -17
- package/src/components/app/Drawer.tsx +0 -38
- package/src/components/app/Scaffold.tsx +0 -366
- package/src/components/app/index.ts +0 -4
- package/src/components/app/useApp.tsx +0 -36
- package/src/components/common/default_entity_actions.tsx +0 -440
- package/src/components/common/index.ts +0 -1
- package/src/components/field_configs.tsx +0 -506
- package/src/components/history/EntityHistoryEntry.tsx +0 -203
- package/src/components/history/EntityHistoryView.tsx +0 -206
- package/src/components/history/LastEditedByFormAction.tsx +0 -24
- package/src/components/history/LastEditedByIndicator.tsx +0 -95
- package/src/components/history/UserChip.tsx +0 -15
- package/src/components/history/index.tsx +0 -5
- package/src/components/index.ts +0 -63
- package/src/contexts/BreacrumbsContext.tsx +0 -45
- package/src/contexts/SideDialogsControllerContext.tsx +0 -5
- package/src/contexts/SidePanelControllerContext.tsx +0 -5
- package/src/data_export/export/BasicExportAction.tsx +0 -142
- package/src/data_export/export/ExportCollectionAction.tsx +0 -321
- package/src/data_export/export/export.ts +0 -295
- package/src/data_export/export/fetch_export_data.ts +0 -90
- package/src/data_export/export/index.ts +0 -4
- package/src/data_export/index.ts +0 -1
- package/src/data_import/components/DataNewPropertiesMapping.tsx +0 -261
- package/src/data_import/components/ImportFileUpload.tsx +0 -42
- package/src/data_import/components/ImportNewPropertyFieldPreview.tsx +0 -58
- package/src/data_import/components/ImportSaveInProgress.tsx +0 -121
- package/src/data_import/components/index.ts +0 -4
- package/src/data_import/hooks/index.ts +0 -1
- package/src/data_import/hooks/useImportConfig.tsx +0 -34
- package/src/data_import/import/ImportCollectionAction.tsx +0 -461
- package/src/data_import/import/index.ts +0 -1
- package/src/data_import/index.ts +0 -5
- package/src/data_import/types/column_mapping.ts +0 -32
- package/src/data_import/types/index.ts +0 -1
- package/src/data_import/utils/csv.ts +0 -153
- package/src/data_import/utils/data.ts +0 -181
- package/src/data_import/utils/file_headers.ts +0 -14
- package/src/data_import/utils/file_to_json.ts +0 -149
- package/src/data_import/utils/get_import_inference_type.ts +0 -33
- package/src/data_import/utils/get_properties_mapping.ts +0 -67
- package/src/data_import/utils/index.ts +0 -5
- package/src/data_import/utils/save_entities.ts +0 -138
- package/src/data_import/utils/transforms.ts +0 -70
- package/src/editor/components/SlashCommandMenu.tsx +0 -532
- package/src/editor/components/editor-bubble-item.tsx +0 -32
- package/src/editor/components/editor-bubble.tsx +0 -143
- package/src/editor/components/image-bubble.tsx +0 -183
- package/src/editor/components/index.ts +0 -14
- package/src/editor/components/table-bubble.tsx +0 -233
- package/src/editor/editor.tsx +0 -529
- package/src/editor/extensions/HighlightDecorationExtension.ts +0 -115
- package/src/editor/extensions/Image.ts +0 -159
- package/src/editor/extensions/TextLoadingDecorationExtension.tsx +0 -107
- package/src/editor/extensions/clipboard.ts +0 -72
- package/src/editor/extensions/custom-keymap.ts +0 -25
- package/src/editor/extensions/drag-and-drop.tsx +0 -508
- package/src/editor/hooks/useProseMirror.ts +0 -126
- package/src/editor/hooks/useProseMirrorContext.ts +0 -15
- package/src/editor/index.ts +0 -2
- package/src/editor/markdown-it-plugins.d.ts +0 -24
- package/src/editor/markdown.ts +0 -204
- package/src/editor/nodeViews/ImageComponent.tsx +0 -20
- package/src/editor/nodeViews/ReactNodeView.tsx +0 -89
- package/src/editor/nodeViews/TaskItemComponent.tsx +0 -30
- package/src/editor/nodeViews/index.ts +0 -35
- package/src/editor/plugins/index.ts +0 -58
- package/src/editor/plugins/inputrules.ts +0 -82
- package/src/editor/plugins/placeholderPlugin.ts +0 -55
- package/src/editor/plugins/slashCommandPlugin.ts +0 -65
- package/src/editor/schema.ts +0 -339
- package/src/editor/selectors/ai-selector.tsx +0 -110
- package/src/editor/selectors/color-selector.tsx +0 -199
- package/src/editor/selectors/link-selector.tsx +0 -122
- package/src/editor/selectors/node-selector.tsx +0 -159
- package/src/editor/selectors/text-buttons.tsx +0 -79
- package/src/editor/types.ts +0 -6
- package/src/editor/useProseMirror.ts +0 -125
- package/src/editor/utils/prosemirror-utils.ts +0 -113
- package/src/editor/utils/remove_classes.ts +0 -18
- package/src/editor/utils/useDebouncedCallback.ts +0 -25
- package/src/form/EntityForm.tsx +0 -761
- package/src/form/EntityFormActions.tsx +0 -160
- package/src/form/EntityFormBinding.tsx +0 -342
- package/src/form/PropertyFieldBinding.tsx +0 -348
- package/src/form/components/ErrorFocus.tsx +0 -44
- package/src/form/components/FieldBlock.tsx +0 -189
- package/src/form/components/FieldHelperText.tsx +0 -84
- package/src/form/components/FormRail.tsx +0 -153
- package/src/form/components/FormSections.tsx +0 -145
- package/src/form/components/LabelWithIcon.tsx +0 -43
- package/src/form/components/LabelWithIconAndTooltip.tsx +0 -28
- package/src/form/components/LocalChangesMenu.tsx +0 -147
- package/src/form/components/StorageItemPreview.tsx +0 -81
- package/src/form/components/StorageUploadProgress.tsx +0 -118
- package/src/form/components/index.tsx +0 -6
- package/src/form/components/useRailVisible.tsx +0 -47
- package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +0 -109
- package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +0 -172
- package/src/form/field_bindings/BinaryFieldBinding.tsx +0 -177
- package/src/form/field_bindings/BlockFieldBinding.tsx +0 -282
- package/src/form/field_bindings/DateTimeFieldBinding.tsx +0 -78
- package/src/form/field_bindings/GeopointFieldBinding.tsx +0 -200
- package/src/form/field_bindings/KeyValueFieldBinding.tsx +0 -574
- package/src/form/field_bindings/MapFieldBinding.tsx +0 -120
- package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +0 -259
- package/src/form/field_bindings/MultiSelectFieldBinding.tsx +0 -130
- package/src/form/field_bindings/MultipleRelationFieldBinding.tsx +0 -168
- package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +0 -94
- package/src/form/field_bindings/ReferenceFieldBinding.tsx +0 -146
- package/src/form/field_bindings/RelationFieldBinding.tsx +0 -202
- package/src/form/field_bindings/RepeatFieldBinding.tsx +0 -143
- package/src/form/field_bindings/SelectFieldBinding.tsx +0 -111
- package/src/form/field_bindings/StorageUploadFieldBinding.tsx +0 -521
- package/src/form/field_bindings/SwitchFieldBinding.tsx +0 -70
- package/src/form/field_bindings/TextFieldBinding.tsx +0 -189
- package/src/form/field_bindings/UserSelectFieldBinding.tsx +0 -71
- package/src/form/field_bindings/VectorFieldBinding.tsx +0 -209
- package/src/form/form_utils.ts +0 -243
- package/src/form/index.tsx +0 -36
- package/src/form/useClearRestoreValue.tsx +0 -36
- package/src/form/useUndoableDiscard.ts +0 -39
- package/src/form/validation.ts +0 -583
- package/src/hooks/index.ts +0 -16
- package/src/hooks/navigation/contexts/CollectionRegistryContext.tsx +0 -22
- package/src/hooks/navigation/contexts/NavigationStateContext.tsx +0 -16
- package/src/hooks/navigation/contexts/UrlContext.tsx +0 -24
- package/src/hooks/navigation/contexts/index.ts +0 -14
- package/src/hooks/navigation/useAsyncResolver.ts +0 -100
- package/src/hooks/navigation/useBuildCollectionRegistryController.tsx +0 -218
- package/src/hooks/navigation/useBuildNavigationStateController.tsx +0 -134
- package/src/hooks/navigation/useBuildUrlController.tsx +0 -66
- package/src/hooks/navigation/useNavigationResolution.ts +0 -271
- package/src/hooks/navigation/useResolvedCollections.ts +0 -102
- package/src/hooks/navigation/useResolvedViews.tsx +0 -139
- package/src/hooks/navigation/useTopLevelNavigation.ts +0 -273
- package/src/hooks/navigation/utils.ts +0 -200
- package/src/hooks/useAdminContext.tsx +0 -83
- package/src/hooks/useBreadcrumbsController.tsx +0 -17
- package/src/hooks/useBuildSideDialogsController.tsx +0 -145
- package/src/hooks/useBuildSidePanel.tsx +0 -315
- package/src/hooks/useChildViewSource.ts +0 -46
- package/src/hooks/useEntityDisplay.tsx +0 -262
- package/src/hooks/useEntityDisplayTitle.tsx +0 -49
- package/src/hooks/useHistory.ts +0 -178
- package/src/hooks/useRecordActions.tsx +0 -69
- package/src/hooks/useResolvedNavigationFrom.tsx +0 -167
- package/src/hooks/useResolvedUsers.ts +0 -148
- package/src/hooks/useSelectionDialog.tsx +0 -58
- package/src/hooks/useSideDialogsController.tsx +0 -25
- package/src/hooks/useSidePanel.tsx +0 -13
- package/src/index.ts +0 -124
- package/src/preview/PropertyPreview.tsx +0 -331
- package/src/preview/compact_text.ts +0 -68
- package/src/preview/components/ArrayEnumPreview.tsx +0 -39
- package/src/preview/components/BooleanPreview.tsx +0 -28
- package/src/preview/components/DatePreview.tsx +0 -106
- package/src/preview/components/EmptyValue.tsx +0 -10
- package/src/preview/components/EnumValuesChip.tsx +0 -39
- package/src/preview/components/ImagePreview.tsx +0 -144
- package/src/preview/components/InlineEntityListPreview.tsx +0 -42
- package/src/preview/components/ReferencePreview.tsx +0 -235
- package/src/preview/components/RelationPreview.tsx +0 -271
- package/src/preview/components/StorageThumbnail.tsx +0 -147
- package/src/preview/components/UrlComponentPreview.tsx +0 -116
- package/src/preview/components/UserPreview.tsx +0 -30
- package/src/preview/components/date_fns_locales.ts +0 -125
- package/src/preview/index.ts +0 -26
- package/src/preview/property_previews/ArrayOfMapsPreview.tsx +0 -73
- package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +0 -67
- package/src/preview/property_previews/ArrayOfRelationsPreview.tsx +0 -77
- package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +0 -49
- package/src/preview/property_previews/ArrayOfStringsPreview.tsx +0 -70
- package/src/preview/property_previews/ArrayOneOfPreview.tsx +0 -79
- package/src/preview/property_previews/ArrayPropertyEnumPreview.tsx +0 -35
- package/src/preview/property_previews/ArrayPropertyPreview.tsx +0 -79
- package/src/preview/property_previews/MapPropertyPreview.tsx +0 -198
- package/src/preview/property_previews/NumberPropertyPreview.tsx +0 -39
- package/src/preview/property_previews/SkeletonPropertyComponent.tsx +0 -276
- package/src/preview/property_previews/StringPropertyPreview.tsx +0 -70
- package/src/preview/util.ts +0 -39
- package/src/routes/CustomViewRoute.tsx +0 -33
- package/src/routes/RebaseRoute.tsx +0 -467
- package/src/routes/index.ts +0 -2
- package/src/types/components/EntityFormActionsProps.tsx +0 -20
- package/src/types/components/EntityFormProps.tsx +0 -119
- package/src/types/components/PropertyPreviewProps.tsx +0 -85
- package/src/types/components/formex.tsx +0 -2
- package/src/types/components/index.ts +0 -3
- package/src/types/fields.tsx +0 -340
- package/src/types/index.ts +0 -4
- package/src/util/dataControllerAdapter.ts +0 -88
- package/src/util/entity_actions.ts +0 -28
- package/src/util/index.ts +0 -5
- package/src/util/navigation_utils.ts +0 -89
- package/src/util/number_format.ts +0 -46
- package/src/util/previews.ts +0 -131
- package/src/util/propertyConfigMapper.ts +0 -134
- package/src/util/property_utils.tsx +0 -236
- package/src/util/resolutions.ts +0 -96
- package/src/util/view_constants.ts +0 -33
- package/src/util/view_mode.ts +0 -176
|
@@ -1,144 +0,0 @@
|
|
|
1
|
-
import { CopyIcon, ExternalLinkIcon, ImageOffIcon } from "@rebasepro/ui";
|
|
2
|
-
import React, { CSSProperties, useMemo, useState, useEffect } from "react";import { IconButton, Tooltip } from "@rebasepro/ui";
|
|
3
|
-
import { PreviewSize } from "../../types/components/PropertyPreviewProps";
|
|
4
|
-
import { getThumbnailMeasure } from "../util";
|
|
5
|
-
import { useTranslation } from "@rebasepro/app";
|
|
6
|
-
import { sanitizeUrl } from "../util";
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* @group Preview components
|
|
10
|
-
*/
|
|
11
|
-
export interface ImagePreviewProps {
|
|
12
|
-
size: PreviewSize,
|
|
13
|
-
url: string,
|
|
14
|
-
/**
|
|
15
|
-
* If true, image fills its container completely with object-fit cover
|
|
16
|
-
*/
|
|
17
|
-
fill?: boolean
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* @group Preview components
|
|
22
|
-
*/
|
|
23
|
-
export function ImagePreview({
|
|
24
|
-
size,
|
|
25
|
-
url,
|
|
26
|
-
fill
|
|
27
|
-
}: ImagePreviewProps) {
|
|
28
|
-
const [hasError, setHasError] = useState(false);
|
|
29
|
-
|
|
30
|
-
useEffect(() => {
|
|
31
|
-
setHasError(false);
|
|
32
|
-
}, [url]);
|
|
33
|
-
|
|
34
|
-
const handleError = () => setHasError(true);
|
|
35
|
-
|
|
36
|
-
const imageSize = useMemo(() => getThumbnailMeasure(size), [size]);
|
|
37
|
-
const { t } = useTranslation();
|
|
38
|
-
|
|
39
|
-
// Fill mode - image fills its container completely
|
|
40
|
-
if (fill) {
|
|
41
|
-
if (hasError) {
|
|
42
|
-
return (
|
|
43
|
-
<div className="w-full h-full flex items-center justify-center bg-surface-100 dark:bg-surface-900 rounded-md">
|
|
44
|
-
<ImageOffIcon className="text-surface-400 dark:text-surface-500"/>
|
|
45
|
-
</div>
|
|
46
|
-
);
|
|
47
|
-
}
|
|
48
|
-
return (
|
|
49
|
-
<img src={url}
|
|
50
|
-
className={"w-full h-full object-cover"}
|
|
51
|
-
key={"fill_image_preview_" + url}
|
|
52
|
-
loading="lazy"
|
|
53
|
-
onError={handleError}
|
|
54
|
-
/>
|
|
55
|
-
);
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
if (size === "small") {
|
|
59
|
-
if (hasError) {
|
|
60
|
-
return (
|
|
61
|
-
<div className="flex items-center justify-center bg-surface-100 dark:bg-surface-900 rounded-md"
|
|
62
|
-
style={{ width: imageSize,
|
|
63
|
-
height: imageSize,
|
|
64
|
-
maxHeight: "100%" }}>
|
|
65
|
-
<ImageOffIcon className="text-surface-400 dark:text-surface-500"/>
|
|
66
|
-
</div>
|
|
67
|
-
);
|
|
68
|
-
}
|
|
69
|
-
return (
|
|
70
|
-
<img src={url}
|
|
71
|
-
className={"rounded-md"}
|
|
72
|
-
key={"tiny_image_preview_" + url}
|
|
73
|
-
onError={handleError}
|
|
74
|
-
style={{
|
|
75
|
-
position: "relative",
|
|
76
|
-
objectFit: "cover",
|
|
77
|
-
width: imageSize,
|
|
78
|
-
height: imageSize,
|
|
79
|
-
maxHeight: "100%"
|
|
80
|
-
}}/>
|
|
81
|
-
);
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
const imageStyle: CSSProperties =
|
|
85
|
-
{
|
|
86
|
-
maxWidth: "100%",
|
|
87
|
-
maxHeight: "100%"
|
|
88
|
-
};
|
|
89
|
-
|
|
90
|
-
return (
|
|
91
|
-
<div
|
|
92
|
-
className="relative flex items-center justify-center max-w-full max-h-full group"
|
|
93
|
-
style={{
|
|
94
|
-
width: imageSize,
|
|
95
|
-
height: imageSize
|
|
96
|
-
}}
|
|
97
|
-
key={"image_preview_" + url}>
|
|
98
|
-
|
|
99
|
-
{hasError ? (
|
|
100
|
-
<div className="w-full h-full flex items-center justify-center bg-surface-100 dark:bg-surface-900 rounded-md">
|
|
101
|
-
<ImageOffIcon className="text-surface-400 dark:text-surface-500"/>
|
|
102
|
-
</div>
|
|
103
|
-
) : (
|
|
104
|
-
<img src={url}
|
|
105
|
-
className={"rounded-md"}
|
|
106
|
-
style={imageStyle}
|
|
107
|
-
onError={handleError}/>
|
|
108
|
-
)}
|
|
109
|
-
|
|
110
|
-
<div className={"flex flex-row gap-2 absolute bottom-[-4px] right-[-4px] invisible group-hover:visible"}>
|
|
111
|
-
{navigator && <Tooltip
|
|
112
|
-
asChild={true}
|
|
113
|
-
title={t("copy_url_to_clipboard")} side={"bottom"}>
|
|
114
|
-
<IconButton
|
|
115
|
-
variant={"filled"}
|
|
116
|
-
size={"smallest"}
|
|
117
|
-
onClick={(e) => {
|
|
118
|
-
e.stopPropagation();
|
|
119
|
-
e.preventDefault();
|
|
120
|
-
return navigator.clipboard.writeText(url);
|
|
121
|
-
}}>
|
|
122
|
-
<CopyIcon className={"text-surface-700 dark:text-surface-300"}/>
|
|
123
|
-
</IconButton>
|
|
124
|
-
</Tooltip>}
|
|
125
|
-
|
|
126
|
-
<Tooltip title={t("open_image_in_new_tab")} side={"bottom"}>
|
|
127
|
-
<IconButton
|
|
128
|
-
className="invisible group-hover:visible"
|
|
129
|
-
variant={"filled"}
|
|
130
|
-
component={"a" as React.ElementType}
|
|
131
|
-
href={sanitizeUrl(url)}
|
|
132
|
-
rel="noopener noreferrer"
|
|
133
|
-
target="_blank"
|
|
134
|
-
size={"smallest"}
|
|
135
|
-
onClick={(e: React.MouseEvent) => e.stopPropagation()}
|
|
136
|
-
>
|
|
137
|
-
<ExternalLinkIcon className={"text-surface-700 dark:text-surface-300"}/>
|
|
138
|
-
</IconButton>
|
|
139
|
-
</Tooltip>
|
|
140
|
-
</div>
|
|
141
|
-
|
|
142
|
-
</div>
|
|
143
|
-
);
|
|
144
|
-
}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import * as React from "react";
|
|
2
|
-
|
|
3
|
-
import { cls } from "@rebasepro/ui";
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* How many links a nested list shows before collapsing the rest into a count.
|
|
7
|
-
*/
|
|
8
|
-
const MAX_INLINE_ITEMS = 3;
|
|
9
|
-
|
|
10
|
-
export type InlineEntityListPreviewProps<T> = {
|
|
11
|
-
items: T[];
|
|
12
|
-
renderItem: (item: T, index: number) => React.ReactNode;
|
|
13
|
-
max?: number;
|
|
14
|
-
className?: string;
|
|
15
|
-
};
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* One wrapping line of inline entity links, with the overflow collapsed into a
|
|
19
|
-
* `+N`. Used for arrays of references or relations that are nested inside
|
|
20
|
-
* another preview, where stacking full-width cards turns a card into a wall.
|
|
21
|
-
*
|
|
22
|
-
* @group Preview components
|
|
23
|
-
*/
|
|
24
|
-
export function InlineEntityListPreview<T>({
|
|
25
|
-
items,
|
|
26
|
-
renderItem,
|
|
27
|
-
max = MAX_INLINE_ITEMS,
|
|
28
|
-
className
|
|
29
|
-
}: InlineEntityListPreviewProps<T>) {
|
|
30
|
-
|
|
31
|
-
if (!items || items.length === 0) return null;
|
|
32
|
-
|
|
33
|
-
const shown = items.slice(0, max);
|
|
34
|
-
const overflow = items.length - shown.length;
|
|
35
|
-
|
|
36
|
-
return <span className={cls("inline-flex flex-wrap items-center gap-x-2 gap-y-0.5 min-w-0 max-w-full", className)}>
|
|
37
|
-
{shown.map((item, index) => renderItem(item, index))}
|
|
38
|
-
{overflow > 0 && <span className={"text-text-secondary dark:text-text-secondary-dark shrink-0"}>
|
|
39
|
-
+{overflow}
|
|
40
|
-
</span>}
|
|
41
|
-
</span>;
|
|
42
|
-
}
|
|
@@ -1,235 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
import * as React from "react";
|
|
3
|
-
|
|
4
|
-
import { EntityReference } from "@rebasepro/types";
|
|
5
|
-
import type { PreviewSize } from "../../types/components/PropertyPreviewProps";
|
|
6
|
-
import { useCustomizationController, useFetch, useComponentOverride, CollectionScopeProvider } from "@rebasepro/app";
|
|
7
|
-
import { Skeleton } from "@rebasepro/ui";
|
|
8
|
-
import { ErrorBoundary } from "@rebasepro/ui";
|
|
9
|
-
import { ErrorView } from "@rebasepro/app";
|
|
10
|
-
import { EntityPreviewBinding, EntityPreviewContainer } from "../../components/EntityPreviewBinding";
|
|
11
|
-
import {
|
|
12
|
-
InlineEntityPreview,
|
|
13
|
-
InlineEntityPreviewMissing,
|
|
14
|
-
InlineEntityPreviewSkeleton
|
|
15
|
-
} from "../../components/InlineEntityPreview";
|
|
16
|
-
import { useIsNestedEntityPreview } from "../../components/EntityPreviewNesting";
|
|
17
|
-
import { useCollectionRegistryController } from "../../hooks/navigation/contexts/CollectionRegistryContext";
|
|
18
|
-
import type { AdminCollection } from "@rebasepro/cms-types";
|
|
19
|
-
|
|
20
|
-
export type ReferencePreviewProps = {
|
|
21
|
-
disabled?: boolean;
|
|
22
|
-
reference: EntityReference,
|
|
23
|
-
size?: PreviewSize;
|
|
24
|
-
previewProperties?: string[];
|
|
25
|
-
onClick?: (e: React.SyntheticEvent) => void;
|
|
26
|
-
hover?: boolean;
|
|
27
|
-
includeEntityLink?: boolean;
|
|
28
|
-
includeId?: boolean;
|
|
29
|
-
textOnly?: boolean;
|
|
30
|
-
};
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* @group Preview components
|
|
34
|
-
*/
|
|
35
|
-
export const ReferencePreview = function ReferencePreview(props: ReferencePreviewProps) {
|
|
36
|
-
const reference = props.reference;
|
|
37
|
-
const nested = useIsNestedEntityPreview();
|
|
38
|
-
if (!(typeof reference === "object" && "isEntityReference" in reference && reference.isEntityReference())) {
|
|
39
|
-
console.warn("Reference preview received value of type", typeof reference);
|
|
40
|
-
if (props.textOnly || nested) {
|
|
41
|
-
return <span>{String(reference)}</span>;
|
|
42
|
-
}
|
|
43
|
-
return <EntityPreviewContainer
|
|
44
|
-
onClick={props.onClick}
|
|
45
|
-
size={props.size ?? "medium"}>
|
|
46
|
-
<ErrorView error={"Unexpected value. Click to edit"}
|
|
47
|
-
tooltip={JSON.stringify(reference)}/>
|
|
48
|
-
</EntityPreviewContainer>;
|
|
49
|
-
}
|
|
50
|
-
return <ErrorBoundary>
|
|
51
|
-
<ReferencePreviewInternal {...props}/>
|
|
52
|
-
</ErrorBoundary>;
|
|
53
|
-
};
|
|
54
|
-
|
|
55
|
-
const DefaultMissingReference: React.FC<{ path: string }> = () => null;
|
|
56
|
-
|
|
57
|
-
function ReferencePreviewInternalInner({
|
|
58
|
-
disabled,
|
|
59
|
-
reference,
|
|
60
|
-
previewProperties,
|
|
61
|
-
size,
|
|
62
|
-
hover,
|
|
63
|
-
onClick,
|
|
64
|
-
includeEntityLink = true,
|
|
65
|
-
includeId = true,
|
|
66
|
-
textOnly,
|
|
67
|
-
collection
|
|
68
|
-
}: ReferencePreviewProps & { collection?: AdminCollection }) {
|
|
69
|
-
const ResolvedMissingReference = useComponentOverride("Entity.MissingReference", DefaultMissingReference);
|
|
70
|
-
const nested = useIsNestedEntityPreview();
|
|
71
|
-
|
|
72
|
-
if (!collection) {
|
|
73
|
-
if (ResolvedMissingReference !== DefaultMissingReference) {
|
|
74
|
-
return <ResolvedMissingReference path={reference.path}/>;
|
|
75
|
-
} else {
|
|
76
|
-
if (textOnly) {
|
|
77
|
-
return <span>{reference.path}</span>;
|
|
78
|
-
}
|
|
79
|
-
if (nested) {
|
|
80
|
-
return <InlineEntityPreviewMissing label={String(reference.id)}
|
|
81
|
-
tooltip={`Collection not found: ${reference.path}`}/>;
|
|
82
|
-
}
|
|
83
|
-
return <EntityPreviewContainer
|
|
84
|
-
onClick={onClick}
|
|
85
|
-
size={size ?? "medium"}>
|
|
86
|
-
<ErrorView error={"Unexpected reference value. Click to edit"}
|
|
87
|
-
tooltip={reference.pathWithId}/>
|
|
88
|
-
</EntityPreviewContainer>;
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
return <ReferencePreviewExisting
|
|
93
|
-
reference={reference}
|
|
94
|
-
collection={collection}
|
|
95
|
-
previewProperties={previewProperties}
|
|
96
|
-
size={size}
|
|
97
|
-
disabled={disabled}
|
|
98
|
-
includeEntityLink={includeEntityLink}
|
|
99
|
-
includeId={includeId}
|
|
100
|
-
onClick={onClick}
|
|
101
|
-
textOnly={textOnly}
|
|
102
|
-
hover={hover}/>
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
function ReferencePreviewInternal(props: ReferencePreviewProps) {
|
|
106
|
-
const collectionRegistryController = useCollectionRegistryController();
|
|
107
|
-
const collection = collectionRegistryController.getCollection(props.reference.path);
|
|
108
|
-
|
|
109
|
-
const content = (
|
|
110
|
-
<ReferencePreviewInternalInner
|
|
111
|
-
{...props}
|
|
112
|
-
collection={collection}
|
|
113
|
-
/>
|
|
114
|
-
);
|
|
115
|
-
|
|
116
|
-
if (collection) {
|
|
117
|
-
return (
|
|
118
|
-
<CollectionScopeProvider collection={collection}>
|
|
119
|
-
{content}
|
|
120
|
-
</CollectionScopeProvider>
|
|
121
|
-
);
|
|
122
|
-
}
|
|
123
|
-
return content;
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
function ReferencePreviewExisting<M extends Record<string, unknown> = Record<string, unknown>>({
|
|
127
|
-
reference,
|
|
128
|
-
collection,
|
|
129
|
-
previewProperties,
|
|
130
|
-
size,
|
|
131
|
-
disabled,
|
|
132
|
-
includeEntityLink,
|
|
133
|
-
includeId,
|
|
134
|
-
onClick,
|
|
135
|
-
hover,
|
|
136
|
-
textOnly
|
|
137
|
-
}: ReferencePreviewProps & {
|
|
138
|
-
collection: AdminCollection<M>
|
|
139
|
-
}) {
|
|
140
|
-
|
|
141
|
-
const ResolvedEntityPreview = useComponentOverride("EntityPreview", EntityPreviewBinding);
|
|
142
|
-
const customizationController = useCustomizationController();
|
|
143
|
-
const nested = useIsNestedEntityPreview();
|
|
144
|
-
|
|
145
|
-
// Nested inside another preview, or filling a title slot: one line of text,
|
|
146
|
-
// not a second card. See {@link InlineEntityPreview}.
|
|
147
|
-
const inline = nested || Boolean(textOnly);
|
|
148
|
-
|
|
149
|
-
const {
|
|
150
|
-
entity,
|
|
151
|
-
dataLoading,
|
|
152
|
-
dataLoadingError
|
|
153
|
-
} = useFetch({
|
|
154
|
-
path: reference.path,
|
|
155
|
-
entityId: reference.id,
|
|
156
|
-
collection,
|
|
157
|
-
useCache: true
|
|
158
|
-
});
|
|
159
|
-
|
|
160
|
-
// Only what the fetch currently reports — see the note in RelationPreview:
|
|
161
|
-
// the module-level Map that used to back this kept a deleted row on screen
|
|
162
|
-
// for the rest of the session, and across a sign-out.
|
|
163
|
-
const usedEntity = entity;
|
|
164
|
-
|
|
165
|
-
let body: React.ReactNode;
|
|
166
|
-
|
|
167
|
-
if (!reference) {
|
|
168
|
-
body = <ErrorView error={"Reference not set"}/>;
|
|
169
|
-
} else if (usedEntity && !usedEntity.values) {
|
|
170
|
-
body = <ErrorView error={"Reference does not exist"}
|
|
171
|
-
tooltip={reference.path}/>;
|
|
172
|
-
}
|
|
173
|
-
if (body) {
|
|
174
|
-
if (inline) {
|
|
175
|
-
return <InlineEntityPreviewMissing label={String(reference.id)}
|
|
176
|
-
tooltip={reference.pathWithId}/>;
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
return (
|
|
180
|
-
<EntityPreviewContainer onClick={disabled ? undefined : onClick}
|
|
181
|
-
hover={disabled ? undefined : hover}
|
|
182
|
-
size={size}>
|
|
183
|
-
{body}
|
|
184
|
-
</EntityPreviewContainer>
|
|
185
|
-
);
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
if (dataLoading && !usedEntity) {
|
|
189
|
-
if (inline) {
|
|
190
|
-
return <InlineEntityPreviewSkeleton/>;
|
|
191
|
-
}
|
|
192
|
-
return (
|
|
193
|
-
<EntityPreviewContainer onClick={disabled ? undefined : onClick}
|
|
194
|
-
hover={disabled ? undefined : hover}
|
|
195
|
-
size={size}>
|
|
196
|
-
<Skeleton/>
|
|
197
|
-
</EntityPreviewContainer>
|
|
198
|
-
);
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
if (!usedEntity) {
|
|
202
|
-
if (inline) {
|
|
203
|
-
return <InlineEntityPreviewMissing label={String(reference.id)}
|
|
204
|
-
tooltip={"Entity not found"}/>;
|
|
205
|
-
}
|
|
206
|
-
return (
|
|
207
|
-
<EntityPreviewContainer onClick={disabled ? undefined : onClick}
|
|
208
|
-
hover={disabled ? undefined : hover}
|
|
209
|
-
size={size}>
|
|
210
|
-
<ErrorView error={"Entity not found"}/>
|
|
211
|
-
</EntityPreviewContainer>
|
|
212
|
-
);
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
if (inline) {
|
|
216
|
-
return <InlineEntityPreview entity={usedEntity}
|
|
217
|
-
collection={collection}
|
|
218
|
-
disabled={disabled}
|
|
219
|
-
onClick={onClick}
|
|
220
|
-
// In a title slot the row itself is the click target; only a
|
|
221
|
-
// preview nested inside a card opens its own side panel.
|
|
222
|
-
includeEntityLink={!textOnly && includeEntityLink !== false}/>;
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
return <ResolvedEntityPreview size={size}
|
|
226
|
-
previewKeys={previewProperties}
|
|
227
|
-
disabled={disabled}
|
|
228
|
-
entity={usedEntity}
|
|
229
|
-
collection={collection}
|
|
230
|
-
onClick={onClick}
|
|
231
|
-
includeEntityLink={includeEntityLink}
|
|
232
|
-
includeId={includeId}
|
|
233
|
-
hover={hover}/>;
|
|
234
|
-
|
|
235
|
-
}
|
|
@@ -1,271 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
import * as React from "react";
|
|
3
|
-
|
|
4
|
-
import { Entity, EntityRelation } from "@rebasepro/types";
|
|
5
|
-
import type { PreviewSize } from "../../types/components/PropertyPreviewProps";
|
|
6
|
-
import { useCustomizationController, useFetch, ErrorView, useComponentOverride, CollectionScopeProvider } from "@rebasepro/app";
|
|
7
|
-
import { Skeleton } from "@rebasepro/ui";
|
|
8
|
-
import { EntityPreviewBinding, EntityPreviewContainer } from "../../components/EntityPreviewBinding";
|
|
9
|
-
import {
|
|
10
|
-
InlineEntityPreview,
|
|
11
|
-
InlineEntityPreviewMissing,
|
|
12
|
-
InlineEntityPreviewSkeleton
|
|
13
|
-
} from "../../components/InlineEntityPreview";
|
|
14
|
-
import { useIsNestedEntityPreview } from "../../components/EntityPreviewNesting";
|
|
15
|
-
import { useCollectionRegistryController } from "../../hooks/navigation/contexts/CollectionRegistryContext";
|
|
16
|
-
import type { AdminCollection } from "@rebasepro/cms-types";
|
|
17
|
-
|
|
18
|
-
export type RelationPreviewProps = {
|
|
19
|
-
disabled?: boolean;
|
|
20
|
-
relation: EntityRelation,
|
|
21
|
-
size?: PreviewSize;
|
|
22
|
-
previewProperties?: string[];
|
|
23
|
-
onClick?: (e: React.SyntheticEvent) => void;
|
|
24
|
-
hover?: boolean;
|
|
25
|
-
includeEntityLink?: boolean;
|
|
26
|
-
includeId?: boolean;
|
|
27
|
-
textOnly?: boolean;
|
|
28
|
-
};
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* Extract a display name from a plain relation-shaped object that isn't
|
|
32
|
-
* a proper EntityRelation instance. Tries common name fields in the
|
|
33
|
-
* entity's values, then falls back to the id.
|
|
34
|
-
*/
|
|
35
|
-
function extractDisplayFromPlainObject(obj: unknown): string {
|
|
36
|
-
if (!obj || typeof obj !== "object") return "—";
|
|
37
|
-
const record = obj as Record<string, unknown>;
|
|
38
|
-
|
|
39
|
-
// Try data.values.{name,title,...} (EntityRelation.data is a Entity with .values)
|
|
40
|
-
const data = record.data;
|
|
41
|
-
if (data && typeof data === "object") {
|
|
42
|
-
const dataRecord = data as Record<string, unknown>;
|
|
43
|
-
const values = (dataRecord.values && typeof dataRecord.values === "object")
|
|
44
|
-
? dataRecord.values as Record<string, unknown>
|
|
45
|
-
: dataRecord;
|
|
46
|
-
const nameFields = ["name", "title", "label", "display_name", "displayName", "email", "username"];
|
|
47
|
-
for (const field of nameFields) {
|
|
48
|
-
const v = values[field];
|
|
49
|
-
if (v && typeof v === "string") return v;
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
// Try direct fields on the object itself (some serialization paths flatten the data)
|
|
54
|
-
const directFields = ["name", "title", "label", "display_name", "displayName", "email"];
|
|
55
|
-
for (const field of directFields) {
|
|
56
|
-
const v = record[field];
|
|
57
|
-
if (v && typeof v === "string") return v;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
// Last resort: show the id
|
|
61
|
-
if ("id" in record && record.id != null) return String(record.id);
|
|
62
|
-
|
|
63
|
-
return "—";
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
/**
|
|
67
|
-
* @group Preview components
|
|
68
|
-
*/
|
|
69
|
-
export const RelationPreview = function RelationPreview(props: RelationPreviewProps) {
|
|
70
|
-
const relation = props.relation;
|
|
71
|
-
const nested = useIsNestedEntityPreview();
|
|
72
|
-
if (!(typeof relation === "object" && "isEntityRelation" in relation && relation.isEntityRelation())) {
|
|
73
|
-
console.warn("Relation preview received value of type", typeof relation);
|
|
74
|
-
if (props.textOnly || nested) {
|
|
75
|
-
const display = extractDisplayFromPlainObject(relation);
|
|
76
|
-
return <span className="truncate">{display}</span>;
|
|
77
|
-
}
|
|
78
|
-
return <EntityPreviewContainer
|
|
79
|
-
onClick={props.onClick}
|
|
80
|
-
size={props.size}>
|
|
81
|
-
<ErrorView error={"Unexpected value. Click to edit"}
|
|
82
|
-
tooltip={JSON.stringify(relation)}/>
|
|
83
|
-
</EntityPreviewContainer>;
|
|
84
|
-
}
|
|
85
|
-
return <RelationPreviewInternal {...props}/>;
|
|
86
|
-
};
|
|
87
|
-
|
|
88
|
-
const DefaultMissingReference: React.FC<{ path: string }> = () => null;
|
|
89
|
-
|
|
90
|
-
function RelationPreviewInternalInner({
|
|
91
|
-
disabled,
|
|
92
|
-
relation,
|
|
93
|
-
previewProperties,
|
|
94
|
-
size,
|
|
95
|
-
hover,
|
|
96
|
-
onClick,
|
|
97
|
-
includeEntityLink = true,
|
|
98
|
-
includeId = true,
|
|
99
|
-
textOnly,
|
|
100
|
-
collection
|
|
101
|
-
}: RelationPreviewProps & { collection?: AdminCollection }) {
|
|
102
|
-
const ResolvedMissingReference = useComponentOverride("Entity.MissingReference", DefaultMissingReference);
|
|
103
|
-
const nested = useIsNestedEntityPreview();
|
|
104
|
-
|
|
105
|
-
if (!collection) {
|
|
106
|
-
if (ResolvedMissingReference !== DefaultMissingReference) {
|
|
107
|
-
return <ResolvedMissingReference path={relation.path}/>;
|
|
108
|
-
} else {
|
|
109
|
-
if (textOnly) {
|
|
110
|
-
return <span>{relation.path}</span>;
|
|
111
|
-
}
|
|
112
|
-
if (nested) {
|
|
113
|
-
return <InlineEntityPreviewMissing label={String(relation.id)}
|
|
114
|
-
tooltip={`Collection not found: ${relation.path}`}/>;
|
|
115
|
-
}
|
|
116
|
-
return <EntityPreviewContainer size={size}>
|
|
117
|
-
<ErrorView error={`Collection not found: ${relation.path}`}/>
|
|
118
|
-
</EntityPreviewContainer>;
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
return <RelationPreviewExisting
|
|
123
|
-
relation={relation}
|
|
124
|
-
collection={collection}
|
|
125
|
-
previewProperties={previewProperties}
|
|
126
|
-
size={size}
|
|
127
|
-
disabled={disabled}
|
|
128
|
-
includeEntityLink={includeEntityLink}
|
|
129
|
-
includeId={includeId}
|
|
130
|
-
onClick={onClick}
|
|
131
|
-
textOnly={textOnly}
|
|
132
|
-
hover={hover}/>
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
function RelationPreviewInternal(props: RelationPreviewProps) {
|
|
136
|
-
const collectionRegistryController = useCollectionRegistryController();
|
|
137
|
-
const collection = collectionRegistryController.getCollection(props.relation.path);
|
|
138
|
-
|
|
139
|
-
const content = (
|
|
140
|
-
<RelationPreviewInternalInner
|
|
141
|
-
{...props}
|
|
142
|
-
collection={collection}
|
|
143
|
-
/>
|
|
144
|
-
);
|
|
145
|
-
|
|
146
|
-
if (collection) {
|
|
147
|
-
return (
|
|
148
|
-
<CollectionScopeProvider collection={collection}>
|
|
149
|
-
{content}
|
|
150
|
-
</CollectionScopeProvider>
|
|
151
|
-
);
|
|
152
|
-
}
|
|
153
|
-
return content;
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
function RelationPreviewExisting<M extends Record<string, unknown> = Record<string, unknown>>({
|
|
157
|
-
relation,
|
|
158
|
-
collection,
|
|
159
|
-
previewProperties,
|
|
160
|
-
size,
|
|
161
|
-
disabled,
|
|
162
|
-
includeEntityLink,
|
|
163
|
-
includeId,
|
|
164
|
-
onClick,
|
|
165
|
-
hover,
|
|
166
|
-
textOnly
|
|
167
|
-
}: RelationPreviewProps & {
|
|
168
|
-
collection: AdminCollection<M>
|
|
169
|
-
}) {
|
|
170
|
-
|
|
171
|
-
// admin wire format embeds relation data as { id, path, values }
|
|
172
|
-
const passedEntity = relation.data as Entity<M> | undefined;
|
|
173
|
-
const ResolvedEntityPreview = useComponentOverride("EntityPreview", EntityPreviewBinding);
|
|
174
|
-
const customizationController = useCustomizationController();
|
|
175
|
-
const nested = useIsNestedEntityPreview();
|
|
176
|
-
|
|
177
|
-
// Nested inside another preview, or filling a title slot: one line of text,
|
|
178
|
-
// not a second card. See {@link InlineEntityPreview}.
|
|
179
|
-
const inline = nested || Boolean(textOnly);
|
|
180
|
-
|
|
181
|
-
const {
|
|
182
|
-
entity,
|
|
183
|
-
dataLoading,
|
|
184
|
-
dataLoadingError
|
|
185
|
-
} = useFetch({
|
|
186
|
-
path: relation.path,
|
|
187
|
-
entityId: passedEntity ? undefined : relation.id,
|
|
188
|
-
collection,
|
|
189
|
-
useCache: true
|
|
190
|
-
});
|
|
191
|
-
|
|
192
|
-
// Only what the fetch currently reports. There used to be a module-level
|
|
193
|
-
// Map behind this, written on every successful fetch and never invalidated:
|
|
194
|
-
// when the target row was deleted `useFetch` correctly reported it gone and
|
|
195
|
-
// the card carried on rendering the copy in the Map, so the "missing"
|
|
196
|
-
// branches below were unreachable for anything previewed this session — and
|
|
197
|
-
// the Map outlived a sign-out. `useFetch` keeps its own cache, seeds the
|
|
198
|
-
// first render from it, and clears the entry when the row disappears.
|
|
199
|
-
const usedEntity = passedEntity ?? entity;
|
|
200
|
-
|
|
201
|
-
let body: React.ReactNode;
|
|
202
|
-
|
|
203
|
-
if (!relation) {
|
|
204
|
-
body = <ErrorView error={"Relation not set"}/>;
|
|
205
|
-
} else if (usedEntity && !usedEntity.values) {
|
|
206
|
-
body = <ErrorView error={"Relation does not exist"}
|
|
207
|
-
tooltip={relation.path}/>;
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
if (body) {
|
|
211
|
-
if (inline) {
|
|
212
|
-
return <InlineEntityPreviewMissing label={String(relation.id)}
|
|
213
|
-
tooltip={relation.pathWithId}/>;
|
|
214
|
-
}
|
|
215
|
-
return (
|
|
216
|
-
<EntityPreviewContainer onClick={disabled ? undefined : onClick}
|
|
217
|
-
hover={disabled ? undefined : hover}
|
|
218
|
-
size={size}>
|
|
219
|
-
{body}
|
|
220
|
-
</EntityPreviewContainer>
|
|
221
|
-
);
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
if (dataLoading && !usedEntity) {
|
|
225
|
-
if (inline) {
|
|
226
|
-
return <InlineEntityPreviewSkeleton/>;
|
|
227
|
-
}
|
|
228
|
-
return (
|
|
229
|
-
<EntityPreviewContainer onClick={disabled ? undefined : onClick}
|
|
230
|
-
hover={disabled ? undefined : hover}
|
|
231
|
-
size={size}>
|
|
232
|
-
<Skeleton/>
|
|
233
|
-
</EntityPreviewContainer>
|
|
234
|
-
);
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
if (!usedEntity) {
|
|
238
|
-
if (inline) {
|
|
239
|
-
return <InlineEntityPreviewMissing label={String(relation.id)}
|
|
240
|
-
tooltip={"Entity not found"}/>;
|
|
241
|
-
}
|
|
242
|
-
return (
|
|
243
|
-
<EntityPreviewContainer onClick={disabled ? undefined : onClick}
|
|
244
|
-
hover={disabled ? undefined : hover}
|
|
245
|
-
size={size}>
|
|
246
|
-
<ErrorView error={"Entity not found"}/>
|
|
247
|
-
</EntityPreviewContainer>
|
|
248
|
-
);
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
if (inline) {
|
|
252
|
-
return <InlineEntityPreview entity={usedEntity}
|
|
253
|
-
collection={collection}
|
|
254
|
-
disabled={disabled}
|
|
255
|
-
onClick={onClick}
|
|
256
|
-
// In a title slot the row itself is the click target; only a
|
|
257
|
-
// preview nested inside a card opens its own side panel.
|
|
258
|
-
includeEntityLink={!textOnly && includeEntityLink !== false}/>;
|
|
259
|
-
}
|
|
260
|
-
|
|
261
|
-
return <ResolvedEntityPreview size={size}
|
|
262
|
-
previewKeys={previewProperties}
|
|
263
|
-
disabled={disabled}
|
|
264
|
-
entity={usedEntity}
|
|
265
|
-
collection={collection}
|
|
266
|
-
onClick={onClick}
|
|
267
|
-
includeEntityLink={includeEntityLink}
|
|
268
|
-
includeId={false}
|
|
269
|
-
hover={hover}/>;
|
|
270
|
-
|
|
271
|
-
}
|