@firecms/core 3.0.0-canary.19 → 3.0.0-canary.191
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/dist/app/AppBar.d.ts +12 -0
- package/dist/app/Drawer.d.ts +16 -0
- package/dist/app/Scaffold.d.ts +30 -0
- package/dist/app/index.d.ts +4 -0
- package/dist/app/useApp.d.ts +16 -0
- package/dist/components/ArrayContainer.d.ts +23 -6
- package/dist/components/CircularProgressCenter.d.ts +1 -1
- package/dist/components/ClearFilterSortButton.d.ts +5 -0
- package/dist/components/{DeleteConfirmationDialog.d.ts → ConfirmationDialog.d.ts} +1 -1
- package/dist/components/EntityCollectionTable/EntityCollectionRowActions.d.ts +13 -13
- package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +2 -2
- package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +22 -6
- package/dist/components/EntityCollectionTable/PropertyTableCell.d.ts +1 -0
- package/dist/components/EntityCollectionTable/column_utils.d.ts +1 -2
- package/dist/components/EntityCollectionTable/fields/TableReferenceField.d.ts +3 -1
- package/dist/components/EntityCollectionTable/index.d.ts +1 -1
- package/dist/components/EntityCollectionTable/internal/CollectionTableToolbar.d.ts +1 -4
- package/dist/components/EntityCollectionTable/internal/EntityTableCell.d.ts +2 -2
- package/dist/components/EntityCollectionTable/internal/popup_field/PopupFormField.d.ts +7 -4
- package/dist/components/EntityCollectionView/EntityCollectionView.d.ts +16 -2
- package/dist/components/EntityCollectionView/EntityCollectionViewStartActions.d.ts +11 -0
- package/dist/components/EntityCollectionView/utils.d.ts +3 -0
- package/dist/components/EntityPreview.d.ts +5 -4
- package/dist/components/ErrorView.d.ts +1 -1
- package/dist/components/HomePage/DefaultHomePage.d.ts +1 -1
- package/dist/components/HomePage/NavigationCardBinding.d.ts +1 -1
- package/dist/components/PropertyConfigBadge.d.ts +2 -1
- package/dist/components/PropertyIdCopyTooltip.d.ts +8 -0
- package/dist/components/ReferenceWidget.d.ts +3 -1
- package/dist/components/SelectableTable/SelectableTable.d.ts +13 -3
- package/dist/components/SelectableTable/filters/ReferenceFilterField.d.ts +2 -1
- package/dist/components/UnsavedChangesDialog.d.ts +8 -0
- package/dist/components/VirtualTable/VirtualTableProps.d.ts +28 -12
- package/dist/components/VirtualTable/types.d.ts +3 -3
- package/dist/components/{EntityCollectionTable/internal → common}/default_entity_actions.d.ts +1 -3
- package/dist/components/common/index.d.ts +2 -1
- package/dist/components/common/table_height.d.ts +5 -0
- package/dist/components/common/types.d.ts +4 -6
- package/dist/components/common/useColumnsIds.d.ts +3 -1
- package/dist/components/common/{useDataSourceEntityCollectionTableController.d.ts → useDataSourceTableController.d.ts} +13 -2
- package/dist/components/common/useDebouncedCallback.d.ts +1 -0
- package/dist/components/common/useScrollRestoration.d.ts +14 -0
- package/dist/components/index.d.ts +4 -2
- package/dist/contexts/BreacrumbsContext.d.ts +8 -0
- package/dist/{components/FireCMSAppBar.d.ts → core/DefaultAppBar.d.ts} +6 -9
- package/dist/core/DefaultDrawer.d.ts +19 -0
- package/dist/core/DrawerNavigationItem.d.ts +10 -0
- package/dist/core/EntityEditView.d.ts +31 -11
- package/dist/core/EntityEditViewFormActions.d.ts +2 -0
- package/dist/core/FireCMS.d.ts +2 -2
- package/dist/core/FireCMSRouter.d.ts +4 -0
- package/dist/core/NavigationRoutes.d.ts +2 -3
- package/dist/core/SideDialogs.d.ts +4 -2
- package/dist/core/index.d.ts +4 -4
- package/dist/form/EntityForm.d.ts +36 -68
- package/dist/form/EntityFormActions.d.ts +16 -0
- package/dist/form/PropertyFieldBinding.d.ts +1 -1
- package/dist/form/components/ErrorFocus.d.ts +1 -1
- package/dist/form/components/FieldHelperText.d.ts +3 -3
- package/dist/form/components/FormEntry.d.ts +6 -0
- package/dist/form/components/FormLayout.d.ts +5 -0
- package/dist/form/components/LabelWithIcon.d.ts +1 -1
- package/dist/form/components/LabelWithIconAndTooltip.d.ts +15 -0
- package/dist/form/components/StorageItemPreview.d.ts +4 -4
- package/dist/form/components/index.d.ts +3 -1
- package/dist/form/field_bindings/ArrayCustomShapedFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/ArrayOfReferencesFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/BlockFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/KeyValueFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/MapFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/MarkdownEditorFieldBinding.d.ts +11 -0
- package/dist/form/field_bindings/{MultiSelectBinding.d.ts → MultiSelectFieldBinding.d.ts} +1 -1
- package/dist/form/field_bindings/ReadOnlyFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/ReferenceFieldBinding.d.ts +2 -2
- package/dist/form/field_bindings/RepeatFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/SelectFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +3 -5
- package/dist/form/field_bindings/SwitchFieldBinding.d.ts +1 -2
- package/dist/form/field_bindings/TextFieldBinding.d.ts +1 -1
- package/dist/form/index.d.ts +16 -18
- package/dist/form/useClearRestoreValue.d.ts +2 -2
- package/dist/hooks/data/delete.d.ts +4 -4
- package/dist/hooks/data/save.d.ts +4 -5
- package/dist/hooks/data/useCollectionFetch.d.ts +1 -1
- package/dist/hooks/data/useEntityFetch.d.ts +4 -3
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/useAuthController.d.ts +1 -1
- package/dist/hooks/useBreadcrumbsController.d.ts +26 -0
- package/dist/hooks/useBuildNavigationController.d.ts +7 -5
- package/dist/hooks/useFireCMSContext.d.ts +1 -1
- package/dist/hooks/useModeController.d.ts +1 -2
- package/dist/hooks/useProjectLog.d.ts +8 -2
- package/dist/hooks/useResolvedNavigationFrom.d.ts +3 -3
- package/dist/hooks/useValidateAuthenticator.d.ts +4 -8
- package/dist/index.d.ts +1 -0
- package/dist/index.es.js +22037 -14330
- package/dist/index.es.js.map +1 -1
- package/dist/index.umd.js +24386 -588
- package/dist/index.umd.js.map +1 -1
- package/dist/internal/useBuildDataSource.d.ts +1 -16
- package/dist/internal/useUnsavedChangesDialog.d.ts +7 -9
- package/dist/preview/PropertyPreviewProps.d.ts +6 -1
- package/dist/preview/components/EnumValuesChip.d.ts +1 -1
- package/dist/preview/components/ReferencePreview.d.ts +3 -2
- package/dist/preview/components/StorageThumbnail.d.ts +2 -1
- package/dist/preview/components/UrlComponentPreview.d.ts +2 -1
- package/dist/preview/util.d.ts +3 -3
- package/dist/routes/CustomCMSRoute.d.ts +4 -0
- package/dist/routes/FireCMSRoute.d.ts +1 -0
- package/dist/routes/HomePageRoute.d.ts +3 -0
- package/dist/types/auth.d.ts +8 -10
- package/dist/types/collections.d.ts +71 -22
- package/dist/types/datasource.d.ts +52 -36
- package/dist/types/dialogs_controller.d.ts +7 -3
- package/dist/types/entities.d.ts +7 -2
- package/dist/types/entity_actions.d.ts +28 -4
- package/dist/types/entity_callbacks.d.ts +16 -16
- package/dist/types/entity_overrides.d.ts +2 -2
- package/dist/types/export_import.d.ts +4 -4
- package/dist/types/fields.d.ts +71 -42
- package/dist/types/firecms.d.ts +6 -2
- package/dist/types/firecms_context.d.ts +1 -1
- package/dist/types/index.d.ts +0 -1
- package/dist/types/navigation.d.ts +32 -14
- package/dist/types/permissions.d.ts +4 -4
- package/dist/types/plugins.d.ts +23 -12
- package/dist/types/properties.d.ts +52 -24
- package/dist/types/property_config.d.ts +0 -2
- package/dist/types/side_dialogs_controller.d.ts +10 -0
- package/dist/types/side_entity_controller.d.ts +1 -1
- package/dist/types/storage.d.ts +86 -3
- package/dist/types/user.d.ts +1 -0
- package/dist/util/builders.d.ts +3 -3
- package/dist/util/entities.d.ts +3 -3
- package/dist/util/entity_actions.d.ts +2 -0
- package/dist/util/entity_cache.d.ts +23 -0
- package/dist/util/icon_list.d.ts +5 -1
- package/dist/util/icon_synonyms.d.ts +1 -98
- package/dist/util/icons.d.ts +6 -3
- package/dist/util/index.d.ts +2 -0
- package/dist/util/navigation_from_path.d.ts +5 -1
- package/dist/util/navigation_utils.d.ts +14 -3
- package/dist/util/objects.d.ts +2 -1
- package/dist/util/permissions.d.ts +4 -4
- package/dist/util/plurals.d.ts +0 -2
- package/dist/util/property_utils.d.ts +3 -3
- package/dist/util/resolutions.d.ts +30 -16
- package/dist/util/storage.d.ts +23 -2
- package/dist/util/useStorageUploadController.d.ts +3 -3
- package/package.json +61 -48
- package/src/app/AppBar.tsx +18 -0
- package/src/app/Drawer.tsx +24 -0
- package/src/app/Scaffold.tsx +243 -0
- package/src/app/index.ts +4 -0
- package/src/app/useApp.tsx +32 -0
- package/src/components/ArrayContainer.tsx +126 -40
- package/src/components/CircularProgressCenter.tsx +2 -2
- package/src/components/ClearFilterSortButton.tsx +41 -0
- package/src/components/{DeleteConfirmationDialog.tsx → ConfirmationDialog.tsx} +3 -3
- package/src/components/DeleteEntityDialog.tsx +10 -19
- package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +54 -37
- package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +38 -31
- package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +30 -9
- package/src/components/EntityCollectionTable/PropertyTableCell.tsx +47 -39
- package/src/components/EntityCollectionTable/column_utils.tsx +3 -3
- package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +30 -16
- package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +19 -17
- package/src/components/EntityCollectionTable/index.tsx +1 -1
- package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +31 -36
- package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +36 -34
- package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +20 -8
- package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +81 -80
- package/src/components/EntityCollectionView/EntityCollectionView.tsx +206 -112
- package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +4 -2
- package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +68 -0
- package/src/components/EntityCollectionView/useSelectionController.tsx +20 -7
- package/src/components/EntityCollectionView/utils.ts +19 -0
- package/src/components/EntityPreview.tsx +62 -52
- package/src/components/EntityView.tsx +10 -10
- package/src/components/ErrorView.tsx +4 -4
- package/src/components/HomePage/DefaultHomePage.tsx +26 -19
- package/src/components/HomePage/FavouritesView.tsx +6 -11
- package/src/components/HomePage/NavigationCard.tsx +3 -3
- package/src/components/HomePage/NavigationCardBinding.tsx +5 -10
- package/src/components/HomePage/NavigationGroup.tsx +2 -2
- package/src/components/HomePage/SmallNavigationCard.tsx +5 -6
- package/src/components/NotFoundPage.tsx +2 -2
- package/src/components/PropertyConfigBadge.tsx +9 -3
- package/src/components/PropertyIdCopyTooltip.tsx +47 -0
- package/src/components/ReferenceTable/ReferenceSelectionTable.tsx +19 -13
- package/src/components/ReferenceWidget.tsx +21 -11
- package/src/components/SearchIconsView.tsx +10 -7
- package/src/components/SelectableTable/SelectableTable.tsx +27 -12
- package/src/components/SelectableTable/filters/BooleanFilterField.tsx +2 -3
- package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +25 -8
- package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +36 -12
- package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +92 -23
- package/src/components/UnsavedChangesDialog.tsx +42 -0
- package/src/components/VirtualTable/VirtualTable.tsx +96 -48
- package/src/components/VirtualTable/VirtualTableCell.tsx +1 -9
- package/src/components/VirtualTable/VirtualTableHeader.tsx +10 -10
- package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +2 -2
- package/src/components/VirtualTable/VirtualTableProps.tsx +33 -14
- package/src/components/VirtualTable/VirtualTableRow.tsx +5 -6
- package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +5 -5
- package/src/components/VirtualTable/fields/VirtualTableInput.tsx +3 -2
- package/src/components/VirtualTable/fields/VirtualTableNumberInput.tsx +2 -1
- package/src/components/VirtualTable/fields/VirtualTableSelect.tsx +16 -28
- package/src/components/VirtualTable/types.tsx +2 -3
- package/src/components/{EntityCollectionTable/internal → common}/default_entity_actions.tsx +33 -40
- package/src/components/common/index.ts +2 -1
- package/src/components/{VirtualTable/common.tsx → common/table_height.tsx} +5 -2
- package/src/components/common/types.tsx +4 -6
- package/src/components/common/useColumnsIds.tsx +24 -3
- package/src/components/common/useDataSourceTableController.tsx +420 -0
- package/src/components/common/useDebouncedCallback.tsx +20 -0
- package/src/components/common/useScrollRestoration.tsx +68 -0
- package/src/components/common/useTableSearchHelper.ts +53 -12
- package/src/components/index.tsx +4 -2
- package/src/contexts/BreacrumbsContext.tsx +38 -0
- package/src/contexts/DialogsProvider.tsx +5 -4
- package/src/contexts/ModeController.tsx +1 -3
- package/src/contexts/SnackbarProvider.tsx +2 -0
- package/src/core/DefaultAppBar.tsx +207 -0
- package/src/core/DefaultDrawer.tsx +185 -0
- package/src/core/DrawerNavigationItem.tsx +66 -0
- package/src/core/EntityEditView.tsx +358 -480
- package/src/core/EntityEditViewFormActions.tsx +198 -0
- package/src/core/EntitySidePanel.tsx +87 -17
- package/src/core/FireCMS.tsx +56 -49
- package/src/core/FireCMSRouter.tsx +17 -0
- package/src/core/NavigationRoutes.tsx +28 -38
- package/src/core/SideDialogs.tsx +22 -12
- package/src/core/field_configs.tsx +11 -12
- package/src/core/index.tsx +6 -5
- package/src/form/EntityForm.tsx +568 -546
- package/src/form/EntityFormActions.tsx +168 -0
- package/src/form/PropertyFieldBinding.tsx +85 -44
- package/src/form/components/CustomIdField.tsx +6 -2
- package/src/form/components/FieldHelperText.tsx +4 -4
- package/src/form/components/FormEntry.tsx +22 -0
- package/src/form/components/FormLayout.tsx +16 -0
- package/src/form/components/LabelWithIcon.tsx +30 -19
- package/src/form/components/LabelWithIconAndTooltip.tsx +28 -0
- package/src/form/components/StorageItemPreview.tsx +22 -12
- package/src/form/components/StorageUploadProgress.tsx +4 -5
- package/src/form/components/index.tsx +3 -1
- package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +31 -19
- package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +47 -35
- package/src/form/field_bindings/BlockFieldBinding.tsx +56 -34
- package/src/form/field_bindings/DateTimeFieldBinding.tsx +18 -14
- package/src/form/field_bindings/KeyValueFieldBinding.tsx +60 -51
- package/src/form/field_bindings/MapFieldBinding.tsx +71 -54
- package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +153 -0
- package/src/form/field_bindings/{MultiSelectBinding.tsx → MultiSelectFieldBinding.tsx} +25 -20
- package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +11 -16
- package/src/form/field_bindings/ReferenceFieldBinding.tsx +42 -31
- package/src/form/field_bindings/RepeatFieldBinding.tsx +56 -35
- package/src/form/field_bindings/SelectFieldBinding.tsx +22 -14
- package/src/form/field_bindings/StorageUploadFieldBinding.tsx +42 -50
- package/src/form/field_bindings/SwitchFieldBinding.tsx +29 -24
- package/src/form/field_bindings/TextFieldBinding.tsx +28 -24
- package/src/form/index.tsx +16 -37
- package/src/form/useClearRestoreValue.tsx +2 -2
- package/src/form/validation.ts +13 -23
- package/src/hooks/data/delete.ts +6 -5
- package/src/hooks/data/save.ts +13 -9
- package/src/hooks/data/useCollectionFetch.tsx +3 -3
- package/src/hooks/data/useDataSource.tsx +11 -3
- package/src/hooks/data/useEntityFetch.tsx +10 -6
- package/src/hooks/index.tsx +1 -0
- package/src/hooks/useAuthController.tsx +1 -1
- package/src/hooks/useBreadcrumbsController.tsx +31 -0
- package/src/hooks/useBuildLocalConfigurationPersistence.tsx +8 -10
- package/src/hooks/useBuildModeController.tsx +22 -29
- package/src/hooks/useBuildNavigationController.tsx +159 -52
- package/src/hooks/useFireCMSContext.tsx +5 -5
- package/src/hooks/useLargeLayout.tsx +0 -35
- package/src/hooks/useModeController.tsx +1 -2
- package/src/hooks/useProjectLog.tsx +32 -10
- package/src/hooks/useResolvedNavigationFrom.tsx +10 -12
- package/src/hooks/useValidateAuthenticator.tsx +17 -37
- package/src/index.ts +1 -0
- package/src/internal/useBuildDataSource.ts +72 -82
- package/src/internal/useBuildSideDialogsController.tsx +4 -2
- package/src/internal/useBuildSideEntityController.tsx +178 -70
- package/src/internal/useUnsavedChangesDialog.tsx +127 -91
- package/src/preview/PropertyPreview.tsx +17 -24
- package/src/preview/PropertyPreviewProps.tsx +7 -1
- package/src/preview/components/BooleanPreview.tsx +2 -2
- package/src/preview/components/EmptyValue.tsx +1 -1
- package/src/preview/components/EnumValuesChip.tsx +2 -2
- package/src/preview/components/ImagePreview.tsx +25 -36
- package/src/preview/components/ReferencePreview.tsx +22 -33
- package/src/preview/components/StorageThumbnail.tsx +5 -1
- package/src/preview/components/UrlComponentPreview.tsx +60 -28
- package/src/preview/property_previews/ArrayOfMapsPreview.tsx +2 -3
- package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +4 -3
- package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +2 -3
- package/src/preview/property_previews/ArrayOfStringsPreview.tsx +1 -2
- package/src/preview/property_previews/ArrayOneOfPreview.tsx +4 -5
- package/src/preview/property_previews/ArrayPropertyPreview.tsx +4 -5
- package/src/preview/property_previews/MapPropertyPreview.tsx +12 -11
- package/src/preview/property_previews/SkeletonPropertyComponent.tsx +12 -12
- package/src/preview/property_previews/StringPropertyPreview.tsx +3 -3
- package/src/preview/util.ts +10 -10
- package/src/routes/CustomCMSRoute.tsx +21 -0
- package/src/routes/FireCMSRoute.tsx +223 -0
- package/src/routes/HomePageRoute.tsx +17 -0
- package/src/types/auth.tsx +9 -13
- package/src/types/collections.ts +87 -27
- package/src/types/customization_controller.tsx +0 -1
- package/src/types/datasource.ts +61 -43
- package/src/types/dialogs_controller.tsx +7 -3
- package/src/types/entities.ts +12 -2
- package/src/types/entity_actions.tsx +32 -7
- package/src/types/entity_callbacks.ts +18 -18
- package/src/types/entity_overrides.tsx +2 -2
- package/src/types/export_import.ts +4 -4
- package/src/types/fields.tsx +81 -46
- package/src/types/firecms.tsx +7 -2
- package/src/types/firecms_context.tsx +1 -1
- package/src/types/index.ts +0 -1
- package/src/types/navigation.ts +38 -18
- package/src/types/permissions.ts +5 -5
- package/src/types/plugins.tsx +25 -14
- package/src/types/properties.ts +60 -25
- package/src/types/property_config.tsx +0 -2
- package/src/types/side_dialogs_controller.tsx +13 -0
- package/src/types/side_entity_controller.tsx +1 -1
- package/src/types/storage.ts +94 -3
- package/src/types/user.ts +2 -0
- package/src/util/builders.ts +10 -8
- package/src/util/entities.ts +9 -6
- package/src/util/entity_actions.ts +28 -0
- package/src/util/entity_cache.ts +204 -0
- package/src/util/enums.ts +1 -1
- package/src/util/icon_list.ts +16 -10
- package/src/util/icon_synonyms.ts +3 -100
- package/src/util/icons.tsx +17 -7
- package/src/util/index.ts +2 -0
- package/src/util/join_collections.ts +3 -0
- package/src/util/make_properties_editable.ts +13 -5
- package/src/util/navigation_from_path.ts +10 -2
- package/src/util/navigation_utils.ts +59 -7
- package/src/util/objects.ts +45 -28
- package/src/util/parent_references_from_path.ts +3 -3
- package/src/util/permissions.ts +9 -8
- package/src/util/plurals.ts +0 -2
- package/src/util/property_utils.tsx +11 -4
- package/src/util/references.ts +11 -2
- package/src/util/resolutions.ts +79 -46
- package/src/util/storage.ts +79 -21
- package/src/util/strings.ts +2 -2
- package/src/util/useStorageUploadController.tsx +71 -27
- package/dist/components/PropertyIdCopyTooltipContent.d.ts +0 -3
- package/dist/components/VirtualTable/common.d.ts +0 -2
- package/dist/core/Drawer.d.ts +0 -23
- package/dist/core/Scaffold.d.ts +0 -55
- package/dist/core/SideEntityView.d.ts +0 -7
- package/dist/form/components/FormikArrayContainer.d.ts +0 -18
- package/dist/form/field_bindings/MarkdownFieldBinding.d.ts +0 -9
- package/dist/internal/useBuildCustomizationController.d.ts +0 -2
- package/dist/internal/useLocaleConfig.d.ts +0 -1
- package/dist/types/appcheck.d.ts +0 -26
- package/src/components/FireCMSAppBar.tsx +0 -165
- package/src/components/PropertyIdCopyTooltipContent.tsx +0 -28
- package/src/components/common/useDataSourceEntityCollectionTableController.tsx +0 -225
- package/src/core/Drawer.tsx +0 -191
- package/src/core/Scaffold.tsx +0 -281
- package/src/core/SideEntityView.tsx +0 -38
- package/src/form/components/FormikArrayContainer.tsx +0 -44
- package/src/form/field_bindings/MarkdownFieldBinding.tsx +0 -695
- package/src/internal/useBuildCustomizationController.tsx +0 -5
- package/src/internal/useLocaleConfig.tsx +0 -18
- package/src/types/appcheck.ts +0 -29
- /package/src/util/{common.tsx → common.ts} +0 -0
package/src/util/resolutions.ts
CHANGED
|
@@ -26,7 +26,7 @@ import { getDefaultValuesFor, isPropertyBuilder } from "./entities";
|
|
|
26
26
|
import { DEFAULT_ONE_OF_TYPE } from "./common";
|
|
27
27
|
import { getIn } from "@firecms/formex";
|
|
28
28
|
import { enumToObjectEntries } from "./enums";
|
|
29
|
-
import { isDefaultFieldConfigId } from "../core";
|
|
29
|
+
import { isDefaultFieldConfigId } from "../core/field_configs";
|
|
30
30
|
|
|
31
31
|
// import util from "util";
|
|
32
32
|
|
|
@@ -38,7 +38,8 @@ export const resolveCollection = <M extends Record<string, any>, >
|
|
|
38
38
|
values,
|
|
39
39
|
previousValues,
|
|
40
40
|
userConfigPersistence,
|
|
41
|
-
|
|
41
|
+
propertyConfigs,
|
|
42
|
+
ignoreMissingFields = false
|
|
42
43
|
}: {
|
|
43
44
|
collection: EntityCollection<M> | ResolvedEntityCollection<M>;
|
|
44
45
|
path: string,
|
|
@@ -46,7 +47,8 @@ export const resolveCollection = <M extends Record<string, any>, >
|
|
|
46
47
|
values?: Partial<EntityValues<M>>,
|
|
47
48
|
previousValues?: Partial<EntityValues<M>>,
|
|
48
49
|
userConfigPersistence?: UserConfigurationPersistence;
|
|
49
|
-
|
|
50
|
+
propertyConfigs?: Record<string, PropertyConfig>;
|
|
51
|
+
ignoreMissingFields?: boolean;
|
|
50
52
|
}): ResolvedEntityCollection<M> => {
|
|
51
53
|
|
|
52
54
|
const collectionOverride = userConfigPersistence?.getCollectionConfig<M>(path);
|
|
@@ -58,16 +60,15 @@ export const resolveCollection = <M extends Record<string, any>, >
|
|
|
58
60
|
|
|
59
61
|
const resolvedProperties = Object.entries(collection.properties)
|
|
60
62
|
.map(([key, propertyOrBuilder]) => {
|
|
61
|
-
const propertyValue = usedValues ? getIn(usedValues, key) : undefined;
|
|
62
63
|
const childResolvedProperty = resolveProperty({
|
|
63
64
|
propertyKey: key,
|
|
64
65
|
propertyOrBuilder: propertyOrBuilder as PropertyOrBuilder | ResolvedProperty,
|
|
65
66
|
values: usedValues,
|
|
66
67
|
previousValues: usedPreviousValues,
|
|
67
68
|
path,
|
|
68
|
-
propertyValue,
|
|
69
69
|
entityId,
|
|
70
|
-
|
|
70
|
+
propertyConfigs: propertyConfigs,
|
|
71
|
+
ignoreMissingFields
|
|
71
72
|
});
|
|
72
73
|
if (!childResolvedProperty) return {};
|
|
73
74
|
return ({
|
|
@@ -95,24 +96,23 @@ export const resolveCollection = <M extends Record<string, any>, >
|
|
|
95
96
|
* Resolve property builders, enums and arrays.
|
|
96
97
|
* @param propertyOrBuilder
|
|
97
98
|
* @param propertyValue
|
|
98
|
-
* @param values
|
|
99
99
|
*/
|
|
100
100
|
export function resolveProperty<T extends CMSType = CMSType, M extends Record<string, any> = any>({
|
|
101
101
|
propertyOrBuilder,
|
|
102
|
-
propertyValue,
|
|
103
102
|
fromBuilder = false,
|
|
103
|
+
ignoreMissingFields = false,
|
|
104
104
|
...props
|
|
105
105
|
}: {
|
|
106
106
|
propertyKey?: string,
|
|
107
107
|
propertyOrBuilder: PropertyOrBuilder<T, M> | ResolvedProperty<T>,
|
|
108
|
-
propertyValue?: unknown,
|
|
109
108
|
values?: Partial<M>,
|
|
110
109
|
previousValues?: Partial<M>,
|
|
111
110
|
path?: string,
|
|
112
111
|
entityId?: string,
|
|
113
112
|
index?: number,
|
|
114
113
|
fromBuilder?: boolean;
|
|
115
|
-
|
|
114
|
+
propertyConfigs?: Record<string, PropertyConfig<any>>;
|
|
115
|
+
ignoreMissingFields?: boolean;
|
|
116
116
|
}): ResolvedProperty<T> | null {
|
|
117
117
|
|
|
118
118
|
if (typeof propertyOrBuilder === "object" && "resolved" in propertyOrBuilder) {
|
|
@@ -128,10 +128,11 @@ export function resolveProperty<T extends CMSType = CMSType, M extends Record<st
|
|
|
128
128
|
if (!path)
|
|
129
129
|
throw Error("Trying to resolve a property builder without specifying the entity path");
|
|
130
130
|
|
|
131
|
+
const usedPropertyValue = props.propertyKey ? getIn(props.values, props.propertyKey) : undefined;
|
|
131
132
|
const result: Property<T> | null = propertyOrBuilder({
|
|
132
133
|
...props,
|
|
133
134
|
path,
|
|
134
|
-
propertyValue,
|
|
135
|
+
propertyValue: usedPropertyValue,
|
|
135
136
|
values: props.values ?? {},
|
|
136
137
|
previousValues: props.previousValues ?? props.values ?? {}
|
|
137
138
|
});
|
|
@@ -142,17 +143,17 @@ export function resolveProperty<T extends CMSType = CMSType, M extends Record<st
|
|
|
142
143
|
|
|
143
144
|
resolvedProperty = resolveProperty({
|
|
144
145
|
...props,
|
|
145
|
-
propertyValue,
|
|
146
146
|
propertyOrBuilder: result,
|
|
147
|
-
fromBuilder: true
|
|
147
|
+
fromBuilder: true,
|
|
148
|
+
ignoreMissingFields
|
|
148
149
|
});
|
|
149
150
|
} else {
|
|
150
151
|
const property = propertyOrBuilder as Property<T>;
|
|
151
152
|
if (property.dataType === "map" && property.properties) {
|
|
152
153
|
const properties = resolveProperties({
|
|
154
|
+
ignoreMissingFields,
|
|
153
155
|
...props,
|
|
154
156
|
properties: property.properties,
|
|
155
|
-
propertyValue
|
|
156
157
|
});
|
|
157
158
|
resolvedProperty = {
|
|
158
159
|
...property,
|
|
@@ -163,8 +164,8 @@ export function resolveProperty<T extends CMSType = CMSType, M extends Record<st
|
|
|
163
164
|
} else if (property.dataType === "array") {
|
|
164
165
|
resolvedProperty = resolveArrayProperty({
|
|
165
166
|
property,
|
|
166
|
-
propertyValue,
|
|
167
167
|
fromBuilder,
|
|
168
|
+
ignoreMissingFields,
|
|
168
169
|
...props
|
|
169
170
|
}) as ResolvedProperty<any>;
|
|
170
171
|
} else if ((property.dataType === "string" || property.dataType === "number") && property.enumValues) {
|
|
@@ -181,13 +182,13 @@ export function resolveProperty<T extends CMSType = CMSType, M extends Record<st
|
|
|
181
182
|
}
|
|
182
183
|
|
|
183
184
|
if (resolvedProperty.propertyConfig && !isDefaultFieldConfigId(resolvedProperty.propertyConfig)) {
|
|
184
|
-
const cmsFields = props.
|
|
185
|
-
if (!cmsFields) {
|
|
186
|
-
throw Error(`Trying to resolve a property with key ${resolvedProperty.propertyConfig} that inherits from a custom property config but no custom property configs were provided. Use the property
|
|
185
|
+
const cmsFields = props.propertyConfigs;
|
|
186
|
+
if (!cmsFields && !ignoreMissingFields) {
|
|
187
|
+
throw Error(`Trying to resolve a property with key '${resolvedProperty.propertyConfig}' that inherits from a custom property config but no custom property configs were provided. Use the property 'propertyConfigs' in your app config to provide them`);
|
|
187
188
|
}
|
|
188
|
-
const customField: PropertyConfig
|
|
189
|
+
const customField: PropertyConfig | undefined = cmsFields?.[resolvedProperty.propertyConfig];
|
|
189
190
|
if (!customField) {
|
|
190
|
-
console.warn(`Trying to resolve a property with key ${resolvedProperty.propertyConfig} that inherits from a custom property config but no custom property config with that key was found. Check the
|
|
191
|
+
console.warn(`Trying to resolve a property with key '${resolvedProperty.propertyConfig}' that inherits from a custom property config but no custom property config with that key was found. Check the 'propertyConfigs' in your app config`)
|
|
191
192
|
console.warn("Available property configs", cmsFields);
|
|
192
193
|
return null;
|
|
193
194
|
}
|
|
@@ -198,7 +199,7 @@ export function resolveProperty<T extends CMSType = CMSType, M extends Record<st
|
|
|
198
199
|
}
|
|
199
200
|
const customFieldProperty = resolveProperty<any>({
|
|
200
201
|
propertyOrBuilder: configPropertyOrBuilder,
|
|
201
|
-
|
|
202
|
+
ignoreMissingFields,
|
|
202
203
|
...props
|
|
203
204
|
});
|
|
204
205
|
if (customFieldProperty) {
|
|
@@ -216,23 +217,56 @@ export function resolveProperty<T extends CMSType = CMSType, M extends Record<st
|
|
|
216
217
|
: null;
|
|
217
218
|
}
|
|
218
219
|
|
|
220
|
+
export function getArrayResolvedProperties<M>({
|
|
221
|
+
propertyKey,
|
|
222
|
+
propertyValue,
|
|
223
|
+
property,
|
|
224
|
+
...props
|
|
225
|
+
}: {
|
|
226
|
+
propertyValue: any,
|
|
227
|
+
propertyKey?: string,
|
|
228
|
+
property: ArrayProperty<any> | ResolvedArrayProperty<any>,
|
|
229
|
+
ignoreMissingFields: boolean,
|
|
230
|
+
values?: Partial<M>;
|
|
231
|
+
previousValues?: Partial<M>;
|
|
232
|
+
path?: string;
|
|
233
|
+
entityId?: string;
|
|
234
|
+
index?: number;
|
|
235
|
+
fromBuilder?: boolean;
|
|
236
|
+
propertyConfigs?: Record<string, PropertyConfig>
|
|
237
|
+
}) {
|
|
238
|
+
|
|
239
|
+
const of = property.of;
|
|
240
|
+
return Array.isArray(propertyValue)
|
|
241
|
+
? propertyValue.map((v: any, index: number) => {
|
|
242
|
+
return resolveProperty({
|
|
243
|
+
propertyKey: `${propertyKey}.${index}`,
|
|
244
|
+
propertyOrBuilder: of,
|
|
245
|
+
...props,
|
|
246
|
+
index
|
|
247
|
+
});
|
|
248
|
+
}).filter(e => Boolean(e)) as ResolvedProperty[]
|
|
249
|
+
: [];
|
|
250
|
+
}
|
|
251
|
+
|
|
219
252
|
export function resolveArrayProperty<T extends any[], M>({
|
|
220
253
|
propertyKey,
|
|
221
254
|
property,
|
|
222
|
-
|
|
255
|
+
ignoreMissingFields = false,
|
|
223
256
|
...props
|
|
224
257
|
}: {
|
|
225
258
|
propertyKey?: string,
|
|
226
259
|
property: ArrayProperty<T> | ResolvedArrayProperty<T>,
|
|
227
|
-
propertyValue: any,
|
|
228
260
|
values?: Partial<M>,
|
|
229
261
|
previousValues?: Partial<M>,
|
|
230
262
|
path?: string,
|
|
231
263
|
entityId?: string,
|
|
232
264
|
index?: number,
|
|
233
265
|
fromBuilder?: boolean;
|
|
234
|
-
|
|
266
|
+
propertyConfigs?: Record<string, PropertyConfig>;
|
|
267
|
+
ignoreMissingFields?: boolean;
|
|
235
268
|
}): ResolvedArrayProperty {
|
|
269
|
+
const propertyValue = propertyKey ? getIn(props.values, propertyKey) : undefined;
|
|
236
270
|
|
|
237
271
|
if (property.of) {
|
|
238
272
|
if (Array.isArray(property.of)) {
|
|
@@ -244,7 +278,7 @@ export function resolveArrayProperty<T extends any[], M>({
|
|
|
244
278
|
return resolveProperty({
|
|
245
279
|
propertyKey: `${propertyKey}.${index}`,
|
|
246
280
|
propertyOrBuilder: p as Property<any>,
|
|
247
|
-
|
|
281
|
+
ignoreMissingFields,
|
|
248
282
|
...props,
|
|
249
283
|
index
|
|
250
284
|
});
|
|
@@ -252,22 +286,19 @@ export function resolveArrayProperty<T extends any[], M>({
|
|
|
252
286
|
} as ResolvedArrayProperty;
|
|
253
287
|
} else {
|
|
254
288
|
const of = property.of;
|
|
255
|
-
const resolvedProperties
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
})).filter(e => Boolean(e)) as ResolvedProperty[]
|
|
263
|
-
: [];
|
|
289
|
+
const resolvedProperties = getArrayResolvedProperties({
|
|
290
|
+
propertyValue,
|
|
291
|
+
propertyKey,
|
|
292
|
+
property,
|
|
293
|
+
ignoreMissingFields,
|
|
294
|
+
...props
|
|
295
|
+
});
|
|
264
296
|
const ofProperty = resolveProperty({
|
|
265
|
-
propertyKey: `${propertyKey}`,
|
|
266
297
|
propertyOrBuilder: of,
|
|
267
|
-
|
|
298
|
+
ignoreMissingFields,
|
|
268
299
|
...props
|
|
269
300
|
});
|
|
270
|
-
if (!ofProperty)
|
|
301
|
+
if (!ofProperty && !ignoreMissingFields)
|
|
271
302
|
throw Error("When using a property builder as the 'of' prop of an ArrayProperty, you must return a valid child property")
|
|
272
303
|
return {
|
|
273
304
|
...property,
|
|
@@ -287,14 +318,15 @@ export function resolveArrayProperty<T extends any[], M>({
|
|
|
287
318
|
return resolveProperty({
|
|
288
319
|
propertyKey: `${propertyKey}.${index}`,
|
|
289
320
|
propertyOrBuilder: childProperty,
|
|
290
|
-
|
|
321
|
+
ignoreMissingFields,
|
|
291
322
|
...props
|
|
292
323
|
});
|
|
293
324
|
}).filter(e => Boolean(e)) as ResolvedProperty[]
|
|
294
325
|
: [];
|
|
295
326
|
const properties = resolveProperties<any>({
|
|
327
|
+
propertyKey,
|
|
296
328
|
properties: property.oneOf.properties,
|
|
297
|
-
|
|
329
|
+
ignoreMissingFields,
|
|
298
330
|
...props
|
|
299
331
|
});
|
|
300
332
|
return {
|
|
@@ -325,27 +357,28 @@ export function resolveArrayProperty<T extends any[], M>({
|
|
|
325
357
|
* @param value
|
|
326
358
|
*/
|
|
327
359
|
export function resolveProperties<M extends Record<string, any>>({
|
|
360
|
+
propertyKey,
|
|
328
361
|
properties,
|
|
329
|
-
|
|
362
|
+
ignoreMissingFields,
|
|
330
363
|
...props
|
|
331
364
|
}: {
|
|
365
|
+
propertyKey?: string,
|
|
332
366
|
properties: PropertiesOrBuilders<M>,
|
|
333
|
-
propertyValue: unknown,
|
|
334
367
|
values?: Partial<M>,
|
|
335
368
|
previousValues?: Partial<M>,
|
|
336
369
|
path?: string,
|
|
337
370
|
entityId?: string,
|
|
338
371
|
index?: number,
|
|
339
372
|
fromBuilder?: boolean;
|
|
340
|
-
|
|
373
|
+
propertyConfigs?: Record<string, PropertyConfig>;
|
|
374
|
+
ignoreMissingFields?: boolean;
|
|
341
375
|
}): ResolvedProperties<M> {
|
|
342
376
|
return Object.entries<PropertyOrBuilder>(properties as Record<string, PropertyOrBuilder>)
|
|
343
377
|
.map(([key, property]) => {
|
|
344
|
-
const thisPropertyValue = propertyValue && typeof propertyValue === "object" ? getValueInPath(propertyValue, key) : undefined;
|
|
345
378
|
const childResolvedProperty = resolveProperty({
|
|
346
|
-
propertyKey: key,
|
|
379
|
+
propertyKey: propertyKey ? `${propertyKey}.${key}` : undefined,
|
|
347
380
|
propertyOrBuilder: property,
|
|
348
|
-
|
|
381
|
+
ignoreMissingFields,
|
|
349
382
|
...props
|
|
350
383
|
});
|
|
351
384
|
if (!childResolvedProperty) return {};
|
|
@@ -367,7 +400,7 @@ export function resolvePropertyEnum(property: StringProperty | NumberProperty, f
|
|
|
367
400
|
return {
|
|
368
401
|
...property,
|
|
369
402
|
resolved: true,
|
|
370
|
-
enumValues: enumToObjectEntries(property.enumValues)?.filter((value) => value && value.id && value.label) ?? [],
|
|
403
|
+
enumValues: enumToObjectEntries(property.enumValues)?.filter((value) => value && (value.id || value.id === 0) && value.label) ?? [],
|
|
371
404
|
fromBuilder: fromBuilder ?? false
|
|
372
405
|
}
|
|
373
406
|
}
|
package/src/util/storage.ts
CHANGED
|
@@ -1,22 +1,39 @@
|
|
|
1
1
|
import {
|
|
2
|
+
ArrayProperty,
|
|
2
3
|
EntityValues,
|
|
4
|
+
PropertyOrBuilder,
|
|
3
5
|
ResolvedArrayProperty,
|
|
4
6
|
ResolvedStringProperty,
|
|
5
7
|
StorageConfig,
|
|
8
|
+
StringProperty,
|
|
6
9
|
UploadedFileContext
|
|
7
10
|
} from "../types";
|
|
8
11
|
import { randomString } from "./strings";
|
|
9
12
|
|
|
10
|
-
|
|
11
|
-
input: string | ((context: UploadedFileContext) => Promise<string> | string)
|
|
12
|
-
storage: StorageConfig
|
|
13
|
-
values: EntityValues<M
|
|
14
|
-
entityId: string
|
|
15
|
-
path
|
|
13
|
+
interface ResolveFilenameStringParams<M extends object> {
|
|
14
|
+
input: string | ((context: UploadedFileContext) => (Promise<string> | string));
|
|
15
|
+
storage: StorageConfig;
|
|
16
|
+
values: EntityValues<M>;
|
|
17
|
+
entityId: string;
|
|
18
|
+
path?: string;
|
|
16
19
|
property: ResolvedStringProperty | ResolvedArrayProperty<string[]>,
|
|
17
|
-
file: File
|
|
18
|
-
propertyKey: string
|
|
20
|
+
file: File;
|
|
21
|
+
propertyKey: string;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export async function resolveStorageFilenameString<M extends object>(
|
|
25
|
+
{
|
|
26
|
+
input,
|
|
27
|
+
storage,
|
|
28
|
+
values,
|
|
29
|
+
entityId,
|
|
30
|
+
path,
|
|
31
|
+
property,
|
|
32
|
+
file,
|
|
33
|
+
propertyKey
|
|
34
|
+
}: ResolveFilenameStringParams<M>): Promise<string> {
|
|
19
35
|
let result;
|
|
36
|
+
|
|
20
37
|
if (typeof input === "function") {
|
|
21
38
|
result = await input({
|
|
22
39
|
path,
|
|
@@ -30,7 +47,13 @@ export async function resolveFilenameString<M extends object>(
|
|
|
30
47
|
if (!result)
|
|
31
48
|
console.warn("Storage callback returned empty result. Using default name value")
|
|
32
49
|
} else {
|
|
33
|
-
result = replacePlaceholders(
|
|
50
|
+
result = replacePlaceholders({
|
|
51
|
+
file,
|
|
52
|
+
input,
|
|
53
|
+
entityId,
|
|
54
|
+
propertyKey,
|
|
55
|
+
path
|
|
56
|
+
});
|
|
34
57
|
}
|
|
35
58
|
|
|
36
59
|
if (!result)
|
|
@@ -39,15 +62,28 @@ export async function resolveFilenameString<M extends object>(
|
|
|
39
62
|
return result;
|
|
40
63
|
}
|
|
41
64
|
|
|
65
|
+
interface ResolveStoragePathStringParams<M extends object> {
|
|
66
|
+
input: string | ((context: UploadedFileContext) => string);
|
|
67
|
+
storage: StorageConfig;
|
|
68
|
+
values: EntityValues<M>;
|
|
69
|
+
entityId: string;
|
|
70
|
+
path?: string;
|
|
71
|
+
property: ResolvedStringProperty | ResolvedArrayProperty<string[]>;
|
|
72
|
+
file: File;
|
|
73
|
+
propertyKey: string;
|
|
74
|
+
}
|
|
75
|
+
|
|
42
76
|
export function resolveStoragePathString<M extends object>(
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
77
|
+
{
|
|
78
|
+
input,
|
|
79
|
+
storage,
|
|
80
|
+
values,
|
|
81
|
+
entityId,
|
|
82
|
+
path,
|
|
83
|
+
property,
|
|
84
|
+
file,
|
|
85
|
+
propertyKey
|
|
86
|
+
}: ResolveStoragePathStringParams<M>): string {
|
|
51
87
|
let result;
|
|
52
88
|
if (typeof input === "function") {
|
|
53
89
|
result = input({
|
|
@@ -62,7 +98,13 @@ export function resolveStoragePathString<M extends object>(
|
|
|
62
98
|
if (!result)
|
|
63
99
|
console.warn("Storage callback returned empty result. Using default name value")
|
|
64
100
|
} else {
|
|
65
|
-
result = replacePlaceholders(
|
|
101
|
+
result = replacePlaceholders({
|
|
102
|
+
file,
|
|
103
|
+
input,
|
|
104
|
+
entityId,
|
|
105
|
+
propertyKey,
|
|
106
|
+
path
|
|
107
|
+
});
|
|
66
108
|
}
|
|
67
109
|
|
|
68
110
|
if (!result)
|
|
@@ -71,14 +113,30 @@ export function resolveStoragePathString<M extends object>(
|
|
|
71
113
|
return result;
|
|
72
114
|
}
|
|
73
115
|
|
|
74
|
-
|
|
116
|
+
interface Placeholders {
|
|
117
|
+
file: File;
|
|
118
|
+
input: string;
|
|
119
|
+
entityId: string;
|
|
120
|
+
propertyKey: string;
|
|
121
|
+
path?: string;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
function replacePlaceholders({
|
|
125
|
+
file,
|
|
126
|
+
input,
|
|
127
|
+
entityId,
|
|
128
|
+
propertyKey,
|
|
129
|
+
path
|
|
130
|
+
}: Placeholders) {
|
|
75
131
|
const ext = file.name.split(".").pop();
|
|
76
132
|
let result = input.replace("{entityId}", entityId)
|
|
77
133
|
.replace("{propertyKey}", propertyKey)
|
|
78
134
|
.replace("{rand}", randomString())
|
|
79
135
|
.replace("{file}", file.name)
|
|
80
|
-
.replace("{file.type}", file.type)
|
|
81
|
-
|
|
136
|
+
.replace("{file.type}", file.type);
|
|
137
|
+
if (path) {
|
|
138
|
+
result = result.replace("{path}", path);
|
|
139
|
+
}
|
|
82
140
|
if (ext) {
|
|
83
141
|
result = result.replace("{file.ext}", ext);
|
|
84
142
|
const name = file.name.replace(`.${ext}`, "");
|
package/src/util/strings.ts
CHANGED
|
@@ -56,8 +56,8 @@ export function unslugify(slug?: string): string {
|
|
|
56
56
|
const result = slug.replace(/[-_]/g, " ");
|
|
57
57
|
return result.replace(/\w\S*/g, function (txt) {
|
|
58
58
|
return txt.charAt(0).toUpperCase() + txt.substr(1);
|
|
59
|
-
});
|
|
59
|
+
}).trim();
|
|
60
60
|
} else {
|
|
61
|
-
return slug;
|
|
61
|
+
return slug.trim();
|
|
62
62
|
}
|
|
63
63
|
}
|
|
@@ -2,9 +2,11 @@ import Resizer from "react-image-file-resizer";
|
|
|
2
2
|
import equal from "react-fast-compare";
|
|
3
3
|
|
|
4
4
|
import {
|
|
5
|
+
ArrayProperty,
|
|
5
6
|
EntityValues,
|
|
6
7
|
ImageCompression,
|
|
7
8
|
Property,
|
|
9
|
+
PropertyOrBuilder,
|
|
8
10
|
ResolvedArrayProperty,
|
|
9
11
|
ResolvedStringProperty,
|
|
10
12
|
StorageConfig,
|
|
@@ -14,7 +16,8 @@ import {
|
|
|
14
16
|
import { useCallback, useEffect, useState } from "react";
|
|
15
17
|
import { PreviewSize } from "../preview";
|
|
16
18
|
import { randomString } from "./strings";
|
|
17
|
-
import {
|
|
19
|
+
import { resolveStorageFilenameString, resolveStoragePathString } from "./storage";
|
|
20
|
+
import { resolveProperty } from "./resolutions";
|
|
18
21
|
|
|
19
22
|
/**
|
|
20
23
|
* Internal representation of an item in the storage
|
|
@@ -31,6 +34,7 @@ export interface StorageFieldItem {
|
|
|
31
34
|
size: PreviewSize
|
|
32
35
|
}
|
|
33
36
|
|
|
37
|
+
|
|
34
38
|
export function useStorageUploadController<M extends object>({
|
|
35
39
|
entityId,
|
|
36
40
|
entityValues,
|
|
@@ -42,17 +46,17 @@ export function useStorageUploadController<M extends object>({
|
|
|
42
46
|
disabled,
|
|
43
47
|
onChange
|
|
44
48
|
}:
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
49
|
+
{
|
|
50
|
+
entityId: string,
|
|
51
|
+
entityValues: EntityValues<M>,
|
|
52
|
+
value: string | string[] | null;
|
|
53
|
+
path?: string,
|
|
54
|
+
propertyKey: string,
|
|
55
|
+
property: StringProperty | ArrayProperty<string[]> | ResolvedStringProperty | ResolvedArrayProperty<string[]>,
|
|
56
|
+
storageSource: StorageSource,
|
|
57
|
+
disabled: boolean,
|
|
58
|
+
onChange: (value: string | string[] | null) => void
|
|
59
|
+
}) {
|
|
56
60
|
|
|
57
61
|
const storage: StorageConfig | undefined = property.dataType === "string"
|
|
58
62
|
? property.storage
|
|
@@ -67,21 +71,12 @@ export function useStorageUploadController<M extends object>({
|
|
|
67
71
|
throw Error("Storage meta must be specified");
|
|
68
72
|
|
|
69
73
|
const metadata: Record<string, any> | undefined = storage?.metadata;
|
|
70
|
-
const size = multipleFilesSupported ? "
|
|
74
|
+
const size = multipleFilesSupported ? "medium" : "large";
|
|
71
75
|
|
|
72
76
|
const compression: ImageCompression | undefined = storage?.imageCompression;
|
|
73
77
|
|
|
74
78
|
const internalInitialValue: StorageFieldItem[] =
|
|
75
|
-
(multipleFilesSupported
|
|
76
|
-
? (value ?? []) as string[]
|
|
77
|
-
: value ? [value as string] : []).map(entry => (
|
|
78
|
-
{
|
|
79
|
-
id: getRandomId(),
|
|
80
|
-
storagePathOrDownloadUrl: entry,
|
|
81
|
-
metadata,
|
|
82
|
-
size
|
|
83
|
-
}
|
|
84
|
-
));
|
|
79
|
+
getInternalInitialValue(multipleFilesSupported, value, metadata, size);
|
|
85
80
|
|
|
86
81
|
const [initialValue, setInitialValue] = useState<string | string[] | null>(value);
|
|
87
82
|
const [internalValue, setInternalValue] = useState<StorageFieldItem[]>(internalInitialValue);
|
|
@@ -93,20 +88,43 @@ export function useStorageUploadController<M extends object>({
|
|
|
93
88
|
}
|
|
94
89
|
}, [internalInitialValue, value, initialValue]);
|
|
95
90
|
|
|
91
|
+
const resolvedProperty = resolveProperty({
|
|
92
|
+
propertyOrBuilder: property as PropertyOrBuilder,
|
|
93
|
+
values: entityValues
|
|
94
|
+
}) as ResolvedStringProperty | ResolvedArrayProperty<string[]>;
|
|
95
|
+
|
|
96
96
|
const fileNameBuilder = useCallback(async (file: File) => {
|
|
97
97
|
if (storage.fileName) {
|
|
98
|
-
const fileName = await
|
|
98
|
+
const fileName = await resolveStorageFilenameString({
|
|
99
|
+
input: storage.fileName,
|
|
100
|
+
storage,
|
|
101
|
+
values: entityValues,
|
|
102
|
+
entityId,
|
|
103
|
+
path,
|
|
104
|
+
property: resolvedProperty,
|
|
105
|
+
file,
|
|
106
|
+
propertyKey
|
|
107
|
+
});
|
|
99
108
|
if (!fileName || fileName.length === 0) {
|
|
100
109
|
throw Error("You need to return a valid filename");
|
|
101
110
|
}
|
|
102
111
|
return fileName;
|
|
103
112
|
}
|
|
104
113
|
return randomString() + "_" + file.name;
|
|
105
|
-
}, [entityId, entityValues, path,
|
|
114
|
+
}, [entityId, entityValues, path, resolvedProperty, propertyKey, storage]);
|
|
106
115
|
|
|
107
116
|
const storagePathBuilder = useCallback((file: File) => {
|
|
108
|
-
return resolveStoragePathString(
|
|
109
|
-
|
|
117
|
+
return resolveStoragePathString({
|
|
118
|
+
input: storage.storagePath,
|
|
119
|
+
storage,
|
|
120
|
+
values: entityValues,
|
|
121
|
+
entityId,
|
|
122
|
+
path,
|
|
123
|
+
property: resolvedProperty,
|
|
124
|
+
file,
|
|
125
|
+
propertyKey
|
|
126
|
+
}) ?? "/";
|
|
127
|
+
}, [entityId, entityValues, path, resolvedProperty, propertyKey, storage]);
|
|
110
128
|
|
|
111
129
|
const onFileUploadComplete = useCallback(async (uploadedPath: string,
|
|
112
130
|
entry: StorageFieldItem,
|
|
@@ -200,6 +218,32 @@ export function useStorageUploadController<M extends object>({
|
|
|
200
218
|
}
|
|
201
219
|
}
|
|
202
220
|
|
|
221
|
+
function getInternalInitialValue(multipleFilesSupported: boolean,
|
|
222
|
+
value: string | string[] | null,
|
|
223
|
+
metadata: Record<string, any> | undefined,
|
|
224
|
+
size: PreviewSize): StorageFieldItem[] {
|
|
225
|
+
let strings: string[] = [];
|
|
226
|
+
if (multipleFilesSupported) {
|
|
227
|
+
if (Array.isArray(value) && value.every((v) => typeof v === "string")) {
|
|
228
|
+
strings = (value ?? []) as string[];
|
|
229
|
+
}
|
|
230
|
+
} else {
|
|
231
|
+
if (typeof value === "string") {
|
|
232
|
+
strings = value ? [value as string] : [];
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
return strings
|
|
237
|
+
.map(entry => (
|
|
238
|
+
{
|
|
239
|
+
id: getRandomId(),
|
|
240
|
+
storagePathOrDownloadUrl: entry,
|
|
241
|
+
metadata,
|
|
242
|
+
size
|
|
243
|
+
}
|
|
244
|
+
));
|
|
245
|
+
}
|
|
246
|
+
|
|
203
247
|
function removeDuplicates(items: StorageFieldItem[]) {
|
|
204
248
|
return items.filter(
|
|
205
249
|
(item, i) => {
|
package/dist/core/Drawer.d.ts
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
/**
|
|
3
|
-
* Props used in case you need to override the default drawer
|
|
4
|
-
* @group Core
|
|
5
|
-
*/
|
|
6
|
-
export type DrawerProps<T = {}> = T & {
|
|
7
|
-
hovered: boolean;
|
|
8
|
-
drawerOpen: boolean;
|
|
9
|
-
closeDrawer: () => any;
|
|
10
|
-
};
|
|
11
|
-
/**
|
|
12
|
-
* Default drawer used in the CMS
|
|
13
|
-
* @group Core
|
|
14
|
-
*/
|
|
15
|
-
export declare function Drawer({ hovered, drawerOpen, closeDrawer }: DrawerProps): import("react/jsx-runtime").JSX.Element;
|
|
16
|
-
export declare function DrawerNavigationItem({ name, icon, drawerOpen, tooltipsOpen, url, onClick }: {
|
|
17
|
-
icon: React.ReactElement;
|
|
18
|
-
name: string;
|
|
19
|
-
tooltipsOpen: boolean;
|
|
20
|
-
drawerOpen: boolean;
|
|
21
|
-
url: string;
|
|
22
|
-
onClick?: () => void;
|
|
23
|
-
}): import("react/jsx-runtime").JSX.Element;
|