@firecms/core 3.0.0-canary.29 → 3.0.0-canary.292
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/dist/app/AppBar.d.ts +12 -0
- package/dist/app/Drawer.d.ts +16 -0
- package/dist/app/Scaffold.d.ts +34 -0
- package/dist/app/index.d.ts +4 -0
- package/dist/app/useApp.d.ts +16 -0
- package/dist/components/ArrayContainer.d.ts +31 -12
- package/dist/components/CircularProgressCenter.d.ts +1 -1
- package/dist/components/ClearFilterSortButton.d.ts +5 -0
- package/dist/components/{DeleteConfirmationDialog.d.ts → ConfirmationDialog.d.ts} +1 -1
- package/dist/components/EntityCollectionTable/EntityCollectionRowActions.d.ts +14 -13
- package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +2 -2
- package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +22 -6
- package/dist/components/EntityCollectionTable/PropertyTableCell.d.ts +1 -0
- package/dist/components/EntityCollectionTable/column_utils.d.ts +1 -2
- package/dist/components/EntityCollectionTable/fields/TableReferenceField.d.ts +3 -1
- package/dist/components/EntityCollectionTable/index.d.ts +1 -1
- package/dist/components/EntityCollectionTable/internal/CollectionTableToolbar.d.ts +1 -4
- package/dist/components/EntityCollectionTable/internal/EntityTableCell.d.ts +2 -2
- package/dist/components/EntityCollectionTable/internal/popup_field/PopupFormField.d.ts +7 -4
- package/dist/components/EntityCollectionView/EntityCollectionView.d.ts +20 -2
- package/dist/components/EntityCollectionView/EntityCollectionViewStartActions.d.ts +11 -0
- package/dist/components/EntityCollectionView/utils.d.ts +3 -0
- package/dist/components/EntityJsonPreview.d.ts +3 -0
- package/dist/components/EntityPreview.d.ts +10 -7
- package/dist/components/ErrorView.d.ts +1 -1
- package/dist/components/HomePage/DefaultHomePage.d.ts +2 -15
- package/dist/components/HomePage/HomePageDnD.d.ts +77 -0
- package/dist/components/HomePage/NavigationCard.d.ts +3 -1
- package/dist/components/HomePage/NavigationCardBinding.d.ts +4 -3
- package/dist/components/HomePage/NavigationGroup.d.ts +8 -1
- package/dist/components/HomePage/RenameGroupDialog.d.ts +9 -0
- package/dist/components/PropertyCollectionView.d.ts +23 -0
- package/dist/components/PropertyConfigBadge.d.ts +2 -1
- package/dist/components/PropertyIdCopyTooltip.d.ts +8 -0
- package/dist/components/ReferenceWidget.d.ts +3 -1
- package/dist/components/SelectableTable/SelectableTable.d.ts +14 -4
- package/dist/components/SelectableTable/filters/ReferenceFilterField.d.ts +2 -1
- package/dist/components/UnsavedChangesDialog.d.ts +8 -0
- package/dist/components/UserDisplay.d.ts +7 -0
- package/dist/components/VirtualTable/VirtualTableProps.d.ts +24 -12
- package/dist/components/VirtualTable/fields/VirtualTableUserSelect.d.ts +12 -0
- package/dist/components/VirtualTable/types.d.ts +3 -3
- package/dist/components/{EntityCollectionTable/internal → common}/default_entity_actions.d.ts +1 -3
- package/dist/components/common/index.d.ts +2 -1
- package/dist/components/common/table_height.d.ts +5 -0
- package/dist/components/common/types.d.ts +4 -6
- package/dist/components/common/useColumnsIds.d.ts +3 -1
- package/dist/components/common/{useDataSourceEntityCollectionTableController.d.ts → useDataSourceTableController.d.ts} +13 -2
- package/dist/components/common/useDebouncedCallback.d.ts +1 -0
- package/dist/components/common/useScrollRestoration.d.ts +14 -0
- package/dist/components/index.d.ts +5 -2
- package/dist/contexts/BreacrumbsContext.d.ts +8 -0
- package/dist/contexts/InternalUserManagementContext.d.ts +3 -0
- package/dist/core/DefaultAppBar.d.ts +29 -0
- package/dist/core/DefaultDrawer.d.ts +19 -0
- package/dist/core/DrawerNavigationItem.d.ts +10 -0
- package/dist/core/EntityEditView.d.ts +49 -11
- 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 +2 -3
- package/dist/core/SideDialogs.d.ts +4 -2
- package/dist/core/field_configs.d.ts +1 -1
- package/dist/core/index.d.ts +4 -4
- package/dist/form/EntityForm.d.ts +40 -64
- package/dist/form/EntityFormActions.d.ts +21 -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/LocalChangesMenu.d.ts +11 -0
- package/dist/form/components/StorageItemPreview.d.ts +4 -4
- package/dist/form/components/index.d.ts +3 -1
- package/dist/form/field_bindings/ArrayCustomShapedFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/ArrayOfReferencesFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/BlockFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/KeyValueFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/MapFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/MarkdownEditorFieldBinding.d.ts +11 -0
- package/dist/form/field_bindings/{MultiSelectBinding.d.ts → MultiSelectFieldBinding.d.ts} +1 -1
- package/dist/form/field_bindings/ReadOnlyFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/ReferenceAsStringFieldBinding.d.ts +9 -0
- package/dist/form/field_bindings/ReferenceFieldBinding.d.ts +2 -2
- package/dist/form/field_bindings/RepeatFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/SelectFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +5 -13
- package/dist/form/field_bindings/SwitchFieldBinding.d.ts +1 -2
- package/dist/form/field_bindings/TextFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/UserSelectFieldBinding.d.ts +12 -0
- package/dist/form/index.d.ts +18 -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 +3 -0
- package/dist/hooks/useAuthController.d.ts +1 -1
- package/dist/hooks/useBreadcrumbsController.d.ts +26 -0
- package/dist/hooks/useBuildNavigationController.d.ts +57 -13
- package/dist/hooks/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 +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 +24546 -13965
- package/dist/index.es.js.map +1 -1
- package/dist/index.umd.js +27256 -588
- package/dist/index.umd.js.map +1 -1
- package/dist/internal/useBuildDataSource.d.ts +3 -17
- package/dist/internal/useBuildSideEntityController.d.ts +3 -3
- package/dist/internal/useUnsavedChangesDialog.d.ts +7 -9
- package/dist/preview/PropertyPreviewProps.d.ts +6 -1
- package/dist/preview/components/EnumValuesChip.d.ts +1 -1
- package/dist/preview/components/ReferencePreview.d.ts +4 -3
- package/dist/preview/components/StorageThumbnail.d.ts +2 -1
- package/dist/preview/components/UrlComponentPreview.d.ts +2 -1
- 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 +8 -10
- package/dist/types/collections.d.ts +123 -25
- package/dist/types/customization_controller.d.ts +8 -0
- package/dist/types/datasource.d.ts +52 -36
- package/dist/types/dialogs_controller.d.ts +7 -3
- package/dist/types/entities.d.ts +12 -3
- package/dist/types/entity_actions.d.ts +72 -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 +79 -39
- package/dist/types/firecms.d.ts +31 -3
- package/dist/types/firecms_context.d.ts +17 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/internal_user_management.d.ts +20 -0
- package/dist/types/navigation.d.ts +62 -19
- package/dist/types/permissions.d.ts +4 -4
- package/dist/types/plugins.d.ts +58 -13
- package/dist/types/properties.d.ts +122 -31
- 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/collections.d.ts +1 -0
- package/dist/util/createFormexStub.d.ts +2 -0
- package/dist/util/entities.d.ts +3 -3
- package/dist/util/entity_actions.d.ts +2 -0
- package/dist/util/entity_cache.d.ts +28 -0
- package/dist/util/icon_list.d.ts +5 -1
- package/dist/util/icon_synonyms.d.ts +1 -98
- package/dist/util/icons.d.ts +7 -4
- package/dist/util/index.d.ts +3 -0
- package/dist/util/make_properties_editable.d.ts +1 -2
- package/dist/util/navigation_from_path.d.ts +10 -1
- package/dist/util/navigation_utils.d.ts +15 -3
- package/dist/util/objects.d.ts +3 -1
- package/dist/util/permissions.d.ts +4 -4
- package/dist/util/plurals.d.ts +0 -2
- package/dist/util/property_utils.d.ts +4 -4
- package/dist/util/references.d.ts +2 -2
- package/dist/util/resolutions.d.ts +42 -17
- package/dist/util/storage.d.ts +23 -2
- package/dist/util/useStorageUploadController.d.ts +4 -3
- package/package.json +70 -53
- package/src/app/AppBar.tsx +18 -0
- package/src/app/Drawer.tsx +24 -0
- package/src/app/Scaffold.tsx +253 -0
- package/src/app/index.ts +4 -0
- package/src/app/useApp.tsx +32 -0
- package/src/components/ArrayContainer.tsx +447 -229
- package/src/components/CircularProgressCenter.tsx +2 -2
- package/src/components/ClearFilterSortButton.tsx +41 -0
- package/src/components/{DeleteConfirmationDialog.tsx → ConfirmationDialog.tsx} +12 -11
- package/src/components/DeleteEntityDialog.tsx +13 -20
- package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +87 -62
- package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +38 -31
- package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +30 -9
- package/src/components/EntityCollectionTable/PropertyTableCell.tsx +84 -42
- package/src/components/EntityCollectionTable/column_utils.tsx +3 -3
- package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +30 -16
- package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +19 -17
- package/src/components/EntityCollectionTable/index.tsx +1 -1
- package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +34 -39
- package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +49 -36
- package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +20 -8
- package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +135 -105
- package/src/components/EntityCollectionTable/internal/popup_field/useDraggable.tsx +9 -9
- package/src/components/EntityCollectionView/EntityCollectionView.tsx +241 -119
- package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +7 -4
- package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +68 -0
- package/src/components/EntityCollectionView/useSelectionController.tsx +20 -7
- package/src/components/EntityCollectionView/utils.ts +19 -0
- package/src/components/EntityJsonPreview.tsx +66 -0
- package/src/components/EntityPreview.tsx +83 -62
- package/src/components/EntityView.tsx +34 -42
- package/src/components/ErrorView.tsx +4 -4
- package/src/components/FireCMSLogo.tsx +7 -51
- package/src/components/HomePage/DefaultHomePage.tsx +516 -158
- package/src/components/HomePage/FavouritesView.tsx +9 -14
- package/src/components/HomePage/HomePageDnD.tsx +702 -0
- package/src/components/HomePage/NavigationCard.tsx +48 -39
- package/src/components/HomePage/NavigationCardBinding.tsx +17 -16
- package/src/components/HomePage/NavigationGroup.tsx +144 -30
- package/src/components/HomePage/RenameGroupDialog.tsx +123 -0
- package/src/components/HomePage/SmallNavigationCard.tsx +5 -6
- package/src/components/NotFoundPage.tsx +2 -2
- package/src/components/PropertyCollectionView.tsx +329 -0
- package/src/components/PropertyConfigBadge.tsx +10 -4
- package/src/components/PropertyIdCopyTooltip.tsx +47 -0
- package/src/components/ReferenceTable/ReferenceSelectionTable.tsx +23 -13
- package/src/components/ReferenceWidget.tsx +21 -11
- package/src/components/SearchIconsView.tsx +10 -7
- package/src/components/SelectableTable/SelectableTable.tsx +157 -157
- package/src/components/SelectableTable/filters/BooleanFilterField.tsx +2 -3
- package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +27 -9
- package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +36 -12
- package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +92 -24
- package/src/components/UnsavedChangesDialog.tsx +46 -0
- package/src/components/UserDisplay.tsx +55 -0
- package/src/components/VirtualTable/VirtualTable.tsx +105 -51
- package/src/components/VirtualTable/VirtualTableCell.tsx +1 -9
- package/src/components/VirtualTable/VirtualTableHeader.tsx +10 -10
- package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +2 -2
- package/src/components/VirtualTable/VirtualTableProps.tsx +28 -14
- package/src/components/VirtualTable/VirtualTableRow.tsx +5 -6
- package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +5 -5
- package/src/components/VirtualTable/fields/VirtualTableInput.tsx +2 -2
- package/src/components/VirtualTable/fields/VirtualTableNumberInput.tsx +2 -1
- package/src/components/VirtualTable/fields/VirtualTableSelect.tsx +16 -28
- package/src/components/VirtualTable/fields/VirtualTableUserSelect.tsx +99 -0
- package/src/components/VirtualTable/types.tsx +2 -3
- package/src/components/{EntityCollectionTable/internal → common}/default_entity_actions.tsx +64 -44
- 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 +16 -2
- package/src/components/common/useDataSourceTableController.tsx +420 -0
- package/src/components/common/useDebouncedCallback.tsx +20 -0
- package/src/components/common/useScrollRestoration.tsx +68 -0
- package/src/components/common/useTableSearchHelper.ts +53 -12
- package/src/components/index.tsx +6 -2
- package/src/contexts/BreacrumbsContext.tsx +38 -0
- package/src/contexts/DialogsProvider.tsx +5 -4
- package/src/contexts/InternalUserManagementContext.tsx +4 -0
- package/src/contexts/ModeController.tsx +1 -3
- package/src/contexts/SnackbarProvider.tsx +2 -0
- package/src/core/DefaultAppBar.tsx +219 -0
- package/src/core/DefaultDrawer.tsx +185 -0
- package/src/core/DrawerNavigationItem.tsx +66 -0
- package/src/core/EntityEditView.tsx +447 -469
- package/src/core/EntityEditViewFormActions.tsx +344 -0
- package/src/core/EntitySidePanel.tsx +96 -23
- package/src/core/FireCMS.tsx +85 -60
- 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 +41 -14
- package/src/core/index.tsx +6 -5
- package/src/form/EntityForm.tsx +740 -523
- package/src/form/EntityFormActions.tsx +226 -0
- package/src/form/PropertyFieldBinding.tsx +88 -41
- package/src/form/components/CustomIdField.tsx +9 -3
- package/src/form/components/ErrorFocus.tsx +22 -29
- 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/LocalChangesMenu.tsx +144 -0
- package/src/form/components/StorageItemPreview.tsx +23 -13
- package/src/form/components/StorageUploadProgress.tsx +5 -6
- package/src/form/components/index.tsx +3 -1
- package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +34 -19
- package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +50 -36
- package/src/form/field_bindings/BlockFieldBinding.tsx +56 -33
- package/src/form/field_bindings/DateTimeFieldBinding.tsx +18 -14
- package/src/form/field_bindings/KeyValueFieldBinding.tsx +61 -52
- package/src/form/field_bindings/MapFieldBinding.tsx +73 -55
- package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +159 -0
- package/src/form/field_bindings/{MultiSelectBinding.tsx → MultiSelectFieldBinding.tsx} +26 -21
- package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +11 -16
- package/src/form/field_bindings/ReferenceAsStringFieldBinding.tsx +135 -0
- package/src/form/field_bindings/ReferenceFieldBinding.tsx +42 -31
- package/src/form/field_bindings/RepeatFieldBinding.tsx +62 -35
- package/src/form/field_bindings/SelectFieldBinding.tsx +24 -15
- package/src/form/field_bindings/StorageUploadFieldBinding.tsx +257 -199
- package/src/form/field_bindings/SwitchFieldBinding.tsx +29 -24
- package/src/form/field_bindings/TextFieldBinding.tsx +28 -24
- package/src/form/field_bindings/UserSelectFieldBinding.tsx +94 -0
- package/src/form/index.tsx +21 -37
- package/src/form/useClearRestoreValue.tsx +2 -2
- package/src/form/validation.ts +13 -23
- package/src/hooks/data/delete.ts +6 -5
- package/src/hooks/data/save.ts +26 -33
- package/src/hooks/data/useCollectionFetch.tsx +3 -3
- package/src/hooks/data/useDataSource.tsx +11 -3
- package/src/hooks/data/useEntityFetch.tsx +10 -6
- package/src/hooks/index.tsx +4 -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/useBuildLocalConfigurationPersistence.tsx +8 -10
- package/src/hooks/useBuildModeController.tsx +22 -29
- package/src/hooks/useBuildNavigationController.tsx +515 -121
- 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 +32 -10
- package/src/hooks/useResolvedNavigationFrom.tsx +10 -12
- package/src/hooks/useValidateAuthenticator.tsx +17 -37
- package/src/index.ts +1 -0
- package/src/internal/useBuildDataSource.ts +79 -85
- package/src/internal/useBuildSideDialogsController.tsx +4 -2
- package/src/internal/useBuildSideEntityController.tsx +204 -77
- package/src/internal/useUnsavedChangesDialog.tsx +127 -91
- package/src/preview/PropertyPreview.tsx +42 -25
- package/src/preview/PropertyPreviewProps.tsx +7 -1
- package/src/preview/components/BooleanPreview.tsx +2 -2
- package/src/preview/components/EmptyValue.tsx +1 -1
- package/src/preview/components/EnumValuesChip.tsx +2 -2
- package/src/preview/components/ImagePreview.tsx +26 -37
- package/src/preview/components/ReferencePreview.tsx +30 -38
- package/src/preview/components/StorageThumbnail.tsx +5 -1
- package/src/preview/components/UrlComponentPreview.tsx +60 -28
- package/src/preview/components/UserPreview.tsx +27 -0
- package/src/preview/index.ts +1 -0
- package/src/preview/property_previews/ArrayOfMapsPreview.tsx +6 -6
- package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +7 -5
- package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +5 -4
- package/src/preview/property_previews/ArrayOfStringsPreview.tsx +4 -4
- package/src/preview/property_previews/ArrayOneOfPreview.tsx +7 -6
- package/src/preview/property_previews/ArrayPropertyPreview.tsx +8 -7
- package/src/preview/property_previews/MapPropertyPreview.tsx +14 -13
- package/src/preview/property_previews/NumberPropertyPreview.tsx +2 -2
- package/src/preview/property_previews/SkeletonPropertyComponent.tsx +13 -13
- package/src/preview/property_previews/StringPropertyPreview.tsx +3 -3
- package/src/preview/util.ts +10 -10
- package/src/routes/CustomCMSRoute.tsx +21 -0
- package/src/routes/FireCMSRoute.tsx +246 -0
- package/src/routes/HomePageRoute.tsx +17 -0
- package/src/types/analytics.ts +3 -0
- package/src/types/auth.tsx +9 -13
- package/src/types/collections.ts +146 -30
- package/src/types/customization_controller.tsx +9 -1
- package/src/types/datasource.ts +61 -43
- package/src/types/dialogs_controller.tsx +7 -3
- package/src/types/entities.ts +19 -3
- package/src/types/entity_actions.tsx +86 -10
- 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 +91 -42
- package/src/types/firecms.tsx +34 -4
- package/src/types/firecms_context.tsx +18 -1
- package/src/types/index.ts +1 -1
- package/src/types/internal_user_management.ts +24 -0
- package/src/types/navigation.ts +77 -24
- package/src/types/permissions.ts +5 -5
- package/src/types/plugins.tsx +69 -15
- package/src/types/properties.ts +141 -33
- 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 +83 -1
- package/src/types/user.ts +3 -1
- package/src/util/builders.ts +10 -8
- package/src/util/callbacks.ts +119 -0
- package/src/util/collections.ts +8 -0
- package/src/util/createFormexStub.tsx +66 -0
- package/src/util/entities.ts +11 -8
- package/src/util/entity_actions.ts +28 -0
- package/src/util/entity_cache.ts +223 -0
- package/src/util/enums.ts +1 -1
- package/src/util/icon_list.ts +16 -10
- package/src/util/icon_synonyms.ts +3 -100
- package/src/util/icons.tsx +36 -11
- package/src/util/index.ts +3 -0
- package/src/util/join_collections.ts +11 -4
- package/src/util/make_properties_editable.ts +5 -19
- package/src/util/navigation_from_path.ts +33 -12
- package/src/util/navigation_utils.ts +141 -25
- package/src/util/objects.ts +128 -33
- package/src/util/parent_references_from_path.ts +3 -3
- package/src/util/permissions.ts +9 -8
- package/src/util/plurals.ts +0 -2
- package/src/util/property_utils.tsx +17 -6
- package/src/util/references.ts +19 -8
- package/src/util/resolutions.ts +122 -48
- package/src/util/storage.ts +79 -21
- package/src/util/strings.ts +2 -2
- package/src/util/useStorageUploadController.tsx +162 -62
- package/dist/components/EntityCollectionTable/internal/popup_field/ElementResizeListener.d.ts +0 -5
- package/dist/components/FireCMSAppBar.d.ts +0 -26
- package/dist/components/PropertyIdCopyTooltipContent.d.ts +0 -3
- package/dist/components/VirtualTable/common.d.ts +0 -2
- package/dist/core/Drawer.d.ts +0 -23
- package/dist/core/Scaffold.d.ts +0 -55
- package/dist/core/SideEntityView.d.ts +0 -7
- package/dist/form/components/FormikArrayContainer.d.ts +0 -18
- package/dist/form/field_bindings/MarkdownFieldBinding.d.ts +0 -9
- package/dist/internal/useBuildCustomizationController.d.ts +0 -2
- package/dist/internal/useLocaleConfig.d.ts +0 -1
- package/dist/types/appcheck.d.ts +0 -26
- package/src/components/EntityCollectionTable/internal/popup_field/ElementResizeListener.tsx +0 -59
- package/src/components/FireCMSAppBar.tsx +0 -165
- package/src/components/PropertyIdCopyTooltipContent.tsx +0 -28
- package/src/components/common/useDataSourceEntityCollectionTableController.tsx +0 -225
- package/src/core/Drawer.tsx +0 -191
- package/src/core/Scaffold.tsx +0 -281
- package/src/core/SideEntityView.tsx +0 -38
- package/src/form/components/FormikArrayContainer.tsx +0 -44
- package/src/form/field_bindings/MarkdownFieldBinding.tsx +0 -695
- package/src/internal/useBuildCustomizationController.tsx +0 -5
- package/src/internal/useLocaleConfig.tsx +0 -18
- package/src/types/appcheck.ts +0 -29
- /package/src/util/{common.tsx → common.ts} +0 -0
package/src/util/resolutions.ts
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ArrayProperty,
|
|
3
|
+
AuthController,
|
|
3
4
|
CMSType,
|
|
5
|
+
CustomizationController,
|
|
6
|
+
EntityAction,
|
|
4
7
|
EntityCollection,
|
|
5
8
|
EntityCustomView,
|
|
6
9
|
EntityValues,
|
|
@@ -28,8 +31,6 @@ import { getIn } from "@firecms/formex";
|
|
|
28
31
|
import { enumToObjectEntries } from "./enums";
|
|
29
32
|
import { isDefaultFieldConfigId } from "../core";
|
|
30
33
|
|
|
31
|
-
// import util from "util";
|
|
32
|
-
|
|
33
34
|
export const resolveCollection = <M extends Record<string, any>, >
|
|
34
35
|
({
|
|
35
36
|
collection,
|
|
@@ -38,7 +39,9 @@ export const resolveCollection = <M extends Record<string, any>, >
|
|
|
38
39
|
values,
|
|
39
40
|
previousValues,
|
|
40
41
|
userConfigPersistence,
|
|
41
|
-
|
|
42
|
+
propertyConfigs,
|
|
43
|
+
ignoreMissingFields = false,
|
|
44
|
+
authController
|
|
42
45
|
}: {
|
|
43
46
|
collection: EntityCollection<M> | ResolvedEntityCollection<M>;
|
|
44
47
|
path: string,
|
|
@@ -46,7 +49,9 @@ export const resolveCollection = <M extends Record<string, any>, >
|
|
|
46
49
|
values?: Partial<EntityValues<M>>,
|
|
47
50
|
previousValues?: Partial<EntityValues<M>>,
|
|
48
51
|
userConfigPersistence?: UserConfigurationPersistence;
|
|
49
|
-
|
|
52
|
+
propertyConfigs?: Record<string, PropertyConfig>;
|
|
53
|
+
ignoreMissingFields?: boolean;
|
|
54
|
+
authController: AuthController;
|
|
50
55
|
}): ResolvedEntityCollection<M> => {
|
|
51
56
|
|
|
52
57
|
const collectionOverride = userConfigPersistence?.getCollectionConfig<M>(path);
|
|
@@ -58,16 +63,16 @@ export const resolveCollection = <M extends Record<string, any>, >
|
|
|
58
63
|
|
|
59
64
|
const resolvedProperties = Object.entries(collection.properties)
|
|
60
65
|
.map(([key, propertyOrBuilder]) => {
|
|
61
|
-
const propertyValue = usedValues ? getIn(usedValues, key) : undefined;
|
|
62
66
|
const childResolvedProperty = resolveProperty({
|
|
63
67
|
propertyKey: key,
|
|
64
68
|
propertyOrBuilder: propertyOrBuilder as PropertyOrBuilder | ResolvedProperty,
|
|
65
69
|
values: usedValues,
|
|
66
70
|
previousValues: usedPreviousValues,
|
|
67
71
|
path,
|
|
68
|
-
propertyValue,
|
|
69
72
|
entityId,
|
|
70
|
-
|
|
73
|
+
propertyConfigs: propertyConfigs,
|
|
74
|
+
ignoreMissingFields,
|
|
75
|
+
authController
|
|
71
76
|
});
|
|
72
77
|
if (!childResolvedProperty) return {};
|
|
73
78
|
return ({
|
|
@@ -95,24 +100,24 @@ export const resolveCollection = <M extends Record<string, any>, >
|
|
|
95
100
|
* Resolve property builders, enums and arrays.
|
|
96
101
|
* @param propertyOrBuilder
|
|
97
102
|
* @param propertyValue
|
|
98
|
-
* @param values
|
|
99
103
|
*/
|
|
100
104
|
export function resolveProperty<T extends CMSType = CMSType, M extends Record<string, any> = any>({
|
|
101
105
|
propertyOrBuilder,
|
|
102
|
-
propertyValue,
|
|
103
106
|
fromBuilder = false,
|
|
107
|
+
ignoreMissingFields = false,
|
|
104
108
|
...props
|
|
105
109
|
}: {
|
|
106
110
|
propertyKey?: string,
|
|
107
111
|
propertyOrBuilder: PropertyOrBuilder<T, M> | ResolvedProperty<T>,
|
|
108
|
-
propertyValue?: unknown,
|
|
109
112
|
values?: Partial<M>,
|
|
110
113
|
previousValues?: Partial<M>,
|
|
111
114
|
path?: string,
|
|
112
115
|
entityId?: string,
|
|
113
116
|
index?: number,
|
|
114
117
|
fromBuilder?: boolean;
|
|
115
|
-
|
|
118
|
+
propertyConfigs?: Record<string, PropertyConfig<any>>;
|
|
119
|
+
ignoreMissingFields?: boolean;
|
|
120
|
+
authController: AuthController;
|
|
116
121
|
}): ResolvedProperty<T> | null {
|
|
117
122
|
|
|
118
123
|
if (typeof propertyOrBuilder === "object" && "resolved" in propertyOrBuilder) {
|
|
@@ -128,10 +133,11 @@ export function resolveProperty<T extends CMSType = CMSType, M extends Record<st
|
|
|
128
133
|
if (!path)
|
|
129
134
|
throw Error("Trying to resolve a property builder without specifying the entity path");
|
|
130
135
|
|
|
136
|
+
const usedPropertyValue = props.propertyKey ? getIn(props.values, props.propertyKey) : undefined;
|
|
131
137
|
const result: Property<T> | null = propertyOrBuilder({
|
|
132
138
|
...props,
|
|
133
139
|
path,
|
|
134
|
-
propertyValue,
|
|
140
|
+
propertyValue: usedPropertyValue,
|
|
135
141
|
values: props.values ?? {},
|
|
136
142
|
previousValues: props.previousValues ?? props.values ?? {}
|
|
137
143
|
});
|
|
@@ -142,17 +148,17 @@ export function resolveProperty<T extends CMSType = CMSType, M extends Record<st
|
|
|
142
148
|
|
|
143
149
|
resolvedProperty = resolveProperty({
|
|
144
150
|
...props,
|
|
145
|
-
propertyValue,
|
|
146
151
|
propertyOrBuilder: result,
|
|
147
|
-
fromBuilder: true
|
|
152
|
+
fromBuilder: true,
|
|
153
|
+
ignoreMissingFields
|
|
148
154
|
});
|
|
149
155
|
} else {
|
|
150
156
|
const property = propertyOrBuilder as Property<T>;
|
|
151
157
|
if (property.dataType === "map" && property.properties) {
|
|
152
158
|
const properties = resolveProperties({
|
|
159
|
+
ignoreMissingFields,
|
|
153
160
|
...props,
|
|
154
161
|
properties: property.properties,
|
|
155
|
-
propertyValue
|
|
156
162
|
});
|
|
157
163
|
resolvedProperty = {
|
|
158
164
|
...property,
|
|
@@ -163,8 +169,8 @@ export function resolveProperty<T extends CMSType = CMSType, M extends Record<st
|
|
|
163
169
|
} else if (property.dataType === "array") {
|
|
164
170
|
resolvedProperty = resolveArrayProperty({
|
|
165
171
|
property,
|
|
166
|
-
propertyValue,
|
|
167
172
|
fromBuilder,
|
|
173
|
+
ignoreMissingFields,
|
|
168
174
|
...props
|
|
169
175
|
}) as ResolvedProperty<any>;
|
|
170
176
|
} else if ((property.dataType === "string" || property.dataType === "number") && property.enumValues) {
|
|
@@ -181,13 +187,13 @@ export function resolveProperty<T extends CMSType = CMSType, M extends Record<st
|
|
|
181
187
|
}
|
|
182
188
|
|
|
183
189
|
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
|
|
190
|
+
const cmsFields = props.propertyConfigs;
|
|
191
|
+
if (!cmsFields && !ignoreMissingFields) {
|
|
192
|
+
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
193
|
}
|
|
188
|
-
const customField: PropertyConfig
|
|
194
|
+
const customField: PropertyConfig | undefined = cmsFields?.[resolvedProperty.propertyConfig];
|
|
189
195
|
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
|
|
196
|
+
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
197
|
console.warn("Available property configs", cmsFields);
|
|
192
198
|
return null;
|
|
193
199
|
}
|
|
@@ -198,7 +204,7 @@ export function resolveProperty<T extends CMSType = CMSType, M extends Record<st
|
|
|
198
204
|
}
|
|
199
205
|
const customFieldProperty = resolveProperty<any>({
|
|
200
206
|
propertyOrBuilder: configPropertyOrBuilder,
|
|
201
|
-
|
|
207
|
+
ignoreMissingFields,
|
|
202
208
|
...props
|
|
203
209
|
});
|
|
204
210
|
if (customFieldProperty) {
|
|
@@ -216,23 +222,58 @@ export function resolveProperty<T extends CMSType = CMSType, M extends Record<st
|
|
|
216
222
|
: null;
|
|
217
223
|
}
|
|
218
224
|
|
|
225
|
+
export function getArrayResolvedProperties<M>({
|
|
226
|
+
propertyKey,
|
|
227
|
+
propertyValue,
|
|
228
|
+
property,
|
|
229
|
+
...props
|
|
230
|
+
}: {
|
|
231
|
+
propertyValue: any,
|
|
232
|
+
propertyKey?: string,
|
|
233
|
+
property: ArrayProperty<any> | ResolvedArrayProperty<any>,
|
|
234
|
+
ignoreMissingFields: boolean,
|
|
235
|
+
values?: Partial<M>;
|
|
236
|
+
previousValues?: Partial<M>;
|
|
237
|
+
path?: string;
|
|
238
|
+
entityId?: string;
|
|
239
|
+
index?: number;
|
|
240
|
+
fromBuilder?: boolean;
|
|
241
|
+
propertyConfigs?: Record<string, PropertyConfig>;
|
|
242
|
+
authController: AuthController;
|
|
243
|
+
}) {
|
|
244
|
+
|
|
245
|
+
const of = property.of;
|
|
246
|
+
return Array.isArray(propertyValue)
|
|
247
|
+
? propertyValue.map((v: any, index: number) => {
|
|
248
|
+
return resolveProperty({
|
|
249
|
+
propertyKey: `${propertyKey}.${index}`,
|
|
250
|
+
propertyOrBuilder: of,
|
|
251
|
+
...props,
|
|
252
|
+
index
|
|
253
|
+
});
|
|
254
|
+
}).filter(e => Boolean(e)) as ResolvedProperty[]
|
|
255
|
+
: [];
|
|
256
|
+
}
|
|
257
|
+
|
|
219
258
|
export function resolveArrayProperty<T extends any[], M>({
|
|
220
259
|
propertyKey,
|
|
221
260
|
property,
|
|
222
|
-
|
|
261
|
+
ignoreMissingFields = false,
|
|
223
262
|
...props
|
|
224
263
|
}: {
|
|
225
264
|
propertyKey?: string,
|
|
226
265
|
property: ArrayProperty<T> | ResolvedArrayProperty<T>,
|
|
227
|
-
propertyValue: any,
|
|
228
266
|
values?: Partial<M>,
|
|
229
267
|
previousValues?: Partial<M>,
|
|
230
268
|
path?: string,
|
|
231
269
|
entityId?: string,
|
|
232
270
|
index?: number,
|
|
233
271
|
fromBuilder?: boolean;
|
|
234
|
-
|
|
272
|
+
propertyConfigs?: Record<string, PropertyConfig>;
|
|
273
|
+
ignoreMissingFields?: boolean;
|
|
274
|
+
authController: AuthController;
|
|
235
275
|
}): ResolvedArrayProperty {
|
|
276
|
+
const propertyValue = propertyKey ? getIn(props.values, propertyKey) : undefined;
|
|
236
277
|
|
|
237
278
|
if (property.of) {
|
|
238
279
|
if (Array.isArray(property.of)) {
|
|
@@ -244,30 +285,27 @@ export function resolveArrayProperty<T extends any[], M>({
|
|
|
244
285
|
return resolveProperty({
|
|
245
286
|
propertyKey: `${propertyKey}.${index}`,
|
|
246
287
|
propertyOrBuilder: p as Property<any>,
|
|
247
|
-
|
|
288
|
+
ignoreMissingFields,
|
|
248
289
|
...props,
|
|
249
|
-
index
|
|
290
|
+
index,
|
|
250
291
|
});
|
|
251
292
|
})
|
|
252
293
|
} as ResolvedArrayProperty;
|
|
253
294
|
} else {
|
|
254
295
|
const of = property.of;
|
|
255
|
-
const resolvedProperties
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
})).filter(e => Boolean(e)) as ResolvedProperty[]
|
|
263
|
-
: [];
|
|
296
|
+
const resolvedProperties = getArrayResolvedProperties({
|
|
297
|
+
propertyValue,
|
|
298
|
+
propertyKey,
|
|
299
|
+
property,
|
|
300
|
+
ignoreMissingFields,
|
|
301
|
+
...props
|
|
302
|
+
});
|
|
264
303
|
const ofProperty = resolveProperty({
|
|
265
|
-
propertyKey: `${propertyKey}`,
|
|
266
304
|
propertyOrBuilder: of,
|
|
267
|
-
|
|
305
|
+
ignoreMissingFields,
|
|
268
306
|
...props
|
|
269
307
|
});
|
|
270
|
-
if (!ofProperty)
|
|
308
|
+
if (!ofProperty && !ignoreMissingFields)
|
|
271
309
|
throw Error("When using a property builder as the 'of' prop of an ArrayProperty, you must return a valid child property")
|
|
272
310
|
return {
|
|
273
311
|
...property,
|
|
@@ -287,14 +325,15 @@ export function resolveArrayProperty<T extends any[], M>({
|
|
|
287
325
|
return resolveProperty({
|
|
288
326
|
propertyKey: `${propertyKey}.${index}`,
|
|
289
327
|
propertyOrBuilder: childProperty,
|
|
290
|
-
|
|
328
|
+
ignoreMissingFields,
|
|
291
329
|
...props
|
|
292
330
|
});
|
|
293
331
|
}).filter(e => Boolean(e)) as ResolvedProperty[]
|
|
294
332
|
: [];
|
|
295
333
|
const properties = resolveProperties<any>({
|
|
334
|
+
propertyKey,
|
|
296
335
|
properties: property.oneOf.properties,
|
|
297
|
-
|
|
336
|
+
ignoreMissingFields,
|
|
298
337
|
...props
|
|
299
338
|
});
|
|
300
339
|
return {
|
|
@@ -325,27 +364,29 @@ export function resolveArrayProperty<T extends any[], M>({
|
|
|
325
364
|
* @param value
|
|
326
365
|
*/
|
|
327
366
|
export function resolveProperties<M extends Record<string, any>>({
|
|
367
|
+
propertyKey,
|
|
328
368
|
properties,
|
|
329
|
-
|
|
369
|
+
ignoreMissingFields,
|
|
330
370
|
...props
|
|
331
371
|
}: {
|
|
372
|
+
propertyKey?: string,
|
|
332
373
|
properties: PropertiesOrBuilders<M>,
|
|
333
|
-
propertyValue: unknown,
|
|
334
374
|
values?: Partial<M>,
|
|
335
375
|
previousValues?: Partial<M>,
|
|
336
376
|
path?: string,
|
|
337
377
|
entityId?: string,
|
|
338
378
|
index?: number,
|
|
339
379
|
fromBuilder?: boolean;
|
|
340
|
-
|
|
380
|
+
propertyConfigs?: Record<string, PropertyConfig>;
|
|
381
|
+
ignoreMissingFields?: boolean;
|
|
382
|
+
authController: AuthController;
|
|
341
383
|
}): ResolvedProperties<M> {
|
|
342
384
|
return Object.entries<PropertyOrBuilder>(properties as Record<string, PropertyOrBuilder>)
|
|
343
385
|
.map(([key, property]) => {
|
|
344
|
-
const thisPropertyValue = propertyValue && typeof propertyValue === "object" ? getValueInPath(propertyValue, key) : undefined;
|
|
345
386
|
const childResolvedProperty = resolveProperty({
|
|
346
|
-
propertyKey: key,
|
|
387
|
+
propertyKey: propertyKey ? `${propertyKey}.${key}` : undefined,
|
|
347
388
|
propertyOrBuilder: property,
|
|
348
|
-
|
|
389
|
+
ignoreMissingFields,
|
|
349
390
|
...props
|
|
350
391
|
});
|
|
351
392
|
if (!childResolvedProperty) return {};
|
|
@@ -367,7 +408,7 @@ export function resolvePropertyEnum(property: StringProperty | NumberProperty, f
|
|
|
367
408
|
return {
|
|
368
409
|
...property,
|
|
369
410
|
resolved: true,
|
|
370
|
-
enumValues: enumToObjectEntries(property.enumValues)?.filter((value) => value && value.id && value.label) ?? [],
|
|
411
|
+
enumValues: enumToObjectEntries(property.enumValues)?.filter((value) => value && (value.id || value.id === 0) && value.label) ?? [],
|
|
371
412
|
fromBuilder: fromBuilder ?? false
|
|
372
413
|
}
|
|
373
414
|
}
|
|
@@ -397,3 +438,36 @@ export function resolveEntityView(entityView: string | EntityCustomView<any>, co
|
|
|
397
438
|
return entityView;
|
|
398
439
|
}
|
|
399
440
|
}
|
|
441
|
+
|
|
442
|
+
export function resolveEntityAction<M extends Record<string, any>>(
|
|
443
|
+
entityAction: string | EntityAction<M>,
|
|
444
|
+
contextEntityActions?: EntityAction<M>[]
|
|
445
|
+
): EntityAction<M> | undefined {
|
|
446
|
+
if (typeof entityAction === "string") {
|
|
447
|
+
return contextEntityActions?.find((entry) => entry.key === entityAction);
|
|
448
|
+
} else {
|
|
449
|
+
return entityAction;
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
export function resolvedSelectedEntityView<M extends Record<string, any>>(
|
|
454
|
+
customViews: (string | EntityCustomView<M>)[] | undefined,
|
|
455
|
+
customizationController: CustomizationController,
|
|
456
|
+
selectedTab?: string,
|
|
457
|
+
canEdit?: boolean,
|
|
458
|
+
) {
|
|
459
|
+
const resolvedEntityViews = customViews ? customViews
|
|
460
|
+
.map(e => resolveEntityView(e, customizationController.entityViews))
|
|
461
|
+
.filter((e): e is EntityCustomView<M> => Boolean(e))
|
|
462
|
+
// .filter((e) => canEdit || !e.includeActions)
|
|
463
|
+
: [];
|
|
464
|
+
|
|
465
|
+
const selectedEntityView = resolvedEntityViews.find(e => e.key === selectedTab);
|
|
466
|
+
const selectedSecondaryForm = customViews
|
|
467
|
+
&& resolvedEntityViews.filter(e => e.includeActions).find(e => e.key === selectedTab);
|
|
468
|
+
return {
|
|
469
|
+
resolvedEntityViews,
|
|
470
|
+
selectedEntityView,
|
|
471
|
+
selectedSecondaryForm
|
|
472
|
+
};
|
|
473
|
+
}
|
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
|
}
|