@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,156 +0,0 @@
|
|
|
1
|
-
import type { AdminCollection } from "@rebasepro/cms-types";
|
|
2
|
-
import type { Entity } from "@rebasepro/types";
|
|
3
|
-
import type { FormContext } from "../types/fields";
|
|
4
|
-
import React, { Suspense, useEffect } from "react";
|
|
5
|
-
import {
|
|
6
|
-
CircularProgressCenter,
|
|
7
|
-
cls,
|
|
8
|
-
defaultBorderMixin,
|
|
9
|
-
ErrorBoundary,
|
|
10
|
-
IconButton,
|
|
11
|
-
iconSize,
|
|
12
|
-
lazyChunk,
|
|
13
|
-
Tab,
|
|
14
|
-
Tabs,
|
|
15
|
-
XIcon
|
|
16
|
-
} from "@rebasepro/ui";
|
|
17
|
-
import { useTranslation } from "@rebasepro/app";
|
|
18
|
-
import { JsonPreviewBinding } from "./JsonPreviewBinding";
|
|
19
|
-
|
|
20
|
-
const EntityHistoryView = lazyChunk(() => import("./history").then(m => ({ default: m.EntityHistoryView })));
|
|
21
|
-
|
|
22
|
-
export type InspectorTab = "json" | "history";
|
|
23
|
-
|
|
24
|
-
export interface EntityInspectorProps {
|
|
25
|
-
/** The open tab, or null when the panel is closed. */
|
|
26
|
-
tab: InspectorTab | null;
|
|
27
|
-
onTabChange: (tab: InspectorTab) => void;
|
|
28
|
-
onClose: () => void;
|
|
29
|
-
collection: AdminCollection;
|
|
30
|
-
entity?: Entity<Record<string, unknown>>;
|
|
31
|
-
formContext?: FormContext<Record<string, unknown>>;
|
|
32
|
-
values?: Record<string, unknown>;
|
|
33
|
-
/** History is only offered when the collection records it. */
|
|
34
|
-
includeHistory: boolean;
|
|
35
|
-
/**
|
|
36
|
-
* Bumped once per save by the view that owns the form. The panel stays open
|
|
37
|
-
* across a save — the bar's Save button sits above it — so without this the
|
|
38
|
-
* history list would still be the one fetched when the panel opened.
|
|
39
|
-
*/
|
|
40
|
-
refreshToken?: number;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* Raw values and revision history, as an inspector rather than as tabs.
|
|
45
|
-
*
|
|
46
|
-
* These were the first two entries in the entity tab strip — two icon-only tabs
|
|
47
|
-
* with no label and no tooltip, sitting *before* the record you opened the page
|
|
48
|
-
* to edit. They are developer tools, not places the record lives, so they belong
|
|
49
|
-
* behind one affordance in the bar; a content editor should never meet `<>`.
|
|
50
|
-
*
|
|
51
|
-
* The panel sits below the identity bar and beside the record deliberately: you
|
|
52
|
-
* keep seeing which record you are inspecting, and keep being able to edit it.
|
|
53
|
-
*/
|
|
54
|
-
export function EntityInspector({
|
|
55
|
-
tab,
|
|
56
|
-
onTabChange,
|
|
57
|
-
onClose,
|
|
58
|
-
collection,
|
|
59
|
-
entity,
|
|
60
|
-
formContext,
|
|
61
|
-
values,
|
|
62
|
-
includeHistory,
|
|
63
|
-
refreshToken
|
|
64
|
-
}: EntityInspectorProps) {
|
|
65
|
-
|
|
66
|
-
const { t } = useTranslation();
|
|
67
|
-
const open = tab !== null;
|
|
68
|
-
|
|
69
|
-
// Escape closes the inspector, and only the inspector.
|
|
70
|
-
//
|
|
71
|
-
// The split view holds its own Escape listener for as long as a record is
|
|
72
|
-
// selected, and closing the record panel is a navigation — so an Escape
|
|
73
|
-
// meant for this panel was taking the whole record with it. On `window` in
|
|
74
|
-
// the bubble phase, as this listener used to be, `stopPropagation` cannot
|
|
75
|
-
// prevent that: it governs an event's travel *between* elements and says
|
|
76
|
-
// nothing about the other listeners on the element it is called from. Both
|
|
77
|
-
// ran, and the split's ran first, because it registered first — this one
|
|
78
|
-
// only exists while the inspector is open, which is always later.
|
|
79
|
-
//
|
|
80
|
-
// Capture on `document` is the idiom that holds regardless of mount order:
|
|
81
|
-
// it runs on the way down, before anything bubbles back to `window`, and
|
|
82
|
-
// there `stopPropagation` is enough. It is what the relation and user
|
|
83
|
-
// selectors already use to own the key while their popovers are open.
|
|
84
|
-
// Pinned in escape_key_ownership.test.tsx; see docs/bug-classes.md.
|
|
85
|
-
useEffect(() => {
|
|
86
|
-
if (!open) return;
|
|
87
|
-
const onKeyDown = (e: KeyboardEvent) => {
|
|
88
|
-
if (e.key !== "Escape") return;
|
|
89
|
-
// A Radix overlay opened from inside the inspector is above it and
|
|
90
|
-
// owns the key first — the same rule the split view applies.
|
|
91
|
-
if (document.querySelector('[role="dialog"][data-state="open"]')) return;
|
|
92
|
-
e.stopPropagation();
|
|
93
|
-
onClose();
|
|
94
|
-
};
|
|
95
|
-
document.addEventListener("keydown", onKeyDown, true);
|
|
96
|
-
return () => document.removeEventListener("keydown", onKeyDown, true);
|
|
97
|
-
}, [open, onClose]);
|
|
98
|
-
|
|
99
|
-
if (!open) return null;
|
|
100
|
-
|
|
101
|
-
return (
|
|
102
|
-
// Docked beside the record rather than over it. As an overlay with a
|
|
103
|
-
// scrim this was modal in effect: the first click into the form went to
|
|
104
|
-
// the scrim and closed the panel, so a revision list could never be
|
|
105
|
-
// open while you edited the record it belongs to — which is the only
|
|
106
|
-
// time watching it is worth anything.
|
|
107
|
-
<div className={cls(
|
|
108
|
-
"relative flex flex-col shrink-0 h-full w-full max-w-md border-l",
|
|
109
|
-
"bg-white dark:bg-surface-800",
|
|
110
|
-
defaultBorderMixin
|
|
111
|
-
)}
|
|
112
|
-
role={"complementary"}
|
|
113
|
-
aria-label={t("inspect_record") ?? "Inspect record"}>
|
|
114
|
-
|
|
115
|
-
<div className={cls("h-11 shrink-0 flex items-center gap-2 pl-4 pr-1.5 border-b", defaultBorderMixin)}>
|
|
116
|
-
<span className={"text-sm font-semibold"}>{t("inspect") ?? "Inspect"}</span>
|
|
117
|
-
|
|
118
|
-
<div className={"flex-1"}/>
|
|
119
|
-
|
|
120
|
-
{includeHistory
|
|
121
|
-
? <Tabs value={tab ?? "json"}
|
|
122
|
-
className={"!w-fit"}
|
|
123
|
-
onValueChange={(v) => onTabChange(v as InspectorTab)}>
|
|
124
|
-
<Tab value={"json"} className={"text-xs"}>{t("json")}</Tab>
|
|
125
|
-
<Tab value={"history"} className={"text-xs"}>
|
|
126
|
-
{t("record_history") ?? "History"}
|
|
127
|
-
</Tab>
|
|
128
|
-
</Tabs>
|
|
129
|
-
: null}
|
|
130
|
-
|
|
131
|
-
<IconButton size={"small"} onClick={onClose}
|
|
132
|
-
aria-label={t("close_inspector") ?? "Close inspector"}>
|
|
133
|
-
<XIcon size={iconSize.smallest}/>
|
|
134
|
-
</IconButton>
|
|
135
|
-
</div>
|
|
136
|
-
|
|
137
|
-
<div className={"flex-1 min-h-0 overflow-auto"}>
|
|
138
|
-
<ErrorBoundary>
|
|
139
|
-
{tab === "json" && (
|
|
140
|
-
<JsonPreviewBinding values={values ?? entity?.values ?? {}}/>
|
|
141
|
-
)}
|
|
142
|
-
{tab === "history" && includeHistory && formContext && (
|
|
143
|
-
<Suspense fallback={<CircularProgressCenter/>}>
|
|
144
|
-
<EntityHistoryView
|
|
145
|
-
collection={collection}
|
|
146
|
-
entity={entity}
|
|
147
|
-
formContext={formContext}
|
|
148
|
-
refreshToken={refreshToken}
|
|
149
|
-
modifiedValues={values ?? entity?.values}/>
|
|
150
|
-
</Suspense>
|
|
151
|
-
)}
|
|
152
|
-
</ErrorBoundary>
|
|
153
|
-
</div>
|
|
154
|
-
</div>
|
|
155
|
-
);
|
|
156
|
-
}
|
|
@@ -1,432 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
import type { Property } from "@rebasepro/types";
|
|
3
|
-
import * as React from "react";
|
|
4
|
-
import { useEffect, useMemo } from "react";
|
|
5
|
-
|
|
6
|
-
import { Entity } from "@rebasepro/types";
|
|
7
|
-
import type { PreviewSize } from "../types/components/PropertyPreviewProps";
|
|
8
|
-
import { getEntityImagePreviewPropertyKey } from "@rebasepro/app";
|
|
9
|
-
import {
|
|
10
|
-
ArrowRightToLineIcon,
|
|
11
|
-
cls,
|
|
12
|
-
defaultBorderMixin,
|
|
13
|
-
IconButton,
|
|
14
|
-
Skeleton,
|
|
15
|
-
Tooltip,
|
|
16
|
-
Typography
|
|
17
|
-
} from "@rebasepro/ui";
|
|
18
|
-
import { PropertyPreview, SkeletonPropertyComponent } from "../preview";
|
|
19
|
-
import {
|
|
20
|
-
useAuthController,
|
|
21
|
-
useCustomizationController,
|
|
22
|
-
useData,
|
|
23
|
-
ErrorView
|
|
24
|
-
} from "@rebasepro/app";
|
|
25
|
-
import { useAnalyticsController } from "@rebasepro/app";
|
|
26
|
-
import { IconForView } from "@rebasepro/app";
|
|
27
|
-
import { getPropertyInPath } from "../util/property_utils";
|
|
28
|
-
import { resolveCollectionSlotKeys } from "./CollectionViewBinding/usePreviewSlots";
|
|
29
|
-
import { useEntityTitle } from "../hooks/useEntityDisplay";
|
|
30
|
-
import { getValueInPath } from "@rebasepro/utils";
|
|
31
|
-
import { useCollectionRegistryController } from "../hooks/navigation/contexts/CollectionRegistryContext";
|
|
32
|
-
import { useSidePanel } from "../hooks/useSidePanel";
|
|
33
|
-
import { NestedEntityPreviewBoundary } from "./EntityPreviewNesting";
|
|
34
|
-
import type { AdminCollection } from "@rebasepro/cms-types";
|
|
35
|
-
|
|
36
|
-
export type EntityPreviewBindingProps = {
|
|
37
|
-
size?: PreviewSize,
|
|
38
|
-
actions?: React.ReactNode,
|
|
39
|
-
collection?: AdminCollection,
|
|
40
|
-
hover?: boolean;
|
|
41
|
-
previewKeys?: string[],
|
|
42
|
-
disabled?: boolean,
|
|
43
|
-
entity: Entity<any>,
|
|
44
|
-
includeId?: boolean,
|
|
45
|
-
includeTitle?: boolean,
|
|
46
|
-
includeEntityLink?: boolean,
|
|
47
|
-
includeImage?: boolean,
|
|
48
|
-
onClick?: (e: React.SyntheticEvent) => void;
|
|
49
|
-
onSidePanelClick?: (entity: Entity) => void,
|
|
50
|
-
};
|
|
51
|
-
|
|
52
|
-
export type EntityPreviewBindingDataProps = {
|
|
53
|
-
size?: "smallest" | "small" | "medium" | "large",
|
|
54
|
-
actions?: React.ReactNode,
|
|
55
|
-
collection?: AdminCollection,
|
|
56
|
-
previewKeys?: string[],
|
|
57
|
-
entity: Entity<any>,
|
|
58
|
-
onSidePanelClick?: (entity: Entity) => void,
|
|
59
|
-
includeId?: boolean,
|
|
60
|
-
includeTitle?: boolean,
|
|
61
|
-
includeEntityLink?: boolean,
|
|
62
|
-
includeImage?: boolean,
|
|
63
|
-
};
|
|
64
|
-
|
|
65
|
-
/**
|
|
66
|
-
* This component contains the main logic and content for displaying a entity preview,
|
|
67
|
-
* without any container wrapper. Used internally by EntityPreviewBinding.
|
|
68
|
-
*/
|
|
69
|
-
export function EntityPreviewBindingData({
|
|
70
|
-
actions,
|
|
71
|
-
collection: collectionProp,
|
|
72
|
-
previewKeys,
|
|
73
|
-
size = "medium",
|
|
74
|
-
includeId = true,
|
|
75
|
-
onSidePanelClick,
|
|
76
|
-
includeTitle = true,
|
|
77
|
-
includeEntityLink = true,
|
|
78
|
-
includeImage = true,
|
|
79
|
-
entity
|
|
80
|
-
}: EntityPreviewBindingDataProps) {
|
|
81
|
-
|
|
82
|
-
const authController = useAuthController();
|
|
83
|
-
const analyticsController = useAnalyticsController();
|
|
84
|
-
const sidePanelController = useSidePanel();
|
|
85
|
-
const customizationController = useCustomizationController();
|
|
86
|
-
|
|
87
|
-
const collectionRegistryController = useCollectionRegistryController();
|
|
88
|
-
|
|
89
|
-
const collection = collectionProp ?? collectionRegistryController.getCollection(entity.path);
|
|
90
|
-
|
|
91
|
-
// Above the `!collection` return, because hooks are. `useEntityTitle`
|
|
92
|
-
// tolerates a missing collection for exactly this reason.
|
|
93
|
-
const title = useEntityTitle({
|
|
94
|
-
collection,
|
|
95
|
-
entity
|
|
96
|
-
});
|
|
97
|
-
|
|
98
|
-
// What the card says under the title.
|
|
99
|
-
//
|
|
100
|
-
// A stated list wins outright — `previewProperties` is the one place a
|
|
101
|
-
// developer says "show these", and nothing here is allowed to second-guess
|
|
102
|
-
// it. Failing that, the card fills the same slots as every other surface
|
|
103
|
-
// that renders one record in a row: a supporting line and a status. It used
|
|
104
|
-
// to take the first few properties in declaration order instead, which is
|
|
105
|
-
// how an author card ended up rendering an entire Markdown biography.
|
|
106
|
-
const statedKeys = previewKeys ?? (collection?.previewProperties as string[] | undefined);
|
|
107
|
-
const listProperties = useMemo(() => {
|
|
108
|
-
if (!collection) return [];
|
|
109
|
-
if (statedKeys && statedKeys.length > 0) {
|
|
110
|
-
return statedKeys.filter(key => getPropertyInPath(collection.properties, key));
|
|
111
|
-
}
|
|
112
|
-
const slotKeys = resolveCollectionSlotKeys(
|
|
113
|
-
collection as AdminCollection<Record<string, unknown>>,
|
|
114
|
-
authController,
|
|
115
|
-
customizationController.propertyConfigs);
|
|
116
|
-
return [slotKeys.subtitleKey, slotKeys.statusKey].filter(Boolean) as string[];
|
|
117
|
-
}, [statedKeys, collection, authController, customizationController.propertyConfigs]);
|
|
118
|
-
|
|
119
|
-
if (!collection) {
|
|
120
|
-
return (
|
|
121
|
-
<>
|
|
122
|
-
<ErrorView error={`Collection not found: ${entity.path}`}/>
|
|
123
|
-
</>
|
|
124
|
-
);
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
const titleProperty = includeTitle ? title.source?.key : undefined;
|
|
128
|
-
const imagePropertyKey = includeImage ? getEntityImagePreviewPropertyKey(collection) : undefined;
|
|
129
|
-
const imageProperty = imagePropertyKey ? collection.properties[imagePropertyKey] : undefined;
|
|
130
|
-
const ofProp = imageProperty && "of" in imageProperty ? imageProperty.of : undefined;
|
|
131
|
-
const usedImageProperty = ofProp ? (Array.isArray(ofProp) ? ofProp[0] : ofProp) : imageProperty;
|
|
132
|
-
const restProperties = listProperties.filter(p => p !== titleProperty && p !== imagePropertyKey);
|
|
133
|
-
|
|
134
|
-
const imageValue = imagePropertyKey ? getValueInPath(entity.values, imagePropertyKey) : undefined;
|
|
135
|
-
const usedImageValue = imageProperty !== undefined ? ("of" in imageProperty
|
|
136
|
-
? (((imageValue as unknown[]) ?? []).length > 0
|
|
137
|
-
? (imageValue as unknown[])[0] : undefined)
|
|
138
|
-
: imageValue)
|
|
139
|
-
: undefined;
|
|
140
|
-
|
|
141
|
-
return (
|
|
142
|
-
// Everything below renders *inside* this preview: a reference or
|
|
143
|
-
// relation among the preview properties collapses to one line instead
|
|
144
|
-
// of nesting another bordered card with its own id and action button.
|
|
145
|
-
<NestedEntityPreviewBoundary>
|
|
146
|
-
{/* `overflow-hidden`: the image slot is a fixed box, and a thumbnail
|
|
147
|
-
that fails to load renders a "file not found" message sized for a
|
|
148
|
-
full preview — which spilled across the title beside it. */}
|
|
149
|
-
<div className={cls("flex shrink-0 overflow-hidden", {
|
|
150
|
-
"w-6 h-6 mx-1 my-0.5": size === "small" || size === "smallest",
|
|
151
|
-
"w-8 h-8 ml-1 mr-2 m-2 self-start": size === "medium",
|
|
152
|
-
"w-10 h-10 ml-2 mr-2 m-2 self-start": size === "large"
|
|
153
|
-
})}>
|
|
154
|
-
{usedImageProperty && usedImageValue ? <PropertyPreview property={usedImageProperty}
|
|
155
|
-
propertyKey={imagePropertyKey as string}
|
|
156
|
-
size={"small"}
|
|
157
|
-
value={usedImageValue as never}/> : null}
|
|
158
|
-
{(!usedImageProperty || !usedImageValue) ? <IconForView collectionOrView={collection}
|
|
159
|
-
color={"primary"}
|
|
160
|
-
size={size}
|
|
161
|
-
className={"m-auto"}/> : null}
|
|
162
|
-
</div>
|
|
163
|
-
|
|
164
|
-
<div
|
|
165
|
-
className={"flex flex-col grow w-full m-1 shrink min-w-0 text-text-primary dark:text-text-primary-dark flex-1 mr-2"}>
|
|
166
|
-
|
|
167
|
-
{includeId && (
|
|
168
|
-
entity
|
|
169
|
-
? <div className={"block whitespace-nowrap overflow-hidden truncate"}>
|
|
170
|
-
<Typography variant={"caption"}
|
|
171
|
-
color={"disabled"}
|
|
172
|
-
className={"font-mono"}>
|
|
173
|
-
{entity.id}
|
|
174
|
-
</Typography>
|
|
175
|
-
</div>
|
|
176
|
-
: <Skeleton/>)}
|
|
177
|
-
|
|
178
|
-
{/* A title that came from a property keeps that property's own
|
|
179
|
-
rendering — an enum stays its coloured chip, a relation stays
|
|
180
|
-
a link. A computed one is text, because that is all a
|
|
181
|
-
resolver returns. */}
|
|
182
|
-
{includeTitle && (titleProperty || title.value) && (
|
|
183
|
-
<div
|
|
184
|
-
className={"truncate my-0.5 text-sm font-medium text-text-primary dark:text-text-primary-dark"}>
|
|
185
|
-
{!entity && titleProperty
|
|
186
|
-
? <SkeletonPropertyComponent
|
|
187
|
-
property={getPropertyInPath(collection.properties, titleProperty) as Property}
|
|
188
|
-
size={"medium"}/>
|
|
189
|
-
: titleProperty
|
|
190
|
-
? <PropertyPreview
|
|
191
|
-
propertyKey={titleProperty}
|
|
192
|
-
value={title.source?.value as never}
|
|
193
|
-
property={getPropertyInPath(collection.properties, titleProperty) as Property}
|
|
194
|
-
size={"medium"}/>
|
|
195
|
-
: title.value}
|
|
196
|
-
</div>
|
|
197
|
-
)}
|
|
198
|
-
|
|
199
|
-
{restProperties && restProperties.map((key) => {
|
|
200
|
-
const childProperty = getPropertyInPath(collection.properties, key);
|
|
201
|
-
if (!childProperty) return null;
|
|
202
|
-
|
|
203
|
-
const valueInPath = getValueInPath(entity.values, key);
|
|
204
|
-
return (
|
|
205
|
-
// `truncate` clamps a line of text; it does nothing to a
|
|
206
|
-
// preview that renders blocks. Custom `admin.Preview`
|
|
207
|
-
// components can render anything at all, so the height
|
|
208
|
-
// is capped here as well — a card that loses the tail of
|
|
209
|
-
// an unusual value beats a card the size of a document.
|
|
210
|
-
<div key={"ref_prev_" + key}
|
|
211
|
-
className={cls("truncate min-w-0 max-h-8 overflow-hidden",
|
|
212
|
-
restProperties.length > 1 ? "my-0.5" : "my-0")}>
|
|
213
|
-
{
|
|
214
|
-
entity
|
|
215
|
-
? <PropertyPreview
|
|
216
|
-
propertyKey={key as string}
|
|
217
|
-
value={valueInPath as never}
|
|
218
|
-
property={childProperty as Property}
|
|
219
|
-
size={"small"}/>
|
|
220
|
-
: <SkeletonPropertyComponent
|
|
221
|
-
property={childProperty as Property}
|
|
222
|
-
size={"small"}/>
|
|
223
|
-
}
|
|
224
|
-
</div>
|
|
225
|
-
);
|
|
226
|
-
})}
|
|
227
|
-
|
|
228
|
-
</div>
|
|
229
|
-
|
|
230
|
-
{entity && includeEntityLink &&
|
|
231
|
-
<div className="flex-shrink-0">
|
|
232
|
-
<Tooltip title={`See details for ${entity.id}`} className={"shrink-0"}>
|
|
233
|
-
<IconButton
|
|
234
|
-
color={"inherit"}
|
|
235
|
-
size={"small"}
|
|
236
|
-
className={size !== "small" ? "self-start" : ""}
|
|
237
|
-
onClick={(e) => {
|
|
238
|
-
e.stopPropagation();
|
|
239
|
-
e.preventDefault();
|
|
240
|
-
onSidePanelClick?.(entity);
|
|
241
|
-
analyticsController.onAnalyticsEvent?.("entity_click_from_reference", {
|
|
242
|
-
path: entity.path,
|
|
243
|
-
entityId: entity.id
|
|
244
|
-
});
|
|
245
|
-
sidePanelController.open({
|
|
246
|
-
entityId: entity.id,
|
|
247
|
-
path: entity.path,
|
|
248
|
-
collection,
|
|
249
|
-
updateUrl: true
|
|
250
|
-
});
|
|
251
|
-
}}>
|
|
252
|
-
<ArrowRightToLineIcon/>
|
|
253
|
-
</IconButton>
|
|
254
|
-
</Tooltip>
|
|
255
|
-
</div>}
|
|
256
|
-
|
|
257
|
-
{actions && <div className="flex-shrink-0">{actions}</div>}
|
|
258
|
-
</NestedEntityPreviewBoundary>
|
|
259
|
-
);
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
export function EntityPreviewBindingWithId({
|
|
263
|
-
entityId,
|
|
264
|
-
path,
|
|
265
|
-
...props
|
|
266
|
-
}: Omit<EntityPreviewBindingProps, "entity"> & {
|
|
267
|
-
entityId: string | number;
|
|
268
|
-
path: string;
|
|
269
|
-
databaseId?: string;
|
|
270
|
-
}) {
|
|
271
|
-
|
|
272
|
-
const [entity, setEntity] = React.useState<Entity | undefined>();
|
|
273
|
-
const [dataLoading, setDataLoading] = React.useState(false);
|
|
274
|
-
const dataClient = useData();
|
|
275
|
-
|
|
276
|
-
useEffect(() => {
|
|
277
|
-
let isMounted = true;
|
|
278
|
-
if (!entityId || !path) {
|
|
279
|
-
setEntity(undefined);
|
|
280
|
-
return;
|
|
281
|
-
}
|
|
282
|
-
const fetchOne = async () => {
|
|
283
|
-
setDataLoading(true);
|
|
284
|
-
try {
|
|
285
|
-
const fetchedEntity = await dataClient.collection(path).findById(entityId);
|
|
286
|
-
if (isMounted) {
|
|
287
|
-
setEntity(fetchedEntity);
|
|
288
|
-
}
|
|
289
|
-
} catch (error) {
|
|
290
|
-
console.error("Error fetching entity:", error);
|
|
291
|
-
if (isMounted) {
|
|
292
|
-
setEntity(undefined);
|
|
293
|
-
}
|
|
294
|
-
} finally {
|
|
295
|
-
if (isMounted) {
|
|
296
|
-
setDataLoading(false);
|
|
297
|
-
}
|
|
298
|
-
}
|
|
299
|
-
}
|
|
300
|
-
|
|
301
|
-
fetchOne();
|
|
302
|
-
|
|
303
|
-
return () => {
|
|
304
|
-
isMounted = false;
|
|
305
|
-
}
|
|
306
|
-
}, [entityId, path]);
|
|
307
|
-
|
|
308
|
-
if (dataLoading && !entity) {
|
|
309
|
-
return (
|
|
310
|
-
<EntityPreviewContainer
|
|
311
|
-
hover={props.hover}
|
|
312
|
-
size={props.size}>
|
|
313
|
-
<Skeleton/>
|
|
314
|
-
</EntityPreviewContainer>
|
|
315
|
-
);
|
|
316
|
-
}
|
|
317
|
-
|
|
318
|
-
if (!entity) {
|
|
319
|
-
return (
|
|
320
|
-
<EntityPreviewContainer
|
|
321
|
-
hover={props.hover}
|
|
322
|
-
size={props.size}>
|
|
323
|
-
<div className={"text-text-secondary dark:text-text-secondary-dark"}>
|
|
324
|
-
Entity not found
|
|
325
|
-
</div>
|
|
326
|
-
</EntityPreviewContainer>
|
|
327
|
-
);
|
|
328
|
-
}
|
|
329
|
-
|
|
330
|
-
return <EntityPreviewBindingData
|
|
331
|
-
{...props}
|
|
332
|
-
entity={entity}/>;
|
|
333
|
-
}
|
|
334
|
-
|
|
335
|
-
/**
|
|
336
|
-
* This view is used to display a preview of a entity.
|
|
337
|
-
* It is used by default in reference fields and whenever a reference is displayed.
|
|
338
|
-
*/
|
|
339
|
-
export function EntityPreviewBinding({
|
|
340
|
-
actions,
|
|
341
|
-
disabled,
|
|
342
|
-
hover,
|
|
343
|
-
collection,
|
|
344
|
-
previewKeys,
|
|
345
|
-
onClick,
|
|
346
|
-
size = "medium",
|
|
347
|
-
includeId = true,
|
|
348
|
-
includeTitle = true,
|
|
349
|
-
includeEntityLink = true,
|
|
350
|
-
includeImage = true,
|
|
351
|
-
onSidePanelClick,
|
|
352
|
-
entity
|
|
353
|
-
}: EntityPreviewBindingProps) {
|
|
354
|
-
|
|
355
|
-
return (
|
|
356
|
-
<EntityPreviewContainer
|
|
357
|
-
onClick={disabled ? undefined : onClick}
|
|
358
|
-
hover={disabled ? undefined : hover}
|
|
359
|
-
size={size}>
|
|
360
|
-
<EntityPreviewBindingData
|
|
361
|
-
actions={actions}
|
|
362
|
-
collection={collection}
|
|
363
|
-
previewKeys={previewKeys}
|
|
364
|
-
size={size}
|
|
365
|
-
includeId={includeId}
|
|
366
|
-
includeTitle={includeTitle}
|
|
367
|
-
includeEntityLink={includeEntityLink}
|
|
368
|
-
includeImage={includeImage}
|
|
369
|
-
onSidePanelClick={onSidePanelClick}
|
|
370
|
-
entity={entity}
|
|
371
|
-
/>
|
|
372
|
-
</EntityPreviewContainer>
|
|
373
|
-
);
|
|
374
|
-
}
|
|
375
|
-
|
|
376
|
-
export type EntityPreviewContainerProps = {
|
|
377
|
-
children: React.ReactNode;
|
|
378
|
-
hover?: boolean;
|
|
379
|
-
fullwidth?: boolean;
|
|
380
|
-
size?: PreviewSize;
|
|
381
|
-
className?: string;
|
|
382
|
-
style?: React.CSSProperties;
|
|
383
|
-
onClick?: (e: React.SyntheticEvent) => void;
|
|
384
|
-
};
|
|
385
|
-
|
|
386
|
-
export const EntityPreviewContainer = React.forwardRef<HTMLDivElement, EntityPreviewContainerProps>(({
|
|
387
|
-
children,
|
|
388
|
-
hover,
|
|
389
|
-
onClick,
|
|
390
|
-
size = "medium",
|
|
391
|
-
style,
|
|
392
|
-
className,
|
|
393
|
-
fullwidth = true,
|
|
394
|
-
...props
|
|
395
|
-
}, ref) => {
|
|
396
|
-
return <div
|
|
397
|
-
ref={ref}
|
|
398
|
-
tabIndex={0}
|
|
399
|
-
style={style}
|
|
400
|
-
className={cls(
|
|
401
|
-
"bg-white dark:bg-surface-900",
|
|
402
|
-
// On the shared 28/32/40/48 control scale. `44px` was between two
|
|
403
|
-
// steps of it, so a reference in a form was 4px short of the field
|
|
404
|
-
// next to it and their boxes never quite agreed.
|
|
405
|
-
size === "small" ? "min-h-[32px]" : "min-h-[48px]",
|
|
406
|
-
fullwidth ? "w-full" : "",
|
|
407
|
-
"items-center overflow-hidden",
|
|
408
|
-
hover ? "hover:bg-surface-accent-50 dark:hover:bg-surface-800 group-hover:bg-surface-accent-50 dark:group-hover:bg-surface-800" : "",
|
|
409
|
-
size === "small" ? "p-1" : "px-2 py-1",
|
|
410
|
-
"flex border rounded-lg",
|
|
411
|
-
onClick ? "cursor-pointer" : "",
|
|
412
|
-
defaultBorderMixin,
|
|
413
|
-
className)}
|
|
414
|
-
role={onClick ? "button" : undefined}
|
|
415
|
-
onClick={(event) => {
|
|
416
|
-
if (onClick) {
|
|
417
|
-
event.preventDefault();
|
|
418
|
-
onClick(event);
|
|
419
|
-
}
|
|
420
|
-
}}
|
|
421
|
-
onKeyDown={(event) => {
|
|
422
|
-
if (onClick && (event.key === "Enter" || event.key === " ")) {
|
|
423
|
-
event.preventDefault();
|
|
424
|
-
onClick(event);
|
|
425
|
-
}
|
|
426
|
-
}}
|
|
427
|
-
{...props}>
|
|
428
|
-
{children}
|
|
429
|
-
</div>;
|
|
430
|
-
});
|
|
431
|
-
|
|
432
|
-
EntityPreviewContainer.displayName = "EntityPreviewContainer";
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import * as React from "react";
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* How deep the current entity preview is nested inside another one.
|
|
5
|
-
*
|
|
6
|
-
* A reference or relation rendered on its own (a form field, a table cell) is
|
|
7
|
-
* at depth 0 and gets the full card treatment: image slot, id, title, preview
|
|
8
|
-
* properties and a link to the side panel. A reference rendered *inside*
|
|
9
|
-
* another entity preview is at depth 1+, where repeating that card produces a
|
|
10
|
-
* box-inside-a-box with its own borders, id line and action button. Nested
|
|
11
|
-
* previews collapse to a compact chip instead.
|
|
12
|
-
*/
|
|
13
|
-
const EntityPreviewDepthContext = React.createContext<number>(0);
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Current entity preview nesting depth. 0 means "not inside another preview".
|
|
17
|
-
*/
|
|
18
|
-
export function useEntityPreviewDepth(): number {
|
|
19
|
-
return React.useContext(EntityPreviewDepthContext);
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* True when the preview being rendered lives inside another entity preview,
|
|
24
|
-
* and should therefore render its compact variant.
|
|
25
|
-
*/
|
|
26
|
-
export function useIsNestedEntityPreview(): boolean {
|
|
27
|
-
return useEntityPreviewDepth() > 0;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* Marks its children as being rendered inside an entity preview, so any
|
|
32
|
-
* reference or relation below collapses to a chip.
|
|
33
|
-
*/
|
|
34
|
-
export function NestedEntityPreviewBoundary({ children }: { children: React.ReactNode }) {
|
|
35
|
-
const depth = useEntityPreviewDepth();
|
|
36
|
-
return <EntityPreviewDepthContext.Provider value={depth + 1}>
|
|
37
|
-
{children}
|
|
38
|
-
</EntityPreviewDepthContext.Provider>;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* Resets the nesting depth back to 0. Used by surfaces that open a fresh
|
|
43
|
-
* rendering context for an entity — a side panel, a dialog — from within a
|
|
44
|
-
* preview, where the children are no longer visually nested.
|
|
45
|
-
*/
|
|
46
|
-
export function RootEntityPreviewBoundary({ children }: { children: React.ReactNode }) {
|
|
47
|
-
return <EntityPreviewDepthContext.Provider value={0}>
|
|
48
|
-
{children}
|
|
49
|
-
</EntityPreviewDepthContext.Provider>;
|
|
50
|
-
}
|