@firecms/core 3.0.0-canary.9 → 3.0.0-canary.90
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 +1 -1
- package/dist/app/AppBar.d.ts +12 -0
- package/dist/app/Drawer.d.ts +17 -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/CircularProgressCenter.d.ts +1 -1
- package/dist/components/ClearFilterSortButton.d.ts +5 -0
- 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 +5 -3
- 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 +2 -0
- 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 +1 -1
- package/dist/components/EntityCollectionView/EntityCollectionView.d.ts +12 -2
- package/dist/components/EntityCollectionView/EntityCollectionViewStartActions.d.ts +11 -0
- package/dist/components/EntityPreview.d.ts +5 -4
- package/dist/components/ErrorView.d.ts +1 -1
- package/dist/components/HomePage/DefaultHomePage.d.ts +1 -1
- package/dist/components/HomePage/NavigationCardBinding.d.ts +1 -1
- package/dist/components/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/useDataSourceEntityCollectionTableController.d.ts +3 -0
- package/dist/components/index.d.ts +2 -1
- package/dist/contexts/AuthControllerContext.d.ts +1 -1
- 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 +9 -0
- package/dist/core/EntityEditView.d.ts +17 -3
- package/dist/core/FireCMS.d.ts +1 -1
- package/dist/core/NavigationRoutes.d.ts +3 -3
- package/dist/core/index.d.ts +3 -4
- package/dist/form/PropertiesForm.d.ts +8 -0
- package/dist/form/components/ErrorFocus.d.ts +1 -1
- package/dist/form/components/FieldHelperText.d.ts +3 -3
- package/dist/form/components/StorageItemPreview.d.ts +4 -4
- package/dist/form/field_bindings/MapFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +2 -4
- package/dist/form/index.d.ts +0 -2
- package/dist/hooks/data/delete.d.ts +2 -2
- package/dist/hooks/data/save.d.ts +2 -3
- package/dist/hooks/data/useDataSource.d.ts +1 -1
- package/dist/hooks/data/useEntityFetch.d.ts +3 -3
- package/dist/hooks/index.d.ts +2 -0
- package/dist/hooks/useBuildNavigationController.d.ts +1 -2
- package/dist/hooks/useProjectLog.d.ts +2 -2
- package/dist/hooks/useValidateAuthenticator.d.ts +21 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.es.js +15552 -11933
- package/dist/index.es.js.map +1 -1
- package/dist/index.umd.js +19643 -7
- package/dist/index.umd.js.map +1 -1
- package/dist/internal/useBuildDataSource.d.ts +1 -16
- package/dist/internal/useRestoreScroll.d.ts +1 -1
- package/dist/preview/PropertyPreviewProps.d.ts +6 -4
- package/dist/preview/components/ReferencePreview.d.ts +2 -1
- package/dist/preview/components/StorageThumbnail.d.ts +2 -1
- package/dist/preview/components/UrlComponentPreview.d.ts +2 -1
- package/dist/types/auth.d.ts +26 -2
- package/dist/types/collections.d.ts +31 -7
- package/dist/types/datasource.d.ts +34 -20
- package/dist/types/entities.d.ts +5 -1
- package/dist/types/entity_actions.d.ts +14 -0
- package/dist/types/entity_callbacks.d.ts +2 -2
- package/dist/types/fields.d.ts +31 -30
- package/dist/types/index.d.ts +0 -1
- package/dist/types/navigation.d.ts +5 -5
- package/dist/types/plugins.d.ts +16 -6
- package/dist/types/properties.d.ts +17 -4
- package/dist/types/storage.d.ts +11 -3
- package/dist/util/collections.d.ts +1 -1
- package/dist/util/entities.d.ts +1 -1
- package/dist/util/icon_synonyms.d.ts +1 -97
- package/dist/util/icons.d.ts +2 -2
- package/dist/util/navigation_utils.d.ts +2 -2
- package/dist/util/objects.d.ts +1 -1
- package/dist/util/plurals.d.ts +0 -2
- package/dist/util/resolutions.d.ts +13 -13
- package/dist/util/storage.d.ts +23 -2
- package/dist/util/useStorageUploadController.d.ts +1 -1
- package/dist/util/useTraceUpdate.d.ts +1 -0
- package/package.json +130 -119
- package/src/app/AppBar.tsx +18 -0
- package/src/app/Drawer.tsx +25 -0
- package/src/app/Scaffold.tsx +249 -0
- package/src/app/index.ts +4 -0
- package/src/app/useApp.tsx +32 -0
- package/src/components/CircularProgressCenter.tsx +1 -1
- package/src/components/ClearFilterSortButton.tsx +41 -0
- package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +9 -18
- package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +21 -20
- package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +10 -6
- package/src/components/EntityCollectionTable/PropertyTableCell.tsx +38 -34
- package/src/components/EntityCollectionTable/column_utils.tsx +3 -3
- package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +11 -2
- package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +14 -6
- package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +29 -34
- package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +16 -12
- package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +4 -5
- package/src/components/EntityCollectionView/EntityCollectionView.tsx +69 -45
- package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +68 -0
- package/src/components/EntityCollectionView/useSelectionController.tsx +19 -7
- package/src/components/EntityPreview.tsx +15 -9
- package/src/components/EntityView.tsx +5 -5
- package/src/components/ErrorView.tsx +1 -1
- package/src/components/HomePage/DefaultHomePage.tsx +3 -3
- package/src/components/HomePage/NavigationCard.tsx +3 -3
- package/src/components/HomePage/NavigationCardBinding.tsx +1 -1
- package/src/components/HomePage/SmallNavigationCard.tsx +5 -5
- package/src/components/PropertyIdCopyTooltipContent.tsx +2 -3
- package/src/components/ReferenceTable/ReferenceSelectionTable.tsx +1 -0
- package/src/components/ReferenceWidget.tsx +22 -12
- package/src/components/SearchIconsView.tsx +5 -5
- package/src/components/SelectableTable/SelectableTable.tsx +7 -7
- 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 +35 -15
- package/src/components/VirtualTable/VirtualTable.tsx +70 -37
- package/src/components/VirtualTable/VirtualTableCell.tsx +1 -1
- package/src/components/VirtualTable/VirtualTableHeader.tsx +4 -4
- package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +2 -2
- package/src/components/VirtualTable/VirtualTableProps.tsx +18 -14
- package/src/components/VirtualTable/VirtualTableRow.tsx +4 -5
- package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +1 -1
- package/src/components/VirtualTable/types.tsx +2 -3
- package/src/components/{EntityCollectionTable/internal → common}/default_entity_actions.tsx +2 -2
- 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 +10 -2
- package/src/components/common/useDataSourceEntityCollectionTableController.tsx +11 -0
- package/src/components/common/useTableSearchHelper.ts +52 -12
- package/src/components/index.tsx +2 -1
- package/src/contexts/AuthControllerContext.tsx +1 -1
- package/src/contexts/DialogsProvider.tsx +2 -2
- package/src/{components/FireCMSAppBar.tsx → core/DefaultAppBar.tsx} +52 -37
- package/src/core/DefaultDrawer.tsx +177 -0
- package/src/core/DrawerNavigationItem.tsx +62 -0
- package/src/core/EntityEditView.tsx +676 -133
- package/src/core/EntitySidePanel.tsx +1 -2
- package/src/core/FireCMS.tsx +39 -44
- package/src/core/NavigationRoutes.tsx +7 -8
- package/src/core/field_configs.tsx +2 -3
- package/src/core/index.tsx +3 -4
- package/src/form/PropertiesForm.tsx +81 -0
- package/src/form/PropertyFieldBinding.tsx +29 -7
- package/src/form/components/FieldHelperText.tsx +3 -3
- package/src/form/components/StorageItemPreview.tsx +20 -11
- package/src/form/components/StorageUploadProgress.tsx +3 -3
- package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +8 -5
- package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +8 -5
- package/src/form/field_bindings/BlockFieldBinding.tsx +2 -2
- package/src/form/field_bindings/KeyValueFieldBinding.tsx +44 -39
- package/src/form/field_bindings/MapFieldBinding.tsx +11 -3
- package/src/form/field_bindings/MarkdownFieldBinding.tsx +2 -2
- package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +2 -9
- package/src/form/field_bindings/ReferenceFieldBinding.tsx +15 -13
- package/src/form/field_bindings/RepeatFieldBinding.tsx +10 -7
- package/src/form/field_bindings/SelectFieldBinding.tsx +3 -3
- package/src/form/field_bindings/StorageUploadFieldBinding.tsx +22 -43
- package/src/form/field_bindings/SwitchFieldBinding.tsx +1 -1
- package/src/form/index.tsx +4 -4
- package/src/form/validation.ts +1 -17
- package/src/hooks/data/delete.ts +3 -3
- package/src/hooks/data/save.ts +4 -2
- package/src/hooks/data/useDataSource.tsx +2 -2
- package/src/hooks/data/useEntityFetch.tsx +3 -3
- package/src/hooks/index.tsx +3 -0
- package/src/hooks/useBuildLocalConfigurationPersistence.tsx +8 -10
- package/src/hooks/useBuildModeController.tsx +11 -5
- package/src/hooks/useBuildNavigationController.tsx +137 -61
- package/src/hooks/useProjectLog.tsx +21 -8
- package/src/hooks/useResolvedNavigationFrom.tsx +1 -1
- package/src/hooks/useValidateAuthenticator.tsx +115 -0
- package/src/index.ts +1 -0
- package/src/internal/useBuildDataSource.ts +56 -49
- package/src/internal/useBuildSideEntityController.tsx +88 -21
- package/src/preview/PropertyPreview.tsx +9 -16
- package/src/preview/PropertyPreviewProps.tsx +4 -8
- package/src/preview/components/BooleanPreview.tsx +4 -2
- package/src/preview/components/EnumValuesChip.tsx +1 -1
- package/src/preview/components/ImagePreview.tsx +21 -33
- package/src/preview/components/ReferencePreview.tsx +23 -23
- package/src/preview/components/StorageThumbnail.tsx +5 -1
- package/src/preview/components/UrlComponentPreview.tsx +44 -11
- package/src/preview/property_previews/ArrayOfMapsPreview.tsx +0 -1
- package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +2 -1
- package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +0 -1
- package/src/preview/property_previews/ArrayOfStringsPreview.tsx +0 -1
- package/src/preview/property_previews/ArrayOneOfPreview.tsx +2 -3
- package/src/preview/property_previews/ArrayPropertyPreview.tsx +2 -3
- package/src/preview/property_previews/MapPropertyPreview.tsx +5 -5
- package/src/preview/property_previews/StringPropertyPreview.tsx +2 -2
- package/src/types/auth.tsx +35 -2
- package/src/types/collections.ts +37 -8
- package/src/types/customization_controller.tsx +0 -1
- package/src/types/datasource.ts +41 -24
- package/src/types/entities.ts +9 -1
- package/src/types/entity_actions.tsx +16 -3
- package/src/types/entity_callbacks.ts +2 -2
- package/src/types/fields.tsx +33 -33
- package/src/types/index.ts +0 -1
- package/src/types/navigation.ts +6 -7
- package/src/types/plugins.tsx +18 -8
- package/src/types/properties.ts +22 -6
- package/src/types/storage.ts +12 -3
- package/src/util/collections.ts +1 -1
- package/src/util/entities.ts +5 -4
- package/src/util/enums.ts +1 -1
- package/src/util/icon_list.ts +2 -2
- package/src/util/icon_synonyms.ts +3 -99
- package/src/util/navigation_utils.ts +6 -6
- package/src/util/objects.ts +25 -28
- package/src/util/permissions.ts +1 -0
- package/src/util/plurals.ts +0 -2
- package/src/util/resolutions.ts +32 -31
- package/src/util/storage.ts +75 -21
- package/src/util/strings.ts +2 -2
- package/src/util/useStorageUploadController.tsx +21 -3
- package/src/util/useTraceUpdate.tsx +2 -1
- 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/internal/useBuildCustomizationController.d.ts +0 -2
- package/dist/internal/useLocaleConfig.d.ts +0 -1
- package/dist/types/appcheck.d.ts +0 -26
- 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/internal/useBuildCustomizationController.tsx +0 -5
- package/src/internal/useLocaleConfig.tsx +0 -18
- package/src/types/appcheck.ts +0 -29
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React, { CSSProperties, useMemo
|
|
1
|
+
import React, { CSSProperties, useMemo } from "react";
|
|
2
2
|
|
|
3
3
|
import { getThumbnailMeasure } from "../util";
|
|
4
4
|
import { PreviewSize } from "../PropertyPreviewProps";
|
|
@@ -20,8 +20,6 @@ export function ImagePreview({
|
|
|
20
20
|
url
|
|
21
21
|
}: ImagePreviewProps) {
|
|
22
22
|
|
|
23
|
-
const [onHover, setOnHover] = useState(false);
|
|
24
|
-
|
|
25
23
|
const imageSize = useMemo(() => getThumbnailMeasure(size), [size]);
|
|
26
24
|
|
|
27
25
|
if (size === "tiny") {
|
|
@@ -47,60 +45,50 @@ export function ImagePreview({
|
|
|
47
45
|
|
|
48
46
|
return (
|
|
49
47
|
<div
|
|
50
|
-
className="relative flex items-center justify-center max-w-full max-h-full"
|
|
48
|
+
className="relative flex items-center justify-center max-w-full max-h-full group"
|
|
51
49
|
style={{
|
|
52
50
|
width: imageSize,
|
|
53
51
|
height: imageSize
|
|
54
52
|
}}
|
|
55
|
-
key={"image_preview_" + url}
|
|
56
|
-
onMouseEnter={() => setOnHover(true)}
|
|
57
|
-
onMouseMove={() => setOnHover(true)}
|
|
58
|
-
onMouseLeave={() => setOnHover(false)}>
|
|
53
|
+
key={"image_preview_" + url}>
|
|
59
54
|
|
|
60
55
|
<img src={url}
|
|
61
56
|
className={"rounded-md"}
|
|
62
57
|
style={imageStyle}/>
|
|
63
58
|
|
|
64
|
-
{onHover && <>
|
|
65
59
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
</IconButton>
|
|
80
|
-
</div>
|
|
60
|
+
<div className={"flex flex-row gap-2 absolute bottom-[-4px] right-[-4px] invisible group-hover:visible"}>
|
|
61
|
+
{navigator && <Tooltip title="Copy url to clipboard" side={"bottom"}>
|
|
62
|
+
<IconButton
|
|
63
|
+
variant={"filled"}
|
|
64
|
+
size={"small"}
|
|
65
|
+
onClick={(e) => {
|
|
66
|
+
e.stopPropagation();
|
|
67
|
+
e.preventDefault();
|
|
68
|
+
return navigator.clipboard.writeText(url);
|
|
69
|
+
}}>
|
|
70
|
+
<ContentCopyIcon className={"text-gray-700 dark:text-gray-300"}
|
|
71
|
+
size={"small"}/>
|
|
72
|
+
</IconButton>
|
|
81
73
|
</Tooltip>}
|
|
82
74
|
|
|
83
|
-
<Tooltip title="Open image in new tab">
|
|
75
|
+
<Tooltip title="Open image in new tab" side={"bottom"}>
|
|
84
76
|
<IconButton
|
|
77
|
+
className="invisible group-hover:visible"
|
|
85
78
|
variant={"filled"}
|
|
86
79
|
component={"a" as React.ElementType}
|
|
87
|
-
style={{
|
|
88
|
-
position: "absolute",
|
|
89
|
-
bottom: -4,
|
|
90
|
-
right: -4
|
|
91
|
-
}}
|
|
92
80
|
href={url}
|
|
93
81
|
rel="noopener noreferrer"
|
|
94
82
|
target="_blank"
|
|
95
83
|
size={"small"}
|
|
96
84
|
onClick={(e: any) => e.stopPropagation()}
|
|
97
85
|
>
|
|
98
|
-
<OpenInNewIcon className={"text-gray-
|
|
86
|
+
<OpenInNewIcon className={"text-gray-700 dark:text-gray-300"}
|
|
99
87
|
size={"small"}/>
|
|
100
88
|
</IconButton>
|
|
101
89
|
</Tooltip>
|
|
102
|
-
|
|
103
|
-
|
|
90
|
+
</div>
|
|
91
|
+
|
|
104
92
|
</div>
|
|
105
93
|
);
|
|
106
94
|
}
|
|
@@ -1,16 +1,10 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
|
|
3
3
|
import { Entity, EntityCollection, EntityReference } from "../../types";
|
|
4
|
-
import {
|
|
5
|
-
useCustomizationController,
|
|
6
|
-
useEntityFetch,
|
|
7
|
-
useNavigationController,
|
|
8
|
-
useSideEntityController
|
|
9
|
-
} from "../../hooks";
|
|
4
|
+
import { useCustomizationController, useEntityFetch, useNavigationController } from "../../hooks";
|
|
10
5
|
import { PreviewSize } from "../PropertyPreviewProps";
|
|
11
|
-
import {
|
|
6
|
+
import { Skeleton } from "@firecms/ui";
|
|
12
7
|
import { ErrorView } from "../../components";
|
|
13
|
-
import { useAnalyticsController } from "../../hooks/useAnalyticsController";
|
|
14
8
|
import { EntityPreview, EntityPreviewContainer } from "../../components/EntityPreview";
|
|
15
9
|
|
|
16
10
|
export type ReferencePreviewProps = {
|
|
@@ -20,7 +14,8 @@ export type ReferencePreviewProps = {
|
|
|
20
14
|
previewProperties?: string[];
|
|
21
15
|
onClick?: (e: React.SyntheticEvent) => void;
|
|
22
16
|
hover?: boolean;
|
|
23
|
-
|
|
17
|
+
includeEntityLink?: boolean;
|
|
18
|
+
includeId?: boolean;
|
|
24
19
|
};
|
|
25
20
|
|
|
26
21
|
/**
|
|
@@ -46,25 +41,27 @@ function areEqual(prevProps: ReferencePreviewProps, nextProps: ReferencePreviewP
|
|
|
46
41
|
prevProps.hover === nextProps.hover &&
|
|
47
42
|
prevProps.reference?.id === nextProps.reference?.id &&
|
|
48
43
|
prevProps.reference?.path === nextProps.reference?.path &&
|
|
49
|
-
prevProps.
|
|
44
|
+
prevProps.includeEntityLink === nextProps.includeEntityLink &&
|
|
45
|
+
prevProps.onClick === nextProps.onClick
|
|
50
46
|
;
|
|
51
47
|
}
|
|
52
48
|
|
|
53
|
-
function ReferencePreviewInternal
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
49
|
+
function ReferencePreviewInternal({
|
|
50
|
+
disabled,
|
|
51
|
+
reference,
|
|
52
|
+
previewProperties,
|
|
53
|
+
size,
|
|
54
|
+
hover,
|
|
55
|
+
onClick,
|
|
56
|
+
includeEntityLink = true,
|
|
57
|
+
includeId = true
|
|
58
|
+
}: ReferencePreviewProps) {
|
|
62
59
|
|
|
63
60
|
const customizationController = useCustomizationController();
|
|
64
61
|
|
|
65
62
|
const navigationController = useNavigationController();
|
|
66
63
|
|
|
67
|
-
const collection = navigationController.getCollection
|
|
64
|
+
const collection = navigationController.getCollection(reference.path);
|
|
68
65
|
if (!collection) {
|
|
69
66
|
if (customizationController.components?.missingReference) {
|
|
70
67
|
return <customizationController.components.missingReference path={reference.path}/>;
|
|
@@ -79,7 +76,8 @@ function ReferencePreviewInternal<M extends Record<string, any>>({
|
|
|
79
76
|
previewProperties={previewProperties}
|
|
80
77
|
size={size}
|
|
81
78
|
disabled={disabled}
|
|
82
|
-
|
|
79
|
+
includeEntityLink={includeEntityLink}
|
|
80
|
+
includeId={includeId}
|
|
83
81
|
onClick={onClick}
|
|
84
82
|
hover={hover}/>
|
|
85
83
|
}
|
|
@@ -90,7 +88,8 @@ function ReferencePreviewExisting<M extends Record<string, any> = any>({
|
|
|
90
88
|
previewProperties,
|
|
91
89
|
size,
|
|
92
90
|
disabled,
|
|
93
|
-
|
|
91
|
+
includeEntityLink,
|
|
92
|
+
includeId,
|
|
94
93
|
onClick,
|
|
95
94
|
hover
|
|
96
95
|
}: ReferencePreviewProps & {
|
|
@@ -158,7 +157,8 @@ function ReferencePreviewExisting<M extends Record<string, any> = any>({
|
|
|
158
157
|
entity={usedEntity}
|
|
159
158
|
collection={collection}
|
|
160
159
|
onClick={onClick}
|
|
161
|
-
|
|
160
|
+
includeEntityLink={includeEntityLink}
|
|
161
|
+
includeId={includeId}
|
|
162
162
|
hover={hover}/>;
|
|
163
163
|
|
|
164
164
|
}
|
|
@@ -11,6 +11,7 @@ type StorageThumbnailProps = {
|
|
|
11
11
|
storagePathOrDownloadUrl: string;
|
|
12
12
|
storeUrl: boolean;
|
|
13
13
|
size: PreviewSize;
|
|
14
|
+
interactive?: boolean;
|
|
14
15
|
};
|
|
15
16
|
|
|
16
17
|
/**
|
|
@@ -21,13 +22,15 @@ export const StorageThumbnail = React.memo<StorageThumbnailProps>(StorageThumbna
|
|
|
21
22
|
function areEqual(prevProps: StorageThumbnailProps, nextProps: StorageThumbnailProps) {
|
|
22
23
|
return prevProps.size === nextProps.size &&
|
|
23
24
|
prevProps.storagePathOrDownloadUrl === nextProps.storagePathOrDownloadUrl &&
|
|
24
|
-
prevProps.storeUrl === nextProps.storeUrl
|
|
25
|
+
prevProps.storeUrl === nextProps.storeUrl&&
|
|
26
|
+
prevProps.interactive === nextProps.interactive;
|
|
25
27
|
}
|
|
26
28
|
|
|
27
29
|
const URL_CACHE: Record<string, DownloadConfig> = {};
|
|
28
30
|
|
|
29
31
|
export function StorageThumbnailInternal({
|
|
30
32
|
storeUrl,
|
|
33
|
+
interactive,
|
|
31
34
|
storagePathOrDownloadUrl,
|
|
32
35
|
size
|
|
33
36
|
}: StorageThumbnailProps) {
|
|
@@ -68,6 +71,7 @@ export function StorageThumbnailInternal({
|
|
|
68
71
|
return downloadConfig?.url
|
|
69
72
|
? <UrlComponentPreview previewType={previewType}
|
|
70
73
|
url={downloadConfig.url}
|
|
74
|
+
interactive={interactive}
|
|
71
75
|
size={size}
|
|
72
76
|
hint={storagePathOrDownloadUrl}/>
|
|
73
77
|
: renderSkeletonImageThumbnail(size);
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import React from "react";
|
|
1
|
+
import React, { useMemo } from "react";
|
|
2
2
|
|
|
3
3
|
import { ImagePreview } from "./ImagePreview";
|
|
4
4
|
import { getThumbnailMeasure } from "../util";
|
|
5
5
|
import { PreviewType } from "../../types";
|
|
6
6
|
import { PreviewSize } from "../PropertyPreviewProps";
|
|
7
|
-
import { DescriptionIcon, OpenInNewIcon, Tooltip, Typography } from "@firecms/ui";
|
|
7
|
+
import { cls, DescriptionIcon, OpenInNewIcon, Tooltip, Typography } from "@firecms/ui";
|
|
8
8
|
import { EmptyValue } from "./EmptyValue";
|
|
9
9
|
|
|
10
10
|
/**
|
|
@@ -14,12 +14,15 @@ export function UrlComponentPreview({
|
|
|
14
14
|
url,
|
|
15
15
|
previewType,
|
|
16
16
|
size,
|
|
17
|
-
hint
|
|
17
|
+
hint,
|
|
18
|
+
interactive = true
|
|
18
19
|
}: {
|
|
19
20
|
url: string,
|
|
20
21
|
previewType?: PreviewType,
|
|
21
22
|
size: PreviewSize,
|
|
22
|
-
hint?: string
|
|
23
|
+
hint?: string,
|
|
24
|
+
// for video controls
|
|
25
|
+
interactive?: boolean
|
|
23
26
|
}): React.ReactElement {
|
|
24
27
|
|
|
25
28
|
if (!previewType) {
|
|
@@ -43,17 +46,13 @@ export function UrlComponentPreview({
|
|
|
43
46
|
size={size}/>;
|
|
44
47
|
} else if (previewType === "audio") {
|
|
45
48
|
return <audio controls
|
|
49
|
+
className={"max-w-100%"}
|
|
46
50
|
src={url}>
|
|
47
51
|
Your browser does not support the
|
|
48
52
|
<code>audio</code> element.
|
|
49
53
|
</audio>;
|
|
50
54
|
} else if (previewType === "video") {
|
|
51
|
-
return <
|
|
52
|
-
className={`max-w-${size === "small" ? "sm" : "md"}`}
|
|
53
|
-
controls
|
|
54
|
-
>
|
|
55
|
-
<source src={url}/>
|
|
56
|
-
</video>;
|
|
55
|
+
return <VideoPreview size={size} src={url} interactive={interactive}/>;
|
|
57
56
|
} else {
|
|
58
57
|
return (
|
|
59
58
|
<a
|
|
@@ -66,7 +65,7 @@ export function UrlComponentPreview({
|
|
|
66
65
|
width: getThumbnailMeasure(size),
|
|
67
66
|
height: getThumbnailMeasure(size)
|
|
68
67
|
}}>
|
|
69
|
-
<DescriptionIcon className="
|
|
68
|
+
<DescriptionIcon className="text-gray-700 dark:text-gray-300"/>
|
|
70
69
|
{hint &&
|
|
71
70
|
<Tooltip title={hint}>
|
|
72
71
|
<Typography
|
|
@@ -77,3 +76,37 @@ export function UrlComponentPreview({
|
|
|
77
76
|
);
|
|
78
77
|
}
|
|
79
78
|
}
|
|
79
|
+
|
|
80
|
+
function VideoPreview({
|
|
81
|
+
size,
|
|
82
|
+
src,
|
|
83
|
+
interactive
|
|
84
|
+
}: { size: PreviewSize, src: string, interactive: boolean }) {
|
|
85
|
+
|
|
86
|
+
const imageSize = useMemo(() => {
|
|
87
|
+
if (size === "tiny")
|
|
88
|
+
return "140px";
|
|
89
|
+
else if (size === "small")
|
|
90
|
+
return "240px";
|
|
91
|
+
else if (size === "medium")
|
|
92
|
+
return "100%";
|
|
93
|
+
else throw new Error("Invalid size");
|
|
94
|
+
}, [size]);
|
|
95
|
+
|
|
96
|
+
const videoProps = {
|
|
97
|
+
controls: interactive
|
|
98
|
+
};
|
|
99
|
+
return <video
|
|
100
|
+
style={{
|
|
101
|
+
position: "relative",
|
|
102
|
+
objectFit: "cover",
|
|
103
|
+
width: imageSize,
|
|
104
|
+
minWidth: "140px",
|
|
105
|
+
// height: imageSize,
|
|
106
|
+
maxHeight: "100%"
|
|
107
|
+
}}
|
|
108
|
+
{...videoProps}
|
|
109
|
+
className={cls("max-w-100% rounded", { "pointer-events-none": !interactive })}>
|
|
110
|
+
<source src={src}/>
|
|
111
|
+
</video>;
|
|
112
|
+
}
|
|
@@ -18,7 +18,6 @@ export function ArrayOfReferencesPreview({
|
|
|
18
18
|
const property = resolveArrayProperty({
|
|
19
19
|
propertyKey,
|
|
20
20
|
property: inputProperty,
|
|
21
|
-
propertyValue: value,
|
|
22
21
|
fields: customizationController.propertyConfigs
|
|
23
22
|
});
|
|
24
23
|
|
|
@@ -43,6 +42,8 @@ export function ArrayOfReferencesPreview({
|
|
|
43
42
|
previewProperties={ofProperty.previewProperties}
|
|
44
43
|
size={childSize}
|
|
45
44
|
reference={reference}
|
|
45
|
+
includeId={ofProperty.includeId}
|
|
46
|
+
includeEntityLink={ofProperty.includeEntityLink}
|
|
46
47
|
/>
|
|
47
48
|
</div>;
|
|
48
49
|
}
|
|
@@ -4,7 +4,7 @@ import { ResolvedProperty } from "../../types";
|
|
|
4
4
|
import { useCustomizationController } from "../../hooks";
|
|
5
5
|
import { PreviewSize, PropertyPreviewProps } from "../PropertyPreviewProps";
|
|
6
6
|
import { PropertyPreview } from "../PropertyPreview";
|
|
7
|
-
import {
|
|
7
|
+
import { cls, defaultBorderMixin } from "@firecms/ui";
|
|
8
8
|
import { DEFAULT_ONE_OF_TYPE, DEFAULT_ONE_OF_VALUE } from "../../util/common";
|
|
9
9
|
import { ErrorBoundary } from "../../components";
|
|
10
10
|
|
|
@@ -23,7 +23,6 @@ export function ArrayOneOfPreview({
|
|
|
23
23
|
const property = resolveArrayProperty({
|
|
24
24
|
propertyKey,
|
|
25
25
|
property: inputProperty,
|
|
26
|
-
propertyValue: value,
|
|
27
26
|
fields: customizationController.propertyConfigs
|
|
28
27
|
});
|
|
29
28
|
|
|
@@ -50,7 +49,7 @@ export function ArrayOneOfPreview({
|
|
|
50
49
|
values.map((value, index) =>
|
|
51
50
|
<React.Fragment
|
|
52
51
|
key={"preview_array_" + value + "_" + index}>
|
|
53
|
-
<div className={
|
|
52
|
+
<div className={cls(defaultBorderMixin, "m-1 border-b last:border-b-0")}>
|
|
54
53
|
<ErrorBoundary>
|
|
55
54
|
{value && <PropertyPreview
|
|
56
55
|
propertyKey={propertyKey}
|
|
@@ -5,7 +5,7 @@ import { ResolvedProperty } from "../../types";
|
|
|
5
5
|
import { useCustomizationController } from "../../hooks";
|
|
6
6
|
import { PreviewSize, PropertyPreviewProps } from "../PropertyPreviewProps";
|
|
7
7
|
import { PropertyPreview } from "../PropertyPreview";
|
|
8
|
-
import {
|
|
8
|
+
import { cls, defaultBorderMixin } from "@firecms/ui";
|
|
9
9
|
import { ErrorBoundary } from "../../components";
|
|
10
10
|
|
|
11
11
|
/**
|
|
@@ -23,7 +23,6 @@ export function ArrayPropertyPreview({
|
|
|
23
23
|
const property = resolveArrayProperty({
|
|
24
24
|
propertyKey,
|
|
25
25
|
property: inputProperty,
|
|
26
|
-
propertyValue: value,
|
|
27
26
|
fields: customizationController.propertyConfigs
|
|
28
27
|
});
|
|
29
28
|
|
|
@@ -49,7 +48,7 @@ export function ArrayPropertyPreview({
|
|
|
49
48
|
return of
|
|
50
49
|
? <React.Fragment
|
|
51
50
|
key={"preview_array_" + index}>
|
|
52
|
-
<div className={
|
|
51
|
+
<div className={cls(defaultBorderMixin, "m-1 border-b last:border-b-0")}>
|
|
53
52
|
<ErrorBoundary>
|
|
54
53
|
<PropertyPreview
|
|
55
54
|
propertyKey={propertyKey}
|
|
@@ -3,7 +3,7 @@ import React from "react";
|
|
|
3
3
|
import { ResolvedMapProperty } from "../../types";
|
|
4
4
|
import { PropertyPreviewProps } from "../PropertyPreviewProps";
|
|
5
5
|
import { PropertyPreview } from "../PropertyPreview";
|
|
6
|
-
import {
|
|
6
|
+
import { cls, defaultBorderMixin, Typography } from "@firecms/ui";
|
|
7
7
|
import { ErrorBoundary } from "../../components";
|
|
8
8
|
import { EmptyValue } from "../components/EmptyValue";
|
|
9
9
|
|
|
@@ -61,7 +61,7 @@ export function MapPropertyPreview<T extends Record<string, any> = Record<string
|
|
|
61
61
|
return (
|
|
62
62
|
<div
|
|
63
63
|
key={`map_preview_table_${key}}`}
|
|
64
|
-
className={
|
|
64
|
+
className={cls(defaultBorderMixin, "last:border-b-0 border-b")}>
|
|
65
65
|
<div
|
|
66
66
|
className={"flex flex-row pt-0.5 pb-0.5 gap-2"}>
|
|
67
67
|
<div
|
|
@@ -87,7 +87,7 @@ export function MapPropertyPreview<T extends Record<string, any> = Record<string
|
|
|
87
87
|
</div>
|
|
88
88
|
|
|
89
89
|
{(childProperty.dataType === "map" || childProperty === "array") &&
|
|
90
|
-
<div className={
|
|
90
|
+
<div className={cls(defaultBorderMixin, "border-l pl-4 ml-2 my-2")}>
|
|
91
91
|
<PropertyPreview
|
|
92
92
|
propertyKey={key}
|
|
93
93
|
value={(value)[key]}
|
|
@@ -113,7 +113,7 @@ export function KeyValuePreview({ value }: { value: any }) {
|
|
|
113
113
|
Object.entries(value).map(([key, childValue]) => (
|
|
114
114
|
<div
|
|
115
115
|
key={`map_preview_table_${key}}`}
|
|
116
|
-
className={
|
|
116
|
+
className={cls(defaultBorderMixin, "last:border-b-0 border-b")}>
|
|
117
117
|
<div
|
|
118
118
|
className={"flex flex-row pt-0.5 pb-0.5 gap-2"}>
|
|
119
119
|
<div
|
|
@@ -135,7 +135,7 @@ export function KeyValuePreview({ value }: { value: any }) {
|
|
|
135
135
|
</div>
|
|
136
136
|
</div>
|
|
137
137
|
{typeof childValue === "object" &&
|
|
138
|
-
<div className={
|
|
138
|
+
<div className={cls(defaultBorderMixin, "border-l pl-4")}>
|
|
139
139
|
<KeyValuePreview value={childValue}/>
|
|
140
140
|
</div>
|
|
141
141
|
}
|
|
@@ -6,7 +6,7 @@ import { PreviewType } from "../../types";
|
|
|
6
6
|
import { UrlComponentPreview } from "../components/UrlComponentPreview";
|
|
7
7
|
import { PropertyPreviewProps } from "../PropertyPreviewProps";
|
|
8
8
|
import { ErrorBoundary } from "../../components";
|
|
9
|
-
import { Chip,
|
|
9
|
+
import { Chip, cls, getColorSchemeForSeed } from "@firecms/ui";
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
12
|
* @group Preview components
|
|
@@ -45,7 +45,7 @@ export function StringPropertyPreview({
|
|
|
45
45
|
if (!value) return <></>;
|
|
46
46
|
const lines = value.split("\n");
|
|
47
47
|
return value && value.includes("\n")
|
|
48
|
-
? <div className={
|
|
48
|
+
? <div className={cls("overflow-x-scroll", size === "tiny" ? "text-sm" : "")}>
|
|
49
49
|
{lines.map((str, index) =>
|
|
50
50
|
<React.Fragment key={`string_preview_${index}`}>
|
|
51
51
|
<span>{str}</span>
|
package/src/types/auth.tsx
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { User } from "./user";
|
|
2
2
|
import { Role } from "./roles";
|
|
3
|
+
import { DataSourceDelegate } from "./datasource";
|
|
4
|
+
import { StorageSource } from "./storage";
|
|
3
5
|
|
|
4
6
|
/**
|
|
5
7
|
* Controller for retrieving the logged user or performing auth related operations.
|
|
@@ -7,7 +9,7 @@ import { Role } from "./roles";
|
|
|
7
9
|
* to do it as the result of a hook.
|
|
8
10
|
* @group Hooks and utilities
|
|
9
11
|
*/
|
|
10
|
-
export type AuthController<UserType extends User =
|
|
12
|
+
export type AuthController<UserType extends User = any, ExtraData = any> = {
|
|
11
13
|
|
|
12
14
|
/**
|
|
13
15
|
* The user currently logged in
|
|
@@ -36,7 +38,7 @@ export type AuthController<UserType extends User = User, ExtraData extends any =
|
|
|
36
38
|
/**
|
|
37
39
|
* Sign out
|
|
38
40
|
*/
|
|
39
|
-
signOut: () => void
|
|
41
|
+
signOut: () => Promise<void>;
|
|
40
42
|
|
|
41
43
|
/**
|
|
42
44
|
* Error initializing the authentication
|
|
@@ -62,4 +64,35 @@ export type AuthController<UserType extends User = User, ExtraData extends any =
|
|
|
62
64
|
|
|
63
65
|
setExtra: (extra: ExtraData) => void;
|
|
64
66
|
|
|
67
|
+
// setUser?: (user: UserType | null) => void;
|
|
68
|
+
|
|
69
|
+
// setRoles?: (roles: Role[]) => void;
|
|
65
70
|
};
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Implement this function to allow access to specific users.
|
|
74
|
+
* @group Hooks and utilities
|
|
75
|
+
*/
|
|
76
|
+
export type Authenticator<UserType extends User = User, Controller extends AuthController<UserType> = AuthController<UserType>> = (props: {
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Logged-in user or null
|
|
80
|
+
*/
|
|
81
|
+
user: UserType | null;
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* AuthController
|
|
85
|
+
*/
|
|
86
|
+
authController: Controller;
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Connector to your database, e.g. your Firestore database
|
|
90
|
+
*/
|
|
91
|
+
dataSourceDelegate: DataSourceDelegate;
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Used storage implementation
|
|
95
|
+
*/
|
|
96
|
+
storageSource: StorageSource;
|
|
97
|
+
|
|
98
|
+
}) => boolean | Promise<boolean>;
|
package/src/types/collections.ts
CHANGED
|
@@ -17,7 +17,7 @@ import { EntityOverrides } from "./entity_overrides";
|
|
|
17
17
|
*
|
|
18
18
|
* @group Models
|
|
19
19
|
*/
|
|
20
|
-
export interface EntityCollection<M extends Record<string, any> = any, UserType extends User =
|
|
20
|
+
export interface EntityCollection<M extends Record<string, any> = any, UserType extends User = any> {
|
|
21
21
|
|
|
22
22
|
/**
|
|
23
23
|
* You can set an alias that will be used internally instead of the `path`.
|
|
@@ -82,7 +82,7 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
|
|
|
82
82
|
* as the title in entity related views and references.
|
|
83
83
|
* If not specified, the first property simple text property will be used.
|
|
84
84
|
*/
|
|
85
|
-
titleProperty?: keyof M
|
|
85
|
+
titleProperty?: keyof M;
|
|
86
86
|
|
|
87
87
|
/**
|
|
88
88
|
* Can this collection be edited by the end user.
|
|
@@ -107,8 +107,12 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
|
|
|
107
107
|
* `subcollection:`. e.g. `subcollection:orders`.
|
|
108
108
|
* - If you are using a collection group, you will also have an
|
|
109
109
|
* additional `collectionGroupParent` column.
|
|
110
|
+
* You can use this prop to hide some properties from the table view.
|
|
111
|
+
* Note that if you set this prop, other ways to hide fields, like
|
|
112
|
+
* `hidden` in the property definition,will be ignored.
|
|
113
|
+
* `propertiesOrder` has precedence over `hidden`.
|
|
110
114
|
*/
|
|
111
|
-
propertiesOrder?: Extract<keyof M, string>[];
|
|
115
|
+
propertiesOrder?: (Extract<keyof M, string> | `subcollection:${string}`)[];
|
|
112
116
|
|
|
113
117
|
/**
|
|
114
118
|
* If enabled, content is loaded in batches. If `false` all entities in the
|
|
@@ -147,7 +151,7 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
|
|
|
147
151
|
* is being created, updated or deleted.
|
|
148
152
|
* Useful for adding your own logic or blocking the execution of the operation.
|
|
149
153
|
*/
|
|
150
|
-
callbacks?: EntityCallbacks<M>;
|
|
154
|
+
callbacks?: EntityCallbacks<M, UserType>;
|
|
151
155
|
|
|
152
156
|
/**
|
|
153
157
|
* Builder for rendering additional components such as buttons in the
|
|
@@ -290,7 +294,16 @@ export interface EntityCollection<M extends Record<string, any> = any, UserType
|
|
|
290
294
|
* are writing custom code
|
|
291
295
|
*/
|
|
292
296
|
ownerId?: string;
|
|
297
|
+
|
|
298
|
+
/**
|
|
299
|
+
* Overrides for the entity view, like the data source or the storage source.
|
|
300
|
+
*/
|
|
293
301
|
overrides?: EntityOverrides;
|
|
302
|
+
|
|
303
|
+
/**
|
|
304
|
+
* Width of the side dialog (in pixels) when opening an entity in this collection.
|
|
305
|
+
*/
|
|
306
|
+
sideDialogWidth?: number | string;
|
|
294
307
|
}
|
|
295
308
|
|
|
296
309
|
/**
|
|
@@ -349,14 +362,13 @@ export interface CollectionActionsProps<M extends Record<string, any> = any, Use
|
|
|
349
362
|
/**
|
|
350
363
|
* Use this controller to retrieve the selected entities or modify them in
|
|
351
364
|
* an {@link EntityCollection}
|
|
352
|
-
* If you want to pass a `SelectionController` to
|
|
353
365
|
* @group Models
|
|
354
366
|
*/
|
|
355
367
|
export type SelectionController<M extends Record<string, any> = any> = {
|
|
356
368
|
selectedEntities: Entity<M>[];
|
|
357
369
|
setSelectedEntities: Dispatch<SetStateAction<Entity<M>[]>>;
|
|
358
370
|
isEntitySelected: (entity: Entity<M>) => boolean;
|
|
359
|
-
toggleEntitySelection: (entity: Entity<M
|
|
371
|
+
toggleEntitySelection: (entity: Entity<M>, newSelectedState?: boolean) => void;
|
|
360
372
|
}
|
|
361
373
|
|
|
362
374
|
/**
|
|
@@ -451,7 +463,10 @@ export interface AdditionalFieldDelegate<M extends Record<string, any> = any,
|
|
|
451
463
|
* view.
|
|
452
464
|
* @param entity
|
|
453
465
|
*/
|
|
454
|
-
value?: (props: {
|
|
466
|
+
value?: (props: {
|
|
467
|
+
entity: Entity<M>,
|
|
468
|
+
context: FireCMSContext<any>
|
|
469
|
+
}) => string | number | Promise<string | number> | undefined;
|
|
455
470
|
}
|
|
456
471
|
|
|
457
472
|
/**
|
|
@@ -461,8 +476,22 @@ export interface AdditionalFieldDelegate<M extends Record<string, any> = any,
|
|
|
461
476
|
*/
|
|
462
477
|
export type EntityCustomView<M extends Record<string, any> = any> =
|
|
463
478
|
{
|
|
479
|
+
/**
|
|
480
|
+
* Key of this custom view.
|
|
481
|
+
*/
|
|
464
482
|
key: string,
|
|
483
|
+
/**
|
|
484
|
+
* Name of this custom view.
|
|
485
|
+
*/
|
|
465
486
|
name: string,
|
|
487
|
+
/**
|
|
488
|
+
* If set to true, the actions of the entity will be included in the
|
|
489
|
+
* bottom of the panel (save buttons, delete buttons, etc.)
|
|
490
|
+
*/
|
|
491
|
+
includeActions?: boolean;
|
|
492
|
+
/**
|
|
493
|
+
* Builder for rendering the custom view
|
|
494
|
+
*/
|
|
466
495
|
Builder?: React.ComponentType<EntityCustomViewParams<M>>;
|
|
467
496
|
}
|
|
468
497
|
|
|
@@ -523,7 +552,7 @@ export type EntityTableController<M extends Record<string, any> = any> = {
|
|
|
523
552
|
filterValues?: FilterValues<Extract<keyof M, string>>;
|
|
524
553
|
setFilterValues?: (filterValues: FilterValues<Extract<keyof M, string>>) => void;
|
|
525
554
|
sortBy?: [Extract<keyof M, string>, "asc" | "desc"];
|
|
526
|
-
setSortBy?: (sortBy
|
|
555
|
+
setSortBy?: (sortBy?: [Extract<keyof M, string>, "asc" | "desc"]) => void;
|
|
527
556
|
searchString?: string;
|
|
528
557
|
setSearchString?: (searchString?: string) => void;
|
|
529
558
|
clearFilter?: () => void;
|