@firecms/core 3.0.0-canary.99 → 3.0.0-rc.2
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 +2 -2
- package/dist/app/Drawer.d.ts +0 -1
- package/dist/app/Scaffold.d.ts +4 -0
- package/dist/components/ArrayContainer.d.ts +31 -12
- package/dist/components/{DeleteConfirmationDialog.d.ts → ConfirmationDialog.d.ts} +1 -1
- package/dist/components/EntityCollectionTable/EntityCollectionRowActions.d.ts +3 -1
- package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +2 -2
- package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +17 -3
- package/dist/components/EntityCollectionTable/fields/TableReferenceField.d.ts +1 -1
- package/dist/components/EntityCollectionTable/index.d.ts +1 -1
- package/dist/components/EntityCollectionTable/internal/popup_field/PopupFormField.d.ts +6 -3
- package/dist/components/EntityCollectionView/EntityCollectionView.d.ts +8 -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 -6
- 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 +3 -2
- package/dist/components/HomePage/NavigationGroup.d.ts +8 -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/SelectableTable/SelectableTable.d.ts +13 -3
- package/dist/components/SelectableTable/filters/ReferenceFilterField.d.ts +1 -1
- package/dist/components/UnsavedChangesDialog.d.ts +8 -0
- package/dist/components/UserDisplay.d.ts +7 -0
- package/dist/components/VirtualTable/VirtualTableProps.d.ts +11 -2
- package/dist/components/VirtualTable/fields/VirtualTableUserSelect.d.ts +12 -0
- package/dist/components/common/default_entity_actions.d.ts +0 -2
- package/dist/components/common/index.d.ts +1 -1
- package/dist/components/common/useColumnsIds.d.ts +1 -0
- package/dist/components/common/{useDataSourceEntityCollectionTableController.d.ts → useDataSourceTableController.d.ts} +10 -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 +3 -1
- package/dist/contexts/BreacrumbsContext.d.ts +8 -0
- package/dist/contexts/InternalUserManagementContext.d.ts +3 -0
- package/dist/core/DefaultAppBar.d.ts +8 -2
- package/dist/core/DrawerNavigationItem.d.ts +2 -1
- package/dist/core/EntityEditView.d.ts +40 -22
- package/dist/core/EntityEditViewFormActions.d.ts +2 -0
- package/dist/core/FireCMS.d.ts +2 -3
- package/dist/core/FireCMSRouter.d.ts +4 -0
- package/dist/core/NavigationRoutes.d.ts +0 -1
- package/dist/core/SideDialogs.d.ts +4 -2
- package/dist/core/field_configs.d.ts +1 -1
- package/dist/core/index.d.ts +2 -1
- package/dist/form/EntityForm.d.ts +50 -0
- package/dist/form/EntityFormActions.d.ts +21 -0
- package/dist/form/PropertyFieldBinding.d.ts +1 -1
- 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/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 +4 -10
- package/dist/form/field_bindings/SwitchFieldBinding.d.ts +1 -2
- package/dist/form/field_bindings/TextFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/UserSelectFieldBinding.d.ts +12 -0
- package/dist/form/index.d.ts +17 -16
- package/dist/form/useClearRestoreValue.d.ts +2 -2
- package/dist/hooks/data/delete.d.ts +4 -4
- package/dist/hooks/data/save.d.ts +3 -3
- package/dist/hooks/data/useCollectionFetch.d.ts +1 -1
- package/dist/hooks/data/useEntityFetch.d.ts +4 -3
- package/dist/hooks/index.d.ts +2 -0
- package/dist/hooks/useAuthController.d.ts +1 -1
- package/dist/hooks/useBreadcrumbsController.d.ts +26 -0
- package/dist/hooks/useBuildNavigationController.d.ts +57 -12
- package/dist/hooks/useCollapsedGroups.d.ts +9 -0
- package/dist/hooks/useFireCMSContext.d.ts +1 -1
- package/dist/hooks/useInternalUserManagementController.d.ts +12 -0
- package/dist/hooks/useModeController.d.ts +1 -2
- package/dist/hooks/useProjectLog.d.ts +7 -1
- package/dist/hooks/useResolvedNavigationFrom.d.ts +3 -3
- package/dist/hooks/useValidateAuthenticator.d.ts +3 -3
- package/dist/index.es.js +20480 -14434
- package/dist/index.es.js.map +1 -1
- package/dist/index.umd.js +20250 -14209
- package/dist/index.umd.js.map +1 -1
- package/dist/internal/useBuildDataSource.d.ts +3 -2
- package/dist/internal/useBuildSideEntityController.d.ts +3 -3
- package/dist/internal/useUnsavedChangesDialog.d.ts +7 -9
- package/dist/preview/PropertyPreviewProps.d.ts +1 -1
- package/dist/preview/components/EnumValuesChip.d.ts +1 -1
- package/dist/preview/components/ReferencePreview.d.ts +2 -2
- package/dist/preview/components/UserPreview.d.ts +8 -0
- package/dist/preview/index.d.ts +1 -0
- 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 +7 -9
- package/dist/types/collections.d.ts +88 -25
- package/dist/types/customization_controller.d.ts +8 -0
- package/dist/types/datasource.d.ts +19 -17
- package/dist/types/dialogs_controller.d.ts +7 -3
- package/dist/types/entities.d.ts +7 -2
- package/dist/types/entity_actions.d.ts +58 -8
- 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 +43 -17
- package/dist/types/firecms.d.ts +31 -3
- package/dist/types/firecms_context.d.ts +17 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/internal_user_management.d.ts +20 -0
- package/dist/types/navigation.d.ts +60 -17
- package/dist/types/permissions.d.ts +4 -4
- package/dist/types/plugins.d.ts +44 -9
- package/dist/types/properties.d.ts +74 -22
- package/dist/types/property_config.d.ts +1 -3
- package/dist/types/roles.d.ts +3 -0
- package/dist/types/side_dialogs_controller.d.ts +10 -0
- package/dist/types/side_entity_controller.d.ts +14 -1
- package/dist/types/storage.d.ts +75 -0
- package/dist/types/user.d.ts +2 -1
- 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 +2 -2
- package/dist/util/entity_actions.d.ts +2 -0
- package/dist/util/entity_cache.d.ts +23 -0
- package/dist/util/icon_synonyms.d.ts +0 -1
- package/dist/util/icons.d.ts +5 -2
- package/dist/util/index.d.ts +3 -0
- package/dist/util/navigation_from_path.d.ts +10 -1
- package/dist/util/navigation_utils.d.ts +13 -1
- package/dist/util/objects.d.ts +2 -1
- package/dist/util/permissions.d.ts +4 -4
- package/dist/util/property_utils.d.ts +4 -4
- package/dist/util/references.d.ts +2 -2
- package/dist/util/resolutions.d.ts +30 -6
- package/dist/util/storage.d.ts +1 -1
- package/dist/util/useStorageUploadController.d.ts +2 -2
- package/package.json +133 -125
- package/src/app/Drawer.tsx +0 -1
- package/src/app/Scaffold.tsx +33 -29
- package/src/components/ArrayContainer.tsx +447 -229
- package/src/components/CircularProgressCenter.tsx +1 -1
- package/src/components/ClearFilterSortButton.tsx +1 -1
- package/src/components/{DeleteConfirmationDialog.tsx → ConfirmationDialog.tsx} +12 -11
- package/src/components/DeleteEntityDialog.tsx +13 -20
- package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +59 -25
- package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +23 -17
- package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +20 -3
- package/src/components/EntityCollectionTable/PropertyTableCell.tsx +47 -9
- package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +21 -16
- package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +6 -12
- package/src/components/EntityCollectionTable/index.tsx +1 -1
- package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +6 -6
- package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +35 -26
- package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +20 -8
- package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +132 -101
- package/src/components/EntityCollectionTable/internal/popup_field/useDraggable.tsx +9 -9
- package/src/components/EntityCollectionView/EntityCollectionView.tsx +178 -85
- package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +7 -4
- package/src/components/EntityCollectionView/useSelectionController.tsx +5 -4
- package/src/components/EntityCollectionView/utils.ts +19 -0
- package/src/components/EntityJsonPreview.tsx +66 -0
- package/src/components/EntityPreview.tsx +75 -57
- package/src/components/EntityView.tsx +8 -5
- package/src/components/ErrorView.tsx +3 -3
- package/src/components/FireCMSLogo.tsx +7 -51
- package/src/components/HomePage/DefaultHomePage.tsx +506 -161
- package/src/components/HomePage/FavouritesView.tsx +9 -14
- package/src/components/HomePage/HomePageDnD.tsx +600 -0
- package/src/components/HomePage/NavigationCard.tsx +47 -38
- package/src/components/HomePage/NavigationCardBinding.tsx +16 -15
- package/src/components/HomePage/NavigationGroup.tsx +144 -30
- package/src/components/HomePage/RenameGroupDialog.tsx +123 -0
- package/src/components/HomePage/SmallNavigationCard.tsx +1 -2
- package/src/components/NotFoundPage.tsx +2 -2
- package/src/components/PropertyConfigBadge.tsx +10 -4
- package/src/components/PropertyIdCopyTooltip.tsx +47 -0
- package/src/components/ReferenceTable/ReferenceSelectionTable.tsx +22 -13
- package/src/components/SearchIconsView.tsx +2 -2
- package/src/components/SelectableTable/SelectableTable.tsx +154 -142
- package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +4 -2
- package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +10 -8
- package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +60 -11
- package/src/components/UnsavedChangesDialog.tsx +46 -0
- package/src/components/UserDisplay.tsx +55 -0
- package/src/components/VirtualTable/VirtualTable.tsx +65 -44
- package/src/components/VirtualTable/VirtualTableCell.tsx +0 -8
- package/src/components/VirtualTable/VirtualTableHeader.tsx +8 -8
- package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +1 -1
- package/src/components/VirtualTable/VirtualTableProps.tsx +12 -2
- package/src/components/VirtualTable/VirtualTableRow.tsx +1 -1
- package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +4 -4
- 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/fields/VirtualTableUserSelect.tsx +99 -0
- package/src/components/common/default_entity_actions.tsx +62 -42
- package/src/components/common/index.ts +1 -1
- package/src/components/common/useColumnsIds.tsx +2 -9
- 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 +1 -0
- package/src/components/index.tsx +4 -1
- package/src/contexts/BreacrumbsContext.tsx +38 -0
- package/src/contexts/DialogsProvider.tsx +3 -2
- package/src/contexts/InternalUserManagementContext.tsx +4 -0
- package/src/contexts/ModeController.tsx +1 -3
- package/src/contexts/SnackbarProvider.tsx +2 -0
- package/src/core/DefaultAppBar.tsx +124 -85
- package/src/core/DefaultDrawer.tsx +30 -22
- package/src/core/DrawerNavigationItem.tsx +32 -28
- package/src/core/EntityEditView.tsx +388 -995
- package/src/core/EntityEditViewFormActions.tsx +329 -0
- package/src/core/EntitySidePanel.tsx +88 -20
- package/src/core/FireCMS.tsx +58 -28
- package/src/core/FireCMSRouter.tsx +17 -0
- package/src/core/NavigationRoutes.tsx +23 -32
- package/src/core/SideDialogs.tsx +22 -12
- package/src/core/field_configs.tsx +39 -11
- package/src/core/index.tsx +4 -2
- package/src/form/EntityForm.tsx +814 -0
- package/src/form/EntityFormActions.tsx +211 -0
- package/src/form/PropertyFieldBinding.tsx +59 -41
- package/src/form/components/CustomIdField.tsx +9 -3
- package/src/form/components/FieldHelperText.tsx +1 -1
- 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 +5 -4
- package/src/form/components/StorageUploadProgress.tsx +2 -3
- package/src/form/components/index.tsx +3 -1
- package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +30 -18
- package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +47 -36
- package/src/form/field_bindings/BlockFieldBinding.tsx +55 -33
- package/src/form/field_bindings/DateTimeFieldBinding.tsx +18 -14
- package/src/form/field_bindings/KeyValueFieldBinding.tsx +19 -15
- package/src/form/field_bindings/MapFieldBinding.tsx +72 -62
- package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +159 -0
- package/src/form/field_bindings/{MultiSelectBinding.tsx → MultiSelectFieldBinding.tsx} +26 -21
- package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +10 -8
- package/src/form/field_bindings/ReferenceAsStringFieldBinding.tsx +135 -0
- package/src/form/field_bindings/ReferenceFieldBinding.tsx +28 -19
- package/src/form/field_bindings/RepeatFieldBinding.tsx +56 -32
- package/src/form/field_bindings/SelectFieldBinding.tsx +22 -13
- package/src/form/field_bindings/StorageUploadFieldBinding.tsx +247 -168
- package/src/form/field_bindings/SwitchFieldBinding.tsx +29 -24
- package/src/form/field_bindings/TextFieldBinding.tsx +28 -24
- package/src/form/field_bindings/UserSelectFieldBinding.tsx +94 -0
- package/src/form/index.tsx +17 -37
- package/src/form/useClearRestoreValue.tsx +2 -2
- package/src/form/validation.ts +12 -6
- package/src/hooks/data/delete.ts +6 -5
- package/src/hooks/data/save.ts +26 -35
- package/src/hooks/data/useCollectionFetch.tsx +3 -3
- package/src/hooks/data/useDataSource.tsx +10 -2
- package/src/hooks/data/useEntityFetch.tsx +10 -6
- package/src/hooks/index.tsx +3 -0
- package/src/hooks/useAuthController.tsx +1 -1
- package/src/hooks/useBreadcrumbsController.tsx +31 -0
- package/src/hooks/useBrowserTitleAndIcon.tsx +1 -1
- package/src/hooks/useBuildModeController.tsx +15 -28
- package/src/hooks/useBuildNavigationController.tsx +386 -124
- package/src/hooks/useCollapsedGroups.ts +64 -0
- package/src/hooks/useFireCMSContext.tsx +9 -35
- package/src/hooks/useInternalUserManagementController.tsx +16 -0
- package/src/hooks/useLargeLayout.tsx +0 -35
- package/src/hooks/useModeController.tsx +1 -2
- package/src/hooks/useProjectLog.tsx +16 -5
- package/src/hooks/useResolvedNavigationFrom.tsx +9 -11
- package/src/hooks/useValidateAuthenticator.tsx +3 -3
- package/src/internal/useBuildDataSource.ts +67 -80
- package/src/internal/useBuildSideDialogsController.tsx +4 -2
- package/src/internal/useBuildSideEntityController.tsx +149 -86
- package/src/internal/useUnsavedChangesDialog.tsx +127 -91
- package/src/preview/PropertyPreview.tsx +36 -12
- package/src/preview/PropertyPreviewProps.tsx +1 -1
- package/src/preview/components/BooleanPreview.tsx +1 -1
- package/src/preview/components/EmptyValue.tsx +1 -1
- package/src/preview/components/EnumValuesChip.tsx +1 -1
- package/src/preview/components/ImagePreview.tsx +10 -9
- package/src/preview/components/ReferencePreview.tsx +10 -18
- package/src/preview/components/UrlComponentPreview.tsx +20 -21
- package/src/preview/components/UserPreview.tsx +27 -0
- package/src/preview/index.ts +1 -0
- package/src/preview/property_previews/ArrayOfMapsPreview.tsx +6 -5
- package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +5 -4
- package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +5 -3
- package/src/preview/property_previews/ArrayOfStringsPreview.tsx +4 -3
- package/src/preview/property_previews/ArrayOneOfPreview.tsx +6 -4
- package/src/preview/property_previews/ArrayPropertyPreview.tsx +6 -4
- package/src/preview/property_previews/MapPropertyPreview.tsx +7 -6
- package/src/preview/property_previews/SkeletonPropertyComponent.tsx +13 -13
- package/src/preview/property_previews/StringPropertyPreview.tsx +2 -2
- 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 +8 -12
- package/src/types/collections.ts +103 -28
- package/src/types/customization_controller.tsx +9 -0
- package/src/types/datasource.ts +21 -20
- package/src/types/dialogs_controller.tsx +7 -3
- package/src/types/entities.ts +10 -2
- package/src/types/entity_actions.tsx +71 -8
- 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 +52 -19
- package/src/types/firecms.tsx +34 -4
- package/src/types/firecms_context.tsx +18 -1
- package/src/types/index.ts +1 -0
- package/src/types/internal_user_management.ts +24 -0
- package/src/types/navigation.ts +76 -22
- package/src/types/permissions.ts +5 -5
- package/src/types/plugins.tsx +53 -9
- package/src/types/properties.ts +84 -22
- package/src/types/property_config.tsx +2 -2
- package/src/types/roles.ts +3 -0
- package/src/types/side_dialogs_controller.tsx +15 -0
- package/src/types/side_entity_controller.tsx +16 -1
- package/src/types/storage.ts +82 -0
- package/src/types/user.ts +3 -1
- 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 +6 -4
- package/src/util/entity_actions.ts +28 -0
- package/src/util/entity_cache.ts +204 -0
- package/src/util/icon_list.ts +1 -1
- package/src/util/icon_synonyms.ts +0 -1
- package/src/util/icons.tsx +36 -11
- package/src/util/index.ts +3 -0
- package/src/util/join_collections.ts +9 -2
- package/src/util/make_properties_editable.ts +13 -5
- package/src/util/navigation_from_path.ts +33 -12
- package/src/util/navigation_utils.ts +135 -19
- package/src/util/objects.ts +74 -14
- package/src/util/parent_references_from_path.ts +3 -3
- package/src/util/permissions.ts +8 -8
- package/src/util/property_utils.tsx +17 -6
- package/src/util/references.ts +19 -8
- package/src/util/resolutions.ts +93 -24
- package/src/util/storage.ts +6 -2
- package/src/util/useStorageUploadController.tsx +74 -29
- package/dist/components/EntityCollectionTable/internal/popup_field/ElementResizeListener.d.ts +0 -5
- package/dist/components/PropertyIdCopyTooltipContent.d.ts +0 -3
- package/dist/form/PropertiesForm.d.ts +0 -8
- package/dist/form/components/FormikArrayContainer.d.ts +0 -18
- package/dist/form/field_bindings/MarkdownFieldBinding.d.ts +0 -9
- package/src/components/EntityCollectionTable/internal/popup_field/ElementResizeListener.tsx +0 -59
- package/src/components/PropertyIdCopyTooltipContent.tsx +0 -27
- package/src/components/common/useDataSourceEntityCollectionTableController.tsx +0 -236
- package/src/form/PropertiesForm.tsx +0 -81
- package/src/form/components/FormikArrayContainer.tsx +0 -44
- package/src/form/field_bindings/MarkdownFieldBinding.tsx +0 -695
- /package/src/util/{common.tsx → common.ts} +0 -0
|
@@ -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
|
|
@@ -18,7 +18,7 @@ export function ClearFilterSortButton({
|
|
|
18
18
|
if ((filterIsSet || sortIsSet) && (tableController.clearFilter || tableController.setSortBy)) {
|
|
19
19
|
let label;
|
|
20
20
|
if (filterIsSet && sortIsSet) {
|
|
21
|
-
label = "Clear filter
|
|
21
|
+
label = "Clear filter/sort";
|
|
22
22
|
} else if (filterIsSet) {
|
|
23
23
|
label = "Clear filter";
|
|
24
24
|
} else {
|
|
@@ -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,13 +22,14 @@ 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
|
|
|
30
30
|
<DialogActions>
|
|
31
31
|
<Button
|
|
32
|
+
color={"primary"}
|
|
32
33
|
variant={"text"}
|
|
33
34
|
onClick={onCancel}
|
|
34
35
|
autoFocus>Cancel</Button>
|
|
@@ -38,7 +39,7 @@ export function DeleteConfirmationDialog({
|
|
|
38
39
|
type="submit"
|
|
39
40
|
loading={loading}
|
|
40
41
|
onClick={onAccept}
|
|
41
|
-
|
|
42
|
+
autoFocus>
|
|
42
43
|
Ok
|
|
43
44
|
</LoadingButton>
|
|
44
45
|
</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
|
*
|
|
@@ -21,6 +33,7 @@ export const EntityCollectionRowActions = function EntityCollectionRowActions({
|
|
|
21
33
|
entity,
|
|
22
34
|
collection,
|
|
23
35
|
fullPath,
|
|
36
|
+
fullIdPath,
|
|
24
37
|
width,
|
|
25
38
|
frozen,
|
|
26
39
|
isSelected,
|
|
@@ -32,23 +45,26 @@ export const EntityCollectionRowActions = function EntityCollectionRowActions({
|
|
|
32
45
|
actions = [],
|
|
33
46
|
hideId,
|
|
34
47
|
selectionController,
|
|
48
|
+
openEntityMode
|
|
35
49
|
}:
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
50
|
+
{
|
|
51
|
+
entity: Entity<any>,
|
|
52
|
+
collection?: EntityCollection<any>,
|
|
53
|
+
fullPath?: string,
|
|
54
|
+
fullIdPath?: string,
|
|
55
|
+
width: number,
|
|
56
|
+
frozen?: boolean,
|
|
57
|
+
size: CollectionSize,
|
|
58
|
+
isSelected?: boolean,
|
|
59
|
+
selectionEnabled?: boolean,
|
|
60
|
+
actions?: EntityAction[],
|
|
61
|
+
hideId?: boolean,
|
|
62
|
+
onCollectionChange?: () => void,
|
|
63
|
+
selectionController?: SelectionController;
|
|
64
|
+
highlightEntity?: (entity: Entity<any>) => void;
|
|
65
|
+
unhighlightEntity?: (entity: Entity<any>) => void;
|
|
66
|
+
openEntityMode: "side_panel" | "full_screen";
|
|
67
|
+
}) {
|
|
52
68
|
|
|
53
69
|
const largeLayout = useLargeLayout();
|
|
54
70
|
|
|
@@ -63,12 +79,16 @@ export const EntityCollectionRowActions = function EntityCollectionRowActions({
|
|
|
63
79
|
|
|
64
80
|
const collapsedActions = actions.filter(a => a.collapsed || a.collapsed === undefined);
|
|
65
81
|
const uncollapsedActions = actions.filter(a => a.collapsed === false);
|
|
82
|
+
const hasDraft = hasEntityInCache(fullPath + "/" + entity.id);
|
|
66
83
|
return (
|
|
67
84
|
<div
|
|
68
85
|
className={cls(
|
|
69
|
-
"h-full flex items-center justify-center flex-col bg-
|
|
86
|
+
"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",
|
|
70
87
|
frozen ? "sticky left-0" : ""
|
|
71
88
|
)}
|
|
89
|
+
onClick={useCallback((event: any) => {
|
|
90
|
+
event.stopPropagation();
|
|
91
|
+
}, [])}
|
|
72
92
|
style={{
|
|
73
93
|
width,
|
|
74
94
|
position: frozen ? "sticky" : "initial",
|
|
@@ -80,19 +100,24 @@ export const EntityCollectionRowActions = function EntityCollectionRowActions({
|
|
|
80
100
|
<div className="w-34 flex justify-center">
|
|
81
101
|
|
|
82
102
|
{uncollapsedActions.map((action, index) => (
|
|
83
|
-
<Tooltip key={index}
|
|
103
|
+
<Tooltip key={index}
|
|
104
|
+
title={action.name}
|
|
105
|
+
asChild={true}>
|
|
84
106
|
<IconButton
|
|
85
107
|
onClick={(event: MouseEvent) => {
|
|
86
108
|
event.stopPropagation();
|
|
87
109
|
action.onClick({
|
|
110
|
+
view: "collection",
|
|
88
111
|
entity,
|
|
89
112
|
fullPath,
|
|
113
|
+
fullIdPath,
|
|
90
114
|
collection,
|
|
91
115
|
context,
|
|
92
116
|
selectionController,
|
|
93
117
|
highlightEntity,
|
|
94
118
|
unhighlightEntity,
|
|
95
119
|
onCollectionChange,
|
|
120
|
+
openEntityMode: openEntityMode ?? collection?.openEntityMode
|
|
96
121
|
});
|
|
97
122
|
}}
|
|
98
123
|
size={largeLayout ? "medium" : "small"}>
|
|
@@ -113,14 +138,17 @@ export const EntityCollectionRowActions = function EntityCollectionRowActions({
|
|
|
113
138
|
onClick={(e) => {
|
|
114
139
|
e.stopPropagation();
|
|
115
140
|
action.onClick({
|
|
141
|
+
view: "collection",
|
|
116
142
|
entity,
|
|
117
143
|
fullPath,
|
|
144
|
+
fullIdPath,
|
|
118
145
|
collection,
|
|
119
146
|
context,
|
|
120
147
|
selectionController,
|
|
121
148
|
highlightEntity,
|
|
122
149
|
unhighlightEntity,
|
|
123
150
|
onCollectionChange,
|
|
151
|
+
openEntityMode: openEntityMode ?? collection?.openEntityMode
|
|
124
152
|
});
|
|
125
153
|
}}>
|
|
126
154
|
{action.icon}
|
|
@@ -143,15 +171,21 @@ export const EntityCollectionRowActions = function EntityCollectionRowActions({
|
|
|
143
171
|
|
|
144
172
|
{!hideId && size !== "xs" && (
|
|
145
173
|
<div
|
|
146
|
-
className="w-[138px]
|
|
174
|
+
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"
|
|
147
175
|
onClick={(event) => {
|
|
148
176
|
event.stopPropagation();
|
|
149
177
|
}}>
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
}
|
|
178
|
+
{hasDraft && <Tooltip title={"Local unsaved changes"} className={"inline"}>
|
|
179
|
+
<Chip colorScheme={"orangeDarker"} className={"p-0.5"}>
|
|
180
|
+
<EditIcon size={12}/>
|
|
181
|
+
</Chip>
|
|
182
|
+
</Tooltip>}
|
|
183
|
+
<span className="min-w-0 truncate text-center">
|
|
184
|
+
{entity
|
|
185
|
+
? entity.id
|
|
186
|
+
: <Skeleton/>
|
|
187
|
+
}
|
|
188
|
+
</span>
|
|
155
189
|
</div>
|
|
156
190
|
)}
|
|
157
191
|
|
|
@@ -34,14 +34,14 @@ import { getRowHeight } from "../common/table_height";
|
|
|
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
46
|
className,
|
|
47
47
|
style,
|
|
@@ -57,6 +57,8 @@ export const EntityCollectionTable = function EntityCollectionTable<M extends Re
|
|
|
57
57
|
highlightedEntities,
|
|
58
58
|
onEntityClick,
|
|
59
59
|
onColumnResize,
|
|
60
|
+
initialScroll,
|
|
61
|
+
onScroll,
|
|
60
62
|
onSizeChanged,
|
|
61
63
|
textSearchEnabled = false,
|
|
62
64
|
hoverRow = true,
|
|
@@ -76,7 +78,8 @@ export const EntityCollectionTable = function EntityCollectionTable<M extends Re
|
|
|
76
78
|
getIdColumnWidth,
|
|
77
79
|
onTextSearchClick,
|
|
78
80
|
textSearchLoading,
|
|
79
|
-
enablePopupIcon
|
|
81
|
+
enablePopupIcon,
|
|
82
|
+
openEntityMode = "side_panel"
|
|
80
83
|
}: EntityCollectionTableProps<M>) {
|
|
81
84
|
|
|
82
85
|
const ref = useRef<HTMLDivElement>(null);
|
|
@@ -84,12 +87,10 @@ export const EntityCollectionTable = function EntityCollectionTable<M extends Re
|
|
|
84
87
|
const largeLayout = useLargeLayout();
|
|
85
88
|
const selectedEntities = (selectionController?.selectedEntities?.length > 0 ? selectionController?.selectedEntities : highlightedEntities)?.filter(Boolean);
|
|
86
89
|
|
|
87
|
-
const context: FireCMSContext<
|
|
90
|
+
const context: FireCMSContext<USER> = useFireCMSContext();
|
|
88
91
|
|
|
89
92
|
const [size, setSize] = React.useState<CollectionSize>(defaultSize ?? "m");
|
|
90
93
|
|
|
91
|
-
const selectedEntityIds = selectedEntities?.map(e => e.id);
|
|
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;
|
|
@@ -176,12 +177,14 @@ export const EntityCollectionTable = function EntityCollectionTable<M extends Re
|
|
|
176
177
|
throw new Error("When using additional fields you need to provide a Builder or a value");
|
|
177
178
|
}
|
|
178
179
|
|
|
179
|
-
const child = Builder
|
|
180
|
+
const child: React.ReactNode = Builder
|
|
180
181
|
? <Builder entity={entity} context={context}/>
|
|
181
|
-
: <>
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
182
|
+
: <>
|
|
183
|
+
{additionalField.value?.({
|
|
184
|
+
entity,
|
|
185
|
+
context
|
|
186
|
+
})?.toString()}
|
|
187
|
+
</>;
|
|
185
188
|
|
|
186
189
|
return (
|
|
187
190
|
<EntityTableCell
|
|
@@ -202,7 +205,7 @@ export const EntityCollectionTable = function EntityCollectionTable<M extends Re
|
|
|
202
205
|
</EntityTableCell>
|
|
203
206
|
);
|
|
204
207
|
|
|
205
|
-
}, [size
|
|
208
|
+
}, [size]);
|
|
206
209
|
|
|
207
210
|
const collectionColumns: VirtualTableColumn[] = (() => {
|
|
208
211
|
const columnsResult: VirtualTableColumn[] = propertiesToColumns({
|
|
@@ -265,7 +268,8 @@ export const EntityCollectionTable = function EntityCollectionTable<M extends Re
|
|
|
265
268
|
width={column.width}
|
|
266
269
|
frozen={column.frozen}
|
|
267
270
|
isSelected={false}
|
|
268
|
-
size={size}
|
|
271
|
+
size={size}
|
|
272
|
+
openEntityMode={openEntityMode}/>;
|
|
269
273
|
} else if (additionalFieldsMap[columnKey]) {
|
|
270
274
|
return additionalCellRenderer(props);
|
|
271
275
|
} else if (props.columnIndex < columns.length + 1) {
|
|
@@ -292,7 +296,7 @@ export const EntityCollectionTable = function EntityCollectionTable<M extends Re
|
|
|
292
296
|
|
|
293
297
|
<div ref={ref}
|
|
294
298
|
style={style}
|
|
295
|
-
className={cls("h-full w-full flex flex-col bg-white dark:bg-
|
|
299
|
+
className={cls("h-full w-full flex flex-col bg-white dark:bg-surface-950", className)}>
|
|
296
300
|
|
|
297
301
|
<CollectionTableToolbar
|
|
298
302
|
onTextSearch={textSearchEnabled ? onTextSearch : undefined}
|
|
@@ -310,9 +314,11 @@ export const EntityCollectionTable = function EntityCollectionTable<M extends Re
|
|
|
310
314
|
inlineEditing={inlineEditing}
|
|
311
315
|
cellRenderer={cellRenderer}
|
|
312
316
|
onEntityClick={onEntityClick}
|
|
313
|
-
highlightedRow={
|
|
317
|
+
highlightedRow={(entity: Entity<M>) => Boolean(selectedEntities?.find(e => e.id === entity.id && e.path === entity.path))}
|
|
314
318
|
tableController={tableController}
|
|
315
319
|
onValueChange={onValueChange}
|
|
320
|
+
initialScroll={initialScroll}
|
|
321
|
+
onScroll={onScroll}
|
|
316
322
|
onColumnResize={onColumnResize}
|
|
317
323
|
hoverRow={hoverRow}
|
|
318
324
|
filterable={filterable}
|
|
@@ -16,7 +16,7 @@ import { OnCellValueChange, OnColumnResizeParams, UniqueFieldValidator } from ".
|
|
|
16
16
|
* @group Collection components
|
|
17
17
|
*/
|
|
18
18
|
export type EntityCollectionTableProps<M extends Record<string, any>,
|
|
19
|
-
|
|
19
|
+
USER extends User = User> = {
|
|
20
20
|
|
|
21
21
|
className?: string;
|
|
22
22
|
|
|
@@ -72,6 +72,21 @@ export type EntityCollectionTableProps<M extends Record<string, any>,
|
|
|
72
72
|
*/
|
|
73
73
|
onColumnResize?(params: OnColumnResizeParams): void;
|
|
74
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
|
+
|
|
75
90
|
/**
|
|
76
91
|
* Callback when the selected size of the table is changed
|
|
77
92
|
*/
|
|
@@ -90,7 +105,7 @@ export type EntityCollectionTableProps<M extends Record<string, any>,
|
|
|
90
105
|
|
|
91
106
|
/**
|
|
92
107
|
* Controller holding the logic for the table
|
|
93
|
-
* {@link
|
|
108
|
+
* {@link useDataSourceTableController}
|
|
94
109
|
* {@link EntityTableController}
|
|
95
110
|
*/
|
|
96
111
|
tableController: EntityTableController<M>;
|
|
@@ -103,7 +118,7 @@ export type EntityCollectionTableProps<M extends Record<string, any>,
|
|
|
103
118
|
|
|
104
119
|
inlineEditing?: boolean;
|
|
105
120
|
|
|
106
|
-
additionalFields?: AdditionalFieldDelegate<M,
|
|
121
|
+
additionalFields?: AdditionalFieldDelegate<M, USER>[];
|
|
107
122
|
|
|
108
123
|
defaultSize?: CollectionSize;
|
|
109
124
|
|
|
@@ -136,6 +151,8 @@ export type EntityCollectionTableProps<M extends Record<string, any>,
|
|
|
136
151
|
textSearchLoading?: boolean;
|
|
137
152
|
|
|
138
153
|
enablePopupIcon: boolean;
|
|
154
|
+
|
|
155
|
+
openEntityMode?: "side_panel" | "full_screen";
|
|
139
156
|
};
|
|
140
157
|
|
|
141
158
|
export type GetPropertyForProps<M extends Record<string, any>> = {
|
|
@@ -4,10 +4,12 @@ import {
|
|
|
4
4
|
CMSType,
|
|
5
5
|
Entity,
|
|
6
6
|
EntityReference,
|
|
7
|
+
ReferenceProperty,
|
|
7
8
|
ResolvedArrayProperty,
|
|
8
9
|
ResolvedNumberProperty,
|
|
9
10
|
ResolvedProperty,
|
|
10
|
-
ResolvedStringProperty
|
|
11
|
+
ResolvedStringProperty,
|
|
12
|
+
StringProperty
|
|
11
13
|
} from "../../types";
|
|
12
14
|
|
|
13
15
|
import { VirtualTableInput } from "../VirtualTable/fields/VirtualTableInput";
|
|
@@ -15,6 +17,7 @@ import { VirtualTableSelect } from "../VirtualTable/fields/VirtualTableSelect";
|
|
|
15
17
|
import { VirtualTableNumberInput } from "../VirtualTable/fields/VirtualTableNumberInput";
|
|
16
18
|
import { VirtualTableSwitch } from "../VirtualTable/fields/VirtualTableSwitch";
|
|
17
19
|
import { VirtualTableDateField } from "../VirtualTable/fields/VirtualTableDateField";
|
|
20
|
+
import { VirtualTableUserSelect } from "../VirtualTable/fields/VirtualTableUserSelect";
|
|
18
21
|
|
|
19
22
|
import { TableStorageUpload } from "./fields/TableStorageUpload";
|
|
20
23
|
import { TableReferenceField } from "./fields/TableReferenceField";
|
|
@@ -49,6 +52,8 @@ export interface PropertyTableCellProps<T extends CMSType> {
|
|
|
49
52
|
}
|
|
50
53
|
|
|
51
54
|
function isStorageProperty(property: ResolvedProperty) {
|
|
55
|
+
if (property.dataType === "string" && property.markdown)
|
|
56
|
+
return false;
|
|
52
57
|
if (property.dataType === "string" && (property as ResolvedStringProperty).storage)
|
|
53
58
|
return true;
|
|
54
59
|
if (property.dataType === "array") {
|
|
@@ -87,8 +92,8 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any>>(
|
|
|
87
92
|
} = useSelectableTableController();
|
|
88
93
|
|
|
89
94
|
const selected = selectedCell?.propertyKey === propertyKey &&
|
|
90
|
-
selectedCell?.
|
|
91
|
-
selectedCell?.
|
|
95
|
+
selectedCell?.entityPath === entity.path &&
|
|
96
|
+
selectedCell?.entityId === entity.id;
|
|
92
97
|
|
|
93
98
|
const [internalValue, setInternalValue] = useState<any | null>(value);
|
|
94
99
|
const internalValueRef = useRef(value);
|
|
@@ -147,7 +152,7 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any>>(
|
|
|
147
152
|
onValueUpdated,
|
|
148
153
|
data: entity,
|
|
149
154
|
});
|
|
150
|
-
} catch (e:any) {
|
|
155
|
+
} catch (e: any) {
|
|
151
156
|
console.error("onValueChange error", e);
|
|
152
157
|
setError(e);
|
|
153
158
|
}
|
|
@@ -191,7 +196,8 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any>>(
|
|
|
191
196
|
select({
|
|
192
197
|
width,
|
|
193
198
|
height,
|
|
194
|
-
entity,
|
|
199
|
+
entityPath: entity.path,
|
|
200
|
+
entityId: entity.id,
|
|
195
201
|
cellRect,
|
|
196
202
|
propertyKey: propertyKey as Extract<keyof M, string>
|
|
197
203
|
});
|
|
@@ -207,7 +213,8 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any>>(
|
|
|
207
213
|
setPopupCell({
|
|
208
214
|
width,
|
|
209
215
|
height,
|
|
210
|
-
entity,
|
|
216
|
+
entityPath: entity.path,
|
|
217
|
+
entityId: entity.id,
|
|
211
218
|
cellRect,
|
|
212
219
|
propertyKey: propertyKey as Extract<keyof M, string>
|
|
213
220
|
});
|
|
@@ -247,7 +254,27 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any>>(
|
|
|
247
254
|
|
|
248
255
|
if (!customField && (!customPreview || selected)) {
|
|
249
256
|
const isAStorageProperty = isStorageProperty(property);
|
|
250
|
-
if (
|
|
257
|
+
if (property.dataType === "string" && (property as StringProperty).reference?.path) {
|
|
258
|
+
const stringProperty = property as StringProperty;
|
|
259
|
+
const path = stringProperty.reference?.path as string;
|
|
260
|
+
const referenceProperty = stringProperty.reference as ReferenceProperty;
|
|
261
|
+
const referenceValue = internalValue ? new EntityReference(internalValue, path) : undefined;
|
|
262
|
+
innerComponent =
|
|
263
|
+
<TableReferenceField name={propertyKey as string}
|
|
264
|
+
internalValue={referenceValue}
|
|
265
|
+
updateValue={(v) => updateValue(v ? (v as EntityReference).id : null)}
|
|
266
|
+
disabled={disabled}
|
|
267
|
+
size={size}
|
|
268
|
+
path={path}
|
|
269
|
+
multiselect={false}
|
|
270
|
+
previewProperties={referenceProperty.previewProperties}
|
|
271
|
+
includeId={referenceProperty.includeId}
|
|
272
|
+
includeEntityLink={referenceProperty.includeEntityLink}
|
|
273
|
+
title={stringProperty.name}
|
|
274
|
+
forceFilter={referenceProperty.forceFilter}
|
|
275
|
+
/>;
|
|
276
|
+
allowScroll = false;
|
|
277
|
+
} else if (isAStorageProperty) {
|
|
251
278
|
innerComponent = <TableStorageUpload error={validationError ?? error}
|
|
252
279
|
disabled={disabled}
|
|
253
280
|
focused={selected}
|
|
@@ -306,7 +333,18 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any>>(
|
|
|
306
333
|
updateValue={updateValue}
|
|
307
334
|
/>;
|
|
308
335
|
fullHeight = true;
|
|
309
|
-
} else if (
|
|
336
|
+
} else if (stringProperty.userSelect) {
|
|
337
|
+
innerComponent = <VirtualTableUserSelect name={propertyKey as string}
|
|
338
|
+
multiple={false}
|
|
339
|
+
focused={selected}
|
|
340
|
+
disabled={disabled}
|
|
341
|
+
small={getPreviewSizeFrom(size) !== "medium"}
|
|
342
|
+
error={validationError ?? error}
|
|
343
|
+
internalValue={internalValue as string}
|
|
344
|
+
updateValue={updateValue}
|
|
345
|
+
/>;
|
|
346
|
+
fullHeight = true;
|
|
347
|
+
} else if (stringProperty.markdown || !stringProperty.storage || !stringProperty.reference) {
|
|
310
348
|
const multiline = Boolean(stringProperty.multiline) || Boolean(stringProperty.markdown);
|
|
311
349
|
innerComponent = <VirtualTableInput error={validationError ?? error}
|
|
312
350
|
disabled={disabled}
|
|
@@ -390,7 +428,7 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any>>(
|
|
|
390
428
|
size={size}
|
|
391
429
|
multiselect={true}
|
|
392
430
|
path={arrayProperty.of.path}
|
|
393
|
-
previewProperties={arrayProperty.of.
|
|
431
|
+
previewProperties={arrayProperty.of.previewKeys}
|
|
394
432
|
title={arrayProperty.name}
|
|
395
433
|
forceFilter={arrayProperty.of.forceFilter}
|
|
396
434
|
includeId={arrayProperty.of.includeId}
|