@firecms/core 3.0.0-canary.2 → 3.0.0-canary.200
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 +4 -4
- package/dist/app/AppBar.d.ts +12 -0
- package/dist/app/Drawer.d.ts +16 -0
- package/dist/app/Scaffold.d.ts +30 -0
- package/dist/app/index.d.ts +4 -0
- package/dist/app/useApp.d.ts +16 -0
- package/dist/components/ArrayContainer.d.ts +23 -6
- package/dist/components/CircularProgressCenter.d.ts +1 -1
- package/dist/components/ClearFilterSortButton.d.ts +5 -0
- package/dist/components/{DeleteConfirmationDialog.d.ts → ConfirmationDialog.d.ts} +1 -1
- package/dist/components/EntityCollectionTable/EntityCollectionRowActions.d.ts +13 -13
- package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +3 -3
- package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +22 -6
- package/dist/components/EntityCollectionTable/PropertyTableCell.d.ts +3 -2
- 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 +17 -4
- package/dist/components/EntityCollectionView/EntityCollectionViewStartActions.d.ts +11 -0
- package/dist/components/EntityCollectionView/useSelectionController.d.ts +2 -0
- package/dist/components/EntityCollectionView/utils.d.ts +3 -0
- package/dist/components/EntityPreview.d.ts +26 -7
- package/dist/components/EntityView.d.ts +11 -0
- package/dist/components/ErrorView.d.ts +1 -1
- package/dist/components/FieldCaption.d.ts +5 -0
- package/dist/components/HomePage/DefaultHomePage.d.ts +1 -1
- package/dist/components/HomePage/NavigationCard.d.ts +8 -0
- package/dist/components/HomePage/{NavigationCollectionCard.d.ts → NavigationCardBinding.d.ts} +3 -3
- package/dist/components/HomePage/SmallNavigationCard.d.ts +6 -0
- package/dist/components/HomePage/index.d.ts +3 -1
- package/dist/components/PropertyConfigBadge.d.ts +2 -1
- package/dist/components/PropertyIdCopyTooltip.d.ts +8 -0
- package/dist/components/ReferenceWidget.d.ts +6 -4
- 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 +29 -13
- 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 +8 -5
- package/dist/contexts/AuthControllerContext.d.ts +1 -1
- package/dist/contexts/BreacrumbsContext.d.ts +8 -0
- package/dist/{components/FireCMSAppBar.d.ts → core/DefaultAppBar.d.ts} +6 -9
- package/dist/core/DefaultDrawer.d.ts +19 -0
- package/dist/core/DrawerNavigationItem.d.ts +10 -0
- package/dist/core/EntityEditView.d.ts +44 -0
- package/dist/core/EntityEditViewFormActions.d.ts +2 -0
- package/dist/core/FireCMS.d.ts +2 -2
- package/dist/core/FireCMSRouter.d.ts +4 -0
- package/dist/core/NavigationRoutes.d.ts +2 -3
- package/dist/core/SideDialogs.d.ts +4 -2
- package/dist/core/index.d.ts +4 -6
- package/dist/form/EntityForm.d.ts +45 -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/{components → form/components}/LabelWithIcon.d.ts +1 -1
- package/dist/form/components/LabelWithIconAndTooltip.d.ts +15 -0
- package/dist/form/components/StorageItemPreview.d.ts +4 -3
- package/dist/form/components/StorageUploadProgress.d.ts +1 -1
- package/dist/form/components/index.d.ts +4 -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 -4
- package/dist/form/field_bindings/SwitchFieldBinding.d.ts +1 -2
- package/dist/form/field_bindings/TextFieldBinding.d.ts +2 -2
- package/dist/form/index.d.ts +17 -18
- package/dist/form/useClearRestoreValue.d.ts +2 -2
- package/dist/form/validation.d.ts +1 -1
- 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/useDataSource.d.ts +2 -2
- package/dist/hooks/data/useEntityFetch.d.ts +4 -3
- package/dist/hooks/index.d.ts +4 -1
- package/dist/hooks/useAuthController.d.ts +1 -1
- package/dist/hooks/useBreadcrumbsController.d.ts +26 -0
- package/dist/{core → hooks}/useBuildModeController.d.ts +1 -1
- package/dist/hooks/useBuildNavigationController.d.ts +11 -6
- package/dist/hooks/useFireCMSContext.d.ts +1 -1
- package/dist/hooks/useModeController.d.ts +1 -2
- package/dist/hooks/useProjectLog.d.ts +12 -2
- package/dist/hooks/useResolvedNavigationFrom.d.ts +3 -3
- package/dist/hooks/useStorageSource.d.ts +2 -2
- package/dist/hooks/useValidateAuthenticator.d.ts +21 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.es.js +22131 -14039
- package/dist/index.es.js.map +1 -1
- package/dist/index.umd.js +24420 -588
- package/dist/index.umd.js.map +1 -1
- package/dist/internal/useBuildDataSource.d.ts +1 -12
- package/dist/internal/useUnsavedChangesDialog.d.ts +7 -9
- package/dist/preview/PropertyPreview.d.ts +1 -1
- package/dist/preview/PropertyPreviewProps.d.ts +7 -5
- package/dist/preview/components/BooleanPreview.d.ts +5 -1
- package/dist/preview/components/EnumValuesChip.d.ts +1 -1
- package/dist/preview/components/ReferencePreview.d.ts +4 -9
- 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/analytics.d.ts +1 -1
- package/dist/types/auth.d.ts +37 -3
- package/dist/types/collections.d.ts +86 -24
- package/dist/types/datasource.d.ts +53 -37
- package/dist/types/dialogs_controller.d.ts +7 -3
- package/dist/types/entities.d.ts +8 -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 +6 -0
- 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 +2 -1
- package/dist/types/navigation.d.ts +45 -26
- package/dist/types/permissions.d.ts +8 -4
- package/dist/types/plugins.d.ts +40 -31
- package/dist/types/properties.d.ts +54 -26
- package/dist/types/property_config.d.ts +2 -4
- package/dist/types/roles.d.ts +31 -0
- 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 +6 -0
- package/dist/util/builders.d.ts +3 -3
- package/dist/util/collections.d.ts +9 -1
- 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 +13 -4
- 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/references.d.ts +4 -2
- package/dist/util/resolutions.d.ts +31 -17
- package/dist/util/storage.d.ts +23 -2
- package/dist/util/useStorageUploadController.d.ts +3 -3
- package/dist/util/useTraceUpdate.d.ts +1 -0
- package/package.json +64 -51
- package/src/app/AppBar.tsx +18 -0
- package/src/app/Drawer.tsx +24 -0
- package/src/app/Scaffold.tsx +243 -0
- package/src/app/index.ts +4 -0
- package/src/app/useApp.tsx +32 -0
- package/src/components/ArrayContainer.tsx +126 -40
- package/src/components/CircularProgressCenter.tsx +2 -2
- package/src/components/ClearFilterSortButton.tsx +41 -0
- package/src/components/{DeleteConfirmationDialog.tsx → ConfirmationDialog.tsx} +3 -3
- package/src/components/DeleteEntityDialog.tsx +14 -23
- package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +56 -39
- package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +283 -280
- package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +29 -8
- package/src/components/EntityCollectionTable/PropertyTableCell.tsx +58 -50
- package/src/components/EntityCollectionTable/column_utils.tsx +3 -3
- package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +40 -33
- package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +22 -20
- 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 +228 -155
- package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +9 -8
- package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +68 -0
- package/src/components/EntityCollectionView/useSelectionController.tsx +43 -0
- package/src/components/EntityCollectionView/utils.ts +19 -0
- package/src/components/EntityPreview.tsx +218 -71
- package/src/components/EntityView.tsx +84 -0
- package/src/components/ErrorView.tsx +4 -4
- package/src/components/FieldCaption.tsx +14 -0
- package/src/components/HomePage/DefaultHomePage.tsx +39 -28
- package/src/components/HomePage/FavouritesView.tsx +6 -11
- package/src/components/HomePage/NavigationCard.tsx +69 -0
- package/src/components/HomePage/NavigationCardBinding.tsx +111 -0
- package/src/components/HomePage/NavigationGroup.tsx +2 -2
- package/src/components/HomePage/SmallNavigationCard.tsx +44 -0
- package/src/components/HomePage/index.tsx +3 -1
- 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 +22 -17
- package/src/components/ReferenceWidget.tsx +26 -16
- 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 +46 -30
- 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 +34 -15
- 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 +40 -43
- 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 +8 -5
- package/src/contexts/AuthControllerContext.tsx +1 -1
- package/src/contexts/BreacrumbsContext.tsx +38 -0
- package/src/contexts/DialogsProvider.tsx +5 -4
- package/src/contexts/ModeController.tsx +1 -3
- package/src/contexts/SnackbarProvider.tsx +2 -0
- package/src/core/DefaultAppBar.tsx +207 -0
- package/src/core/DefaultDrawer.tsx +185 -0
- package/src/core/DrawerNavigationItem.tsx +66 -0
- package/src/core/EntityEditView.tsx +455 -0
- package/src/core/EntityEditViewFormActions.tsx +199 -0
- package/src/core/EntitySidePanel.tsx +87 -18
- package/src/core/FireCMS.tsx +67 -44
- package/src/core/FireCMSRouter.tsx +17 -0
- package/src/core/NavigationRoutes.tsx +36 -38
- package/src/core/SideDialogs.tsx +22 -12
- package/src/core/field_configs.tsx +11 -12
- package/src/core/index.tsx +6 -7
- package/src/form/EntityForm.tsx +565 -519
- 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 +44 -0
- package/src/form/components/LabelWithIconAndTooltip.tsx +28 -0
- package/src/form/components/StorageItemPreview.tsx +23 -11
- package/src/form/components/StorageUploadProgress.tsx +9 -9
- package/src/form/components/index.tsx +4 -1
- package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +32 -21
- package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +54 -45
- package/src/form/field_bindings/BlockFieldBinding.tsx +57 -36
- package/src/form/field_bindings/DateTimeFieldBinding.tsx +21 -17
- package/src/form/field_bindings/KeyValueFieldBinding.tsx +76 -67
- package/src/form/field_bindings/MapFieldBinding.tsx +82 -65
- package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +153 -0
- package/src/form/field_bindings/{MultiSelectBinding.tsx → MultiSelectFieldBinding.tsx} +26 -22
- package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +12 -17
- package/src/form/field_bindings/ReferenceFieldBinding.tsx +47 -34
- package/src/form/field_bindings/RepeatFieldBinding.tsx +57 -36
- package/src/form/field_bindings/SelectFieldBinding.tsx +24 -17
- package/src/form/field_bindings/StorageUploadFieldBinding.tsx +47 -46
- package/src/form/field_bindings/SwitchFieldBinding.tsx +31 -27
- package/src/form/field_bindings/TextFieldBinding.tsx +35 -30
- package/src/form/index.tsx +17 -37
- package/src/form/useClearRestoreValue.tsx +2 -2
- package/src/form/validation.ts +15 -26
- package/src/hooks/data/delete.ts +7 -6
- package/src/hooks/data/save.ts +13 -9
- package/src/hooks/data/useCollectionFetch.tsx +4 -4
- package/src/hooks/data/useDataSource.tsx +15 -2
- package/src/hooks/data/useEntityFetch.tsx +11 -7
- package/src/hooks/index.tsx +6 -1
- package/src/hooks/useAuthController.tsx +1 -1
- package/src/hooks/useBreadcrumbsController.tsx +31 -0
- package/src/{core → hooks}/useBuildLocalConfigurationPersistence.tsx +8 -10
- package/src/{core → hooks}/useBuildModeController.tsx +23 -30
- package/src/hooks/useBuildNavigationController.tsx +278 -117
- 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 +41 -9
- package/src/hooks/useReferenceDialog.tsx +2 -2
- package/src/hooks/useResolvedNavigationFrom.tsx +10 -12
- package/src/hooks/useStorageSource.tsx +7 -2
- package/src/hooks/useValidateAuthenticator.tsx +115 -0
- package/src/index.ts +1 -0
- package/src/internal/useBuildDataSource.ts +72 -77
- package/src/internal/useBuildSideDialogsController.tsx +4 -2
- package/src/internal/useBuildSideEntityController.tsx +177 -70
- package/src/internal/useUnsavedChangesDialog.tsx +127 -91
- package/src/preview/PropertyPreview.tsx +19 -26
- package/src/preview/PropertyPreviewProps.tsx +5 -9
- package/src/preview/components/BooleanPreview.tsx +19 -4
- 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 +73 -176
- 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 +8 -7
- package/src/preview/util.ts +10 -10
- package/src/routes/CustomCMSRoute.tsx +21 -0
- package/src/routes/FireCMSRoute.tsx +236 -0
- package/src/routes/HomePageRoute.tsx +17 -0
- package/src/types/analytics.ts +1 -0
- package/src/types/auth.tsx +48 -3
- package/src/types/collections.ts +102 -27
- package/src/types/customization_controller.tsx +0 -1
- package/src/types/datasource.ts +62 -44
- package/src/types/dialogs_controller.tsx +7 -3
- package/src/types/entities.ts +16 -2
- package/src/types/entity_actions.tsx +33 -4
- package/src/types/entity_callbacks.ts +18 -18
- package/src/types/entity_overrides.tsx +7 -0
- package/src/types/export_import.ts +4 -4
- package/src/types/fields.tsx +81 -46
- package/src/types/firecms.tsx +6 -2
- package/src/types/firecms_context.tsx +1 -1
- package/src/types/index.ts +2 -1
- package/src/types/navigation.ts +52 -31
- package/src/types/permissions.ts +10 -5
- package/src/types/plugins.tsx +47 -39
- package/src/types/properties.ts +63 -27
- package/src/types/property_config.tsx +2 -4
- package/src/types/roles.ts +41 -0
- package/src/types/side_dialogs_controller.tsx +15 -0
- package/src/types/side_entity_controller.tsx +7 -1
- package/src/types/storage.ts +94 -3
- package/src/types/user.ts +9 -0
- package/src/util/builders.ts +10 -8
- package/src/util/collections.ts +22 -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 +26 -8
- 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 +45 -28
- package/src/util/parent_references_from_path.ts +3 -3
- package/src/util/permissions.ts +20 -16
- package/src/util/plurals.ts +0 -2
- package/src/util/property_utils.tsx +11 -4
- package/src/util/references.ts +45 -5
- package/src/util/resolutions.ts +79 -46
- package/src/util/storage.ts +79 -21
- package/src/util/strings.ts +2 -2
- package/src/util/useStorageUploadController.tsx +71 -27
- package/src/util/useTraceUpdate.tsx +2 -1
- 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/form/components/FormikArrayContainer.d.ts +0 -18
- package/dist/form/field_bindings/MarkdownFieldBinding.d.ts +0 -9
- package/dist/internal/EntityView.d.ts +0 -22
- 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 -157
- package/src/components/HomePage/NavigationCollectionCard.tsx +0 -146
- package/src/components/LabelWithIcon.tsx +0 -33
- package/src/components/PropertyIdCopyTooltipContent.tsx +0 -28
- package/src/components/common/useDataSourceEntityCollectionTableController.tsx +0 -225
- package/src/core/Drawer.tsx +0 -164
- package/src/core/Scaffold.tsx +0 -281
- package/src/form/components/FormikArrayContainer.tsx +0 -44
- package/src/form/field_bindings/MarkdownFieldBinding.tsx +0 -696
- package/src/internal/EntityView.tsx +0 -578
- package/src/internal/useBuildCustomizationController.tsx +0 -5
- package/src/internal/useLocaleConfig.tsx +0 -18
- package/src/types/appcheck.ts +0 -29
- /package/dist/{core → hooks}/useBuildLocalConfigurationPersistence.d.ts +0 -0
- /package/src/util/{common.tsx → common.ts} +0 -0
|
@@ -12,12 +12,15 @@ import {
|
|
|
12
12
|
} from "../../types";
|
|
13
13
|
import { OnCellValueChange, OnColumnResizeParams, UniqueFieldValidator } from "../common/types";
|
|
14
14
|
|
|
15
|
-
|
|
16
15
|
/**
|
|
17
16
|
* @group Collection components
|
|
18
17
|
*/
|
|
19
18
|
export type EntityCollectionTableProps<M extends Record<string, any>,
|
|
20
|
-
|
|
19
|
+
USER extends User = User> = {
|
|
20
|
+
|
|
21
|
+
className?: string;
|
|
22
|
+
|
|
23
|
+
style?: React.CSSProperties;
|
|
21
24
|
|
|
22
25
|
/**
|
|
23
26
|
* Display these entities as selected
|
|
@@ -69,6 +72,21 @@ export type EntityCollectionTableProps<M extends Record<string, any>,
|
|
|
69
72
|
*/
|
|
70
73
|
onColumnResize?(params: OnColumnResizeParams): void;
|
|
71
74
|
|
|
75
|
+
/**
|
|
76
|
+
* Initial scroll position
|
|
77
|
+
*/
|
|
78
|
+
initialScroll?: number;
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Callback when the table is scrolled
|
|
82
|
+
* @param props
|
|
83
|
+
*/
|
|
84
|
+
onScroll?: (props: {
|
|
85
|
+
scrollDirection: "forward" | "backward",
|
|
86
|
+
scrollOffset: number,
|
|
87
|
+
scrollUpdateWasRequested: boolean
|
|
88
|
+
}) => void;
|
|
89
|
+
|
|
72
90
|
/**
|
|
73
91
|
* Callback when the selected size of the table is changed
|
|
74
92
|
*/
|
|
@@ -87,12 +105,12 @@ export type EntityCollectionTableProps<M extends Record<string, any>,
|
|
|
87
105
|
|
|
88
106
|
/**
|
|
89
107
|
* Controller holding the logic for the table
|
|
90
|
-
* {@link
|
|
108
|
+
* {@link useDataSourceTableController}
|
|
91
109
|
* {@link EntityTableController}
|
|
92
110
|
*/
|
|
93
111
|
tableController: EntityTableController<M>;
|
|
94
112
|
|
|
95
|
-
displayedColumnIds
|
|
113
|
+
displayedColumnIds?: PropertyColumnConfig[];
|
|
96
114
|
|
|
97
115
|
forceFilter?: FilterValues<Extract<keyof M, string>>;
|
|
98
116
|
|
|
@@ -100,7 +118,7 @@ export type EntityCollectionTableProps<M extends Record<string, any>,
|
|
|
100
118
|
|
|
101
119
|
inlineEditing?: boolean;
|
|
102
120
|
|
|
103
|
-
additionalFields?: AdditionalFieldDelegate<M,
|
|
121
|
+
additionalFields?: AdditionalFieldDelegate<M, USER>[];
|
|
104
122
|
|
|
105
123
|
defaultSize?: CollectionSize;
|
|
106
124
|
|
|
@@ -131,15 +149,18 @@ export type EntityCollectionTableProps<M extends Record<string, any>,
|
|
|
131
149
|
onTextSearchClick?: () => void;
|
|
132
150
|
|
|
133
151
|
textSearchLoading?: boolean;
|
|
134
|
-
|
|
152
|
+
|
|
153
|
+
enablePopupIcon: boolean;
|
|
154
|
+
|
|
155
|
+
openEntityMode?: "side_panel" | "full_screen";
|
|
156
|
+
};
|
|
135
157
|
|
|
136
158
|
export type GetPropertyForProps<M extends Record<string, any>> = {
|
|
137
159
|
propertyKey: string,
|
|
138
|
-
propertyValue: any,
|
|
139
160
|
entity: Entity<M>
|
|
140
161
|
};
|
|
141
162
|
|
|
142
163
|
export type PropertyColumnConfig = {
|
|
143
164
|
key: string,
|
|
144
|
-
disabled
|
|
165
|
+
disabled?: boolean,
|
|
145
166
|
};
|
|
@@ -24,15 +24,15 @@ import { getPreviewSizeFrom } from "../../preview/util";
|
|
|
24
24
|
import { isReadOnly } from "../../util";
|
|
25
25
|
|
|
26
26
|
import { CustomFieldValidator, mapPropertyToYup } from "../../form/validation";
|
|
27
|
-
import { useClearRestoreValue, useFireCMSContext } from "../../hooks";
|
|
28
27
|
|
|
29
28
|
import { EntityTableCell } from "./internal/EntityTableCell";
|
|
30
29
|
import { EntityTableCellActions } from "./internal/EntityTableCellActions";
|
|
31
30
|
|
|
32
|
-
import { getRowHeight } from "../VirtualTable/common";
|
|
33
31
|
import { useSelectableTableController } from "../SelectableTable/SelectableTableContext";
|
|
32
|
+
import { useClearRestoreValue } from "../../form/useClearRestoreValue";
|
|
33
|
+
import { getRowHeight } from "../common/table_height";
|
|
34
34
|
|
|
35
|
-
export interface PropertyTableCellProps<T extends CMSType
|
|
35
|
+
export interface PropertyTableCellProps<T extends CMSType> {
|
|
36
36
|
propertyKey: string;
|
|
37
37
|
columnIndex: number;
|
|
38
38
|
align: "right" | "left" | "center";
|
|
@@ -45,9 +45,12 @@ export interface PropertyTableCellProps<T extends CMSType, M extends Record<stri
|
|
|
45
45
|
entity: Entity<any>;
|
|
46
46
|
path: string;
|
|
47
47
|
disabled: boolean;
|
|
48
|
+
enablePopupIcon?: boolean;
|
|
48
49
|
}
|
|
49
50
|
|
|
50
51
|
function isStorageProperty(property: ResolvedProperty) {
|
|
52
|
+
if (property.dataType === "string" && property.markdown)
|
|
53
|
+
return false;
|
|
51
54
|
if (property.dataType === "string" && (property as ResolvedStringProperty).storage)
|
|
52
55
|
return true;
|
|
53
56
|
if (property.dataType === "array") {
|
|
@@ -61,7 +64,7 @@ function isStorageProperty(property: ResolvedProperty) {
|
|
|
61
64
|
return false;
|
|
62
65
|
}
|
|
63
66
|
|
|
64
|
-
export const PropertyTableCell = React.memo<PropertyTableCellProps<any
|
|
67
|
+
export const PropertyTableCell = React.memo<PropertyTableCellProps<any>>(
|
|
65
68
|
function PropertyTableCell<T extends CMSType, M extends Record<string, any>>({
|
|
66
69
|
propertyKey,
|
|
67
70
|
customFieldValidator,
|
|
@@ -73,10 +76,9 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any, any>>(
|
|
|
73
76
|
path,
|
|
74
77
|
entity,
|
|
75
78
|
readonly,
|
|
76
|
-
disabled: disabledProp
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
const context = useFireCMSContext();
|
|
79
|
+
disabled: disabledProp,
|
|
80
|
+
enablePopupIcon = true
|
|
81
|
+
}: PropertyTableCellProps<T>) {
|
|
80
82
|
|
|
81
83
|
const {
|
|
82
84
|
onValueChange,
|
|
@@ -87,13 +89,14 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any, any>>(
|
|
|
87
89
|
} = useSelectableTableController();
|
|
88
90
|
|
|
89
91
|
const selected = selectedCell?.propertyKey === propertyKey &&
|
|
90
|
-
selectedCell?.
|
|
91
|
-
selectedCell?.
|
|
92
|
+
selectedCell?.entityPath === entity.path &&
|
|
93
|
+
selectedCell?.entityId === entity.id;
|
|
92
94
|
|
|
93
95
|
const [internalValue, setInternalValue] = useState<any | null>(value);
|
|
94
96
|
const internalValueRef = useRef(value);
|
|
95
97
|
|
|
96
98
|
const [error, setError] = useState<Error | undefined>();
|
|
99
|
+
const [validationError, setValidationError] = useState<Error | undefined>();
|
|
97
100
|
const [saved, setSaved] = useState<boolean>(false);
|
|
98
101
|
|
|
99
102
|
const onValueUpdated = useCallback(() => {
|
|
@@ -119,7 +122,7 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any, any>>(
|
|
|
119
122
|
useEffect(
|
|
120
123
|
() => {
|
|
121
124
|
if (!equal(value, internalValueRef.current)) {
|
|
122
|
-
|
|
125
|
+
setValidationError(undefined);
|
|
123
126
|
setInternalValue(value);
|
|
124
127
|
internalValueRef.current = value;
|
|
125
128
|
onValueUpdated();
|
|
@@ -135,32 +138,34 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any, any>>(
|
|
|
135
138
|
validation
|
|
136
139
|
.validate(value)
|
|
137
140
|
.then(() => {
|
|
138
|
-
|
|
141
|
+
setValidationError(undefined);
|
|
139
142
|
internalValueRef.current = value;
|
|
140
143
|
if (onValueChange) {
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
})
|
|
144
|
+
try {
|
|
145
|
+
onValueChange({
|
|
146
|
+
value,
|
|
147
|
+
propertyKey,
|
|
148
|
+
setError,
|
|
149
|
+
onValueUpdated,
|
|
150
|
+
data: entity,
|
|
151
|
+
});
|
|
152
|
+
} catch (e: any) {
|
|
153
|
+
console.error("onValueChange error", e);
|
|
154
|
+
setError(e);
|
|
155
|
+
}
|
|
156
|
+
|
|
150
157
|
}
|
|
151
158
|
})
|
|
152
159
|
.catch((e) => {
|
|
153
|
-
|
|
160
|
+
setValidationError(e);
|
|
154
161
|
});
|
|
155
162
|
};
|
|
156
163
|
|
|
157
164
|
useEffect(() => {
|
|
158
165
|
validation
|
|
159
166
|
.validate(internalValue)
|
|
160
|
-
.then(() =>
|
|
161
|
-
.catch(
|
|
162
|
-
setError(e);
|
|
163
|
-
});
|
|
167
|
+
.then(() => setValidationError(undefined))
|
|
168
|
+
.catch(setValidationError);
|
|
164
169
|
}, [internalValue, validation, propertyKey, property, entity]);
|
|
165
170
|
|
|
166
171
|
const updateValue = (newValue: any | null) => {
|
|
@@ -188,7 +193,8 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any, any>>(
|
|
|
188
193
|
select({
|
|
189
194
|
width,
|
|
190
195
|
height,
|
|
191
|
-
entity,
|
|
196
|
+
entityPath: entity.path,
|
|
197
|
+
entityId: entity.id,
|
|
192
198
|
cellRect,
|
|
193
199
|
propertyKey: propertyKey as Extract<keyof M, string>
|
|
194
200
|
});
|
|
@@ -204,7 +210,8 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any, any>>(
|
|
|
204
210
|
setPopupCell({
|
|
205
211
|
width,
|
|
206
212
|
height,
|
|
207
|
-
entity,
|
|
213
|
+
entityPath: entity.path,
|
|
214
|
+
entityId: entity.id,
|
|
208
215
|
cellRect,
|
|
209
216
|
propertyKey: propertyKey as Extract<keyof M, string>
|
|
210
217
|
});
|
|
@@ -236,7 +243,6 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any, any>>(
|
|
|
236
243
|
height={getRowHeight(size)}
|
|
237
244
|
propertyKey={propertyKey}
|
|
238
245
|
property={property}
|
|
239
|
-
// entity={entity}
|
|
240
246
|
value={internalValue}
|
|
241
247
|
size={getPreviewSizeFrom(size)}
|
|
242
248
|
/>
|
|
@@ -246,7 +252,7 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any, any>>(
|
|
|
246
252
|
if (!customField && (!customPreview || selected)) {
|
|
247
253
|
const isAStorageProperty = isStorageProperty(property);
|
|
248
254
|
if (isAStorageProperty) {
|
|
249
|
-
innerComponent = <TableStorageUpload error={error}
|
|
255
|
+
innerComponent = <TableStorageUpload error={validationError ?? error}
|
|
250
256
|
disabled={disabled}
|
|
251
257
|
focused={selected}
|
|
252
258
|
selected={selected}
|
|
@@ -273,7 +279,7 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any, any>>(
|
|
|
273
279
|
valueType={"number"}
|
|
274
280
|
small={getPreviewSizeFrom(size) !== "medium"}
|
|
275
281
|
enumValues={numberProperty.enumValues}
|
|
276
|
-
error={error}
|
|
282
|
+
error={validationError ?? error}
|
|
277
283
|
internalValue={internalValue as string | number}
|
|
278
284
|
updateValue={updateValue}
|
|
279
285
|
/>;
|
|
@@ -281,7 +287,7 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any, any>>(
|
|
|
281
287
|
} else {
|
|
282
288
|
innerComponent = <VirtualTableNumberInput
|
|
283
289
|
align={align}
|
|
284
|
-
error={error}
|
|
290
|
+
error={validationError ?? error}
|
|
285
291
|
focused={selected}
|
|
286
292
|
disabled={disabled}
|
|
287
293
|
value={internalValue as number}
|
|
@@ -299,14 +305,14 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any, any>>(
|
|
|
299
305
|
valueType={"string"}
|
|
300
306
|
small={getPreviewSizeFrom(size) !== "medium"}
|
|
301
307
|
enumValues={stringProperty.enumValues}
|
|
302
|
-
error={error}
|
|
308
|
+
error={validationError ?? error}
|
|
303
309
|
internalValue={internalValue as string | number}
|
|
304
310
|
updateValue={updateValue}
|
|
305
311
|
/>;
|
|
306
312
|
fullHeight = true;
|
|
307
|
-
} else if (!stringProperty.storage) {
|
|
313
|
+
} else if (stringProperty.markdown || !stringProperty.storage) {
|
|
308
314
|
const multiline = Boolean(stringProperty.multiline) || Boolean(stringProperty.markdown);
|
|
309
|
-
innerComponent = <VirtualTableInput error={error}
|
|
315
|
+
innerComponent = <VirtualTableInput error={validationError ?? error}
|
|
310
316
|
disabled={disabled}
|
|
311
317
|
multiline={multiline}
|
|
312
318
|
focused={selected}
|
|
@@ -316,7 +322,7 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any, any>>(
|
|
|
316
322
|
allowScroll = true;
|
|
317
323
|
}
|
|
318
324
|
} else if (property.dataType === "boolean") {
|
|
319
|
-
innerComponent = <VirtualTableSwitch error={error}
|
|
325
|
+
innerComponent = <VirtualTableSwitch error={validationError ?? error}
|
|
320
326
|
disabled={disabled}
|
|
321
327
|
focused={selected}
|
|
322
328
|
internalValue={internalValue as boolean}
|
|
@@ -324,7 +330,7 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any, any>>(
|
|
|
324
330
|
/>;
|
|
325
331
|
} else if (property.dataType === "date") {
|
|
326
332
|
innerComponent = <VirtualTableDateField name={propertyKey as string}
|
|
327
|
-
error={error}
|
|
333
|
+
error={validationError ?? error}
|
|
328
334
|
disabled={disabled}
|
|
329
335
|
mode={property.mode}
|
|
330
336
|
focused={selected}
|
|
@@ -345,6 +351,8 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any, any>>(
|
|
|
345
351
|
path={property.path}
|
|
346
352
|
multiselect={false}
|
|
347
353
|
previewProperties={property.previewProperties}
|
|
354
|
+
includeId={property.includeId}
|
|
355
|
+
includeEntityLink={property.includeEntityLink}
|
|
348
356
|
title={property.name}
|
|
349
357
|
forceFilter={property.forceFilter}
|
|
350
358
|
/>;
|
|
@@ -367,7 +375,7 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any, any>>(
|
|
|
367
375
|
small={getPreviewSizeFrom(size) !== "medium"}
|
|
368
376
|
valueType={arrayProperty.of.dataType}
|
|
369
377
|
enumValues={arrayProperty.of.enumValues}
|
|
370
|
-
error={error}
|
|
378
|
+
error={validationError ?? error}
|
|
371
379
|
internalValue={internalValue as string | number}
|
|
372
380
|
updateValue={updateValue}
|
|
373
381
|
/>;
|
|
@@ -389,6 +397,8 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any, any>>(
|
|
|
389
397
|
previewProperties={arrayProperty.of.previewProperties}
|
|
390
398
|
title={arrayProperty.name}
|
|
391
399
|
forceFilter={arrayProperty.of.forceFilter}
|
|
400
|
+
includeId={arrayProperty.of.includeId}
|
|
401
|
+
includeEntityLink={arrayProperty.of.includeEntityLink}
|
|
392
402
|
/>;
|
|
393
403
|
}
|
|
394
404
|
allowScroll = false;
|
|
@@ -400,16 +410,14 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any, any>>(
|
|
|
400
410
|
|
|
401
411
|
if (!innerComponent) {
|
|
402
412
|
allowScroll = false;
|
|
403
|
-
showExpandIcon = selected && !innerComponent && !disabled && !readOnlyProperty;
|
|
413
|
+
showExpandIcon = enablePopupIcon && selected && !innerComponent && !disabled && !readOnlyProperty;
|
|
404
414
|
innerComponent = (
|
|
405
|
-
<PropertyPreview
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
property={property}
|
|
412
|
-
size={getPreviewSizeFrom(size)}
|
|
415
|
+
<PropertyPreview width={width}
|
|
416
|
+
height={height}
|
|
417
|
+
propertyKey={propertyKey as string}
|
|
418
|
+
value={internalValue}
|
|
419
|
+
property={property}
|
|
420
|
+
size={getPreviewSizeFrom(size)}
|
|
413
421
|
/>
|
|
414
422
|
);
|
|
415
423
|
}
|
|
@@ -426,7 +434,7 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any, any>>(
|
|
|
426
434
|
removePadding={removePadding}
|
|
427
435
|
fullHeight={fullHeight}
|
|
428
436
|
saved={saved}
|
|
429
|
-
error={error}
|
|
437
|
+
error={validationError ?? error}
|
|
430
438
|
align={align}
|
|
431
439
|
allowScroll={allowScroll}
|
|
432
440
|
showExpandIcon={showExpandIcon}
|
|
@@ -446,9 +454,9 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any, any>>(
|
|
|
446
454
|
);
|
|
447
455
|
|
|
448
456
|
},
|
|
449
|
-
areEqual) as React.FunctionComponent<PropertyTableCellProps<any
|
|
457
|
+
areEqual) as React.FunctionComponent<PropertyTableCellProps<any>>;
|
|
450
458
|
|
|
451
|
-
function areEqual(prevProps: PropertyTableCellProps<any
|
|
459
|
+
function areEqual(prevProps: PropertyTableCellProps<any>, nextProps: PropertyTableCellProps<any>) {
|
|
452
460
|
return prevProps.height === nextProps.height &&
|
|
453
461
|
prevProps.propertyKey === nextProps.propertyKey &&
|
|
454
462
|
prevProps.align === nextProps.align &&
|
|
@@ -21,7 +21,6 @@ export interface PropertiesToColumnsParams<M extends Record<string, any>> {
|
|
|
21
21
|
properties: ResolvedProperties<M>;
|
|
22
22
|
sortable?: boolean;
|
|
23
23
|
forceFilter?: FilterValues<keyof M extends string ? keyof M : never>;
|
|
24
|
-
disabledFilter?: boolean;
|
|
25
24
|
AdditionalHeaderWidget?: React.ComponentType<{
|
|
26
25
|
property: ResolvedProperty,
|
|
27
26
|
propertyKey: string,
|
|
@@ -29,7 +28,8 @@ export interface PropertiesToColumnsParams<M extends Record<string, any>> {
|
|
|
29
28
|
}>;
|
|
30
29
|
}
|
|
31
30
|
|
|
32
|
-
export function propertiesToColumns<M extends Record<string, any>>({ properties, sortable, forceFilter,
|
|
31
|
+
export function propertiesToColumns<M extends Record<string, any>>({ properties, sortable, forceFilter, AdditionalHeaderWidget }: PropertiesToColumnsParams<M>): VirtualTableColumn[] {
|
|
32
|
+
const disabledFilter = Boolean(forceFilter);
|
|
33
33
|
return Object.entries<ResolvedProperty>(properties)
|
|
34
34
|
.flatMap(([key, property]) => getColumnKeysForProperty(property, key))
|
|
35
35
|
.map(({
|
|
@@ -45,7 +45,7 @@ export function propertiesToColumns<M extends Record<string, any>>({ properties,
|
|
|
45
45
|
align: getTableCellAlignment(property),
|
|
46
46
|
icon: getIconForProperty(property, "small"),
|
|
47
47
|
title: property.name ?? key as string,
|
|
48
|
-
sortable: sortable
|
|
48
|
+
sortable: sortable,
|
|
49
49
|
filter: !disabledFilter && filterable,
|
|
50
50
|
width: getTablePropertyColumnWidth(property),
|
|
51
51
|
resizable: true,
|
|
@@ -1,14 +1,15 @@
|
|
|
1
|
-
import React, { useCallback
|
|
1
|
+
import React, { useCallback } from "react";
|
|
2
2
|
import equal from "react-fast-compare"
|
|
3
3
|
|
|
4
|
-
import { ReferencePreview
|
|
4
|
+
import { ReferencePreview } from "../../../preview";
|
|
5
5
|
import { CollectionSize, Entity, EntityCollection, EntityReference, FilterValues } from "../../../types";
|
|
6
6
|
|
|
7
7
|
import { getPreviewSizeFrom } from "../../../preview/util";
|
|
8
|
-
import { getReferenceFrom } from "../../../util";
|
|
8
|
+
import { getReferenceFrom, IconForView } from "../../../util";
|
|
9
9
|
import { useCustomizationController, useNavigationController, useReferenceDialog } from "../../../hooks";
|
|
10
10
|
import { ErrorView } from "../../ErrorView";
|
|
11
|
-
import {
|
|
11
|
+
import { cls, EditIcon } from "@firecms/ui";
|
|
12
|
+
import { EntityPreviewContainer } from "../../EntityPreview";
|
|
12
13
|
|
|
13
14
|
type TableReferenceFieldProps = {
|
|
14
15
|
name: string;
|
|
@@ -21,6 +22,8 @@ type TableReferenceFieldProps = {
|
|
|
21
22
|
title?: string;
|
|
22
23
|
path: string;
|
|
23
24
|
forceFilter?: FilterValues<string>;
|
|
25
|
+
includeId?: boolean;
|
|
26
|
+
includeEntityLink?: boolean;
|
|
24
27
|
};
|
|
25
28
|
|
|
26
29
|
export function TableReferenceField(props: TableReferenceFieldProps) {
|
|
@@ -28,7 +31,7 @@ export function TableReferenceField(props: TableReferenceFieldProps) {
|
|
|
28
31
|
|
|
29
32
|
const navigationController = useNavigationController();
|
|
30
33
|
const { path } = props;
|
|
31
|
-
const collection = navigationController.getCollection
|
|
34
|
+
const collection = navigationController.getCollection(path);
|
|
32
35
|
if (!collection) {
|
|
33
36
|
if (customizationController.components?.missingReference) {
|
|
34
37
|
return <customizationController.components.missingReference path={path}/>;
|
|
@@ -36,11 +39,11 @@ export function TableReferenceField(props: TableReferenceFieldProps) {
|
|
|
36
39
|
throw Error(`Couldn't find the corresponding collection view for the path: ${path}`);
|
|
37
40
|
}
|
|
38
41
|
}
|
|
39
|
-
return <
|
|
42
|
+
return <TableReferenceFieldInternal {...props} collection={collection}/>;
|
|
40
43
|
}
|
|
41
44
|
|
|
42
|
-
export const
|
|
43
|
-
function
|
|
45
|
+
export const TableReferenceFieldInternal = React.memo(
|
|
46
|
+
function TableReferenceFieldInternal(props: TableReferenceFieldProps & {
|
|
44
47
|
collection: EntityCollection;
|
|
45
48
|
}) {
|
|
46
49
|
const {
|
|
@@ -54,14 +57,11 @@ export const TableReferenceFieldSuccess = React.memo(
|
|
|
54
57
|
title,
|
|
55
58
|
disabled,
|
|
56
59
|
forceFilter,
|
|
57
|
-
collection
|
|
60
|
+
collection,
|
|
61
|
+
includeId,
|
|
62
|
+
includeEntityLink
|
|
58
63
|
} = props;
|
|
59
64
|
|
|
60
|
-
const [onHover, setOnHover] = useState(false);
|
|
61
|
-
|
|
62
|
-
const hoverTrue = useCallback(() => setOnHover(true), []);
|
|
63
|
-
const hoverFalse = useCallback(() => setOnHover(false), []);
|
|
64
|
-
|
|
65
65
|
const onSingleEntitySelected = useCallback((entity: Entity<any>) => {
|
|
66
66
|
updateValue(entity ? getReferenceFrom(entity) : null);
|
|
67
67
|
}, [updateValue]);
|
|
@@ -87,45 +87,49 @@ export const TableReferenceFieldSuccess = React.memo(
|
|
|
87
87
|
}
|
|
88
88
|
);
|
|
89
89
|
|
|
90
|
-
const handleOpen =
|
|
90
|
+
const handleOpen = () => {
|
|
91
91
|
if (disabled)
|
|
92
92
|
return;
|
|
93
93
|
referenceDialogController.open();
|
|
94
|
-
}
|
|
94
|
+
};
|
|
95
95
|
|
|
96
96
|
const valueNotSet = !internalValue || (Array.isArray(internalValue) && internalValue.length === 0);
|
|
97
97
|
|
|
98
98
|
const buildSingleReferenceField = () => {
|
|
99
|
-
if (internalValue
|
|
99
|
+
if (internalValue && !Array.isArray(internalValue) && internalValue.isEntityReference && internalValue.isEntityReference())
|
|
100
100
|
return <ReferencePreview
|
|
101
101
|
onClick={disabled ? undefined : handleOpen}
|
|
102
102
|
size={getPreviewSizeFrom(size)}
|
|
103
103
|
reference={internalValue as EntityReference}
|
|
104
|
-
|
|
104
|
+
hover={!disabled}
|
|
105
105
|
disabled={!path}
|
|
106
106
|
previewProperties={previewProperties}
|
|
107
|
+
includeId={includeId}
|
|
108
|
+
includeEntityLink={includeEntityLink}
|
|
107
109
|
/>;
|
|
108
110
|
else
|
|
109
|
-
return <
|
|
111
|
+
return <EntityPreviewContainer
|
|
110
112
|
onClick={disabled ? undefined : handleOpen}
|
|
111
113
|
size={getPreviewSizeFrom(size)}>
|
|
112
114
|
<ErrorView title="Value is not a reference." error={"Click to edit"}/>
|
|
113
|
-
</
|
|
115
|
+
</EntityPreviewContainer>;
|
|
114
116
|
};
|
|
115
117
|
|
|
116
118
|
const buildMultipleReferenceField = () => {
|
|
117
119
|
if (Array.isArray(internalValue))
|
|
118
120
|
return <>
|
|
119
121
|
{internalValue.map((reference, index) =>
|
|
120
|
-
<div className="
|
|
122
|
+
<div className="w-full my-0.5"
|
|
121
123
|
key={`preview_array_ref_${name}_${index}`}>
|
|
122
124
|
<ReferencePreview
|
|
123
125
|
onClick={disabled ? undefined : handleOpen}
|
|
124
|
-
size={"
|
|
126
|
+
size={"small"}
|
|
125
127
|
reference={reference}
|
|
126
|
-
|
|
128
|
+
hover={!disabled}
|
|
127
129
|
disabled={!path}
|
|
128
130
|
previewProperties={previewProperties}
|
|
131
|
+
includeId={includeId}
|
|
132
|
+
includeEntityLink={includeEntityLink}
|
|
129
133
|
/>
|
|
130
134
|
</div>
|
|
131
135
|
)
|
|
@@ -139,23 +143,26 @@ export const TableReferenceFieldSuccess = React.memo(
|
|
|
139
143
|
return <ErrorView error={"The specified collection does not exist"}/>;
|
|
140
144
|
|
|
141
145
|
return (
|
|
142
|
-
<div className="w-full"
|
|
143
|
-
onMouseEnter={hoverTrue}
|
|
144
|
-
onMouseMove={hoverTrue}
|
|
145
|
-
onMouseLeave={hoverFalse}>
|
|
146
|
+
<div className="w-full group">
|
|
146
147
|
|
|
147
148
|
{internalValue && !multiselect && buildSingleReferenceField()}
|
|
148
149
|
|
|
149
150
|
{internalValue && multiselect && buildMultipleReferenceField()}
|
|
150
151
|
|
|
151
152
|
{valueNotSet &&
|
|
152
|
-
<
|
|
153
|
+
<EntityPreviewContainer
|
|
154
|
+
className={cls("px-3 py-2 text-sm font-medium flex items-center",
|
|
155
|
+
multiselect ? "gap-4" : "gap-6",
|
|
156
|
+
disabled
|
|
157
|
+
? "text-surface-accent-500"
|
|
158
|
+
: "cursor-pointer text-text-secondary dark:text-text-secondary-dark hover:bg-surface-accent-50 dark:hover:bg-surface-800 group-hover:bg-surface-accent-50 dark:group-hover:bg-surface-800")}
|
|
153
159
|
onClick={handleOpen}
|
|
154
|
-
size={"
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
160
|
+
size={"medium"}>
|
|
161
|
+
<EditIcon
|
|
162
|
+
size={"small"}
|
|
163
|
+
className={"ml-2 mr-1 text-surface-300 dark:text-surface-600"}/>
|
|
164
|
+
{title}
|
|
165
|
+
</EntityPreviewContainer>}
|
|
159
166
|
|
|
160
167
|
</div>
|
|
161
168
|
);
|