@firecms/core 3.0.0-canary.15 → 3.0.0-canary.150
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/dist/app/AppBar.d.ts +12 -0
- package/dist/app/Drawer.d.ts +16 -0
- package/dist/app/Scaffold.d.ts +30 -0
- package/dist/app/index.d.ts +4 -0
- package/dist/app/useApp.d.ts +16 -0
- package/dist/components/ArrayContainer.d.ts +19 -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 +11 -12
- package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +1 -1
- package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +7 -5
- 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/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 +12 -2
- package/dist/components/EntityCollectionView/EntityCollectionViewStartActions.d.ts +11 -0
- package/dist/components/EntityCollectionView/utils.d.ts +3 -0
- package/dist/components/EntityPreview.d.ts +7 -6
- 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 +1 -1
- package/dist/components/SelectableTable/filters/ReferenceFilterField.d.ts +2 -1
- package/dist/components/VirtualTable/VirtualTableProps.d.ts +15 -12
- package/dist/components/VirtualTable/types.d.ts +3 -3
- package/dist/components/{EntityCollectionTable/internal → common}/default_entity_actions.d.ts +1 -1
- package/dist/components/common/index.d.ts +1 -0
- 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 +2 -1
- package/dist/components/common/useDataSourceEntityCollectionTableController.d.ts +4 -1
- package/dist/components/index.d.ts +4 -2
- 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 +18 -4
- package/dist/core/FireCMS.d.ts +2 -2
- package/dist/core/NavigationRoutes.d.ts +3 -3
- package/dist/core/index.d.ts +3 -4
- 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/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 +1 -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/TextFieldBinding.d.ts +1 -1
- package/dist/form/index.d.ts +3 -5
- 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 +3 -3
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/useAuthController.d.ts +1 -1
- package/dist/hooks/useBuildNavigationController.d.ts +3 -4
- package/dist/hooks/useFireCMSContext.d.ts +1 -1
- package/dist/hooks/useProjectLog.d.ts +8 -2
- package/dist/hooks/useResolvedNavigationFrom.d.ts +3 -3
- package/dist/hooks/useValidateAuthenticator.d.ts +5 -9
- package/dist/index.d.ts +1 -0
- package/dist/index.es.js +16536 -13058
- package/dist/index.es.js.map +1 -1
- package/dist/index.umd.js +20159 -587
- package/dist/index.umd.js.map +1 -1
- package/dist/internal/useBuildDataSource.d.ts +1 -16
- 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/types/auth.d.ts +7 -11
- package/dist/types/collections.d.ts +53 -18
- package/dist/types/datasource.d.ts +51 -35
- package/dist/types/entities.d.ts +6 -1
- package/dist/types/entity_actions.d.ts +18 -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 +63 -41
- 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 +6 -5
- package/dist/types/permissions.d.ts +4 -4
- package/dist/types/plugins.d.ts +22 -12
- package/dist/types/properties.d.ts +34 -21
- package/dist/types/property_config.d.ts +0 -2
- package/dist/types/side_dialogs_controller.d.ts +10 -0
- package/dist/types/storage.d.ts +86 -3
- package/dist/types/user.d.ts +1 -0
- package/dist/util/builders.d.ts +2 -2
- package/dist/util/entities.d.ts +2 -2
- package/dist/util/icon_list.d.ts +5 -1
- package/dist/util/icon_synonyms.d.ts +1 -97
- package/dist/util/icons.d.ts +6 -3
- package/dist/util/index.d.ts +1 -0
- package/dist/util/navigation_utils.d.ts +2 -2
- package/dist/util/objects.d.ts +2 -1
- package/dist/util/permissions.d.ts +4 -4
- package/dist/util/plurals.d.ts +0 -2
- package/dist/util/property_utils.d.ts +3 -3
- package/dist/util/resolutions.d.ts +30 -16
- package/dist/util/storage.d.ts +23 -2
- package/dist/util/useStorageUploadController.d.ts +3 -3
- package/package.json +128 -119
- 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 +92 -25
- package/src/components/CircularProgressCenter.tsx +2 -2
- package/src/components/ClearFilterSortButton.tsx +41 -0
- package/src/components/{DeleteConfirmationDialog.tsx → ConfirmationDialog.tsx} +1 -1
- package/src/components/DeleteEntityDialog.tsx +1 -1
- package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +13 -20
- package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +25 -24
- package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +12 -8
- package/src/components/EntityCollectionTable/PropertyTableCell.tsx +47 -39
- package/src/components/EntityCollectionTable/column_utils.tsx +3 -3
- package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +31 -17
- package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +16 -8
- package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +29 -34
- package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +36 -34
- package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +19 -7
- package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +82 -75
- package/src/components/EntityCollectionView/EntityCollectionView.tsx +139 -87
- package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +68 -0
- package/src/components/EntityCollectionView/useSelectionController.tsx +19 -7
- package/src/components/EntityCollectionView/utils.ts +19 -0
- package/src/components/EntityPreview.tsx +47 -41
- package/src/components/EntityView.tsx +10 -10
- package/src/components/ErrorView.tsx +3 -3
- package/src/components/HomePage/DefaultHomePage.tsx +25 -19
- package/src/components/HomePage/FavouritesView.tsx +1 -1
- package/src/components/HomePage/NavigationCard.tsx +4 -4
- package/src/components/HomePage/NavigationCardBinding.tsx +2 -2
- package/src/components/HomePage/NavigationGroup.tsx +2 -2
- package/src/components/HomePage/SmallNavigationCard.tsx +5 -6
- package/src/components/PropertyConfigBadge.tsx +9 -3
- package/src/components/PropertyIdCopyTooltip.tsx +48 -0
- package/src/components/ReferenceTable/ReferenceSelectionTable.tsx +8 -7
- package/src/components/ReferenceWidget.tsx +22 -12
- package/src/components/SearchIconsView.tsx +10 -7
- package/src/components/SelectableTable/SelectableTable.tsx +9 -9
- package/src/components/SelectableTable/filters/BooleanFilterField.tsx +2 -3
- package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +22 -7
- package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +28 -6
- package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +88 -21
- package/src/components/VirtualTable/VirtualTable.tsx +77 -46
- 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 +18 -14
- package/src/components/VirtualTable/VirtualTableRow.tsx +5 -6
- package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +4 -4
- package/src/components/VirtualTable/fields/VirtualTableInput.tsx +2 -1
- package/src/components/VirtualTable/fields/VirtualTableNumberInput.tsx +2 -1
- package/src/components/VirtualTable/fields/VirtualTableSelect.tsx +14 -28
- package/src/components/VirtualTable/types.tsx +2 -3
- package/src/components/{EntityCollectionTable/internal → common}/default_entity_actions.tsx +8 -4
- package/src/components/common/index.ts +1 -0
- 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 +23 -2
- package/src/components/common/useDataSourceEntityCollectionTableController.tsx +25 -14
- package/src/components/common/useTableSearchHelper.ts +53 -12
- package/src/components/index.tsx +4 -2
- package/src/contexts/DialogsProvider.tsx +2 -2
- package/src/core/DefaultAppBar.tsx +178 -0
- package/src/core/DefaultDrawer.tsx +183 -0
- package/src/core/DrawerNavigationItem.tsx +66 -0
- package/src/core/EntityEditView.tsx +717 -154
- package/src/core/EntitySidePanel.tsx +1 -2
- package/src/core/FireCMS.tsx +54 -53
- package/src/core/NavigationRoutes.tsx +7 -8
- package/src/core/SideDialogs.tsx +2 -1
- package/src/core/field_configs.tsx +8 -9
- package/src/core/index.tsx +3 -4
- package/src/form/PropertyFieldBinding.tsx +74 -35
- package/src/form/components/CustomIdField.tsx +4 -2
- package/src/form/components/FieldHelperText.tsx +4 -4
- package/src/form/components/LabelWithIcon.tsx +27 -19
- package/src/form/components/LabelWithIconAndTooltip.tsx +28 -0
- package/src/form/components/StorageItemPreview.tsx +22 -12
- package/src/form/components/StorageUploadProgress.tsx +3 -4
- package/src/form/components/index.tsx +1 -1
- package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +29 -17
- package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +45 -35
- package/src/form/field_bindings/BlockFieldBinding.tsx +51 -32
- package/src/form/field_bindings/DateTimeFieldBinding.tsx +17 -14
- package/src/form/field_bindings/KeyValueFieldBinding.tsx +54 -45
- package/src/form/field_bindings/MapFieldBinding.tsx +65 -48
- package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +150 -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 +52 -34
- package/src/form/field_bindings/SelectFieldBinding.tsx +20 -13
- package/src/form/field_bindings/StorageUploadFieldBinding.tsx +36 -46
- package/src/form/field_bindings/SwitchFieldBinding.tsx +9 -5
- package/src/form/field_bindings/TextFieldBinding.tsx +26 -23
- package/src/form/index.tsx +4 -9
- package/src/form/useClearRestoreValue.tsx +2 -2
- package/src/form/validation.ts +1 -17
- package/src/hooks/data/delete.ts +6 -5
- package/src/hooks/data/save.ts +12 -8
- package/src/hooks/data/useCollectionFetch.tsx +2 -2
- package/src/hooks/data/useDataSource.tsx +11 -3
- package/src/hooks/data/useEntityFetch.tsx +5 -5
- package/src/hooks/index.tsx +1 -0
- package/src/hooks/useAuthController.tsx +1 -1
- package/src/hooks/useBuildLocalConfigurationPersistence.tsx +8 -10
- package/src/hooks/useBuildModeController.tsx +11 -5
- package/src/hooks/useBuildNavigationController.tsx +92 -34
- package/src/hooks/useFireCMSContext.tsx +5 -5
- package/src/hooks/useProjectLog.tsx +32 -10
- package/src/hooks/useResolvedNavigationFrom.tsx +6 -6
- package/src/hooks/useValidateAuthenticator.tsx +21 -41
- package/src/index.ts +1 -0
- package/src/internal/useBuildDataSource.ts +72 -82
- package/src/internal/useBuildSideDialogsController.tsx +1 -0
- package/src/internal/useBuildSideEntityController.tsx +102 -22
- package/src/internal/useUnsavedChangesDialog.tsx +3 -1
- package/src/preview/PropertyPreview.tsx +11 -18
- 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 -35
- package/src/preview/components/ReferencePreview.tsx +23 -34
- package/src/preview/components/StorageThumbnail.tsx +5 -1
- package/src/preview/components/UrlComponentPreview.tsx +44 -11
- 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 +6 -6
- package/src/preview/property_previews/SkeletonPropertyComponent.tsx +2 -2
- package/src/preview/property_previews/StringPropertyPreview.tsx +3 -3
- package/src/preview/util.ts +2 -2
- package/src/types/auth.tsx +7 -13
- package/src/types/collections.ts +62 -20
- package/src/types/customization_controller.tsx +0 -1
- package/src/types/datasource.ts +60 -43
- package/src/types/entities.ts +11 -1
- package/src/types/entity_actions.tsx +20 -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 +69 -45
- package/src/types/firecms.tsx +7 -2
- package/src/types/firecms_context.tsx +1 -1
- package/src/types/index.ts +0 -1
- package/src/types/navigation.ts +7 -7
- package/src/types/permissions.ts +5 -5
- package/src/types/plugins.tsx +24 -14
- package/src/types/properties.ts +39 -22
- package/src/types/property_config.tsx +0 -2
- package/src/types/side_dialogs_controller.tsx +13 -0
- package/src/types/storage.ts +94 -3
- package/src/types/user.ts +2 -0
- package/src/util/builders.ts +6 -6
- package/src/util/entities.ts +6 -5
- package/src/util/enums.ts +1 -1
- package/src/util/icon_list.ts +15 -10
- package/src/util/icon_synonyms.ts +3 -99
- package/src/util/icons.tsx +17 -7
- package/src/util/index.ts +1 -0
- package/src/util/make_properties_editable.ts +13 -5
- package/src/util/navigation_utils.ts +6 -6
- package/src/util/objects.ts +45 -28
- package/src/util/permissions.ts +9 -8
- package/src/util/plurals.ts +0 -2
- package/src/util/property_utils.tsx +11 -4
- package/src/util/references.ts +3 -0
- 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 +33 -7
- package/src/util/useTraceUpdate.tsx +1 -0
- 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/EntityForm.d.ts +0 -77
- 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/core/Drawer.tsx +0 -191
- package/src/core/Scaffold.tsx +0 -281
- package/src/core/SideEntityView.tsx +0 -38
- package/src/form/EntityForm.tsx +0 -728
- 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
|
@@ -8,9 +8,10 @@ import {
|
|
|
8
8
|
getEntityPreviewKeys,
|
|
9
9
|
getEntityTitlePropertyKey,
|
|
10
10
|
getValueInPath,
|
|
11
|
+
IconForView,
|
|
11
12
|
resolveCollection
|
|
12
13
|
} from "../util";
|
|
13
|
-
import {
|
|
14
|
+
import { cls, defaultBorderMixin, IconButton, KeyboardTabIcon, Skeleton, Tooltip, Typography } from "@firecms/ui";
|
|
14
15
|
import { PreviewSize, PropertyPreview, SkeletonPropertyComponent } from "../preview";
|
|
15
16
|
import { useCustomizationController, useNavigationController, useSideEntityController } from "../hooks";
|
|
16
17
|
import { useAnalyticsController } from "../hooks/useAnalyticsController";
|
|
@@ -21,9 +22,10 @@ export type EntityPreviewProps = {
|
|
|
21
22
|
collection?: EntityCollection,
|
|
22
23
|
hover?: boolean;
|
|
23
24
|
previewProperties?: string[],
|
|
24
|
-
disabled
|
|
25
|
+
disabled?: boolean,
|
|
25
26
|
entity: Entity<any>,
|
|
26
|
-
|
|
27
|
+
includeId?: boolean,
|
|
28
|
+
includeEntityLink?: boolean,
|
|
27
29
|
onClick?: (e: React.SyntheticEvent) => void;
|
|
28
30
|
};
|
|
29
31
|
|
|
@@ -39,7 +41,8 @@ export function EntityPreview({
|
|
|
39
41
|
previewProperties,
|
|
40
42
|
onClick,
|
|
41
43
|
size,
|
|
42
|
-
|
|
44
|
+
includeId = true,
|
|
45
|
+
includeEntityLink = true,
|
|
43
46
|
entity
|
|
44
47
|
}: EntityPreviewProps) {
|
|
45
48
|
|
|
@@ -49,7 +52,7 @@ export function EntityPreview({
|
|
|
49
52
|
|
|
50
53
|
const navigationController = useNavigationController();
|
|
51
54
|
|
|
52
|
-
const collection = collectionProp ?? navigationController.getCollection
|
|
55
|
+
const collection = collectionProp ?? navigationController.getCollection(entity.path);
|
|
53
56
|
|
|
54
57
|
if (!collection) {
|
|
55
58
|
throw Error(`Couldn't find the corresponding collection view for the path: ${entity.path}`);
|
|
@@ -59,7 +62,7 @@ export function EntityPreview({
|
|
|
59
62
|
collection,
|
|
60
63
|
path: entity.path,
|
|
61
64
|
values: entity.values,
|
|
62
|
-
|
|
65
|
+
propertyConfigs: customizationController.propertyConfigs
|
|
63
66
|
}), [collection]);
|
|
64
67
|
|
|
65
68
|
const listProperties = useMemo(() => getEntityPreviewKeys(resolvedCollection, customizationController.propertyConfigs, previewProperties, size === "small" || size === "medium" ? 3 : 1),
|
|
@@ -74,18 +77,21 @@ export function EntityPreview({
|
|
|
74
77
|
return <EntityPreviewContainer onClick={disabled ? undefined : onClick}
|
|
75
78
|
hover={disabled ? undefined : hover}
|
|
76
79
|
size={size}>
|
|
77
|
-
{
|
|
78
|
-
<
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
80
|
+
<div className={cls("flex w-10 h-10 ml-1 mr-2 shrink-0", size === "smallest" ? "my-0.5" : "m-2 self-start")}>
|
|
81
|
+
{imageProperty && <PropertyPreview property={imageProperty}
|
|
82
|
+
propertyKey={imagePropertyKey as string}
|
|
83
|
+
size={"smallest"}
|
|
84
|
+
value={getValueInPath(entity.values, imagePropertyKey as string)}/>}
|
|
85
|
+
{!imageProperty && <IconForView collectionOrView={collection}
|
|
86
|
+
color={"primary"}
|
|
87
|
+
size={size}
|
|
88
|
+
className={"m-auto p-1"}/>}
|
|
89
|
+
</div>
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
<div className={"flex flex-col grow-1 w-full max-w-full m-1"}>
|
|
93
|
+
|
|
94
|
+
{size !== "smallest" && includeId && (
|
|
89
95
|
entity
|
|
90
96
|
? <div className={`${
|
|
91
97
|
size !== "medium"
|
|
@@ -129,10 +135,10 @@ export function EntityPreview({
|
|
|
129
135
|
propertyKey={key as string}
|
|
130
136
|
value={getValueInPath(entity.values, key)}
|
|
131
137
|
property={childProperty as ResolvedProperty}
|
|
132
|
-
size={"
|
|
138
|
+
size={"smallest"}/>
|
|
133
139
|
: <SkeletonPropertyComponent
|
|
134
140
|
property={childProperty as ResolvedProperty}
|
|
135
|
-
size={"
|
|
141
|
+
size={"smallest"}/>
|
|
136
142
|
}
|
|
137
143
|
</div>
|
|
138
144
|
);
|
|
@@ -140,12 +146,12 @@ export function EntityPreview({
|
|
|
140
146
|
|
|
141
147
|
</div>
|
|
142
148
|
|
|
143
|
-
{entity &&
|
|
144
|
-
<Tooltip title={`See details for ${entity.id}`}
|
|
145
|
-
className={size !== "tiny" ? "self-start" : ""}>
|
|
149
|
+
{entity && includeEntityLink &&
|
|
150
|
+
<Tooltip title={`See details for ${entity.id}`}>
|
|
146
151
|
<IconButton
|
|
147
152
|
color={"inherit"}
|
|
148
153
|
size={"small"}
|
|
154
|
+
className={size !== "smallest" ? "self-start" : ""}
|
|
149
155
|
onClick={(e) => {
|
|
150
156
|
e.stopPropagation();
|
|
151
157
|
analyticsController.onAnalyticsEvent?.("entity_click_from_reference", {
|
|
@@ -168,24 +174,26 @@ export function EntityPreview({
|
|
|
168
174
|
</EntityPreviewContainer>;
|
|
169
175
|
}
|
|
170
176
|
|
|
171
|
-
type EntityPreviewContainerProps = {
|
|
177
|
+
export type EntityPreviewContainerProps = {
|
|
172
178
|
children: React.ReactNode;
|
|
173
179
|
hover?: boolean;
|
|
180
|
+
fullwidth?: boolean;
|
|
174
181
|
size: PreviewSize;
|
|
175
182
|
className?: string;
|
|
176
183
|
style?: React.CSSProperties;
|
|
177
184
|
onClick?: (e: React.SyntheticEvent) => void;
|
|
178
185
|
};
|
|
179
186
|
|
|
180
|
-
const
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
187
|
+
export const EntityPreviewContainer = React.forwardRef<HTMLDivElement, EntityPreviewContainerProps>(({
|
|
188
|
+
children,
|
|
189
|
+
hover,
|
|
190
|
+
onClick,
|
|
191
|
+
size,
|
|
192
|
+
style,
|
|
193
|
+
className,
|
|
194
|
+
fullwidth = true,
|
|
195
|
+
...props
|
|
196
|
+
}, ref) => {
|
|
189
197
|
return <div
|
|
190
198
|
ref={ref}
|
|
191
199
|
style={{
|
|
@@ -193,11 +201,13 @@ const EntityPreviewContainerInner = React.forwardRef<HTMLDivElement, EntityPrevi
|
|
|
193
201
|
// @ts-ignore
|
|
194
202
|
tabindex: 0
|
|
195
203
|
}}
|
|
196
|
-
className={
|
|
197
|
-
"bg-white dark:bg-
|
|
204
|
+
className={cls(
|
|
205
|
+
"bg-white dark:bg-surface-900",
|
|
206
|
+
"min-h-[42px]",
|
|
207
|
+
fullwidth ? "w-full" : "",
|
|
198
208
|
"items-center",
|
|
199
|
-
hover ? "hover:bg-
|
|
200
|
-
size === "
|
|
209
|
+
hover ? "hover:bg-surface-accent-50 dark:hover:bg-surface-800 group-hover:bg-surface-accent-50 dark:group-hover:bg-surface-800" : "",
|
|
210
|
+
size === "smallest" ? "p-1" : "px-2 py-1",
|
|
201
211
|
"flex border rounded-lg",
|
|
202
212
|
onClick ? "cursor-pointer" : "",
|
|
203
213
|
defaultBorderMixin,
|
|
@@ -212,7 +222,3 @@ const EntityPreviewContainerInner = React.forwardRef<HTMLDivElement, EntityPrevi
|
|
|
212
222
|
{children}
|
|
213
223
|
</div>;
|
|
214
224
|
});
|
|
215
|
-
|
|
216
|
-
EntityPreviewContainerInner.displayName = "EntityPreviewContainer";
|
|
217
|
-
|
|
218
|
-
export const EntityPreviewContainer = React.memo(EntityPreviewContainerInner) as React.FC<EntityPreviewContainerProps>;
|
|
@@ -2,7 +2,7 @@ import React, { useMemo } from "react";
|
|
|
2
2
|
import { PropertyPreview } from "../preview";
|
|
3
3
|
import { Entity, EntityCollection, ResolvedEntityCollection, ResolvedProperties } from "../types";
|
|
4
4
|
import { resolveCollection } from "../util";
|
|
5
|
-
import {
|
|
5
|
+
import { cls, defaultBorderMixin, IconButton, OpenInNewIcon } from "@firecms/ui";
|
|
6
6
|
import { CustomizationController } from "../types/customization_controller";
|
|
7
7
|
import { useCustomizationController } from "../hooks/useCustomizationController";
|
|
8
8
|
|
|
@@ -30,20 +30,20 @@ export function EntityView<M extends Record<string, any>>(
|
|
|
30
30
|
path,
|
|
31
31
|
entityId: entity.id,
|
|
32
32
|
values: entity.values,
|
|
33
|
-
|
|
34
|
-
}), [collection, path, entity]);
|
|
33
|
+
propertyConfigs: customizationController.propertyConfigs
|
|
34
|
+
}), [collection, path, entity, customizationController.propertyConfigs]);
|
|
35
35
|
|
|
36
36
|
const properties: ResolvedProperties = resolvedCollection.properties;
|
|
37
37
|
|
|
38
38
|
return (
|
|
39
39
|
<div className={"w-full " + className}>
|
|
40
40
|
<div className={"w-full mb-4"}>
|
|
41
|
-
<div className={
|
|
41
|
+
<div className={cls(defaultBorderMixin, "flex justify-between py-2 border-b last:border-b-0")}>
|
|
42
42
|
<div className="flex items-center w-1/4">
|
|
43
|
-
<span className="pl-2 text-sm text-
|
|
43
|
+
<span className="pl-2 text-sm text-surface-600">Id</span>
|
|
44
44
|
</div>
|
|
45
45
|
<div
|
|
46
|
-
className="flex-grow p-2 ml-2 w-3/4 text-
|
|
46
|
+
className="flex-grow p-2 ml-2 w-3/4 text-surface-900 dark:text-white min-h-[56px] flex items-center">
|
|
47
47
|
<span className="flex-grow mr-2">{entity.id}</span>
|
|
48
48
|
{customizationController?.entityLinkBuilder &&
|
|
49
49
|
<a href={customizationController.entityLinkBuilder({ entity })}
|
|
@@ -58,16 +58,16 @@ export function EntityView<M extends Record<string, any>>(
|
|
|
58
58
|
</div>
|
|
59
59
|
{Object.entries(properties)
|
|
60
60
|
.map(([key, property]) => {
|
|
61
|
-
const value =
|
|
61
|
+
const value = entity.values?.[key];
|
|
62
62
|
return (
|
|
63
63
|
<div
|
|
64
64
|
key={`reference_previews_${key}`}
|
|
65
|
-
className={
|
|
65
|
+
className={cls(defaultBorderMixin, "flex justify-between py-2 border-b last:border-b-0")}>
|
|
66
66
|
<div className="flex items-center w-1/4">
|
|
67
|
-
<span className="pl-2 text-sm text-
|
|
67
|
+
<span className="pl-2 text-sm text-surface-600">{property.name}</span>
|
|
68
68
|
</div>
|
|
69
69
|
<div
|
|
70
|
-
className="flex-grow p-2 ml-2 w-3/4 text-
|
|
70
|
+
className="flex-grow p-2 ml-2 w-3/4 text-surface-900 dark:text-white min-h-[56px] flex items-center">
|
|
71
71
|
<PropertyPreview
|
|
72
72
|
propertyKey={key}
|
|
73
73
|
value={value}
|
|
@@ -17,7 +17,7 @@ export interface ErrorViewProps {
|
|
|
17
17
|
* @param title
|
|
18
18
|
* @param error
|
|
19
19
|
* @param tooltip
|
|
20
|
-
|
|
20
|
+
|
|
21
21
|
* @group Components
|
|
22
22
|
*/
|
|
23
23
|
export function ErrorView({
|
|
@@ -31,8 +31,8 @@ export function ErrorView({
|
|
|
31
31
|
const body = (
|
|
32
32
|
<div
|
|
33
33
|
className="flex items-center m-2">
|
|
34
|
-
<ErrorIcon size={"small"} color={"error"}/>
|
|
35
|
-
<div className="pl-
|
|
34
|
+
<ErrorIcon className={"mx-2"} size={"small"} color={"error"}/>
|
|
35
|
+
<div className="pl-4">
|
|
36
36
|
{title && <Typography
|
|
37
37
|
variant={"body2"}
|
|
38
38
|
className="font-medium">{title}</Typography>}
|
|
@@ -1,29 +1,27 @@
|
|
|
1
|
-
import React, { useCallback, useEffect, useState } from "react";
|
|
1
|
+
import React, { useCallback, useEffect, useRef, useState } from "react";
|
|
2
2
|
|
|
3
3
|
import { useCustomizationController, useFireCMSContext, useNavigationController } from "../../hooks";
|
|
4
|
-
import {
|
|
4
|
+
import {
|
|
5
|
+
CMSAnalyticsEvent,
|
|
6
|
+
PluginGenericProps,
|
|
7
|
+
PluginHomePageAdditionalCardsProps,
|
|
8
|
+
TopNavigationEntry
|
|
9
|
+
} from "../../types";
|
|
5
10
|
|
|
6
11
|
import { toArray } from "../../util/arrays";
|
|
7
12
|
import { NavigationGroup } from "./NavigationGroup";
|
|
8
13
|
import { NavigationCardBinding } from "./NavigationCardBinding";
|
|
9
14
|
|
|
10
|
-
|
|
11
|
-
import * as JsSearch from "js-search";
|
|
15
|
+
import Fuse from "fuse.js"
|
|
12
16
|
|
|
13
17
|
import { Container, SearchBar } from "@firecms/ui";
|
|
14
18
|
import { FavouritesView } from "./FavouritesView";
|
|
15
19
|
import { useRestoreScroll } from "../../internal/useRestoreScroll";
|
|
16
20
|
|
|
17
|
-
const search = new JsSearch.Search("url");
|
|
18
|
-
search.addIndex("name");
|
|
19
|
-
search.addIndex("description");
|
|
20
|
-
search.addIndex("group");
|
|
21
|
-
search.addIndex("path");
|
|
22
|
-
|
|
23
21
|
/**
|
|
24
22
|
* Default entry view for the CMS. This component renders navigation cards
|
|
25
23
|
* for each collection defined in the navigation.
|
|
26
|
-
|
|
24
|
+
|
|
27
25
|
* @group Components
|
|
28
26
|
*/
|
|
29
27
|
export function DefaultHomePage({
|
|
@@ -49,6 +47,8 @@ export function DefaultHomePage({
|
|
|
49
47
|
const customizationController = useCustomizationController();
|
|
50
48
|
const navigationController = useNavigationController();
|
|
51
49
|
|
|
50
|
+
const fuse = useRef<Fuse<TopNavigationEntry> | null>(null);
|
|
51
|
+
|
|
52
52
|
if (!navigationController.topLevelNavigation)
|
|
53
53
|
throw Error("Navigation not ready in FireCMSHomePage");
|
|
54
54
|
|
|
@@ -64,13 +64,16 @@ export function DefaultHomePage({
|
|
|
64
64
|
} = navigationController.topLevelNavigation;
|
|
65
65
|
|
|
66
66
|
const [filteredUrls, setFilteredUrls] = useState<string[] | null>(null);
|
|
67
|
+
const performingSearch = Boolean(filteredUrls);
|
|
67
68
|
|
|
68
69
|
const filteredNavigationEntries = filteredUrls
|
|
69
|
-
?
|
|
70
|
+
? filteredUrls.map(url => navigationEntries.find(e => e.url === url)).filter(Boolean) as TopNavigationEntry[]
|
|
70
71
|
: navigationEntries;
|
|
71
72
|
|
|
72
73
|
useEffect(() => {
|
|
73
|
-
|
|
74
|
+
fuse.current = new Fuse(navigationEntries, {
|
|
75
|
+
keys: ["name", "description", "group", "path"]
|
|
76
|
+
});
|
|
74
77
|
}, [navigationEntries]);
|
|
75
78
|
|
|
76
79
|
const updateSearchResults = useCallback(
|
|
@@ -78,12 +81,15 @@ export function DefaultHomePage({
|
|
|
78
81
|
if (!value || value === "") {
|
|
79
82
|
setFilteredUrls(null);
|
|
80
83
|
} else {
|
|
81
|
-
const searchResult =
|
|
82
|
-
|
|
84
|
+
const searchResult = fuse.current?.search(value);
|
|
85
|
+
if (searchResult) {
|
|
86
|
+
setFilteredUrls(searchResult.map((e) => e.item.url));
|
|
87
|
+
}
|
|
83
88
|
}
|
|
84
89
|
}, []);
|
|
85
90
|
|
|
86
|
-
const
|
|
91
|
+
const filteredGroups = filteredUrls ? filteredNavigationEntries.map(entry => entry.group) : [];
|
|
92
|
+
const allGroups: Array<string | undefined> = filteredUrls ? filteredGroups.filter((group, index) => filteredGroups.indexOf(group) === index) : [...groups];
|
|
87
93
|
if (filteredNavigationEntries.filter(e => !e.group).length > 0 || filteredNavigationEntries.length === 0) {
|
|
88
94
|
allGroups.push(undefined);
|
|
89
95
|
}
|
|
@@ -139,7 +145,7 @@ export function DefaultHomePage({
|
|
|
139
145
|
{additionalActions}
|
|
140
146
|
</div>
|
|
141
147
|
|
|
142
|
-
<FavouritesView hidden={
|
|
148
|
+
<FavouritesView hidden={performingSearch}/>
|
|
143
149
|
|
|
144
150
|
{additionalChildrenStart}
|
|
145
151
|
|
|
@@ -163,7 +169,7 @@ export function DefaultHomePage({
|
|
|
163
169
|
|
|
164
170
|
const thisGroupCollections = filteredNavigationEntries
|
|
165
171
|
.filter((entry) => entry.group === group || (!entry.group && group === undefined));
|
|
166
|
-
if (thisGroupCollections.length === 0 && AdditionalCards.length === 0)
|
|
172
|
+
if (thisGroupCollections.length === 0 && (AdditionalCards.length === 0 || performingSearch))
|
|
167
173
|
return null;
|
|
168
174
|
return (
|
|
169
175
|
<NavigationGroup
|
|
@@ -191,7 +197,7 @@ export function DefaultHomePage({
|
|
|
191
197
|
/>
|
|
192
198
|
</div>
|
|
193
199
|
))}
|
|
194
|
-
{AdditionalCards &&
|
|
200
|
+
{group?.toLowerCase() !== "admin" && AdditionalCards &&
|
|
195
201
|
AdditionalCards.map((AdditionalCard, i) => (
|
|
196
202
|
<div key={`nav_${group}_add_${i}`}>
|
|
197
203
|
<AdditionalCard {...actionProps} />
|
|
@@ -38,7 +38,7 @@ function NavigationChip({ entry }: { entry: TopNavigationEntry }) {
|
|
|
38
38
|
: <StarBorderIcon
|
|
39
39
|
onClick={onIconClick}
|
|
40
40
|
size={18}
|
|
41
|
-
className={"text-
|
|
41
|
+
className={"text-surface-400 dark:text-surface-500"}/>}>
|
|
42
42
|
{entry.name}
|
|
43
43
|
</Chip>;
|
|
44
44
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ArrowForwardIcon, Card,
|
|
1
|
+
import { ArrowForwardIcon, Card, cls, Markdown, Typography, } from "@firecms/ui";
|
|
2
2
|
|
|
3
3
|
export type NavigationCardProps = {
|
|
4
4
|
name: string,
|
|
@@ -17,7 +17,7 @@ export function NavigationCard({
|
|
|
17
17
|
}: NavigationCardProps) {
|
|
18
18
|
|
|
19
19
|
return (<Card
|
|
20
|
-
className={
|
|
20
|
+
className={cls("h-full p-4 cursor-pointer min-h-[230px]")}
|
|
21
21
|
onClick={() => {
|
|
22
22
|
onClick?.();
|
|
23
23
|
}}>
|
|
@@ -27,7 +27,7 @@ export function NavigationCard({
|
|
|
27
27
|
className="flex-grow w-full">
|
|
28
28
|
|
|
29
29
|
<div
|
|
30
|
-
className="h-10 flex items-center w-full justify-between text-
|
|
30
|
+
className="h-10 flex items-center w-full justify-between text-surface-300 dark:text-surface-600">
|
|
31
31
|
|
|
32
32
|
{icon}
|
|
33
33
|
|
|
@@ -52,7 +52,7 @@ export function NavigationCard({
|
|
|
52
52
|
{description && <Typography variant="body2"
|
|
53
53
|
color="secondary"
|
|
54
54
|
component="div">
|
|
55
|
-
<Markdown source={description}/>
|
|
55
|
+
<Markdown source={description} size={"small"}/>
|
|
56
56
|
</Typography>}
|
|
57
57
|
</div>
|
|
58
58
|
|
|
@@ -19,7 +19,7 @@ import { SmallNavigationCard } from "./SmallNavigationCard";
|
|
|
19
19
|
* @param name
|
|
20
20
|
* @param description
|
|
21
21
|
* @param onClick
|
|
22
|
-
|
|
22
|
+
|
|
23
23
|
*/
|
|
24
24
|
export function NavigationCardBinding({
|
|
25
25
|
path,
|
|
@@ -67,7 +67,7 @@ export function NavigationCardBinding({
|
|
|
67
67
|
className={"text-secondary"}/>
|
|
68
68
|
: <StarBorderIcon
|
|
69
69
|
size={18}
|
|
70
|
-
className={"text-
|
|
70
|
+
className={"text-surface-400 dark:text-surface-500"}/>}
|
|
71
71
|
</IconButton>
|
|
72
72
|
]
|
|
73
73
|
: [];
|
|
@@ -12,8 +12,8 @@ export function NavigationGroup({
|
|
|
12
12
|
return (
|
|
13
13
|
<ExpandablePanel
|
|
14
14
|
invisible={true}
|
|
15
|
-
titleClassName={"font-medium text-sm text-
|
|
16
|
-
|
|
15
|
+
titleClassName={"font-medium text-sm text-surface-600 dark:text-surface-400"}
|
|
16
|
+
innerClassName={"py-4"}
|
|
17
17
|
initiallyExpanded={!(userConfigurationPersistence?.collapsedGroups ?? []).includes(group ?? "ungrouped")}
|
|
18
18
|
onExpandedChange={expanded => {
|
|
19
19
|
if (userConfigurationPersistence) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { ArrowForwardIcon, cardClickableMixin, cardMixin,
|
|
1
|
+
import { ArrowForwardIcon, cardClickableMixin, cardMixin, cls, Typography, } from "@firecms/ui";
|
|
2
2
|
|
|
3
|
-
import { Link
|
|
3
|
+
import { Link } from "react-router-dom";
|
|
4
4
|
|
|
5
5
|
export type SmallNavigationCardProps = {
|
|
6
6
|
name: string,
|
|
@@ -17,11 +17,10 @@ export function SmallNavigationCard({
|
|
|
17
17
|
return (
|
|
18
18
|
<>
|
|
19
19
|
|
|
20
|
-
<
|
|
20
|
+
<Link
|
|
21
21
|
tabIndex={0}
|
|
22
|
-
className={
|
|
22
|
+
className={cls(cardMixin,
|
|
23
23
|
cardClickableMixin,
|
|
24
|
-
focusedMixin,
|
|
25
24
|
"cursor-pointer flex flex-row items-center px-4 py-2 text-inherit dark:text-inherit visited:text-inherit visited:dark:text-inherit hover:text-inherit hover:dark:text-inherit ")}
|
|
26
25
|
to={url}
|
|
27
26
|
>
|
|
@@ -39,7 +38,7 @@ export function SmallNavigationCard({
|
|
|
39
38
|
<div className={"p-4"}>
|
|
40
39
|
<ArrowForwardIcon color="primary"/>
|
|
41
40
|
</div>
|
|
42
|
-
</
|
|
41
|
+
</Link>
|
|
43
42
|
|
|
44
43
|
</>);
|
|
45
44
|
}
|
|
@@ -2,15 +2,21 @@ import { getIconForWidget } from "../util";
|
|
|
2
2
|
import { PropertyConfig } from "../types";
|
|
3
3
|
import { getDefaultFieldConfig } from "../core";
|
|
4
4
|
|
|
5
|
-
export function PropertyConfigBadge({
|
|
6
|
-
|
|
5
|
+
export function PropertyConfigBadge({
|
|
6
|
+
propertyConfig,
|
|
7
|
+
disabled
|
|
8
|
+
}: {
|
|
9
|
+
propertyConfig: PropertyConfig | undefined,
|
|
10
|
+
disabled?: boolean
|
|
11
|
+
}): React.ReactNode {
|
|
12
|
+
const classes = "h-8 w-8 p-1 rounded-full shadow text-white " + (disabled ? "bg-surface-400 dark:bg-surface-600" : "");
|
|
7
13
|
|
|
8
14
|
const defaultPropertyConfig = typeof propertyConfig?.property === "object" ? getDefaultFieldConfig(propertyConfig.property) : undefined;
|
|
9
15
|
|
|
10
16
|
return <div
|
|
11
17
|
className={classes}
|
|
12
18
|
style={{
|
|
13
|
-
background: propertyConfig?.color ?? defaultPropertyConfig?.color ?? "#888"
|
|
19
|
+
background: !disabled ? (propertyConfig?.color ?? defaultPropertyConfig?.color ?? "#888") : undefined
|
|
14
20
|
}}>
|
|
15
21
|
{propertyConfig?.Icon ? getIconForWidget(propertyConfig, "medium") : getIconForWidget(defaultPropertyConfig, "medium")}
|
|
16
22
|
</div>
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { ContentCopyIcon, IconButton, Tooltip, Typography } from "@firecms/ui";
|
|
2
|
+
import { useCallback, useState } from "react";
|
|
3
|
+
|
|
4
|
+
export function PropertyIdCopyTooltip({
|
|
5
|
+
propertyKey,
|
|
6
|
+
className,
|
|
7
|
+
children
|
|
8
|
+
}: {
|
|
9
|
+
propertyKey: string,
|
|
10
|
+
className?: string,
|
|
11
|
+
children: React.ReactNode
|
|
12
|
+
}) {
|
|
13
|
+
return <Tooltip title={<PropertyIdCopyTooltipContent propertyKey={propertyKey}/>}
|
|
14
|
+
delayDuration={800}
|
|
15
|
+
side={"top"}
|
|
16
|
+
asChild={false}
|
|
17
|
+
align={"start"}
|
|
18
|
+
sideOffset={8}
|
|
19
|
+
className={className}>
|
|
20
|
+
{children}
|
|
21
|
+
</Tooltip>
|
|
22
|
+
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export function PropertyIdCopyTooltipContent({ propertyKey }: { propertyKey: string }) {
|
|
26
|
+
|
|
27
|
+
const [copied, setCopied] = useState(false);
|
|
28
|
+
|
|
29
|
+
return (
|
|
30
|
+
<div className={"flex flex-row gap-2 items-center justify-center text-white"}>
|
|
31
|
+
<div>
|
|
32
|
+
<Typography variant={"caption"} className={"min-w-20 text-surface-accent-400"}
|
|
33
|
+
color={"disabled"}>{copied ? "Copied" : "Property ID"}</Typography>
|
|
34
|
+
<Typography variant={"caption"} className={"text-white"}><code>{propertyKey}</code></Typography>
|
|
35
|
+
</div>
|
|
36
|
+
<IconButton size={"small"}>
|
|
37
|
+
<ContentCopyIcon size={"smallest"}
|
|
38
|
+
className={"text-white"}
|
|
39
|
+
onClick={useCallback(() => {
|
|
40
|
+
navigator.clipboard.writeText(propertyKey);
|
|
41
|
+
setCopied(true);
|
|
42
|
+
setTimeout(() => setCopied(false), 2000);
|
|
43
|
+
}, [propertyKey])}
|
|
44
|
+
/>
|
|
45
|
+
</IconButton>
|
|
46
|
+
</div>
|
|
47
|
+
);
|
|
48
|
+
}
|
|
@@ -16,7 +16,7 @@ import {
|
|
|
16
16
|
} from "../../hooks";
|
|
17
17
|
import { ErrorView } from "../ErrorView";
|
|
18
18
|
import { AddIcon, Button, DialogActions, Typography } from "@firecms/ui";
|
|
19
|
-
import { canCreateEntity,
|
|
19
|
+
import { canCreateEntity, IconForView, resolveCollection } from "../../util";
|
|
20
20
|
import { useSelectionController } from "../EntityCollectionView/useSelectionController";
|
|
21
21
|
import { useColumnIds, useTableSearchHelper } from "../common";
|
|
22
22
|
import { useSideDialogContext } from "../../core";
|
|
@@ -247,18 +247,15 @@ export function ReferenceSelectionTable<M extends Record<string, any>>(
|
|
|
247
247
|
error={"Could not find collection with id " + collection}/>
|
|
248
248
|
}
|
|
249
249
|
|
|
250
|
-
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
251
250
|
const resolvedCollection = useMemo(() => resolveCollection({
|
|
252
251
|
collection: collection,
|
|
253
252
|
path: fullPath,
|
|
254
253
|
values: {},
|
|
255
|
-
|
|
254
|
+
propertyConfigs: customizationController.propertyConfigs
|
|
256
255
|
}), [collection, customizationController.propertyConfigs, fullPath]);
|
|
257
256
|
|
|
258
|
-
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
259
257
|
const displayedColumnIds = useColumnIds(resolvedCollection, false);
|
|
260
258
|
|
|
261
|
-
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
262
259
|
const tableController = useDataSourceEntityCollectionTableController<M>({
|
|
263
260
|
fullPath,
|
|
264
261
|
collection,
|
|
@@ -272,7 +269,6 @@ export function ReferenceSelectionTable<M extends Record<string, any>>(
|
|
|
272
269
|
onTextSearchClick,
|
|
273
270
|
textSearchEnabled
|
|
274
271
|
} =
|
|
275
|
-
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
276
272
|
useTableSearchHelper({
|
|
277
273
|
collection,
|
|
278
274
|
fullPath,
|
|
@@ -291,8 +287,13 @@ export function ReferenceSelectionTable<M extends Record<string, any>>(
|
|
|
291
287
|
displayedColumnIds={displayedColumnIds}
|
|
292
288
|
onEntityClick={onEntityClick}
|
|
293
289
|
tableController={tableController}
|
|
290
|
+
enablePopupIcon={false}
|
|
294
291
|
tableRowActionsBuilder={tableRowActionsBuilder}
|
|
295
|
-
title={<Typography variant={"subtitle2"}>
|
|
292
|
+
title={<Typography variant={"subtitle2"} className={"flex flex-row gap-2"}>
|
|
293
|
+
<IconForView
|
|
294
|
+
size={"small"}
|
|
295
|
+
collectionOrView={collection}
|
|
296
|
+
className={"text-surface-300 dark:text-surface-600"}/>
|
|
296
297
|
{collection.singularName ? `Select ${collection.singularName}` : `Select from ${collection.name}`}
|
|
297
298
|
</Typography>}
|
|
298
299
|
defaultSize={collection.defaultSize}
|