@firecms/core 3.0.0-canary.24 → 3.0.0-canary.241
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 +20 -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 +8 -5
- 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 +14 -4
- 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 +5 -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 +40 -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 -12
- 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 +21578 -13895
- package/dist/index.es.js.map +1 -1
- package/dist/index.umd.js +24366 -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 +97 -23
- 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 +8 -3
- package/dist/types/firecms_context.d.ts +1 -1
- package/dist/types/index.d.ts +0 -1
- package/dist/types/navigation.d.ts +41 -14
- package/dist/types/permissions.d.ts +4 -4
- package/dist/types/plugins.d.ts +36 -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 +10 -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/callbacks.d.ts +2 -0
- 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 +3 -0
- package/dist/util/navigation_from_path.d.ts +6 -1
- package/dist/util/navigation_utils.d.ts +15 -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} +11 -11
- 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 +48 -40
- 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 +32 -37
- 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 +229 -117
- 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 +80 -59
- package/src/components/EntityView.tsx +13 -10
- package/src/components/ErrorView.tsx +4 -4
- package/src/components/HomePage/DefaultHomePage.tsx +27 -20
- 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 +157 -145
- 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 +130 -51
- 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 +44 -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 +6 -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 +406 -478
- package/src/core/EntityEditViewFormActions.tsx +199 -0
- package/src/core/EntitySidePanel.tsx +95 -19
- package/src/core/FireCMS.tsx +72 -58
- 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 +48 -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 +194 -68
- 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 +201 -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 +26 -37
- package/src/preview/components/ReferencePreview.tsx +23 -34
- package/src/preview/components/StorageThumbnail.tsx +5 -1
- package/src/preview/components/UrlComponentPreview.tsx +60 -28
- package/src/preview/property_previews/ArrayOfMapsPreview.tsx +6 -6
- 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 +13 -13
- 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 +246 -0
- package/src/routes/HomePageRoute.tsx +17 -0
- package/src/types/auth.tsx +9 -13
- package/src/types/collections.ts +118 -28
- 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 +9 -4
- package/src/types/firecms_context.tsx +1 -1
- package/src/types/index.ts +0 -1
- package/src/types/navigation.ts +49 -18
- package/src/types/permissions.ts +5 -5
- package/src/types/plugins.tsx +42 -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 +11 -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/callbacks.ts +119 -0
- 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 +3 -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 +18 -7
- package/src/util/navigation_utils.ts +141 -25
- 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,44 @@ 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
|
+
* Full path using navigation ids.
|
|
98
|
+
*/
|
|
99
|
+
fullIdPath?: string;
|
|
100
|
+
/**
|
|
101
|
+
* If this is a subcollection, specify the parent collection ids.
|
|
102
|
+
*/
|
|
84
103
|
parentCollectionIds?: string[];
|
|
104
|
+
/**
|
|
105
|
+
* Whether this is a subcollection or not.
|
|
106
|
+
*/
|
|
85
107
|
isSubCollection?: boolean;
|
|
108
|
+
|
|
86
109
|
className?: string;
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* If true, this view will store its filter and sorting status in the url params
|
|
113
|
+
*/
|
|
114
|
+
updateUrl?: boolean;
|
|
115
|
+
|
|
87
116
|
} & EntityCollection<M>;
|
|
88
117
|
|
|
89
118
|
/**
|
|
@@ -107,42 +136,50 @@ export type EntityCollectionViewProps<M extends Record<string, any>> = {
|
|
|
107
136
|
*
|
|
108
137
|
* @param fullPath
|
|
109
138
|
* @param collection
|
|
110
|
-
|
|
139
|
+
|
|
111
140
|
* @group Components
|
|
112
141
|
*/
|
|
113
142
|
export const EntityCollectionView = React.memo(
|
|
114
143
|
function EntityCollectionView<M extends Record<string, any>>({
|
|
115
|
-
fullPath,
|
|
144
|
+
fullPath: fullPathProp,
|
|
145
|
+
fullIdPath,
|
|
116
146
|
parentCollectionIds,
|
|
117
147
|
isSubCollection,
|
|
118
148
|
className,
|
|
149
|
+
updateUrl,
|
|
119
150
|
...collectionProp
|
|
120
151
|
}: EntityCollectionViewProps<M>
|
|
121
152
|
) {
|
|
122
153
|
|
|
123
|
-
|
|
154
|
+
|
|
155
|
+
const context = useFireCMSContext();
|
|
124
156
|
const navigation = useNavigationController();
|
|
157
|
+
const fullPath = fullPathProp ?? collectionProp.path;
|
|
158
|
+
const dataSource = useDataSource(collectionProp);
|
|
125
159
|
const sideEntityController = useSideEntityController();
|
|
126
160
|
const authController = useAuthController();
|
|
127
161
|
const userConfigPersistence = useUserConfigurationPersistence();
|
|
128
162
|
const analyticsController = useAnalyticsController();
|
|
129
163
|
const customizationController = useCustomizationController();
|
|
130
164
|
|
|
131
|
-
|
|
132
165
|
const containerRef = React.useRef<HTMLDivElement>(null);
|
|
133
166
|
|
|
167
|
+
const scrollRestoration = useScrollRestoration();
|
|
168
|
+
|
|
134
169
|
const collection = useMemo(() => {
|
|
135
170
|
const userOverride = userConfigPersistence?.getCollectionConfig<M>(fullPath);
|
|
136
171
|
return (userOverride ? mergeDeep(collectionProp, userOverride) : collectionProp) as EntityCollection<M>;
|
|
137
172
|
}, [collectionProp, fullPath, userConfigPersistence?.getCollectionConfig]);
|
|
138
173
|
|
|
174
|
+
const openEntityMode = collection?.openEntityMode ?? DEFAULT_ENTITY_OPEN_MODE;
|
|
175
|
+
|
|
139
176
|
const collectionRef = React.useRef(collection);
|
|
140
177
|
useEffect(() => {
|
|
141
178
|
collectionRef.current = collection;
|
|
142
179
|
}, [collection]);
|
|
143
180
|
|
|
144
181
|
const canCreateEntities = canCreateEntity(collection, authController, fullPath, null);
|
|
145
|
-
const [
|
|
182
|
+
const [highlightedEntity, setHighlightedEntity] = useState<Entity<M> | undefined>(undefined);
|
|
146
183
|
const [deleteEntityClicked, setDeleteEntityClicked] = React.useState<Entity<M> | Entity<M>[] | undefined>(undefined);
|
|
147
184
|
|
|
148
185
|
const [lastDeleteTimestamp, setLastDeleteTimestamp] = React.useState<number>(0);
|
|
@@ -151,12 +188,12 @@ export const EntityCollectionView = React.memo(
|
|
|
151
188
|
const [docsCount, setDocsCount] = useState<number>(0);
|
|
152
189
|
|
|
153
190
|
const unselectNavigatedEntity = useCallback(() => {
|
|
154
|
-
const currentSelection =
|
|
191
|
+
const currentSelection = highlightedEntity;
|
|
155
192
|
setTimeout(() => {
|
|
156
|
-
if (currentSelection ===
|
|
157
|
-
|
|
193
|
+
if (currentSelection === highlightedEntity)
|
|
194
|
+
setHighlightedEntity(undefined);
|
|
158
195
|
}, 2400);
|
|
159
|
-
}, [
|
|
196
|
+
}, [highlightedEntity]);
|
|
160
197
|
|
|
161
198
|
const checkInlineEditing = useCallback((entity?: Entity<any>): boolean => {
|
|
162
199
|
const collection = collectionRef.current;
|
|
@@ -175,20 +212,15 @@ export const EntityCollectionView = React.memo(
|
|
|
175
212
|
const usedSelectionController = collection.selectionController ?? selectionController;
|
|
176
213
|
const {
|
|
177
214
|
selectedEntities,
|
|
178
|
-
toggleEntitySelection,
|
|
179
|
-
isEntitySelected,
|
|
180
215
|
setSelectedEntities
|
|
181
216
|
} = usedSelectionController;
|
|
182
217
|
|
|
183
|
-
|
|
184
|
-
setDeleteEntityClicked(undefined);
|
|
185
|
-
}, [selectedEntities]);
|
|
186
|
-
|
|
187
|
-
const tableController = useDataSourceEntityCollectionTableController<M>({
|
|
218
|
+
const tableController = useDataSourceTableController<M>({
|
|
188
219
|
fullPath,
|
|
189
|
-
collection
|
|
190
|
-
|
|
191
|
-
|
|
220
|
+
collection,
|
|
221
|
+
lastDeleteTimestamp,
|
|
222
|
+
scrollRestoration,
|
|
223
|
+
updateUrl
|
|
192
224
|
});
|
|
193
225
|
|
|
194
226
|
const tableKey = React.useRef<string>(Math.random().toString(36));
|
|
@@ -199,20 +231,28 @@ export const EntityCollectionView = React.memo(
|
|
|
199
231
|
}, [tableController.setPopupCell]);
|
|
200
232
|
|
|
201
233
|
const onEntityClick = useCallback((clickedEntity: Entity<M>) => {
|
|
202
|
-
console.log("Entity clicked", clickedEntity)
|
|
203
234
|
const collection = collectionRef.current;
|
|
204
|
-
|
|
235
|
+
setHighlightedEntity(clickedEntity);
|
|
205
236
|
analyticsController.onAnalyticsEvent?.("edit_entity_clicked", {
|
|
206
237
|
path: clickedEntity.path,
|
|
207
238
|
entityId: clickedEntity.id
|
|
208
239
|
});
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
240
|
+
|
|
241
|
+
if (collection) {
|
|
242
|
+
addRecentId(collection.id, clickedEntity.id);
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
const path = collection?.collectionGroup ? clickedEntity.path : (fullPath ?? clickedEntity.path);
|
|
246
|
+
navigateToEntity({
|
|
247
|
+
navigation,
|
|
248
|
+
path,
|
|
249
|
+
fullIdPath,
|
|
250
|
+
sideEntityController,
|
|
251
|
+
openEntityMode,
|
|
212
252
|
collection,
|
|
213
|
-
|
|
214
|
-
onClose: unselectNavigatedEntity,
|
|
253
|
+
entityId: clickedEntity.id
|
|
215
254
|
});
|
|
255
|
+
|
|
216
256
|
}, [unselectNavigatedEntity, sideEntityController]);
|
|
217
257
|
|
|
218
258
|
const onNewClick = useCallback(() => {
|
|
@@ -221,12 +261,16 @@ export const EntityCollectionView = React.memo(
|
|
|
221
261
|
analyticsController.onAnalyticsEvent?.("new_entity_click", {
|
|
222
262
|
path: fullPath
|
|
223
263
|
});
|
|
224
|
-
|
|
225
|
-
|
|
264
|
+
navigateToEntity({
|
|
265
|
+
openEntityMode,
|
|
226
266
|
collection,
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
267
|
+
entityId: undefined,
|
|
268
|
+
path: fullPath,
|
|
269
|
+
fullIdPath,
|
|
270
|
+
sideEntityController,
|
|
271
|
+
navigation,
|
|
272
|
+
onClose: unselectNavigatedEntity
|
|
273
|
+
})
|
|
230
274
|
}, [fullPath, sideEntityController]);
|
|
231
275
|
|
|
232
276
|
const onMultipleDeleteClick = () => {
|
|
@@ -257,6 +301,7 @@ export const EntityCollectionView = React.memo(
|
|
|
257
301
|
fullPath: string,
|
|
258
302
|
parentCollectionIds: string[],
|
|
259
303
|
collection: EntityCollection;
|
|
304
|
+
tableController: EntityTableController;
|
|
260
305
|
}> | undefined
|
|
261
306
|
|
|
262
307
|
// we are only using the first plugin that implements this
|
|
@@ -297,23 +342,21 @@ export const EntityCollectionView = React.memo(
|
|
|
297
342
|
value,
|
|
298
343
|
property,
|
|
299
344
|
entityId
|
|
300
|
-
}) => dataSource.checkUniqueField(fullPath, name, value, entityId),
|
|
345
|
+
}) => dataSource.checkUniqueField(fullPath, name, value, entityId, collection),
|
|
301
346
|
[fullPath]);
|
|
302
347
|
|
|
303
348
|
const onValueChange: OnCellValueChange<any, any> = ({
|
|
304
|
-
fullPath,
|
|
305
|
-
context,
|
|
306
349
|
value,
|
|
307
350
|
propertyKey,
|
|
308
351
|
onValueUpdated,
|
|
309
352
|
setError,
|
|
310
|
-
entity,
|
|
353
|
+
data: entity,
|
|
311
354
|
}) => {
|
|
312
355
|
|
|
313
356
|
const updatedValues = setIn({ ...entity.values }, propertyKey, value);
|
|
314
357
|
|
|
315
358
|
const saveProps: SaveEntityProps = {
|
|
316
|
-
path: fullPath,
|
|
359
|
+
path: entity.path ?? fullPath,
|
|
317
360
|
entityId: entity.id,
|
|
318
361
|
values: updatedValues,
|
|
319
362
|
previousValues: entity.values,
|
|
@@ -324,10 +367,12 @@ export const EntityCollectionView = React.memo(
|
|
|
324
367
|
return saveEntityWithCallbacks({
|
|
325
368
|
...saveProps,
|
|
326
369
|
collection,
|
|
327
|
-
callbacks: collection.callbacks,
|
|
328
370
|
dataSource,
|
|
329
371
|
context,
|
|
330
|
-
onSaveSuccess: () =>
|
|
372
|
+
onSaveSuccess: () => {
|
|
373
|
+
setError(undefined);
|
|
374
|
+
onValueUpdated();
|
|
375
|
+
},
|
|
331
376
|
onSaveFailure: (e: Error) => {
|
|
332
377
|
console.error("Save failure");
|
|
333
378
|
console.error(e);
|
|
@@ -337,16 +382,16 @@ export const EntityCollectionView = React.memo(
|
|
|
337
382
|
|
|
338
383
|
};
|
|
339
384
|
|
|
340
|
-
const resolvedFullPath = navigation.
|
|
385
|
+
const resolvedFullPath = navigation.resolveIdsFrom(fullPath);
|
|
341
386
|
const resolvedCollection = useMemo(() => resolveCollection<M>({
|
|
342
387
|
collection,
|
|
343
388
|
path: fullPath,
|
|
344
|
-
|
|
389
|
+
propertyConfigs: customizationController.propertyConfigs,
|
|
390
|
+
authController,
|
|
345
391
|
}), [collection, fullPath]);
|
|
346
392
|
|
|
347
393
|
const getPropertyFor = useCallback(({
|
|
348
394
|
propertyKey,
|
|
349
|
-
propertyValue,
|
|
350
395
|
entity
|
|
351
396
|
}: GetPropertyForProps<M>) => {
|
|
352
397
|
let propertyOrBuilder: PropertyOrBuilder<any, M> | undefined = getPropertyInPath<M>(collection.properties, propertyKey);
|
|
@@ -360,13 +405,13 @@ export const EntityCollectionView = React.memo(
|
|
|
360
405
|
return resolveProperty({
|
|
361
406
|
propertyKey,
|
|
362
407
|
propertyOrBuilder,
|
|
363
|
-
path:
|
|
364
|
-
propertyValue,
|
|
408
|
+
path: entity.path,
|
|
365
409
|
values: entity.values,
|
|
366
410
|
entityId: entity.id,
|
|
367
|
-
|
|
411
|
+
propertyConfigs: customizationController.propertyConfigs,
|
|
412
|
+
authController
|
|
368
413
|
});
|
|
369
|
-
}, [collection.properties, customizationController.propertyConfigs,
|
|
414
|
+
}, [collection.properties, customizationController.propertyConfigs, resolvedCollection.properties]);
|
|
370
415
|
|
|
371
416
|
const displayedColumnIds = useColumnIds(resolvedCollection, true);
|
|
372
417
|
|
|
@@ -383,13 +428,16 @@ export const EntityCollectionView = React.memo(
|
|
|
383
428
|
startIcon={<KeyboardTabIcon size={"small"}/>}
|
|
384
429
|
onClick={(event: any) => {
|
|
385
430
|
event.stopPropagation();
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
entityId: entity.id,
|
|
389
|
-
selectedSubPath: subcollection.id ?? subcollection.path,
|
|
431
|
+
navigateToEntity({
|
|
432
|
+
openEntityMode,
|
|
390
433
|
collection,
|
|
391
|
-
|
|
392
|
-
|
|
434
|
+
entityId: entity.id,
|
|
435
|
+
selectedTab: subcollection.id ?? subcollection.path,
|
|
436
|
+
path: fullPath,
|
|
437
|
+
fullIdPath,
|
|
438
|
+
navigation,
|
|
439
|
+
sideEntityController
|
|
440
|
+
})
|
|
393
441
|
}}>
|
|
394
442
|
{subcollection.name}
|
|
395
443
|
</Button>
|
|
@@ -406,16 +454,16 @@ export const EntityCollectionView = React.memo(
|
|
|
406
454
|
Builder: ({ entity }) => {
|
|
407
455
|
const collectionsWithPath = navigation.getParentReferencesFromPath(entity.path);
|
|
408
456
|
return (
|
|
409
|
-
|
|
457
|
+
<div className={"flex flex-col gap-2 w-full"}>
|
|
410
458
|
{collectionsWithPath.map((reference) => {
|
|
411
459
|
return (
|
|
412
460
|
<ReferencePreview
|
|
413
461
|
key={reference.path + "/" + reference.id}
|
|
414
462
|
reference={reference}
|
|
415
|
-
size={"
|
|
463
|
+
size={"small"}/>
|
|
416
464
|
);
|
|
417
465
|
})}
|
|
418
|
-
|
|
466
|
+
</div>
|
|
419
467
|
);
|
|
420
468
|
}
|
|
421
469
|
}]
|
|
@@ -448,7 +496,7 @@ export const EntityCollectionView = React.memo(
|
|
|
448
496
|
if (deleteEnabled)
|
|
449
497
|
actions.push(deleteEntityAction);
|
|
450
498
|
if (customEntityActions)
|
|
451
|
-
actions
|
|
499
|
+
return mergeEntityActions(actions, customEntityActions);
|
|
452
500
|
return actions;
|
|
453
501
|
};
|
|
454
502
|
|
|
@@ -460,19 +508,19 @@ export const EntityCollectionView = React.memo(
|
|
|
460
508
|
return (largeLayout ? (80 + actionsWidth) : (70 + actionsWidth)) + (collapsedActions.length > 0 ? (largeLayout ? 40 : 30) : 0);
|
|
461
509
|
};
|
|
462
510
|
|
|
463
|
-
const tableRowActionsBuilder = ({
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
511
|
+
const tableRowActionsBuilder = useCallback(({
|
|
512
|
+
entity,
|
|
513
|
+
size,
|
|
514
|
+
width,
|
|
515
|
+
frozen
|
|
516
|
+
}: {
|
|
469
517
|
entity: Entity<any>,
|
|
470
518
|
size: CollectionSize,
|
|
471
519
|
width: number,
|
|
472
520
|
frozen?: boolean
|
|
473
521
|
}) => {
|
|
474
522
|
|
|
475
|
-
const isSelected =
|
|
523
|
+
const isSelected = Boolean(usedSelectionController.selectedEntities.find(e => e.id == entity.id && e.path == entity.path));
|
|
476
524
|
|
|
477
525
|
const actions = getActionsForEntity({
|
|
478
526
|
entity,
|
|
@@ -487,18 +535,19 @@ export const EntityCollectionView = React.memo(
|
|
|
487
535
|
isSelected={isSelected}
|
|
488
536
|
selectionEnabled={selectionEnabled}
|
|
489
537
|
size={size}
|
|
490
|
-
highlightEntity={
|
|
538
|
+
highlightEntity={setHighlightedEntity}
|
|
491
539
|
unhighlightEntity={unselectNavigatedEntity}
|
|
492
540
|
collection={collection}
|
|
493
|
-
fullPath={fullPath}
|
|
541
|
+
fullPath={fullIdPath ?? fullPath}
|
|
494
542
|
actions={actions}
|
|
495
543
|
hideId={collection?.hideIdFromCollection}
|
|
496
544
|
onCollectionChange={updateLastDeleteTimestamp}
|
|
497
545
|
selectionController={usedSelectionController}
|
|
546
|
+
openEntityMode={openEntityMode}
|
|
498
547
|
/>
|
|
499
548
|
);
|
|
500
549
|
|
|
501
|
-
};
|
|
550
|
+
}, [updateLastDeleteTimestamp, usedSelectionController]);
|
|
502
551
|
|
|
503
552
|
const title = <Popover
|
|
504
553
|
open={popOverOpen}
|
|
@@ -528,7 +577,7 @@ export const EntityCollectionView = React.memo(
|
|
|
528
577
|
</div>}
|
|
529
578
|
>
|
|
530
579
|
|
|
531
|
-
{collection.description && <div className="m-4 text-
|
|
580
|
+
{collection.description && <div className="m-4 text-surface-900 dark:text-white">
|
|
532
581
|
<Markdown source={collection.description}/>
|
|
533
582
|
</div>}
|
|
534
583
|
|
|
@@ -557,6 +606,7 @@ export const EntityCollectionView = React.memo(
|
|
|
557
606
|
property={property}
|
|
558
607
|
fullPath={fullPath}
|
|
559
608
|
collection={collection}
|
|
609
|
+
tableController={tableController}
|
|
560
610
|
parentCollectionIds={parentCollectionIds ?? []}/>;
|
|
561
611
|
})}
|
|
562
612
|
</>;
|
|
@@ -567,7 +617,8 @@ export const EntityCollectionView = React.memo(
|
|
|
567
617
|
if (typeof AddColumnComponent === "function")
|
|
568
618
|
return <AddColumnComponent fullPath={fullPath}
|
|
569
619
|
parentCollectionIds={parentCollectionIds ?? []}
|
|
570
|
-
collection={collection}
|
|
620
|
+
collection={collection}
|
|
621
|
+
tableController={tableController}/>;
|
|
571
622
|
return null;
|
|
572
623
|
}
|
|
573
624
|
: undefined;
|
|
@@ -584,12 +635,13 @@ export const EntityCollectionView = React.memo(
|
|
|
584
635
|
});
|
|
585
636
|
|
|
586
637
|
return (
|
|
587
|
-
<div className={
|
|
638
|
+
<div className={cls("overflow-hidden h-full w-full rounded-md", className)}
|
|
588
639
|
ref={containerRef}>
|
|
589
640
|
<EntityCollectionTable
|
|
590
641
|
key={`collection_table_${fullPath}`}
|
|
591
642
|
additionalFields={additionalFields}
|
|
592
643
|
tableController={tableController}
|
|
644
|
+
enablePopupIcon={true}
|
|
593
645
|
displayedColumnIds={displayedColumnIds}
|
|
594
646
|
onSizeChanged={onSizeChanged}
|
|
595
647
|
onEntityClick={onEntityClick}
|
|
@@ -599,13 +651,23 @@ export const EntityCollectionView = React.memo(
|
|
|
599
651
|
uniqueFieldValidator={uniqueFieldValidator}
|
|
600
652
|
title={title}
|
|
601
653
|
selectionController={usedSelectionController}
|
|
602
|
-
highlightedEntities={
|
|
654
|
+
highlightedEntities={highlightedEntity ? [highlightedEntity] : []}
|
|
603
655
|
defaultSize={collection.defaultSize}
|
|
604
656
|
properties={resolvedCollection.properties}
|
|
605
657
|
getPropertyFor={getPropertyFor}
|
|
606
658
|
onTextSearchClick={textSearchInitialised ? undefined : onTextSearchClick}
|
|
659
|
+
onScroll={tableController.onScroll}
|
|
660
|
+
initialScroll={tableController.initialScroll}
|
|
607
661
|
textSearchLoading={textSearchLoading}
|
|
608
662
|
textSearchEnabled={textSearchEnabled}
|
|
663
|
+
actionsStart={<EntityCollectionViewStartActions
|
|
664
|
+
parentCollectionIds={parentCollectionIds ?? []}
|
|
665
|
+
collection={collection}
|
|
666
|
+
tableController={tableController}
|
|
667
|
+
path={fullPath}
|
|
668
|
+
relativePath={collection.path}
|
|
669
|
+
selectionController={usedSelectionController}
|
|
670
|
+
collectionEntitiesCount={docsCount}/>}
|
|
609
671
|
actions={<EntityCollectionViewActions
|
|
610
672
|
parentCollectionIds={parentCollectionIds ?? []}
|
|
611
673
|
collection={collection}
|
|
@@ -640,22 +702,24 @@ export const EntityCollectionView = React.memo(
|
|
|
640
702
|
getIdColumnWidth={getIdColumnWidth}
|
|
641
703
|
additionalIDHeaderWidget={<EntityIdHeaderWidget
|
|
642
704
|
path={fullPath}
|
|
705
|
+
fullIdPath={fullIdPath ?? fullPath}
|
|
643
706
|
collection={collection}/>}
|
|
707
|
+
openEntityMode={openEntityMode}
|
|
644
708
|
/>
|
|
645
709
|
|
|
646
|
-
<PopupFormField
|
|
647
|
-
key={`popup_form_${popupCell?.propertyKey}_${popupCell?.
|
|
710
|
+
{popupCell && <PopupFormField
|
|
711
|
+
key={`popup_form_${popupCell?.propertyKey}_${popupCell?.entityId}`}
|
|
648
712
|
open={Boolean(popupCell)}
|
|
649
713
|
onClose={onPopupClose}
|
|
650
714
|
cellRect={popupCell?.cellRect}
|
|
651
715
|
propertyKey={popupCell?.propertyKey}
|
|
652
716
|
collection={collection}
|
|
653
|
-
|
|
717
|
+
entityId={popupCell.entityId}
|
|
654
718
|
tableKey={tableKey.current}
|
|
655
719
|
customFieldValidator={uniqueFieldValidator}
|
|
656
720
|
path={resolvedFullPath}
|
|
657
721
|
onCellValueChange={onValueChange}
|
|
658
|
-
container={containerRef.current}/>
|
|
722
|
+
container={containerRef.current}/>}
|
|
659
723
|
|
|
660
724
|
{deleteEntityClicked &&
|
|
661
725
|
<DeleteEntityDialog
|
|
@@ -671,7 +735,7 @@ export const EntityCollectionView = React.memo(
|
|
|
671
735
|
</div>
|
|
672
736
|
);
|
|
673
737
|
}, (a, b) => {
|
|
674
|
-
return equal(a.
|
|
738
|
+
return equal(a.path, b.path) &&
|
|
675
739
|
equal(a.parentCollectionIds, b.parentCollectionIds) &&
|
|
676
740
|
equal(a.isSubCollection, b.isSubCollection) &&
|
|
677
741
|
equal(a.className, b.className) &&
|
|
@@ -683,8 +747,14 @@ export const EntityCollectionView = React.memo(
|
|
|
683
747
|
equal(a.selectionController, b.selectionController) &&
|
|
684
748
|
equal(a.Actions, b.Actions) &&
|
|
685
749
|
equal(a.defaultSize, b.defaultSize) &&
|
|
750
|
+
equal(a.initialFilter, b.initialFilter) &&
|
|
751
|
+
equal(a.initialSort, b.initialSort) &&
|
|
686
752
|
equal(a.textSearchEnabled, b.textSearchEnabled) &&
|
|
687
753
|
equal(a.additionalFields, b.additionalFields) &&
|
|
754
|
+
equal(a.sideDialogWidth, b.sideDialogWidth) &&
|
|
755
|
+
equal(a.openEntityMode, b.openEntityMode) &&
|
|
756
|
+
equal(a.exportable, b.exportable) &&
|
|
757
|
+
equal(a.history, b.history) &&
|
|
688
758
|
equal(a.forceFilter, b.forceFilter);
|
|
689
759
|
}) as React.FunctionComponent<EntityCollectionViewProps<any>>
|
|
690
760
|
|
|
@@ -709,7 +779,7 @@ function EntitiesCount({
|
|
|
709
779
|
|
|
710
780
|
const sortByProperty = sortBy ? sortBy[0] : undefined;
|
|
711
781
|
const currentSort = sortBy ? sortBy[1] : undefined;
|
|
712
|
-
const resolvedPath = useMemo(() => navigation.
|
|
782
|
+
const resolvedPath = useMemo(() => navigation.resolveIdsFrom(fullPath), [fullPath, navigation.resolveIdsFrom]);
|
|
713
783
|
|
|
714
784
|
useEffect(() => {
|
|
715
785
|
if (dataSource.countEntities)
|
|
@@ -724,6 +794,7 @@ function EntitiesCount({
|
|
|
724
794
|
|
|
725
795
|
useEffect(() => {
|
|
726
796
|
if (onCountChange) {
|
|
797
|
+
setError(undefined);
|
|
727
798
|
onCountChange(count ?? 0);
|
|
728
799
|
}
|
|
729
800
|
}, [onCountChange, count]);
|
|
@@ -750,53 +821,94 @@ function buildPropertyWidthOverwrite(key: string, width: number): PartialEntityC
|
|
|
750
821
|
|
|
751
822
|
function EntityIdHeaderWidget({
|
|
752
823
|
collection,
|
|
753
|
-
path
|
|
824
|
+
path,
|
|
825
|
+
fullIdPath
|
|
754
826
|
}: {
|
|
755
827
|
collection: EntityCollection,
|
|
756
|
-
path: string
|
|
828
|
+
path: string,
|
|
829
|
+
fullIdPath: string
|
|
757
830
|
}) {
|
|
831
|
+
|
|
832
|
+
const navigation = useNavigationController();
|
|
758
833
|
const [openPopup, setOpenPopup] = React.useState(false);
|
|
759
834
|
const [searchString, setSearchString] = React.useState("");
|
|
835
|
+
const [recentIds, setRecentIds] = React.useState<string[]>(getRecentIds(collection.id));
|
|
760
836
|
const sideEntityController = useSideEntityController();
|
|
837
|
+
|
|
838
|
+
const openEntityMode = collection?.openEntityMode ?? DEFAULT_ENTITY_OPEN_MODE;
|
|
839
|
+
|
|
761
840
|
return (
|
|
762
|
-
<Tooltip title={!openPopup ? "Find by ID" : undefined}>
|
|
841
|
+
<Tooltip title={!openPopup ? "Find by ID" : undefined} asChild={false}>
|
|
763
842
|
<Popover
|
|
764
843
|
open={openPopup}
|
|
765
844
|
onOpenChange={setOpenPopup}
|
|
845
|
+
sideOffset={0}
|
|
846
|
+
align={"start"}
|
|
847
|
+
alignOffset={-117}
|
|
766
848
|
trigger={
|
|
767
849
|
<IconButton size={"small"}>
|
|
768
850
|
<SearchIcon size={"small"}/>
|
|
769
851
|
</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
|
-
|
|
852
|
+
}>
|
|
853
|
+
<div
|
|
854
|
+
className={cls("my-2 rounded-lg bg-surface-50 dark:bg-surface-950 text-surface-900 dark:text-white")}>
|
|
855
|
+
<form noValidate={true}
|
|
856
|
+
onSubmit={(e) => {
|
|
857
|
+
e.preventDefault();
|
|
858
|
+
if (!searchString) return;
|
|
859
|
+
setOpenPopup(false);
|
|
860
|
+
const entityId = searchString.trim();
|
|
861
|
+
setRecentIds(addRecentId(collection.id, entityId));
|
|
862
|
+
navigateToEntity({
|
|
863
|
+
openEntityMode,
|
|
864
|
+
collection,
|
|
865
|
+
entityId,
|
|
866
|
+
path,
|
|
867
|
+
fullIdPath,
|
|
868
|
+
sideEntityController,
|
|
869
|
+
navigation
|
|
870
|
+
})
|
|
871
|
+
}}
|
|
872
|
+
className={"w-96 max-w-full"}>
|
|
873
|
+
|
|
874
|
+
<div className="flex p-2 w-full gap-2">
|
|
875
|
+
<input
|
|
876
|
+
autoFocus={openPopup}
|
|
877
|
+
placeholder={"Find entity by ID"}
|
|
878
|
+
// size={"small"}
|
|
879
|
+
onChange={(e) => {
|
|
880
|
+
setSearchString(e.target.value);
|
|
881
|
+
}}
|
|
882
|
+
value={searchString}
|
|
883
|
+
className={"rounded-lg bg-white dark:bg-surface-800 flex-grow bg-transparent outline-none p-2 " + focusedDisabled}/>
|
|
884
|
+
<Button variant={"text"}
|
|
885
|
+
disabled={!(searchString.trim())}
|
|
886
|
+
type={"submit"}
|
|
887
|
+
><KeyboardTabIcon/></Button>
|
|
888
|
+
</div>
|
|
889
|
+
</form>
|
|
890
|
+
{recentIds && recentIds.length > 0 && <div className="flex flex-col gap-2 p-2">
|
|
891
|
+
{recentIds.map(id => (
|
|
892
|
+
<ReferencePreview reference={new EntityReference(id, path)}
|
|
893
|
+
key={id}
|
|
894
|
+
hover={true}
|
|
895
|
+
onClick={() => {
|
|
896
|
+
setOpenPopup(false);
|
|
897
|
+
navigateToEntity({
|
|
898
|
+
openEntityMode,
|
|
899
|
+
collection,
|
|
900
|
+
entityId: id,
|
|
901
|
+
path,
|
|
902
|
+
fullIdPath,
|
|
903
|
+
sideEntityController,
|
|
904
|
+
navigation
|
|
905
|
+
})
|
|
906
|
+
}}
|
|
907
|
+
includeEntityLink={false}
|
|
908
|
+
size={"small"}/>
|
|
909
|
+
))}
|
|
910
|
+
</div>}
|
|
911
|
+
</div>
|
|
800
912
|
</Popover>
|
|
801
913
|
|
|
802
914
|
</Tooltip>
|