@firecms/core 3.0.0-canary.6 → 3.0.0-canary.61
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 +2 -2
- package/dist/components/ClearFilterSortButton.d.ts +5 -0
- package/dist/components/EntityCollectionTable/EntityCollectionRowActions.d.ts +11 -11
- package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +2 -2
- package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +5 -3
- package/dist/components/EntityCollectionTable/PropertyTableCell.d.ts +3 -2
- package/dist/components/EntityCollectionTable/column_utils.d.ts +1 -2
- package/dist/components/EntityCollectionTable/fields/TableReferenceField.d.ts +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 -3
- package/dist/components/EntityCollectionView/EntityCollectionViewStartActions.d.ts +11 -0
- package/dist/components/EntityCollectionView/useSelectionController.d.ts +2 -0
- package/dist/components/EntityPreview.d.ts +26 -7
- package/dist/components/EntityView.d.ts +11 -0
- package/dist/components/FieldCaption.d.ts +5 -0
- package/dist/components/FireCMSAppBar.d.ts +4 -2
- package/dist/components/HomePage/NavigationCard.d.ts +8 -0
- package/dist/components/HomePage/{NavigationCollectionCard.d.ts → NavigationCardBinding.d.ts} +2 -2
- package/dist/components/HomePage/SmallNavigationCard.d.ts +6 -0
- package/dist/components/HomePage/index.d.ts +3 -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 +6 -7
- 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 +5 -2
- package/dist/contexts/AuthControllerContext.d.ts +1 -1
- package/dist/core/Drawer.d.ts +5 -12
- package/dist/core/DrawerNavigationItem.d.ts +9 -0
- package/dist/core/{EntityView.d.ts → EntityEditView.d.ts} +2 -2
- package/dist/core/NavigationRoutes.d.ts +1 -1
- package/dist/core/Scaffold.d.ts +8 -12
- package/dist/core/index.d.ts +3 -4
- package/dist/form/EntityForm.d.ts +1 -1
- package/dist/form/components/ErrorFocus.d.ts +1 -1
- package/dist/form/components/StorageItemPreview.d.ts +3 -2
- package/dist/form/components/StorageUploadProgress.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/StorageUploadFieldBinding.d.ts +4 -3
- package/dist/form/field_bindings/TextFieldBinding.d.ts +2 -2
- package/dist/form/validation.d.ts +1 -1
- 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 +2 -2
- package/dist/hooks/data/useEntityFetch.d.ts +3 -3
- package/dist/hooks/index.d.ts +2 -0
- package/dist/hooks/useBuildNavigationController.d.ts +6 -4
- package/dist/hooks/useProjectLog.d.ts +6 -2
- package/dist/hooks/useStorageSource.d.ts +2 -2
- package/dist/hooks/useValidateAuthenticator.d.ts +21 -0
- package/dist/index.es.js +10498 -9944
- package/dist/index.es.js.map +1 -1
- package/dist/index.umd.js +5 -5
- package/dist/index.umd.js.map +1 -1
- package/dist/internal/useBuildDataSource.d.ts +1 -16
- package/dist/preview/PropertyPreview.d.ts +1 -1
- package/dist/preview/PropertyPreviewProps.d.ts +1 -4
- package/dist/preview/components/BooleanPreview.d.ts +5 -1
- package/dist/preview/components/EnumValuesChip.d.ts +1 -1
- package/dist/preview/components/ReferencePreview.d.ts +3 -8
- package/dist/types/analytics.d.ts +1 -1
- package/dist/types/auth.d.ts +37 -1
- package/dist/types/collections.d.ts +30 -6
- package/dist/types/datasource.d.ts +21 -14
- 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/entity_overrides.d.ts +6 -0
- package/dist/types/index.d.ts +2 -1
- package/dist/types/navigation.d.ts +15 -14
- package/dist/types/permissions.d.ts +5 -1
- package/dist/types/plugins.d.ts +20 -20
- package/dist/types/properties.d.ts +12 -4
- package/dist/types/property_config.d.ts +2 -2
- package/dist/types/roles.d.ts +31 -0
- package/dist/types/storage.d.ts +11 -3
- package/dist/types/user.d.ts +5 -0
- package/dist/util/collections.d.ts +9 -1
- package/dist/util/entities.d.ts +1 -1
- package/dist/util/icon_synonyms.d.ts +1 -97
- package/dist/util/icons.d.ts +8 -2
- package/dist/util/navigation_utils.d.ts +2 -2
- package/dist/util/objects.d.ts +1 -1
- package/dist/util/permissions.d.ts +4 -4
- package/dist/util/references.d.ts +4 -2
- package/dist/util/resolutions.d.ts +14 -14
- package/dist/util/useTraceUpdate.d.ts +1 -0
- package/package.json +139 -119
- package/src/components/ClearFilterSortButton.tsx +41 -0
- package/src/components/DeleteEntityDialog.tsx +4 -4
- package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +4 -4
- package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +276 -279
- package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +9 -5
- package/src/components/EntityCollectionTable/PropertyTableCell.tsx +48 -45
- package/src/components/EntityCollectionTable/column_utils.tsx +3 -3
- package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +18 -17
- package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +5 -5
- 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 +2 -4
- package/src/components/EntityCollectionView/EntityCollectionView.tsx +73 -72
- package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +5 -6
- package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +68 -0
- package/src/components/EntityCollectionView/useSelectionController.tsx +30 -0
- package/src/components/EntityPreview.tsx +209 -70
- package/src/components/EntityView.tsx +84 -0
- package/src/components/FieldCaption.tsx +14 -0
- package/src/components/FireCMSAppBar.tsx +40 -15
- package/src/components/HomePage/DefaultHomePage.tsx +15 -11
- package/src/components/HomePage/NavigationCard.tsx +69 -0
- package/src/components/HomePage/NavigationCardBinding.tsx +116 -0
- package/src/components/HomePage/SmallNavigationCard.tsx +45 -0
- package/src/components/HomePage/index.tsx +3 -1
- package/src/components/PropertyIdCopyTooltipContent.tsx +2 -3
- package/src/components/ReferenceTable/ReferenceSelectionTable.tsx +4 -4
- package/src/components/ReferenceWidget.tsx +22 -12
- package/src/components/SearchIconsView.tsx +5 -5
- package/src/components/SelectableTable/SelectableTable.tsx +5 -3
- package/src/components/SelectableTable/filters/BooleanFilterField.tsx +2 -3
- package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +23 -8
- package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +38 -24
- package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +35 -15
- package/src/components/VirtualTable/VirtualTable.tsx +38 -29
- package/src/components/VirtualTable/VirtualTableHeader.tsx +4 -4
- package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +2 -2
- package/src/components/VirtualTable/VirtualTableProps.tsx +7 -7
- 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 +11 -7
- 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 +12 -1
- package/src/components/common/useTableSearchHelper.ts +39 -9
- package/src/components/index.tsx +5 -2
- package/src/contexts/AuthControllerContext.tsx +1 -1
- package/src/core/Drawer.tsx +78 -103
- package/src/core/DrawerNavigationItem.tsx +62 -0
- package/src/core/{EntityView.tsx → EntityEditView.tsx} +27 -45
- package/src/core/EntitySidePanel.tsx +3 -3
- package/src/core/FireCMS.tsx +54 -43
- package/src/core/NavigationRoutes.tsx +11 -4
- package/src/core/Scaffold.tsx +80 -66
- package/src/core/field_configs.tsx +2 -3
- package/src/core/index.tsx +3 -4
- package/src/form/EntityForm.tsx +42 -27
- package/src/form/PropertyFieldBinding.tsx +0 -2
- package/src/form/components/StorageItemPreview.tsx +7 -5
- package/src/form/components/StorageUploadProgress.tsx +9 -8
- package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +10 -12
- package/src/form/field_bindings/BlockFieldBinding.tsx +2 -2
- package/src/form/field_bindings/DateTimeFieldBinding.tsx +1 -1
- package/src/form/field_bindings/KeyValueFieldBinding.tsx +19 -19
- package/src/form/field_bindings/MapFieldBinding.tsx +15 -15
- package/src/form/field_bindings/MarkdownFieldBinding.tsx +2 -2
- package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +3 -3
- package/src/form/field_bindings/ReferenceFieldBinding.tsx +16 -13
- package/src/form/field_bindings/SelectFieldBinding.tsx +3 -3
- package/src/form/field_bindings/StorageUploadFieldBinding.tsx +18 -9
- package/src/form/field_bindings/TextFieldBinding.tsx +7 -5
- package/src/form/validation.ts +3 -4
- package/src/hooks/data/delete.ts +3 -3
- package/src/hooks/data/save.ts +4 -2
- package/src/hooks/data/useCollectionFetch.tsx +1 -1
- package/src/hooks/data/useDataSource.tsx +8 -3
- package/src/hooks/data/useEntityFetch.tsx +4 -4
- 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 +200 -83
- package/src/hooks/useProjectLog.tsx +17 -7
- package/src/hooks/useReferenceDialog.tsx +2 -2
- package/src/hooks/useResolvedNavigationFrom.tsx +1 -1
- package/src/hooks/useStorageSource.tsx +7 -2
- package/src/hooks/useValidateAuthenticator.tsx +115 -0
- package/src/internal/useBuildDataSource.ts +54 -47
- package/src/internal/useBuildSideEntityController.tsx +88 -21
- package/src/preview/PropertyPreview.tsx +5 -15
- package/src/preview/PropertyPreviewProps.tsx +1 -11
- package/src/preview/components/BooleanPreview.tsx +19 -4
- package/src/preview/components/EnumValuesChip.tsx +2 -2
- package/src/preview/components/ReferencePreview.tsx +72 -165
- 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 +8 -7
- package/src/types/analytics.ts +1 -0
- package/src/types/auth.tsx +50 -1
- package/src/types/collections.ts +37 -6
- package/src/types/datasource.ts +24 -17
- package/src/types/entities.ts +9 -1
- package/src/types/entity_actions.tsx +17 -0
- package/src/types/entity_callbacks.ts +2 -2
- package/src/types/entity_overrides.tsx +7 -0
- package/src/types/firecms.tsx +0 -1
- package/src/types/index.ts +2 -1
- package/src/types/navigation.ts +17 -17
- package/src/types/permissions.ts +6 -1
- package/src/types/plugins.tsx +26 -28
- package/src/types/properties.ts +18 -6
- package/src/types/property_config.tsx +2 -2
- package/src/types/roles.ts +41 -0
- package/src/types/side_entity_controller.tsx +1 -0
- package/src/types/storage.ts +12 -3
- package/src/types/user.ts +7 -0
- package/src/util/collections.ts +22 -0
- package/src/util/entities.ts +1 -1
- 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/icons.tsx +11 -3
- package/src/util/navigation_utils.ts +6 -6
- package/src/util/objects.ts +8 -21
- package/src/util/permissions.ts +11 -8
- package/src/util/references.ts +36 -5
- package/src/util/resolutions.ts +32 -31
- package/src/util/strings.ts +2 -2
- package/src/util/useTraceUpdate.tsx +2 -1
- package/dist/components/VirtualTable/common.d.ts +0 -2
- package/dist/core/SideEntityView.d.ts +0 -7
- 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/HomePage/NavigationCollectionCard.tsx +0 -146
- package/src/core/SideEntityView.tsx +0 -38
- package/src/internal/useBuildCustomizationController.tsx +0 -5
- package/src/internal/useLocaleConfig.tsx +0 -18
- package/src/types/appcheck.ts +0 -29
|
@@ -92,7 +92,6 @@ function PropertyFieldBindingInternal<T extends CMSType = CMSType, M extends Rec
|
|
|
92
92
|
let Component: ComponentType<FieldProps<T>> | undefined;
|
|
93
93
|
const resolvedProperty: ResolvedProperty<T> | null = resolveProperty({
|
|
94
94
|
propertyKey,
|
|
95
|
-
propertyValue: fieldProps.field.value,
|
|
96
95
|
propertyOrBuilder: property,
|
|
97
96
|
values: fieldProps.form.values,
|
|
98
97
|
path: context.path,
|
|
@@ -116,7 +115,6 @@ function PropertyFieldBindingInternal<T extends CMSType = CMSType, M extends Rec
|
|
|
116
115
|
}
|
|
117
116
|
const configProperty = resolveProperty({
|
|
118
117
|
propertyOrBuilder: propertyConfig.property,
|
|
119
|
-
propertyValue: fieldProps.field.value,
|
|
120
118
|
values: fieldProps.form.values,
|
|
121
119
|
path: context.path,
|
|
122
120
|
entityId: context.entityId,
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
|
|
3
|
-
import { Entity, ResolvedStringProperty } from "../../types";
|
|
3
|
+
import { Entity, EntityCollection, ResolvedStringProperty } from "../../types";
|
|
4
4
|
import { PreviewSize, PropertyPreview } from "../../preview";
|
|
5
5
|
|
|
6
|
-
import {
|
|
6
|
+
import { cls, IconButton, paperMixin, RemoveIcon, Tooltip } from "@firecms/ui";
|
|
7
7
|
import { ErrorBoundary } from "../../components";
|
|
8
8
|
|
|
9
9
|
interface StorageItemPreviewProps {
|
|
@@ -14,6 +14,7 @@ interface StorageItemPreviewProps {
|
|
|
14
14
|
onRemove: (value: string) => void;
|
|
15
15
|
size: PreviewSize;
|
|
16
16
|
disabled: boolean;
|
|
17
|
+
collection: EntityCollection;
|
|
17
18
|
}
|
|
18
19
|
|
|
19
20
|
export function StorageItemPreview({
|
|
@@ -23,11 +24,12 @@ export function StorageItemPreview({
|
|
|
23
24
|
entity,
|
|
24
25
|
onRemove,
|
|
25
26
|
disabled,
|
|
26
|
-
size
|
|
27
|
+
size,
|
|
28
|
+
collection
|
|
27
29
|
}: StorageItemPreviewProps) {
|
|
28
30
|
|
|
29
31
|
return (
|
|
30
|
-
<div className={
|
|
32
|
+
<div className={cls(paperMixin,
|
|
31
33
|
"relative m-4 border-box flex items-center justify-center",
|
|
32
34
|
size === "medium" ? "min-w-[220px] min-h-[220px] max-w-[220px]" : "min-w-[118px] min-h-[118px] max-w-[118px]")}>
|
|
33
35
|
|
|
@@ -54,7 +56,7 @@ export function StorageItemPreview({
|
|
|
54
56
|
<PropertyPreview propertyKey={name}
|
|
55
57
|
value={value}
|
|
56
58
|
property={property}
|
|
57
|
-
|
|
59
|
+
// entity={entity}
|
|
58
60
|
size={size}/>
|
|
59
61
|
</ErrorBoundary>
|
|
60
62
|
}
|
|
@@ -3,7 +3,8 @@ import React, { useCallback } from "react";
|
|
|
3
3
|
import { useSnackbarController, useStorageSource } from "../../hooks";
|
|
4
4
|
import { StorageFieldItem } from "../../util/useStorageUploadController";
|
|
5
5
|
import { ErrorView } from "../../components";
|
|
6
|
-
import {
|
|
6
|
+
import { cls, paperMixin, Skeleton } from "@firecms/ui";
|
|
7
|
+
import { EntityCollection, StorageSource } from "../../types";
|
|
7
8
|
|
|
8
9
|
export interface StorageUploadItemProps {
|
|
9
10
|
storagePath: string;
|
|
@@ -22,10 +23,10 @@ export function StorageUploadProgress({
|
|
|
22
23
|
metadata,
|
|
23
24
|
onFileUploadComplete,
|
|
24
25
|
imageSize,
|
|
25
|
-
simple
|
|
26
|
+
simple,
|
|
26
27
|
}: StorageUploadItemProps) {
|
|
27
28
|
|
|
28
|
-
const
|
|
29
|
+
const storageSource = useStorageSource();
|
|
29
30
|
|
|
30
31
|
const snackbarController = useSnackbarController();
|
|
31
32
|
|
|
@@ -41,14 +42,14 @@ export function StorageUploadProgress({
|
|
|
41
42
|
setError(undefined);
|
|
42
43
|
setLoading(true);
|
|
43
44
|
|
|
44
|
-
|
|
45
|
+
storageSource.uploadFile({
|
|
45
46
|
file,
|
|
46
47
|
fileName,
|
|
47
48
|
path: storagePath,
|
|
48
49
|
metadata
|
|
49
50
|
})
|
|
50
51
|
.then(async ({ path }) => {
|
|
51
|
-
console.debug("Upload successful");
|
|
52
|
+
console.debug("Upload successful", path);
|
|
52
53
|
await onFileUploadComplete(path, entry, metadata);
|
|
53
54
|
if (mounted.current)
|
|
54
55
|
setLoading(false);
|
|
@@ -67,7 +68,7 @@ export function StorageUploadProgress({
|
|
|
67
68
|
.finally(() => {
|
|
68
69
|
uploading.current = false;
|
|
69
70
|
});
|
|
70
|
-
}, [entry, metadata, onFileUploadComplete,
|
|
71
|
+
}, [entry, metadata, onFileUploadComplete, storageSource, storagePath]);
|
|
71
72
|
|
|
72
73
|
React.useEffect(() => {
|
|
73
74
|
mounted.current = true;
|
|
@@ -87,9 +88,9 @@ export function StorageUploadProgress({
|
|
|
87
88
|
}
|
|
88
89
|
return (
|
|
89
90
|
|
|
90
|
-
<div className={
|
|
91
|
+
<div className={cls(paperMixin,
|
|
91
92
|
"relative m-4 border-box flex items-center justify-center",
|
|
92
|
-
|
|
93
|
+
`min-w-[${imageSize}px] min-h-[${imageSize}px]`)}>
|
|
93
94
|
|
|
94
95
|
{loading &&
|
|
95
96
|
<Skeleton className="w-full h-full"/>}
|
|
@@ -6,7 +6,7 @@ import { ErrorView } from "../../components";
|
|
|
6
6
|
import { getIconForProperty, getReferenceFrom } from "../../util";
|
|
7
7
|
|
|
8
8
|
import { useNavigationController, useReferenceDialog } from "../../hooks";
|
|
9
|
-
import { Button, ExpandablePanel } from "@firecms/ui";
|
|
9
|
+
import { Button, cls, ExpandablePanel, fieldBackgroundMixin } from "@firecms/ui";
|
|
10
10
|
import { useClearRestoreValue } from "../useClearRestoreValue";
|
|
11
11
|
|
|
12
12
|
type ArrayOfReferencesFieldProps = FieldProps<EntityReference[]>;
|
|
@@ -38,7 +38,6 @@ export function ArrayOfReferencesFieldBinding({
|
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
const expanded = property.expanded === undefined ? true : property.expanded;
|
|
41
|
-
const [onHover, setOnHover] = React.useState(false);
|
|
42
41
|
const selectedEntityIds = value && Array.isArray(value) ? value.map((ref) => ref.id) : [];
|
|
43
42
|
|
|
44
43
|
useClearRestoreValue({
|
|
@@ -81,21 +80,19 @@ export function ArrayOfReferencesFieldBinding({
|
|
|
81
80
|
if (!entryValue)
|
|
82
81
|
return <div>Internal ERROR</div>;
|
|
83
82
|
return (
|
|
84
|
-
<div
|
|
85
|
-
onMouseEnter={() => setOnHover(true)}
|
|
86
|
-
onMouseMove={() => setOnHover(true)}
|
|
87
|
-
onMouseLeave={() => setOnHover(false)}>
|
|
88
83
|
<ReferencePreview
|
|
84
|
+
key={internalId}
|
|
89
85
|
disabled={!ofProperty.path}
|
|
90
86
|
previewProperties={ofProperty.previewProperties}
|
|
91
87
|
size={"medium"}
|
|
92
88
|
onClick={onEntryClick}
|
|
89
|
+
hover={!disabled}
|
|
93
90
|
reference={entryValue}
|
|
94
|
-
|
|
91
|
+
includeId={ofProperty.includeId}
|
|
92
|
+
includeEntityLink={ofProperty.includeEntityLink}
|
|
95
93
|
/>
|
|
96
|
-
</div>
|
|
97
94
|
);
|
|
98
|
-
}, [ofProperty.path, ofProperty.previewProperties,
|
|
95
|
+
}, [ofProperty.path, ofProperty.previewProperties, value]);
|
|
99
96
|
|
|
100
97
|
const title = (
|
|
101
98
|
<LabelWithIcon icon={getIconForProperty(property, "small")}
|
|
@@ -108,7 +105,7 @@ export function ArrayOfReferencesFieldBinding({
|
|
|
108
105
|
{!collection && <ErrorView
|
|
109
106
|
error={"The specified collection does not exist. Check console"}/>}
|
|
110
107
|
|
|
111
|
-
{collection &&
|
|
108
|
+
{collection && <div className={"group"}>
|
|
112
109
|
|
|
113
110
|
<FormikArrayContainer value={value}
|
|
114
111
|
addLabel={property.name ? "Add reference to " + property.name : "Add reference"}
|
|
@@ -126,7 +123,7 @@ export function ArrayOfReferencesFieldBinding({
|
|
|
126
123
|
onClick={onEntryClick}>
|
|
127
124
|
Edit {property.name}
|
|
128
125
|
</Button>
|
|
129
|
-
|
|
126
|
+
</div>}
|
|
130
127
|
</>;
|
|
131
128
|
|
|
132
129
|
return (
|
|
@@ -134,7 +131,8 @@ export function ArrayOfReferencesFieldBinding({
|
|
|
134
131
|
|
|
135
132
|
{!tableMode &&
|
|
136
133
|
<ExpandablePanel
|
|
137
|
-
|
|
134
|
+
titleClassName={fieldBackgroundMixin}
|
|
135
|
+
className={cls("px-2 md:px-4 pb-2 md:pb-4 pt-1 md:pt-2", fieldBackgroundMixin)}
|
|
138
136
|
initiallyExpanded={expanded}
|
|
139
137
|
title={title}>
|
|
140
138
|
{body}
|
|
@@ -8,7 +8,7 @@ import { EnumValuesChip } from "../../preview";
|
|
|
8
8
|
import { FieldProps, FormContext, PropertyFieldBindingProps, PropertyOrBuilder } from "../../types";
|
|
9
9
|
import { getDefaultValueFor, getIconForProperty, } from "../../util";
|
|
10
10
|
import { DEFAULT_ONE_OF_TYPE, DEFAULT_ONE_OF_VALUE } from "../../util/common";
|
|
11
|
-
import {
|
|
11
|
+
import { cls, ExpandablePanel, paperMixin, Select, SelectItem, Typography } from "@firecms/ui";
|
|
12
12
|
import { useClearRestoreValue } from "../useClearRestoreValue";
|
|
13
13
|
|
|
14
14
|
/**
|
|
@@ -193,7 +193,7 @@ function BlockEntry({
|
|
|
193
193
|
};
|
|
194
194
|
|
|
195
195
|
return (
|
|
196
|
-
<div className={
|
|
196
|
+
<div className={cls(paperMixin, "bg-transparent p-4 my-4 py-8")}>
|
|
197
197
|
|
|
198
198
|
<Field
|
|
199
199
|
name={typeFieldName}
|
|
@@ -43,7 +43,7 @@ export function DateTimeFieldBinding({
|
|
|
43
43
|
<>
|
|
44
44
|
<DateTimeField
|
|
45
45
|
value={internalValue}
|
|
46
|
-
onChange={(dateValue) => setValue(dateValue)}
|
|
46
|
+
onChange={(dateValue) => setValue(dateValue ?? null)}
|
|
47
47
|
size={"medium"}
|
|
48
48
|
mode={property.mode}
|
|
49
49
|
clearable={property.clearable}
|
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
ArrowDropDownIcon,
|
|
9
9
|
BooleanSwitchWithLabel,
|
|
10
10
|
Button,
|
|
11
|
-
|
|
11
|
+
cls,
|
|
12
12
|
DateTimeField,
|
|
13
13
|
defaultBorderMixin,
|
|
14
14
|
ExpandablePanel,
|
|
@@ -32,20 +32,20 @@ type MapEditViewRowState = [number, {
|
|
|
32
32
|
*
|
|
33
33
|
* @group Form fields
|
|
34
34
|
*/
|
|
35
|
-
export function KeyValueFieldBinding
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
35
|
+
export function KeyValueFieldBinding({
|
|
36
|
+
propertyKey,
|
|
37
|
+
value,
|
|
38
|
+
showError,
|
|
39
|
+
error,
|
|
40
|
+
disabled,
|
|
41
|
+
property,
|
|
42
|
+
setValue,
|
|
43
|
+
tableMode,
|
|
44
|
+
includeDescription,
|
|
45
|
+
underlyingValueHasChanged,
|
|
46
|
+
autoFocus,
|
|
47
|
+
context
|
|
48
|
+
}: FieldProps<Record<string, any>>) {
|
|
49
49
|
|
|
50
50
|
const expanded = (property.expanded === undefined ? true : property.expanded) || autoFocus;
|
|
51
51
|
|
|
@@ -316,7 +316,7 @@ function MapKeyValueRow<T extends Record<string, any>>({
|
|
|
316
316
|
}}/>;
|
|
317
317
|
} else if (dataType === "array") {
|
|
318
318
|
return <div
|
|
319
|
-
className={
|
|
319
|
+
className={cls(defaultBorderMixin, "ml-2 pl-2 border-l border-solid")}>
|
|
320
320
|
<ArrayContainer value={entryValue}
|
|
321
321
|
newDefaultEntry={""}
|
|
322
322
|
droppableId={rowId.toString()}
|
|
@@ -349,7 +349,7 @@ function MapKeyValueRow<T extends Record<string, any>>({
|
|
|
349
349
|
</div>;
|
|
350
350
|
} else if (dataType === "map") {
|
|
351
351
|
return <div
|
|
352
|
-
className={
|
|
352
|
+
className={cls(defaultBorderMixin, "ml-2 pl-2 border-l border-solid")}>
|
|
353
353
|
<MapEditView value={entryValue}
|
|
354
354
|
fieldName={fieldKey}
|
|
355
355
|
setValue={(updatedValue) => {
|
|
@@ -482,7 +482,7 @@ function ArrayKeyValueRow<T>({
|
|
|
482
482
|
Arrays of arrays are not supported.
|
|
483
483
|
</Typography>;
|
|
484
484
|
} else if (dataType === "map") {
|
|
485
|
-
return <div className={
|
|
485
|
+
return <div className={cls(defaultBorderMixin, "ml-2 pl-2 border-l border-solid")}>
|
|
486
486
|
<MapEditView value={entryValue}
|
|
487
487
|
setValue={(updatedValue) => {
|
|
488
488
|
setValue(updatedValue);
|
|
@@ -546,7 +546,7 @@ function getDataType(value: any): DataType | undefined {
|
|
|
546
546
|
return "array";
|
|
547
547
|
} else if (value instanceof Date) {
|
|
548
548
|
return "date";
|
|
549
|
-
} else if (value
|
|
549
|
+
} else if (value?.isEntityReference && value?.isEntityReference()) {
|
|
550
550
|
return "reference";
|
|
551
551
|
} else if (value instanceof GeoPoint) {
|
|
552
552
|
return "geopoint";
|
|
@@ -14,21 +14,21 @@ import { ExpandablePanel, InputLabel, Select, SelectItem } from "@firecms/ui";
|
|
|
14
14
|
* and tables to the specified properties.
|
|
15
15
|
* @group Form fields
|
|
16
16
|
*/
|
|
17
|
-
export function MapFieldBinding
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
17
|
+
export function MapFieldBinding({
|
|
18
|
+
propertyKey,
|
|
19
|
+
value,
|
|
20
|
+
showError,
|
|
21
|
+
error,
|
|
22
|
+
disabled,
|
|
23
|
+
property,
|
|
24
|
+
setValue,
|
|
25
|
+
partOfBlock,
|
|
26
|
+
tableMode,
|
|
27
|
+
includeDescription,
|
|
28
|
+
underlyingValueHasChanged,
|
|
29
|
+
autoFocus,
|
|
30
|
+
context
|
|
31
|
+
}: FieldProps<Record<string, any>>) {
|
|
32
32
|
|
|
33
33
|
const pickOnlySomeKeys = property.pickOnlySomeKeys || false;
|
|
34
34
|
const expanded = (property.expanded === undefined ? true : property.expanded) || autoFocus;
|
|
@@ -8,7 +8,7 @@ import { FieldHelperText, LabelWithIcon } from "../components";
|
|
|
8
8
|
import { FieldProps } from "../../types";
|
|
9
9
|
import { getIconForProperty } from "../../util";
|
|
10
10
|
import {
|
|
11
|
-
|
|
11
|
+
cls,
|
|
12
12
|
fieldBackgroundDisabledMixin,
|
|
13
13
|
fieldBackgroundHoverMixin,
|
|
14
14
|
fieldBackgroundMixin,
|
|
@@ -81,7 +81,7 @@ export function MarkdownFieldBinding({
|
|
|
81
81
|
</Typography>}
|
|
82
82
|
|
|
83
83
|
<MdEditor value={internalValue ?? ""}
|
|
84
|
-
className={
|
|
84
|
+
className={cls(fieldBackgroundMixin,
|
|
85
85
|
disabled ? fieldBackgroundDisabledMixin : fieldBackgroundHoverMixin,
|
|
86
86
|
"text-base")}
|
|
87
87
|
readOnly={disabled}
|
|
@@ -6,7 +6,7 @@ import { PropertyPreview } from "../../preview";
|
|
|
6
6
|
import { FieldHelperText, LabelWithIcon } from "../components";
|
|
7
7
|
import { ErrorBoundary } from "../../components";
|
|
8
8
|
import { getIconForProperty } from "../../util";
|
|
9
|
-
import {
|
|
9
|
+
import { cls, paperMixin } from "@firecms/ui";
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
12
|
*
|
|
@@ -47,13 +47,13 @@ export function ReadOnlyFieldBinding({
|
|
|
47
47
|
}
|
|
48
48
|
|
|
49
49
|
<div
|
|
50
|
-
className={
|
|
50
|
+
className={cls(paperMixin, "min-h-14 p-4 md:p-6 overflow-x-scroll no-scrollbar")}>
|
|
51
51
|
|
|
52
52
|
<ErrorBoundary>
|
|
53
53
|
<PropertyPreview propertyKey={propertyKey}
|
|
54
54
|
value={value}
|
|
55
55
|
property={property}
|
|
56
|
-
|
|
56
|
+
// entity={entity}
|
|
57
57
|
size={"medium"}/>
|
|
58
58
|
</ErrorBoundary>
|
|
59
59
|
|
|
@@ -27,19 +27,19 @@ export function ReferenceFieldBinding<M extends Record<string, any>>(props: Fiel
|
|
|
27
27
|
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
-
function ReferenceFieldBindingInternal
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
30
|
+
function ReferenceFieldBindingInternal({
|
|
31
|
+
value,
|
|
32
|
+
setValue,
|
|
33
|
+
error,
|
|
34
|
+
showError,
|
|
35
|
+
isSubmitting,
|
|
36
|
+
disabled,
|
|
37
|
+
touched,
|
|
38
|
+
autoFocus,
|
|
39
|
+
property,
|
|
40
|
+
includeDescription,
|
|
41
|
+
context
|
|
42
|
+
}: FieldProps<EntityReference>) {
|
|
43
43
|
if (!property.path) {
|
|
44
44
|
throw new Error("Property path is required for ReferenceFieldBinding");
|
|
45
45
|
}
|
|
@@ -95,9 +95,12 @@ function ReferenceFieldBindingInternal<M extends Record<string, any>>({
|
|
|
95
95
|
{value && <ReferencePreview
|
|
96
96
|
disabled={!property.path}
|
|
97
97
|
previewProperties={property.previewProperties}
|
|
98
|
+
hover={!disabled}
|
|
98
99
|
size={"medium"}
|
|
99
100
|
onClick={disabled || isSubmitting ? undefined : onEntryClick}
|
|
100
101
|
reference={value}
|
|
102
|
+
includeEntityLink={property.includeEntityLink}
|
|
103
|
+
includeId={property.includeId}
|
|
101
104
|
/>}
|
|
102
105
|
|
|
103
106
|
{!value && <div className="justify-center text-left">
|
|
@@ -4,7 +4,7 @@ import { EnumType, FieldProps } from "../../types";
|
|
|
4
4
|
import { FieldHelperText, LabelWithIcon } from "../components";
|
|
5
5
|
import { EnumValuesChip } from "../../preview";
|
|
6
6
|
import { getIconForProperty } from "../../util";
|
|
7
|
-
import { ClearIcon,
|
|
7
|
+
import { ClearIcon, cls, IconButton, Select, SelectItem } from "@firecms/ui";
|
|
8
8
|
import { useClearRestoreValue } from "../useClearRestoreValue";
|
|
9
9
|
|
|
10
10
|
type SelectProps<T extends EnumType> = FieldProps<T>;
|
|
@@ -48,10 +48,10 @@ export function SelectFieldBinding<T extends EnumType>({
|
|
|
48
48
|
<>
|
|
49
49
|
|
|
50
50
|
<Select
|
|
51
|
-
value={value ? value.toString() : ""}
|
|
51
|
+
value={value !== undefined && value != null ? value.toString() : ""}
|
|
52
52
|
disabled={disabled}
|
|
53
53
|
position="item-aligned"
|
|
54
|
-
inputClassName={
|
|
54
|
+
inputClassName={cls("w-full")}
|
|
55
55
|
label={<LabelWithIcon icon={getIconForProperty(property, "small")}
|
|
56
56
|
required={property.validation?.required}
|
|
57
57
|
title={property.name}
|
|
@@ -3,6 +3,7 @@ import React, { useCallback } from "react";
|
|
|
3
3
|
import {
|
|
4
4
|
ArrayProperty,
|
|
5
5
|
Entity,
|
|
6
|
+
EntityCollection,
|
|
6
7
|
FieldProps,
|
|
7
8
|
ResolvedArrayProperty,
|
|
8
9
|
ResolvedStringProperty,
|
|
@@ -10,16 +11,16 @@ import {
|
|
|
10
11
|
} from "../../types";
|
|
11
12
|
import { useDropzone } from "react-dropzone";
|
|
12
13
|
import { PreviewSize } from "../../preview";
|
|
13
|
-
import { FieldHelperText,LabelWithIcon } from "../components";
|
|
14
|
+
import { FieldHelperText, LabelWithIcon } from "../components";
|
|
14
15
|
|
|
15
16
|
import { getIconForProperty, isReadOnly } from "../../util";
|
|
16
|
-
import {
|
|
17
|
+
import { useSnackbarController, useStorageSource } from "../../hooks";
|
|
17
18
|
import { DragDropContext, Draggable, Droppable } from "@hello-pangea/dnd";
|
|
18
19
|
import { StorageFieldItem, useStorageUploadController } from "../../util/useStorageUploadController";
|
|
19
20
|
import { StorageUploadProgress } from "../components/StorageUploadProgress";
|
|
20
21
|
import { StorageItemPreview } from "../components/StorageItemPreview";
|
|
21
22
|
import {
|
|
22
|
-
|
|
23
|
+
cls,
|
|
23
24
|
fieldBackgroundDisabledMixin,
|
|
24
25
|
fieldBackgroundHoverMixin,
|
|
25
26
|
fieldBackgroundMixin,
|
|
@@ -55,13 +56,13 @@ export function StorageUploadFieldBinding({
|
|
|
55
56
|
property,
|
|
56
57
|
includeDescription,
|
|
57
58
|
context,
|
|
58
|
-
isSubmitting
|
|
59
|
+
isSubmitting,
|
|
59
60
|
}: StorageUploadFieldProps) {
|
|
60
61
|
|
|
61
62
|
if (!context.entityId)
|
|
62
63
|
throw new Error("StorageUploadFieldBinding: Entity id is null");
|
|
63
64
|
|
|
64
|
-
const storageSource = useStorageSource();
|
|
65
|
+
const storageSource = useStorageSource(context.collection);
|
|
65
66
|
const disabled = isReadOnly(property) || !!property.disabled || isSubmitting;
|
|
66
67
|
|
|
67
68
|
const {
|
|
@@ -108,6 +109,7 @@ export function StorageUploadFieldBinding({
|
|
|
108
109
|
|
|
109
110
|
<StorageUpload
|
|
110
111
|
value={internalValue}
|
|
112
|
+
collection={context.collection}
|
|
111
113
|
name={propertyKey}
|
|
112
114
|
disabled={disabled}
|
|
113
115
|
autoFocus={autoFocus}
|
|
@@ -133,6 +135,7 @@ export function StorageUploadFieldBinding({
|
|
|
133
135
|
|
|
134
136
|
function FileDropComponent({
|
|
135
137
|
storage,
|
|
138
|
+
collection,
|
|
136
139
|
disabled,
|
|
137
140
|
isDraggingOver,
|
|
138
141
|
onFilesAdded,
|
|
@@ -151,6 +154,7 @@ function FileDropComponent({
|
|
|
151
154
|
helpText
|
|
152
155
|
}: {
|
|
153
156
|
storage: StorageConfig,
|
|
157
|
+
collection: EntityCollection,
|
|
154
158
|
disabled: boolean,
|
|
155
159
|
isDraggingOver: boolean,
|
|
156
160
|
droppableProvided: any,
|
|
@@ -199,7 +203,7 @@ function FileDropComponent({
|
|
|
199
203
|
return (
|
|
200
204
|
<div
|
|
201
205
|
{...getRootProps()}
|
|
202
|
-
className={
|
|
206
|
+
className={cls(
|
|
203
207
|
fieldBackgroundMixin,
|
|
204
208
|
disabled ? fieldBackgroundDisabledMixin : fieldBackgroundHoverMixin,
|
|
205
209
|
dropZoneClasses,
|
|
@@ -216,7 +220,7 @@ function FileDropComponent({
|
|
|
216
220
|
<div
|
|
217
221
|
{...droppableProvided.droppableProps}
|
|
218
222
|
ref={droppableProvided.innerRef}
|
|
219
|
-
className={
|
|
223
|
+
className={cls("flex items-center p-1 no-scrollbar",
|
|
220
224
|
multipleFilesSupported && internalValue.length ? "overflow-auto" : "",
|
|
221
225
|
multipleFilesSupported && internalValue.length ? "min-h-[180px]" : "min-h-[250px]"
|
|
222
226
|
)}
|
|
@@ -231,6 +235,7 @@ function FileDropComponent({
|
|
|
231
235
|
if (entry.storagePathOrDownloadUrl) {
|
|
232
236
|
child = (
|
|
233
237
|
<StorageItemPreview
|
|
238
|
+
collection={collection}
|
|
234
239
|
name={`storage_preview_${entry.storagePathOrDownloadUrl}`}
|
|
235
240
|
property={property}
|
|
236
241
|
disabled={disabled}
|
|
@@ -263,7 +268,7 @@ function FileDropComponent({
|
|
|
263
268
|
ref={provided.innerRef}
|
|
264
269
|
{...provided.draggableProps}
|
|
265
270
|
{...provided.dragHandleProps}
|
|
266
|
-
className={
|
|
271
|
+
className={cls(focusedMixin, "rounded-md")}
|
|
267
272
|
style={{
|
|
268
273
|
...provided.draggableProps.style
|
|
269
274
|
}}
|
|
@@ -294,6 +299,7 @@ function FileDropComponent({
|
|
|
294
299
|
|
|
295
300
|
export interface StorageUploadProps {
|
|
296
301
|
value: StorageFieldItem[];
|
|
302
|
+
collection: EntityCollection;
|
|
297
303
|
setInternalValue: (v: StorageFieldItem[]) => void;
|
|
298
304
|
name: string;
|
|
299
305
|
property: ResolvedStringProperty | ResolvedArrayProperty<string[]>;
|
|
@@ -309,6 +315,7 @@ export interface StorageUploadProps {
|
|
|
309
315
|
}
|
|
310
316
|
|
|
311
317
|
export function StorageUpload({
|
|
318
|
+
collection,
|
|
312
319
|
property,
|
|
313
320
|
name,
|
|
314
321
|
value,
|
|
@@ -321,7 +328,7 @@ export function StorageUpload({
|
|
|
321
328
|
autoFocus,
|
|
322
329
|
storage,
|
|
323
330
|
entity,
|
|
324
|
-
storagePathBuilder
|
|
331
|
+
storagePathBuilder,
|
|
325
332
|
}: StorageUploadProps) {
|
|
326
333
|
|
|
327
334
|
if (multipleFilesSupported) {
|
|
@@ -401,6 +408,7 @@ export function StorageUpload({
|
|
|
401
408
|
className="rounded"
|
|
402
409
|
>
|
|
403
410
|
<StorageItemPreview
|
|
411
|
+
collection={collection}
|
|
404
412
|
name={`storage_preview_${entry.storagePathOrDownloadUrl}`}
|
|
405
413
|
property={renderProperty}
|
|
406
414
|
disabled={true}
|
|
@@ -414,6 +422,7 @@ export function StorageUpload({
|
|
|
414
422
|
>
|
|
415
423
|
{(provided, snapshot) => {
|
|
416
424
|
return <FileDropComponent storage={storage}
|
|
425
|
+
collection={collection}
|
|
417
426
|
disabled={disabled}
|
|
418
427
|
isDraggingOver={snapshot.isDraggingOver}
|
|
419
428
|
droppableProvided={provided}
|
|
@@ -7,7 +7,7 @@ import { getIconForProperty } from "../../util";
|
|
|
7
7
|
import { PropertyPreview } from "../../preview";
|
|
8
8
|
import { useClearRestoreValue } from "../useClearRestoreValue";
|
|
9
9
|
|
|
10
|
-
interface
|
|
10
|
+
interface TextFieldBindingProps<T extends string | number> extends FieldProps<T> {
|
|
11
11
|
allowInfinity?: boolean
|
|
12
12
|
}
|
|
13
13
|
|
|
@@ -18,6 +18,7 @@ interface TextFieldProps<T extends string | number> extends FieldProps<T> {
|
|
|
18
18
|
* @group Form fields
|
|
19
19
|
*/
|
|
20
20
|
export function TextFieldBinding<T extends string | number>({
|
|
21
|
+
context,
|
|
21
22
|
propertyKey,
|
|
22
23
|
value,
|
|
23
24
|
setValue,
|
|
@@ -27,7 +28,7 @@ export function TextFieldBinding<T extends string | number>({
|
|
|
27
28
|
autoFocus,
|
|
28
29
|
property,
|
|
29
30
|
includeDescription,
|
|
30
|
-
}:
|
|
31
|
+
}: TextFieldBindingProps<T>) {
|
|
31
32
|
|
|
32
33
|
let multiline: boolean | undefined;
|
|
33
34
|
let url: boolean | PreviewType | undefined;
|
|
@@ -96,9 +97,10 @@ export function TextFieldBinding<T extends string | number>({
|
|
|
96
97
|
{url && <Collapse
|
|
97
98
|
className="mt-1 ml-1"
|
|
98
99
|
in={Boolean(value)}>
|
|
99
|
-
<PropertyPreview
|
|
100
|
-
|
|
101
|
-
|
|
100
|
+
<PropertyPreview
|
|
101
|
+
value={value}
|
|
102
|
+
property={property}
|
|
103
|
+
size={"medium"}/>
|
|
102
104
|
</Collapse>}
|
|
103
105
|
|
|
104
106
|
</>
|