@firecms/core 3.0.0-canary.16 → 3.0.0-canary.161
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/SwitchFieldBinding.d.ts +1 -2
- 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 +20199 -14111
- package/dist/index.es.js.map +1 -1
- package/dist/index.umd.js +22769 -588
- 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/preview/util.d.ts +3 -3
- package/dist/types/auth.d.ts +8 -10
- 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 -98
- 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 +59 -44
- 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} +3 -3
- package/src/components/DeleteEntityDialog.tsx +9 -18
- package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +13 -20
- package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +28 -25
- 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 +19 -17
- package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +30 -35
- 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 -77
- 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 +60 -51
- package/src/components/EntityView.tsx +10 -10
- package/src/components/ErrorView.tsx +4 -4
- package/src/components/HomePage/DefaultHomePage.tsx +26 -19
- package/src/components/HomePage/FavouritesView.tsx +6 -11
- package/src/components/HomePage/NavigationCard.tsx +4 -4
- 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/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 +25 -8
- package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +30 -6
- package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +92 -23
- 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 +5 -5
- 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 +16 -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/contexts/SnackbarProvider.tsx +2 -0
- package/src/core/DefaultAppBar.tsx +178 -0
- package/src/core/DefaultDrawer.tsx +184 -0
- package/src/core/DrawerNavigationItem.tsx +66 -0
- package/src/core/EntityEditView.tsx +721 -156
- package/src/core/EntitySidePanel.tsx +1 -2
- package/src/core/FireCMS.tsx +57 -53
- package/src/core/NavigationRoutes.tsx +7 -8
- package/src/core/SideDialogs.tsx +2 -1
- package/src/core/field_configs.tsx +11 -12
- package/src/core/index.tsx +3 -4
- package/src/form/PropertyFieldBinding.tsx +74 -35
- package/src/form/components/CustomIdField.tsx +6 -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 +53 -33
- package/src/form/field_bindings/DateTimeFieldBinding.tsx +17 -14
- package/src/form/field_bindings/KeyValueFieldBinding.tsx +60 -51
- package/src/form/field_bindings/MapFieldBinding.tsx +67 -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 +22 -14
- package/src/form/field_bindings/StorageUploadFieldBinding.tsx +37 -47
- package/src/form/field_bindings/SwitchFieldBinding.tsx +28 -24
- package/src/form/field_bindings/TextFieldBinding.tsx +27 -24
- 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 +93 -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 +5 -3
- 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 -36
- 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 +9 -9
- package/src/preview/property_previews/SkeletonPropertyComponent.tsx +12 -12
- package/src/preview/property_previews/StringPropertyPreview.tsx +3 -3
- package/src/preview/util.ts +10 -10
- package/src/types/auth.tsx +9 -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 +16 -10
- package/src/util/icon_synonyms.ts +3 -100
- 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 +11 -2
- 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 +34 -8
- 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,39 +62,43 @@ 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
|
-
const listProperties = useMemo(() => getEntityPreviewKeys(resolvedCollection, customizationController.propertyConfigs, previewProperties, size === "
|
|
68
|
+
const listProperties = useMemo(() => getEntityPreviewKeys(resolvedCollection, customizationController.propertyConfigs, previewProperties, size === "medium" || size === "large" ? 3 : 1),
|
|
66
69
|
[previewProperties, resolvedCollection, size]);
|
|
67
70
|
|
|
68
71
|
const titleProperty = getEntityTitlePropertyKey(resolvedCollection, customizationController.propertyConfigs);
|
|
69
72
|
const imagePropertyKey = getEntityImagePreviewPropertyKey(resolvedCollection);
|
|
70
73
|
const imageProperty = imagePropertyKey ? resolvedCollection.properties[imagePropertyKey] : undefined;
|
|
71
|
-
|
|
74
|
+
const usedImageProperty = "of" in imageProperty ? imageProperty.of : imageProperty;
|
|
72
75
|
const restProperties = listProperties.filter(p => p !== titleProperty && p !== imagePropertyKey);
|
|
73
76
|
|
|
77
|
+
const imageValue = getValueInPath(entity.values, imagePropertyKey as string);
|
|
78
|
+
const usedImageValue = "of" in imageProperty ? ((imageValue ?? []).length > 0 ? imageValue[0] : undefined) : imageValue;
|
|
79
|
+
|
|
74
80
|
return <EntityPreviewContainer onClick={disabled ? undefined : onClick}
|
|
75
81
|
hover={disabled ? undefined : hover}
|
|
76
82
|
size={size}>
|
|
77
|
-
{
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
83
|
+
<div className={cls("flex w-10 h-10 ml-1 mr-2 shrink-0", size === "small" ? "my-0.5" : "m-2 self-start")}>
|
|
84
|
+
{usedImageProperty && usedImageValue && <PropertyPreview property={usedImageProperty}
|
|
85
|
+
propertyKey={imagePropertyKey as string}
|
|
86
|
+
size={"small"}
|
|
87
|
+
value={usedImageValue}/>}
|
|
88
|
+
{(!usedImageProperty || !usedImageValue) && <IconForView collectionOrView={collection}
|
|
89
|
+
color={"primary"}
|
|
90
|
+
size={size}
|
|
91
|
+
className={"m-auto p-1"}/>}
|
|
92
|
+
</div>
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
<div className={"flex flex-col grow-1 w-full m-1 shrink-1"} style={{
|
|
96
|
+
"maxWidth": "calc(100% - 96px)"
|
|
97
|
+
}}>
|
|
98
|
+
|
|
99
|
+
{size !== "small" && includeId && (
|
|
89
100
|
entity
|
|
90
|
-
? <div className={
|
|
91
|
-
size !== "medium"
|
|
92
|
-
? "block whitespace-nowrap overflow-hidden truncate"
|
|
93
|
-
: ""
|
|
94
|
-
}`}>
|
|
101
|
+
? <div className={"block whitespace-nowrap overflow-hidden truncate"}>
|
|
95
102
|
<Typography variant={"caption"}
|
|
96
103
|
color={"disabled"}
|
|
97
104
|
className={"font-mono"}>
|
|
@@ -108,10 +115,10 @@ export function EntityPreview({
|
|
|
108
115
|
propertyKey={titleProperty as string}
|
|
109
116
|
value={getValueInPath(entity.values, titleProperty)}
|
|
110
117
|
property={resolvedCollection.properties[titleProperty as string] as ResolvedProperty}
|
|
111
|
-
size={"
|
|
118
|
+
size={"large"}/>
|
|
112
119
|
: <SkeletonPropertyComponent
|
|
113
120
|
property={resolvedCollection.properties[titleProperty as string] as ResolvedProperty}
|
|
114
|
-
size={"
|
|
121
|
+
size={"large"}/>
|
|
115
122
|
}
|
|
116
123
|
</div>
|
|
117
124
|
)}
|
|
@@ -129,10 +136,10 @@ export function EntityPreview({
|
|
|
129
136
|
propertyKey={key as string}
|
|
130
137
|
value={getValueInPath(entity.values, key)}
|
|
131
138
|
property={childProperty as ResolvedProperty}
|
|
132
|
-
size={"
|
|
139
|
+
size={"small"}/>
|
|
133
140
|
: <SkeletonPropertyComponent
|
|
134
141
|
property={childProperty as ResolvedProperty}
|
|
135
|
-
size={"
|
|
142
|
+
size={"small"}/>
|
|
136
143
|
}
|
|
137
144
|
</div>
|
|
138
145
|
);
|
|
@@ -140,12 +147,12 @@ export function EntityPreview({
|
|
|
140
147
|
|
|
141
148
|
</div>
|
|
142
149
|
|
|
143
|
-
{entity &&
|
|
144
|
-
<Tooltip title={`See details for ${entity.id}`}
|
|
145
|
-
className={size !== "tiny" ? "self-start" : ""}>
|
|
150
|
+
{entity && includeEntityLink &&
|
|
151
|
+
<Tooltip title={`See details for ${entity.id}`} className={"shrink-0"}>
|
|
146
152
|
<IconButton
|
|
147
153
|
color={"inherit"}
|
|
148
|
-
size={"
|
|
154
|
+
size={"medium"}
|
|
155
|
+
className={size !== "small" ? "self-start" : ""}
|
|
149
156
|
onClick={(e) => {
|
|
150
157
|
e.stopPropagation();
|
|
151
158
|
analyticsController.onAnalyticsEvent?.("entity_click_from_reference", {
|
|
@@ -159,7 +166,7 @@ export function EntityPreview({
|
|
|
159
166
|
updateUrl: true
|
|
160
167
|
});
|
|
161
168
|
}}>
|
|
162
|
-
<KeyboardTabIcon size={"
|
|
169
|
+
<KeyboardTabIcon size={"medium"}/>
|
|
163
170
|
</IconButton>
|
|
164
171
|
</Tooltip>}
|
|
165
172
|
|
|
@@ -168,24 +175,26 @@ export function EntityPreview({
|
|
|
168
175
|
</EntityPreviewContainer>;
|
|
169
176
|
}
|
|
170
177
|
|
|
171
|
-
type EntityPreviewContainerProps = {
|
|
178
|
+
export type EntityPreviewContainerProps = {
|
|
172
179
|
children: React.ReactNode;
|
|
173
180
|
hover?: boolean;
|
|
181
|
+
fullwidth?: boolean;
|
|
174
182
|
size: PreviewSize;
|
|
175
183
|
className?: string;
|
|
176
184
|
style?: React.CSSProperties;
|
|
177
185
|
onClick?: (e: React.SyntheticEvent) => void;
|
|
178
186
|
};
|
|
179
187
|
|
|
180
|
-
const
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
188
|
+
export const EntityPreviewContainer = React.forwardRef<HTMLDivElement, EntityPreviewContainerProps>(({
|
|
189
|
+
children,
|
|
190
|
+
hover,
|
|
191
|
+
onClick,
|
|
192
|
+
size,
|
|
193
|
+
style,
|
|
194
|
+
className,
|
|
195
|
+
fullwidth = true,
|
|
196
|
+
...props
|
|
197
|
+
}, ref) => {
|
|
189
198
|
return <div
|
|
190
199
|
ref={ref}
|
|
191
200
|
style={{
|
|
@@ -193,11 +202,13 @@ const EntityPreviewContainerInner = React.forwardRef<HTMLDivElement, EntityPrevi
|
|
|
193
202
|
// @ts-ignore
|
|
194
203
|
tabindex: 0
|
|
195
204
|
}}
|
|
196
|
-
className={
|
|
197
|
-
"bg-white dark:bg-
|
|
205
|
+
className={cls(
|
|
206
|
+
"bg-white dark:bg-surface-900",
|
|
207
|
+
"min-h-[42px]",
|
|
208
|
+
fullwidth ? "w-full" : "",
|
|
198
209
|
"items-center",
|
|
199
|
-
hover ? "hover:bg-
|
|
200
|
-
size === "
|
|
210
|
+
hover ? "hover:bg-surface-accent-50 dark:hover:bg-surface-800 group-hover:bg-surface-accent-50 dark:group-hover:bg-surface-800" : "",
|
|
211
|
+
size === "small" ? "p-1" : "px-2 py-1",
|
|
201
212
|
"flex border rounded-lg",
|
|
202
213
|
onClick ? "cursor-pointer" : "",
|
|
203
214
|
defaultBorderMixin,
|
|
@@ -213,6 +224,4 @@ const EntityPreviewContainerInner = React.forwardRef<HTMLDivElement, EntityPrevi
|
|
|
213
224
|
</div>;
|
|
214
225
|
});
|
|
215
226
|
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
export const EntityPreviewContainer = React.memo(EntityPreviewContainerInner) as React.FC<EntityPreviewContainerProps>;
|
|
227
|
+
EntityPreviewContainer.displayName = "EntityPreviewContainer";
|
|
@@ -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({
|
|
@@ -26,13 +26,13 @@ export function ErrorView({
|
|
|
26
26
|
tooltip
|
|
27
27
|
}: ErrorViewProps): React.ReactElement {
|
|
28
28
|
const component = error instanceof Error ? error.message : error;
|
|
29
|
-
console.
|
|
29
|
+
console.warn("ErrorView", error)
|
|
30
30
|
|
|
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
|
}
|
|
@@ -134,12 +140,13 @@ export function DefaultHomePage({
|
|
|
134
140
|
<SearchBar onTextSearch={updateSearchResults}
|
|
135
141
|
placeholder={"Search collections"}
|
|
136
142
|
large={false}
|
|
143
|
+
autoFocus={true}
|
|
137
144
|
innerClassName={"w-full"}
|
|
138
145
|
className={"w-full flex-grow"}/>
|
|
139
146
|
{additionalActions}
|
|
140
147
|
</div>
|
|
141
148
|
|
|
142
|
-
<FavouritesView hidden={
|
|
149
|
+
<FavouritesView hidden={performingSearch}/>
|
|
143
150
|
|
|
144
151
|
{additionalChildrenStart}
|
|
145
152
|
|
|
@@ -163,7 +170,7 @@ export function DefaultHomePage({
|
|
|
163
170
|
|
|
164
171
|
const thisGroupCollections = filteredNavigationEntries
|
|
165
172
|
.filter((entry) => entry.group === group || (!entry.group && group === undefined));
|
|
166
|
-
if (thisGroupCollections.length === 0 && AdditionalCards.length === 0)
|
|
173
|
+
if (thisGroupCollections.length === 0 && (AdditionalCards.length === 0 || performingSearch))
|
|
167
174
|
return null;
|
|
168
175
|
return (
|
|
169
176
|
<NavigationGroup
|
|
@@ -191,7 +198,7 @@ export function DefaultHomePage({
|
|
|
191
198
|
/>
|
|
192
199
|
</div>
|
|
193
200
|
))}
|
|
194
|
-
{AdditionalCards &&
|
|
201
|
+
{group?.toLowerCase() !== "admin" && AdditionalCards &&
|
|
195
202
|
AdditionalCards.map((AdditionalCard, i) => (
|
|
196
203
|
<div key={`nav_${group}_add_${i}`}>
|
|
197
204
|
<AdditionalCard {...actionProps} />
|
|
@@ -2,7 +2,7 @@ import { useNavigate } from "react-router-dom";
|
|
|
2
2
|
import { useNavigationController } from "../../hooks";
|
|
3
3
|
import { useUserConfigurationPersistence } from "../../hooks/useUserConfigurationPersistence";
|
|
4
4
|
import { TopNavigationEntry } from "../../types";
|
|
5
|
-
import { Chip, Collapse,
|
|
5
|
+
import { Chip, Collapse, StarIcon } from "@firecms/ui";
|
|
6
6
|
|
|
7
7
|
function NavigationChip({ entry }: { entry: TopNavigationEntry }) {
|
|
8
8
|
|
|
@@ -29,16 +29,11 @@ function NavigationChip({ entry }: { entry: TopNavigationEntry }) {
|
|
|
29
29
|
return <Chip
|
|
30
30
|
key={entry.path}
|
|
31
31
|
onClick={() => navigate(entry.url)}
|
|
32
|
-
icon={
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
className={"text-secondary"}/>
|
|
38
|
-
: <StarBorderIcon
|
|
39
|
-
onClick={onIconClick}
|
|
40
|
-
size={18}
|
|
41
|
-
className={"text-gray-400 dark:text-gray-500"}/>}>
|
|
32
|
+
icon={<StarIcon
|
|
33
|
+
onClick={onIconClick}
|
|
34
|
+
size={18}
|
|
35
|
+
className={favourite ? "text-secondary" : "text-surface-400 dark:text-surface-500"}/>
|
|
36
|
+
}>
|
|
42
37
|
{entry.name}
|
|
43
38
|
</Chip>;
|
|
44
39
|
}
|
|
@@ -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
|
|
|
@@ -4,7 +4,7 @@ import { useCustomizationController, useFireCMSContext } from "../../hooks";
|
|
|
4
4
|
import { PluginHomePageActionsProps, TopNavigationEntry } from "../../types";
|
|
5
5
|
import { IconForView } from "../../util";
|
|
6
6
|
import { useUserConfigurationPersistence } from "../../hooks/useUserConfigurationPersistence";
|
|
7
|
-
import { IconButton,
|
|
7
|
+
import { IconButton, StarIcon } from "@firecms/ui";
|
|
8
8
|
import { NavigationCard } from "./NavigationCard";
|
|
9
9
|
import { SmallNavigationCard } from "./SmallNavigationCard";
|
|
10
10
|
|
|
@@ -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,
|
|
@@ -60,14 +60,9 @@ export function NavigationCardBinding({
|
|
|
60
60
|
);
|
|
61
61
|
}
|
|
62
62
|
}}>
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
size={18}
|
|
67
|
-
className={"text-secondary"}/>
|
|
68
|
-
: <StarBorderIcon
|
|
69
|
-
size={18}
|
|
70
|
-
className={"text-gray-400 dark:text-gray-500"}/>}
|
|
63
|
+
<StarIcon
|
|
64
|
+
size={18}
|
|
65
|
+
className={favourite ? "text-secondary" : "text-surface-400 dark:text-surface-500"}/>
|
|
71
66
|
</IconButton>
|
|
72
67
|
]
|
|
73
68
|
: [];
|
|
@@ -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
|
+
}
|