@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,440 +0,0 @@
|
|
|
1
|
-
import { DataType } from "@rebasepro/types";
|
|
2
|
-
import type { AdminCollection } from "@rebasepro/cms-types";
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Valid dataType values for properties
|
|
6
|
-
*/
|
|
7
|
-
const VALID_DATA_TYPES = [
|
|
8
|
-
"string",
|
|
9
|
-
"number",
|
|
10
|
-
"boolean",
|
|
11
|
-
"date",
|
|
12
|
-
"geopoint",
|
|
13
|
-
"reference",
|
|
14
|
-
"relation",
|
|
15
|
-
"array",
|
|
16
|
-
"map",
|
|
17
|
-
"vector",
|
|
18
|
-
"binary"
|
|
19
|
-
] as const;
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Validation error with path and message
|
|
23
|
-
*/
|
|
24
|
-
export interface CollectionValidationError {
|
|
25
|
-
path: string;
|
|
26
|
-
message: string;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* Result of collection JSON validation
|
|
31
|
-
*/
|
|
32
|
-
export interface CollectionValidationResult {
|
|
33
|
-
valid: boolean;
|
|
34
|
-
errors: CollectionValidationError[];
|
|
35
|
-
collection?: AdminCollection;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* Validates a property object recursively
|
|
40
|
-
*/
|
|
41
|
-
function validateProperty(
|
|
42
|
-
property: Record<string, unknown>,
|
|
43
|
-
path: string,
|
|
44
|
-
errors: CollectionValidationError[]
|
|
45
|
-
): void {
|
|
46
|
-
if (typeof property !== "object" || property === null) {
|
|
47
|
-
errors.push({
|
|
48
|
-
path,
|
|
49
|
-
message: "Property must be an object"
|
|
50
|
-
});
|
|
51
|
-
return;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
// Check type
|
|
55
|
-
if (!property.type) {
|
|
56
|
-
errors.push({
|
|
57
|
-
path: `${path}.type`,
|
|
58
|
-
message: "Required field is missing"
|
|
59
|
-
});
|
|
60
|
-
} else if (!VALID_DATA_TYPES.includes(property.type as DataType)) {
|
|
61
|
-
errors.push({
|
|
62
|
-
path: `${path}.type`,
|
|
63
|
-
message: `Invalid value "${property.type}", expected one of: ${VALID_DATA_TYPES.join(", ")}`
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
// Validate name if present
|
|
68
|
-
if (property.name !== undefined && typeof property.name !== "string") {
|
|
69
|
-
errors.push({
|
|
70
|
-
path: `${path}.name`,
|
|
71
|
-
message: "Must be a string"
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
// Validate array "of" property
|
|
76
|
-
if (property.type === "array") {
|
|
77
|
-
if (property.of) {
|
|
78
|
-
if (Array.isArray(property.of)) {
|
|
79
|
-
property.of.forEach((ofProp: Record<string, unknown>, index: number) => {
|
|
80
|
-
validateProperty(ofProp, `${path}.of[${index}]`, errors);
|
|
81
|
-
});
|
|
82
|
-
} else {
|
|
83
|
-
validateProperty(property.of as Record<string, unknown>, `${path}.of`, errors);
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
// oneOf validation
|
|
87
|
-
if (property.oneOf) {
|
|
88
|
-
if (typeof property.oneOf !== "object") {
|
|
89
|
-
errors.push({
|
|
90
|
-
path: `${path}.oneOf`,
|
|
91
|
-
message: "Must be an object"
|
|
92
|
-
});
|
|
93
|
-
} else if ((property.oneOf as Record<string, unknown>).properties) {
|
|
94
|
-
validateProperties((property.oneOf as Record<string, unknown>).properties as Record<string, unknown>, `${path}.oneOf.properties`, errors);
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
// Validate map properties
|
|
100
|
-
if (property.type === "map" && property.properties) {
|
|
101
|
-
validateProperties(property.properties as Record<string, unknown>, `${path}.properties`, errors);
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
// Validate reference path
|
|
105
|
-
if (property.type === "reference") {
|
|
106
|
-
if (property.path !== undefined && typeof property.path !== "string") {
|
|
107
|
-
errors.push({
|
|
108
|
-
path: `${path}.path`,
|
|
109
|
-
message: "Must be a string"
|
|
110
|
-
});
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
// Validate relation property
|
|
115
|
-
if (property.type === "relation") {
|
|
116
|
-
const link = property.relation as Record<string, unknown> | undefined;
|
|
117
|
-
if (link !== undefined) {
|
|
118
|
-
const KINDS = ["belongsTo", "hasOne", "hasMany", "manyToMany", "via"];
|
|
119
|
-
if (typeof link.kind !== "string" || !KINDS.includes(link.kind)) {
|
|
120
|
-
errors.push({
|
|
121
|
-
path: `${path}.relation.kind`,
|
|
122
|
-
message: `Must be one of ${KINDS.join(", ")}`
|
|
123
|
-
});
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
if (link.target !== undefined && typeof link.target !== "string" && typeof link.target !== "function") {
|
|
127
|
-
errors.push({
|
|
128
|
-
path: `${path}.relation.target`,
|
|
129
|
-
message: "Must be a collection slug or a thunk returning a collection"
|
|
130
|
-
});
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
// Each kind admits exactly one link field. Anything else on it is
|
|
134
|
-
// a leftover from another shape and would previously have been
|
|
135
|
-
// silently honoured by whichever consumer read it first.
|
|
136
|
-
const allowedByKind: Record<string, string[]> = {
|
|
137
|
-
belongsTo: ["localKey"],
|
|
138
|
-
hasOne: ["foreignKeyOnTarget", "sourceKey"],
|
|
139
|
-
hasMany: ["foreignKeyOnTarget", "sourceKey"],
|
|
140
|
-
manyToMany: ["through"],
|
|
141
|
-
via: ["joinPath", "cardinality"]
|
|
142
|
-
};
|
|
143
|
-
const linkFields = ["localKey", "foreignKeyOnTarget", "sourceKey", "through", "joinPath", "cardinality"];
|
|
144
|
-
const allowed = allowedByKind[String(link.kind)] ?? [];
|
|
145
|
-
for (const field of linkFields) {
|
|
146
|
-
if (link[field] !== undefined && !allowed.includes(field)) {
|
|
147
|
-
errors.push({
|
|
148
|
-
path: `${path}.relation.${field}`,
|
|
149
|
-
message: `Not valid on a "${String(link.kind)}" relation`
|
|
150
|
-
});
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
if (link.kind === "via" && !Array.isArray(link.joinPath)) {
|
|
155
|
-
errors.push({
|
|
156
|
-
path: `${path}.relation.joinPath`,
|
|
157
|
-
message: "A `via` relation requires a joinPath array"
|
|
158
|
-
});
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
// Validate vector property
|
|
164
|
-
if (property.type === "vector") {
|
|
165
|
-
if (property.dimensions !== undefined && (typeof property.dimensions !== "number" || isNaN(property.dimensions) || property.dimensions <= 0)) {
|
|
166
|
-
errors.push({
|
|
167
|
-
path: `${path}.dimensions`,
|
|
168
|
-
message: "Must be a positive number"
|
|
169
|
-
});
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
// Validate storage config for string
|
|
174
|
-
if (property.type === "string" && property.storage) {
|
|
175
|
-
if (typeof property.storage !== "object") {
|
|
176
|
-
errors.push({
|
|
177
|
-
path: `${path}.storage`,
|
|
178
|
-
message: "Must be an object"
|
|
179
|
-
});
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
// Validate enum if present
|
|
184
|
-
if (property.enum !== undefined) {
|
|
185
|
-
if (!Array.isArray(property.enum) && typeof property.enum !== "object") {
|
|
186
|
-
errors.push({
|
|
187
|
-
path: `${path}.enum`,
|
|
188
|
-
message: "Must be an array or object"
|
|
189
|
-
});
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
/**
|
|
195
|
-
* Validates a properties object (collection of property definitions)
|
|
196
|
-
*/
|
|
197
|
-
function validateProperties(
|
|
198
|
-
properties: Record<string, unknown>,
|
|
199
|
-
path: string,
|
|
200
|
-
errors: CollectionValidationError[]
|
|
201
|
-
): void {
|
|
202
|
-
if (typeof properties !== "object" || properties === null) {
|
|
203
|
-
errors.push({
|
|
204
|
-
path,
|
|
205
|
-
message: "Must be an object"
|
|
206
|
-
});
|
|
207
|
-
return;
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
for (const [key, property] of Object.entries(properties)) {
|
|
211
|
-
validateProperty(property as Record<string, unknown>, `${path}.${key}`, errors);
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
/**
|
|
216
|
-
* Validates optional collection fields
|
|
217
|
-
*/
|
|
218
|
-
function validateOptionalFields(
|
|
219
|
-
collection: Record<string, unknown>,
|
|
220
|
-
errors: CollectionValidationError[]
|
|
221
|
-
): void {
|
|
222
|
-
// String fields
|
|
223
|
-
const stringFields = [
|
|
224
|
-
"singularName",
|
|
225
|
-
"description",
|
|
226
|
-
"group",
|
|
227
|
-
"databaseId"
|
|
228
|
-
];
|
|
229
|
-
for (const field of stringFields) {
|
|
230
|
-
if (collection[field] !== undefined && typeof collection[field] !== "string") {
|
|
231
|
-
errors.push({
|
|
232
|
-
path: field,
|
|
233
|
-
message: "Must be a string"
|
|
234
|
-
});
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
// Boolean fields
|
|
239
|
-
const booleanFields = [
|
|
240
|
-
|
|
241
|
-
"selectionEnabled",
|
|
242
|
-
"inlineEditing",
|
|
243
|
-
"hideFromNavigation",
|
|
244
|
-
"hideIdFromForm",
|
|
245
|
-
"hideIdFromCollection",
|
|
246
|
-
"formAutoSave",
|
|
247
|
-
"alwaysApplyDefaultValues",
|
|
248
|
-
"includeJsonView",
|
|
249
|
-
"history"
|
|
250
|
-
];
|
|
251
|
-
for (const field of booleanFields) {
|
|
252
|
-
if (collection[field] !== undefined && typeof collection[field] !== "boolean") {
|
|
253
|
-
errors.push({
|
|
254
|
-
path: field,
|
|
255
|
-
message: "Must be a boolean"
|
|
256
|
-
});
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
// Icon can be string or object (React node)
|
|
261
|
-
if (collection.icon !== undefined &&
|
|
262
|
-
typeof collection.icon !== "string" &&
|
|
263
|
-
typeof collection.icon !== "object") {
|
|
264
|
-
errors.push({
|
|
265
|
-
path: "icon",
|
|
266
|
-
message: "Must be a string (icon key) or object"
|
|
267
|
-
});
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
// propertiesOrder must be array of strings
|
|
271
|
-
if (collection.propertiesOrder !== undefined) {
|
|
272
|
-
if (!Array.isArray(collection.propertiesOrder)) {
|
|
273
|
-
errors.push({
|
|
274
|
-
path: "propertiesOrder",
|
|
275
|
-
message: "Must be an array of strings"
|
|
276
|
-
});
|
|
277
|
-
} else if (!collection.propertiesOrder.every((item: unknown) => typeof item === "string")) {
|
|
278
|
-
errors.push({
|
|
279
|
-
path: "propertiesOrder",
|
|
280
|
-
message: "All items must be strings"
|
|
281
|
-
});
|
|
282
|
-
}
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
// subcollections must be array
|
|
286
|
-
if (collection.subcollections !== undefined) {
|
|
287
|
-
if (!Array.isArray(collection.subcollections)) {
|
|
288
|
-
errors.push({
|
|
289
|
-
path: "subcollections",
|
|
290
|
-
message: "Must be an array"
|
|
291
|
-
});
|
|
292
|
-
} else {
|
|
293
|
-
collection.subcollections.forEach((sub: Record<string, unknown>, index: number) => {
|
|
294
|
-
const subErrors: CollectionValidationError[] = [];
|
|
295
|
-
validateCollectionObject(sub, subErrors);
|
|
296
|
-
subErrors.forEach(err => {
|
|
297
|
-
errors.push({
|
|
298
|
-
path: `subcollections[${index}].${err.path}`,
|
|
299
|
-
message: err.message
|
|
300
|
-
});
|
|
301
|
-
});
|
|
302
|
-
});
|
|
303
|
-
}
|
|
304
|
-
}
|
|
305
|
-
|
|
306
|
-
// defaultViewMode validation
|
|
307
|
-
const validViewModes = ["table", "cards", "kanban"];
|
|
308
|
-
if (collection.defaultViewMode !== undefined) {
|
|
309
|
-
if (!validViewModes.includes(collection.defaultViewMode as string)) {
|
|
310
|
-
errors.push({
|
|
311
|
-
path: "defaultViewMode",
|
|
312
|
-
message: `Invalid value, expected one of: ${validViewModes.join(", ")}`
|
|
313
|
-
});
|
|
314
|
-
}
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
// kanban config validation
|
|
318
|
-
if (collection.kanban !== undefined) {
|
|
319
|
-
if (typeof collection.kanban !== "object" || collection.kanban === null) {
|
|
320
|
-
errors.push({
|
|
321
|
-
path: "kanban",
|
|
322
|
-
message: "Must be an object"
|
|
323
|
-
});
|
|
324
|
-
} else if ((collection.kanban as Record<string, unknown>).columnProperty !== undefined &&
|
|
325
|
-
typeof (collection.kanban as Record<string, unknown>).columnProperty !== "string") {
|
|
326
|
-
errors.push({
|
|
327
|
-
path: "kanban.columnProperty",
|
|
328
|
-
message: "Must be a string"
|
|
329
|
-
});
|
|
330
|
-
}
|
|
331
|
-
}
|
|
332
|
-
}
|
|
333
|
-
|
|
334
|
-
/**
|
|
335
|
-
* Validates a collection object
|
|
336
|
-
*/
|
|
337
|
-
function validateCollectionObject(
|
|
338
|
-
collection: Record<string, unknown>,
|
|
339
|
-
errors: CollectionValidationError[]
|
|
340
|
-
): void {
|
|
341
|
-
// Required fields
|
|
342
|
-
if (!collection.id) {
|
|
343
|
-
errors.push({
|
|
344
|
-
path: "id",
|
|
345
|
-
message: "Required field is missing"
|
|
346
|
-
});
|
|
347
|
-
} else if (typeof collection.id !== "string") {
|
|
348
|
-
errors.push({
|
|
349
|
-
path: "id",
|
|
350
|
-
message: "Must be a string"
|
|
351
|
-
});
|
|
352
|
-
}
|
|
353
|
-
|
|
354
|
-
if (!collection.name) {
|
|
355
|
-
errors.push({
|
|
356
|
-
path: "name",
|
|
357
|
-
message: "Required field is missing"
|
|
358
|
-
});
|
|
359
|
-
} else if (typeof collection.name !== "string") {
|
|
360
|
-
errors.push({
|
|
361
|
-
path: "name",
|
|
362
|
-
message: "Must be a string"
|
|
363
|
-
});
|
|
364
|
-
}
|
|
365
|
-
|
|
366
|
-
if (!collection.path) {
|
|
367
|
-
errors.push({
|
|
368
|
-
path: "path",
|
|
369
|
-
message: "Required field is missing"
|
|
370
|
-
});
|
|
371
|
-
} else if (typeof collection.path !== "string") {
|
|
372
|
-
errors.push({
|
|
373
|
-
path: "path",
|
|
374
|
-
message: "Must be a string"
|
|
375
|
-
});
|
|
376
|
-
}
|
|
377
|
-
|
|
378
|
-
// Properties validation
|
|
379
|
-
if (collection.properties !== undefined) {
|
|
380
|
-
validateProperties(collection.properties as Record<string, unknown>, "properties", errors);
|
|
381
|
-
}
|
|
382
|
-
|
|
383
|
-
// Optional fields
|
|
384
|
-
validateOptionalFields(collection, errors);
|
|
385
|
-
}
|
|
386
|
-
|
|
387
|
-
/**
|
|
388
|
-
* Validates a JSON string representing a collection configuration.
|
|
389
|
-
* Returns detailed validation errors if the JSON is invalid or doesn't match
|
|
390
|
-
* the expected collection schema.
|
|
391
|
-
*/
|
|
392
|
-
export function validateCollectionJson(jsonString: string): CollectionValidationResult {
|
|
393
|
-
const errors: CollectionValidationError[] = [];
|
|
394
|
-
|
|
395
|
-
// Try to parse JSON
|
|
396
|
-
let parsed: Record<string, unknown>;
|
|
397
|
-
try {
|
|
398
|
-
parsed = JSON.parse(jsonString);
|
|
399
|
-
} catch (e: unknown) {
|
|
400
|
-
// Try to extract line/column info from the error
|
|
401
|
-
const message_ = e instanceof Error ? e.message : String(e);
|
|
402
|
-
const match = message_.match(/position (\d+)/);
|
|
403
|
-
let message = "Invalid JSON syntax";
|
|
404
|
-
if (match) {
|
|
405
|
-
const position = parseInt(match[1], 10);
|
|
406
|
-
const lines = jsonString.substring(0, position).split("\n");
|
|
407
|
-
const line = lines.length;
|
|
408
|
-
const column = lines[lines.length - 1].length + 1;
|
|
409
|
-
message = `Invalid JSON syntax at line ${line}, column ${column}: ${message_}`;
|
|
410
|
-
} else {
|
|
411
|
-
message = `Invalid JSON syntax: ${message_}`;
|
|
412
|
-
}
|
|
413
|
-
return {
|
|
414
|
-
valid: false,
|
|
415
|
-
errors: [{
|
|
416
|
-
path: "",
|
|
417
|
-
message
|
|
418
|
-
}]
|
|
419
|
-
};
|
|
420
|
-
}
|
|
421
|
-
|
|
422
|
-
// Validate collection structure
|
|
423
|
-
if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
|
|
424
|
-
return {
|
|
425
|
-
valid: false,
|
|
426
|
-
errors: [{
|
|
427
|
-
path: "",
|
|
428
|
-
message: "Collection must be an object"
|
|
429
|
-
}]
|
|
430
|
-
};
|
|
431
|
-
}
|
|
432
|
-
|
|
433
|
-
validateCollectionObject(parsed as Record<string, unknown>, errors);
|
|
434
|
-
|
|
435
|
-
return {
|
|
436
|
-
valid: errors.length === 0,
|
|
437
|
-
errors,
|
|
438
|
-
collection: errors.length === 0 ? parsed as unknown as AdminCollection : undefined
|
|
439
|
-
};
|
|
440
|
-
}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
// Collection Editor UI — separate entry point for dynamic import / code splitting.
|
|
2
|
-
// This file is the target of dynamic import() calls from CollectionEditorDialogs.tsx
|
|
3
|
-
// so that the heavy collection editor UI code is split into its own chunk.
|
|
4
|
-
|
|
5
|
-
export { CollectionEditorDialog } from "./collection_editor/ui/collection_editor/CollectionEditorDialog";
|
|
6
|
-
export type { CollectionEditorDialogProps } from "./collection_editor/ui/collection_editor/CollectionEditorDialog";
|
|
7
|
-
|
|
8
|
-
export { PropertyFormDialog, PropertyForm } from "./collection_editor/ui/collection_editor/PropertyEditView";
|
|
9
|
-
export type { PropertyFormProps, OnPropertyChangedParams } from "./collection_editor/ui/collection_editor/PropertyEditView";
|
|
10
|
-
|
|
11
|
-
export { CollectionStudioView } from "./collection_editor/ui/collection_editor/CollectionStudioView";
|
|
12
|
-
export type { CollectionStudioViewProps } from "./collection_editor/ui/collection_editor/CollectionStudioView";
|
|
13
|
-
|
|
14
|
-
export { CollectionsStudioView } from "./collection_editor/ui/collection_editor/CollectionsStudioView";
|
|
15
|
-
export type { CollectionsStudioViewProps } from "./collection_editor/ui/collection_editor/CollectionsStudioView";
|
|
16
|
-
|
|
17
|
-
export { RouterCollectionStudioView } from "./collection_editor/ui/collection_editor/RouterCollectionStudioView";
|
|
18
|
-
export type { RouterCollectionStudioViewProps } from "./collection_editor/ui/collection_editor/RouterCollectionStudioView";
|
|
19
|
-
|
|
20
|
-
export { RouterCollectionsStudioView } from "./collection_editor/ui/collection_editor/RouterCollectionsStudioView";
|
|
21
|
-
export type { RouterCollectionsStudioViewProps } from "./collection_editor/ui/collection_editor/RouterCollectionsStudioView";
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
import type { AdditionalFieldDelegate, RebaseContext } from "@rebasepro/cms-types";
|
|
2
|
-
import type { Entity } from "@rebasepro/types";
|
|
3
|
-
import React, { useEffect, useState } from "react";
|
|
4
|
-
|
|
5
|
-
export interface AdditionalFieldValueProps<M extends Record<string, unknown>> {
|
|
6
|
-
field: AdditionalFieldDelegate<M>;
|
|
7
|
-
entity: Entity<M>;
|
|
8
|
-
context: RebaseContext;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Renders an `additionalFields` entry that supplies a `value` rather than a
|
|
13
|
-
* `Builder`.
|
|
14
|
-
*
|
|
15
|
-
* `value` is typed `string | number | Promise<string | number>`, and the promise
|
|
16
|
-
* arm has been part of that type from the start — the CSV export awaits it
|
|
17
|
-
* correctly. Every *renderer* called `.toString()` on the result instead, so an
|
|
18
|
-
* async value drew the literal text `[object Promise]` in the cell: a shape the
|
|
19
|
-
* type promised, that worked in one of its two consumers, and failed silently in
|
|
20
|
-
* the other. That is what made the obvious port of a FireCMS column — one that
|
|
21
|
-
* fetches a title from a subcollection — look supported and not be.
|
|
22
|
-
*
|
|
23
|
-
* Three call sites had the same three lines copied between them (the table cell,
|
|
24
|
-
* the form and the read-only record), which is why the bug reached all three.
|
|
25
|
-
* Now there is one.
|
|
26
|
-
*/
|
|
27
|
-
export function AdditionalFieldValue<M extends Record<string, unknown>>({
|
|
28
|
-
field,
|
|
29
|
-
entity,
|
|
30
|
-
context
|
|
31
|
-
}: AdditionalFieldValueProps<M>) {
|
|
32
|
-
|
|
33
|
-
const [resolved, setResolved] = useState<string | number | undefined>(() => {
|
|
34
|
-
const value = field.value?.({ entity, context });
|
|
35
|
-
// A synchronous value is available on the first render, so it never
|
|
36
|
-
// flashes empty on its way in.
|
|
37
|
-
return isPromise(value) ? undefined : value;
|
|
38
|
-
});
|
|
39
|
-
|
|
40
|
-
useEffect(() => {
|
|
41
|
-
const value = field.value?.({ entity, context });
|
|
42
|
-
if (!isPromise(value)) {
|
|
43
|
-
setResolved(value);
|
|
44
|
-
return;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
// The row may scroll out, or the record change, before this lands.
|
|
48
|
-
let live = true;
|
|
49
|
-
value.then(
|
|
50
|
-
result => {
|
|
51
|
-
if (live) setResolved(result);
|
|
52
|
-
},
|
|
53
|
-
error => {
|
|
54
|
-
if (live) setResolved(undefined);
|
|
55
|
-
console.warn(`[rebase] Additional field "${field.key}" failed to resolve:`, error);
|
|
56
|
-
}
|
|
57
|
-
);
|
|
58
|
-
return () => {
|
|
59
|
-
live = false;
|
|
60
|
-
};
|
|
61
|
-
}, [field, entity, context]);
|
|
62
|
-
|
|
63
|
-
return <>{resolved === undefined || resolved === null ? null : String(resolved)}</>;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
function isPromise(value: unknown): value is Promise<string | number | undefined> {
|
|
67
|
-
return typeof (value as Promise<unknown> | undefined)?.then === "function";
|
|
68
|
-
}
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import type { AppView } from "@rebasepro/cms-types";
|
|
2
|
-
import React, { useEffect } from "react";
|
|
3
|
-
import { useLocation } from "react-router";
|
|
4
|
-
;
|
|
5
|
-
import { useUrlController } from "../hooks/navigation/contexts/UrlContext";
|
|
6
|
-
import { useAdminModeController } from "@rebasepro/app";
|
|
7
|
-
export interface AdminModeSyncerProps {
|
|
8
|
-
/**
|
|
9
|
-
* Map of views designated as 'Studio' views.
|
|
10
|
-
* Navigating to any of these views will automatically flag the admin mode as "studio".
|
|
11
|
-
*/
|
|
12
|
-
devViews?: AppView[];
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* A highly customizable utility component that observes react-router routes and
|
|
17
|
-
* actively shifts the internal Rebase `adminModeController` context to match
|
|
18
|
-
* the user's active window segment (e.g., Content vs Studio mode).
|
|
19
|
-
*
|
|
20
|
-
* Placing this anywhere safely inside the Rebase layout automatically triggers
|
|
21
|
-
* UI mode synchronization.
|
|
22
|
-
*/
|
|
23
|
-
export function AdminModeSyncer({ devViews }: AdminModeSyncerProps) {
|
|
24
|
-
const location = useLocation();
|
|
25
|
-
const urlController = useUrlController();
|
|
26
|
-
const adminModeController = useAdminModeController();
|
|
27
|
-
|
|
28
|
-
// Keep track of the current mode using a ref to avoid adding it to the dependency array
|
|
29
|
-
const currentModeRef = React.useRef(adminModeController.mode);
|
|
30
|
-
currentModeRef.current = adminModeController.mode;
|
|
31
|
-
|
|
32
|
-
// Stable ref for setMode so it doesn't trigger the effect
|
|
33
|
-
const setModeRef = React.useRef(adminModeController.setMode);
|
|
34
|
-
setModeRef.current = adminModeController.setMode;
|
|
35
|
-
|
|
36
|
-
useEffect(() => {
|
|
37
|
-
const path = location.pathname;
|
|
38
|
-
const isContentRoute = urlController.isUrlCollectionPath(path) || path === urlController.basePath;
|
|
39
|
-
|
|
40
|
-
// Check both devViews slugs AND the studio home path (/s or basePath/s)
|
|
41
|
-
const studioHomePath = urlController.basePath === "/" ? "/s" : `${urlController.basePath}/s`;
|
|
42
|
-
const isStudioRoute = path === studioHomePath || path.startsWith(studioHomePath + "/") || devViews?.some(view => {
|
|
43
|
-
const viewPath = urlController.buildAppUrlPath(view.slug);
|
|
44
|
-
return path.startsWith(`${viewPath}/`) || path === viewPath;
|
|
45
|
-
});
|
|
46
|
-
|
|
47
|
-
if (isStudioRoute && currentModeRef.current !== "studio") {
|
|
48
|
-
setModeRef.current("studio");
|
|
49
|
-
} else if (isContentRoute && currentModeRef.current !== "cms") {
|
|
50
|
-
setModeRef.current("cms");
|
|
51
|
-
}
|
|
52
|
-
}, [location.pathname, urlController, devViews]);
|
|
53
|
-
|
|
54
|
-
return null;
|
|
55
|
-
}
|
|
56
|
-
|