@rebasepro/cms 0.17.3 → 0.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +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,141 +0,0 @@
|
|
|
1
|
-
import type { NavigationEntry } from "@rebasepro/cms-types";
|
|
2
|
-
import React from "react";
|
|
3
|
-
import { ChevronDownIcon, cls, iconSize, Typography } from "@rebasepro/ui";
|
|
4
|
-
|
|
5
|
-
import { IconForView, getIcon } from "@rebasepro/app";
|
|
6
|
-
import { DrawerNavigationItem } from "./DrawerNavigationItem";
|
|
7
|
-
import { useTranslation, useComponentOverride } from "@rebasepro/app";
|
|
8
|
-
|
|
9
|
-
export interface DrawerNavigationGroupProps {
|
|
10
|
-
/**
|
|
11
|
-
* Group name to display in header
|
|
12
|
-
*/
|
|
13
|
-
group: string;
|
|
14
|
-
/**
|
|
15
|
-
* Navigation entries in this group
|
|
16
|
-
*/
|
|
17
|
-
entries: NavigationEntry[];
|
|
18
|
-
/**
|
|
19
|
-
* Whether the group is collapsed
|
|
20
|
-
*/
|
|
21
|
-
collapsed: boolean;
|
|
22
|
-
/**
|
|
23
|
-
* Callback when collapse state should toggle
|
|
24
|
-
*/
|
|
25
|
-
onToggleCollapsed: () => void;
|
|
26
|
-
/**
|
|
27
|
-
* Whether the drawer is in open (expanded) state
|
|
28
|
-
*/
|
|
29
|
-
drawerOpen: boolean;
|
|
30
|
-
/**
|
|
31
|
-
* Optional actions to render in the group header (e.g., "Add collection" button)
|
|
32
|
-
*/
|
|
33
|
-
headerActions?: React.ReactNode;
|
|
34
|
-
/**
|
|
35
|
-
* Optional callback when a navigation item is clicked
|
|
36
|
-
*/
|
|
37
|
-
onItemClick?: (entry: NavigationEntry) => void;
|
|
38
|
-
/**
|
|
39
|
-
* Hide the group header (title and expandable panel)
|
|
40
|
-
*/
|
|
41
|
-
hideHeader?: boolean;
|
|
42
|
-
/**
|
|
43
|
-
* Lucide icon name for the group header, from `NavigationGroupMapping.icon`.
|
|
44
|
-
*
|
|
45
|
-
* It decorates the header and nothing else: the entries below are untouched and
|
|
46
|
-
* keep their own icons. An app that wants the categorised look — rows giving up
|
|
47
|
-
* their icons to indent under the group — builds it in its own drawer, by
|
|
48
|
-
* overriding `Shell.DrawerNavigationItem` and passing `indented`.
|
|
49
|
-
*/
|
|
50
|
-
icon?: string;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* Shared drawer navigation group component used by both DefaultDrawer and RebaseCloudDrawer.
|
|
55
|
-
* Renders a collapsible group with header and navigation items.
|
|
56
|
-
*/
|
|
57
|
-
export function DrawerNavigationGroup({
|
|
58
|
-
group,
|
|
59
|
-
entries,
|
|
60
|
-
collapsed,
|
|
61
|
-
onToggleCollapsed,
|
|
62
|
-
drawerOpen,
|
|
63
|
-
headerActions,
|
|
64
|
-
onItemClick,
|
|
65
|
-
hideHeader,
|
|
66
|
-
icon
|
|
67
|
-
}: DrawerNavigationGroupProps) {
|
|
68
|
-
const { t } = useTranslation();
|
|
69
|
-
const ResolvedDrawerNavigationItem = useComponentOverride("Shell.DrawerNavigationItem", DrawerNavigationItem);
|
|
70
|
-
|
|
71
|
-
// The icon decorates the header, and stops there. It used to also strip the
|
|
72
|
-
// entries of theirs and indent them, which made a per-app styling choice into
|
|
73
|
-
// framework behaviour: every project that labelled a group with an icon lost the
|
|
74
|
-
// icons on its rows, with nothing to turn it off. An app that wants that look
|
|
75
|
-
// now opts into it in its own drawer — see `indented` on
|
|
76
|
-
// {@link DrawerNavigationItem}.
|
|
77
|
-
const groupIcon = !hideHeader && drawerOpen ? getIcon(icon, undefined, undefined, "small") : undefined;
|
|
78
|
-
return (
|
|
79
|
-
<div
|
|
80
|
-
className={"my-2 mx-2 flex flex-col"}
|
|
81
|
-
key={`drawer_group_${group}`}
|
|
82
|
-
>
|
|
83
|
-
{/* Group Header */}
|
|
84
|
-
{!hideHeader && (
|
|
85
|
-
<div
|
|
86
|
-
className={cls("pl-3 pr-2 py-0.5 flex flex-row items-center transition-colors",
|
|
87
|
-
drawerOpen ? "cursor-pointer hover:bg-surface-100 dark:hover:bg-surface-800/40 rounded-lg" : "opacity-0 invisible pointer-events-none"
|
|
88
|
-
)}
|
|
89
|
-
onClick={drawerOpen ? onToggleCollapsed : undefined}
|
|
90
|
-
>
|
|
91
|
-
<ChevronDownIcon
|
|
92
|
-
size={iconSize.small}
|
|
93
|
-
className={cls(
|
|
94
|
-
"text-surface-400 dark:text-surface-400 transition-transform duration-200 mr-1",
|
|
95
|
-
collapsed ? "-rotate-90" : "rotate-0"
|
|
96
|
-
)}
|
|
97
|
-
/>
|
|
98
|
-
{groupIcon && (
|
|
99
|
-
<span className="shrink-0 mr-2 flex items-center text-surface-600 dark:text-surface-300 [&>svg]:size-4">
|
|
100
|
-
{groupIcon}
|
|
101
|
-
</span>
|
|
102
|
-
)}
|
|
103
|
-
<Typography
|
|
104
|
-
variant={"caption"}
|
|
105
|
-
color={"secondary"}
|
|
106
|
-
className="font-semibold text-[11px] uppercase tracking-wider flex-grow line-clamp-1 text-surface-400 dark:text-surface-400"
|
|
107
|
-
>
|
|
108
|
-
{(group || t("views_group"))}
|
|
109
|
-
</Typography>
|
|
110
|
-
{headerActions && (
|
|
111
|
-
<div onClick={(e) => e.stopPropagation()}>
|
|
112
|
-
{headerActions}
|
|
113
|
-
</div>
|
|
114
|
-
)}
|
|
115
|
-
</div>
|
|
116
|
-
)}
|
|
117
|
-
|
|
118
|
-
{/* Collapsible Content */}
|
|
119
|
-
<div
|
|
120
|
-
className={cls(
|
|
121
|
-
"transition-all duration-200 ease-in-out",
|
|
122
|
-
"overflow-hidden",
|
|
123
|
-
!hideHeader && "dark:bg-transparent",
|
|
124
|
-
"rounded-lg",
|
|
125
|
-
(!hideHeader && collapsed) ? "max-h-0 opacity-0" : "max-h-[2000px] opacity-100"
|
|
126
|
-
)}
|
|
127
|
-
>
|
|
128
|
-
{entries.map((entry) => (
|
|
129
|
-
<ResolvedDrawerNavigationItem
|
|
130
|
-
key={entry.id}
|
|
131
|
-
icon={<IconForView collectionOrView={entry.collection ?? entry.view} size={"small"}/>}
|
|
132
|
-
drawerOpen={drawerOpen}
|
|
133
|
-
onClick={() => onItemClick?.(entry)}
|
|
134
|
-
url={entry.url}
|
|
135
|
-
name={entry.name}
|
|
136
|
-
/>
|
|
137
|
-
))}
|
|
138
|
-
</div>
|
|
139
|
-
</div>
|
|
140
|
-
);
|
|
141
|
-
}
|
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
|
|
3
|
-
import { NavLink } from "react-router";
|
|
4
|
-
import { cls, Tooltip } from "@rebasepro/ui";
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Props of a drawer navigation row, named so an app overriding
|
|
8
|
-
* `Shell.DrawerNavigationItem` can type its wrapper against them.
|
|
9
|
-
*/
|
|
10
|
-
export type DrawerNavigationItemProps = {
|
|
11
|
-
icon: React.ReactElement,
|
|
12
|
-
name: string,
|
|
13
|
-
drawerOpen: boolean,
|
|
14
|
-
url: string,
|
|
15
|
-
onClick?: () => void,
|
|
16
|
-
/**
|
|
17
|
-
* Drop the row's icon and indent the label into the space it occupied, so the
|
|
18
|
-
* row reads as a child of the group header above it.
|
|
19
|
-
*
|
|
20
|
-
* Nothing in the framework sets this: the stock drawer always passes `false`,
|
|
21
|
-
* and an app that wants the categorised look opts into it by overriding
|
|
22
|
-
* `Shell.DrawerNavigationItem` and deciding for itself which rows get it.
|
|
23
|
-
*/
|
|
24
|
-
indented?: boolean,
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
export function DrawerNavigationItem({
|
|
28
|
-
name,
|
|
29
|
-
icon,
|
|
30
|
-
drawerOpen,
|
|
31
|
-
url,
|
|
32
|
-
onClick,
|
|
33
|
-
indented = false
|
|
34
|
-
}: DrawerNavigationItemProps) {
|
|
35
|
-
|
|
36
|
-
// Indented rows give up the icon rather than keeping it *and* indenting: a
|
|
37
|
-
// per-row icon repeated down a group is what flattens the hierarchy, since
|
|
38
|
-
// every row then reads at the weight of the category above it. The indent is
|
|
39
|
-
// the same 44px the icon occupied, so labels stay on the original grid and the
|
|
40
|
-
// rail width does not change.
|
|
41
|
-
const iconWrap = indented
|
|
42
|
-
? <div className={"shrink-0 w-[44px] h-[30px]"} aria-hidden={true}/>
|
|
43
|
-
: <div
|
|
44
|
-
className={"shrink-0 flex items-center justify-center w-[44px] h-[30px] text-surface-500 dark:text-text-secondary-dark [&>svg]:size-4 group-hover/nav:text-primary transition-colors duration-150"}>
|
|
45
|
-
{icon}
|
|
46
|
-
</div>;
|
|
47
|
-
|
|
48
|
-
const [wantsTooltip, setWantsTooltip] = React.useState(false);
|
|
49
|
-
|
|
50
|
-
// Radix will not report a close it never noticed: while the tooltip is masked
|
|
51
|
-
// the pointer can leave the row without `onOpenChange(false)` ever firing. So
|
|
52
|
-
// the stale `true` is dropped on the way *into* the masked state — otherwise
|
|
53
|
-
// it surfaces the moment the mask lifts, as a tooltip hanging over a rail the
|
|
54
|
-
// pointer left long ago.
|
|
55
|
-
if (drawerOpen && wantsTooltip) setWantsTooltip(false);
|
|
56
|
-
|
|
57
|
-
const listItem = <div>
|
|
58
|
-
<NavLink
|
|
59
|
-
onClick={onClick}
|
|
60
|
-
// The label below is `hidden` (display:none) while the rail is
|
|
61
|
-
// collapsed, which takes it out of the accessibility tree along with
|
|
62
|
-
// the row's only text — a collapsed rail was a column of links with no
|
|
63
|
-
// accessible name at all. The tooltip does not cover this: Radix wires
|
|
64
|
-
// a trigger to its content with `aria-describedby`, which is a
|
|
65
|
-
// description rather than a name, and only while the tooltip is open —
|
|
66
|
-
// and this one is masked shut whenever the drawer is open.
|
|
67
|
-
//
|
|
68
|
-
// Named unconditionally rather than only when collapsed: expanded, this
|
|
69
|
-
// is the same string the row already displays, so the accessible name
|
|
70
|
-
// stays stable across the transition instead of appearing with it.
|
|
71
|
-
aria-label={name}
|
|
72
|
-
style={{
|
|
73
|
-
width: "100%",
|
|
74
|
-
transition: drawerOpen ? "width 150ms ease-in" : undefined
|
|
75
|
-
}}
|
|
76
|
-
className={({ isActive }: { isActive: boolean }) => cls("rounded-lg truncate group/nav",
|
|
77
|
-
"hover:bg-primary/5 dark:hover:bg-primary/5 text-surface-700 dark:text-surface-300 hover:text-surface-900 dark:hover:text-white",
|
|
78
|
-
"flex flex-row items-center",
|
|
79
|
-
drawerOpen ? "pr-4 h-[30px]" : "h-[30px]",
|
|
80
|
-
"font-medium text-[13px]",
|
|
81
|
-
isActive ? "bg-primary/8 dark:bg-primary/10 text-primary dark:text-primary [&_div]:text-primary" : ""
|
|
82
|
-
)}
|
|
83
|
-
to={url}
|
|
84
|
-
>
|
|
85
|
-
|
|
86
|
-
{iconWrap}
|
|
87
|
-
|
|
88
|
-
<div
|
|
89
|
-
className={cls(
|
|
90
|
-
"text-text-primary dark:text-surface-200",
|
|
91
|
-
drawerOpen ? "opacity-100" : "opacity-0 hidden",
|
|
92
|
-
"font-inherit truncate space-x-2"
|
|
93
|
-
)}>
|
|
94
|
-
{name}
|
|
95
|
-
</div>
|
|
96
|
-
</NavLink>
|
|
97
|
-
</div>;
|
|
98
|
-
|
|
99
|
-
// Per row, and always controlled. The old shared flag could only say "every
|
|
100
|
-
// tooltip" or "none", and the state it needed was unreachable, so no entry
|
|
101
|
-
// tooltip ever opened — leaving a bare rail of unlabelled icons. Radix decides
|
|
102
|
-
// when this one wants to be open, from the pointer and from focus; the drawer
|
|
103
|
-
// only masks it once the label says the same thing.
|
|
104
|
-
//
|
|
105
|
-
// Masked rather than withheld: dropping `open`, or the title, would move the
|
|
106
|
-
// tooltip between controlled and uncontrolled as the drawer opens, which
|
|
107
|
-
// strands the old state — a tooltip left up over a pointer nowhere near it.
|
|
108
|
-
return <Tooltip
|
|
109
|
-
open={!drawerOpen && wantsTooltip}
|
|
110
|
-
onOpenChange={setWantsTooltip}
|
|
111
|
-
side="right"
|
|
112
|
-
title={name}>
|
|
113
|
-
{listItem}
|
|
114
|
-
</Tooltip>;
|
|
115
|
-
}
|
|
@@ -1,303 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import type { FormContext } from "../types/fields";
|
|
4
|
-
import type { EntityAction, EntityActionClickProps, SidePanelController, AdminCollection } from "@rebasepro/cms-types";
|
|
5
|
-
import React, { useMemo } from "react";
|
|
6
|
-
import { Entity, getCollectionDataPath } from "@rebasepro/types";
|
|
7
|
-
import { RebaseContext } from "@rebasepro/cms-types";
|
|
8
|
-
import type { EntityFormActionsProps } from "../types/components/EntityFormActionsProps";
|
|
9
|
-
import { copyEntityAction, deleteEntityAction, unlinkEntityAction } from "./common/default_entity_actions";
|
|
10
|
-
import { mergeEntityActions } from "../util/entity_actions";
|
|
11
|
-
import { resolveEntityAction } from "../util/resolutions";
|
|
12
|
-
import { Button, CircularProgress, cls, defaultBorderMixin, DialogActions, IconButton, LoadingButton, Tooltip, Typography } from "@rebasepro/ui";
|
|
13
|
-
import { AlertCircleIcon, iconSize } from "@rebasepro/ui";
|
|
14
|
-
import {
|
|
15
|
-
useCustomizationController,
|
|
16
|
-
useSnackbarController,
|
|
17
|
-
useTranslation
|
|
18
|
-
} from "@rebasepro/app";
|
|
19
|
-
import { SideDialogController, useSideDialogContext } from "./SideDialogs";
|
|
20
|
-
import { FormexController } from "@rebasepro/forms";
|
|
21
|
-
import { ErrorTooltip } from "@rebasepro/app";
|
|
22
|
-
import { usePermissions } from "@rebasepro/app";
|
|
23
|
-
import { getIcon } from "@rebasepro/app";
|
|
24
|
-
import { useAdminContext } from "../hooks/useAdminContext";
|
|
25
|
-
import { useChildViewSource } from "../hooks/useChildViewSource";
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* The entity form's footer.
|
|
29
|
-
*
|
|
30
|
-
* It used to render in two shapes: this footer, and a `w-80 2xl:w-96` sticky
|
|
31
|
-
* side rail carrying the same Save and Discard above several hundred pixels of
|
|
32
|
-
* nothing. The rail is gone, and Save/Discard have moved to the identity bar
|
|
33
|
-
* where they stay visible while the form scrolls — so with
|
|
34
|
-
* `showDefaultActions={false}` this renders only what the bar cannot host:
|
|
35
|
-
* record actions (copy, delete, custom), plugin actions, the saving error, and
|
|
36
|
-
* the side-panel-only "save and close".
|
|
37
|
-
*/
|
|
38
|
-
export function EditFormActions({
|
|
39
|
-
collection,
|
|
40
|
-
path,
|
|
41
|
-
entity,
|
|
42
|
-
savingError,
|
|
43
|
-
formex,
|
|
44
|
-
disabled,
|
|
45
|
-
status,
|
|
46
|
-
pluginActions,
|
|
47
|
-
openEntityMode,
|
|
48
|
-
showDefaultActions = true,
|
|
49
|
-
navigateBack,
|
|
50
|
-
formContext
|
|
51
|
-
}: EntityFormActionsProps) {
|
|
52
|
-
|
|
53
|
-
const { canCreate, canDelete } = usePermissions();
|
|
54
|
-
const context = useAdminContext();
|
|
55
|
-
const sidePanelController = context.sidePanelController;
|
|
56
|
-
const sideDialogContext = useSideDialogContext();
|
|
57
|
-
const customizationController = useCustomizationController();
|
|
58
|
-
const { t } = useTranslation();
|
|
59
|
-
|
|
60
|
-
// Rows shared through a junction: the delete button here removes the
|
|
61
|
-
// link, because that is what the server does for this path.
|
|
62
|
-
const childViewSource = useChildViewSource(path);
|
|
63
|
-
const isLinkedChildView = childViewSource?.kind === "relation" && childViewSource.mode === "linked";
|
|
64
|
-
|
|
65
|
-
const entityActions = useMemo((): EntityAction[] => {
|
|
66
|
-
const customEntityActions = (collection.entityActions ?? [])
|
|
67
|
-
.map(action => resolveEntityAction(action, customizationController.entityActions))
|
|
68
|
-
.filter(Boolean) as EntityAction[];
|
|
69
|
-
const createEnabled = canCreate(collection, path);
|
|
70
|
-
const deleteEnabled = entity ? canDelete(collection, path, entity) : false;
|
|
71
|
-
const disableActions = collection.disableDefaultActions ?? [];
|
|
72
|
-
const actions: EntityAction[] = [];
|
|
73
|
-
if (createEnabled && !disableActions.includes("copy"))
|
|
74
|
-
actions.push(copyEntityAction);
|
|
75
|
-
if (deleteEnabled && !disableActions.includes("delete"))
|
|
76
|
-
actions.push(isLinkedChildView ? unlinkEntityAction : deleteEntityAction);
|
|
77
|
-
if (customEntityActions)
|
|
78
|
-
return mergeEntityActions(actions, customEntityActions);
|
|
79
|
-
return actions;
|
|
80
|
-
}, [canCreate, canDelete, collection, path, customizationController.entityActions?.length, entity, collection.disableDefaultActions, isLinkedChildView]);
|
|
81
|
-
|
|
82
|
-
// Record actions stay in the footer whether or not the bar carries Save;
|
|
83
|
-
// they are things you do *to* the record, not ways to leave the form.
|
|
84
|
-
const formActions = entityActions.filter(a => a.includeInForm === undefined || a.includeInForm);
|
|
85
|
-
|
|
86
|
-
return buildBottomActions({
|
|
87
|
-
savingError,
|
|
88
|
-
entity,
|
|
89
|
-
formActions,
|
|
90
|
-
collection,
|
|
91
|
-
context,
|
|
92
|
-
sidePanelController,
|
|
93
|
-
disabled,
|
|
94
|
-
status,
|
|
95
|
-
sideDialogContext,
|
|
96
|
-
pluginActions,
|
|
97
|
-
openEntityMode,
|
|
98
|
-
navigateBack,
|
|
99
|
-
formContext,
|
|
100
|
-
formex,
|
|
101
|
-
t,
|
|
102
|
-
showDefaultActions
|
|
103
|
-
});
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
type ActionsViewProps<M extends Record<string, unknown>> = {
|
|
107
|
-
savingError: Error | undefined,
|
|
108
|
-
entity: Entity<M> | undefined,
|
|
109
|
-
formActions: EntityAction[],
|
|
110
|
-
collection: AdminCollection,
|
|
111
|
-
context: RebaseContext,
|
|
112
|
-
sidePanelController: SidePanelController,
|
|
113
|
-
disabled: boolean,
|
|
114
|
-
status: "new" | "existing" | "copy",
|
|
115
|
-
sideDialogContext: SideDialogController,
|
|
116
|
-
pluginActions?: React.ReactNode[],
|
|
117
|
-
openEntityMode?: "side_panel" | "full_screen" | "split" | "dialog";
|
|
118
|
-
navigateBack: () => void;
|
|
119
|
-
formContext: FormContext,
|
|
120
|
-
formex: FormexController<Record<string, unknown>>;
|
|
121
|
-
t: (key: string, vars?: Record<string, string>) => string;
|
|
122
|
-
showDefaultActions: boolean;
|
|
123
|
-
className?: string;
|
|
124
|
-
};
|
|
125
|
-
|
|
126
|
-
function buildBottomActions<M extends Record<string, unknown>>({
|
|
127
|
-
savingError,
|
|
128
|
-
entity,
|
|
129
|
-
formActions,
|
|
130
|
-
collection,
|
|
131
|
-
context,
|
|
132
|
-
sidePanelController,
|
|
133
|
-
disabled,
|
|
134
|
-
status,
|
|
135
|
-
sideDialogContext,
|
|
136
|
-
pluginActions,
|
|
137
|
-
openEntityMode,
|
|
138
|
-
navigateBack,
|
|
139
|
-
formContext,
|
|
140
|
-
formex,
|
|
141
|
-
t,
|
|
142
|
-
showDefaultActions,
|
|
143
|
-
className
|
|
144
|
-
}: ActionsViewProps<M>) {
|
|
145
|
-
|
|
146
|
-
const hasErrors = Object.keys(formex.errors).length > 0 && formex.submitCount > 0;
|
|
147
|
-
// "Save and close" only means something where there is something to close.
|
|
148
|
-
const canClose = openEntityMode === "side_panel" || openEntityMode === "dialog";
|
|
149
|
-
const showBackToDetail = collection.defaultEntityAction === "view" && status === "existing";
|
|
150
|
-
|
|
151
|
-
// When the container carries the actions — the entity view's identity bar
|
|
152
|
-
// does — this renders nothing at all. A full-width bar holding a copy icon
|
|
153
|
-
// and a delete icon is the same waste as the side rail it replaced: the
|
|
154
|
-
// record actions moved into the bar's overflow menu, and Save, Discard and
|
|
155
|
-
// "save and close" are buttons up there too.
|
|
156
|
-
const hasContent = showDefaultActions || Boolean(savingError);
|
|
157
|
-
|
|
158
|
-
if (!hasContent) return null;
|
|
159
|
-
|
|
160
|
-
return <DialogActions
|
|
161
|
-
className={className}
|
|
162
|
-
// In normal flow at the foot of the form column, not overlaying it.
|
|
163
|
-
position={"sticky"}>
|
|
164
|
-
{savingError &&
|
|
165
|
-
<div className="text-right">
|
|
166
|
-
<Typography color={"error"}>{savingError.message}</Typography>
|
|
167
|
-
</div>
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
{formActions.length > 0 && <div className="grow flex overflow-auto no-scrollbar">
|
|
171
|
-
{formActions.map((action, index) => {
|
|
172
|
-
|
|
173
|
-
const props = {
|
|
174
|
-
view: "form",
|
|
175
|
-
entity,
|
|
176
|
-
path: getCollectionDataPath(collection),
|
|
177
|
-
collection: collection,
|
|
178
|
-
context,
|
|
179
|
-
sidePanelController,
|
|
180
|
-
openEntityMode,
|
|
181
|
-
navigateBack,
|
|
182
|
-
formContext
|
|
183
|
-
} satisfies EntityActionClickProps<Record<string, unknown>>;
|
|
184
|
-
|
|
185
|
-
const isEnabled = !action.isEnabled || action.isEnabled(props);
|
|
186
|
-
return (
|
|
187
|
-
<EntityActionButton
|
|
188
|
-
key={action.key ?? action.name ?? index}
|
|
189
|
-
action={action}
|
|
190
|
-
enabled={isEnabled}
|
|
191
|
-
props={props}
|
|
192
|
-
/>
|
|
193
|
-
);
|
|
194
|
-
})}
|
|
195
|
-
</div>}
|
|
196
|
-
|
|
197
|
-
{pluginActions}
|
|
198
|
-
|
|
199
|
-
{hasErrors ?
|
|
200
|
-
<ErrorTooltip title={"This form has errors"}>
|
|
201
|
-
<AlertCircleIcon className="ml-4 text-red-500" size={iconSize.smallest}/>
|
|
202
|
-
</ErrorTooltip> : null}
|
|
203
|
-
|
|
204
|
-
{showBackToDetail && (
|
|
205
|
-
<Button variant="text"
|
|
206
|
-
color="primary"
|
|
207
|
-
disabled={disabled}
|
|
208
|
-
onClick={navigateBack}>
|
|
209
|
-
{t("back_to_detail") ?? "Back to details"}
|
|
210
|
-
</Button>
|
|
211
|
-
)}
|
|
212
|
-
|
|
213
|
-
{showDefaultActions && <>
|
|
214
|
-
<Button variant="text"
|
|
215
|
-
color="primary"
|
|
216
|
-
disabled={disabled || formex.isSubmitting}
|
|
217
|
-
type="reset">
|
|
218
|
-
{status === "existing" ? t("discard") : t("clear")}
|
|
219
|
-
</Button>
|
|
220
|
-
<Tooltip title={hasErrors ? (t("fix_errors_before_saving") ?? "Fix highlighted errors before saving") : undefined}>
|
|
221
|
-
<Button variant={canClose ? "text" : "filled"}
|
|
222
|
-
color="primary"
|
|
223
|
-
type="submit"
|
|
224
|
-
disabled={disabled || formex.isSubmitting}
|
|
225
|
-
onClick={() => {
|
|
226
|
-
sideDialogContext.setPendingClose(false);
|
|
227
|
-
}}>
|
|
228
|
-
{status === "existing" && t("save")}
|
|
229
|
-
{status === "copy" && t("create_copy")}
|
|
230
|
-
{status === "new" && t("create")}
|
|
231
|
-
</Button>
|
|
232
|
-
</Tooltip>
|
|
233
|
-
</>}
|
|
234
|
-
|
|
235
|
-
{canClose && <LoadingButton variant="filled"
|
|
236
|
-
color="primary"
|
|
237
|
-
type="submit"
|
|
238
|
-
loading={formex.isSubmitting}
|
|
239
|
-
disabled={disabled}
|
|
240
|
-
onClick={() => {
|
|
241
|
-
sideDialogContext.setPendingClose?.(true);
|
|
242
|
-
}}>
|
|
243
|
-
{status === "existing" && t("save_and_close")}
|
|
244
|
-
{status === "copy" && t("create_copy_and_close")}
|
|
245
|
-
{status === "new" && t("create_and_close")}
|
|
246
|
-
</LoadingButton>}
|
|
247
|
-
</DialogActions>;
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
function EntityActionButton({
|
|
251
|
-
action,
|
|
252
|
-
enabled,
|
|
253
|
-
props
|
|
254
|
-
}: {
|
|
255
|
-
action: EntityAction,
|
|
256
|
-
enabled: boolean,
|
|
257
|
-
props: EntityActionClickProps<Record<string, unknown>>
|
|
258
|
-
}) {
|
|
259
|
-
const snackbarController = useSnackbarController();
|
|
260
|
-
const [loading, setLoading] = React.useState(false);
|
|
261
|
-
return <Tooltip
|
|
262
|
-
title={action.name}>
|
|
263
|
-
<IconButton
|
|
264
|
-
color="primary"
|
|
265
|
-
disabled={!enabled}
|
|
266
|
-
onClick={(event) => {
|
|
267
|
-
console.debug("Executing action", action.key, props);
|
|
268
|
-
try {
|
|
269
|
-
event.stopPropagation();
|
|
270
|
-
if (props.entity) {
|
|
271
|
-
const onClick = action.onClick(props);
|
|
272
|
-
// If the action returns a promise, we can handle it
|
|
273
|
-
if (onClick instanceof Promise) {
|
|
274
|
-
setLoading(true);
|
|
275
|
-
onClick
|
|
276
|
-
.catch((error) => {
|
|
277
|
-
console.error("Error executing action", action.key, error);
|
|
278
|
-
snackbarController.open({
|
|
279
|
-
message: `Error executing action: ${error.message}`,
|
|
280
|
-
type: "error"
|
|
281
|
-
})
|
|
282
|
-
})
|
|
283
|
-
.finally(() => setLoading(false));
|
|
284
|
-
} else {
|
|
285
|
-
snackbarController.open({
|
|
286
|
-
message: `Action ${action.name} executed successfully`,
|
|
287
|
-
type: "success"
|
|
288
|
-
});
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
}
|
|
292
|
-
} catch (e: unknown) {
|
|
293
|
-
console.error("Error executing action", action.key, e);
|
|
294
|
-
snackbarController.open({
|
|
295
|
-
message: `Error executing action: ${e instanceof Error ? e.message : String(e)}`,
|
|
296
|
-
type: "error"
|
|
297
|
-
});
|
|
298
|
-
}
|
|
299
|
-
}}>
|
|
300
|
-
{loading ? <CircularProgress size={"smallest"}/> : getIcon(action.icon, undefined, undefined, "smallest")}
|
|
301
|
-
</IconButton>
|
|
302
|
-
</Tooltip>;
|
|
303
|
-
}
|