@firecms/core 3.0.0-canary.21 → 3.0.0-canary.210
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 +3 -3
- package/dist/app/AppBar.d.ts +12 -0
- package/dist/app/Drawer.d.ts +16 -0
- package/dist/app/Scaffold.d.ts +34 -0
- package/dist/app/index.d.ts +4 -0
- package/dist/app/useApp.d.ts +16 -0
- package/dist/components/ArrayContainer.d.ts +23 -6
- package/dist/components/CircularProgressCenter.d.ts +1 -1
- package/dist/components/ClearFilterSortButton.d.ts +5 -0
- package/dist/components/{DeleteConfirmationDialog.d.ts → ConfirmationDialog.d.ts} +1 -1
- package/dist/components/EntityCollectionTable/EntityCollectionRowActions.d.ts +13 -13
- package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +2 -2
- package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +22 -6
- package/dist/components/EntityCollectionTable/PropertyTableCell.d.ts +1 -0
- package/dist/components/EntityCollectionTable/column_utils.d.ts +1 -2
- package/dist/components/EntityCollectionTable/fields/TableReferenceField.d.ts +3 -1
- package/dist/components/EntityCollectionTable/index.d.ts +1 -1
- package/dist/components/EntityCollectionTable/internal/CollectionTableToolbar.d.ts +1 -4
- package/dist/components/EntityCollectionTable/internal/EntityTableCell.d.ts +2 -2
- package/dist/components/EntityCollectionTable/internal/popup_field/PopupFormField.d.ts +7 -4
- package/dist/components/EntityCollectionView/EntityCollectionView.d.ts +16 -2
- package/dist/components/EntityCollectionView/EntityCollectionViewStartActions.d.ts +11 -0
- package/dist/components/EntityCollectionView/utils.d.ts +3 -0
- package/dist/components/EntityPreview.d.ts +5 -4
- package/dist/components/ErrorView.d.ts +1 -1
- package/dist/components/HomePage/DefaultHomePage.d.ts +1 -1
- package/dist/components/HomePage/NavigationCardBinding.d.ts +1 -1
- package/dist/components/PropertyConfigBadge.d.ts +2 -1
- package/dist/components/PropertyIdCopyTooltip.d.ts +8 -0
- package/dist/components/ReferenceWidget.d.ts +3 -1
- package/dist/components/SelectableTable/SelectableTable.d.ts +13 -3
- package/dist/components/SelectableTable/filters/ReferenceFilterField.d.ts +2 -1
- package/dist/components/UnsavedChangesDialog.d.ts +8 -0
- package/dist/components/VirtualTable/VirtualTableProps.d.ts +28 -12
- package/dist/components/VirtualTable/types.d.ts +3 -3
- package/dist/components/{EntityCollectionTable/internal → common}/default_entity_actions.d.ts +1 -3
- package/dist/components/common/index.d.ts +2 -1
- package/dist/components/common/table_height.d.ts +5 -0
- package/dist/components/common/types.d.ts +4 -6
- package/dist/components/common/useColumnsIds.d.ts +3 -1
- package/dist/components/common/{useDataSourceEntityCollectionTableController.d.ts → useDataSourceTableController.d.ts} +13 -2
- package/dist/components/common/useDebouncedCallback.d.ts +1 -0
- package/dist/components/common/useScrollRestoration.d.ts +14 -0
- package/dist/components/index.d.ts +4 -2
- package/dist/contexts/BreacrumbsContext.d.ts +8 -0
- package/dist/core/DefaultAppBar.d.ts +29 -0
- package/dist/core/DefaultDrawer.d.ts +19 -0
- package/dist/core/DrawerNavigationItem.d.ts +10 -0
- package/dist/core/EntityEditView.d.ts +33 -11
- package/dist/core/EntityEditViewFormActions.d.ts +2 -0
- package/dist/core/FireCMS.d.ts +3 -3
- package/dist/core/FireCMSRouter.d.ts +4 -0
- package/dist/core/NavigationRoutes.d.ts +2 -3
- package/dist/core/SideDialogs.d.ts +4 -2
- package/dist/core/index.d.ts +4 -4
- package/dist/form/EntityForm.d.ts +37 -69
- package/dist/form/EntityFormActions.d.ts +17 -0
- package/dist/form/PropertyFieldBinding.d.ts +1 -1
- package/dist/form/components/ErrorFocus.d.ts +1 -1
- package/dist/form/components/FieldHelperText.d.ts +3 -3
- package/dist/form/components/FormEntry.d.ts +6 -0
- package/dist/form/components/FormLayout.d.ts +5 -0
- package/dist/form/components/LabelWithIcon.d.ts +1 -1
- package/dist/form/components/LabelWithIconAndTooltip.d.ts +15 -0
- package/dist/form/components/StorageItemPreview.d.ts +4 -4
- package/dist/form/components/index.d.ts +3 -1
- package/dist/form/field_bindings/ArrayCustomShapedFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/ArrayOfReferencesFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/BlockFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/KeyValueFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/MapFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/MarkdownEditorFieldBinding.d.ts +11 -0
- package/dist/form/field_bindings/{MultiSelectBinding.d.ts → MultiSelectFieldBinding.d.ts} +1 -1
- package/dist/form/field_bindings/ReadOnlyFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/ReferenceFieldBinding.d.ts +2 -2
- package/dist/form/field_bindings/RepeatFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/SelectFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +3 -5
- package/dist/form/field_bindings/SwitchFieldBinding.d.ts +1 -2
- package/dist/form/field_bindings/TextFieldBinding.d.ts +1 -1
- package/dist/form/index.d.ts +16 -18
- package/dist/form/useClearRestoreValue.d.ts +2 -2
- package/dist/hooks/data/delete.d.ts +4 -4
- package/dist/hooks/data/save.d.ts +4 -5
- package/dist/hooks/data/useCollectionFetch.d.ts +1 -1
- package/dist/hooks/data/useEntityFetch.d.ts +4 -3
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/useAuthController.d.ts +1 -1
- package/dist/hooks/useBreadcrumbsController.d.ts +26 -0
- package/dist/hooks/useBuildNavigationController.d.ts +7 -5
- package/dist/hooks/useFireCMSContext.d.ts +1 -1
- package/dist/hooks/useModeController.d.ts +1 -2
- package/dist/hooks/useProjectLog.d.ts +8 -2
- package/dist/hooks/useResolvedNavigationFrom.d.ts +3 -3
- package/dist/hooks/useValidateAuthenticator.d.ts +4 -8
- package/dist/index.d.ts +1 -0
- package/dist/index.es.js +21823 -14330
- package/dist/index.es.js.map +1 -1
- package/dist/index.umd.js +24174 -588
- package/dist/index.umd.js.map +1 -1
- package/dist/internal/useBuildDataSource.d.ts +1 -16
- package/dist/internal/useBuildSideEntityController.d.ts +2 -2
- package/dist/internal/useUnsavedChangesDialog.d.ts +7 -9
- package/dist/preview/PropertyPreviewProps.d.ts +6 -1
- package/dist/preview/components/EnumValuesChip.d.ts +1 -1
- package/dist/preview/components/ReferencePreview.d.ts +3 -2
- package/dist/preview/components/StorageThumbnail.d.ts +2 -1
- package/dist/preview/components/UrlComponentPreview.d.ts +2 -1
- package/dist/preview/util.d.ts +3 -3
- package/dist/routes/CustomCMSRoute.d.ts +4 -0
- package/dist/routes/FireCMSRoute.d.ts +1 -0
- package/dist/routes/HomePageRoute.d.ts +3 -0
- package/dist/types/auth.d.ts +8 -10
- package/dist/types/collections.d.ts +77 -22
- package/dist/types/datasource.d.ts +52 -36
- package/dist/types/dialogs_controller.d.ts +7 -3
- package/dist/types/entities.d.ts +7 -2
- package/dist/types/entity_actions.d.ts +28 -4
- package/dist/types/entity_callbacks.d.ts +16 -16
- package/dist/types/entity_overrides.d.ts +2 -2
- package/dist/types/export_import.d.ts +4 -4
- package/dist/types/fields.d.ts +71 -42
- package/dist/types/firecms.d.ts +6 -2
- package/dist/types/firecms_context.d.ts +1 -1
- package/dist/types/index.d.ts +0 -1
- package/dist/types/navigation.d.ts +32 -14
- package/dist/types/permissions.d.ts +4 -4
- package/dist/types/plugins.d.ts +23 -12
- package/dist/types/properties.d.ts +52 -24
- package/dist/types/property_config.d.ts +0 -2
- package/dist/types/side_dialogs_controller.d.ts +10 -0
- package/dist/types/side_entity_controller.d.ts +6 -1
- package/dist/types/storage.d.ts +86 -3
- package/dist/types/user.d.ts +1 -0
- package/dist/util/builders.d.ts +3 -3
- package/dist/util/entities.d.ts +3 -3
- package/dist/util/entity_actions.d.ts +2 -0
- package/dist/util/entity_cache.d.ts +23 -0
- package/dist/util/icon_list.d.ts +5 -1
- package/dist/util/icon_synonyms.d.ts +1 -98
- package/dist/util/icons.d.ts +6 -3
- package/dist/util/index.d.ts +2 -0
- package/dist/util/navigation_from_path.d.ts +6 -1
- package/dist/util/navigation_utils.d.ts +14 -3
- package/dist/util/objects.d.ts +2 -1
- package/dist/util/permissions.d.ts +4 -4
- package/dist/util/plurals.d.ts +0 -2
- package/dist/util/property_utils.d.ts +3 -3
- package/dist/util/resolutions.d.ts +36 -17
- package/dist/util/storage.d.ts +23 -2
- package/dist/util/useStorageUploadController.d.ts +3 -3
- package/package.json +61 -48
- package/src/app/AppBar.tsx +18 -0
- package/src/app/Drawer.tsx +24 -0
- package/src/app/Scaffold.tsx +253 -0
- package/src/app/index.ts +4 -0
- package/src/app/useApp.tsx +32 -0
- package/src/components/ArrayContainer.tsx +127 -41
- package/src/components/CircularProgressCenter.tsx +2 -2
- package/src/components/ClearFilterSortButton.tsx +41 -0
- package/src/components/{DeleteConfirmationDialog.tsx → ConfirmationDialog.tsx} +3 -3
- package/src/components/DeleteEntityDialog.tsx +10 -19
- package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +54 -37
- package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +38 -31
- package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +30 -9
- package/src/components/EntityCollectionTable/PropertyTableCell.tsx +47 -39
- package/src/components/EntityCollectionTable/column_utils.tsx +3 -3
- package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +30 -16
- package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +19 -17
- package/src/components/EntityCollectionTable/index.tsx +1 -1
- package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +31 -36
- package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +36 -34
- package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +20 -8
- package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +81 -80
- package/src/components/EntityCollectionView/EntityCollectionView.tsx +207 -113
- package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +4 -2
- package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +68 -0
- package/src/components/EntityCollectionView/useSelectionController.tsx +20 -7
- package/src/components/EntityCollectionView/utils.ts +19 -0
- package/src/components/EntityPreview.tsx +62 -52
- package/src/components/EntityView.tsx +10 -10
- package/src/components/ErrorView.tsx +4 -4
- package/src/components/HomePage/DefaultHomePage.tsx +26 -19
- package/src/components/HomePage/FavouritesView.tsx +6 -11
- package/src/components/HomePage/NavigationCard.tsx +3 -3
- package/src/components/HomePage/NavigationCardBinding.tsx +5 -10
- package/src/components/HomePage/NavigationGroup.tsx +2 -2
- package/src/components/HomePage/SmallNavigationCard.tsx +5 -6
- package/src/components/NotFoundPage.tsx +2 -2
- package/src/components/PropertyConfigBadge.tsx +9 -3
- package/src/components/PropertyIdCopyTooltip.tsx +47 -0
- package/src/components/ReferenceTable/ReferenceSelectionTable.tsx +19 -13
- package/src/components/ReferenceWidget.tsx +21 -11
- package/src/components/SearchIconsView.tsx +10 -7
- package/src/components/SelectableTable/SelectableTable.tsx +27 -12
- package/src/components/SelectableTable/filters/BooleanFilterField.tsx +2 -3
- package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +25 -8
- package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +36 -12
- package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +92 -23
- package/src/components/UnsavedChangesDialog.tsx +42 -0
- package/src/components/VirtualTable/VirtualTable.tsx +96 -48
- package/src/components/VirtualTable/VirtualTableCell.tsx +1 -9
- package/src/components/VirtualTable/VirtualTableHeader.tsx +10 -10
- package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +2 -2
- package/src/components/VirtualTable/VirtualTableProps.tsx +33 -14
- package/src/components/VirtualTable/VirtualTableRow.tsx +5 -6
- package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +5 -5
- package/src/components/VirtualTable/fields/VirtualTableInput.tsx +3 -2
- package/src/components/VirtualTable/fields/VirtualTableNumberInput.tsx +2 -1
- package/src/components/VirtualTable/fields/VirtualTableSelect.tsx +16 -28
- package/src/components/VirtualTable/types.tsx +2 -3
- package/src/components/{EntityCollectionTable/internal → common}/default_entity_actions.tsx +33 -40
- package/src/components/common/index.ts +2 -1
- package/src/components/{VirtualTable/common.tsx → common/table_height.tsx} +5 -2
- package/src/components/common/types.tsx +4 -6
- package/src/components/common/useColumnsIds.tsx +24 -3
- package/src/components/common/useDataSourceTableController.tsx +420 -0
- package/src/components/common/useDebouncedCallback.tsx +20 -0
- package/src/components/common/useScrollRestoration.tsx +68 -0
- package/src/components/common/useTableSearchHelper.ts +53 -12
- package/src/components/index.tsx +4 -2
- package/src/contexts/BreacrumbsContext.tsx +38 -0
- package/src/contexts/DialogsProvider.tsx +5 -4
- package/src/contexts/ModeController.tsx +1 -3
- package/src/contexts/SnackbarProvider.tsx +2 -0
- package/src/core/DefaultAppBar.tsx +219 -0
- package/src/core/DefaultDrawer.tsx +185 -0
- package/src/core/DrawerNavigationItem.tsx +66 -0
- package/src/core/EntityEditView.tsx +321 -479
- package/src/core/EntityEditViewFormActions.tsx +199 -0
- package/src/core/EntitySidePanel.tsx +86 -17
- package/src/core/FireCMS.tsx +56 -49
- package/src/core/FireCMSRouter.tsx +17 -0
- package/src/core/NavigationRoutes.tsx +28 -38
- package/src/core/SideDialogs.tsx +22 -12
- package/src/core/field_configs.tsx +11 -12
- package/src/core/index.tsx +6 -5
- package/src/form/EntityForm.tsx +585 -539
- package/src/form/EntityFormActions.tsx +169 -0
- package/src/form/PropertyFieldBinding.tsx +85 -44
- package/src/form/components/CustomIdField.tsx +6 -2
- package/src/form/components/FieldHelperText.tsx +4 -4
- package/src/form/components/FormEntry.tsx +22 -0
- package/src/form/components/FormLayout.tsx +16 -0
- package/src/form/components/LabelWithIcon.tsx +30 -19
- package/src/form/components/LabelWithIconAndTooltip.tsx +28 -0
- package/src/form/components/StorageItemPreview.tsx +22 -12
- package/src/form/components/StorageUploadProgress.tsx +4 -5
- package/src/form/components/index.tsx +3 -1
- package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +31 -19
- package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +47 -35
- package/src/form/field_bindings/BlockFieldBinding.tsx +56 -34
- package/src/form/field_bindings/DateTimeFieldBinding.tsx +18 -14
- package/src/form/field_bindings/KeyValueFieldBinding.tsx +60 -51
- package/src/form/field_bindings/MapFieldBinding.tsx +71 -54
- package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +153 -0
- package/src/form/field_bindings/{MultiSelectBinding.tsx → MultiSelectFieldBinding.tsx} +25 -20
- package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +11 -16
- package/src/form/field_bindings/ReferenceFieldBinding.tsx +42 -31
- package/src/form/field_bindings/RepeatFieldBinding.tsx +56 -35
- package/src/form/field_bindings/SelectFieldBinding.tsx +22 -14
- package/src/form/field_bindings/StorageUploadFieldBinding.tsx +42 -50
- package/src/form/field_bindings/SwitchFieldBinding.tsx +29 -24
- package/src/form/field_bindings/TextFieldBinding.tsx +28 -24
- package/src/form/index.tsx +16 -37
- package/src/form/useClearRestoreValue.tsx +2 -2
- package/src/form/validation.ts +13 -23
- package/src/hooks/data/delete.ts +6 -5
- package/src/hooks/data/save.ts +13 -9
- package/src/hooks/data/useCollectionFetch.tsx +3 -3
- package/src/hooks/data/useDataSource.tsx +11 -3
- package/src/hooks/data/useEntityFetch.tsx +10 -6
- package/src/hooks/index.tsx +1 -0
- package/src/hooks/useAuthController.tsx +1 -1
- package/src/hooks/useBreadcrumbsController.tsx +31 -0
- package/src/hooks/useBuildLocalConfigurationPersistence.tsx +8 -10
- package/src/hooks/useBuildModeController.tsx +22 -29
- package/src/hooks/useBuildNavigationController.tsx +159 -54
- package/src/hooks/useFireCMSContext.tsx +5 -5
- package/src/hooks/useLargeLayout.tsx +0 -35
- package/src/hooks/useModeController.tsx +1 -2
- package/src/hooks/useProjectLog.tsx +32 -10
- package/src/hooks/useResolvedNavigationFrom.tsx +10 -12
- package/src/hooks/useValidateAuthenticator.tsx +17 -37
- package/src/index.ts +1 -0
- package/src/internal/useBuildDataSource.ts +72 -82
- package/src/internal/useBuildSideDialogsController.tsx +4 -2
- package/src/internal/useBuildSideEntityController.tsx +193 -73
- package/src/internal/useUnsavedChangesDialog.tsx +127 -91
- package/src/preview/PropertyPreview.tsx +17 -24
- package/src/preview/PropertyPreviewProps.tsx +7 -1
- package/src/preview/components/BooleanPreview.tsx +2 -2
- package/src/preview/components/EmptyValue.tsx +1 -1
- package/src/preview/components/EnumValuesChip.tsx +2 -2
- package/src/preview/components/ImagePreview.tsx +25 -36
- package/src/preview/components/ReferencePreview.tsx +22 -33
- package/src/preview/components/StorageThumbnail.tsx +5 -1
- package/src/preview/components/UrlComponentPreview.tsx +60 -28
- package/src/preview/property_previews/ArrayOfMapsPreview.tsx +2 -3
- package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +4 -3
- package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +2 -3
- package/src/preview/property_previews/ArrayOfStringsPreview.tsx +1 -2
- package/src/preview/property_previews/ArrayOneOfPreview.tsx +4 -5
- package/src/preview/property_previews/ArrayPropertyPreview.tsx +4 -5
- package/src/preview/property_previews/MapPropertyPreview.tsx +12 -11
- package/src/preview/property_previews/SkeletonPropertyComponent.tsx +12 -12
- package/src/preview/property_previews/StringPropertyPreview.tsx +3 -3
- package/src/preview/util.ts +10 -10
- package/src/routes/CustomCMSRoute.tsx +21 -0
- package/src/routes/FireCMSRoute.tsx +235 -0
- package/src/routes/HomePageRoute.tsx +17 -0
- package/src/types/auth.tsx +9 -13
- package/src/types/collections.ts +94 -27
- package/src/types/customization_controller.tsx +0 -1
- package/src/types/datasource.ts +61 -43
- package/src/types/dialogs_controller.tsx +7 -3
- package/src/types/entities.ts +12 -2
- package/src/types/entity_actions.tsx +32 -7
- package/src/types/entity_callbacks.ts +18 -18
- package/src/types/entity_overrides.tsx +2 -2
- package/src/types/export_import.ts +4 -4
- package/src/types/fields.tsx +81 -46
- package/src/types/firecms.tsx +7 -2
- package/src/types/firecms_context.tsx +1 -1
- package/src/types/index.ts +0 -1
- package/src/types/navigation.ts +38 -18
- package/src/types/permissions.ts +5 -5
- package/src/types/plugins.tsx +25 -14
- package/src/types/properties.ts +60 -25
- package/src/types/property_config.tsx +0 -2
- package/src/types/side_dialogs_controller.tsx +15 -0
- package/src/types/side_entity_controller.tsx +6 -1
- package/src/types/storage.ts +94 -3
- package/src/types/user.ts +2 -0
- package/src/util/builders.ts +10 -8
- package/src/util/entities.ts +9 -6
- package/src/util/entity_actions.ts +28 -0
- package/src/util/entity_cache.ts +204 -0
- package/src/util/enums.ts +1 -1
- package/src/util/icon_list.ts +16 -10
- package/src/util/icon_synonyms.ts +3 -100
- package/src/util/icons.tsx +17 -7
- package/src/util/index.ts +2 -0
- package/src/util/join_collections.ts +3 -0
- package/src/util/make_properties_editable.ts +13 -5
- package/src/util/navigation_from_path.ts +13 -6
- package/src/util/navigation_utils.ts +59 -7
- package/src/util/objects.ts +48 -28
- package/src/util/parent_references_from_path.ts +3 -3
- package/src/util/permissions.ts +9 -8
- package/src/util/plurals.ts +0 -2
- package/src/util/property_utils.tsx +11 -4
- package/src/util/references.ts +11 -2
- package/src/util/resolutions.ts +100 -46
- package/src/util/storage.ts +79 -21
- package/src/util/strings.ts +2 -2
- package/src/util/useStorageUploadController.tsx +71 -27
- package/dist/components/FireCMSAppBar.d.ts +0 -26
- package/dist/components/PropertyIdCopyTooltipContent.d.ts +0 -3
- package/dist/components/VirtualTable/common.d.ts +0 -2
- package/dist/core/Drawer.d.ts +0 -23
- package/dist/core/Scaffold.d.ts +0 -55
- package/dist/core/SideEntityView.d.ts +0 -7
- package/dist/form/components/FormikArrayContainer.d.ts +0 -18
- package/dist/form/field_bindings/MarkdownFieldBinding.d.ts +0 -9
- package/dist/internal/useBuildCustomizationController.d.ts +0 -2
- package/dist/internal/useLocaleConfig.d.ts +0 -1
- package/dist/types/appcheck.d.ts +0 -26
- package/src/components/FireCMSAppBar.tsx +0 -165
- package/src/components/PropertyIdCopyTooltipContent.tsx +0 -28
- package/src/components/common/useDataSourceEntityCollectionTableController.tsx +0 -225
- package/src/core/Drawer.tsx +0 -191
- package/src/core/Scaffold.tsx +0 -281
- package/src/core/SideEntityView.tsx +0 -38
- package/src/form/components/FormikArrayContainer.tsx +0 -44
- package/src/form/field_bindings/MarkdownFieldBinding.tsx +0 -695
- package/src/internal/useBuildCustomizationController.tsx +0 -5
- package/src/internal/useLocaleConfig.tsx +0 -18
- package/src/types/appcheck.ts +0 -29
- /package/src/util/{common.tsx → common.ts} +0 -0
|
@@ -8,6 +8,8 @@ import {
|
|
|
8
8
|
Entity,
|
|
9
9
|
EntityAction,
|
|
10
10
|
EntityCollection,
|
|
11
|
+
EntityReference,
|
|
12
|
+
EntityTableController,
|
|
11
13
|
FilterValues,
|
|
12
14
|
PartialEntityCollection,
|
|
13
15
|
PropertyOrBuilder,
|
|
@@ -17,7 +19,7 @@ import {
|
|
|
17
19
|
import {
|
|
18
20
|
EntityCollectionRowActions,
|
|
19
21
|
EntityCollectionTable,
|
|
20
|
-
|
|
22
|
+
useDataSourceTableController
|
|
21
23
|
} from "../EntityCollectionTable";
|
|
22
24
|
|
|
23
25
|
import {
|
|
@@ -26,6 +28,8 @@ import {
|
|
|
26
28
|
canEditEntity,
|
|
27
29
|
getPropertyInPath,
|
|
28
30
|
mergeDeep,
|
|
31
|
+
mergeEntityActions,
|
|
32
|
+
navigateToEntity,
|
|
29
33
|
resolveCollection,
|
|
30
34
|
resolveProperty
|
|
31
35
|
} from "../../util";
|
|
@@ -35,6 +39,7 @@ import {
|
|
|
35
39
|
useAuthController,
|
|
36
40
|
useCustomizationController,
|
|
37
41
|
useDataSource,
|
|
42
|
+
useFireCMSContext,
|
|
38
43
|
useLargeLayout,
|
|
39
44
|
useNavigationController,
|
|
40
45
|
useSideEntityController
|
|
@@ -44,7 +49,8 @@ import { EntityCollectionViewActions } from "./EntityCollectionViewActions";
|
|
|
44
49
|
import {
|
|
45
50
|
AddIcon,
|
|
46
51
|
Button,
|
|
47
|
-
|
|
52
|
+
cls,
|
|
53
|
+
focusedDisabled,
|
|
48
54
|
IconButton,
|
|
49
55
|
KeyboardTabIcon,
|
|
50
56
|
Markdown,
|
|
@@ -57,6 +63,10 @@ import {
|
|
|
57
63
|
import { setIn } from "@firecms/formex";
|
|
58
64
|
import { getSubcollectionColumnId } from "../EntityCollectionTable/internal/common";
|
|
59
65
|
import {
|
|
66
|
+
COLLECTION_GROUP_PARENT_ID,
|
|
67
|
+
copyEntityAction,
|
|
68
|
+
deleteEntityAction,
|
|
69
|
+
editEntityAction,
|
|
60
70
|
OnCellValueChange,
|
|
61
71
|
OnColumnResizeParams,
|
|
62
72
|
UniqueFieldValidator,
|
|
@@ -65,25 +75,40 @@ import {
|
|
|
65
75
|
} from "../common";
|
|
66
76
|
import { PopupFormField } from "../EntityCollectionTable/internal/popup_field/PopupFormField";
|
|
67
77
|
import { GetPropertyForProps } from "../EntityCollectionTable/EntityCollectionTableProps";
|
|
68
|
-
import {
|
|
69
|
-
copyEntityAction,
|
|
70
|
-
deleteEntityAction,
|
|
71
|
-
editEntityAction
|
|
72
|
-
} from "../EntityCollectionTable/internal/default_entity_actions";
|
|
73
78
|
import { DeleteEntityDialog } from "../DeleteEntityDialog";
|
|
74
79
|
import { useAnalyticsController } from "../../hooks/useAnalyticsController";
|
|
75
80
|
import { useSelectionController } from "./useSelectionController";
|
|
81
|
+
import { EntityCollectionViewStartActions } from "./EntityCollectionViewStartActions";
|
|
82
|
+
import { addRecentId, getRecentIds } from "./utils";
|
|
83
|
+
import { useScrollRestoration } from "../common/useScrollRestoration";
|
|
76
84
|
|
|
77
|
-
const
|
|
85
|
+
const DEFAULT_ENTITY_OPEN_MODE: "side_panel" | "full_screen" = "side_panel";
|
|
78
86
|
|
|
79
87
|
/**
|
|
80
88
|
* @group Components
|
|
81
89
|
*/
|
|
82
90
|
export type EntityCollectionViewProps<M extends Record<string, any>> = {
|
|
83
|
-
|
|
91
|
+
/**
|
|
92
|
+
* Complete path where this collection is located.
|
|
93
|
+
* It defaults to the collection path if not provided.
|
|
94
|
+
*/
|
|
95
|
+
fullPath?: string;
|
|
96
|
+
/**
|
|
97
|
+
* If this is a subcollection, specify the parent collection ids.
|
|
98
|
+
*/
|
|
84
99
|
parentCollectionIds?: string[];
|
|
100
|
+
/**
|
|
101
|
+
* Whether this is a subcollection or not.
|
|
102
|
+
*/
|
|
85
103
|
isSubCollection?: boolean;
|
|
104
|
+
|
|
86
105
|
className?: string;
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* If true, this view will store its filter and sorting status in the url params
|
|
109
|
+
*/
|
|
110
|
+
updateUrl?: boolean;
|
|
111
|
+
|
|
87
112
|
} & EntityCollection<M>;
|
|
88
113
|
|
|
89
114
|
/**
|
|
@@ -107,19 +132,22 @@ export type EntityCollectionViewProps<M extends Record<string, any>> = {
|
|
|
107
132
|
*
|
|
108
133
|
* @param fullPath
|
|
109
134
|
* @param collection
|
|
110
|
-
|
|
135
|
+
|
|
111
136
|
* @group Components
|
|
112
137
|
*/
|
|
113
138
|
export const EntityCollectionView = React.memo(
|
|
114
139
|
function EntityCollectionView<M extends Record<string, any>>({
|
|
115
|
-
fullPath,
|
|
140
|
+
fullPath: fullPathProp,
|
|
116
141
|
parentCollectionIds,
|
|
117
142
|
isSubCollection,
|
|
118
143
|
className,
|
|
144
|
+
updateUrl,
|
|
119
145
|
...collectionProp
|
|
120
146
|
}: EntityCollectionViewProps<M>
|
|
121
147
|
) {
|
|
122
148
|
|
|
149
|
+
const context = useFireCMSContext();
|
|
150
|
+
const fullPath = fullPathProp ?? collectionProp.path;
|
|
123
151
|
const dataSource = useDataSource(collectionProp);
|
|
124
152
|
const navigation = useNavigationController();
|
|
125
153
|
const sideEntityController = useSideEntityController();
|
|
@@ -128,21 +156,24 @@ export const EntityCollectionView = React.memo(
|
|
|
128
156
|
const analyticsController = useAnalyticsController();
|
|
129
157
|
const customizationController = useCustomizationController();
|
|
130
158
|
|
|
131
|
-
|
|
132
159
|
const containerRef = React.useRef<HTMLDivElement>(null);
|
|
133
160
|
|
|
161
|
+
const scrollRestoration = useScrollRestoration();
|
|
162
|
+
|
|
134
163
|
const collection = useMemo(() => {
|
|
135
164
|
const userOverride = userConfigPersistence?.getCollectionConfig<M>(fullPath);
|
|
136
165
|
return (userOverride ? mergeDeep(collectionProp, userOverride) : collectionProp) as EntityCollection<M>;
|
|
137
166
|
}, [collectionProp, fullPath, userConfigPersistence?.getCollectionConfig]);
|
|
138
167
|
|
|
168
|
+
const openEntityMode = collection?.openEntityMode ?? DEFAULT_ENTITY_OPEN_MODE;
|
|
169
|
+
|
|
139
170
|
const collectionRef = React.useRef(collection);
|
|
140
171
|
useEffect(() => {
|
|
141
172
|
collectionRef.current = collection;
|
|
142
173
|
}, [collection]);
|
|
143
174
|
|
|
144
175
|
const canCreateEntities = canCreateEntity(collection, authController, fullPath, null);
|
|
145
|
-
const [
|
|
176
|
+
const [highlightedEntity, setHighlightedEntity] = useState<Entity<M> | undefined>(undefined);
|
|
146
177
|
const [deleteEntityClicked, setDeleteEntityClicked] = React.useState<Entity<M> | Entity<M>[] | undefined>(undefined);
|
|
147
178
|
|
|
148
179
|
const [lastDeleteTimestamp, setLastDeleteTimestamp] = React.useState<number>(0);
|
|
@@ -151,12 +182,12 @@ export const EntityCollectionView = React.memo(
|
|
|
151
182
|
const [docsCount, setDocsCount] = useState<number>(0);
|
|
152
183
|
|
|
153
184
|
const unselectNavigatedEntity = useCallback(() => {
|
|
154
|
-
const currentSelection =
|
|
185
|
+
const currentSelection = highlightedEntity;
|
|
155
186
|
setTimeout(() => {
|
|
156
|
-
if (currentSelection ===
|
|
157
|
-
|
|
187
|
+
if (currentSelection === highlightedEntity)
|
|
188
|
+
setHighlightedEntity(undefined);
|
|
158
189
|
}, 2400);
|
|
159
|
-
}, [
|
|
190
|
+
}, [highlightedEntity]);
|
|
160
191
|
|
|
161
192
|
const checkInlineEditing = useCallback((entity?: Entity<any>): boolean => {
|
|
162
193
|
const collection = collectionRef.current;
|
|
@@ -175,20 +206,15 @@ export const EntityCollectionView = React.memo(
|
|
|
175
206
|
const usedSelectionController = collection.selectionController ?? selectionController;
|
|
176
207
|
const {
|
|
177
208
|
selectedEntities,
|
|
178
|
-
toggleEntitySelection,
|
|
179
|
-
isEntitySelected,
|
|
180
209
|
setSelectedEntities
|
|
181
210
|
} = usedSelectionController;
|
|
182
211
|
|
|
183
|
-
|
|
184
|
-
setDeleteEntityClicked(undefined);
|
|
185
|
-
}, [selectedEntities]);
|
|
186
|
-
|
|
187
|
-
const tableController = useDataSourceEntityCollectionTableController<M>({
|
|
212
|
+
const tableController = useDataSourceTableController<M>({
|
|
188
213
|
fullPath,
|
|
189
|
-
collection
|
|
190
|
-
|
|
191
|
-
|
|
214
|
+
collection,
|
|
215
|
+
lastDeleteTimestamp,
|
|
216
|
+
scrollRestoration,
|
|
217
|
+
updateUrl
|
|
192
218
|
});
|
|
193
219
|
|
|
194
220
|
const tableKey = React.useRef<string>(Math.random().toString(36));
|
|
@@ -199,20 +225,27 @@ export const EntityCollectionView = React.memo(
|
|
|
199
225
|
}, [tableController.setPopupCell]);
|
|
200
226
|
|
|
201
227
|
const onEntityClick = useCallback((clickedEntity: Entity<M>) => {
|
|
202
|
-
console.log("Entity clicked", clickedEntity)
|
|
203
228
|
const collection = collectionRef.current;
|
|
204
|
-
|
|
229
|
+
setHighlightedEntity(clickedEntity);
|
|
205
230
|
analyticsController.onAnalyticsEvent?.("edit_entity_clicked", {
|
|
206
231
|
path: clickedEntity.path,
|
|
207
232
|
entityId: clickedEntity.id
|
|
208
233
|
});
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
234
|
+
|
|
235
|
+
if (collection) {
|
|
236
|
+
addRecentId(collection.id, clickedEntity.id);
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
const path = collection?.collectionGroup ? clickedEntity.path : (fullPath ?? clickedEntity.path);
|
|
240
|
+
navigateToEntity({
|
|
241
|
+
navigation,
|
|
242
|
+
path,
|
|
243
|
+
sideEntityController,
|
|
244
|
+
openEntityMode,
|
|
212
245
|
collection,
|
|
213
|
-
|
|
214
|
-
onClose: unselectNavigatedEntity,
|
|
246
|
+
entityId: clickedEntity.id
|
|
215
247
|
});
|
|
248
|
+
|
|
216
249
|
}, [unselectNavigatedEntity, sideEntityController]);
|
|
217
250
|
|
|
218
251
|
const onNewClick = useCallback(() => {
|
|
@@ -221,12 +254,15 @@ export const EntityCollectionView = React.memo(
|
|
|
221
254
|
analyticsController.onAnalyticsEvent?.("new_entity_click", {
|
|
222
255
|
path: fullPath
|
|
223
256
|
});
|
|
224
|
-
|
|
225
|
-
|
|
257
|
+
navigateToEntity({
|
|
258
|
+
openEntityMode,
|
|
226
259
|
collection,
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
260
|
+
entityId: undefined,
|
|
261
|
+
path: fullPath,
|
|
262
|
+
sideEntityController,
|
|
263
|
+
navigation,
|
|
264
|
+
onClose: unselectNavigatedEntity
|
|
265
|
+
})
|
|
230
266
|
}, [fullPath, sideEntityController]);
|
|
231
267
|
|
|
232
268
|
const onMultipleDeleteClick = () => {
|
|
@@ -257,6 +293,7 @@ export const EntityCollectionView = React.memo(
|
|
|
257
293
|
fullPath: string,
|
|
258
294
|
parentCollectionIds: string[],
|
|
259
295
|
collection: EntityCollection;
|
|
296
|
+
tableController: EntityTableController;
|
|
260
297
|
}> | undefined
|
|
261
298
|
|
|
262
299
|
// we are only using the first plugin that implements this
|
|
@@ -297,23 +334,21 @@ export const EntityCollectionView = React.memo(
|
|
|
297
334
|
value,
|
|
298
335
|
property,
|
|
299
336
|
entityId
|
|
300
|
-
}) => dataSource.checkUniqueField(fullPath, name, value, entityId),
|
|
337
|
+
}) => dataSource.checkUniqueField(fullPath, name, value, entityId, collection),
|
|
301
338
|
[fullPath]);
|
|
302
339
|
|
|
303
340
|
const onValueChange: OnCellValueChange<any, any> = ({
|
|
304
|
-
fullPath,
|
|
305
|
-
context,
|
|
306
341
|
value,
|
|
307
342
|
propertyKey,
|
|
308
343
|
onValueUpdated,
|
|
309
344
|
setError,
|
|
310
|
-
entity,
|
|
345
|
+
data: entity,
|
|
311
346
|
}) => {
|
|
312
347
|
|
|
313
348
|
const updatedValues = setIn({ ...entity.values }, propertyKey, value);
|
|
314
349
|
|
|
315
350
|
const saveProps: SaveEntityProps = {
|
|
316
|
-
path: fullPath,
|
|
351
|
+
path: entity.path ?? fullPath,
|
|
317
352
|
entityId: entity.id,
|
|
318
353
|
values: updatedValues,
|
|
319
354
|
previousValues: entity.values,
|
|
@@ -324,10 +359,12 @@ export const EntityCollectionView = React.memo(
|
|
|
324
359
|
return saveEntityWithCallbacks({
|
|
325
360
|
...saveProps,
|
|
326
361
|
collection,
|
|
327
|
-
callbacks: collection.callbacks,
|
|
328
362
|
dataSource,
|
|
329
363
|
context,
|
|
330
|
-
onSaveSuccess: () =>
|
|
364
|
+
onSaveSuccess: () => {
|
|
365
|
+
setError(undefined);
|
|
366
|
+
onValueUpdated();
|
|
367
|
+
},
|
|
331
368
|
onSaveFailure: (e: Error) => {
|
|
332
369
|
console.error("Save failure");
|
|
333
370
|
console.error(e);
|
|
@@ -337,16 +374,15 @@ export const EntityCollectionView = React.memo(
|
|
|
337
374
|
|
|
338
375
|
};
|
|
339
376
|
|
|
340
|
-
const resolvedFullPath = navigation.
|
|
377
|
+
const resolvedFullPath = navigation.resolveIdsFrom(fullPath);
|
|
341
378
|
const resolvedCollection = useMemo(() => resolveCollection<M>({
|
|
342
379
|
collection,
|
|
343
380
|
path: fullPath,
|
|
344
|
-
|
|
381
|
+
propertyConfigs: customizationController.propertyConfigs
|
|
345
382
|
}), [collection, fullPath]);
|
|
346
383
|
|
|
347
384
|
const getPropertyFor = useCallback(({
|
|
348
385
|
propertyKey,
|
|
349
|
-
propertyValue,
|
|
350
386
|
entity
|
|
351
387
|
}: GetPropertyForProps<M>) => {
|
|
352
388
|
let propertyOrBuilder: PropertyOrBuilder<any, M> | undefined = getPropertyInPath<M>(collection.properties, propertyKey);
|
|
@@ -360,13 +396,12 @@ export const EntityCollectionView = React.memo(
|
|
|
360
396
|
return resolveProperty({
|
|
361
397
|
propertyKey,
|
|
362
398
|
propertyOrBuilder,
|
|
363
|
-
path:
|
|
364
|
-
propertyValue,
|
|
399
|
+
path: entity.path,
|
|
365
400
|
values: entity.values,
|
|
366
401
|
entityId: entity.id,
|
|
367
|
-
|
|
402
|
+
propertyConfigs: customizationController.propertyConfigs
|
|
368
403
|
});
|
|
369
|
-
}, [collection.properties, customizationController.propertyConfigs,
|
|
404
|
+
}, [collection.properties, customizationController.propertyConfigs, resolvedCollection.properties]);
|
|
370
405
|
|
|
371
406
|
const displayedColumnIds = useColumnIds(resolvedCollection, true);
|
|
372
407
|
|
|
@@ -383,13 +418,15 @@ export const EntityCollectionView = React.memo(
|
|
|
383
418
|
startIcon={<KeyboardTabIcon size={"small"}/>}
|
|
384
419
|
onClick={(event: any) => {
|
|
385
420
|
event.stopPropagation();
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
entityId: entity.id,
|
|
389
|
-
selectedSubPath: subcollection.id ?? subcollection.path,
|
|
421
|
+
navigateToEntity({
|
|
422
|
+
openEntityMode,
|
|
390
423
|
collection,
|
|
391
|
-
|
|
392
|
-
|
|
424
|
+
entityId: entity.id,
|
|
425
|
+
selectedTab: subcollection.id ?? subcollection.path,
|
|
426
|
+
path: fullPath,
|
|
427
|
+
navigation,
|
|
428
|
+
sideEntityController
|
|
429
|
+
})
|
|
393
430
|
}}>
|
|
394
431
|
{subcollection.name}
|
|
395
432
|
</Button>
|
|
@@ -406,16 +443,16 @@ export const EntityCollectionView = React.memo(
|
|
|
406
443
|
Builder: ({ entity }) => {
|
|
407
444
|
const collectionsWithPath = navigation.getParentReferencesFromPath(entity.path);
|
|
408
445
|
return (
|
|
409
|
-
|
|
446
|
+
<div className={"flex flex-col gap-2 w-full"}>
|
|
410
447
|
{collectionsWithPath.map((reference) => {
|
|
411
448
|
return (
|
|
412
449
|
<ReferencePreview
|
|
413
450
|
key={reference.path + "/" + reference.id}
|
|
414
451
|
reference={reference}
|
|
415
|
-
size={"
|
|
452
|
+
size={"small"}/>
|
|
416
453
|
);
|
|
417
454
|
})}
|
|
418
|
-
|
|
455
|
+
</div>
|
|
419
456
|
);
|
|
420
457
|
}
|
|
421
458
|
}]
|
|
@@ -448,7 +485,7 @@ export const EntityCollectionView = React.memo(
|
|
|
448
485
|
if (deleteEnabled)
|
|
449
486
|
actions.push(deleteEntityAction);
|
|
450
487
|
if (customEntityActions)
|
|
451
|
-
actions
|
|
488
|
+
return mergeEntityActions(actions, customEntityActions);
|
|
452
489
|
return actions;
|
|
453
490
|
};
|
|
454
491
|
|
|
@@ -460,19 +497,19 @@ export const EntityCollectionView = React.memo(
|
|
|
460
497
|
return (largeLayout ? (80 + actionsWidth) : (70 + actionsWidth)) + (collapsedActions.length > 0 ? (largeLayout ? 40 : 30) : 0);
|
|
461
498
|
};
|
|
462
499
|
|
|
463
|
-
const tableRowActionsBuilder = ({
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
500
|
+
const tableRowActionsBuilder = useCallback(({
|
|
501
|
+
entity,
|
|
502
|
+
size,
|
|
503
|
+
width,
|
|
504
|
+
frozen
|
|
505
|
+
}: {
|
|
469
506
|
entity: Entity<any>,
|
|
470
507
|
size: CollectionSize,
|
|
471
508
|
width: number,
|
|
472
509
|
frozen?: boolean
|
|
473
510
|
}) => {
|
|
474
511
|
|
|
475
|
-
const isSelected =
|
|
512
|
+
const isSelected = Boolean(usedSelectionController.selectedEntities.find(e => e.id == entity.id && e.path == entity.path));
|
|
476
513
|
|
|
477
514
|
const actions = getActionsForEntity({
|
|
478
515
|
entity,
|
|
@@ -487,7 +524,7 @@ export const EntityCollectionView = React.memo(
|
|
|
487
524
|
isSelected={isSelected}
|
|
488
525
|
selectionEnabled={selectionEnabled}
|
|
489
526
|
size={size}
|
|
490
|
-
highlightEntity={
|
|
527
|
+
highlightEntity={setHighlightedEntity}
|
|
491
528
|
unhighlightEntity={unselectNavigatedEntity}
|
|
492
529
|
collection={collection}
|
|
493
530
|
fullPath={fullPath}
|
|
@@ -495,10 +532,11 @@ export const EntityCollectionView = React.memo(
|
|
|
495
532
|
hideId={collection?.hideIdFromCollection}
|
|
496
533
|
onCollectionChange={updateLastDeleteTimestamp}
|
|
497
534
|
selectionController={usedSelectionController}
|
|
535
|
+
openEntityMode={openEntityMode}
|
|
498
536
|
/>
|
|
499
537
|
);
|
|
500
538
|
|
|
501
|
-
};
|
|
539
|
+
}, [updateLastDeleteTimestamp, usedSelectionController]);
|
|
502
540
|
|
|
503
541
|
const title = <Popover
|
|
504
542
|
open={popOverOpen}
|
|
@@ -528,7 +566,7 @@ export const EntityCollectionView = React.memo(
|
|
|
528
566
|
</div>}
|
|
529
567
|
>
|
|
530
568
|
|
|
531
|
-
{collection.description && <div className="m-4 text-
|
|
569
|
+
{collection.description && <div className="m-4 text-surface-900 dark:text-white">
|
|
532
570
|
<Markdown source={collection.description}/>
|
|
533
571
|
</div>}
|
|
534
572
|
|
|
@@ -557,6 +595,7 @@ export const EntityCollectionView = React.memo(
|
|
|
557
595
|
property={property}
|
|
558
596
|
fullPath={fullPath}
|
|
559
597
|
collection={collection}
|
|
598
|
+
tableController={tableController}
|
|
560
599
|
parentCollectionIds={parentCollectionIds ?? []}/>;
|
|
561
600
|
})}
|
|
562
601
|
</>;
|
|
@@ -567,7 +606,8 @@ export const EntityCollectionView = React.memo(
|
|
|
567
606
|
if (typeof AddColumnComponent === "function")
|
|
568
607
|
return <AddColumnComponent fullPath={fullPath}
|
|
569
608
|
parentCollectionIds={parentCollectionIds ?? []}
|
|
570
|
-
collection={collection}
|
|
609
|
+
collection={collection}
|
|
610
|
+
tableController={tableController}/>;
|
|
571
611
|
return null;
|
|
572
612
|
}
|
|
573
613
|
: undefined;
|
|
@@ -584,12 +624,13 @@ export const EntityCollectionView = React.memo(
|
|
|
584
624
|
});
|
|
585
625
|
|
|
586
626
|
return (
|
|
587
|
-
<div className={
|
|
627
|
+
<div className={cls("overflow-hidden h-full w-full rounded-md", className)}
|
|
588
628
|
ref={containerRef}>
|
|
589
629
|
<EntityCollectionTable
|
|
590
630
|
key={`collection_table_${fullPath}`}
|
|
591
631
|
additionalFields={additionalFields}
|
|
592
632
|
tableController={tableController}
|
|
633
|
+
enablePopupIcon={true}
|
|
593
634
|
displayedColumnIds={displayedColumnIds}
|
|
594
635
|
onSizeChanged={onSizeChanged}
|
|
595
636
|
onEntityClick={onEntityClick}
|
|
@@ -599,13 +640,23 @@ export const EntityCollectionView = React.memo(
|
|
|
599
640
|
uniqueFieldValidator={uniqueFieldValidator}
|
|
600
641
|
title={title}
|
|
601
642
|
selectionController={usedSelectionController}
|
|
602
|
-
highlightedEntities={
|
|
643
|
+
highlightedEntities={highlightedEntity ? [highlightedEntity] : []}
|
|
603
644
|
defaultSize={collection.defaultSize}
|
|
604
645
|
properties={resolvedCollection.properties}
|
|
605
646
|
getPropertyFor={getPropertyFor}
|
|
606
647
|
onTextSearchClick={textSearchInitialised ? undefined : onTextSearchClick}
|
|
648
|
+
onScroll={tableController.onScroll}
|
|
649
|
+
initialScroll={tableController.initialScroll}
|
|
607
650
|
textSearchLoading={textSearchLoading}
|
|
608
651
|
textSearchEnabled={textSearchEnabled}
|
|
652
|
+
actionsStart={<EntityCollectionViewStartActions
|
|
653
|
+
parentCollectionIds={parentCollectionIds ?? []}
|
|
654
|
+
collection={collection}
|
|
655
|
+
tableController={tableController}
|
|
656
|
+
path={fullPath}
|
|
657
|
+
relativePath={collection.path}
|
|
658
|
+
selectionController={usedSelectionController}
|
|
659
|
+
collectionEntitiesCount={docsCount}/>}
|
|
609
660
|
actions={<EntityCollectionViewActions
|
|
610
661
|
parentCollectionIds={parentCollectionIds ?? []}
|
|
611
662
|
collection={collection}
|
|
@@ -641,21 +692,22 @@ export const EntityCollectionView = React.memo(
|
|
|
641
692
|
additionalIDHeaderWidget={<EntityIdHeaderWidget
|
|
642
693
|
path={fullPath}
|
|
643
694
|
collection={collection}/>}
|
|
695
|
+
openEntityMode={openEntityMode}
|
|
644
696
|
/>
|
|
645
697
|
|
|
646
|
-
<PopupFormField
|
|
647
|
-
key={`popup_form_${popupCell?.propertyKey}_${popupCell?.
|
|
698
|
+
{popupCell && <PopupFormField
|
|
699
|
+
key={`popup_form_${popupCell?.propertyKey}_${popupCell?.entityId}`}
|
|
648
700
|
open={Boolean(popupCell)}
|
|
649
701
|
onClose={onPopupClose}
|
|
650
702
|
cellRect={popupCell?.cellRect}
|
|
651
703
|
propertyKey={popupCell?.propertyKey}
|
|
652
704
|
collection={collection}
|
|
653
|
-
|
|
705
|
+
entityId={popupCell.entityId}
|
|
654
706
|
tableKey={tableKey.current}
|
|
655
707
|
customFieldValidator={uniqueFieldValidator}
|
|
656
708
|
path={resolvedFullPath}
|
|
657
709
|
onCellValueChange={onValueChange}
|
|
658
|
-
container={containerRef.current}/>
|
|
710
|
+
container={containerRef.current}/>}
|
|
659
711
|
|
|
660
712
|
{deleteEntityClicked &&
|
|
661
713
|
<DeleteEntityDialog
|
|
@@ -671,7 +723,7 @@ export const EntityCollectionView = React.memo(
|
|
|
671
723
|
</div>
|
|
672
724
|
);
|
|
673
725
|
}, (a, b) => {
|
|
674
|
-
return equal(a.
|
|
726
|
+
return equal(a.path, b.path) &&
|
|
675
727
|
equal(a.parentCollectionIds, b.parentCollectionIds) &&
|
|
676
728
|
equal(a.isSubCollection, b.isSubCollection) &&
|
|
677
729
|
equal(a.className, b.className) &&
|
|
@@ -683,8 +735,12 @@ export const EntityCollectionView = React.memo(
|
|
|
683
735
|
equal(a.selectionController, b.selectionController) &&
|
|
684
736
|
equal(a.Actions, b.Actions) &&
|
|
685
737
|
equal(a.defaultSize, b.defaultSize) &&
|
|
738
|
+
equal(a.initialFilter, b.initialFilter) &&
|
|
739
|
+
equal(a.initialSort, b.initialSort) &&
|
|
686
740
|
equal(a.textSearchEnabled, b.textSearchEnabled) &&
|
|
687
741
|
equal(a.additionalFields, b.additionalFields) &&
|
|
742
|
+
equal(a.sideDialogWidth, b.sideDialogWidth) &&
|
|
743
|
+
equal(a.openEntityMode, b.openEntityMode) &&
|
|
688
744
|
equal(a.forceFilter, b.forceFilter);
|
|
689
745
|
}) as React.FunctionComponent<EntityCollectionViewProps<any>>
|
|
690
746
|
|
|
@@ -709,7 +765,7 @@ function EntitiesCount({
|
|
|
709
765
|
|
|
710
766
|
const sortByProperty = sortBy ? sortBy[0] : undefined;
|
|
711
767
|
const currentSort = sortBy ? sortBy[1] : undefined;
|
|
712
|
-
const resolvedPath = useMemo(() => navigation.
|
|
768
|
+
const resolvedPath = useMemo(() => navigation.resolveIdsFrom(fullPath), [fullPath, navigation.resolveIdsFrom]);
|
|
713
769
|
|
|
714
770
|
useEffect(() => {
|
|
715
771
|
if (dataSource.countEntities)
|
|
@@ -724,6 +780,7 @@ function EntitiesCount({
|
|
|
724
780
|
|
|
725
781
|
useEffect(() => {
|
|
726
782
|
if (onCountChange) {
|
|
783
|
+
setError(undefined);
|
|
727
784
|
onCountChange(count ?? 0);
|
|
728
785
|
}
|
|
729
786
|
}, [onCountChange, count]);
|
|
@@ -755,48 +812,85 @@ function EntityIdHeaderWidget({
|
|
|
755
812
|
collection: EntityCollection,
|
|
756
813
|
path: string
|
|
757
814
|
}) {
|
|
815
|
+
|
|
816
|
+
const navigation = useNavigationController();
|
|
758
817
|
const [openPopup, setOpenPopup] = React.useState(false);
|
|
759
818
|
const [searchString, setSearchString] = React.useState("");
|
|
819
|
+
const [recentIds, setRecentIds] = React.useState<string[]>(getRecentIds(collection.id));
|
|
760
820
|
const sideEntityController = useSideEntityController();
|
|
821
|
+
|
|
822
|
+
const openEntityMode = collection?.openEntityMode ?? DEFAULT_ENTITY_OPEN_MODE;
|
|
823
|
+
|
|
761
824
|
return (
|
|
762
|
-
<Tooltip title={!openPopup ? "Find by ID" : undefined}>
|
|
825
|
+
<Tooltip title={!openPopup ? "Find by ID" : undefined} asChild={false}>
|
|
763
826
|
<Popover
|
|
764
827
|
open={openPopup}
|
|
765
828
|
onOpenChange={setOpenPopup}
|
|
829
|
+
sideOffset={0}
|
|
830
|
+
align={"start"}
|
|
831
|
+
alignOffset={-117}
|
|
766
832
|
trigger={
|
|
767
833
|
<IconButton size={"small"}>
|
|
768
834
|
<SearchIcon size={"small"}/>
|
|
769
835
|
</IconButton>
|
|
770
|
-
}
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
e
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
entityId
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
836
|
+
}>
|
|
837
|
+
<div
|
|
838
|
+
className={cls("my-2 rounded-lg bg-surface-50 dark:bg-surface-950 text-surface-900 dark:text-white")}>
|
|
839
|
+
<form noValidate={true}
|
|
840
|
+
onSubmit={(e) => {
|
|
841
|
+
e.preventDefault();
|
|
842
|
+
if (!searchString) return;
|
|
843
|
+
setOpenPopup(false);
|
|
844
|
+
const entityId = searchString.trim();
|
|
845
|
+
setRecentIds(addRecentId(collection.id, entityId));
|
|
846
|
+
navigateToEntity({
|
|
847
|
+
openEntityMode,
|
|
848
|
+
collection,
|
|
849
|
+
entityId,
|
|
850
|
+
path,
|
|
851
|
+
sideEntityController,
|
|
852
|
+
navigation
|
|
853
|
+
})
|
|
854
|
+
}}
|
|
855
|
+
className={"w-96 max-w-full"}>
|
|
856
|
+
|
|
857
|
+
<div className="flex p-2 w-full gap-2">
|
|
858
|
+
<input
|
|
859
|
+
autoFocus={openPopup}
|
|
860
|
+
placeholder={"Find entity by ID"}
|
|
861
|
+
// size={"small"}
|
|
862
|
+
onChange={(e) => {
|
|
863
|
+
setSearchString(e.target.value);
|
|
864
|
+
}}
|
|
865
|
+
value={searchString}
|
|
866
|
+
className={"rounded-lg bg-white dark:bg-surface-800 flex-grow bg-transparent outline-none p-2 " + focusedDisabled}/>
|
|
867
|
+
<Button variant={"text"}
|
|
868
|
+
disabled={!(searchString.trim())}
|
|
869
|
+
type={"submit"}
|
|
870
|
+
><KeyboardTabIcon/></Button>
|
|
871
|
+
</div>
|
|
872
|
+
</form>
|
|
873
|
+
{recentIds && recentIds.length > 0 && <div className="flex flex-col gap-2 p-2">
|
|
874
|
+
{recentIds.map(id => (
|
|
875
|
+
<ReferencePreview reference={new EntityReference(id, path)}
|
|
876
|
+
key={id}
|
|
877
|
+
hover={true}
|
|
878
|
+
onClick={() => {
|
|
879
|
+
setOpenPopup(false);
|
|
880
|
+
navigateToEntity({
|
|
881
|
+
openEntityMode,
|
|
882
|
+
collection,
|
|
883
|
+
entityId: id,
|
|
884
|
+
path,
|
|
885
|
+
sideEntityController,
|
|
886
|
+
navigation
|
|
887
|
+
})
|
|
888
|
+
}}
|
|
889
|
+
includeEntityLink={false}
|
|
890
|
+
size={"small"}/>
|
|
891
|
+
))}
|
|
892
|
+
</div>}
|
|
893
|
+
</div>
|
|
800
894
|
</Popover>
|
|
801
895
|
|
|
802
896
|
</Tooltip>
|