@firecms/core 3.0.0-canary.21 → 3.0.0-canary.211
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/dist/app/AppBar.d.ts +12 -0
- package/dist/app/Drawer.d.ts +16 -0
- package/dist/app/Scaffold.d.ts +34 -0
- package/dist/app/index.d.ts +4 -0
- package/dist/app/useApp.d.ts +16 -0
- package/dist/components/ArrayContainer.d.ts +23 -6
- package/dist/components/CircularProgressCenter.d.ts +1 -1
- package/dist/components/ClearFilterSortButton.d.ts +5 -0
- package/dist/components/{DeleteConfirmationDialog.d.ts → ConfirmationDialog.d.ts} +1 -1
- package/dist/components/EntityCollectionTable/EntityCollectionRowActions.d.ts +13 -13
- package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +2 -2
- package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +22 -6
- package/dist/components/EntityCollectionTable/PropertyTableCell.d.ts +1 -0
- package/dist/components/EntityCollectionTable/column_utils.d.ts +1 -2
- package/dist/components/EntityCollectionTable/fields/TableReferenceField.d.ts +3 -1
- package/dist/components/EntityCollectionTable/index.d.ts +1 -1
- package/dist/components/EntityCollectionTable/internal/CollectionTableToolbar.d.ts +1 -4
- package/dist/components/EntityCollectionTable/internal/EntityTableCell.d.ts +2 -2
- package/dist/components/EntityCollectionTable/internal/popup_field/PopupFormField.d.ts +7 -4
- package/dist/components/EntityCollectionView/EntityCollectionView.d.ts +16 -2
- package/dist/components/EntityCollectionView/EntityCollectionViewStartActions.d.ts +11 -0
- package/dist/components/EntityCollectionView/utils.d.ts +3 -0
- package/dist/components/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 +35 -11
- package/dist/core/EntityEditViewFormActions.d.ts +2 -0
- package/dist/core/FireCMS.d.ts +3 -3
- package/dist/core/FireCMSRouter.d.ts +4 -0
- package/dist/core/NavigationRoutes.d.ts +2 -3
- package/dist/core/SideDialogs.d.ts +4 -2
- package/dist/core/index.d.ts +4 -4
- package/dist/form/EntityForm.d.ts +37 -69
- package/dist/form/EntityFormActions.d.ts +17 -0
- package/dist/form/PropertyFieldBinding.d.ts +1 -1
- package/dist/form/components/ErrorFocus.d.ts +1 -1
- package/dist/form/components/FieldHelperText.d.ts +3 -3
- package/dist/form/components/FormEntry.d.ts +6 -0
- package/dist/form/components/FormLayout.d.ts +5 -0
- package/dist/form/components/LabelWithIcon.d.ts +1 -1
- package/dist/form/components/LabelWithIconAndTooltip.d.ts +15 -0
- package/dist/form/components/StorageItemPreview.d.ts +4 -4
- package/dist/form/components/index.d.ts +3 -1
- package/dist/form/field_bindings/ArrayCustomShapedFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/ArrayOfReferencesFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/BlockFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/KeyValueFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/MapFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/MarkdownEditorFieldBinding.d.ts +11 -0
- package/dist/form/field_bindings/{MultiSelectBinding.d.ts → MultiSelectFieldBinding.d.ts} +1 -1
- package/dist/form/field_bindings/ReadOnlyFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/ReferenceFieldBinding.d.ts +2 -2
- package/dist/form/field_bindings/RepeatFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/SelectFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +3 -5
- package/dist/form/field_bindings/SwitchFieldBinding.d.ts +1 -2
- package/dist/form/field_bindings/TextFieldBinding.d.ts +1 -1
- package/dist/form/index.d.ts +16 -18
- package/dist/form/useClearRestoreValue.d.ts +2 -2
- package/dist/hooks/data/delete.d.ts +4 -4
- package/dist/hooks/data/save.d.ts +4 -5
- package/dist/hooks/data/useCollectionFetch.d.ts +1 -1
- package/dist/hooks/data/useEntityFetch.d.ts +4 -3
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/useAuthController.d.ts +1 -1
- package/dist/hooks/useBreadcrumbsController.d.ts +26 -0
- package/dist/hooks/useBuildNavigationController.d.ts +7 -5
- package/dist/hooks/useFireCMSContext.d.ts +1 -1
- package/dist/hooks/useModeController.d.ts +1 -2
- package/dist/hooks/useProjectLog.d.ts +8 -2
- package/dist/hooks/useResolvedNavigationFrom.d.ts +3 -3
- package/dist/hooks/useValidateAuthenticator.d.ts +4 -8
- package/dist/index.d.ts +1 -0
- package/dist/index.es.js +21921 -14330
- package/dist/index.es.js.map +1 -1
- package/dist/index.umd.js +24271 -588
- package/dist/index.umd.js.map +1 -1
- package/dist/internal/useBuildDataSource.d.ts +1 -16
- package/dist/internal/useBuildSideEntityController.d.ts +2 -2
- package/dist/internal/useUnsavedChangesDialog.d.ts +7 -9
- package/dist/preview/PropertyPreviewProps.d.ts +6 -1
- package/dist/preview/components/EnumValuesChip.d.ts +1 -1
- package/dist/preview/components/ReferencePreview.d.ts +3 -2
- package/dist/preview/components/StorageThumbnail.d.ts +2 -1
- package/dist/preview/components/UrlComponentPreview.d.ts +2 -1
- package/dist/preview/util.d.ts +3 -3
- package/dist/routes/CustomCMSRoute.d.ts +4 -0
- package/dist/routes/FireCMSRoute.d.ts +1 -0
- package/dist/routes/HomePageRoute.d.ts +3 -0
- package/dist/types/auth.d.ts +8 -10
- package/dist/types/collections.d.ts +77 -22
- package/dist/types/datasource.d.ts +52 -36
- package/dist/types/dialogs_controller.d.ts +7 -3
- package/dist/types/entities.d.ts +7 -2
- package/dist/types/entity_actions.d.ts +28 -4
- package/dist/types/entity_callbacks.d.ts +16 -16
- package/dist/types/entity_overrides.d.ts +2 -2
- package/dist/types/export_import.d.ts +4 -4
- package/dist/types/fields.d.ts +71 -42
- package/dist/types/firecms.d.ts +6 -2
- package/dist/types/firecms_context.d.ts +1 -1
- package/dist/types/index.d.ts +0 -1
- package/dist/types/navigation.d.ts +32 -14
- package/dist/types/permissions.d.ts +4 -4
- package/dist/types/plugins.d.ts +23 -12
- package/dist/types/properties.d.ts +52 -24
- package/dist/types/property_config.d.ts +0 -2
- package/dist/types/side_dialogs_controller.d.ts +10 -0
- package/dist/types/side_entity_controller.d.ts +6 -1
- package/dist/types/storage.d.ts +86 -3
- package/dist/types/user.d.ts +1 -0
- package/dist/util/builders.d.ts +3 -3
- package/dist/util/entities.d.ts +3 -3
- package/dist/util/entity_actions.d.ts +2 -0
- package/dist/util/entity_cache.d.ts +23 -0
- package/dist/util/icon_list.d.ts +5 -1
- package/dist/util/icon_synonyms.d.ts +1 -98
- package/dist/util/icons.d.ts +6 -3
- package/dist/util/index.d.ts +2 -0
- package/dist/util/navigation_from_path.d.ts +6 -1
- package/dist/util/navigation_utils.d.ts +14 -3
- package/dist/util/objects.d.ts +2 -1
- package/dist/util/permissions.d.ts +4 -4
- package/dist/util/plurals.d.ts +0 -2
- package/dist/util/property_utils.d.ts +3 -3
- package/dist/util/resolutions.d.ts +36 -17
- package/dist/util/storage.d.ts +23 -2
- package/dist/util/useStorageUploadController.d.ts +3 -3
- package/package.json +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 +127 -41
- package/src/components/CircularProgressCenter.tsx +2 -2
- package/src/components/ClearFilterSortButton.tsx +41 -0
- package/src/components/{DeleteConfirmationDialog.tsx → ConfirmationDialog.tsx} +3 -3
- package/src/components/DeleteEntityDialog.tsx +10 -19
- package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +54 -37
- package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +38 -31
- package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +30 -9
- package/src/components/EntityCollectionTable/PropertyTableCell.tsx +47 -39
- package/src/components/EntityCollectionTable/column_utils.tsx +3 -3
- package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +30 -16
- package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +19 -17
- package/src/components/EntityCollectionTable/index.tsx +1 -1
- package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +31 -36
- package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +36 -34
- package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +20 -8
- package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +81 -80
- package/src/components/EntityCollectionView/EntityCollectionView.tsx +207 -113
- package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +4 -2
- package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +68 -0
- package/src/components/EntityCollectionView/useSelectionController.tsx +20 -7
- package/src/components/EntityCollectionView/utils.ts +19 -0
- package/src/components/EntityJsonPreview.tsx +66 -0
- package/src/components/EntityPreview.tsx +62 -52
- package/src/components/EntityView.tsx +10 -10
- package/src/components/ErrorView.tsx +4 -4
- package/src/components/HomePage/DefaultHomePage.tsx +26 -19
- package/src/components/HomePage/FavouritesView.tsx +6 -11
- package/src/components/HomePage/NavigationCard.tsx +3 -3
- package/src/components/HomePage/NavigationCardBinding.tsx +5 -10
- package/src/components/HomePage/NavigationGroup.tsx +2 -2
- package/src/components/HomePage/SmallNavigationCard.tsx +5 -6
- package/src/components/NotFoundPage.tsx +2 -2
- package/src/components/PropertyConfigBadge.tsx +9 -3
- package/src/components/PropertyIdCopyTooltip.tsx +47 -0
- package/src/components/ReferenceTable/ReferenceSelectionTable.tsx +19 -13
- package/src/components/ReferenceWidget.tsx +21 -11
- package/src/components/SearchIconsView.tsx +10 -7
- package/src/components/SelectableTable/SelectableTable.tsx +27 -12
- package/src/components/SelectableTable/filters/BooleanFilterField.tsx +2 -3
- package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +25 -8
- package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +36 -12
- package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +92 -23
- package/src/components/UnsavedChangesDialog.tsx +42 -0
- package/src/components/VirtualTable/VirtualTable.tsx +96 -48
- package/src/components/VirtualTable/VirtualTableCell.tsx +1 -9
- package/src/components/VirtualTable/VirtualTableHeader.tsx +10 -10
- package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +2 -2
- package/src/components/VirtualTable/VirtualTableProps.tsx +33 -14
- package/src/components/VirtualTable/VirtualTableRow.tsx +5 -6
- package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +5 -5
- package/src/components/VirtualTable/fields/VirtualTableInput.tsx +3 -2
- package/src/components/VirtualTable/fields/VirtualTableNumberInput.tsx +2 -1
- package/src/components/VirtualTable/fields/VirtualTableSelect.tsx +16 -28
- package/src/components/VirtualTable/types.tsx +2 -3
- package/src/components/{EntityCollectionTable/internal → common}/default_entity_actions.tsx +33 -40
- package/src/components/common/index.ts +2 -1
- package/src/components/{VirtualTable/common.tsx → common/table_height.tsx} +5 -2
- package/src/components/common/types.tsx +4 -6
- package/src/components/common/useColumnsIds.tsx +24 -3
- package/src/components/common/useDataSourceTableController.tsx +420 -0
- package/src/components/common/useDebouncedCallback.tsx +20 -0
- package/src/components/common/useScrollRestoration.tsx +68 -0
- package/src/components/common/useTableSearchHelper.ts +53 -12
- package/src/components/index.tsx +4 -2
- package/src/contexts/BreacrumbsContext.tsx +38 -0
- package/src/contexts/DialogsProvider.tsx +5 -4
- package/src/contexts/ModeController.tsx +1 -3
- package/src/contexts/SnackbarProvider.tsx +2 -0
- package/src/core/DefaultAppBar.tsx +219 -0
- package/src/core/DefaultDrawer.tsx +185 -0
- package/src/core/DrawerNavigationItem.tsx +66 -0
- package/src/core/EntityEditView.tsx +345 -480
- package/src/core/EntityEditViewFormActions.tsx +199 -0
- package/src/core/EntitySidePanel.tsx +86 -17
- package/src/core/FireCMS.tsx +56 -49
- package/src/core/FireCMSRouter.tsx +17 -0
- package/src/core/NavigationRoutes.tsx +28 -38
- package/src/core/SideDialogs.tsx +22 -12
- package/src/core/field_configs.tsx +11 -12
- package/src/core/index.tsx +6 -5
- package/src/form/EntityForm.tsx +585 -539
- package/src/form/EntityFormActions.tsx +169 -0
- package/src/form/PropertyFieldBinding.tsx +85 -44
- package/src/form/components/CustomIdField.tsx +6 -2
- package/src/form/components/FieldHelperText.tsx +4 -4
- package/src/form/components/FormEntry.tsx +22 -0
- package/src/form/components/FormLayout.tsx +16 -0
- package/src/form/components/LabelWithIcon.tsx +30 -19
- package/src/form/components/LabelWithIconAndTooltip.tsx +28 -0
- package/src/form/components/StorageItemPreview.tsx +22 -12
- package/src/form/components/StorageUploadProgress.tsx +4 -5
- package/src/form/components/index.tsx +3 -1
- package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +31 -19
- package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +47 -35
- package/src/form/field_bindings/BlockFieldBinding.tsx +56 -34
- package/src/form/field_bindings/DateTimeFieldBinding.tsx +18 -14
- package/src/form/field_bindings/KeyValueFieldBinding.tsx +60 -51
- package/src/form/field_bindings/MapFieldBinding.tsx +71 -54
- package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +153 -0
- package/src/form/field_bindings/{MultiSelectBinding.tsx → MultiSelectFieldBinding.tsx} +25 -20
- package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +11 -16
- package/src/form/field_bindings/ReferenceFieldBinding.tsx +42 -31
- package/src/form/field_bindings/RepeatFieldBinding.tsx +56 -35
- package/src/form/field_bindings/SelectFieldBinding.tsx +22 -14
- package/src/form/field_bindings/StorageUploadFieldBinding.tsx +42 -50
- package/src/form/field_bindings/SwitchFieldBinding.tsx +29 -24
- package/src/form/field_bindings/TextFieldBinding.tsx +28 -24
- package/src/form/index.tsx +16 -37
- package/src/form/useClearRestoreValue.tsx +2 -2
- package/src/form/validation.ts +13 -23
- package/src/hooks/data/delete.ts +6 -5
- package/src/hooks/data/save.ts +13 -9
- package/src/hooks/data/useCollectionFetch.tsx +3 -3
- package/src/hooks/data/useDataSource.tsx +11 -3
- package/src/hooks/data/useEntityFetch.tsx +10 -6
- package/src/hooks/index.tsx +1 -0
- package/src/hooks/useAuthController.tsx +1 -1
- package/src/hooks/useBreadcrumbsController.tsx +31 -0
- package/src/hooks/useBuildLocalConfigurationPersistence.tsx +8 -10
- package/src/hooks/useBuildModeController.tsx +22 -29
- package/src/hooks/useBuildNavigationController.tsx +159 -54
- package/src/hooks/useFireCMSContext.tsx +5 -5
- package/src/hooks/useLargeLayout.tsx +0 -35
- package/src/hooks/useModeController.tsx +1 -2
- package/src/hooks/useProjectLog.tsx +32 -10
- package/src/hooks/useResolvedNavigationFrom.tsx +10 -12
- package/src/hooks/useValidateAuthenticator.tsx +17 -37
- package/src/index.ts +1 -0
- package/src/internal/useBuildDataSource.ts +72 -82
- package/src/internal/useBuildSideDialogsController.tsx +4 -2
- package/src/internal/useBuildSideEntityController.tsx +194 -73
- package/src/internal/useUnsavedChangesDialog.tsx +127 -91
- package/src/preview/PropertyPreview.tsx +17 -24
- package/src/preview/PropertyPreviewProps.tsx +7 -1
- package/src/preview/components/BooleanPreview.tsx +2 -2
- package/src/preview/components/EmptyValue.tsx +1 -1
- package/src/preview/components/EnumValuesChip.tsx +2 -2
- package/src/preview/components/ImagePreview.tsx +25 -36
- package/src/preview/components/ReferencePreview.tsx +22 -33
- package/src/preview/components/StorageThumbnail.tsx +5 -1
- package/src/preview/components/UrlComponentPreview.tsx +60 -28
- package/src/preview/property_previews/ArrayOfMapsPreview.tsx +2 -3
- package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +4 -3
- package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +2 -3
- package/src/preview/property_previews/ArrayOfStringsPreview.tsx +1 -2
- package/src/preview/property_previews/ArrayOneOfPreview.tsx +4 -5
- package/src/preview/property_previews/ArrayPropertyPreview.tsx +4 -5
- package/src/preview/property_previews/MapPropertyPreview.tsx +12 -11
- package/src/preview/property_previews/SkeletonPropertyComponent.tsx +12 -12
- package/src/preview/property_previews/StringPropertyPreview.tsx +3 -3
- package/src/preview/util.ts +10 -10
- package/src/routes/CustomCMSRoute.tsx +21 -0
- package/src/routes/FireCMSRoute.tsx +235 -0
- package/src/routes/HomePageRoute.tsx +17 -0
- package/src/types/auth.tsx +9 -13
- package/src/types/collections.ts +94 -27
- package/src/types/customization_controller.tsx +0 -1
- package/src/types/datasource.ts +61 -43
- package/src/types/dialogs_controller.tsx +7 -3
- package/src/types/entities.ts +12 -2
- package/src/types/entity_actions.tsx +32 -7
- package/src/types/entity_callbacks.ts +18 -18
- package/src/types/entity_overrides.tsx +2 -2
- package/src/types/export_import.ts +4 -4
- package/src/types/fields.tsx +81 -46
- package/src/types/firecms.tsx +7 -2
- package/src/types/firecms_context.tsx +1 -1
- package/src/types/index.ts +0 -1
- package/src/types/navigation.ts +38 -18
- package/src/types/permissions.ts +5 -5
- package/src/types/plugins.tsx +25 -14
- package/src/types/properties.ts +60 -25
- package/src/types/property_config.tsx +0 -2
- package/src/types/side_dialogs_controller.tsx +15 -0
- package/src/types/side_entity_controller.tsx +6 -1
- package/src/types/storage.ts +94 -3
- package/src/types/user.ts +2 -0
- package/src/util/builders.ts +10 -8
- package/src/util/entities.ts +9 -6
- package/src/util/entity_actions.ts +28 -0
- package/src/util/entity_cache.ts +204 -0
- package/src/util/enums.ts +1 -1
- package/src/util/icon_list.ts +16 -10
- package/src/util/icon_synonyms.ts +3 -100
- package/src/util/icons.tsx +17 -7
- package/src/util/index.ts +2 -0
- package/src/util/join_collections.ts +3 -0
- package/src/util/make_properties_editable.ts +13 -5
- package/src/util/navigation_from_path.ts +13 -6
- package/src/util/navigation_utils.ts +59 -7
- package/src/util/objects.ts +48 -28
- package/src/util/parent_references_from_path.ts +3 -3
- package/src/util/permissions.ts +9 -8
- package/src/util/plurals.ts +0 -2
- package/src/util/property_utils.tsx +11 -4
- package/src/util/references.ts +11 -2
- package/src/util/resolutions.ts +100 -46
- package/src/util/storage.ts +79 -21
- package/src/util/strings.ts +2 -2
- package/src/util/useStorageUploadController.tsx +71 -27
- package/dist/components/FireCMSAppBar.d.ts +0 -26
- package/dist/components/PropertyIdCopyTooltipContent.d.ts +0 -3
- package/dist/components/VirtualTable/common.d.ts +0 -2
- package/dist/core/Drawer.d.ts +0 -23
- package/dist/core/Scaffold.d.ts +0 -55
- package/dist/core/SideEntityView.d.ts +0 -7
- package/dist/form/components/FormikArrayContainer.d.ts +0 -18
- package/dist/form/field_bindings/MarkdownFieldBinding.d.ts +0 -9
- package/dist/internal/useBuildCustomizationController.d.ts +0 -2
- package/dist/internal/useLocaleConfig.d.ts +0 -1
- package/dist/types/appcheck.d.ts +0 -26
- package/src/components/FireCMSAppBar.tsx +0 -165
- package/src/components/PropertyIdCopyTooltipContent.tsx +0 -28
- package/src/components/common/useDataSourceEntityCollectionTableController.tsx +0 -225
- package/src/core/Drawer.tsx +0 -191
- package/src/core/Scaffold.tsx +0 -281
- package/src/core/SideEntityView.tsx +0 -38
- package/src/form/components/FormikArrayContainer.tsx +0 -44
- package/src/form/field_bindings/MarkdownFieldBinding.tsx +0 -695
- package/src/internal/useBuildCustomizationController.tsx +0 -5
- package/src/internal/useLocaleConfig.tsx +0 -18
- package/src/types/appcheck.ts +0 -29
- /package/src/util/{common.tsx → common.ts} +0 -0
|
@@ -6,9 +6,12 @@ import { getHashValue } from "../util";
|
|
|
6
6
|
import {
|
|
7
7
|
AddIcon,
|
|
8
8
|
Button,
|
|
9
|
+
cls,
|
|
9
10
|
ContentCopyIcon,
|
|
10
|
-
|
|
11
|
+
HandleIcon,
|
|
11
12
|
IconButton,
|
|
13
|
+
KeyboardArrowDownIcon,
|
|
14
|
+
KeyboardArrowUpIcon,
|
|
12
15
|
Menu,
|
|
13
16
|
MenuItem,
|
|
14
17
|
RemoveIcon,
|
|
@@ -16,17 +19,30 @@ import {
|
|
|
16
19
|
useOutsideAlerter
|
|
17
20
|
} from "@firecms/ui";
|
|
18
21
|
|
|
19
|
-
|
|
22
|
+
export type ArrayEntryParams = {
|
|
23
|
+
index: number,
|
|
24
|
+
internalId: number,
|
|
25
|
+
isDragging: boolean,
|
|
26
|
+
storedProps?: object,
|
|
27
|
+
storeProps: (props: object) => void
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
export type ArrayEntryBuilder = (params: ArrayEntryParams) => React.ReactNode;
|
|
31
|
+
|
|
32
|
+
export interface ArrayContainerProps<T> {
|
|
20
33
|
droppableId: string;
|
|
21
34
|
value: T[];
|
|
22
35
|
addLabel: string;
|
|
23
|
-
buildEntry:
|
|
36
|
+
buildEntry: ArrayEntryBuilder;
|
|
24
37
|
disabled?: boolean;
|
|
25
38
|
size?: "small" | "medium";
|
|
26
39
|
onInternalIdAdded?: (id: number) => void;
|
|
27
40
|
includeAddButton?: boolean;
|
|
28
41
|
newDefaultEntry: T;
|
|
29
|
-
onValueChange: (value: T[]) => void
|
|
42
|
+
onValueChange: (value: T[]) => void,
|
|
43
|
+
className?: string;
|
|
44
|
+
min?: number;
|
|
45
|
+
max?: number;
|
|
30
46
|
}
|
|
31
47
|
|
|
32
48
|
const buildIdsMap = (value: any[]) =>
|
|
@@ -52,7 +68,10 @@ export function ArrayContainer<T>({
|
|
|
52
68
|
onInternalIdAdded,
|
|
53
69
|
includeAddButton,
|
|
54
70
|
newDefaultEntry,
|
|
55
|
-
onValueChange
|
|
71
|
+
onValueChange,
|
|
72
|
+
className,
|
|
73
|
+
min = 0,
|
|
74
|
+
max = Infinity
|
|
56
75
|
}: ArrayContainerProps<T>) {
|
|
57
76
|
|
|
58
77
|
const hasValue = value && Array.isArray(value) && value.length > 0;
|
|
@@ -63,7 +82,14 @@ export function ArrayContainer<T>({
|
|
|
63
82
|
const [internalIds, setInternalIds] = useState<number[]>(
|
|
64
83
|
hasValue
|
|
65
84
|
? Object.values(internalIdsRef.current)
|
|
66
|
-
: []
|
|
85
|
+
: []
|
|
86
|
+
);
|
|
87
|
+
|
|
88
|
+
const itemCustomPropsRef = useRef<Record<number, object>>({});
|
|
89
|
+
|
|
90
|
+
const updateItemCustomProps = useCallback((internalId: number, customProps: object) => {
|
|
91
|
+
itemCustomPropsRef.current[internalId] = customProps;
|
|
92
|
+
}, []);
|
|
67
93
|
|
|
68
94
|
useEffect(() => {
|
|
69
95
|
if (hasValue && value && value.length !== internalIds.length) {
|
|
@@ -83,7 +109,7 @@ export function ArrayContainer<T>({
|
|
|
83
109
|
|
|
84
110
|
const insertInEnd = (e: React.SyntheticEvent) => {
|
|
85
111
|
e.preventDefault();
|
|
86
|
-
if (disabled) return;
|
|
112
|
+
if (disabled || (value ?? []).length >= max) return;
|
|
87
113
|
const id = getRandomId();
|
|
88
114
|
const newIds: number[] = [...internalIds, id];
|
|
89
115
|
if (onInternalIdAdded)
|
|
@@ -93,6 +119,7 @@ export function ArrayContainer<T>({
|
|
|
93
119
|
};
|
|
94
120
|
|
|
95
121
|
const remove = (index: number) => {
|
|
122
|
+
if ((value ?? []).length <= min) return;
|
|
96
123
|
const newIds = [...internalIds];
|
|
97
124
|
newIds.splice(index, 1);
|
|
98
125
|
setInternalIds(newIds);
|
|
@@ -100,12 +127,14 @@ export function ArrayContainer<T>({
|
|
|
100
127
|
};
|
|
101
128
|
|
|
102
129
|
const copy = (index: number) => {
|
|
130
|
+
if ((value ?? []).length >= max) return;
|
|
103
131
|
const id = getRandomId();
|
|
104
132
|
const copyingItem = value[index];
|
|
105
133
|
const newIds: number[] = [
|
|
106
|
-
...internalIds.
|
|
134
|
+
...internalIds.slice(0, index + 1),
|
|
107
135
|
id,
|
|
108
|
-
...internalIds.
|
|
136
|
+
...internalIds.slice(index + 1)
|
|
137
|
+
];
|
|
109
138
|
if (onInternalIdAdded)
|
|
110
139
|
onInternalIdAdded(id);
|
|
111
140
|
setInternalIds(newIds);
|
|
@@ -113,6 +142,20 @@ export function ArrayContainer<T>({
|
|
|
113
142
|
onValueChange([...value.slice(0, index + 1), copyingItem, ...value.slice(index + 1)]);
|
|
114
143
|
};
|
|
115
144
|
|
|
145
|
+
const addInIndex = (index: number) => {
|
|
146
|
+
if ((value ?? []).length >= max) return;
|
|
147
|
+
const id = getRandomId();
|
|
148
|
+
const newIds: number[] = [
|
|
149
|
+
...internalIds.slice(0, index),
|
|
150
|
+
id,
|
|
151
|
+
...internalIds.slice(index)
|
|
152
|
+
];
|
|
153
|
+
if (onInternalIdAdded)
|
|
154
|
+
onInternalIdAdded(id);
|
|
155
|
+
setInternalIds(newIds);
|
|
156
|
+
onValueChange([...value.slice(0, index), newDefaultEntry, ...value.slice(index)]);
|
|
157
|
+
}
|
|
158
|
+
|
|
116
159
|
const onDragEnd = (result: any) => {
|
|
117
160
|
// dropped outside the list
|
|
118
161
|
if (!result.destination) {
|
|
@@ -147,12 +190,17 @@ export function ArrayContainer<T>({
|
|
|
147
190
|
remove={remove}
|
|
148
191
|
copy={copy}
|
|
149
192
|
isDragging={snapshot.isDragging}
|
|
193
|
+
storedProps={itemCustomPropsRef.current[internalId]}
|
|
194
|
+
updateItemCustomProps={updateItemCustomProps}
|
|
195
|
+
addInIndex={addInIndex}
|
|
196
|
+
includeAddButton={includeAddButton}
|
|
150
197
|
/>
|
|
151
198
|
);
|
|
152
199
|
}}
|
|
153
200
|
>
|
|
154
201
|
{(droppableProvided, droppableSnapshot) => (
|
|
155
202
|
<div
|
|
203
|
+
className={cls("space-y-1", className)}
|
|
156
204
|
{...droppableProvided.droppableProps}
|
|
157
205
|
ref={droppableProvided.innerRef}>
|
|
158
206
|
{hasValue && internalIds.map((internalId: number, index: number) => {
|
|
@@ -173,6 +221,10 @@ export function ArrayContainer<T>({
|
|
|
173
221
|
remove={remove}
|
|
174
222
|
copy={copy}
|
|
175
223
|
isDragging={snapshot.isDragging}
|
|
224
|
+
storedProps={itemCustomPropsRef.current[internalId]}
|
|
225
|
+
updateItemCustomProps={updateItemCustomProps}
|
|
226
|
+
addInIndex={addInIndex}
|
|
227
|
+
includeAddButton={includeAddButton}
|
|
176
228
|
/>
|
|
177
229
|
)}
|
|
178
230
|
</Draggable>
|
|
@@ -181,17 +233,19 @@ export function ArrayContainer<T>({
|
|
|
181
233
|
|
|
182
234
|
{droppableProvided.placeholder}
|
|
183
235
|
|
|
184
|
-
{includeAddButton &&
|
|
185
|
-
<
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
236
|
+
{includeAddButton && (
|
|
237
|
+
<div className="my-4 justify-center text-left">
|
|
238
|
+
<Button
|
|
239
|
+
variant={"text"}
|
|
240
|
+
size={size === "small" ? "small" : "medium"}
|
|
241
|
+
color="primary"
|
|
242
|
+
disabled={disabled || value?.length >= max}
|
|
243
|
+
startIcon={<AddIcon/>}
|
|
244
|
+
onClick={insertInEnd}>
|
|
245
|
+
{addLabel ?? "Add"}
|
|
246
|
+
</Button>
|
|
247
|
+
</div>
|
|
248
|
+
)}
|
|
195
249
|
</div>
|
|
196
250
|
)}
|
|
197
251
|
</Droppable>
|
|
@@ -205,10 +259,14 @@ type ArrayContainerItemProps = {
|
|
|
205
259
|
internalId: number,
|
|
206
260
|
size?: "small" | "medium",
|
|
207
261
|
disabled: boolean,
|
|
208
|
-
buildEntry:
|
|
262
|
+
buildEntry: ArrayEntryBuilder,
|
|
209
263
|
remove: (index: number) => void,
|
|
210
264
|
copy: (index: number) => void,
|
|
265
|
+
addInIndex?: (index: number) => void,
|
|
266
|
+
includeAddButton?: boolean,
|
|
211
267
|
isDragging: boolean,
|
|
268
|
+
storedProps?: object,
|
|
269
|
+
updateItemCustomProps: (internalId: number, props: object) => void
|
|
212
270
|
};
|
|
213
271
|
|
|
214
272
|
export function ArrayContainerItem({
|
|
@@ -219,41 +277,46 @@ export function ArrayContainerItem({
|
|
|
219
277
|
disabled,
|
|
220
278
|
buildEntry,
|
|
221
279
|
remove,
|
|
280
|
+
addInIndex,
|
|
281
|
+
includeAddButton,
|
|
222
282
|
copy,
|
|
223
|
-
isDragging
|
|
283
|
+
isDragging,
|
|
284
|
+
storedProps,
|
|
285
|
+
updateItemCustomProps
|
|
224
286
|
}: ArrayContainerItemProps) {
|
|
225
287
|
|
|
226
|
-
const [onHover, setOnHover] = React.useState(false);
|
|
227
|
-
const setOnHoverTrue = useCallback(() => setOnHover(true), []);
|
|
228
|
-
const setOnHoverFalse = useCallback(() => setOnHover(false), []);
|
|
229
|
-
|
|
230
288
|
return <div
|
|
231
|
-
onMouseEnter={setOnHoverTrue}
|
|
232
|
-
onMouseMove={setOnHoverTrue}
|
|
233
|
-
onMouseLeave={setOnHoverFalse}
|
|
234
289
|
ref={provided.innerRef}
|
|
235
290
|
{...provided.draggableProps}
|
|
236
291
|
style={provided.draggableProps.style}
|
|
237
|
-
className={
|
|
238
|
-
|
|
239
|
-
}
|
|
292
|
+
className={`relative ${
|
|
293
|
+
!isDragging ? "hover:bg-surface-accent-50 dark:hover:bg-surface-800 dark:hover:bg-opacity-20" : ""
|
|
294
|
+
} rounded-md opacity-100`}
|
|
240
295
|
>
|
|
241
296
|
<div
|
|
242
297
|
className="flex items-start">
|
|
243
|
-
<div
|
|
244
|
-
|
|
298
|
+
<div
|
|
299
|
+
className="flex-grow w-[calc(100%-48px)] text-text-primary dark:text-text-primary-dark">
|
|
300
|
+
{buildEntry({
|
|
301
|
+
index,
|
|
302
|
+
internalId,
|
|
303
|
+
isDragging,
|
|
304
|
+
storedProps,
|
|
305
|
+
storeProps: (props: object) => updateItemCustomProps(internalId, props)
|
|
306
|
+
})}
|
|
245
307
|
</div>
|
|
246
308
|
<ArrayItemOptions direction={size === "small" ? "row" : "column"}
|
|
247
309
|
disabled={disabled}
|
|
248
310
|
remove={remove}
|
|
249
311
|
index={index}
|
|
250
312
|
provided={provided}
|
|
313
|
+
addInIndex={addInIndex}
|
|
314
|
+
includeAddButton={includeAddButton}
|
|
251
315
|
copy={copy}/>
|
|
252
316
|
</div>
|
|
253
317
|
</div>;
|
|
254
318
|
}
|
|
255
319
|
|
|
256
|
-
|
|
257
320
|
export function ArrayItemOptions({
|
|
258
321
|
direction,
|
|
259
322
|
disabled,
|
|
@@ -261,13 +324,17 @@ export function ArrayItemOptions({
|
|
|
261
324
|
index,
|
|
262
325
|
provided,
|
|
263
326
|
copy,
|
|
327
|
+
includeAddButton,
|
|
328
|
+
addInIndex
|
|
264
329
|
}: {
|
|
265
330
|
direction?: "row" | "column",
|
|
266
331
|
disabled: boolean,
|
|
267
332
|
remove: (index: number) => void,
|
|
268
333
|
index: number,
|
|
269
334
|
provided: any,
|
|
270
|
-
copy: (index: number) => void
|
|
335
|
+
copy: (index: number) => void,
|
|
336
|
+
includeAddButton?: boolean,
|
|
337
|
+
addInIndex?: (index: number) => void
|
|
271
338
|
}) {
|
|
272
339
|
|
|
273
340
|
const [menuOpen, setMenuOpen] = useState(false);
|
|
@@ -275,7 +342,7 @@ export function ArrayItemOptions({
|
|
|
275
342
|
const iconRef = React.useRef<HTMLDivElement>(null);
|
|
276
343
|
useOutsideAlerter(iconRef, () => setMenuOpen(false));
|
|
277
344
|
|
|
278
|
-
return <div className={`pl-2 pt-1 pb-
|
|
345
|
+
return <div className={`pl-2 pt-1 pb-1 flex ${direction === "row" ? "flex-row-reverse" : "flex-col"} items-center`}
|
|
279
346
|
ref={iconRef}
|
|
280
347
|
{...provided.dragHandleProps}>
|
|
281
348
|
<Tooltip
|
|
@@ -283,11 +350,13 @@ export function ArrayItemOptions({
|
|
|
283
350
|
open={menuOpen ? false : undefined}
|
|
284
351
|
side={direction === "column" ? "left" : undefined}
|
|
285
352
|
title="Drag to move. Click for more options">
|
|
286
|
-
|
|
287
353
|
<IconButton
|
|
288
354
|
size="small"
|
|
289
355
|
disabled={disabled}
|
|
290
|
-
onClick={() =>
|
|
356
|
+
onClick={(e) => {
|
|
357
|
+
e.preventDefault();
|
|
358
|
+
setMenuOpen(true);
|
|
359
|
+
}}
|
|
291
360
|
onDragStart={(e: any) => {
|
|
292
361
|
setMenuOpen(false);
|
|
293
362
|
}}
|
|
@@ -298,7 +367,7 @@ export function ArrayItemOptions({
|
|
|
298
367
|
<Menu
|
|
299
368
|
portalContainer={iconRef.current}
|
|
300
369
|
open={menuOpen}
|
|
301
|
-
trigger={<div/>}>
|
|
370
|
+
trigger={<div tabIndex={-1}/>}>
|
|
302
371
|
|
|
303
372
|
<MenuItem dense onClick={(e) => {
|
|
304
373
|
setMenuOpen(false);
|
|
@@ -315,8 +384,25 @@ export function ArrayItemOptions({
|
|
|
315
384
|
Copy
|
|
316
385
|
</MenuItem>
|
|
317
386
|
|
|
318
|
-
|
|
387
|
+
{includeAddButton && addInIndex && <MenuItem dense
|
|
388
|
+
onClick={() => {
|
|
389
|
+
setMenuOpen(false);
|
|
390
|
+
addInIndex(index);
|
|
391
|
+
}}>
|
|
392
|
+
<KeyboardArrowUpIcon size={"small"}/>
|
|
393
|
+
Add on top
|
|
394
|
+
</MenuItem>}
|
|
395
|
+
|
|
396
|
+
{includeAddButton && addInIndex && <MenuItem dense
|
|
397
|
+
onClick={() => {
|
|
398
|
+
setMenuOpen(false);
|
|
399
|
+
addInIndex(index + 1);
|
|
400
|
+
}}>
|
|
401
|
+
<KeyboardArrowDownIcon size={"small"}/>
|
|
402
|
+
Add below
|
|
403
|
+
</MenuItem>}
|
|
319
404
|
|
|
405
|
+
</Menu>
|
|
320
406
|
</Tooltip>
|
|
321
407
|
|
|
322
408
|
</div>;
|
|
@@ -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 and 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,8 +1,8 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
|
|
3
|
-
import { Button, Dialog, DialogActions, DialogContent, LoadingButton, Typography } from "@firecms/ui";
|
|
3
|
+
import { Button, Dialog, DialogActions, DialogContent, DialogTitle, LoadingButton, Typography } from "@firecms/ui";
|
|
4
4
|
|
|
5
|
-
export function
|
|
5
|
+
export function ConfirmationDialog({
|
|
6
6
|
open,
|
|
7
7
|
onAccept,
|
|
8
8
|
onCancel,
|
|
@@ -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
|
|
|
@@ -1,6 +1,6 @@
|
|
|
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
6
|
useCustomizationController,
|
|
@@ -40,25 +40,17 @@ export function DeleteEntityDialog<M extends Record<string, any>>({
|
|
|
40
40
|
const snackbarController = useSnackbarController();
|
|
41
41
|
const [loading, setLoading] = useState(false);
|
|
42
42
|
|
|
43
|
-
const [entityOrEntities, setUsedEntityOrEntities] = React.useState<Entity<M> | Entity<M>[]>();
|
|
44
|
-
|
|
45
|
-
const [multipleEntities, setMultipleEntities] = React.useState<boolean>();
|
|
46
43
|
const context = useFireCMSContext();
|
|
44
|
+
const entityOrEntities = Array.isArray(entityOrEntitiesToDelete) && entityOrEntitiesToDelete.length === 1
|
|
45
|
+
? entityOrEntitiesToDelete[0]
|
|
46
|
+
: entityOrEntitiesToDelete;
|
|
47
47
|
|
|
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]);
|
|
48
|
+
const multipleEntities = Array.isArray(entityOrEntities);
|
|
57
49
|
|
|
58
50
|
const resolvedCollection = useMemo(() => resolveCollection<M>({
|
|
59
51
|
collection,
|
|
60
52
|
path,
|
|
61
|
-
|
|
53
|
+
propertyConfigs: customizationController.propertyConfigs
|
|
62
54
|
}), [collection, path]);
|
|
63
55
|
|
|
64
56
|
const handleCancel = useCallback(() => {
|
|
@@ -181,16 +173,15 @@ export function DeleteEntityDialog<M extends Record<string, any>>({
|
|
|
181
173
|
open={open}
|
|
182
174
|
onOpenChange={(open) => !open ? onClose() : undefined}
|
|
183
175
|
>
|
|
176
|
+
<DialogTitle id="delete-dialog-title">
|
|
177
|
+
{dialogTitle}
|
|
178
|
+
</DialogTitle>
|
|
184
179
|
<DialogContent fullHeight={true}>
|
|
185
|
-
<Typography variant={"subtitle2"} className={"p-4"}>
|
|
186
|
-
{dialogTitle}
|
|
187
|
-
</Typography>
|
|
188
|
-
|
|
189
180
|
{!multipleEntities && <div className={"p-4"}>{content}</div>}
|
|
190
181
|
</DialogContent>
|
|
191
182
|
<DialogActions>
|
|
192
183
|
|
|
193
|
-
{loading && <CircularProgress size={"
|
|
184
|
+
{loading && <CircularProgress size={"smallest"}/>}
|
|
194
185
|
|
|
195
186
|
<Button onClick={handleCancel}
|
|
196
187
|
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,16 +164,18 @@ export const EntityCollectionRowActions = function EntityCollectionRowActions({
|
|
|
149
164
|
</div>}
|
|
150
165
|
|
|
151
166
|
{!hideId && size !== "xs" && (
|
|
152
|
-
<div
|
|
153
|
-
|
|
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 flex items-center justify-center gap-1"
|
|
169
|
+
onClick={(event) => {
|
|
170
|
+
event.stopPropagation();
|
|
171
|
+
}}>
|
|
172
|
+
{hasDraft && <Tooltip title={"Unsaved changes"} className={"inline"}>
|
|
173
|
+
<Chip colorScheme={"orangeDarker"} className={"p-0.5"}>
|
|
174
|
+
<EditIcon size={12}/>
|
|
175
|
+
</Chip>
|
|
176
|
+
</Tooltip>}
|
|
154
177
|
{entity
|
|
155
|
-
?
|
|
156
|
-
onClick={(event) => {
|
|
157
|
-
event.stopPropagation();
|
|
158
|
-
}}
|
|
159
|
-
className={"font-mono select-all"}
|
|
160
|
-
variant={"caption"}
|
|
161
|
-
color={"secondary"}> {entity.id} </Typography>
|
|
178
|
+
? entity.id
|
|
162
179
|
: <Skeleton/>
|
|
163
180
|
}
|
|
164
181
|
</div>
|