@firecms/core 3.0.0-canary.21 → 3.0.0-canary.211
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/dist/app/AppBar.d.ts +12 -0
- package/dist/app/Drawer.d.ts +16 -0
- package/dist/app/Scaffold.d.ts +34 -0
- package/dist/app/index.d.ts +4 -0
- package/dist/app/useApp.d.ts +16 -0
- package/dist/components/ArrayContainer.d.ts +23 -6
- package/dist/components/CircularProgressCenter.d.ts +1 -1
- package/dist/components/ClearFilterSortButton.d.ts +5 -0
- package/dist/components/{DeleteConfirmationDialog.d.ts → ConfirmationDialog.d.ts} +1 -1
- package/dist/components/EntityCollectionTable/EntityCollectionRowActions.d.ts +13 -13
- package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +2 -2
- package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +22 -6
- package/dist/components/EntityCollectionTable/PropertyTableCell.d.ts +1 -0
- package/dist/components/EntityCollectionTable/column_utils.d.ts +1 -2
- package/dist/components/EntityCollectionTable/fields/TableReferenceField.d.ts +3 -1
- package/dist/components/EntityCollectionTable/index.d.ts +1 -1
- package/dist/components/EntityCollectionTable/internal/CollectionTableToolbar.d.ts +1 -4
- package/dist/components/EntityCollectionTable/internal/EntityTableCell.d.ts +2 -2
- package/dist/components/EntityCollectionTable/internal/popup_field/PopupFormField.d.ts +7 -4
- package/dist/components/EntityCollectionView/EntityCollectionView.d.ts +16 -2
- package/dist/components/EntityCollectionView/EntityCollectionViewStartActions.d.ts +11 -0
- package/dist/components/EntityCollectionView/utils.d.ts +3 -0
- package/dist/components/EntityJsonPreview.d.ts +3 -0
- package/dist/components/EntityPreview.d.ts +5 -4
- package/dist/components/ErrorView.d.ts +1 -1
- package/dist/components/HomePage/DefaultHomePage.d.ts +1 -1
- package/dist/components/HomePage/NavigationCardBinding.d.ts +1 -1
- package/dist/components/PropertyConfigBadge.d.ts +2 -1
- package/dist/components/PropertyIdCopyTooltip.d.ts +8 -0
- package/dist/components/ReferenceWidget.d.ts +3 -1
- package/dist/components/SelectableTable/SelectableTable.d.ts +13 -3
- package/dist/components/SelectableTable/filters/ReferenceFilterField.d.ts +2 -1
- package/dist/components/UnsavedChangesDialog.d.ts +8 -0
- package/dist/components/VirtualTable/VirtualTableProps.d.ts +28 -12
- package/dist/components/VirtualTable/types.d.ts +3 -3
- package/dist/components/{EntityCollectionTable/internal → common}/default_entity_actions.d.ts +1 -3
- package/dist/components/common/index.d.ts +2 -1
- package/dist/components/common/table_height.d.ts +5 -0
- package/dist/components/common/types.d.ts +4 -6
- package/dist/components/common/useColumnsIds.d.ts +3 -1
- package/dist/components/common/{useDataSourceEntityCollectionTableController.d.ts → useDataSourceTableController.d.ts} +13 -2
- package/dist/components/common/useDebouncedCallback.d.ts +1 -0
- package/dist/components/common/useScrollRestoration.d.ts +14 -0
- package/dist/components/index.d.ts +4 -2
- package/dist/contexts/BreacrumbsContext.d.ts +8 -0
- package/dist/core/DefaultAppBar.d.ts +29 -0
- package/dist/core/DefaultDrawer.d.ts +19 -0
- package/dist/core/DrawerNavigationItem.d.ts +10 -0
- package/dist/core/EntityEditView.d.ts +35 -11
- package/dist/core/EntityEditViewFormActions.d.ts +2 -0
- package/dist/core/FireCMS.d.ts +3 -3
- package/dist/core/FireCMSRouter.d.ts +4 -0
- package/dist/core/NavigationRoutes.d.ts +2 -3
- package/dist/core/SideDialogs.d.ts +4 -2
- package/dist/core/index.d.ts +4 -4
- package/dist/form/EntityForm.d.ts +37 -69
- package/dist/form/EntityFormActions.d.ts +17 -0
- package/dist/form/PropertyFieldBinding.d.ts +1 -1
- package/dist/form/components/ErrorFocus.d.ts +1 -1
- package/dist/form/components/FieldHelperText.d.ts +3 -3
- package/dist/form/components/FormEntry.d.ts +6 -0
- package/dist/form/components/FormLayout.d.ts +5 -0
- package/dist/form/components/LabelWithIcon.d.ts +1 -1
- package/dist/form/components/LabelWithIconAndTooltip.d.ts +15 -0
- package/dist/form/components/StorageItemPreview.d.ts +4 -4
- package/dist/form/components/index.d.ts +3 -1
- package/dist/form/field_bindings/ArrayCustomShapedFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/ArrayOfReferencesFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/BlockFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/KeyValueFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/MapFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/MarkdownEditorFieldBinding.d.ts +11 -0
- package/dist/form/field_bindings/{MultiSelectBinding.d.ts → MultiSelectFieldBinding.d.ts} +1 -1
- package/dist/form/field_bindings/ReadOnlyFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/ReferenceFieldBinding.d.ts +2 -2
- package/dist/form/field_bindings/RepeatFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/SelectFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +3 -5
- package/dist/form/field_bindings/SwitchFieldBinding.d.ts +1 -2
- package/dist/form/field_bindings/TextFieldBinding.d.ts +1 -1
- package/dist/form/index.d.ts +16 -18
- package/dist/form/useClearRestoreValue.d.ts +2 -2
- package/dist/hooks/data/delete.d.ts +4 -4
- package/dist/hooks/data/save.d.ts +4 -5
- package/dist/hooks/data/useCollectionFetch.d.ts +1 -1
- package/dist/hooks/data/useEntityFetch.d.ts +4 -3
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/useAuthController.d.ts +1 -1
- package/dist/hooks/useBreadcrumbsController.d.ts +26 -0
- package/dist/hooks/useBuildNavigationController.d.ts +7 -5
- package/dist/hooks/useFireCMSContext.d.ts +1 -1
- package/dist/hooks/useModeController.d.ts +1 -2
- package/dist/hooks/useProjectLog.d.ts +8 -2
- package/dist/hooks/useResolvedNavigationFrom.d.ts +3 -3
- package/dist/hooks/useValidateAuthenticator.d.ts +4 -8
- package/dist/index.d.ts +1 -0
- package/dist/index.es.js +21921 -14330
- package/dist/index.es.js.map +1 -1
- package/dist/index.umd.js +24271 -588
- package/dist/index.umd.js.map +1 -1
- package/dist/internal/useBuildDataSource.d.ts +1 -16
- package/dist/internal/useBuildSideEntityController.d.ts +2 -2
- package/dist/internal/useUnsavedChangesDialog.d.ts +7 -9
- package/dist/preview/PropertyPreviewProps.d.ts +6 -1
- package/dist/preview/components/EnumValuesChip.d.ts +1 -1
- package/dist/preview/components/ReferencePreview.d.ts +3 -2
- package/dist/preview/components/StorageThumbnail.d.ts +2 -1
- package/dist/preview/components/UrlComponentPreview.d.ts +2 -1
- package/dist/preview/util.d.ts +3 -3
- package/dist/routes/CustomCMSRoute.d.ts +4 -0
- package/dist/routes/FireCMSRoute.d.ts +1 -0
- package/dist/routes/HomePageRoute.d.ts +3 -0
- package/dist/types/auth.d.ts +8 -10
- package/dist/types/collections.d.ts +77 -22
- package/dist/types/datasource.d.ts +52 -36
- package/dist/types/dialogs_controller.d.ts +7 -3
- package/dist/types/entities.d.ts +7 -2
- package/dist/types/entity_actions.d.ts +28 -4
- package/dist/types/entity_callbacks.d.ts +16 -16
- package/dist/types/entity_overrides.d.ts +2 -2
- package/dist/types/export_import.d.ts +4 -4
- package/dist/types/fields.d.ts +71 -42
- package/dist/types/firecms.d.ts +6 -2
- package/dist/types/firecms_context.d.ts +1 -1
- package/dist/types/index.d.ts +0 -1
- package/dist/types/navigation.d.ts +32 -14
- package/dist/types/permissions.d.ts +4 -4
- package/dist/types/plugins.d.ts +23 -12
- package/dist/types/properties.d.ts +52 -24
- package/dist/types/property_config.d.ts +0 -2
- package/dist/types/side_dialogs_controller.d.ts +10 -0
- package/dist/types/side_entity_controller.d.ts +6 -1
- package/dist/types/storage.d.ts +86 -3
- package/dist/types/user.d.ts +1 -0
- package/dist/util/builders.d.ts +3 -3
- package/dist/util/entities.d.ts +3 -3
- package/dist/util/entity_actions.d.ts +2 -0
- package/dist/util/entity_cache.d.ts +23 -0
- package/dist/util/icon_list.d.ts +5 -1
- package/dist/util/icon_synonyms.d.ts +1 -98
- package/dist/util/icons.d.ts +6 -3
- package/dist/util/index.d.ts +2 -0
- package/dist/util/navigation_from_path.d.ts +6 -1
- package/dist/util/navigation_utils.d.ts +14 -3
- package/dist/util/objects.d.ts +2 -1
- package/dist/util/permissions.d.ts +4 -4
- package/dist/util/plurals.d.ts +0 -2
- package/dist/util/property_utils.d.ts +3 -3
- package/dist/util/resolutions.d.ts +36 -17
- package/dist/util/storage.d.ts +23 -2
- package/dist/util/useStorageUploadController.d.ts +3 -3
- package/package.json +62 -48
- package/src/app/AppBar.tsx +18 -0
- package/src/app/Drawer.tsx +24 -0
- package/src/app/Scaffold.tsx +253 -0
- package/src/app/index.ts +4 -0
- package/src/app/useApp.tsx +32 -0
- package/src/components/ArrayContainer.tsx +127 -41
- package/src/components/CircularProgressCenter.tsx +2 -2
- package/src/components/ClearFilterSortButton.tsx +41 -0
- package/src/components/{DeleteConfirmationDialog.tsx → ConfirmationDialog.tsx} +3 -3
- package/src/components/DeleteEntityDialog.tsx +10 -19
- package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +54 -37
- package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +38 -31
- package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +30 -9
- package/src/components/EntityCollectionTable/PropertyTableCell.tsx +47 -39
- package/src/components/EntityCollectionTable/column_utils.tsx +3 -3
- package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +30 -16
- package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +19 -17
- package/src/components/EntityCollectionTable/index.tsx +1 -1
- package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +31 -36
- package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +36 -34
- package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +20 -8
- package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +81 -80
- package/src/components/EntityCollectionView/EntityCollectionView.tsx +207 -113
- package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +4 -2
- package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +68 -0
- package/src/components/EntityCollectionView/useSelectionController.tsx +20 -7
- package/src/components/EntityCollectionView/utils.ts +19 -0
- package/src/components/EntityJsonPreview.tsx +66 -0
- package/src/components/EntityPreview.tsx +62 -52
- package/src/components/EntityView.tsx +10 -10
- package/src/components/ErrorView.tsx +4 -4
- package/src/components/HomePage/DefaultHomePage.tsx +26 -19
- package/src/components/HomePage/FavouritesView.tsx +6 -11
- package/src/components/HomePage/NavigationCard.tsx +3 -3
- package/src/components/HomePage/NavigationCardBinding.tsx +5 -10
- package/src/components/HomePage/NavigationGroup.tsx +2 -2
- package/src/components/HomePage/SmallNavigationCard.tsx +5 -6
- package/src/components/NotFoundPage.tsx +2 -2
- package/src/components/PropertyConfigBadge.tsx +9 -3
- package/src/components/PropertyIdCopyTooltip.tsx +47 -0
- package/src/components/ReferenceTable/ReferenceSelectionTable.tsx +19 -13
- package/src/components/ReferenceWidget.tsx +21 -11
- package/src/components/SearchIconsView.tsx +10 -7
- package/src/components/SelectableTable/SelectableTable.tsx +27 -12
- package/src/components/SelectableTable/filters/BooleanFilterField.tsx +2 -3
- package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +25 -8
- package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +36 -12
- package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +92 -23
- package/src/components/UnsavedChangesDialog.tsx +42 -0
- package/src/components/VirtualTable/VirtualTable.tsx +96 -48
- package/src/components/VirtualTable/VirtualTableCell.tsx +1 -9
- package/src/components/VirtualTable/VirtualTableHeader.tsx +10 -10
- package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +2 -2
- package/src/components/VirtualTable/VirtualTableProps.tsx +33 -14
- package/src/components/VirtualTable/VirtualTableRow.tsx +5 -6
- package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +5 -5
- package/src/components/VirtualTable/fields/VirtualTableInput.tsx +3 -2
- package/src/components/VirtualTable/fields/VirtualTableNumberInput.tsx +2 -1
- package/src/components/VirtualTable/fields/VirtualTableSelect.tsx +16 -28
- package/src/components/VirtualTable/types.tsx +2 -3
- package/src/components/{EntityCollectionTable/internal → common}/default_entity_actions.tsx +33 -40
- package/src/components/common/index.ts +2 -1
- package/src/components/{VirtualTable/common.tsx → common/table_height.tsx} +5 -2
- package/src/components/common/types.tsx +4 -6
- package/src/components/common/useColumnsIds.tsx +24 -3
- package/src/components/common/useDataSourceTableController.tsx +420 -0
- package/src/components/common/useDebouncedCallback.tsx +20 -0
- package/src/components/common/useScrollRestoration.tsx +68 -0
- package/src/components/common/useTableSearchHelper.ts +53 -12
- package/src/components/index.tsx +4 -2
- package/src/contexts/BreacrumbsContext.tsx +38 -0
- package/src/contexts/DialogsProvider.tsx +5 -4
- package/src/contexts/ModeController.tsx +1 -3
- package/src/contexts/SnackbarProvider.tsx +2 -0
- package/src/core/DefaultAppBar.tsx +219 -0
- package/src/core/DefaultDrawer.tsx +185 -0
- package/src/core/DrawerNavigationItem.tsx +66 -0
- package/src/core/EntityEditView.tsx +345 -480
- package/src/core/EntityEditViewFormActions.tsx +199 -0
- package/src/core/EntitySidePanel.tsx +86 -17
- package/src/core/FireCMS.tsx +56 -49
- package/src/core/FireCMSRouter.tsx +17 -0
- package/src/core/NavigationRoutes.tsx +28 -38
- package/src/core/SideDialogs.tsx +22 -12
- package/src/core/field_configs.tsx +11 -12
- package/src/core/index.tsx +6 -5
- package/src/form/EntityForm.tsx +585 -539
- package/src/form/EntityFormActions.tsx +169 -0
- package/src/form/PropertyFieldBinding.tsx +85 -44
- package/src/form/components/CustomIdField.tsx +6 -2
- package/src/form/components/FieldHelperText.tsx +4 -4
- package/src/form/components/FormEntry.tsx +22 -0
- package/src/form/components/FormLayout.tsx +16 -0
- package/src/form/components/LabelWithIcon.tsx +30 -19
- package/src/form/components/LabelWithIconAndTooltip.tsx +28 -0
- package/src/form/components/StorageItemPreview.tsx +22 -12
- package/src/form/components/StorageUploadProgress.tsx +4 -5
- package/src/form/components/index.tsx +3 -1
- package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +31 -19
- package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +47 -35
- package/src/form/field_bindings/BlockFieldBinding.tsx +56 -34
- package/src/form/field_bindings/DateTimeFieldBinding.tsx +18 -14
- package/src/form/field_bindings/KeyValueFieldBinding.tsx +60 -51
- package/src/form/field_bindings/MapFieldBinding.tsx +71 -54
- package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +153 -0
- package/src/form/field_bindings/{MultiSelectBinding.tsx → MultiSelectFieldBinding.tsx} +25 -20
- package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +11 -16
- package/src/form/field_bindings/ReferenceFieldBinding.tsx +42 -31
- package/src/form/field_bindings/RepeatFieldBinding.tsx +56 -35
- package/src/form/field_bindings/SelectFieldBinding.tsx +22 -14
- package/src/form/field_bindings/StorageUploadFieldBinding.tsx +42 -50
- package/src/form/field_bindings/SwitchFieldBinding.tsx +29 -24
- package/src/form/field_bindings/TextFieldBinding.tsx +28 -24
- package/src/form/index.tsx +16 -37
- package/src/form/useClearRestoreValue.tsx +2 -2
- package/src/form/validation.ts +13 -23
- package/src/hooks/data/delete.ts +6 -5
- package/src/hooks/data/save.ts +13 -9
- package/src/hooks/data/useCollectionFetch.tsx +3 -3
- package/src/hooks/data/useDataSource.tsx +11 -3
- package/src/hooks/data/useEntityFetch.tsx +10 -6
- package/src/hooks/index.tsx +1 -0
- package/src/hooks/useAuthController.tsx +1 -1
- package/src/hooks/useBreadcrumbsController.tsx +31 -0
- package/src/hooks/useBuildLocalConfigurationPersistence.tsx +8 -10
- package/src/hooks/useBuildModeController.tsx +22 -29
- package/src/hooks/useBuildNavigationController.tsx +159 -54
- package/src/hooks/useFireCMSContext.tsx +5 -5
- package/src/hooks/useLargeLayout.tsx +0 -35
- package/src/hooks/useModeController.tsx +1 -2
- package/src/hooks/useProjectLog.tsx +32 -10
- package/src/hooks/useResolvedNavigationFrom.tsx +10 -12
- package/src/hooks/useValidateAuthenticator.tsx +17 -37
- package/src/index.ts +1 -0
- package/src/internal/useBuildDataSource.ts +72 -82
- package/src/internal/useBuildSideDialogsController.tsx +4 -2
- package/src/internal/useBuildSideEntityController.tsx +194 -73
- package/src/internal/useUnsavedChangesDialog.tsx +127 -91
- package/src/preview/PropertyPreview.tsx +17 -24
- package/src/preview/PropertyPreviewProps.tsx +7 -1
- package/src/preview/components/BooleanPreview.tsx +2 -2
- package/src/preview/components/EmptyValue.tsx +1 -1
- package/src/preview/components/EnumValuesChip.tsx +2 -2
- package/src/preview/components/ImagePreview.tsx +25 -36
- package/src/preview/components/ReferencePreview.tsx +22 -33
- package/src/preview/components/StorageThumbnail.tsx +5 -1
- package/src/preview/components/UrlComponentPreview.tsx +60 -28
- package/src/preview/property_previews/ArrayOfMapsPreview.tsx +2 -3
- package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +4 -3
- package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +2 -3
- package/src/preview/property_previews/ArrayOfStringsPreview.tsx +1 -2
- package/src/preview/property_previews/ArrayOneOfPreview.tsx +4 -5
- package/src/preview/property_previews/ArrayPropertyPreview.tsx +4 -5
- package/src/preview/property_previews/MapPropertyPreview.tsx +12 -11
- package/src/preview/property_previews/SkeletonPropertyComponent.tsx +12 -12
- package/src/preview/property_previews/StringPropertyPreview.tsx +3 -3
- package/src/preview/util.ts +10 -10
- package/src/routes/CustomCMSRoute.tsx +21 -0
- package/src/routes/FireCMSRoute.tsx +235 -0
- package/src/routes/HomePageRoute.tsx +17 -0
- package/src/types/auth.tsx +9 -13
- package/src/types/collections.ts +94 -27
- package/src/types/customization_controller.tsx +0 -1
- package/src/types/datasource.ts +61 -43
- package/src/types/dialogs_controller.tsx +7 -3
- package/src/types/entities.ts +12 -2
- package/src/types/entity_actions.tsx +32 -7
- package/src/types/entity_callbacks.ts +18 -18
- package/src/types/entity_overrides.tsx +2 -2
- package/src/types/export_import.ts +4 -4
- package/src/types/fields.tsx +81 -46
- package/src/types/firecms.tsx +7 -2
- package/src/types/firecms_context.tsx +1 -1
- package/src/types/index.ts +0 -1
- package/src/types/navigation.ts +38 -18
- package/src/types/permissions.ts +5 -5
- package/src/types/plugins.tsx +25 -14
- package/src/types/properties.ts +60 -25
- package/src/types/property_config.tsx +0 -2
- package/src/types/side_dialogs_controller.tsx +15 -0
- package/src/types/side_entity_controller.tsx +6 -1
- package/src/types/storage.ts +94 -3
- package/src/types/user.ts +2 -0
- package/src/util/builders.ts +10 -8
- package/src/util/entities.ts +9 -6
- package/src/util/entity_actions.ts +28 -0
- package/src/util/entity_cache.ts +204 -0
- package/src/util/enums.ts +1 -1
- package/src/util/icon_list.ts +16 -10
- package/src/util/icon_synonyms.ts +3 -100
- package/src/util/icons.tsx +17 -7
- package/src/util/index.ts +2 -0
- package/src/util/join_collections.ts +3 -0
- package/src/util/make_properties_editable.ts +13 -5
- package/src/util/navigation_from_path.ts +13 -6
- package/src/util/navigation_utils.ts +59 -7
- package/src/util/objects.ts +48 -28
- package/src/util/parent_references_from_path.ts +3 -3
- package/src/util/permissions.ts +9 -8
- package/src/util/plurals.ts +0 -2
- package/src/util/property_utils.tsx +11 -4
- package/src/util/references.ts +11 -2
- package/src/util/resolutions.ts +100 -46
- package/src/util/storage.ts +79 -21
- package/src/util/strings.ts +2 -2
- package/src/util/useStorageUploadController.tsx +71 -27
- package/dist/components/FireCMSAppBar.d.ts +0 -26
- package/dist/components/PropertyIdCopyTooltipContent.d.ts +0 -3
- package/dist/components/VirtualTable/common.d.ts +0 -2
- package/dist/core/Drawer.d.ts +0 -23
- package/dist/core/Scaffold.d.ts +0 -55
- package/dist/core/SideEntityView.d.ts +0 -7
- package/dist/form/components/FormikArrayContainer.d.ts +0 -18
- package/dist/form/field_bindings/MarkdownFieldBinding.d.ts +0 -9
- package/dist/internal/useBuildCustomizationController.d.ts +0 -2
- package/dist/internal/useLocaleConfig.d.ts +0 -1
- package/dist/types/appcheck.d.ts +0 -26
- package/src/components/FireCMSAppBar.tsx +0 -165
- package/src/components/PropertyIdCopyTooltipContent.tsx +0 -28
- package/src/components/common/useDataSourceEntityCollectionTableController.tsx +0 -225
- package/src/core/Drawer.tsx +0 -191
- package/src/core/Scaffold.tsx +0 -281
- package/src/core/SideEntityView.tsx +0 -38
- package/src/form/components/FormikArrayContainer.tsx +0 -44
- package/src/form/field_bindings/MarkdownFieldBinding.tsx +0 -695
- package/src/internal/useBuildCustomizationController.tsx +0 -5
- package/src/internal/useLocaleConfig.tsx +0 -18
- package/src/types/appcheck.ts +0 -29
- /package/src/util/{common.tsx → common.ts} +0 -0
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { Entity, EntityAction, FireCMSContext, ResolvedEntityCollection, SideEntityController } from "../types";
|
|
3
|
+
import { Button, cls, defaultBorderMixin, DialogActions, IconButton, LoadingButton, Typography } from "@firecms/ui";
|
|
4
|
+
import { FormexController } from "@firecms/formex";
|
|
5
|
+
import { useFireCMSContext, useSideEntityController } from "../hooks";
|
|
6
|
+
|
|
7
|
+
export interface EntityFormActionsProps {
|
|
8
|
+
collection: ResolvedEntityCollection;
|
|
9
|
+
path: string;
|
|
10
|
+
entity?: Entity;
|
|
11
|
+
layout: "bottom" | "side";
|
|
12
|
+
savingError?: Error;
|
|
13
|
+
formex: FormexController<any>;
|
|
14
|
+
disabled: boolean;
|
|
15
|
+
status: "new" | "existing" | "copy";
|
|
16
|
+
pluginActions: React.ReactNode[];
|
|
17
|
+
openEntityMode: "side_panel" | "full_screen";
|
|
18
|
+
showDefaultActions?: boolean;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export function EntityFormActions({
|
|
22
|
+
collection,
|
|
23
|
+
entity,
|
|
24
|
+
layout,
|
|
25
|
+
savingError,
|
|
26
|
+
formex,
|
|
27
|
+
disabled,
|
|
28
|
+
status,
|
|
29
|
+
pluginActions,
|
|
30
|
+
openEntityMode
|
|
31
|
+
}: EntityFormActionsProps) {
|
|
32
|
+
|
|
33
|
+
const context = useFireCMSContext();
|
|
34
|
+
const sideEntityController = useSideEntityController();
|
|
35
|
+
|
|
36
|
+
return layout === "bottom"
|
|
37
|
+
? buildBottomActions({
|
|
38
|
+
savingError,
|
|
39
|
+
entity,
|
|
40
|
+
collection,
|
|
41
|
+
context,
|
|
42
|
+
sideEntityController,
|
|
43
|
+
isSubmitting: formex.isSubmitting,
|
|
44
|
+
disabled,
|
|
45
|
+
status,
|
|
46
|
+
pluginActions,
|
|
47
|
+
openEntityMode
|
|
48
|
+
})
|
|
49
|
+
: buildSideActions({
|
|
50
|
+
savingError,
|
|
51
|
+
entity,
|
|
52
|
+
collection,
|
|
53
|
+
context,
|
|
54
|
+
sideEntityController,
|
|
55
|
+
isSubmitting: formex.isSubmitting,
|
|
56
|
+
disabled,
|
|
57
|
+
status,
|
|
58
|
+
pluginActions,
|
|
59
|
+
openEntityMode
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
type ActionsViewProps<M extends object> = {
|
|
64
|
+
savingError: Error | undefined,
|
|
65
|
+
entity: Entity<M> | undefined,
|
|
66
|
+
formActions?: EntityAction[],
|
|
67
|
+
collection: ResolvedEntityCollection,
|
|
68
|
+
context: FireCMSContext,
|
|
69
|
+
sideEntityController: SideEntityController,
|
|
70
|
+
isSubmitting: boolean,
|
|
71
|
+
disabled: boolean,
|
|
72
|
+
status: "new" | "existing" | "copy",
|
|
73
|
+
pluginActions?: React.ReactNode[],
|
|
74
|
+
openEntityMode: "side_panel" | "full_screen";
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
function buildBottomActions<M extends object>({
|
|
78
|
+
savingError,
|
|
79
|
+
entity,
|
|
80
|
+
formActions,
|
|
81
|
+
collection,
|
|
82
|
+
context,
|
|
83
|
+
sideEntityController,
|
|
84
|
+
isSubmitting,
|
|
85
|
+
disabled,
|
|
86
|
+
status,
|
|
87
|
+
pluginActions,
|
|
88
|
+
openEntityMode
|
|
89
|
+
}: ActionsViewProps<M>) {
|
|
90
|
+
|
|
91
|
+
return <DialogActions position={"absolute"}>
|
|
92
|
+
{savingError &&
|
|
93
|
+
<div className="text-right">
|
|
94
|
+
<Typography color={"error"}>{savingError.message}</Typography>
|
|
95
|
+
</div>
|
|
96
|
+
}
|
|
97
|
+
{entity && (formActions ?? []).length > 0 && <div className="flex-grow flex overflow-auto no-scrollbar">
|
|
98
|
+
{(formActions ?? []).map(action => (
|
|
99
|
+
<IconButton
|
|
100
|
+
key={action.name}
|
|
101
|
+
color="primary"
|
|
102
|
+
onClick={(event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {
|
|
103
|
+
event.stopPropagation();
|
|
104
|
+
if (entity)
|
|
105
|
+
action.onClick({
|
|
106
|
+
entity,
|
|
107
|
+
fullPath: collection.path,
|
|
108
|
+
collection: collection,
|
|
109
|
+
context,
|
|
110
|
+
sideEntityController,
|
|
111
|
+
openEntityMode: openEntityMode
|
|
112
|
+
});
|
|
113
|
+
}}>
|
|
114
|
+
{action.icon}
|
|
115
|
+
</IconButton>
|
|
116
|
+
))}
|
|
117
|
+
</div>}
|
|
118
|
+
{pluginActions}
|
|
119
|
+
<Button variant="text" disabled={disabled || isSubmitting} type="reset">
|
|
120
|
+
{status === "existing" ? "Discard" : "Clear"}
|
|
121
|
+
</Button>
|
|
122
|
+
<Button variant={"filled"} color="primary" type="submit"
|
|
123
|
+
disabled={disabled || isSubmitting}>
|
|
124
|
+
{status === "existing" && "Save"}
|
|
125
|
+
{status === "copy" && "Create copy"}
|
|
126
|
+
{status === "new" && "Create"}
|
|
127
|
+
</Button>
|
|
128
|
+
|
|
129
|
+
</DialogActions>;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
function buildSideActions<M extends object>({
|
|
133
|
+
savingError,
|
|
134
|
+
entity,
|
|
135
|
+
formActions,
|
|
136
|
+
collection,
|
|
137
|
+
context,
|
|
138
|
+
sideEntityController,
|
|
139
|
+
isSubmitting,
|
|
140
|
+
disabled,
|
|
141
|
+
status,
|
|
142
|
+
pluginActions
|
|
143
|
+
}: ActionsViewProps<M>) {
|
|
144
|
+
|
|
145
|
+
return <div
|
|
146
|
+
className={cls("overflow-auto h-full flex flex-col gap-2 w-80 2xl:w-96 px-4 py-16 sticky top-0 border-l", defaultBorderMixin)}>
|
|
147
|
+
<LoadingButton fullWidth={true}
|
|
148
|
+
variant="filled"
|
|
149
|
+
color="primary"
|
|
150
|
+
type="submit"
|
|
151
|
+
size={"large"}
|
|
152
|
+
disabled={disabled || isSubmitting}>
|
|
153
|
+
{status === "existing" && "Save"}
|
|
154
|
+
{status === "copy" && "Create copy"}
|
|
155
|
+
{status === "new" && "Create"}
|
|
156
|
+
</LoadingButton>
|
|
157
|
+
<Button fullWidth={true} variant="text" disabled={disabled || isSubmitting} type="reset">
|
|
158
|
+
{status === "existing" ? "Discard" : "Clear"}
|
|
159
|
+
</Button>
|
|
160
|
+
|
|
161
|
+
{pluginActions}
|
|
162
|
+
|
|
163
|
+
{savingError &&
|
|
164
|
+
<div className="text-right">
|
|
165
|
+
<Typography color={"error"}>{savingError.message}</Typography>
|
|
166
|
+
</div>
|
|
167
|
+
}
|
|
168
|
+
</div>;
|
|
169
|
+
}
|
|
@@ -5,13 +5,13 @@ import { Field, FieldProps as FormexFieldProps, getIn } from "@firecms/formex";
|
|
|
5
5
|
|
|
6
6
|
import {
|
|
7
7
|
CMSType,
|
|
8
|
-
EntityCollection,
|
|
9
8
|
FieldProps,
|
|
10
9
|
FireCMSPlugin,
|
|
11
10
|
PluginFieldBuilderParams,
|
|
12
11
|
Property,
|
|
13
12
|
PropertyFieldBindingProps,
|
|
14
13
|
PropertyOrBuilder,
|
|
14
|
+
ResolvedEntityCollection,
|
|
15
15
|
ResolvedProperty
|
|
16
16
|
} from "../types";
|
|
17
17
|
import { ReadOnlyFieldBinding } from "./field_bindings/ReadOnlyFieldBinding";
|
|
@@ -51,6 +51,13 @@ export const PropertyFieldBinding = React.memo(PropertyFieldBindingInternal, (a:
|
|
|
51
51
|
if (a.propertyKey !== b.propertyKey) {
|
|
52
52
|
return false;
|
|
53
53
|
}
|
|
54
|
+
if (a.index !== b.index) {
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
if (a.size !== b.size) {
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
54
61
|
const aIsBuilder = isPropertyBuilder(a.property) || a.property.fromBuilder;
|
|
55
62
|
const bIsBuilder = isPropertyBuilder(b.property) || b.property.fromBuilder;
|
|
56
63
|
|
|
@@ -67,24 +74,27 @@ export const PropertyFieldBinding = React.memo(PropertyFieldBindingInternal, (a:
|
|
|
67
74
|
return false;
|
|
68
75
|
}) as typeof PropertyFieldBindingInternal;
|
|
69
76
|
|
|
70
|
-
function PropertyFieldBindingInternal<T extends CMSType = CMSType, M extends Record<string, any> =
|
|
77
|
+
function PropertyFieldBindingInternal<T extends CMSType = CMSType, M extends Record<string, any> = any>
|
|
71
78
|
({
|
|
72
79
|
propertyKey,
|
|
73
80
|
property,
|
|
74
81
|
context,
|
|
75
82
|
includeDescription,
|
|
76
83
|
underlyingValueHasChanged,
|
|
77
|
-
disabled,
|
|
78
|
-
tableMode,
|
|
84
|
+
disabled: disabledProp,
|
|
79
85
|
partOfArray,
|
|
80
|
-
|
|
86
|
+
minimalistView,
|
|
81
87
|
autoFocus,
|
|
88
|
+
index,
|
|
89
|
+
size,
|
|
90
|
+
onPropertyChange
|
|
82
91
|
}: PropertyFieldBindingProps<T, M>): ReactElement<PropertyFieldBindingProps<T, M>> {
|
|
83
92
|
|
|
84
93
|
const customizationController = useCustomizationController();
|
|
85
94
|
|
|
86
95
|
return (
|
|
87
96
|
<Field
|
|
97
|
+
key={propertyKey}
|
|
88
98
|
name={propertyKey}
|
|
89
99
|
>
|
|
90
100
|
{(fieldProps) => {
|
|
@@ -92,14 +102,16 @@ function PropertyFieldBindingInternal<T extends CMSType = CMSType, M extends Rec
|
|
|
92
102
|
let Component: ComponentType<FieldProps<T>> | undefined;
|
|
93
103
|
const resolvedProperty: ResolvedProperty<T> | null = resolveProperty({
|
|
94
104
|
propertyKey,
|
|
95
|
-
propertyValue: fieldProps.field.value,
|
|
96
105
|
propertyOrBuilder: property,
|
|
97
106
|
values: fieldProps.form.values,
|
|
98
107
|
path: context.path,
|
|
99
108
|
entityId: context.entityId,
|
|
100
|
-
|
|
109
|
+
propertyConfigs: customizationController.propertyConfigs,
|
|
110
|
+
index
|
|
101
111
|
});
|
|
102
112
|
|
|
113
|
+
const disabled = disabledProp || isReadOnly(resolvedProperty) || Boolean(resolvedProperty?.disabled);
|
|
114
|
+
|
|
103
115
|
if (resolvedProperty === null || isHidden(resolvedProperty)) {
|
|
104
116
|
return <></>;
|
|
105
117
|
} else if (isReadOnly(resolvedProperty)) {
|
|
@@ -111,16 +123,23 @@ function PropertyFieldBindingInternal<T extends CMSType = CMSType, M extends Rec
|
|
|
111
123
|
} else {
|
|
112
124
|
const propertyConfig = getFieldConfig(resolvedProperty, customizationController.propertyConfigs);
|
|
113
125
|
if (!propertyConfig) {
|
|
114
|
-
console.log("INTERNAL: Could not find field config for property", {
|
|
126
|
+
console.log("INTERNAL: Could not find field config for property", {
|
|
127
|
+
propertyKey,
|
|
128
|
+
property,
|
|
129
|
+
resolvedProperty,
|
|
130
|
+
fields: customizationController.propertyConfigs,
|
|
131
|
+
propertyConfig
|
|
132
|
+
});
|
|
115
133
|
throw new Error(`INTERNAL: Could not find field config for property ${propertyKey}`);
|
|
116
134
|
}
|
|
117
135
|
const configProperty = resolveProperty({
|
|
136
|
+
propertyKey,
|
|
118
137
|
propertyOrBuilder: propertyConfig.property,
|
|
119
|
-
propertyValue: fieldProps.field.value,
|
|
120
138
|
values: fieldProps.form.values,
|
|
121
139
|
path: context.path,
|
|
122
140
|
entityId: context.entityId,
|
|
123
|
-
|
|
141
|
+
propertyConfigs: customizationController.propertyConfigs,
|
|
142
|
+
index
|
|
124
143
|
});
|
|
125
144
|
Component = configProperty.Field as ComponentType<FieldProps<T>>;
|
|
126
145
|
}
|
|
@@ -128,7 +147,9 @@ function PropertyFieldBindingInternal<T extends CMSType = CMSType, M extends Rec
|
|
|
128
147
|
console.warn(`No field component found for property ${propertyKey}`);
|
|
129
148
|
console.warn("Property:", property);
|
|
130
149
|
return (
|
|
131
|
-
<div
|
|
150
|
+
<div className={"w-full"}>
|
|
151
|
+
{`Currently the field ${resolvedProperty.dataType} is not supported`}
|
|
152
|
+
</div>
|
|
132
153
|
);
|
|
133
154
|
}
|
|
134
155
|
|
|
@@ -139,23 +160,24 @@ function PropertyFieldBindingInternal<T extends CMSType = CMSType, M extends Rec
|
|
|
139
160
|
underlyingValueHasChanged,
|
|
140
161
|
context,
|
|
141
162
|
disabled,
|
|
142
|
-
tableMode,
|
|
143
163
|
partOfArray,
|
|
144
|
-
|
|
145
|
-
autoFocus
|
|
164
|
+
minimalistView,
|
|
165
|
+
autoFocus,
|
|
166
|
+
size,
|
|
167
|
+
onPropertyChange
|
|
146
168
|
};
|
|
147
169
|
|
|
148
170
|
return <FieldInternal
|
|
149
171
|
Component={Component as ComponentType<FieldProps>}
|
|
150
172
|
componentProps={componentProps}
|
|
151
|
-
|
|
173
|
+
formexFieldProps={fieldProps}/>;
|
|
152
174
|
}}
|
|
153
175
|
</Field>
|
|
154
176
|
);
|
|
155
177
|
|
|
156
178
|
}
|
|
157
179
|
|
|
158
|
-
type ResolvedPropertyFieldBindingProps<T extends CMSType = CMSType, M extends Record<string, any> =
|
|
180
|
+
type ResolvedPropertyFieldBindingProps<T extends CMSType = CMSType, M extends Record<string, any> = any> =
|
|
159
181
|
Omit<PropertyFieldBindingProps<T, M>, "property">
|
|
160
182
|
& {
|
|
161
183
|
property: ResolvedProperty<T>
|
|
@@ -169,52 +191,59 @@ function FieldInternal<T extends CMSType, CustomProps, M extends Record<string,
|
|
|
169
191
|
property,
|
|
170
192
|
includeDescription,
|
|
171
193
|
underlyingValueHasChanged,
|
|
172
|
-
tableMode,
|
|
173
194
|
partOfArray,
|
|
174
|
-
|
|
195
|
+
minimalistView,
|
|
175
196
|
autoFocus,
|
|
176
197
|
context,
|
|
177
|
-
disabled
|
|
198
|
+
disabled,
|
|
199
|
+
size,
|
|
200
|
+
onPropertyChange
|
|
178
201
|
},
|
|
179
|
-
|
|
202
|
+
formexFieldProps
|
|
180
203
|
}:
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
204
|
+
{
|
|
205
|
+
Component: ComponentType<FieldProps<T, any, M>>,
|
|
206
|
+
componentProps: ResolvedPropertyFieldBindingProps<T, M>,
|
|
207
|
+
formexFieldProps: FormexFieldProps<T, any>
|
|
208
|
+
}) {
|
|
186
209
|
|
|
187
210
|
const { plugins } = useCustomizationController();
|
|
188
211
|
|
|
189
212
|
const customFieldProps: any = property.customProps;
|
|
190
|
-
const value =
|
|
191
|
-
// const initialValue =
|
|
192
|
-
const error = getIn(
|
|
193
|
-
const touched = getIn(
|
|
213
|
+
const value = formexFieldProps.field.value;
|
|
214
|
+
// const initialValue = formexFieldProps.meta.initialValue;
|
|
215
|
+
const error = getIn(formexFieldProps.form.errors, propertyKey);
|
|
216
|
+
const touched = getIn(formexFieldProps.form.touched, propertyKey);
|
|
194
217
|
|
|
195
218
|
const showError: boolean = error &&
|
|
196
|
-
(
|
|
219
|
+
(formexFieldProps.form.submitCount > 0 || property.validation?.unique) &&
|
|
197
220
|
(!Array.isArray(error) || !!error.filter((e: any) => !!e).length);
|
|
198
221
|
|
|
199
|
-
const WrappedComponent: ComponentType<FieldProps<T, any, M>> | null = useWrappedComponent(
|
|
222
|
+
const WrappedComponent: ComponentType<FieldProps<T, any, M>> | null = useWrappedComponent({
|
|
223
|
+
path: context.path,
|
|
224
|
+
collection: context.collection,
|
|
225
|
+
propertyKey: propertyKey,
|
|
226
|
+
property: property,
|
|
227
|
+
Component: Component,
|
|
228
|
+
plugins: plugins
|
|
229
|
+
});
|
|
200
230
|
const UsedComponent: ComponentType<FieldProps<T>> = WrappedComponent ?? Component;
|
|
201
231
|
|
|
202
|
-
const isSubmitting =
|
|
232
|
+
const isSubmitting = formexFieldProps.form.isSubmitting;
|
|
203
233
|
|
|
204
234
|
const setValue = useCallback((value: T | null, shouldValidate?: boolean) => {
|
|
205
|
-
|
|
206
|
-
|
|
235
|
+
formexFieldProps.form.setFieldTouched(propertyKey, true, false);
|
|
236
|
+
formexFieldProps.form.setFieldValue(propertyKey, value, shouldValidate);
|
|
207
237
|
}, []);
|
|
208
238
|
|
|
209
239
|
const setFieldValue = useCallback((otherPropertyKey: string, value: CMSType | null, shouldValidate?: boolean) => {
|
|
210
|
-
|
|
211
|
-
|
|
240
|
+
formexFieldProps.form.setFieldTouched(propertyKey, true, false);
|
|
241
|
+
formexFieldProps.form.setFieldValue(otherPropertyKey, value, shouldValidate);
|
|
212
242
|
}, []);
|
|
213
243
|
|
|
214
244
|
const cmsFieldProps: FieldProps<T, CustomProps, M> = {
|
|
215
245
|
propertyKey,
|
|
216
246
|
value: value as T,
|
|
217
|
-
// initialValue,
|
|
218
247
|
setValue,
|
|
219
248
|
setFieldValue,
|
|
220
249
|
error,
|
|
@@ -225,12 +254,13 @@ function FieldInternal<T extends CMSType, CustomProps, M extends Record<string,
|
|
|
225
254
|
property: property as ResolvedProperty<T>,
|
|
226
255
|
disabled: disabled ?? false,
|
|
227
256
|
underlyingValueHasChanged: underlyingValueHasChanged ?? false,
|
|
228
|
-
tableMode: tableMode ?? false,
|
|
229
257
|
partOfArray: partOfArray ?? false,
|
|
230
|
-
|
|
258
|
+
minimalistView: minimalistView ?? false,
|
|
231
259
|
autoFocus: autoFocus ?? false,
|
|
232
260
|
customProps: customFieldProps,
|
|
233
|
-
context
|
|
261
|
+
context,
|
|
262
|
+
size,
|
|
263
|
+
onPropertyChange
|
|
234
264
|
};
|
|
235
265
|
|
|
236
266
|
return (
|
|
@@ -266,13 +296,24 @@ const shouldPropertyReRender = (property: PropertyOrBuilder | ResolvedProperty,
|
|
|
266
296
|
}
|
|
267
297
|
}
|
|
268
298
|
|
|
269
|
-
|
|
270
|
-
path
|
|
271
|
-
collection
|
|
299
|
+
interface UseWrappedComponentParams<T extends CMSType = CMSType, M extends Record<string, any> = any> {
|
|
300
|
+
path?: string,
|
|
301
|
+
collection?: ResolvedEntityCollection<M>,
|
|
272
302
|
propertyKey: string,
|
|
273
303
|
property: ResolvedProperty<T>,
|
|
274
304
|
Component: ComponentType<FieldProps<T, any, M>>,
|
|
275
305
|
plugins?: FireCMSPlugin[]
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
function useWrappedComponent<T extends CMSType = CMSType, M extends Record<string, any> = any>(
|
|
309
|
+
{
|
|
310
|
+
path,
|
|
311
|
+
collection,
|
|
312
|
+
propertyKey,
|
|
313
|
+
property,
|
|
314
|
+
Component,
|
|
315
|
+
plugins
|
|
316
|
+
}: UseWrappedComponentParams<T, M>
|
|
276
317
|
): ComponentType<FieldProps<T, any, M>> | null {
|
|
277
318
|
|
|
278
319
|
const wrapperRef = useRef<ComponentType<FieldProps<T, any, M>> | null>((() => {
|
|
@@ -288,7 +329,7 @@ function useWrappedComponent<T extends CMSType = CMSType, M extends Record<strin
|
|
|
288
329
|
Field: Component,
|
|
289
330
|
plugin,
|
|
290
331
|
path,
|
|
291
|
-
collection
|
|
332
|
+
collection,
|
|
292
333
|
};
|
|
293
334
|
const enabled = plugin.form?.fieldBuilderEnabled?.(params);
|
|
294
335
|
if (enabled === undefined || enabled)
|
|
@@ -68,7 +68,8 @@ export function CustomIdField<M extends Record<string, any>>({
|
|
|
68
68
|
? (
|
|
69
69
|
<>
|
|
70
70
|
|
|
71
|
-
<Tooltip title={"Copy"}
|
|
71
|
+
<Tooltip title={"Copy"}
|
|
72
|
+
asChild={true}>
|
|
72
73
|
<IconButton onClick={(e) => copy(entity.id)}
|
|
73
74
|
aria-label="copy-id">
|
|
74
75
|
<ContentCopyIcon size={"small"}/>
|
|
@@ -76,7 +77,8 @@ export function CustomIdField<M extends Record<string, any>>({
|
|
|
76
77
|
</Tooltip>
|
|
77
78
|
|
|
78
79
|
{customizationController?.entityLinkBuilder &&
|
|
79
|
-
<Tooltip title={"Open in the console"}
|
|
80
|
+
<Tooltip title={"Open in the console"}
|
|
81
|
+
asChild={true}>
|
|
80
82
|
<IconButton component={"a"}
|
|
81
83
|
href={customizationController.entityLinkBuilder({ entity })}
|
|
82
84
|
rel="noopener noreferrer"
|
|
@@ -98,7 +100,9 @@ export function CustomIdField<M extends Record<string, any>>({
|
|
|
98
100
|
|
|
99
101
|
{enumValues &&
|
|
100
102
|
<Select
|
|
103
|
+
size={"large"}
|
|
101
104
|
error={error}
|
|
105
|
+
fullWidth={true}
|
|
102
106
|
onValueChange={(v) => onChange(v as string)}
|
|
103
107
|
{...fieldProps}
|
|
104
108
|
renderValue={(option) => {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ResolvedProperty } from "../../types";
|
|
1
|
+
import { Property, ResolvedProperty } from "../../types";
|
|
2
2
|
import { IconButton, InfoIcon, Tooltip, Typography } from "@firecms/ui";
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -13,8 +13,8 @@ export function FieldHelperText({
|
|
|
13
13
|
disabled
|
|
14
14
|
}: {
|
|
15
15
|
error?: string,
|
|
16
|
-
showError
|
|
17
|
-
property: ResolvedProperty,
|
|
16
|
+
showError?: boolean,
|
|
17
|
+
property: ResolvedProperty | Property,
|
|
18
18
|
includeDescription?: boolean,
|
|
19
19
|
disabled?: boolean,
|
|
20
20
|
}
|
|
@@ -44,7 +44,7 @@ export function FieldHelperText({
|
|
|
44
44
|
{property.longDescription &&
|
|
45
45
|
<Tooltip title={property.longDescription}
|
|
46
46
|
side="bottom"
|
|
47
|
-
|
|
47
|
+
asChild={true}>
|
|
48
48
|
<IconButton
|
|
49
49
|
size={"small"}
|
|
50
50
|
className="self-start">
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { ErrorBoundary } from "../../components";
|
|
3
|
+
|
|
4
|
+
export function FormEntry({
|
|
5
|
+
propertyKey,
|
|
6
|
+
widthPercentage = 100,
|
|
7
|
+
children
|
|
8
|
+
}: {
|
|
9
|
+
propertyKey: string;
|
|
10
|
+
widthPercentage?: number;
|
|
11
|
+
children: React.ReactNode;
|
|
12
|
+
}) {
|
|
13
|
+
return (
|
|
14
|
+
<div id={`form_field_${propertyKey}`}
|
|
15
|
+
className={"relative"}
|
|
16
|
+
style={{ width: widthPercentage === 100 ? "100%" : `calc(${widthPercentage}% - 8px)` }}>
|
|
17
|
+
<ErrorBoundary>
|
|
18
|
+
{children}
|
|
19
|
+
</ErrorBoundary>
|
|
20
|
+
</div>
|
|
21
|
+
);
|
|
22
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { cls } from "@firecms/ui";
|
|
3
|
+
|
|
4
|
+
export function FormLayout({
|
|
5
|
+
children,
|
|
6
|
+
className
|
|
7
|
+
}: {
|
|
8
|
+
children: React.ReactNode;
|
|
9
|
+
className?: string;
|
|
10
|
+
}) {
|
|
11
|
+
return (
|
|
12
|
+
<div className={cls("flex flex-wrap gap-x-4 w-full space-y-8", className)}>
|
|
13
|
+
{children}
|
|
14
|
+
</div>
|
|
15
|
+
);
|
|
16
|
+
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import React from "react";
|
|
1
|
+
import React, { forwardRef } from "react";
|
|
2
|
+
import { cls } from "@firecms/ui";
|
|
2
3
|
|
|
3
4
|
interface LabelWithIconProps {
|
|
4
5
|
icon: React.ReactNode;
|
|
@@ -12,22 +13,32 @@ interface LabelWithIconProps {
|
|
|
12
13
|
* Render the label of with an icon and the title of a property
|
|
13
14
|
* @group Form custom fields
|
|
14
15
|
*/
|
|
15
|
-
export
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
16
|
+
export const LabelWithIcon = forwardRef<HTMLDivElement, LabelWithIconProps>(
|
|
17
|
+
({
|
|
18
|
+
icon,
|
|
19
|
+
title,
|
|
20
|
+
small,
|
|
21
|
+
className,
|
|
22
|
+
required
|
|
23
|
+
}, ref) => {
|
|
24
|
+
return (
|
|
25
|
+
<div
|
|
26
|
+
ref={ref}
|
|
27
|
+
className={cls("inline-flex items-center my-0.5",
|
|
28
|
+
small ? "gap-1" : "gap-2",
|
|
29
|
+
className)}
|
|
30
|
+
>
|
|
31
|
+
{icon}
|
|
32
|
+
<span
|
|
33
|
+
className={`text-start font-medium text-${small ? "base" : "sm"} origin-top-left transform ${
|
|
34
|
+
small ? "translate-x-2 scale-75" : ""
|
|
35
|
+
}`}
|
|
36
|
+
>
|
|
37
|
+
{(title ?? "") + (required ? " *" : "")}
|
|
31
38
|
</span>
|
|
32
|
-
|
|
33
|
-
|
|
39
|
+
</div>
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
|
+
);
|
|
43
|
+
|
|
44
|
+
LabelWithIcon.displayName = "LabelWithIcon";
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { LabelWithIcon } from "./LabelWithIcon";
|
|
3
|
+
import { PropertyIdCopyTooltip } from "../../components/PropertyIdCopyTooltip";
|
|
4
|
+
|
|
5
|
+
interface LabelWithIconAndTooltip {
|
|
6
|
+
icon: React.ReactNode;
|
|
7
|
+
title?: string;
|
|
8
|
+
small?: boolean;
|
|
9
|
+
className?: string;
|
|
10
|
+
required?: boolean;
|
|
11
|
+
propertyKey: string
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Render the label of with an icon and the title of a property
|
|
16
|
+
* @group Form custom fields
|
|
17
|
+
*/
|
|
18
|
+
export function LabelWithIconAndTooltip({
|
|
19
|
+
propertyKey,
|
|
20
|
+
className,
|
|
21
|
+
...props
|
|
22
|
+
}: LabelWithIconAndTooltip) {
|
|
23
|
+
return (
|
|
24
|
+
<PropertyIdCopyTooltip propertyKey={propertyKey} className={className}>
|
|
25
|
+
<LabelWithIcon {...props}/>
|
|
26
|
+
</PropertyIdCopyTooltip>
|
|
27
|
+
);
|
|
28
|
+
}
|