@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
package/src/types/collections.ts
CHANGED
|
@@ -17,7 +17,7 @@ import { EntityOverrides } from "./entity_overrides";
|
|
|
17
17
|
*
|
|
18
18
|
* @group Models
|
|
19
19
|
*/
|
|
20
|
-
export interface EntityCollection<M extends Record<string, any> = any,
|
|
20
|
+
export interface EntityCollection<M extends Record<string, any> = any, USER extends User = any> {
|
|
21
21
|
|
|
22
22
|
/**
|
|
23
23
|
* You can set an alias that will be used internally instead of the `path`.
|
|
@@ -51,6 +51,12 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
|
|
|
51
51
|
*/
|
|
52
52
|
path: string;
|
|
53
53
|
|
|
54
|
+
/**
|
|
55
|
+
* Optional database id of this collection. If not specified, the default
|
|
56
|
+
* database id will be used.
|
|
57
|
+
*/
|
|
58
|
+
databaseId?: string;
|
|
59
|
+
|
|
54
60
|
/**
|
|
55
61
|
* If this collection is a top level navigation entry, you can set this
|
|
56
62
|
* property to `true` to indicate that this collection is a collection group.
|
|
@@ -61,14 +67,20 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
|
|
|
61
67
|
* Icon key to use in this collection.
|
|
62
68
|
* You can use any of the icons in the Material specs:
|
|
63
69
|
* https://fonts.google.com/icons
|
|
64
|
-
* e.g. 'account_tree' or 'person'
|
|
70
|
+
* e.g. 'account_tree' or 'person'.
|
|
71
|
+
* Find all the icons in https://firecms.co/docs/icons
|
|
72
|
+
* You can also pass a React node if you want to render a custom icon.
|
|
73
|
+
* If not specified, a default icon will be used.
|
|
65
74
|
*/
|
|
66
|
-
icon?: string;
|
|
75
|
+
icon?: string | React.ReactNode;
|
|
67
76
|
|
|
68
77
|
/**
|
|
69
78
|
* Optional field used to group top level navigation entries under a~
|
|
70
79
|
* navigation view. If you set this value in a subcollection it has no
|
|
71
80
|
* effect.
|
|
81
|
+
* @deprecated This prop is deprecated and will be removed in the future.
|
|
82
|
+
* You can apply grouping by using the `navigationGroupMappings` prop in the
|
|
83
|
+
* {@link useBuildNavigationController} hook instead.
|
|
72
84
|
*/
|
|
73
85
|
group?: string;
|
|
74
86
|
|
|
@@ -77,6 +89,11 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
|
|
|
77
89
|
*/
|
|
78
90
|
properties: PropertiesOrBuilders<M>;
|
|
79
91
|
|
|
92
|
+
/**
|
|
93
|
+
* Default preview properties displayed when this collection is referenced to.
|
|
94
|
+
*/
|
|
95
|
+
previewProperties?: string[];
|
|
96
|
+
|
|
80
97
|
/**
|
|
81
98
|
* Title property of the entity. This is the property that will be used
|
|
82
99
|
* as the title in entity related views and references.
|
|
@@ -85,11 +102,10 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
|
|
|
85
102
|
titleProperty?: keyof M;
|
|
86
103
|
|
|
87
104
|
/**
|
|
88
|
-
*
|
|
89
|
-
* Defaults to `
|
|
90
|
-
* Keep in mind that you can also set this prop to individual properties.
|
|
105
|
+
* When editing an entity, you can choose to open the entity in a side dialog
|
|
106
|
+
* or in a full screen dialog. Defaults to `full_screen`.
|
|
91
107
|
*/
|
|
92
|
-
|
|
108
|
+
openEntityMode?: "side_panel" | "full_screen";
|
|
93
109
|
|
|
94
110
|
/**
|
|
95
111
|
* Order in which the properties are displayed.
|
|
@@ -101,7 +117,7 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
|
|
|
101
117
|
* `hidden` in the property definition, will be ignored.
|
|
102
118
|
* `propertiesOrder` has precedence over `hidden`.
|
|
103
119
|
* - For properties use the property key.
|
|
104
|
-
* - For additional
|
|
120
|
+
* - For additional fields use the field key.
|
|
105
121
|
* - If you have subcollections, you get a column for each subcollection,
|
|
106
122
|
* with the path (or alias) as the subcollection, prefixed with
|
|
107
123
|
* `subcollection:`. e.g. `subcollection:orders`.
|
|
@@ -112,11 +128,12 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
|
|
|
112
128
|
* `hidden` in the property definition,will be ignored.
|
|
113
129
|
* `propertiesOrder` has precedence over `hidden`.
|
|
114
130
|
*/
|
|
115
|
-
propertiesOrder?: (Extract<keyof M, string> | `subcollection:${string}`)[];
|
|
131
|
+
propertiesOrder?: (Extract<keyof M, string> | string | `subcollection:${string}` | "collectionGroupParent")[];
|
|
116
132
|
|
|
117
133
|
/**
|
|
118
134
|
* If enabled, content is loaded in batches. If `false` all entities in the
|
|
119
|
-
* collection are loaded.
|
|
135
|
+
* collection are loaded. This means that when reaching the end of the
|
|
136
|
+
* collection, the CMS will load more entities.
|
|
120
137
|
* You can specify a number to specify the pagination size (50 by default)
|
|
121
138
|
* Defaults to `true`
|
|
122
139
|
*/
|
|
@@ -132,7 +149,7 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
|
|
|
132
149
|
* Permissions the logged-in user can perform on this collection.
|
|
133
150
|
* If not specified everything defaults to `true`.
|
|
134
151
|
*/
|
|
135
|
-
permissions?: Permissions | PermissionsBuilder<EntityCollection,
|
|
152
|
+
permissions?: Permissions | PermissionsBuilder<EntityCollection, USER, M>;
|
|
136
153
|
|
|
137
154
|
/**
|
|
138
155
|
* Are the entities in this collection selectable. Defaults to `true`
|
|
@@ -151,7 +168,7 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
|
|
|
151
168
|
* is being created, updated or deleted.
|
|
152
169
|
* Useful for adding your own logic or blocking the execution of the operation.
|
|
153
170
|
*/
|
|
154
|
-
callbacks?: EntityCallbacks<M,
|
|
171
|
+
callbacks?: EntityCallbacks<M, USER>;
|
|
155
172
|
|
|
156
173
|
/**
|
|
157
174
|
* Builder for rendering additional components such as buttons in the
|
|
@@ -181,8 +198,11 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
|
|
|
181
198
|
* }
|
|
182
199
|
* }
|
|
183
200
|
* ```
|
|
201
|
+
*
|
|
202
|
+
* You can also pass the action as a string that represents the `key`, in which case it will
|
|
203
|
+
* use the action defined in the main configuration under `entityActions`.
|
|
184
204
|
*/
|
|
185
|
-
entityActions?: EntityAction<M,
|
|
205
|
+
entityActions?: (EntityAction<M, USER> | string)[];
|
|
186
206
|
|
|
187
207
|
/**
|
|
188
208
|
* Pass your own selection controller if you want to control selected
|
|
@@ -204,6 +224,7 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
|
|
|
204
224
|
* Force a filter in this view. If applied, the rest of the filters will
|
|
205
225
|
* be disabled. Filters applied with this prop cannot be changed.
|
|
206
226
|
* e.g. `forceFilter: { age: [">=", 18] }`
|
|
227
|
+
* e.g. `forceFilter: { related_user: ["==", new EntityReference("sdc43dsw2", "users")] }`
|
|
207
228
|
*/
|
|
208
229
|
forceFilter?: FilterValues<Extract<keyof M, string>>;
|
|
209
230
|
|
|
@@ -211,6 +232,7 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
|
|
|
211
232
|
* Initial filters applied to the collection this collection is related to.
|
|
212
233
|
* Defaults to none. Filters applied with this prop can be changed.
|
|
213
234
|
* e.g. `initialFilter: { age: [">=", 18] }`
|
|
235
|
+
* e.g. `initialFilter: { related_user: ["==", new EntityReference("sdc43dsw2", "users")] }`
|
|
214
236
|
*/
|
|
215
237
|
initialFilter?: FilterValues<Extract<keyof M, string>>; // setting FilterValues<M> can break defining collections by code
|
|
216
238
|
|
|
@@ -234,7 +256,7 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
|
|
|
234
256
|
* You can add additional fields to the collection view by implementing
|
|
235
257
|
* an additional field delegate.
|
|
236
258
|
*/
|
|
237
|
-
additionalFields?: AdditionalFieldDelegate<M,
|
|
259
|
+
additionalFields?: AdditionalFieldDelegate<M, USER>[];
|
|
238
260
|
|
|
239
261
|
/**
|
|
240
262
|
* Default size of the rendered collection
|
|
@@ -287,7 +309,7 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
|
|
|
287
309
|
/**
|
|
288
310
|
*
|
|
289
311
|
*/
|
|
290
|
-
exportable?: boolean | ExportConfig<
|
|
312
|
+
exportable?: boolean | ExportConfig<USER>;
|
|
291
313
|
|
|
292
314
|
/**
|
|
293
315
|
* User id of the owner of this collection. This is used only by plugins, or if you
|
|
@@ -304,6 +326,32 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
|
|
|
304
326
|
* Width of the side dialog (in pixels) when opening an entity in this collection.
|
|
305
327
|
*/
|
|
306
328
|
sideDialogWidth?: number | string;
|
|
329
|
+
|
|
330
|
+
/**
|
|
331
|
+
* Can this collection configuration be edited by the end user.
|
|
332
|
+
* Defaults to `true`.
|
|
333
|
+
* Keep in mind that you can also set this prop to individual properties.
|
|
334
|
+
* This prop has only effect if you are using the collection editor.
|
|
335
|
+
*/
|
|
336
|
+
editable?: boolean;
|
|
337
|
+
|
|
338
|
+
/**
|
|
339
|
+
* If set to true, the default values of the properties will be applied
|
|
340
|
+
* to the entity every time the entity is updated (not only when created).
|
|
341
|
+
* Defaults to false.
|
|
342
|
+
*/
|
|
343
|
+
alwaysApplyDefaultValues?: boolean;
|
|
344
|
+
|
|
345
|
+
/**
|
|
346
|
+
* If set to true, a tab including the JSON representation of the entity will be included.
|
|
347
|
+
*/
|
|
348
|
+
includeJsonView?: boolean;
|
|
349
|
+
|
|
350
|
+
/**
|
|
351
|
+
* If set to true, changes to the entity will be saved in a subcollection.
|
|
352
|
+
* This prop has no effect if the history plugin is not enabled
|
|
353
|
+
*/
|
|
354
|
+
history?: boolean;
|
|
307
355
|
}
|
|
308
356
|
|
|
309
357
|
/**
|
|
@@ -313,7 +361,7 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
|
|
|
313
361
|
*
|
|
314
362
|
* @group Models
|
|
315
363
|
*/
|
|
316
|
-
export interface CollectionActionsProps<M extends Record<string, any> = any,
|
|
364
|
+
export interface CollectionActionsProps<M extends Record<string, any> = any, USER extends User = User, EC extends EntityCollection<M> = EntityCollection<M>> {
|
|
317
365
|
/**
|
|
318
366
|
* Full collection path of this entity. This is the full path, like
|
|
319
367
|
* `users/1234/addresses`
|
|
@@ -350,7 +398,7 @@ export interface CollectionActionsProps<M extends Record<string, any> = any, Use
|
|
|
350
398
|
/**
|
|
351
399
|
* Context of the app status
|
|
352
400
|
*/
|
|
353
|
-
context: FireCMSContext<
|
|
401
|
+
context: FireCMSContext<USER>;
|
|
354
402
|
|
|
355
403
|
/**
|
|
356
404
|
* Count of the entities in this collection
|
|
@@ -412,9 +460,9 @@ export type FilterCombination<Key extends string> = Partial<Record<Key, "asc" |
|
|
|
412
460
|
*/
|
|
413
461
|
export type CollectionSize = "xs" | "s" | "m" | "l" | "xl";
|
|
414
462
|
|
|
415
|
-
export type AdditionalFieldDelegateProps<M extends Record<string, any> = any,
|
|
463
|
+
export type AdditionalFieldDelegateProps<M extends Record<string, any> = any, USER extends User = User> = {
|
|
416
464
|
entity: Entity<M>,
|
|
417
|
-
context: FireCMSContext<
|
|
465
|
+
context: FireCMSContext<USER>
|
|
418
466
|
};
|
|
419
467
|
|
|
420
468
|
/**
|
|
@@ -423,7 +471,7 @@ export type AdditionalFieldDelegateProps<M extends Record<string, any> = any, Us
|
|
|
423
471
|
* @group Models
|
|
424
472
|
*/
|
|
425
473
|
export interface AdditionalFieldDelegate<M extends Record<string, any> = any,
|
|
426
|
-
|
|
474
|
+
USER extends User = User> {
|
|
427
475
|
|
|
428
476
|
/**
|
|
429
477
|
* ID of this column. You can use this id in the `properties` field of the
|
|
@@ -444,7 +492,7 @@ export interface AdditionalFieldDelegate<M extends Record<string, any> = any,
|
|
|
444
492
|
/**
|
|
445
493
|
* Builder for the content of the cell for this column
|
|
446
494
|
*/
|
|
447
|
-
Builder?: React.ComponentType<AdditionalFieldDelegateProps<M,
|
|
495
|
+
Builder?: React.ComponentType<AdditionalFieldDelegateProps<M, USER>>;
|
|
448
496
|
|
|
449
497
|
/**
|
|
450
498
|
* If this column needs to update dynamically based on other properties,
|
|
@@ -479,21 +527,36 @@ export type EntityCustomView<M extends Record<string, any> = any> =
|
|
|
479
527
|
/**
|
|
480
528
|
* Key of this custom view.
|
|
481
529
|
*/
|
|
482
|
-
key: string
|
|
530
|
+
key: string;
|
|
531
|
+
|
|
483
532
|
/**
|
|
484
533
|
* Name of this custom view.
|
|
485
534
|
*/
|
|
486
|
-
name: string
|
|
535
|
+
name: string;
|
|
536
|
+
|
|
487
537
|
/**
|
|
488
|
-
*
|
|
489
|
-
* bottom of the panel (save buttons, delete buttons, etc.)
|
|
538
|
+
* Render this custom view in the tab of the entity view, instead of the name
|
|
490
539
|
*/
|
|
491
|
-
|
|
540
|
+
tabComponent?: React.ReactNode;
|
|
541
|
+
|
|
542
|
+
/**
|
|
543
|
+
* If set to true, the actions of the entity (save, discard,delete) will be
|
|
544
|
+
* included in the view. By default the actions are located in the right or bottom,
|
|
545
|
+
* based on the screen size. You can force the actions to be located at the bottom
|
|
546
|
+
* by setting this prop to "bottom".
|
|
547
|
+
*/
|
|
548
|
+
includeActions?: boolean | "bottom";
|
|
549
|
+
|
|
492
550
|
/**
|
|
493
551
|
* Builder for rendering the custom view
|
|
494
552
|
*/
|
|
495
553
|
Builder?: React.ComponentType<EntityCustomViewParams<M>>;
|
|
496
|
-
|
|
554
|
+
|
|
555
|
+
/**
|
|
556
|
+
* Position of this tab in the entity view. Defaults to `end`.
|
|
557
|
+
*/
|
|
558
|
+
position?: "start" | "end";
|
|
559
|
+
};
|
|
497
560
|
|
|
498
561
|
/**
|
|
499
562
|
* Parameters passed to the builder in charge of rendering a custom panel for
|
|
@@ -523,6 +586,11 @@ export interface EntityCustomViewParams<M extends Record<string, any> = any> {
|
|
|
523
586
|
* Use the form context to access the form state and methods
|
|
524
587
|
*/
|
|
525
588
|
formContext: FormContext;
|
|
589
|
+
|
|
590
|
+
/**
|
|
591
|
+
* If this is a subcollection, this is the path of the parent collections
|
|
592
|
+
*/
|
|
593
|
+
parentCollectionIds?: string[];
|
|
526
594
|
}
|
|
527
595
|
|
|
528
596
|
export type InferCollectionType<S extends EntityCollection> = S extends EntityCollection<infer M> ? M : never;
|
|
@@ -558,6 +626,12 @@ export type EntityTableController<M extends Record<string, any> = any> = {
|
|
|
558
626
|
clearFilter?: () => void;
|
|
559
627
|
itemCount?: number;
|
|
560
628
|
setItemCount?: (itemCount: number) => void;
|
|
629
|
+
initialScroll?: number;
|
|
630
|
+
onScroll?: (props: {
|
|
631
|
+
scrollDirection: "forward" | "backward",
|
|
632
|
+
scrollOffset: number,
|
|
633
|
+
scrollUpdateWasRequested: boolean
|
|
634
|
+
}) => void;
|
|
561
635
|
paginationEnabled?: boolean;
|
|
562
636
|
pageSize?: number;
|
|
563
637
|
checkFilterCombination?: (filterValues: FilterValues<any>,
|
|
@@ -573,5 +647,6 @@ export type SelectedCellProps<M extends Record<string, any>> = {
|
|
|
573
647
|
cellRect: DOMRect;
|
|
574
648
|
width: number;
|
|
575
649
|
height: number;
|
|
576
|
-
|
|
650
|
+
entityPath: string;
|
|
651
|
+
entityId: string;
|
|
577
652
|
};
|
|
@@ -4,6 +4,7 @@ import { FireCMSPlugin } from "./plugins";
|
|
|
4
4
|
import { EntityCustomView } from "./collections";
|
|
5
5
|
import { Locale } from "./locales";
|
|
6
6
|
import { PropertyConfig } from "./property_config";
|
|
7
|
+
import { EntityAction } from "./entity_actions";
|
|
7
8
|
|
|
8
9
|
export type CustomizationController = {
|
|
9
10
|
|
|
@@ -26,6 +27,14 @@ export type CustomizationController = {
|
|
|
26
27
|
*/
|
|
27
28
|
entityViews?: EntityCustomView[];
|
|
28
29
|
|
|
30
|
+
/**
|
|
31
|
+
* List of actions that can be performed on entities.
|
|
32
|
+
* These actions are displayed in the entity view and in the collection view.
|
|
33
|
+
* You can later reuse these actions in the `entityActions` prop of a collection,
|
|
34
|
+
* by specifying the `key` of the action.
|
|
35
|
+
*/
|
|
36
|
+
entityActions?: EntityAction<any, any>[];
|
|
37
|
+
|
|
29
38
|
/**
|
|
30
39
|
* Format of the dates in the CMS.
|
|
31
40
|
* Defaults to 'MMMM dd, yyyy, HH:mm:ss'
|
package/src/types/datasource.ts
CHANGED
|
@@ -9,6 +9,7 @@ import { FireCMSContext } from "./firecms_context";
|
|
|
9
9
|
export interface FetchEntityProps<M extends Record<string, any> = any> {
|
|
10
10
|
path: string;
|
|
11
11
|
entityId: string;
|
|
12
|
+
databaseId?: string;
|
|
12
13
|
collection?: EntityCollection<M, any>
|
|
13
14
|
}
|
|
14
15
|
|
|
@@ -63,6 +64,7 @@ export interface SaveEntityProps<M extends Record<string, any> = any> {
|
|
|
63
64
|
*/
|
|
64
65
|
export interface DeleteEntityProps<M extends Record<string, any> = any> {
|
|
65
66
|
entity: Entity<M>;
|
|
67
|
+
collection?: EntityCollection<M> | ResolvedEntityCollection<M>;
|
|
66
68
|
}
|
|
67
69
|
|
|
68
70
|
/**
|
|
@@ -137,6 +139,7 @@ export interface DataSource {
|
|
|
137
139
|
fetchEntity<M extends Record<string, any> = any>({
|
|
138
140
|
path,
|
|
139
141
|
entityId,
|
|
142
|
+
databaseId,
|
|
140
143
|
collection
|
|
141
144
|
}: FetchEntityProps<M>
|
|
142
145
|
): Promise<Entity<M> | undefined>;
|
|
@@ -181,7 +184,8 @@ export interface DataSource {
|
|
|
181
184
|
*/
|
|
182
185
|
deleteEntity<M extends Record<string, any> = any>(
|
|
183
186
|
{
|
|
184
|
-
entity
|
|
187
|
+
entity,
|
|
188
|
+
collection
|
|
185
189
|
}: DeleteEntityProps<M>
|
|
186
190
|
): Promise<void>;
|
|
187
191
|
|
|
@@ -190,7 +194,7 @@ export interface DataSource {
|
|
|
190
194
|
* @param path Collection path
|
|
191
195
|
* @param name of the property
|
|
192
196
|
* @param value
|
|
193
|
-
* @param
|
|
197
|
+
* @param collection
|
|
194
198
|
* @param entityId
|
|
195
199
|
* @return `true` if there are no other fields besides the given entity
|
|
196
200
|
*/
|
|
@@ -198,13 +202,14 @@ export interface DataSource {
|
|
|
198
202
|
path: string,
|
|
199
203
|
name: string,
|
|
200
204
|
value: any,
|
|
201
|
-
entityId?: string
|
|
205
|
+
entityId?: string,
|
|
206
|
+
collection?: EntityCollection
|
|
202
207
|
): Promise<boolean>;
|
|
203
208
|
|
|
204
209
|
/**
|
|
205
210
|
* Generate an id for a new entity
|
|
206
211
|
*/
|
|
207
|
-
generateEntityId(path: string): string;
|
|
212
|
+
generateEntityId(path: string, collection: EntityCollection): string;
|
|
208
213
|
|
|
209
214
|
/**
|
|
210
215
|
* Count the number of entities in a collection
|
|
@@ -238,19 +243,11 @@ export type FilterCombinationValidProps = {
|
|
|
238
243
|
sortBy?: [string, "asc" | "desc"];
|
|
239
244
|
};
|
|
240
245
|
|
|
241
|
-
export type SaveEntityDelegateProps<M extends Record<string, any> = any> =
|
|
246
|
+
export type SaveEntityDelegateProps<M extends Record<string, any> = any> = SaveEntityProps<M>;
|
|
242
247
|
|
|
243
|
-
export type FetchCollectionDelegateProps<M extends Record<string, any> = any> =
|
|
244
|
-
Omit<FetchCollectionProps<M>, "collection">
|
|
245
|
-
& {
|
|
246
|
-
isCollectionGroup?: boolean
|
|
247
|
-
};
|
|
248
|
+
export type FetchCollectionDelegateProps<M extends Record<string, any> = any> = FetchCollectionProps<M>;
|
|
248
249
|
|
|
249
|
-
export type ListenCollectionDelegateProps<M extends Record<string, any> = any> =
|
|
250
|
-
ListenCollectionProps<M>
|
|
251
|
-
& {
|
|
252
|
-
isCollectionGroup?: boolean;
|
|
253
|
-
};
|
|
250
|
+
export type ListenCollectionDelegateProps<M extends Record<string, any> = any> = ListenCollectionProps<M>;
|
|
254
251
|
|
|
255
252
|
export interface DataSourceDelegate {
|
|
256
253
|
|
|
@@ -321,7 +318,7 @@ export interface DataSourceDelegate {
|
|
|
321
318
|
fetchEntity<M extends Record<string, any> = any>({
|
|
322
319
|
path,
|
|
323
320
|
entityId,
|
|
324
|
-
}:
|
|
321
|
+
}: FetchEntityProps<M>): Promise<Entity<M> | undefined>;
|
|
325
322
|
|
|
326
323
|
/**
|
|
327
324
|
* Get realtime updates on one entity.
|
|
@@ -337,7 +334,7 @@ export interface DataSourceDelegate {
|
|
|
337
334
|
entityId,
|
|
338
335
|
onUpdate,
|
|
339
336
|
onError
|
|
340
|
-
}:
|
|
337
|
+
}: ListenEntityProps<M>): () => void;
|
|
341
338
|
|
|
342
339
|
/**
|
|
343
340
|
* Save entity to the specified path
|
|
@@ -366,14 +363,15 @@ export interface DataSourceDelegate {
|
|
|
366
363
|
* @param name of the property
|
|
367
364
|
* @param value
|
|
368
365
|
* @param entityId
|
|
366
|
+
* @param collection
|
|
369
367
|
* @return `true` if there are no other fields besides the given entity
|
|
370
368
|
*/
|
|
371
|
-
checkUniqueField(path: string, name: string, value: any, entityId?: string): Promise<boolean>;
|
|
369
|
+
checkUniqueField(path: string, name: string, value: any, entityId?: string, collection?: EntityCollection): Promise<boolean>;
|
|
372
370
|
|
|
373
371
|
/**
|
|
374
372
|
* Generate an id for a new entity
|
|
375
373
|
*/
|
|
376
|
-
generateEntityId(path: string): string;
|
|
374
|
+
generateEntityId(path: string, collection?: EntityCollection): string;
|
|
377
375
|
|
|
378
376
|
/**
|
|
379
377
|
* Count the number of entities in a collection
|
|
@@ -384,7 +382,9 @@ export interface DataSourceDelegate {
|
|
|
384
382
|
* Check if the given filter combination is valid
|
|
385
383
|
* @param props
|
|
386
384
|
*/
|
|
387
|
-
isFilterCombinationValid?(props: Omit<FilterCombinationValidProps, "collection">
|
|
385
|
+
isFilterCombinationValid?(props: Omit<FilterCombinationValidProps, "collection"> & {
|
|
386
|
+
databaseId?: string
|
|
387
|
+
}): boolean;
|
|
388
388
|
|
|
389
389
|
/**
|
|
390
390
|
* Get the object to generate the current time in the datasource
|
|
@@ -400,6 +400,7 @@ export interface DataSourceDelegate {
|
|
|
400
400
|
initTextSearch?: (props: {
|
|
401
401
|
context: FireCMSContext,
|
|
402
402
|
path: string,
|
|
403
|
+
databaseId?: string,
|
|
403
404
|
collection: EntityCollection,
|
|
404
405
|
parentCollectionIds?: string[]
|
|
405
406
|
}) => Promise<boolean>;
|
|
@@ -15,19 +15,23 @@ export interface DialogsController {
|
|
|
15
15
|
* Open a dialog
|
|
16
16
|
* @param props
|
|
17
17
|
*/
|
|
18
|
-
open: (props: DialogControllerEntryProps) => { closeDialog: () => void };
|
|
18
|
+
open: <T extends object = object>(props: DialogControllerEntryProps<T>) => { closeDialog: () => void };
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
/**
|
|
22
22
|
* Props used to open a side dialog
|
|
23
23
|
* @group Hooks and utilities
|
|
24
24
|
*/
|
|
25
|
-
export interface DialogControllerEntryProps {
|
|
25
|
+
export interface DialogControllerEntryProps<T extends object = object> {
|
|
26
26
|
|
|
27
27
|
key: string;
|
|
28
28
|
/**
|
|
29
29
|
* The component type that will be rendered
|
|
30
30
|
*/
|
|
31
|
-
Component: React.ComponentType<{ open: boolean, closeDialog: () => void }>;
|
|
31
|
+
Component: React.ComponentType<{ open: boolean, closeDialog: () => void } & T>;
|
|
32
|
+
/**
|
|
33
|
+
* Props to pass to the dialog component
|
|
34
|
+
*/
|
|
35
|
+
props?: T;
|
|
32
36
|
|
|
33
37
|
}
|
package/src/types/entities.ts
CHANGED
|
@@ -8,7 +8,7 @@ export type EntityStatus = "new" | "existing" | "copy";
|
|
|
8
8
|
* Representation of an entity fetched from the datasource
|
|
9
9
|
* @group Models
|
|
10
10
|
*/
|
|
11
|
-
export interface Entity<M extends object> {
|
|
11
|
+
export interface Entity<M extends object = any> {
|
|
12
12
|
|
|
13
13
|
/**
|
|
14
14
|
* ID of the entity
|
|
@@ -25,6 +25,8 @@ export interface Entity<M extends object> {
|
|
|
25
25
|
* Current values
|
|
26
26
|
*/
|
|
27
27
|
values: EntityValues<M>;
|
|
28
|
+
|
|
29
|
+
databaseId?: string;
|
|
28
30
|
}
|
|
29
31
|
|
|
30
32
|
/**
|
|
@@ -48,9 +50,15 @@ export class EntityReference {
|
|
|
48
50
|
*/
|
|
49
51
|
readonly path: string;
|
|
50
52
|
|
|
51
|
-
|
|
53
|
+
/**
|
|
54
|
+
* Optional database ID where the entity is stored (if multiple databases are used)
|
|
55
|
+
*/
|
|
56
|
+
readonly databaseId?: string;
|
|
57
|
+
|
|
58
|
+
constructor(id: string, path: string, databaseId?: string) {
|
|
52
59
|
this.id = id;
|
|
53
60
|
this.path = path;
|
|
61
|
+
this.databaseId = databaseId;
|
|
54
62
|
}
|
|
55
63
|
|
|
56
64
|
get pathWithId() {
|
|
@@ -4,17 +4,31 @@ import { Entity } from "./entities";
|
|
|
4
4
|
import { EntityCollection, SelectionController } from "./collections";
|
|
5
5
|
import { User } from "./user";
|
|
6
6
|
import { SideEntityController } from "./side_entity_controller";
|
|
7
|
+
import { FormContext } from "./fields";
|
|
7
8
|
|
|
8
9
|
/**
|
|
9
10
|
* An entity action is a custom action that can be performed on an entity.
|
|
10
11
|
* They are displayed in the entity view and in the collection view.
|
|
11
12
|
*/
|
|
12
|
-
export type EntityAction<M extends object = any,
|
|
13
|
+
export type EntityAction<M extends object = any, USER extends User = User> = {
|
|
13
14
|
/**
|
|
14
15
|
* Title of the action
|
|
15
16
|
*/
|
|
16
17
|
name: string;
|
|
17
18
|
|
|
19
|
+
/**
|
|
20
|
+
* Key of the action. You only need to provide this if you want to
|
|
21
|
+
* override the default actions, or if you are not passing the action
|
|
22
|
+
* directly to the `entityActions` prop of a collection.
|
|
23
|
+
* You can define your actions at the app level, in which case you
|
|
24
|
+
* must provide a key.
|
|
25
|
+
* The default actions are:
|
|
26
|
+
* - edit
|
|
27
|
+
* - delete
|
|
28
|
+
* - copy
|
|
29
|
+
*/
|
|
30
|
+
key?: string;
|
|
31
|
+
|
|
18
32
|
/**
|
|
19
33
|
* Icon of the action
|
|
20
34
|
*/
|
|
@@ -24,7 +38,13 @@ export type EntityAction<M extends object = any, UserType extends User = User> =
|
|
|
24
38
|
* Callback when the action is clicked
|
|
25
39
|
* @param props
|
|
26
40
|
*/
|
|
27
|
-
onClick: (props: EntityActionClickProps<M,
|
|
41
|
+
onClick: (props: EntityActionClickProps<M, USER>) => Promise<void> | void;
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Optional callback in case you want to disable the action
|
|
45
|
+
* @param props
|
|
46
|
+
*/
|
|
47
|
+
isEnabled?: (props: EntityActionClickProps<M, USER>) => boolean;
|
|
28
48
|
|
|
29
49
|
/**
|
|
30
50
|
* Show this action collapsed in the menu of the collection view.
|
|
@@ -40,17 +60,60 @@ export type EntityAction<M extends object = any, UserType extends User = User> =
|
|
|
40
60
|
|
|
41
61
|
}
|
|
42
62
|
|
|
43
|
-
export type EntityActionClickProps<M extends object,
|
|
44
|
-
entity
|
|
45
|
-
context: FireCMSContext<
|
|
63
|
+
export type EntityActionClickProps<M extends object, USER extends User = User> = {
|
|
64
|
+
entity?: Entity<M>;
|
|
65
|
+
context: FireCMSContext<USER>;
|
|
66
|
+
|
|
46
67
|
fullPath?: string;
|
|
68
|
+
fullIdPath?: string;
|
|
47
69
|
collection?: EntityCollection<M>;
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Optional form context, present if the action is being called from a form.
|
|
73
|
+
* This allows you to access the form state and methods, including modifying the form values.
|
|
74
|
+
*/
|
|
75
|
+
formContext?: FormContext;
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Present if this actions is being called from a side dialog only
|
|
79
|
+
*/
|
|
80
|
+
sideEntityController?: SideEntityController;
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Is the action being called from the collection view or from the entity form view?
|
|
84
|
+
*/
|
|
85
|
+
view: "collection" | "form";
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* If the action is rendered in the form, is it open in a side panel or full screen?
|
|
89
|
+
*/
|
|
90
|
+
openEntityMode: "side_panel" | "full_screen";
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Optional selection controller, present if the action is being called from a collection view
|
|
94
|
+
*/
|
|
48
95
|
selectionController?: SelectionController;
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Optional highlight function to highlight the entity in the collection view
|
|
99
|
+
* @param entity
|
|
100
|
+
*/
|
|
49
101
|
highlightEntity?: (entity: Entity<any>) => void;
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Optional unhighlight function to remove the highlight from the entity in the collection view
|
|
105
|
+
* @param entity
|
|
106
|
+
*/
|
|
50
107
|
unhighlightEntity?: (entity: Entity<any>) => void;
|
|
51
|
-
|
|
108
|
+
|
|
52
109
|
/**
|
|
53
|
-
*
|
|
110
|
+
* Optional function to navigate back (e.g. when deleting an entity or navigating from a form)
|
|
54
111
|
*/
|
|
55
|
-
|
|
112
|
+
navigateBack?: () => void;
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Callback to be called when the collection changes, e.g. after an entity is deleted or created.
|
|
116
|
+
*/
|
|
117
|
+
onCollectionChange?: () => void;
|
|
118
|
+
|
|
56
119
|
};
|