@firecms/core 3.0.0-canary.22 → 3.0.0-canary.221
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 +30 -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/EntityJsonPreview.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 +36 -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 +36 -64
- 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 +21368 -13885
- package/dist/index.es.js.map +1 -1
- package/dist/index.umd.js +24163 -588
- package/dist/index.umd.js.map +1 -1
- package/dist/internal/useBuildDataSource.d.ts +3 -17
- package/dist/internal/useBuildSideEntityController.d.ts +3 -3
- 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 +79 -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 +74 -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 +24 -12
- package/dist/types/properties.d.ts +73 -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/createFormexStub.d.ts +2 -0
- 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 +4 -4
- package/dist/util/references.d.ts +2 -2
- package/dist/util/resolutions.d.ts +41 -17
- package/dist/util/storage.d.ts +23 -2
- package/dist/util/useStorageUploadController.d.ts +3 -3
- package/package.json +62 -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 +149 -46
- 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 +13 -20
- package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +59 -40
- 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 +84 -80
- package/src/components/EntityCollectionView/EntityCollectionView.tsx +209 -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/EntityJsonPreview.tsx +66 -0
- package/src/components/EntityPreview.tsx +70 -53
- package/src/components/EntityView.tsx +13 -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 +21 -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 +388 -478
- package/src/core/EntityEditViewFormActions.tsx +199 -0
- package/src/core/EntitySidePanel.tsx +86 -17
- package/src/core/FireCMS.tsx +67 -59
- 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 +589 -535
- package/src/form/EntityFormActions.tsx +169 -0
- package/src/form/PropertyFieldBinding.tsx +89 -45
- 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 +34 -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 +61 -52
- package/src/form/field_bindings/MapFieldBinding.tsx +71 -54
- package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +157 -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 +62 -35
- package/src/form/field_bindings/SelectFieldBinding.tsx +23 -15
- package/src/form/field_bindings/StorageUploadFieldBinding.tsx +47 -52
- 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 +32 -33
- 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 +3 -33
- 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 +79 -85
- package/src/internal/useBuildSideDialogsController.tsx +4 -2
- package/src/internal/useBuildSideEntityController.tsx +202 -75
- package/src/internal/useUnsavedChangesDialog.tsx +127 -91
- package/src/preview/PropertyPreview.tsx +20 -25
- 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 +5 -5
- package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +7 -5
- package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +5 -4
- package/src/preview/property_previews/ArrayOfStringsPreview.tsx +4 -4
- package/src/preview/property_previews/ArrayOneOfPreview.tsx +7 -6
- package/src/preview/property_previews/ArrayPropertyPreview.tsx +7 -6
- 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 +96 -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 +85 -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 +26 -14
- package/src/types/properties.ts +87 -26
- 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/createFormexStub.tsx +62 -0
- 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 +6 -1
- 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 +52 -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 +17 -6
- package/src/util/references.ts +19 -8
- package/src/util/resolutions.ts +110 -48
- package/src/util/storage.ts +79 -21
- package/src/util/strings.ts +2 -2
- package/src/util/useStorageUploadController.tsx +91 -28
- 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,16 @@ 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,
|
|
382
|
+
authController,
|
|
345
383
|
}), [collection, fullPath]);
|
|
346
384
|
|
|
347
385
|
const getPropertyFor = useCallback(({
|
|
348
386
|
propertyKey,
|
|
349
|
-
propertyValue,
|
|
350
387
|
entity
|
|
351
388
|
}: GetPropertyForProps<M>) => {
|
|
352
389
|
let propertyOrBuilder: PropertyOrBuilder<any, M> | undefined = getPropertyInPath<M>(collection.properties, propertyKey);
|
|
@@ -360,13 +397,13 @@ export const EntityCollectionView = React.memo(
|
|
|
360
397
|
return resolveProperty({
|
|
361
398
|
propertyKey,
|
|
362
399
|
propertyOrBuilder,
|
|
363
|
-
path:
|
|
364
|
-
propertyValue,
|
|
400
|
+
path: entity.path,
|
|
365
401
|
values: entity.values,
|
|
366
402
|
entityId: entity.id,
|
|
367
|
-
|
|
403
|
+
propertyConfigs: customizationController.propertyConfigs,
|
|
404
|
+
authController
|
|
368
405
|
});
|
|
369
|
-
}, [collection.properties, customizationController.propertyConfigs,
|
|
406
|
+
}, [collection.properties, customizationController.propertyConfigs, resolvedCollection.properties]);
|
|
370
407
|
|
|
371
408
|
const displayedColumnIds = useColumnIds(resolvedCollection, true);
|
|
372
409
|
|
|
@@ -383,13 +420,15 @@ export const EntityCollectionView = React.memo(
|
|
|
383
420
|
startIcon={<KeyboardTabIcon size={"small"}/>}
|
|
384
421
|
onClick={(event: any) => {
|
|
385
422
|
event.stopPropagation();
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
entityId: entity.id,
|
|
389
|
-
selectedSubPath: subcollection.id ?? subcollection.path,
|
|
423
|
+
navigateToEntity({
|
|
424
|
+
openEntityMode,
|
|
390
425
|
collection,
|
|
391
|
-
|
|
392
|
-
|
|
426
|
+
entityId: entity.id,
|
|
427
|
+
selectedTab: subcollection.id ?? subcollection.path,
|
|
428
|
+
path: fullPath,
|
|
429
|
+
navigation,
|
|
430
|
+
sideEntityController
|
|
431
|
+
})
|
|
393
432
|
}}>
|
|
394
433
|
{subcollection.name}
|
|
395
434
|
</Button>
|
|
@@ -406,16 +445,16 @@ export const EntityCollectionView = React.memo(
|
|
|
406
445
|
Builder: ({ entity }) => {
|
|
407
446
|
const collectionsWithPath = navigation.getParentReferencesFromPath(entity.path);
|
|
408
447
|
return (
|
|
409
|
-
|
|
448
|
+
<div className={"flex flex-col gap-2 w-full"}>
|
|
410
449
|
{collectionsWithPath.map((reference) => {
|
|
411
450
|
return (
|
|
412
451
|
<ReferencePreview
|
|
413
452
|
key={reference.path + "/" + reference.id}
|
|
414
453
|
reference={reference}
|
|
415
|
-
size={"
|
|
454
|
+
size={"small"}/>
|
|
416
455
|
);
|
|
417
456
|
})}
|
|
418
|
-
|
|
457
|
+
</div>
|
|
419
458
|
);
|
|
420
459
|
}
|
|
421
460
|
}]
|
|
@@ -448,7 +487,7 @@ export const EntityCollectionView = React.memo(
|
|
|
448
487
|
if (deleteEnabled)
|
|
449
488
|
actions.push(deleteEntityAction);
|
|
450
489
|
if (customEntityActions)
|
|
451
|
-
actions
|
|
490
|
+
return mergeEntityActions(actions, customEntityActions);
|
|
452
491
|
return actions;
|
|
453
492
|
};
|
|
454
493
|
|
|
@@ -460,19 +499,19 @@ export const EntityCollectionView = React.memo(
|
|
|
460
499
|
return (largeLayout ? (80 + actionsWidth) : (70 + actionsWidth)) + (collapsedActions.length > 0 ? (largeLayout ? 40 : 30) : 0);
|
|
461
500
|
};
|
|
462
501
|
|
|
463
|
-
const tableRowActionsBuilder = ({
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
502
|
+
const tableRowActionsBuilder = useCallback(({
|
|
503
|
+
entity,
|
|
504
|
+
size,
|
|
505
|
+
width,
|
|
506
|
+
frozen
|
|
507
|
+
}: {
|
|
469
508
|
entity: Entity<any>,
|
|
470
509
|
size: CollectionSize,
|
|
471
510
|
width: number,
|
|
472
511
|
frozen?: boolean
|
|
473
512
|
}) => {
|
|
474
513
|
|
|
475
|
-
const isSelected =
|
|
514
|
+
const isSelected = Boolean(usedSelectionController.selectedEntities.find(e => e.id == entity.id && e.path == entity.path));
|
|
476
515
|
|
|
477
516
|
const actions = getActionsForEntity({
|
|
478
517
|
entity,
|
|
@@ -487,7 +526,7 @@ export const EntityCollectionView = React.memo(
|
|
|
487
526
|
isSelected={isSelected}
|
|
488
527
|
selectionEnabled={selectionEnabled}
|
|
489
528
|
size={size}
|
|
490
|
-
highlightEntity={
|
|
529
|
+
highlightEntity={setHighlightedEntity}
|
|
491
530
|
unhighlightEntity={unselectNavigatedEntity}
|
|
492
531
|
collection={collection}
|
|
493
532
|
fullPath={fullPath}
|
|
@@ -495,10 +534,11 @@ export const EntityCollectionView = React.memo(
|
|
|
495
534
|
hideId={collection?.hideIdFromCollection}
|
|
496
535
|
onCollectionChange={updateLastDeleteTimestamp}
|
|
497
536
|
selectionController={usedSelectionController}
|
|
537
|
+
openEntityMode={openEntityMode}
|
|
498
538
|
/>
|
|
499
539
|
);
|
|
500
540
|
|
|
501
|
-
};
|
|
541
|
+
}, [updateLastDeleteTimestamp, usedSelectionController]);
|
|
502
542
|
|
|
503
543
|
const title = <Popover
|
|
504
544
|
open={popOverOpen}
|
|
@@ -528,7 +568,7 @@ export const EntityCollectionView = React.memo(
|
|
|
528
568
|
</div>}
|
|
529
569
|
>
|
|
530
570
|
|
|
531
|
-
{collection.description && <div className="m-4 text-
|
|
571
|
+
{collection.description && <div className="m-4 text-surface-900 dark:text-white">
|
|
532
572
|
<Markdown source={collection.description}/>
|
|
533
573
|
</div>}
|
|
534
574
|
|
|
@@ -557,6 +597,7 @@ export const EntityCollectionView = React.memo(
|
|
|
557
597
|
property={property}
|
|
558
598
|
fullPath={fullPath}
|
|
559
599
|
collection={collection}
|
|
600
|
+
tableController={tableController}
|
|
560
601
|
parentCollectionIds={parentCollectionIds ?? []}/>;
|
|
561
602
|
})}
|
|
562
603
|
</>;
|
|
@@ -567,7 +608,8 @@ export const EntityCollectionView = React.memo(
|
|
|
567
608
|
if (typeof AddColumnComponent === "function")
|
|
568
609
|
return <AddColumnComponent fullPath={fullPath}
|
|
569
610
|
parentCollectionIds={parentCollectionIds ?? []}
|
|
570
|
-
collection={collection}
|
|
611
|
+
collection={collection}
|
|
612
|
+
tableController={tableController}/>;
|
|
571
613
|
return null;
|
|
572
614
|
}
|
|
573
615
|
: undefined;
|
|
@@ -584,12 +626,13 @@ export const EntityCollectionView = React.memo(
|
|
|
584
626
|
});
|
|
585
627
|
|
|
586
628
|
return (
|
|
587
|
-
<div className={
|
|
629
|
+
<div className={cls("overflow-hidden h-full w-full rounded-md", className)}
|
|
588
630
|
ref={containerRef}>
|
|
589
631
|
<EntityCollectionTable
|
|
590
632
|
key={`collection_table_${fullPath}`}
|
|
591
633
|
additionalFields={additionalFields}
|
|
592
634
|
tableController={tableController}
|
|
635
|
+
enablePopupIcon={true}
|
|
593
636
|
displayedColumnIds={displayedColumnIds}
|
|
594
637
|
onSizeChanged={onSizeChanged}
|
|
595
638
|
onEntityClick={onEntityClick}
|
|
@@ -599,13 +642,23 @@ export const EntityCollectionView = React.memo(
|
|
|
599
642
|
uniqueFieldValidator={uniqueFieldValidator}
|
|
600
643
|
title={title}
|
|
601
644
|
selectionController={usedSelectionController}
|
|
602
|
-
highlightedEntities={
|
|
645
|
+
highlightedEntities={highlightedEntity ? [highlightedEntity] : []}
|
|
603
646
|
defaultSize={collection.defaultSize}
|
|
604
647
|
properties={resolvedCollection.properties}
|
|
605
648
|
getPropertyFor={getPropertyFor}
|
|
606
649
|
onTextSearchClick={textSearchInitialised ? undefined : onTextSearchClick}
|
|
650
|
+
onScroll={tableController.onScroll}
|
|
651
|
+
initialScroll={tableController.initialScroll}
|
|
607
652
|
textSearchLoading={textSearchLoading}
|
|
608
653
|
textSearchEnabled={textSearchEnabled}
|
|
654
|
+
actionsStart={<EntityCollectionViewStartActions
|
|
655
|
+
parentCollectionIds={parentCollectionIds ?? []}
|
|
656
|
+
collection={collection}
|
|
657
|
+
tableController={tableController}
|
|
658
|
+
path={fullPath}
|
|
659
|
+
relativePath={collection.path}
|
|
660
|
+
selectionController={usedSelectionController}
|
|
661
|
+
collectionEntitiesCount={docsCount}/>}
|
|
609
662
|
actions={<EntityCollectionViewActions
|
|
610
663
|
parentCollectionIds={parentCollectionIds ?? []}
|
|
611
664
|
collection={collection}
|
|
@@ -641,21 +694,22 @@ export const EntityCollectionView = React.memo(
|
|
|
641
694
|
additionalIDHeaderWidget={<EntityIdHeaderWidget
|
|
642
695
|
path={fullPath}
|
|
643
696
|
collection={collection}/>}
|
|
697
|
+
openEntityMode={openEntityMode}
|
|
644
698
|
/>
|
|
645
699
|
|
|
646
|
-
<PopupFormField
|
|
647
|
-
key={`popup_form_${popupCell?.propertyKey}_${popupCell?.
|
|
700
|
+
{popupCell && <PopupFormField
|
|
701
|
+
key={`popup_form_${popupCell?.propertyKey}_${popupCell?.entityId}`}
|
|
648
702
|
open={Boolean(popupCell)}
|
|
649
703
|
onClose={onPopupClose}
|
|
650
704
|
cellRect={popupCell?.cellRect}
|
|
651
705
|
propertyKey={popupCell?.propertyKey}
|
|
652
706
|
collection={collection}
|
|
653
|
-
|
|
707
|
+
entityId={popupCell.entityId}
|
|
654
708
|
tableKey={tableKey.current}
|
|
655
709
|
customFieldValidator={uniqueFieldValidator}
|
|
656
710
|
path={resolvedFullPath}
|
|
657
711
|
onCellValueChange={onValueChange}
|
|
658
|
-
container={containerRef.current}/>
|
|
712
|
+
container={containerRef.current}/>}
|
|
659
713
|
|
|
660
714
|
{deleteEntityClicked &&
|
|
661
715
|
<DeleteEntityDialog
|
|
@@ -671,7 +725,7 @@ export const EntityCollectionView = React.memo(
|
|
|
671
725
|
</div>
|
|
672
726
|
);
|
|
673
727
|
}, (a, b) => {
|
|
674
|
-
return equal(a.
|
|
728
|
+
return equal(a.path, b.path) &&
|
|
675
729
|
equal(a.parentCollectionIds, b.parentCollectionIds) &&
|
|
676
730
|
equal(a.isSubCollection, b.isSubCollection) &&
|
|
677
731
|
equal(a.className, b.className) &&
|
|
@@ -683,8 +737,12 @@ export const EntityCollectionView = React.memo(
|
|
|
683
737
|
equal(a.selectionController, b.selectionController) &&
|
|
684
738
|
equal(a.Actions, b.Actions) &&
|
|
685
739
|
equal(a.defaultSize, b.defaultSize) &&
|
|
740
|
+
equal(a.initialFilter, b.initialFilter) &&
|
|
741
|
+
equal(a.initialSort, b.initialSort) &&
|
|
686
742
|
equal(a.textSearchEnabled, b.textSearchEnabled) &&
|
|
687
743
|
equal(a.additionalFields, b.additionalFields) &&
|
|
744
|
+
equal(a.sideDialogWidth, b.sideDialogWidth) &&
|
|
745
|
+
equal(a.openEntityMode, b.openEntityMode) &&
|
|
688
746
|
equal(a.forceFilter, b.forceFilter);
|
|
689
747
|
}) as React.FunctionComponent<EntityCollectionViewProps<any>>
|
|
690
748
|
|
|
@@ -709,7 +767,7 @@ function EntitiesCount({
|
|
|
709
767
|
|
|
710
768
|
const sortByProperty = sortBy ? sortBy[0] : undefined;
|
|
711
769
|
const currentSort = sortBy ? sortBy[1] : undefined;
|
|
712
|
-
const resolvedPath = useMemo(() => navigation.
|
|
770
|
+
const resolvedPath = useMemo(() => navigation.resolveIdsFrom(fullPath), [fullPath, navigation.resolveIdsFrom]);
|
|
713
771
|
|
|
714
772
|
useEffect(() => {
|
|
715
773
|
if (dataSource.countEntities)
|
|
@@ -724,6 +782,7 @@ function EntitiesCount({
|
|
|
724
782
|
|
|
725
783
|
useEffect(() => {
|
|
726
784
|
if (onCountChange) {
|
|
785
|
+
setError(undefined);
|
|
727
786
|
onCountChange(count ?? 0);
|
|
728
787
|
}
|
|
729
788
|
}, [onCountChange, count]);
|
|
@@ -755,48 +814,85 @@ function EntityIdHeaderWidget({
|
|
|
755
814
|
collection: EntityCollection,
|
|
756
815
|
path: string
|
|
757
816
|
}) {
|
|
817
|
+
|
|
818
|
+
const navigation = useNavigationController();
|
|
758
819
|
const [openPopup, setOpenPopup] = React.useState(false);
|
|
759
820
|
const [searchString, setSearchString] = React.useState("");
|
|
821
|
+
const [recentIds, setRecentIds] = React.useState<string[]>(getRecentIds(collection.id));
|
|
760
822
|
const sideEntityController = useSideEntityController();
|
|
823
|
+
|
|
824
|
+
const openEntityMode = collection?.openEntityMode ?? DEFAULT_ENTITY_OPEN_MODE;
|
|
825
|
+
|
|
761
826
|
return (
|
|
762
|
-
<Tooltip title={!openPopup ? "Find by ID" : undefined}>
|
|
827
|
+
<Tooltip title={!openPopup ? "Find by ID" : undefined} asChild={false}>
|
|
763
828
|
<Popover
|
|
764
829
|
open={openPopup}
|
|
765
830
|
onOpenChange={setOpenPopup}
|
|
831
|
+
sideOffset={0}
|
|
832
|
+
align={"start"}
|
|
833
|
+
alignOffset={-117}
|
|
766
834
|
trigger={
|
|
767
835
|
<IconButton size={"small"}>
|
|
768
836
|
<SearchIcon size={"small"}/>
|
|
769
837
|
</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
|
-
|
|
838
|
+
}>
|
|
839
|
+
<div
|
|
840
|
+
className={cls("my-2 rounded-lg bg-surface-50 dark:bg-surface-950 text-surface-900 dark:text-white")}>
|
|
841
|
+
<form noValidate={true}
|
|
842
|
+
onSubmit={(e) => {
|
|
843
|
+
e.preventDefault();
|
|
844
|
+
if (!searchString) return;
|
|
845
|
+
setOpenPopup(false);
|
|
846
|
+
const entityId = searchString.trim();
|
|
847
|
+
setRecentIds(addRecentId(collection.id, entityId));
|
|
848
|
+
navigateToEntity({
|
|
849
|
+
openEntityMode,
|
|
850
|
+
collection,
|
|
851
|
+
entityId,
|
|
852
|
+
path,
|
|
853
|
+
sideEntityController,
|
|
854
|
+
navigation
|
|
855
|
+
})
|
|
856
|
+
}}
|
|
857
|
+
className={"w-96 max-w-full"}>
|
|
858
|
+
|
|
859
|
+
<div className="flex p-2 w-full gap-2">
|
|
860
|
+
<input
|
|
861
|
+
autoFocus={openPopup}
|
|
862
|
+
placeholder={"Find entity by ID"}
|
|
863
|
+
// size={"small"}
|
|
864
|
+
onChange={(e) => {
|
|
865
|
+
setSearchString(e.target.value);
|
|
866
|
+
}}
|
|
867
|
+
value={searchString}
|
|
868
|
+
className={"rounded-lg bg-white dark:bg-surface-800 flex-grow bg-transparent outline-none p-2 " + focusedDisabled}/>
|
|
869
|
+
<Button variant={"text"}
|
|
870
|
+
disabled={!(searchString.trim())}
|
|
871
|
+
type={"submit"}
|
|
872
|
+
><KeyboardTabIcon/></Button>
|
|
873
|
+
</div>
|
|
874
|
+
</form>
|
|
875
|
+
{recentIds && recentIds.length > 0 && <div className="flex flex-col gap-2 p-2">
|
|
876
|
+
{recentIds.map(id => (
|
|
877
|
+
<ReferencePreview reference={new EntityReference(id, path)}
|
|
878
|
+
key={id}
|
|
879
|
+
hover={true}
|
|
880
|
+
onClick={() => {
|
|
881
|
+
setOpenPopup(false);
|
|
882
|
+
navigateToEntity({
|
|
883
|
+
openEntityMode,
|
|
884
|
+
collection,
|
|
885
|
+
entityId: id,
|
|
886
|
+
path,
|
|
887
|
+
sideEntityController,
|
|
888
|
+
navigation
|
|
889
|
+
})
|
|
890
|
+
}}
|
|
891
|
+
includeEntityLink={false}
|
|
892
|
+
size={"small"}/>
|
|
893
|
+
))}
|
|
894
|
+
</div>}
|
|
895
|
+
</div>
|
|
800
896
|
</Popover>
|
|
801
897
|
|
|
802
898
|
</Tooltip>
|