@firecms/core 3.0.0-canary.25 → 3.0.0-canary.251
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 +31 -12
- 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 +2 -15
- package/dist/components/HomePage/HomePageDnD.d.ts +76 -0
- package/dist/components/HomePage/NavigationCard.d.ts +3 -1
- package/dist/components/HomePage/NavigationCardBinding.d.ts +4 -3
- package/dist/components/HomePage/NavigationGroup.d.ts +7 -1
- package/dist/components/HomePage/RenameGroupDialog.d.ts +9 -0
- 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 +24 -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/field_configs.d.ts +1 -1
- 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/ReferenceAsStringFieldBinding.d.ts +9 -0
- 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 +5 -13
- 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 +17 -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 +57 -13
- 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 +22838 -13874
- package/dist/index.es.js.map +1 -1
- package/dist/index.umd.js +25639 -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/analytics.d.ts +1 -1
- package/dist/types/auth.d.ts +8 -10
- package/dist/types/collections.d.ts +107 -25
- 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 +62 -19
- package/dist/types/permissions.d.ts +4 -4
- package/dist/types/plugins.d.ts +48 -12
- package/dist/types/properties.d.ts +80 -24
- package/dist/types/property_config.d.ts +1 -3
- 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 +75 -0
- 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 +7 -4
- 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 +64 -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 +447 -229
- 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 +72 -42
- 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 +49 -36
- package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +20 -8
- package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +135 -105
- package/src/components/EntityCollectionTable/internal/popup_field/useDraggable.tsx +9 -9
- package/src/components/EntityCollectionView/EntityCollectionView.tsx +231 -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 +486 -159
- package/src/components/HomePage/FavouritesView.tsx +9 -14
- package/src/components/HomePage/HomePageDnD.tsx +613 -0
- package/src/components/HomePage/NavigationCard.tsx +48 -39
- package/src/components/HomePage/NavigationCardBinding.tsx +17 -16
- package/src/components/HomePage/NavigationGroup.tsx +63 -29
- package/src/components/HomePage/RenameGroupDialog.tsx +113 -0
- 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 +105 -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 +28 -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 +2 -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 +408 -478
- package/src/core/EntityEditViewFormActions.tsx +199 -0
- package/src/core/EntitySidePanel.tsx +85 -21
- 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 +26 -13
- 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 +88 -45
- package/src/form/components/CustomIdField.tsx +9 -3
- 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 +23 -13
- package/src/form/components/StorageUploadProgress.tsx +5 -6
- package/src/form/components/index.tsx +3 -1
- package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +34 -19
- package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +50 -36
- 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 +73 -55
- package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +157 -0
- package/src/form/field_bindings/{MultiSelectBinding.tsx → MultiSelectFieldBinding.tsx} +26 -21
- package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +11 -16
- package/src/form/field_bindings/ReferenceAsStringFieldBinding.tsx +135 -0
- 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 +24 -15
- package/src/form/field_bindings/StorageUploadFieldBinding.tsx +257 -199
- package/src/form/field_bindings/SwitchFieldBinding.tsx +29 -24
- package/src/form/field_bindings/TextFieldBinding.tsx +28 -24
- package/src/form/index.tsx +17 -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 +26 -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 +440 -119
- 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 -77
- package/src/internal/useUnsavedChangesDialog.tsx +127 -91
- package/src/preview/PropertyPreview.tsx +34 -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/analytics.ts +3 -0
- package/src/types/auth.tsx +9 -13
- package/src/types/collections.ts +129 -30
- 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 +77 -24
- package/src/types/permissions.ts +5 -5
- package/src/types/plugins.tsx +57 -14
- package/src/types/properties.ts +95 -26
- package/src/types/property_config.tsx +1 -2
- package/src/types/side_dialogs_controller.tsx +15 -0
- package/src/types/side_entity_controller.tsx +11 -1
- package/src/types/storage.ts +83 -1
- 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 +36 -11
- 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 +90 -33
- 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/EntityCollectionTable/internal/popup_field/ElementResizeListener.d.ts +0 -5
- 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/EntityCollectionTable/internal/popup_field/ElementResizeListener.tsx +0 -59
- 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
|
@@ -5,7 +5,7 @@ import { CircularProgress, CircularProgressProps, Typography } from "@firecms/ui
|
|
|
5
5
|
*
|
|
6
6
|
* @param text
|
|
7
7
|
* @param props
|
|
8
|
-
|
|
8
|
+
|
|
9
9
|
* @ignore
|
|
10
10
|
*/
|
|
11
11
|
export function CircularProgressCenter({ text, ...props }: CircularProgressProps & {
|
|
@@ -13,7 +13,7 @@ export function CircularProgressCenter({ text, ...props }: CircularProgressProps
|
|
|
13
13
|
}) {
|
|
14
14
|
return (
|
|
15
15
|
<div
|
|
16
|
-
className="flex w-full h-screen max-h-full max-w-full
|
|
16
|
+
className="flex w-full h-screen max-h-full max-w-full gap-4">
|
|
17
17
|
<div className="m-auto flex flex-col gap-2 items-center">
|
|
18
18
|
<CircularProgress {...props}/>
|
|
19
19
|
{text && <Typography
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { Button, FilterListOffIcon } from "@firecms/ui";
|
|
2
|
+
import { EntityTableController } from "../types";
|
|
3
|
+
|
|
4
|
+
export function ClearFilterSortButton({
|
|
5
|
+
tableController,
|
|
6
|
+
enabled
|
|
7
|
+
}: {
|
|
8
|
+
enabled: boolean;
|
|
9
|
+
tableController: EntityTableController
|
|
10
|
+
}) {
|
|
11
|
+
if (!enabled) {
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const filterIsSet = !!tableController.filterValues && Object.keys(tableController.filterValues).length > 0;
|
|
16
|
+
const sortIsSet = !!tableController.sortBy && tableController.sortBy.length > 0;
|
|
17
|
+
|
|
18
|
+
if ((filterIsSet || sortIsSet) && (tableController.clearFilter || tableController.setSortBy)) {
|
|
19
|
+
let label;
|
|
20
|
+
if (filterIsSet && sortIsSet) {
|
|
21
|
+
label = "Clear filter/sort";
|
|
22
|
+
} else if (filterIsSet) {
|
|
23
|
+
label = "Clear filter";
|
|
24
|
+
} else {
|
|
25
|
+
label = "Clear sort";
|
|
26
|
+
}
|
|
27
|
+
return <Button
|
|
28
|
+
variant={"outlined"}
|
|
29
|
+
className="h-fit-content"
|
|
30
|
+
aria-label="filter clear"
|
|
31
|
+
onClick={() => {
|
|
32
|
+
tableController.clearFilter?.();
|
|
33
|
+
tableController.setSortBy?.(undefined);
|
|
34
|
+
}}
|
|
35
|
+
size={"small"}>
|
|
36
|
+
<FilterListOffIcon/>
|
|
37
|
+
{label}
|
|
38
|
+
</Button>
|
|
39
|
+
}
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
|
|
3
|
-
import { Button, Dialog, DialogActions, DialogContent,
|
|
3
|
+
import { Button, Dialog, DialogActions, DialogContent, DialogTitle, LoadingButton } from "@firecms/ui";
|
|
4
4
|
|
|
5
|
-
export function
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
5
|
+
export function ConfirmationDialog({
|
|
6
|
+
open,
|
|
7
|
+
onAccept,
|
|
8
|
+
onCancel,
|
|
9
|
+
title,
|
|
10
|
+
loading,
|
|
11
|
+
body
|
|
12
|
+
}: {
|
|
13
13
|
open: boolean,
|
|
14
14
|
onAccept: () => void,
|
|
15
15
|
onCancel: () => void,
|
|
@@ -22,8 +22,8 @@ export function DeleteConfirmationDialog({
|
|
|
22
22
|
open={open}
|
|
23
23
|
onOpenChange={(open) => !open ? onCancel() : undefined}
|
|
24
24
|
>
|
|
25
|
+
<DialogTitle variant={"h6"} className={"mb-2"}>{title}</DialogTitle>
|
|
25
26
|
<DialogContent>
|
|
26
|
-
<Typography variant={"h6"} className={"mb-2"}>{title}</Typography>
|
|
27
27
|
{body}
|
|
28
28
|
</DialogContent>
|
|
29
29
|
|
|
@@ -38,7 +38,7 @@ export function DeleteConfirmationDialog({
|
|
|
38
38
|
type="submit"
|
|
39
39
|
loading={loading}
|
|
40
40
|
onClick={onAccept}
|
|
41
|
-
|
|
41
|
+
autoFocus>
|
|
42
42
|
Ok
|
|
43
43
|
</LoadingButton>
|
|
44
44
|
</DialogActions>
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { Entity, EntityCallbacks, EntityCollection } from "../types";
|
|
2
2
|
import React, { useCallback, useMemo, useState } from "react";
|
|
3
|
-
import { Button, CircularProgress, Dialog, DialogActions, DialogContent,
|
|
3
|
+
import { Button, CircularProgress, Dialog, DialogActions, DialogContent, DialogTitle } from "@firecms/ui";
|
|
4
4
|
import {
|
|
5
5
|
deleteEntityWithCallbacks,
|
|
6
|
+
useAuthController,
|
|
6
7
|
useCustomizationController,
|
|
7
8
|
useDataSource,
|
|
8
9
|
useFireCMSContext,
|
|
@@ -34,31 +35,24 @@ export function DeleteEntityDialog<M extends Record<string, any>>({
|
|
|
34
35
|
onMultipleEntitiesDelete,
|
|
35
36
|
path
|
|
36
37
|
}: DeleteEntityDialogProps<M>) {
|
|
37
|
-
|
|
38
|
+
const authController = useAuthController();
|
|
38
39
|
const dataSource = useDataSource(collection);
|
|
39
40
|
const customizationController = useCustomizationController();
|
|
40
41
|
const snackbarController = useSnackbarController();
|
|
41
42
|
const [loading, setLoading] = useState(false);
|
|
42
43
|
|
|
43
|
-
const [entityOrEntities, setUsedEntityOrEntities] = React.useState<Entity<M> | Entity<M>[]>();
|
|
44
|
-
|
|
45
|
-
const [multipleEntities, setMultipleEntities] = React.useState<boolean>();
|
|
46
44
|
const context = useFireCMSContext();
|
|
45
|
+
const entityOrEntities = Array.isArray(entityOrEntitiesToDelete) && entityOrEntitiesToDelete.length === 1
|
|
46
|
+
? entityOrEntitiesToDelete[0]
|
|
47
|
+
: entityOrEntitiesToDelete;
|
|
47
48
|
|
|
48
|
-
|
|
49
|
-
if (entityOrEntitiesToDelete) {
|
|
50
|
-
const revisedEntityOrEntities = Array.isArray(entityOrEntitiesToDelete) && entityOrEntitiesToDelete.length === 1
|
|
51
|
-
? entityOrEntitiesToDelete[0]
|
|
52
|
-
: entityOrEntitiesToDelete;
|
|
53
|
-
setUsedEntityOrEntities(revisedEntityOrEntities);
|
|
54
|
-
setMultipleEntities(Array.isArray(revisedEntityOrEntities));
|
|
55
|
-
}
|
|
56
|
-
}, [entityOrEntitiesToDelete]);
|
|
49
|
+
const multipleEntities = Array.isArray(entityOrEntities);
|
|
57
50
|
|
|
58
51
|
const resolvedCollection = useMemo(() => resolveCollection<M>({
|
|
59
52
|
collection,
|
|
60
53
|
path,
|
|
61
|
-
|
|
54
|
+
propertyConfigs: customizationController.propertyConfigs,
|
|
55
|
+
authController
|
|
62
56
|
}), [collection, path]);
|
|
63
57
|
|
|
64
58
|
const handleCancel = useCallback(() => {
|
|
@@ -181,16 +175,15 @@ export function DeleteEntityDialog<M extends Record<string, any>>({
|
|
|
181
175
|
open={open}
|
|
182
176
|
onOpenChange={(open) => !open ? onClose() : undefined}
|
|
183
177
|
>
|
|
178
|
+
<DialogTitle id="delete-dialog-title">
|
|
179
|
+
{dialogTitle}
|
|
180
|
+
</DialogTitle>
|
|
184
181
|
<DialogContent fullHeight={true}>
|
|
185
|
-
<Typography variant={"subtitle2"} className={"p-4"}>
|
|
186
|
-
{dialogTitle}
|
|
187
|
-
</Typography>
|
|
188
|
-
|
|
189
182
|
{!multipleEntities && <div className={"p-4"}>{content}</div>}
|
|
190
183
|
</DialogContent>
|
|
191
184
|
<DialogActions>
|
|
192
185
|
|
|
193
|
-
{loading && <CircularProgress size={"
|
|
186
|
+
{loading && <CircularProgress size={"smallest"}/>}
|
|
194
187
|
|
|
195
188
|
<Button onClick={handleCancel}
|
|
196
189
|
disabled={loading}
|
|
@@ -1,8 +1,20 @@
|
|
|
1
1
|
import React, { MouseEvent, useCallback } from "react";
|
|
2
2
|
|
|
3
3
|
import { CollectionSize, Entity, EntityAction, EntityCollection, SelectionController } from "../../types";
|
|
4
|
-
import {
|
|
4
|
+
import {
|
|
5
|
+
Checkbox,
|
|
6
|
+
Chip,
|
|
7
|
+
cls,
|
|
8
|
+
EditIcon,
|
|
9
|
+
IconButton,
|
|
10
|
+
Menu,
|
|
11
|
+
MenuItem,
|
|
12
|
+
MoreVertIcon,
|
|
13
|
+
Skeleton,
|
|
14
|
+
Tooltip
|
|
15
|
+
} from "@firecms/ui";
|
|
5
16
|
import { useFireCMSContext, useLargeLayout } from "../../hooks";
|
|
17
|
+
import { hasEntityInCache } from "../../util/entity_cache";
|
|
6
18
|
|
|
7
19
|
/**
|
|
8
20
|
*
|
|
@@ -14,7 +26,6 @@ import { useFireCMSContext, useLargeLayout } from "../../hooks";
|
|
|
14
26
|
* @param size
|
|
15
27
|
* @param toggleEntitySelection
|
|
16
28
|
* @param hideId
|
|
17
|
-
* @constructor
|
|
18
29
|
*
|
|
19
30
|
* @group Collection components
|
|
20
31
|
*/
|
|
@@ -33,35 +44,32 @@ export const EntityCollectionRowActions = function EntityCollectionRowActions({
|
|
|
33
44
|
actions = [],
|
|
34
45
|
hideId,
|
|
35
46
|
selectionController,
|
|
47
|
+
openEntityMode
|
|
36
48
|
}:
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
49
|
+
{
|
|
50
|
+
entity: Entity<any>,
|
|
51
|
+
collection?: EntityCollection<any>,
|
|
52
|
+
fullPath?: string,
|
|
53
|
+
width: number,
|
|
54
|
+
frozen?: boolean,
|
|
55
|
+
size: CollectionSize,
|
|
56
|
+
isSelected?: boolean,
|
|
57
|
+
selectionEnabled?: boolean,
|
|
58
|
+
actions?: EntityAction[],
|
|
59
|
+
hideId?: boolean,
|
|
60
|
+
onCollectionChange?: () => void,
|
|
61
|
+
selectionController?: SelectionController;
|
|
62
|
+
highlightEntity?: (entity: Entity<any>) => void;
|
|
63
|
+
unhighlightEntity?: (entity: Entity<any>) => void;
|
|
64
|
+
openEntityMode: "side_panel" | "full_screen";
|
|
65
|
+
}) {
|
|
53
66
|
|
|
54
67
|
const largeLayout = useLargeLayout();
|
|
55
68
|
|
|
56
69
|
const context = useFireCMSContext();
|
|
57
70
|
|
|
58
71
|
const onCheckedChange = useCallback((checked: boolean) => {
|
|
59
|
-
selectionController?.toggleEntitySelection(entity);
|
|
60
|
-
}, [entity, selectionController?.toggleEntitySelection]);
|
|
61
|
-
|
|
62
|
-
const onClick = useCallback((event: MouseEvent) => {
|
|
63
|
-
event.stopPropagation();
|
|
64
|
-
selectionController?.toggleEntitySelection(entity);
|
|
72
|
+
selectionController?.toggleEntitySelection(entity, checked);
|
|
65
73
|
}, [entity, selectionController?.toggleEntitySelection]);
|
|
66
74
|
|
|
67
75
|
const hasActions = actions.length > 0;
|
|
@@ -69,13 +77,16 @@ export const EntityCollectionRowActions = function EntityCollectionRowActions({
|
|
|
69
77
|
|
|
70
78
|
const collapsedActions = actions.filter(a => a.collapsed || a.collapsed === undefined);
|
|
71
79
|
const uncollapsedActions = actions.filter(a => a.collapsed === false);
|
|
80
|
+
const hasDraft = hasEntityInCache(fullPath + "/" + entity.id);
|
|
72
81
|
return (
|
|
73
82
|
<div
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
"h-full flex items-center justify-center flex-col bg-gray-50 dark:bg-gray-900 bg-opacity-90 dark:bg-opacity-90 z-10",
|
|
83
|
+
className={cls(
|
|
84
|
+
"h-full flex items-center justify-center flex-col bg-surface-50 dark:bg-surface-900 bg-opacity-90 dark:bg-opacity-90 z-10",
|
|
77
85
|
frozen ? "sticky left-0" : ""
|
|
78
86
|
)}
|
|
87
|
+
onClick={useCallback((event: any) => {
|
|
88
|
+
event.stopPropagation();
|
|
89
|
+
}, [])}
|
|
79
90
|
style={{
|
|
80
91
|
width,
|
|
81
92
|
position: frozen ? "sticky" : "initial",
|
|
@@ -87,7 +98,9 @@ export const EntityCollectionRowActions = function EntityCollectionRowActions({
|
|
|
87
98
|
<div className="w-34 flex justify-center">
|
|
88
99
|
|
|
89
100
|
{uncollapsedActions.map((action, index) => (
|
|
90
|
-
<Tooltip key={index}
|
|
101
|
+
<Tooltip key={index}
|
|
102
|
+
title={action.name}
|
|
103
|
+
asChild={true}>
|
|
91
104
|
<IconButton
|
|
92
105
|
onClick={(event: MouseEvent) => {
|
|
93
106
|
event.stopPropagation();
|
|
@@ -100,6 +113,7 @@ export const EntityCollectionRowActions = function EntityCollectionRowActions({
|
|
|
100
113
|
highlightEntity,
|
|
101
114
|
unhighlightEntity,
|
|
102
115
|
onCollectionChange,
|
|
116
|
+
openEntityMode: openEntityMode ?? collection?.openEntityMode
|
|
103
117
|
});
|
|
104
118
|
}}
|
|
105
119
|
size={largeLayout ? "medium" : "small"}>
|
|
@@ -128,6 +142,7 @@ export const EntityCollectionRowActions = function EntityCollectionRowActions({
|
|
|
128
142
|
highlightEntity,
|
|
129
143
|
unhighlightEntity,
|
|
130
144
|
onCollectionChange,
|
|
145
|
+
openEntityMode: openEntityMode ?? collection?.openEntityMode
|
|
131
146
|
});
|
|
132
147
|
}}>
|
|
133
148
|
{action.icon}
|
|
@@ -149,18 +164,22 @@ export const EntityCollectionRowActions = function EntityCollectionRowActions({
|
|
|
149
164
|
</div>}
|
|
150
165
|
|
|
151
166
|
{!hideId && size !== "xs" && (
|
|
152
|
-
<div
|
|
153
|
-
|
|
154
|
-
{
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
167
|
+
<div
|
|
168
|
+
className="w-[138px] overflow-hidden truncate font-mono text-xs text-text-secondary dark:text-text-secondary-dark max-w-full text-ellipsis px-2 align-center justify-center flex items-center gap-1"
|
|
169
|
+
onClick={(event) => {
|
|
170
|
+
event.stopPropagation();
|
|
171
|
+
}}>
|
|
172
|
+
{hasDraft && <Tooltip title={"Local unsaved changes"} className={"inline"}>
|
|
173
|
+
<Chip colorScheme={"orangeDarker"} className={"p-0.5"}>
|
|
174
|
+
<EditIcon size={12}/>
|
|
175
|
+
</Chip>
|
|
176
|
+
</Tooltip>}
|
|
177
|
+
<span className="min-w-0 truncate text-center">
|
|
178
|
+
{entity
|
|
179
|
+
? entity.id
|
|
180
|
+
: <Skeleton/>
|
|
181
|
+
}
|
|
182
|
+
</span>
|
|
164
183
|
</div>
|
|
165
184
|
)}
|
|
166
185
|
|
|
@@ -5,7 +5,6 @@ import { ErrorBoundary } from "../ErrorBoundary";
|
|
|
5
5
|
import { useFireCMSContext, useLargeLayout } from "../../hooks";
|
|
6
6
|
import { CellRendererParams, VirtualTableColumn } from "../VirtualTable";
|
|
7
7
|
import { getValueInPath } from "../../util";
|
|
8
|
-
import { getRowHeight } from "../VirtualTable/common";
|
|
9
8
|
import { EntityCollectionRowActions } from "./EntityCollectionRowActions";
|
|
10
9
|
import { CollectionTableToolbar } from "./internal/CollectionTableToolbar";
|
|
11
10
|
import { EntityCollectionTableProps } from "./EntityCollectionTableProps";
|
|
@@ -15,7 +14,8 @@ import { renderSkeletonText } from "../../preview";
|
|
|
15
14
|
import { propertiesToColumns } from "./column_utils";
|
|
16
15
|
import { ErrorView } from "../ErrorView";
|
|
17
16
|
import { SelectableTable } from "../SelectableTable/SelectableTable";
|
|
18
|
-
|
|
17
|
+
import { cls } from "@firecms/ui";
|
|
18
|
+
import { getRowHeight } from "../common/table_height";
|
|
19
19
|
|
|
20
20
|
/**
|
|
21
21
|
* This component is in charge of rendering a collection table with a high
|
|
@@ -34,15 +34,17 @@ import { SelectableTable } from "../SelectableTable/SelectableTable";
|
|
|
34
34
|
*
|
|
35
35
|
* The data displayed in the table is managed by a {@link EntityTableController}.
|
|
36
36
|
* You can build the default, bound to a path in the datasource, by using the hook
|
|
37
|
-
* {@link
|
|
37
|
+
* {@link useDataSourceTableController}
|
|
38
38
|
*
|
|
39
39
|
* @see EntityCollectionTableProps
|
|
40
40
|
* @see EntityCollectionView
|
|
41
41
|
* @see VirtualTable
|
|
42
42
|
* @group Components
|
|
43
43
|
*/
|
|
44
|
-
export const EntityCollectionTable = function EntityCollectionTable<M extends Record<string, any
|
|
44
|
+
export const EntityCollectionTable = function EntityCollectionTable<M extends Record<string, any> = any, USER extends User = any>
|
|
45
45
|
({
|
|
46
|
+
className,
|
|
47
|
+
style,
|
|
46
48
|
forceFilter,
|
|
47
49
|
actionsStart,
|
|
48
50
|
actions,
|
|
@@ -55,6 +57,8 @@ export const EntityCollectionTable = function EntityCollectionTable<M extends Re
|
|
|
55
57
|
highlightedEntities,
|
|
56
58
|
onEntityClick,
|
|
57
59
|
onColumnResize,
|
|
60
|
+
initialScroll,
|
|
61
|
+
onScroll,
|
|
58
62
|
onSizeChanged,
|
|
59
63
|
textSearchEnabled = false,
|
|
60
64
|
hoverRow = true,
|
|
@@ -73,23 +77,20 @@ export const EntityCollectionTable = function EntityCollectionTable<M extends Re
|
|
|
73
77
|
emptyComponent,
|
|
74
78
|
getIdColumnWidth,
|
|
75
79
|
onTextSearchClick,
|
|
76
|
-
textSearchLoading
|
|
80
|
+
textSearchLoading,
|
|
81
|
+
enablePopupIcon,
|
|
82
|
+
openEntityMode = "side_panel"
|
|
77
83
|
}: EntityCollectionTableProps<M>) {
|
|
78
84
|
|
|
79
85
|
const ref = useRef<HTMLDivElement>(null);
|
|
80
86
|
|
|
81
87
|
const largeLayout = useLargeLayout();
|
|
82
|
-
const disabledFilterChange = Boolean(forceFilter);
|
|
83
88
|
const selectedEntities = (selectionController?.selectedEntities?.length > 0 ? selectionController?.selectedEntities : highlightedEntities)?.filter(Boolean);
|
|
84
89
|
|
|
85
|
-
const context: FireCMSContext<
|
|
90
|
+
const context: FireCMSContext<USER> = useFireCMSContext();
|
|
86
91
|
|
|
87
92
|
const [size, setSize] = React.useState<CollectionSize>(defaultSize ?? "m");
|
|
88
93
|
|
|
89
|
-
const selectedEntityIds = selectedEntities?.map(e => e.id);
|
|
90
|
-
|
|
91
|
-
const filterIsSet = !!tableController.filterValues && Object.keys(tableController.filterValues).length > 0;
|
|
92
|
-
|
|
93
94
|
const updateSize = useCallback((size: CollectionSize) => {
|
|
94
95
|
if (onSizeChanged)
|
|
95
96
|
onSizeChanged(size);
|
|
@@ -98,12 +99,12 @@ export const EntityCollectionTable = function EntityCollectionTable<M extends Re
|
|
|
98
99
|
|
|
99
100
|
const onTextSearch = useCallback((newSearchString?: string) => tableController.setSearchString?.(newSearchString), []);
|
|
100
101
|
|
|
101
|
-
const additionalFieldsMap: Record<string, AdditionalFieldDelegate<M,
|
|
102
|
+
const additionalFieldsMap: Record<string, AdditionalFieldDelegate<M, USER>> = useMemo(() => {
|
|
102
103
|
return (additionalFields
|
|
103
104
|
? additionalFields
|
|
104
105
|
.map((aC) => ({ [aC.key]: aC as AdditionalFieldDelegate<M, any> }))
|
|
105
106
|
.reduce((a, b) => ({ ...a, ...b }), {})
|
|
106
|
-
: {}) as Record<string, AdditionalFieldDelegate<M,
|
|
107
|
+
: {}) as Record<string, AdditionalFieldDelegate<M, USER>>;
|
|
107
108
|
}, [additionalFields]);
|
|
108
109
|
|
|
109
110
|
const customFieldValidator: CustomFieldValidator | undefined = uniqueFieldValidator;
|
|
@@ -120,10 +121,8 @@ export const EntityCollectionTable = function EntityCollectionTable<M extends Re
|
|
|
120
121
|
const propertyKey = column.key;
|
|
121
122
|
|
|
122
123
|
let disabled = column.custom?.disabled;
|
|
123
|
-
const propertyValue = entity.values ? getValueInPath(entity.values, propertyKey) : undefined;
|
|
124
124
|
const property = getPropertyFor?.({
|
|
125
125
|
propertyKey,
|
|
126
|
-
propertyValue,
|
|
127
126
|
entity
|
|
128
127
|
}) ?? column.custom.resolvedProperty;
|
|
129
128
|
if (!property?.disabled) {
|
|
@@ -150,6 +149,7 @@ export const EntityCollectionTable = function EntityCollectionTable<M extends Re
|
|
|
150
149
|
height={getRowHeight(size)}
|
|
151
150
|
entity={entity}
|
|
152
151
|
disabled={disabled}
|
|
152
|
+
enablePopupIcon={enablePopupIcon}
|
|
153
153
|
path={entity.path}/>
|
|
154
154
|
: renderSkeletonText()
|
|
155
155
|
}
|
|
@@ -177,9 +177,14 @@ export const EntityCollectionTable = function EntityCollectionTable<M extends Re
|
|
|
177
177
|
throw new Error("When using additional fields you need to provide a Builder or a value");
|
|
178
178
|
}
|
|
179
179
|
|
|
180
|
-
const child = Builder
|
|
180
|
+
const child: React.ReactNode = Builder
|
|
181
181
|
? <Builder entity={entity} context={context}/>
|
|
182
|
-
: <>
|
|
182
|
+
: <>
|
|
183
|
+
{additionalField.value?.({
|
|
184
|
+
entity,
|
|
185
|
+
context
|
|
186
|
+
})?.toString()}
|
|
187
|
+
</>;
|
|
183
188
|
|
|
184
189
|
return (
|
|
185
190
|
<EntityTableCell
|
|
@@ -200,14 +205,13 @@ export const EntityCollectionTable = function EntityCollectionTable<M extends Re
|
|
|
200
205
|
</EntityTableCell>
|
|
201
206
|
);
|
|
202
207
|
|
|
203
|
-
}, [size
|
|
208
|
+
}, [size]);
|
|
204
209
|
|
|
205
210
|
const collectionColumns: VirtualTableColumn[] = (() => {
|
|
206
211
|
const columnsResult: VirtualTableColumn[] = propertiesToColumns({
|
|
207
212
|
properties,
|
|
208
213
|
sortable,
|
|
209
214
|
forceFilter,
|
|
210
|
-
disabledFilter: disabledFilterChange,
|
|
211
215
|
AdditionalHeaderWidget
|
|
212
216
|
});
|
|
213
217
|
|
|
@@ -237,13 +241,15 @@ export const EntityCollectionTable = function EntityCollectionTable<M extends Re
|
|
|
237
241
|
|
|
238
242
|
const columns: VirtualTableColumn[] = [
|
|
239
243
|
idColumn,
|
|
240
|
-
...displayedColumnIds
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
+
...(displayedColumnIds
|
|
245
|
+
? displayedColumnIds
|
|
246
|
+
.map((p) => {
|
|
247
|
+
return collectionColumns.find(c => c.key === p.key);
|
|
248
|
+
}).filter(Boolean)
|
|
249
|
+
: collectionColumns) as VirtualTableColumn[]
|
|
244
250
|
];
|
|
245
251
|
|
|
246
|
-
const cellRenderer = (props: CellRendererParams<any>) => {
|
|
252
|
+
const cellRenderer = useCallback((props: CellRendererParams<any>) => {
|
|
247
253
|
const column = props.column;
|
|
248
254
|
const columns = props.columns;
|
|
249
255
|
const columnKey = column.key;
|
|
@@ -262,7 +268,8 @@ export const EntityCollectionTable = function EntityCollectionTable<M extends Re
|
|
|
262
268
|
width={column.width}
|
|
263
269
|
frozen={column.frozen}
|
|
264
270
|
isSelected={false}
|
|
265
|
-
size={size}
|
|
271
|
+
size={size}
|
|
272
|
+
openEntityMode={openEntityMode}/>;
|
|
266
273
|
} else if (additionalFieldsMap[columnKey]) {
|
|
267
274
|
return additionalCellRenderer(props);
|
|
268
275
|
} else if (props.columnIndex < columns.length + 1) {
|
|
@@ -283,20 +290,18 @@ export const EntityCollectionTable = function EntityCollectionTable<M extends Re
|
|
|
283
290
|
<ErrorView error={e}/>
|
|
284
291
|
</EntityTableCell>;
|
|
285
292
|
}
|
|
286
|
-
}
|
|
293
|
+
}, [tableRowActionsBuilder, additionalCellRenderer, propertyCellRenderer, size]);
|
|
287
294
|
|
|
288
295
|
return (
|
|
289
296
|
|
|
290
297
|
<div ref={ref}
|
|
291
|
-
|
|
298
|
+
style={style}
|
|
299
|
+
className={cls("h-full w-full flex flex-col bg-white dark:bg-surface-950", className)}>
|
|
292
300
|
|
|
293
301
|
<CollectionTableToolbar
|
|
294
|
-
forceFilter={disabledFilterChange}
|
|
295
|
-
filterIsSet={filterIsSet}
|
|
296
302
|
onTextSearch={textSearchEnabled ? onTextSearch : undefined}
|
|
297
303
|
textSearchLoading={textSearchLoading}
|
|
298
304
|
onTextSearchClick={textSearchEnabled ? onTextSearchClick : undefined}
|
|
299
|
-
clearFilter={tableController.clearFilter}
|
|
300
305
|
size={size}
|
|
301
306
|
onSizeChanged={updateSize}
|
|
302
307
|
title={title}
|
|
@@ -309,9 +314,11 @@ export const EntityCollectionTable = function EntityCollectionTable<M extends Re
|
|
|
309
314
|
inlineEditing={inlineEditing}
|
|
310
315
|
cellRenderer={cellRenderer}
|
|
311
316
|
onEntityClick={onEntityClick}
|
|
312
|
-
highlightedRow={
|
|
317
|
+
highlightedRow={(entity: Entity<M>) => Boolean(selectedEntities?.find(e => e.id === entity.id && e.path === entity.path))}
|
|
313
318
|
tableController={tableController}
|
|
314
319
|
onValueChange={onValueChange}
|
|
320
|
+
initialScroll={initialScroll}
|
|
321
|
+
onScroll={onScroll}
|
|
315
322
|
onColumnResize={onColumnResize}
|
|
316
323
|
hoverRow={hoverRow}
|
|
317
324
|
filterable={filterable}
|
|
@@ -2,7 +2,7 @@ import React from "react";
|
|
|
2
2
|
import {
|
|
3
3
|
AdditionalFieldDelegate,
|
|
4
4
|
CollectionSize,
|
|
5
|
-
Entity,
|
|
5
|
+
Entity,
|
|
6
6
|
EntityTableController,
|
|
7
7
|
FilterValues,
|
|
8
8
|
ResolvedProperties,
|
|
@@ -12,12 +12,15 @@ import {
|
|
|
12
12
|
} from "../../types";
|
|
13
13
|
import { OnCellValueChange, OnColumnResizeParams, UniqueFieldValidator } from "../common/types";
|
|
14
14
|
|
|
15
|
-
|
|
16
15
|
/**
|
|
17
16
|
* @group Collection components
|
|
18
17
|
*/
|
|
19
18
|
export type EntityCollectionTableProps<M extends Record<string, any>,
|
|
20
|
-
|
|
19
|
+
USER extends User = User> = {
|
|
20
|
+
|
|
21
|
+
className?: string;
|
|
22
|
+
|
|
23
|
+
style?: React.CSSProperties;
|
|
21
24
|
|
|
22
25
|
/**
|
|
23
26
|
* Display these entities as selected
|
|
@@ -69,6 +72,21 @@ export type EntityCollectionTableProps<M extends Record<string, any>,
|
|
|
69
72
|
*/
|
|
70
73
|
onColumnResize?(params: OnColumnResizeParams): void;
|
|
71
74
|
|
|
75
|
+
/**
|
|
76
|
+
* Initial scroll position
|
|
77
|
+
*/
|
|
78
|
+
initialScroll?: number;
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Callback when the table is scrolled
|
|
82
|
+
* @param props
|
|
83
|
+
*/
|
|
84
|
+
onScroll?: (props: {
|
|
85
|
+
scrollDirection: "forward" | "backward",
|
|
86
|
+
scrollOffset: number,
|
|
87
|
+
scrollUpdateWasRequested: boolean
|
|
88
|
+
}) => void;
|
|
89
|
+
|
|
72
90
|
/**
|
|
73
91
|
* Callback when the selected size of the table is changed
|
|
74
92
|
*/
|
|
@@ -87,12 +105,12 @@ export type EntityCollectionTableProps<M extends Record<string, any>,
|
|
|
87
105
|
|
|
88
106
|
/**
|
|
89
107
|
* Controller holding the logic for the table
|
|
90
|
-
* {@link
|
|
108
|
+
* {@link useDataSourceTableController}
|
|
91
109
|
* {@link EntityTableController}
|
|
92
110
|
*/
|
|
93
111
|
tableController: EntityTableController<M>;
|
|
94
112
|
|
|
95
|
-
displayedColumnIds
|
|
113
|
+
displayedColumnIds?: PropertyColumnConfig[];
|
|
96
114
|
|
|
97
115
|
forceFilter?: FilterValues<Extract<keyof M, string>>;
|
|
98
116
|
|
|
@@ -100,7 +118,7 @@ export type EntityCollectionTableProps<M extends Record<string, any>,
|
|
|
100
118
|
|
|
101
119
|
inlineEditing?: boolean;
|
|
102
120
|
|
|
103
|
-
additionalFields?: AdditionalFieldDelegate<M,
|
|
121
|
+
additionalFields?: AdditionalFieldDelegate<M, USER>[];
|
|
104
122
|
|
|
105
123
|
defaultSize?: CollectionSize;
|
|
106
124
|
|
|
@@ -131,15 +149,18 @@ export type EntityCollectionTableProps<M extends Record<string, any>,
|
|
|
131
149
|
onTextSearchClick?: () => void;
|
|
132
150
|
|
|
133
151
|
textSearchLoading?: boolean;
|
|
134
|
-
|
|
152
|
+
|
|
153
|
+
enablePopupIcon: boolean;
|
|
154
|
+
|
|
155
|
+
openEntityMode?: "side_panel" | "full_screen";
|
|
156
|
+
};
|
|
135
157
|
|
|
136
158
|
export type GetPropertyForProps<M extends Record<string, any>> = {
|
|
137
159
|
propertyKey: string,
|
|
138
|
-
propertyValue: any,
|
|
139
160
|
entity: Entity<M>
|
|
140
161
|
};
|
|
141
162
|
|
|
142
163
|
export type PropertyColumnConfig = {
|
|
143
164
|
key: string,
|
|
144
|
-
disabled
|
|
165
|
+
disabled?: boolean,
|
|
145
166
|
};
|