@firecms/core 3.0.0-canary.24 → 3.0.0-canary.240
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 +30 -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 +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 +8 -5
- 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 +14 -4
- 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 +5 -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 +40 -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 +36 -64
- 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 -12
- 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 +21573 -13895
- package/dist/index.es.js.map +1 -1
- package/dist/index.umd.js +24361 -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 +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 +97 -23
- 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 +74 -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 +36 -14
- package/dist/types/permissions.d.ts +4 -4
- package/dist/types/plugins.d.ts +36 -12
- package/dist/types/properties.d.ts +73 -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 +10 -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/callbacks.d.ts +2 -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 +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 +3 -0
- package/dist/util/navigation_from_path.d.ts +6 -1
- package/dist/util/navigation_utils.d.ts +15 -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 +4 -4
- package/dist/util/references.d.ts +2 -2
- package/dist/util/resolutions.d.ts +41 -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 +149 -46
- package/src/components/CircularProgressCenter.tsx +2 -2
- package/src/components/ClearFilterSortButton.tsx +41 -0
- package/src/components/{DeleteConfirmationDialog.tsx → ConfirmationDialog.tsx} +11 -11
- package/src/components/DeleteEntityDialog.tsx +13 -20
- package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +59 -40
- package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +38 -31
- package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +30 -9
- package/src/components/EntityCollectionTable/PropertyTableCell.tsx +48 -40
- 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 +32 -37
- 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 +84 -80
- package/src/components/EntityCollectionView/EntityCollectionView.tsx +229 -117
- 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 +80 -59
- package/src/components/EntityView.tsx +13 -10
- package/src/components/ErrorView.tsx +4 -4
- package/src/components/HomePage/DefaultHomePage.tsx +27 -20
- 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 +21 -13
- package/src/components/ReferenceWidget.tsx +21 -11
- package/src/components/SearchIconsView.tsx +10 -7
- package/src/components/SelectableTable/SelectableTable.tsx +157 -145
- 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 +130 -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 +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 +44 -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 +6 -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 +406 -478
- package/src/core/EntityEditViewFormActions.tsx +199 -0
- package/src/core/EntitySidePanel.tsx +95 -19
- package/src/core/FireCMS.tsx +67 -59
- 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 +589 -535
- package/src/form/EntityFormActions.tsx +169 -0
- package/src/form/PropertyFieldBinding.tsx +89 -45
- 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 +34 -19
- package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +48 -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 +61 -52
- package/src/form/field_bindings/MapFieldBinding.tsx +71 -54
- package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +157 -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 +62 -35
- package/src/form/field_bindings/SelectFieldBinding.tsx +23 -15
- package/src/form/field_bindings/StorageUploadFieldBinding.tsx +47 -52
- 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 +32 -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 +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 +193 -68
- package/src/hooks/useFireCMSContext.tsx +3 -33
- 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 +201 -75
- package/src/internal/useUnsavedChangesDialog.tsx +127 -91
- package/src/preview/PropertyPreview.tsx +20 -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 +25 -36
- package/src/preview/components/ReferencePreview.tsx +23 -34
- package/src/preview/components/StorageThumbnail.tsx +5 -1
- package/src/preview/components/UrlComponentPreview.tsx +60 -28
- 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 +7 -6
- package/src/preview/property_previews/MapPropertyPreview.tsx +12 -11
- 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/auth.tsx +9 -13
- package/src/types/collections.ts +118 -28
- 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 +85 -46
- package/src/types/firecms.tsx +7 -3
- package/src/types/firecms_context.tsx +1 -1
- package/src/types/index.ts +0 -1
- package/src/types/navigation.ts +43 -18
- package/src/types/permissions.ts +5 -5
- package/src/types/plugins.tsx +42 -14
- package/src/types/properties.ts +87 -26
- package/src/types/property_config.tsx +0 -2
- package/src/types/side_dialogs_controller.tsx +15 -0
- package/src/types/side_entity_controller.tsx +11 -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/callbacks.ts +119 -0
- package/src/util/createFormexStub.tsx +62 -0
- 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 +3 -0
- package/src/util/join_collections.ts +6 -1
- package/src/util/make_properties_editable.ts +13 -5
- package/src/util/navigation_from_path.ts +18 -7
- package/src/util/navigation_utils.ts +141 -25
- package/src/util/objects.ts +52 -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 +17 -6
- package/src/util/references.ts +19 -8
- package/src/util/resolutions.ts +110 -48
- package/src/util/storage.ts +79 -21
- package/src/util/strings.ts +2 -2
- package/src/util/useStorageUploadController.tsx +91 -28
- 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,19 +5,19 @@ 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";
|
|
18
18
|
|
|
19
19
|
import { isHidden, isPropertyBuilder, isReadOnly, resolveProperty } from "../util";
|
|
20
|
-
import { useCustomizationController } from "../hooks";
|
|
20
|
+
import { useAuthController, useCustomizationController } from "../hooks";
|
|
21
21
|
import { Typography } from "@firecms/ui";
|
|
22
22
|
import { getFieldConfig, getFieldId } from "../core";
|
|
23
23
|
import { ErrorBoundary } from "../components";
|
|
@@ -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,28 @@ 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
|
|
|
93
|
+
const authController = useAuthController();
|
|
84
94
|
const customizationController = useCustomizationController();
|
|
85
95
|
|
|
86
96
|
return (
|
|
87
97
|
<Field
|
|
98
|
+
key={propertyKey}
|
|
88
99
|
name={propertyKey}
|
|
89
100
|
>
|
|
90
101
|
{(fieldProps) => {
|
|
@@ -92,14 +103,17 @@ function PropertyFieldBindingInternal<T extends CMSType = CMSType, M extends Rec
|
|
|
92
103
|
let Component: ComponentType<FieldProps<T>> | undefined;
|
|
93
104
|
const resolvedProperty: ResolvedProperty<T> | null = resolveProperty({
|
|
94
105
|
propertyKey,
|
|
95
|
-
propertyValue: fieldProps.field.value,
|
|
96
106
|
propertyOrBuilder: property,
|
|
97
107
|
values: fieldProps.form.values,
|
|
98
108
|
path: context.path,
|
|
99
109
|
entityId: context.entityId,
|
|
100
|
-
|
|
110
|
+
propertyConfigs: customizationController.propertyConfigs,
|
|
111
|
+
index,
|
|
112
|
+
authController
|
|
101
113
|
});
|
|
102
114
|
|
|
115
|
+
const disabled = disabledProp || isReadOnly(resolvedProperty) || Boolean(resolvedProperty?.disabled) || context.disabled;
|
|
116
|
+
|
|
103
117
|
if (resolvedProperty === null || isHidden(resolvedProperty)) {
|
|
104
118
|
return <></>;
|
|
105
119
|
} else if (isReadOnly(resolvedProperty)) {
|
|
@@ -111,16 +125,24 @@ function PropertyFieldBindingInternal<T extends CMSType = CMSType, M extends Rec
|
|
|
111
125
|
} else {
|
|
112
126
|
const propertyConfig = getFieldConfig(resolvedProperty, customizationController.propertyConfigs);
|
|
113
127
|
if (!propertyConfig) {
|
|
114
|
-
console.log("INTERNAL: Could not find field config for property", {
|
|
128
|
+
console.log("INTERNAL: Could not find field config for property", {
|
|
129
|
+
propertyKey,
|
|
130
|
+
property,
|
|
131
|
+
resolvedProperty,
|
|
132
|
+
fields: customizationController.propertyConfigs,
|
|
133
|
+
propertyConfig
|
|
134
|
+
});
|
|
115
135
|
throw new Error(`INTERNAL: Could not find field config for property ${propertyKey}`);
|
|
116
136
|
}
|
|
117
137
|
const configProperty = resolveProperty({
|
|
138
|
+
propertyKey,
|
|
118
139
|
propertyOrBuilder: propertyConfig.property,
|
|
119
|
-
propertyValue: fieldProps.field.value,
|
|
120
140
|
values: fieldProps.form.values,
|
|
121
141
|
path: context.path,
|
|
122
142
|
entityId: context.entityId,
|
|
123
|
-
|
|
143
|
+
propertyConfigs: customizationController.propertyConfigs,
|
|
144
|
+
index,
|
|
145
|
+
authController
|
|
124
146
|
});
|
|
125
147
|
Component = configProperty.Field as ComponentType<FieldProps<T>>;
|
|
126
148
|
}
|
|
@@ -128,7 +150,9 @@ function PropertyFieldBindingInternal<T extends CMSType = CMSType, M extends Rec
|
|
|
128
150
|
console.warn(`No field component found for property ${propertyKey}`);
|
|
129
151
|
console.warn("Property:", property);
|
|
130
152
|
return (
|
|
131
|
-
<div
|
|
153
|
+
<div className={"w-full"}>
|
|
154
|
+
{`Currently the field ${resolvedProperty.dataType} is not supported`}
|
|
155
|
+
</div>
|
|
132
156
|
);
|
|
133
157
|
}
|
|
134
158
|
|
|
@@ -139,23 +163,24 @@ function PropertyFieldBindingInternal<T extends CMSType = CMSType, M extends Rec
|
|
|
139
163
|
underlyingValueHasChanged,
|
|
140
164
|
context,
|
|
141
165
|
disabled,
|
|
142
|
-
tableMode,
|
|
143
166
|
partOfArray,
|
|
144
|
-
|
|
145
|
-
autoFocus
|
|
167
|
+
minimalistView,
|
|
168
|
+
autoFocus,
|
|
169
|
+
size,
|
|
170
|
+
onPropertyChange
|
|
146
171
|
};
|
|
147
172
|
|
|
148
173
|
return <FieldInternal
|
|
149
174
|
Component={Component as ComponentType<FieldProps>}
|
|
150
175
|
componentProps={componentProps}
|
|
151
|
-
|
|
176
|
+
formexFieldProps={fieldProps}/>;
|
|
152
177
|
}}
|
|
153
178
|
</Field>
|
|
154
179
|
);
|
|
155
180
|
|
|
156
181
|
}
|
|
157
182
|
|
|
158
|
-
type ResolvedPropertyFieldBindingProps<T extends CMSType = CMSType, M extends Record<string, any> =
|
|
183
|
+
type ResolvedPropertyFieldBindingProps<T extends CMSType = CMSType, M extends Record<string, any> = any> =
|
|
159
184
|
Omit<PropertyFieldBindingProps<T, M>, "property">
|
|
160
185
|
& {
|
|
161
186
|
property: ResolvedProperty<T>
|
|
@@ -169,52 +194,59 @@ function FieldInternal<T extends CMSType, CustomProps, M extends Record<string,
|
|
|
169
194
|
property,
|
|
170
195
|
includeDescription,
|
|
171
196
|
underlyingValueHasChanged,
|
|
172
|
-
tableMode,
|
|
173
197
|
partOfArray,
|
|
174
|
-
|
|
198
|
+
minimalistView,
|
|
175
199
|
autoFocus,
|
|
176
200
|
context,
|
|
177
|
-
disabled
|
|
201
|
+
disabled,
|
|
202
|
+
size,
|
|
203
|
+
onPropertyChange
|
|
178
204
|
},
|
|
179
|
-
|
|
205
|
+
formexFieldProps
|
|
180
206
|
}:
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
207
|
+
{
|
|
208
|
+
Component: ComponentType<FieldProps<T, any, M>>,
|
|
209
|
+
componentProps: ResolvedPropertyFieldBindingProps<T, M>,
|
|
210
|
+
formexFieldProps: FormexFieldProps<T, any>
|
|
211
|
+
}) {
|
|
186
212
|
|
|
187
213
|
const { plugins } = useCustomizationController();
|
|
188
214
|
|
|
189
215
|
const customFieldProps: any = property.customProps;
|
|
190
|
-
const value =
|
|
191
|
-
// const initialValue =
|
|
192
|
-
const error = getIn(
|
|
193
|
-
const touched = getIn(
|
|
216
|
+
const value = formexFieldProps.field.value;
|
|
217
|
+
// const initialValue = formexFieldProps.meta.initialValue;
|
|
218
|
+
const error = getIn(formexFieldProps.form.errors, propertyKey);
|
|
219
|
+
const touched = getIn(formexFieldProps.form.touched, propertyKey);
|
|
194
220
|
|
|
195
221
|
const showError: boolean = error &&
|
|
196
|
-
(
|
|
222
|
+
(formexFieldProps.form.submitCount > 0 || property.validation?.unique) &&
|
|
197
223
|
(!Array.isArray(error) || !!error.filter((e: any) => !!e).length);
|
|
198
224
|
|
|
199
|
-
const WrappedComponent: ComponentType<FieldProps<T, any, M>> | null = useWrappedComponent(
|
|
225
|
+
const WrappedComponent: ComponentType<FieldProps<T, any, M>> | null = useWrappedComponent({
|
|
226
|
+
path: context.path,
|
|
227
|
+
collection: context.collection,
|
|
228
|
+
propertyKey: propertyKey,
|
|
229
|
+
property: property,
|
|
230
|
+
Component: Component,
|
|
231
|
+
plugins: plugins
|
|
232
|
+
});
|
|
200
233
|
const UsedComponent: ComponentType<FieldProps<T>> = WrappedComponent ?? Component;
|
|
201
234
|
|
|
202
|
-
const isSubmitting =
|
|
235
|
+
const isSubmitting = formexFieldProps.form.isSubmitting;
|
|
203
236
|
|
|
204
237
|
const setValue = useCallback((value: T | null, shouldValidate?: boolean) => {
|
|
205
|
-
|
|
206
|
-
|
|
238
|
+
formexFieldProps.form.setFieldTouched(propertyKey, true, false);
|
|
239
|
+
formexFieldProps.form.setFieldValue(propertyKey, value, shouldValidate);
|
|
207
240
|
}, []);
|
|
208
241
|
|
|
209
242
|
const setFieldValue = useCallback((otherPropertyKey: string, value: CMSType | null, shouldValidate?: boolean) => {
|
|
210
|
-
|
|
211
|
-
|
|
243
|
+
formexFieldProps.form.setFieldTouched(propertyKey, true, false);
|
|
244
|
+
formexFieldProps.form.setFieldValue(otherPropertyKey, value, shouldValidate);
|
|
212
245
|
}, []);
|
|
213
246
|
|
|
214
247
|
const cmsFieldProps: FieldProps<T, CustomProps, M> = {
|
|
215
248
|
propertyKey,
|
|
216
249
|
value: value as T,
|
|
217
|
-
// initialValue,
|
|
218
250
|
setValue,
|
|
219
251
|
setFieldValue,
|
|
220
252
|
error,
|
|
@@ -225,12 +257,13 @@ function FieldInternal<T extends CMSType, CustomProps, M extends Record<string,
|
|
|
225
257
|
property: property as ResolvedProperty<T>,
|
|
226
258
|
disabled: disabled ?? false,
|
|
227
259
|
underlyingValueHasChanged: underlyingValueHasChanged ?? false,
|
|
228
|
-
tableMode: tableMode ?? false,
|
|
229
260
|
partOfArray: partOfArray ?? false,
|
|
230
|
-
|
|
261
|
+
minimalistView: minimalistView ?? false,
|
|
231
262
|
autoFocus: autoFocus ?? false,
|
|
232
263
|
customProps: customFieldProps,
|
|
233
|
-
context
|
|
264
|
+
context,
|
|
265
|
+
size,
|
|
266
|
+
onPropertyChange
|
|
234
267
|
};
|
|
235
268
|
|
|
236
269
|
return (
|
|
@@ -266,13 +299,24 @@ const shouldPropertyReRender = (property: PropertyOrBuilder | ResolvedProperty,
|
|
|
266
299
|
}
|
|
267
300
|
}
|
|
268
301
|
|
|
269
|
-
|
|
270
|
-
path
|
|
271
|
-
collection
|
|
302
|
+
interface UseWrappedComponentParams<T extends CMSType = CMSType, M extends Record<string, any> = any> {
|
|
303
|
+
path?: string,
|
|
304
|
+
collection?: ResolvedEntityCollection<M>,
|
|
272
305
|
propertyKey: string,
|
|
273
306
|
property: ResolvedProperty<T>,
|
|
274
307
|
Component: ComponentType<FieldProps<T, any, M>>,
|
|
275
308
|
plugins?: FireCMSPlugin[]
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
function useWrappedComponent<T extends CMSType = CMSType, M extends Record<string, any> = any>(
|
|
312
|
+
{
|
|
313
|
+
path,
|
|
314
|
+
collection,
|
|
315
|
+
propertyKey,
|
|
316
|
+
property,
|
|
317
|
+
Component,
|
|
318
|
+
plugins
|
|
319
|
+
}: UseWrappedComponentParams<T, M>
|
|
276
320
|
): ComponentType<FieldProps<T, any, M>> | null {
|
|
277
321
|
|
|
278
322
|
const wrapperRef = useRef<ComponentType<FieldProps<T, any, M>> | null>((() => {
|
|
@@ -288,7 +332,7 @@ function useWrappedComponent<T extends CMSType = CMSType, M extends Record<strin
|
|
|
288
332
|
Field: Component,
|
|
289
333
|
plugin,
|
|
290
334
|
path,
|
|
291
|
-
collection
|
|
335
|
+
collection,
|
|
292
336
|
};
|
|
293
337
|
const enabled = plugin.form?.fieldBuilderEnabled?.(params);
|
|
294
338
|
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("align-middle 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
|
+
}
|