@firecms/core 3.0.0-canary.23 → 3.0.0-canary.232
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 +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 +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 -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 +21435 -13881
- package/dist/index.es.js.map +1 -1
- package/dist/index.umd.js +24234 -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 +84 -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 +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 +36 -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 +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} +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 +227 -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 +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 +125 -49
- 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 +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 +397 -479
- 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 +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 +63 -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 +170 -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 +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 +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 +246 -0
- package/src/routes/HomePageRoute.tsx +17 -0
- package/src/types/auth.tsx +9 -13
- package/src/types/collections.ts +102 -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 +7 -2
- package/src/types/firecms_context.tsx +1 -1
- package/src/types/index.ts +0 -1
- package/src/types/navigation.ts +43 -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 +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/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 +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,12 @@ 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) &&
|
|
688
756
|
equal(a.forceFilter, b.forceFilter);
|
|
689
757
|
}) as React.FunctionComponent<EntityCollectionViewProps<any>>
|
|
690
758
|
|
|
@@ -709,7 +777,7 @@ function EntitiesCount({
|
|
|
709
777
|
|
|
710
778
|
const sortByProperty = sortBy ? sortBy[0] : undefined;
|
|
711
779
|
const currentSort = sortBy ? sortBy[1] : undefined;
|
|
712
|
-
const resolvedPath = useMemo(() => navigation.
|
|
780
|
+
const resolvedPath = useMemo(() => navigation.resolveIdsFrom(fullPath), [fullPath, navigation.resolveIdsFrom]);
|
|
713
781
|
|
|
714
782
|
useEffect(() => {
|
|
715
783
|
if (dataSource.countEntities)
|
|
@@ -724,6 +792,7 @@ function EntitiesCount({
|
|
|
724
792
|
|
|
725
793
|
useEffect(() => {
|
|
726
794
|
if (onCountChange) {
|
|
795
|
+
setError(undefined);
|
|
727
796
|
onCountChange(count ?? 0);
|
|
728
797
|
}
|
|
729
798
|
}, [onCountChange, count]);
|
|
@@ -750,53 +819,94 @@ function buildPropertyWidthOverwrite(key: string, width: number): PartialEntityC
|
|
|
750
819
|
|
|
751
820
|
function EntityIdHeaderWidget({
|
|
752
821
|
collection,
|
|
753
|
-
path
|
|
822
|
+
path,
|
|
823
|
+
fullIdPath
|
|
754
824
|
}: {
|
|
755
825
|
collection: EntityCollection,
|
|
756
|
-
path: string
|
|
826
|
+
path: string,
|
|
827
|
+
fullIdPath: string
|
|
757
828
|
}) {
|
|
829
|
+
|
|
830
|
+
const navigation = useNavigationController();
|
|
758
831
|
const [openPopup, setOpenPopup] = React.useState(false);
|
|
759
832
|
const [searchString, setSearchString] = React.useState("");
|
|
833
|
+
const [recentIds, setRecentIds] = React.useState<string[]>(getRecentIds(collection.id));
|
|
760
834
|
const sideEntityController = useSideEntityController();
|
|
835
|
+
|
|
836
|
+
const openEntityMode = collection?.openEntityMode ?? DEFAULT_ENTITY_OPEN_MODE;
|
|
837
|
+
|
|
761
838
|
return (
|
|
762
|
-
<Tooltip title={!openPopup ? "Find by ID" : undefined}>
|
|
839
|
+
<Tooltip title={!openPopup ? "Find by ID" : undefined} asChild={false}>
|
|
763
840
|
<Popover
|
|
764
841
|
open={openPopup}
|
|
765
842
|
onOpenChange={setOpenPopup}
|
|
843
|
+
sideOffset={0}
|
|
844
|
+
align={"start"}
|
|
845
|
+
alignOffset={-117}
|
|
766
846
|
trigger={
|
|
767
847
|
<IconButton size={"small"}>
|
|
768
848
|
<SearchIcon size={"small"}/>
|
|
769
849
|
</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
|
-
|
|
850
|
+
}>
|
|
851
|
+
<div
|
|
852
|
+
className={cls("my-2 rounded-lg bg-surface-50 dark:bg-surface-950 text-surface-900 dark:text-white")}>
|
|
853
|
+
<form noValidate={true}
|
|
854
|
+
onSubmit={(e) => {
|
|
855
|
+
e.preventDefault();
|
|
856
|
+
if (!searchString) return;
|
|
857
|
+
setOpenPopup(false);
|
|
858
|
+
const entityId = searchString.trim();
|
|
859
|
+
setRecentIds(addRecentId(collection.id, entityId));
|
|
860
|
+
navigateToEntity({
|
|
861
|
+
openEntityMode,
|
|
862
|
+
collection,
|
|
863
|
+
entityId,
|
|
864
|
+
path,
|
|
865
|
+
fullIdPath,
|
|
866
|
+
sideEntityController,
|
|
867
|
+
navigation
|
|
868
|
+
})
|
|
869
|
+
}}
|
|
870
|
+
className={"w-96 max-w-full"}>
|
|
871
|
+
|
|
872
|
+
<div className="flex p-2 w-full gap-2">
|
|
873
|
+
<input
|
|
874
|
+
autoFocus={openPopup}
|
|
875
|
+
placeholder={"Find entity by ID"}
|
|
876
|
+
// size={"small"}
|
|
877
|
+
onChange={(e) => {
|
|
878
|
+
setSearchString(e.target.value);
|
|
879
|
+
}}
|
|
880
|
+
value={searchString}
|
|
881
|
+
className={"rounded-lg bg-white dark:bg-surface-800 flex-grow bg-transparent outline-none p-2 " + focusedDisabled}/>
|
|
882
|
+
<Button variant={"text"}
|
|
883
|
+
disabled={!(searchString.trim())}
|
|
884
|
+
type={"submit"}
|
|
885
|
+
><KeyboardTabIcon/></Button>
|
|
886
|
+
</div>
|
|
887
|
+
</form>
|
|
888
|
+
{recentIds && recentIds.length > 0 && <div className="flex flex-col gap-2 p-2">
|
|
889
|
+
{recentIds.map(id => (
|
|
890
|
+
<ReferencePreview reference={new EntityReference(id, path)}
|
|
891
|
+
key={id}
|
|
892
|
+
hover={true}
|
|
893
|
+
onClick={() => {
|
|
894
|
+
setOpenPopup(false);
|
|
895
|
+
navigateToEntity({
|
|
896
|
+
openEntityMode,
|
|
897
|
+
collection,
|
|
898
|
+
entityId: id,
|
|
899
|
+
path,
|
|
900
|
+
fullIdPath,
|
|
901
|
+
sideEntityController,
|
|
902
|
+
navigation
|
|
903
|
+
})
|
|
904
|
+
}}
|
|
905
|
+
includeEntityLink={false}
|
|
906
|
+
size={"small"}/>
|
|
907
|
+
))}
|
|
908
|
+
</div>}
|
|
909
|
+
</div>
|
|
800
910
|
</Popover>
|
|
801
911
|
|
|
802
912
|
</Tooltip>
|