@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,259 +0,0 @@
|
|
|
1
|
-
import React, { Suspense, useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
2
|
-
import { FieldHelperText } from "../components/FieldHelperText";
|
|
3
|
-
import { LabelWithIconAndTooltip } from "../components/LabelWithIconAndTooltip";
|
|
4
|
-
import { useAuthController, useStorageSource } from "@rebasepro/app";
|
|
5
|
-
import { useStorageSources } from "@rebasepro/app";
|
|
6
|
-
import { resolveStorageSource } from "@rebasepro/common";
|
|
7
|
-
import { getIconForProperty } from "../../util/property_utils";
|
|
8
|
-
import type { FieldProps } from "../../types/fields";
|
|
9
|
-
import type { ArrayProperty, StringProperty } from "@rebasepro/types";
|
|
10
|
-
import {
|
|
11
|
-
cls,
|
|
12
|
-
fieldBackgroundDisabledMixin,
|
|
13
|
-
fieldBackgroundHoverMixin,
|
|
14
|
-
fieldBackgroundMixin,
|
|
15
|
-
IconButton,
|
|
16
|
-
lazyChunk,
|
|
17
|
-
Skeleton,
|
|
18
|
-
XIcon
|
|
19
|
-
} from "@rebasepro/ui";
|
|
20
|
-
import type { RichTextEditorProps } from "../../editor";
|
|
21
|
-
import { resolveStorageFilenameString, resolveStoragePathString } from "@rebasepro/common";
|
|
22
|
-
import { randomString } from "@rebasepro/utils";
|
|
23
|
-
|
|
24
|
-
// Lazy-load ProseMirror editor + markdown parser/serializer (~300KB)
|
|
25
|
-
// Only fetched when a markdown field is actually rendered.
|
|
26
|
-
const RichTextEditor = lazyChunk(() => import("../../editor").then(m => ({ default: m.RichTextEditor })));
|
|
27
|
-
const loadMarkdownUtils = () => import("../../editor/markdown");
|
|
28
|
-
let _markdownUtils: Awaited<ReturnType<typeof loadMarkdownUtils>> | null = null;
|
|
29
|
-
const getMarkdownUtils = async () => {
|
|
30
|
-
if (!_markdownUtils) _markdownUtils = await loadMarkdownUtils();
|
|
31
|
-
return _markdownUtils;
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
interface MarkdownEditorFieldProps {
|
|
35
|
-
highlight?: { from: number, to: number };
|
|
36
|
-
editorProps?: Partial<RichTextEditorProps>
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* Normalize markdown for comparison purposes: collapse whitespace,
|
|
41
|
-
* normalize line endings, trim lines. This is NOT for display.
|
|
42
|
-
*/
|
|
43
|
-
function normalizeMarkdown(md: string | null | undefined): string {
|
|
44
|
-
if (!md) return "";
|
|
45
|
-
return md
|
|
46
|
-
.replace(/\r\n/g, "\n")
|
|
47
|
-
.replace(/\n{3,}/g, "\n\n")
|
|
48
|
-
.replace(/[ \t]+$/gm, "")
|
|
49
|
-
.trim();
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
/**
|
|
53
|
-
* Compute the canonical form of a markdown string by doing a full
|
|
54
|
-
* parse → serialize roundtrip through ProseMirror. This gives us
|
|
55
|
-
* the exact output the editor will produce for a given input,
|
|
56
|
-
* so we can compare against it to avoid false dirty states.
|
|
57
|
-
*
|
|
58
|
-
* Falls back to normalizeMarkdown if the ProseMirror module hasn't loaded yet.
|
|
59
|
-
*/
|
|
60
|
-
function canonicalizeMarkdown(md: string | null | undefined): string {
|
|
61
|
-
if (!md) return "";
|
|
62
|
-
if (!_markdownUtils) return normalizeMarkdown(md);
|
|
63
|
-
try {
|
|
64
|
-
const doc = _markdownUtils.parser.parse(md);
|
|
65
|
-
if (!doc) return normalizeMarkdown(md);
|
|
66
|
-
return normalizeMarkdown(_markdownUtils.serializer.serialize(doc));
|
|
67
|
-
} catch {
|
|
68
|
-
return normalizeMarkdown(md);
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
export function MarkdownEditorFieldBinding({
|
|
73
|
-
property,
|
|
74
|
-
propertyKey,
|
|
75
|
-
value,
|
|
76
|
-
setValue,
|
|
77
|
-
includeDescription,
|
|
78
|
-
hideLabel,
|
|
79
|
-
showError,
|
|
80
|
-
error,
|
|
81
|
-
minimalistView,
|
|
82
|
-
disabled: disabledProp,
|
|
83
|
-
isSubmitting,
|
|
84
|
-
context,
|
|
85
|
-
customProps
|
|
86
|
-
}: FieldProps<StringProperty, MarkdownEditorFieldProps>) {
|
|
87
|
-
|
|
88
|
-
const authController = useAuthController();
|
|
89
|
-
const disabled = disabledProp || isSubmitting;
|
|
90
|
-
const highlight = customProps?.highlight;
|
|
91
|
-
const editorProps = customProps?.editorProps;
|
|
92
|
-
const defaultStorageSource = useStorageSource();
|
|
93
|
-
const storage = property.storage;
|
|
94
|
-
const storageSources = useStorageSources();
|
|
95
|
-
|
|
96
|
-
// Resolve the correct storage source for this property.
|
|
97
|
-
// Mirrors the resolution in useStorageUploadController.
|
|
98
|
-
const storageSource = useMemo(() => resolveStorageSource({
|
|
99
|
-
sourceKey: storage?.storageSource,
|
|
100
|
-
sources: storageSources.sources,
|
|
101
|
-
defaultSource: defaultStorageSource
|
|
102
|
-
}), [storage?.storageSource, storageSources.sources, defaultStorageSource]);
|
|
103
|
-
|
|
104
|
-
const entityValues = context.values;
|
|
105
|
-
const entityId = context.entityId;
|
|
106
|
-
const path = context.path;
|
|
107
|
-
|
|
108
|
-
const [fieldVersion, setFieldVersion] = useState(0);
|
|
109
|
-
const internalValue = useRef<string | null>(value);
|
|
110
|
-
|
|
111
|
-
// Eagerly load ProseMirror markdown utils when the field first mounts
|
|
112
|
-
useEffect(() => {
|
|
113
|
-
getMarkdownUtils().then(() => {
|
|
114
|
-
// Update canonical ref with the proper round-tripped value now that ProseMirror is loaded
|
|
115
|
-
canonicalRef.current = canonicalizeMarkdown(value);
|
|
116
|
-
});
|
|
117
|
-
}, []);
|
|
118
|
-
|
|
119
|
-
// Compute the canonical (round-tripped) form of the initial value ONCE.
|
|
120
|
-
// This is what ProseMirror will produce after parse → serialize, so any
|
|
121
|
-
// future serialization that matches this canonical form is NOT a real change.
|
|
122
|
-
const canonicalInitialValue = useMemo(
|
|
123
|
-
() => canonicalizeMarkdown(value),
|
|
124
|
-
|
|
125
|
-
[] // intentionally only on mount
|
|
126
|
-
);
|
|
127
|
-
// Track it in a ref so the callback always has the latest
|
|
128
|
-
const canonicalRef = useRef(canonicalInitialValue);
|
|
129
|
-
|
|
130
|
-
const onContentChange = useCallback((content: string) => {
|
|
131
|
-
const normalizedContent = normalizeMarkdown(content);
|
|
132
|
-
|
|
133
|
-
// Compare against the canonical roundtripped form of the initial value.
|
|
134
|
-
// This eliminates ALL false positives from parse→serialize normalization
|
|
135
|
-
// differences (trailing nodes, bullet chars, whitespace, etc.).
|
|
136
|
-
if (normalizedContent === canonicalRef.current) {
|
|
137
|
-
return;
|
|
138
|
-
}
|
|
139
|
-
// Also compare against the current form value to avoid redundant updates
|
|
140
|
-
if (normalizedContent === normalizeMarkdown(value)) {
|
|
141
|
-
return;
|
|
142
|
-
}
|
|
143
|
-
internalValue.current = content;
|
|
144
|
-
setValue(content);
|
|
145
|
-
}, [setValue, value]);
|
|
146
|
-
|
|
147
|
-
useEffect(() => {
|
|
148
|
-
if (internalValue.current !== value) {
|
|
149
|
-
internalValue.current = value;
|
|
150
|
-
canonicalRef.current = canonicalizeMarkdown(value);
|
|
151
|
-
setFieldVersion(v => v + 1);
|
|
152
|
-
}
|
|
153
|
-
}, [value]);
|
|
154
|
-
|
|
155
|
-
const fileNameBuilder = useCallback(async (file: File) => {
|
|
156
|
-
if (storage?.fileName) {
|
|
157
|
-
const fileName = await resolveStorageFilenameString({
|
|
158
|
-
input: storage.fileName,
|
|
159
|
-
storage,
|
|
160
|
-
values: entityValues,
|
|
161
|
-
entityId,
|
|
162
|
-
path,
|
|
163
|
-
property: property,
|
|
164
|
-
file,
|
|
165
|
-
propertyKey
|
|
166
|
-
});
|
|
167
|
-
if (!fileName || fileName.length === 0) {
|
|
168
|
-
throw Error("You need to return a valid filename");
|
|
169
|
-
}
|
|
170
|
-
return fileName;
|
|
171
|
-
}
|
|
172
|
-
return randomString() + "_" + file.name;
|
|
173
|
-
}, [entityId, entityValues, path, property, propertyKey, storage]);
|
|
174
|
-
|
|
175
|
-
const storagePathBuilder = useCallback((file: File) => {
|
|
176
|
-
if (!storage) return "/";
|
|
177
|
-
return resolveStoragePathString({
|
|
178
|
-
input: storage.storagePath,
|
|
179
|
-
storage,
|
|
180
|
-
values: entityValues,
|
|
181
|
-
entityId,
|
|
182
|
-
path,
|
|
183
|
-
property,
|
|
184
|
-
file,
|
|
185
|
-
propertyKey
|
|
186
|
-
}) ?? "/";
|
|
187
|
-
}, [entityId, entityValues, path, property, propertyKey, storage]);
|
|
188
|
-
|
|
189
|
-
const editor = <Suspense fallback={<Skeleton height={200} className="w-full rounded-md"/>}>
|
|
190
|
-
<RichTextEditor
|
|
191
|
-
content={value}
|
|
192
|
-
onMarkdownContentChange={onContentChange}
|
|
193
|
-
version={context.formex.version + fieldVersion}
|
|
194
|
-
highlight={highlight}
|
|
195
|
-
disabled={disabled}
|
|
196
|
-
handleImageUpload={async (file: File) => {
|
|
197
|
-
const storagePath = storagePathBuilder(file);
|
|
198
|
-
const fileName = await fileNameBuilder(file);
|
|
199
|
-
const key = `${storagePath}/${fileName}`.replace(/^\/+/, "").replace(/\/+/g, "/");
|
|
200
|
-
const result = await storageSource.putObject({
|
|
201
|
-
file,
|
|
202
|
-
key
|
|
203
|
-
});
|
|
204
|
-
const downloadConfig = await storageSource.getSignedUrl(result.key);
|
|
205
|
-
const url = downloadConfig.url;
|
|
206
|
-
if (!url) {
|
|
207
|
-
throw new Error("Error uploading image");
|
|
208
|
-
}
|
|
209
|
-
return url;
|
|
210
|
-
}}
|
|
211
|
-
{...editorProps}
|
|
212
|
-
/>
|
|
213
|
-
</Suspense>;
|
|
214
|
-
|
|
215
|
-
if (minimalistView)
|
|
216
|
-
return editor;
|
|
217
|
-
|
|
218
|
-
return (
|
|
219
|
-
<>
|
|
220
|
-
{!hideLabel && <div className="flex items-center w-full">
|
|
221
|
-
<LabelWithIconAndTooltip
|
|
222
|
-
propertyKey={propertyKey}
|
|
223
|
-
icon={getIconForProperty(property, "small")}
|
|
224
|
-
required={property.validation?.required}
|
|
225
|
-
title={property.name ?? propertyKey}
|
|
226
|
-
className={"h-8 text-text-secondary dark:text-text-secondary-dark ml-3.5"}/>
|
|
227
|
-
</div>}
|
|
228
|
-
{/* `relative` so Clear can float inside the box. It used to sit in
|
|
229
|
-
the label row, which meant a clearable field with its label
|
|
230
|
-
lifted out by the form still drew a row of chrome above the box
|
|
231
|
-
and started lower than the field beside it.
|
|
232
|
-
Bottom-right, not top: the editor puts its own mode toggle at
|
|
233
|
-
`top-2 right-2` and the two would sit on each other. */}
|
|
234
|
-
<div
|
|
235
|
-
className={cls("relative rounded-md", fieldBackgroundMixin, disabled ? fieldBackgroundDisabledMixin : fieldBackgroundHoverMixin)}>
|
|
236
|
-
{property.admin?.clearable && !disabled && (
|
|
237
|
-
<IconButton
|
|
238
|
-
size="small"
|
|
239
|
-
className="absolute bottom-1 right-1 z-10"
|
|
240
|
-
onClick={(e) => {
|
|
241
|
-
e.stopPropagation();
|
|
242
|
-
e.preventDefault();
|
|
243
|
-
setValue(null);
|
|
244
|
-
}}
|
|
245
|
-
>
|
|
246
|
-
<XIcon/>
|
|
247
|
-
</IconButton>
|
|
248
|
-
)}
|
|
249
|
-
{editor}
|
|
250
|
-
</div>
|
|
251
|
-
<FieldHelperText includeDescription={includeDescription}
|
|
252
|
-
showError={showError}
|
|
253
|
-
error={error}
|
|
254
|
-
property={property}/>
|
|
255
|
-
</>
|
|
256
|
-
|
|
257
|
-
);
|
|
258
|
-
|
|
259
|
-
}
|
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
import type { FieldProps } from "../../types/fields";
|
|
2
|
-
import type { ArrayProperty, Property } from "@rebasepro/types";
|
|
3
|
-
import React, { useCallback } from "react";
|
|
4
|
-
|
|
5
|
-
;
|
|
6
|
-
import { FieldHelperText } from "../components/FieldHelperText";
|
|
7
|
-
import { LabelWithIconAndTooltip } from "../components/LabelWithIconAndTooltip";
|
|
8
|
-
import { EnumValuesChip } from "../../preview";
|
|
9
|
-
import { getIconForProperty } from "../../util/property_utils";
|
|
10
|
-
import { enumToObjectEntries, getLabelOrConfigFrom } from "@rebasepro/common";
|
|
11
|
-
import { iconSize, MultiSelect, MultiSelectItem, XIcon } from "@rebasepro/ui";
|
|
12
|
-
import { useClearRestoreValue } from "../useClearRestoreValue";
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* This fields renders a dropdown with multiple selection.
|
|
16
|
-
*
|
|
17
|
-
* This is one of the internal components that get mapped natively inside forms
|
|
18
|
-
* and tables to the specified properties.
|
|
19
|
-
* @group Form fields
|
|
20
|
-
*/
|
|
21
|
-
export function MultiSelectFieldBinding({
|
|
22
|
-
propertyKey,
|
|
23
|
-
value,
|
|
24
|
-
setValue,
|
|
25
|
-
error,
|
|
26
|
-
showError,
|
|
27
|
-
disabled,
|
|
28
|
-
property,
|
|
29
|
-
includeDescription,
|
|
30
|
-
hideLabel,
|
|
31
|
-
size = "large",
|
|
32
|
-
autoFocus
|
|
33
|
-
}: FieldProps<ArrayProperty, unknown, Record<string, unknown>>) {
|
|
34
|
-
|
|
35
|
-
const of = property.of;
|
|
36
|
-
if (!of) {
|
|
37
|
-
throw Error("Using wrong component ArrayEnumSelect");
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
if (Array.isArray(of)) {
|
|
41
|
-
throw Error("Using array properties instead of single one in `of` in ArrayProperty");
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
if (of.type !== "string" && of.type !== "number") {
|
|
45
|
-
throw Error("Field misconfiguration: array field of type string or number");
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
const enumValues = of.enum ? enumToObjectEntries(of.enum) : undefined;
|
|
49
|
-
if (!enumValues) {
|
|
50
|
-
console.error(property);
|
|
51
|
-
throw Error("Field misconfiguration: array field of type string or number needs to have enumValues");
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
useClearRestoreValue({
|
|
55
|
-
property,
|
|
56
|
-
value,
|
|
57
|
-
setValue
|
|
58
|
-
});
|
|
59
|
-
|
|
60
|
-
const validValue = !!value && Array.isArray(value);
|
|
61
|
-
|
|
62
|
-
const renderValue = useCallback((enumKey: string, list: boolean) => {
|
|
63
|
-
const enumValue = enumKey !== undefined ? getLabelOrConfigFrom(enumValues, enumKey) : undefined;
|
|
64
|
-
return <EnumValuesChip
|
|
65
|
-
enumKey={enumKey}
|
|
66
|
-
enumValues={enumValues}
|
|
67
|
-
size={"medium"}
|
|
68
|
-
key={enumKey}>
|
|
69
|
-
{enumValue?.label ?? enumKey}
|
|
70
|
-
{!list && <button
|
|
71
|
-
className="ml-1 ring-offset-background rounded-full outline-hidden focus:ring-2 focus:ring-ring focus:ring-offset-2"
|
|
72
|
-
onMouseDown={(e) => {
|
|
73
|
-
e.preventDefault();
|
|
74
|
-
e.stopPropagation();
|
|
75
|
-
}}
|
|
76
|
-
onClick={(e) => {
|
|
77
|
-
e.preventDefault();
|
|
78
|
-
e.stopPropagation();
|
|
79
|
-
setValue((value ?? []).filter((v: string | number) => v !== enumKey));
|
|
80
|
-
}}
|
|
81
|
-
>
|
|
82
|
-
<XIcon size={iconSize.smallest}/>
|
|
83
|
-
</button>}
|
|
84
|
-
</EnumValuesChip>;
|
|
85
|
-
}, [enumValues, setValue, value]);
|
|
86
|
-
|
|
87
|
-
return (
|
|
88
|
-
<>
|
|
89
|
-
<MultiSelect
|
|
90
|
-
// No top margin: `className` lands on the box itself, not on
|
|
91
|
-
// the label above it, so `mt-2` was 8px of gap between the
|
|
92
|
-
// form's label and this control and none between the label and
|
|
93
|
-
// the text field beside it. A binding renders a control, not a
|
|
94
|
-
// labelled control — the top of what it renders is the top of
|
|
95
|
-
// the box, or it will not line up with its neighbour.
|
|
96
|
-
className={"w-full"}
|
|
97
|
-
size={size}
|
|
98
|
-
value={validValue ? value.map((v) => v?.toString()) : []}
|
|
99
|
-
disabled={disabled}
|
|
100
|
-
modalPopover={true}
|
|
101
|
-
label={hideLabel ? undefined : <LabelWithIconAndTooltip
|
|
102
|
-
propertyKey={propertyKey}
|
|
103
|
-
icon={getIconForProperty(property, "small")}
|
|
104
|
-
required={property.validation?.required}
|
|
105
|
-
title={property.name ?? propertyKey}
|
|
106
|
-
className={"h-8 text-text-secondary dark:text-text-secondary-dark ml-3.5"}/>}
|
|
107
|
-
onValueChange={(updatedValue: string[]) => {
|
|
108
|
-
let newValue;
|
|
109
|
-
if (of && (of as Property)?.type === "number") {
|
|
110
|
-
newValue = updatedValue ? (updatedValue as string[]).map((e) => parseFloat(e)) : [];
|
|
111
|
-
} else {
|
|
112
|
-
newValue = updatedValue;
|
|
113
|
-
}
|
|
114
|
-
return setValue(newValue);
|
|
115
|
-
}}>
|
|
116
|
-
{enumValues.map((enumValue) => String(enumValue.id)).map((enumKey) => (
|
|
117
|
-
<MultiSelectItem key={enumKey} value={enumKey}>
|
|
118
|
-
{renderValue(enumKey, true)}
|
|
119
|
-
</MultiSelectItem>))}
|
|
120
|
-
</MultiSelect>
|
|
121
|
-
|
|
122
|
-
<FieldHelperText includeDescription={includeDescription}
|
|
123
|
-
showError={showError}
|
|
124
|
-
error={error}
|
|
125
|
-
disabled={disabled}
|
|
126
|
-
property={property}/>
|
|
127
|
-
|
|
128
|
-
</>
|
|
129
|
-
);
|
|
130
|
-
}
|
|
@@ -1,168 +0,0 @@
|
|
|
1
|
-
import { useSelectionDialog } from "../../hooks/useSelectionDialog";
|
|
2
|
-
import type { FieldProps } from "../../types/fields";
|
|
3
|
-
import type { RelationProperty } from "@rebasepro/types";
|
|
4
|
-
import { Entity, getCollectionDataPath, getDataSourceCapabilities } from "@rebasepro/types";
|
|
5
|
-
import React, { useCallback } from "react";
|
|
6
|
-
import { FieldHelperText } from "../components/FieldHelperText";
|
|
7
|
-
import { LabelWithIconAndTooltip } from "../components/LabelWithIconAndTooltip";
|
|
8
|
-
import { ArrayContainer, ArrayEntryParams } from "../../components/ArrayContainer";
|
|
9
|
-
import { getIconForProperty } from "../../util/property_utils";
|
|
10
|
-
import { getRelationFrom, resolveRelationProperty } from "@rebasepro/common";
|
|
11
|
-
|
|
12
|
-
import { ErrorView, useTranslation } from "@rebasepro/app";
|
|
13
|
-
import { Button, cls, ExpandablePanel, fieldBackgroundMixin, PencilIcon, Typography } from "@rebasepro/ui";
|
|
14
|
-
import { RelationPreview } from "../../preview";
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* This field allows selecting multiple references.
|
|
18
|
-
*
|
|
19
|
-
* This is one of the internal components that get mapped natively inside forms
|
|
20
|
-
* and tables to the specified properties.
|
|
21
|
-
* @group Form fields
|
|
22
|
-
*/
|
|
23
|
-
export function MultipleRelationFieldBinding({
|
|
24
|
-
propertyKey,
|
|
25
|
-
value: valueProp,
|
|
26
|
-
error,
|
|
27
|
-
showError,
|
|
28
|
-
disabled,
|
|
29
|
-
isSubmitting,
|
|
30
|
-
property,
|
|
31
|
-
includeDescription,
|
|
32
|
-
setValue,
|
|
33
|
-
setFieldValue,
|
|
34
|
-
context
|
|
35
|
-
}: FieldProps<RelationProperty>) {
|
|
36
|
-
|
|
37
|
-
const value = Array.isArray(valueProp) ? valueProp : [];
|
|
38
|
-
const { t } = useTranslation();
|
|
39
|
-
|
|
40
|
-
if (property.type !== "relation") {
|
|
41
|
-
throw Error("RelationFieldBinding expected a property containing a relation");
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
const parentCollection = context.collection;
|
|
45
|
-
const capabilities = parentCollection ? getDataSourceCapabilities(parentCollection.engine) : undefined;
|
|
46
|
-
// Only two things have to hold here: there is a collection, and its engine
|
|
47
|
-
// has relations at all. Whether *this* property's relation can be resolved
|
|
48
|
-
// is `resolveRelationProperty`'s question, and it answers it across all
|
|
49
|
-
// three forms — a pre-stamped `resolvedRelation`, an inline `relation`, or
|
|
50
|
-
// a lookup by name in the collection's `relations` array — with an error
|
|
51
|
-
// naming the property and the collection when it cannot.
|
|
52
|
-
//
|
|
53
|
-
// This used to demand the `relations` array as well, which the inline form
|
|
54
|
-
// does not produce. That is the documented way to declare a relation, so
|
|
55
|
-
// every collection using it threw here and rendered the error boundary
|
|
56
|
-
// instead of the field.
|
|
57
|
-
if (!parentCollection || !capabilities?.supportsRelations) {
|
|
58
|
-
throw Error("MultipleRelationFieldBinding expected a collection whose engine supports relations");
|
|
59
|
-
}
|
|
60
|
-
const resolvedProperty = resolveRelationProperty(property, parentCollection, propertyKey)
|
|
61
|
-
const relation = resolvedProperty;
|
|
62
|
-
if (!relation)
|
|
63
|
-
throw Error(
|
|
64
|
-
"Property relation is required for MultipleRelationFieldBinding"
|
|
65
|
-
)
|
|
66
|
-
|
|
67
|
-
const selectedEntityIds = value && Array.isArray(value) ? value.map((ref) => ref.id) : [];
|
|
68
|
-
const collection = relation.target();
|
|
69
|
-
|
|
70
|
-
const onMultipleEntitiesSelected = useCallback((entities: Entity<Record<string, unknown>>[]) => {
|
|
71
|
-
setValue(entities.map(e => getRelationFrom(e)));
|
|
72
|
-
}, [setValue]);
|
|
73
|
-
|
|
74
|
-
const referenceDialogController = useSelectionDialog({
|
|
75
|
-
multiselect: true,
|
|
76
|
-
path: getCollectionDataPath(collection),
|
|
77
|
-
collection,
|
|
78
|
-
onMultipleEntitiesSelected,
|
|
79
|
-
selectedEntityIds,
|
|
80
|
-
fixedFilter: property.admin?.fixedFilter
|
|
81
|
-
}
|
|
82
|
-
);
|
|
83
|
-
|
|
84
|
-
const onEntryClick = (e: React.SyntheticEvent) => {
|
|
85
|
-
e.preventDefault();
|
|
86
|
-
referenceDialogController.open();
|
|
87
|
-
};
|
|
88
|
-
|
|
89
|
-
const buildEntry = useCallback(({
|
|
90
|
-
index,
|
|
91
|
-
internalId,
|
|
92
|
-
storedProps,
|
|
93
|
-
storeProps
|
|
94
|
-
}: ArrayEntryParams) => {
|
|
95
|
-
const entryValue = value && Array.isArray(value) && value.length > index ? value[index] : undefined;
|
|
96
|
-
if (!entryValue)
|
|
97
|
-
return <div>Internal ERROR</div>;
|
|
98
|
-
return (
|
|
99
|
-
<RelationPreview
|
|
100
|
-
key={internalId}
|
|
101
|
-
previewProperties={property.admin?.previewProperties}
|
|
102
|
-
size={"medium"}
|
|
103
|
-
onClick={onEntryClick}
|
|
104
|
-
hover={!disabled}
|
|
105
|
-
relation={entryValue}
|
|
106
|
-
includeId={property.admin?.includeId}
|
|
107
|
-
includeEntityLink={property.admin?.includeEntityLink}
|
|
108
|
-
/>
|
|
109
|
-
);
|
|
110
|
-
}, [relation, property.admin?.previewProperties, value]);
|
|
111
|
-
|
|
112
|
-
const title = (<>
|
|
113
|
-
<LabelWithIconAndTooltip
|
|
114
|
-
propertyKey={propertyKey}
|
|
115
|
-
icon={getIconForProperty(property, "small")}
|
|
116
|
-
required={property.validation?.required}
|
|
117
|
-
title={property.name ?? propertyKey}
|
|
118
|
-
className={"h-8 flex grow text-text-secondary dark:text-text-secondary-dark"}/>
|
|
119
|
-
{Array.isArray(value) && <Typography variant={"caption"} className={"px-4"}>({value.length})</Typography>}
|
|
120
|
-
</>);
|
|
121
|
-
|
|
122
|
-
const body = <>
|
|
123
|
-
{!collection && <ErrorView
|
|
124
|
-
error={"The specified collection does not exist. Check console"}/>}
|
|
125
|
-
|
|
126
|
-
{collection && <div className={"group"}>
|
|
127
|
-
|
|
128
|
-
<ArrayContainer droppableId={propertyKey}
|
|
129
|
-
value={value}
|
|
130
|
-
disabled={isSubmitting}
|
|
131
|
-
buildEntry={buildEntry}
|
|
132
|
-
canAddElements={false}
|
|
133
|
-
addLabel={property.name ? t("add_reference_to", { name: property.name }) : t("add_reference")}
|
|
134
|
-
newDefaultEntry={null}
|
|
135
|
-
onValueChange={(value) => setFieldValue(propertyKey, value)}
|
|
136
|
-
/>
|
|
137
|
-
|
|
138
|
-
<Button
|
|
139
|
-
className="ml-3.5 my-4 justify-center text-left"
|
|
140
|
-
variant="text"
|
|
141
|
-
color="primary"
|
|
142
|
-
disabled={isSubmitting}
|
|
143
|
-
onClick={onEntryClick}>
|
|
144
|
-
<PencilIcon size={16}/>
|
|
145
|
-
{t("edit")} {property.name}
|
|
146
|
-
</Button>
|
|
147
|
-
</div>}
|
|
148
|
-
</>;
|
|
149
|
-
|
|
150
|
-
return (
|
|
151
|
-
<>
|
|
152
|
-
|
|
153
|
-
<ExpandablePanel
|
|
154
|
-
titleClassName={fieldBackgroundMixin}
|
|
155
|
-
innerClassName={cls("px-2 md:px-4 pb-2 md:pb-4 pt-1 md:pt-2", fieldBackgroundMixin)}
|
|
156
|
-
title={title}>
|
|
157
|
-
{body}
|
|
158
|
-
</ExpandablePanel>
|
|
159
|
-
|
|
160
|
-
<FieldHelperText includeDescription={includeDescription}
|
|
161
|
-
showError={showError}
|
|
162
|
-
error={error}
|
|
163
|
-
disabled={disabled}
|
|
164
|
-
property={property}/>
|
|
165
|
-
|
|
166
|
-
</>
|
|
167
|
-
);
|
|
168
|
-
}
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
import type { FieldProps } from "../../types/fields";
|
|
2
|
-
import type { Property } from "@rebasepro/types";
|
|
3
|
-
import React from "react";
|
|
4
|
-
|
|
5
|
-
;
|
|
6
|
-
|
|
7
|
-
import { PropertyPreview } from "../../preview";
|
|
8
|
-
import { FieldHelperText } from "../components/FieldHelperText";
|
|
9
|
-
import { LabelWithIconAndTooltip } from "../components/LabelWithIconAndTooltip";
|
|
10
|
-
import { ErrorBoundary } from "@rebasepro/ui";
|
|
11
|
-
import { getIconForProperty } from "../../util/property_utils";
|
|
12
|
-
import { cls } from "@rebasepro/ui";
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
*
|
|
16
|
-
* Simply render the non-editable preview of a field
|
|
17
|
-
*
|
|
18
|
-
* This is one of the internal components that get mapped natively inside forms
|
|
19
|
-
* and tables to the specified properties.
|
|
20
|
-
* @group Form fields
|
|
21
|
-
*/
|
|
22
|
-
export function ReadOnlyFieldBinding({
|
|
23
|
-
propertyKey,
|
|
24
|
-
value,
|
|
25
|
-
error,
|
|
26
|
-
showError,
|
|
27
|
-
minimalistView,
|
|
28
|
-
property,
|
|
29
|
-
includeDescription,
|
|
30
|
-
hideLabel,
|
|
31
|
-
context
|
|
32
|
-
}: FieldProps<Property>) {
|
|
33
|
-
|
|
34
|
-
// if (!context.entityId)
|
|
35
|
-
// throw new Error("ReadOnlyFieldBinding: Entity id is null");
|
|
36
|
-
|
|
37
|
-
const skipCardWrapper = property.type === "relation" || property.type === "reference";
|
|
38
|
-
|
|
39
|
-
return (
|
|
40
|
-
|
|
41
|
-
<>
|
|
42
|
-
|
|
43
|
-
{!minimalistView && !hideLabel && <LabelWithIconAndTooltip
|
|
44
|
-
propertyKey={propertyKey}
|
|
45
|
-
icon={getIconForProperty(property, "small")}
|
|
46
|
-
required={property.validation?.required}
|
|
47
|
-
title={property.name ?? propertyKey}
|
|
48
|
-
className={"h-8 text-text-secondary dark:text-text-secondary-dark ml-3"}/>
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
<div
|
|
52
|
-
className={cls(
|
|
53
|
-
"w-full overflow-x-scroll no-scrollbar flex items-center",
|
|
54
|
-
skipCardWrapper
|
|
55
|
-
? ""
|
|
56
|
-
// `min-h-12` is `TextField`'s own `large` height, which is
|
|
57
|
-
// what every editable field in the form is. At 40px a
|
|
58
|
-
// read-only field sat 8px short of the input beside it,
|
|
59
|
-
// so a row holding one of each had its two boxes'
|
|
60
|
-
// baselines and bottom edges disagree — the field looked
|
|
61
|
-
// misaligned rather than uneditable.
|
|
62
|
-
// `px-3` is what `TextField` gives its input, so a
|
|
63
|
-
// read-only value starts on the same vertical line as
|
|
64
|
-
// the text beside it. It was `px-4 md:px-6`, which in a
|
|
65
|
-
// one-column span spent a sixth of the box on empty
|
|
66
|
-
// margin and pushed short values towards the middle.
|
|
67
|
-
: "rounded-lg border border-surface-200 dark:border-surface-700 px-3 min-h-12 opacity-80"
|
|
68
|
-
)}>
|
|
69
|
-
|
|
70
|
-
<ErrorBoundary>
|
|
71
|
-
{/* The field is labelled either just above by this
|
|
72
|
-
component, or by the `FieldBlock` that asked for
|
|
73
|
-
`hideLabel` — never by the preview. `BooleanPreview`
|
|
74
|
-
prints the property name beside its checkbox, so a
|
|
75
|
-
read-only boolean read as "Procesado por LLM" over a
|
|
76
|
-
checkbox saying "Procesado por LLM", wrapped over two
|
|
77
|
-
lines in a one-column span. */}
|
|
78
|
-
<PropertyPreview propertyKey={propertyKey}
|
|
79
|
-
value={value}
|
|
80
|
-
property={property}
|
|
81
|
-
hideLabel={hideLabel || !minimalistView}
|
|
82
|
-
size={"medium"}/>
|
|
83
|
-
</ErrorBoundary>
|
|
84
|
-
|
|
85
|
-
</div>
|
|
86
|
-
|
|
87
|
-
<FieldHelperText includeDescription={includeDescription}
|
|
88
|
-
showError={showError}
|
|
89
|
-
error={error}
|
|
90
|
-
property={property}/>
|
|
91
|
-
|
|
92
|
-
</>
|
|
93
|
-
);
|
|
94
|
-
}
|