@firecms/core 3.0.0-canary.4 → 3.0.0-canary.41
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/PropertyTableCell.d.ts +2 -2
- package/dist/components/EntityCollectionTable/internal/CollectionTableToolbar.d.ts +1 -4
- 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 +25 -7
- package/dist/components/EntityView.d.ts +11 -0
- package/dist/components/FieldCaption.d.ts +5 -0
- 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/VirtualTable/VirtualTableProps.d.ts +1 -1
- package/dist/components/index.d.ts +4 -3
- package/dist/contexts/AuthControllerContext.d.ts +1 -1
- package/dist/{internal/EntityView.d.ts → core/EntityEditView.d.ts} +2 -2
- package/dist/core/SideEntityView.d.ts +7 -0
- package/dist/core/index.d.ts +0 -2
- 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/components/index.d.ts +1 -0
- 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/index.d.ts +1 -0
- package/dist/form/validation.d.ts +1 -1
- package/dist/hooks/data/delete.d.ts +2 -2
- package/dist/hooks/data/save.d.ts +1 -1
- package/dist/hooks/data/useDataSource.d.ts +2 -2
- package/dist/hooks/data/useEntityFetch.d.ts +3 -3
- package/dist/hooks/index.d.ts +3 -1
- package/dist/{core → hooks}/useBuildModeController.d.ts +1 -1
- 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 +25 -0
- package/dist/index.es.js +8258 -7767
- 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 +4 -0
- 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 +1 -7
- package/dist/types/analytics.d.ts +1 -1
- package/dist/types/auth.d.ts +37 -1
- package/dist/types/collections.d.ts +22 -5
- package/dist/types/datasource.d.ts +1 -1
- package/dist/types/entities.d.ts +1 -1
- 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 -0
- package/dist/types/navigation.d.ts +14 -13
- package/dist/types/permissions.d.ts +5 -1
- package/dist/types/plugins.d.ts +20 -20
- package/dist/types/properties.d.ts +2 -2
- 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/icons.d.ts +8 -2
- package/dist/util/navigation_utils.d.ts +2 -2
- package/dist/util/permissions.d.ts +4 -4
- package/dist/util/references.d.ts +4 -2
- package/dist/util/resolutions.d.ts +6 -6
- package/dist/util/useTraceUpdate.d.ts +1 -0
- package/package.json +27 -24
- package/src/components/ClearFilterSortButton.tsx +41 -0
- package/src/components/DeleteEntityDialog.tsx +4 -4
- package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +2 -2
- package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +268 -277
- package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +1 -1
- package/src/components/EntityCollectionTable/PropertyTableCell.tsx +13 -13
- package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +9 -16
- package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +3 -3
- package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +27 -32
- package/src/components/EntityCollectionTable/internal/default_entity_actions.tsx +9 -5
- package/src/components/EntityCollectionView/EntityCollectionView.tsx +51 -52
- 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 +207 -70
- package/src/components/EntityView.tsx +84 -0
- package/src/components/FieldCaption.tsx +14 -0
- package/src/components/FireCMSAppBar.tsx +8 -0
- package/src/components/HomePage/DefaultHomePage.tsx +14 -10
- 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/ReferenceTable/ReferenceSelectionTable.tsx +3 -4
- package/src/components/ReferenceWidget.tsx +4 -4
- package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +23 -8
- package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +35 -24
- package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +35 -15
- package/src/components/VirtualTable/VirtualTable.tsx +17 -7
- package/src/components/VirtualTable/VirtualTableProps.tsx +1 -1
- package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +1 -1
- package/src/components/common/useDataSourceEntityCollectionTableController.tsx +1 -1
- package/src/components/index.tsx +4 -3
- package/src/contexts/AuthControllerContext.tsx +1 -1
- package/src/core/Drawer.tsx +66 -39
- package/src/{internal/EntityView.tsx → core/EntityEditView.tsx} +22 -39
- package/src/core/EntitySidePanel.tsx +2 -2
- package/src/core/FireCMS.tsx +18 -3
- package/src/core/NavigationRoutes.tsx +8 -0
- package/src/core/SideEntityView.tsx +38 -0
- package/src/core/field_configs.tsx +1 -2
- package/src/core/index.tsx +0 -2
- package/src/form/EntityForm.tsx +20 -12
- package/src/form/components/StorageItemPreview.tsx +5 -3
- package/src/form/components/StorageUploadProgress.tsx +6 -5
- package/src/form/components/index.tsx +1 -0
- package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +2 -3
- package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +12 -15
- package/src/form/field_bindings/BlockFieldBinding.tsx +2 -3
- package/src/form/field_bindings/DateTimeFieldBinding.tsx +4 -4
- package/src/form/field_bindings/KeyValueFieldBinding.tsx +18 -18
- package/src/form/field_bindings/MapFieldBinding.tsx +17 -17
- package/src/form/field_bindings/MarkdownFieldBinding.tsx +1 -2
- package/src/form/field_bindings/MultiSelectBinding.tsx +2 -3
- package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +3 -3
- package/src/form/field_bindings/ReferenceFieldBinding.tsx +5 -3
- package/src/form/field_bindings/RepeatFieldBinding.tsx +3 -3
- package/src/form/field_bindings/SelectFieldBinding.tsx +2 -3
- package/src/form/field_bindings/StorageUploadFieldBinding.tsx +15 -6
- package/src/form/field_bindings/SwitchFieldBinding.tsx +2 -3
- package/src/form/field_bindings/TextFieldBinding.tsx +10 -9
- package/src/form/index.tsx +1 -0
- package/src/form/validation.ts +3 -4
- package/src/hooks/data/delete.ts +3 -3
- package/src/hooks/data/save.ts +1 -1
- 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 +5 -1
- package/src/{core → hooks}/useBuildLocalConfigurationPersistence.tsx +9 -10
- package/src/{core → hooks}/useBuildModeController.tsx +12 -6
- package/src/hooks/useBuildNavigationController.tsx +197 -79
- package/src/hooks/useProjectLog.tsx +17 -7
- package/src/hooks/useReferenceDialog.tsx +2 -2
- package/src/hooks/useStorageSource.tsx +7 -2
- package/src/hooks/useValidateAuthenticator.tsx +135 -0
- package/src/internal/useBuildDataSource.ts +6 -1
- package/src/internal/useBuildSideEntityController.tsx +18 -12
- package/src/preview/PropertyPreview.tsx +1 -1
- package/src/preview/PropertyPreviewProps.tsx +1 -11
- package/src/preview/components/BooleanPreview.tsx +19 -4
- package/src/preview/components/EnumValuesChip.tsx +1 -1
- package/src/preview/components/ReferencePreview.tsx +55 -147
- 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 +24 -5
- package/src/types/datasource.ts +1 -1
- package/src/types/entities.ts +1 -1
- package/src/types/entity_actions.tsx +4 -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 -0
- package/src/types/navigation.ts +17 -16
- package/src/types/permissions.ts +6 -1
- package/src/types/plugins.tsx +26 -28
- package/src/types/properties.ts +3 -2
- 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/icons.tsx +11 -3
- package/src/util/navigation_utils.ts +6 -6
- package/src/util/permissions.ts +11 -8
- package/src/util/references.ts +36 -5
- package/src/util/strings.ts +2 -2
- package/src/util/useTraceUpdate.tsx +2 -1
- package/dist/internal/useLocaleConfig.d.ts +0 -1
- package/src/components/HomePage/NavigationCollectionCard.tsx +0 -146
- package/src/internal/useLocaleConfig.tsx +0 -18
- /package/dist/{components → form/components}/LabelWithIcon.d.ts +0 -0
- /package/dist/{core → hooks}/useBuildLocalConfigurationPersistence.d.ts +0 -0
- /package/src/{components → form/components}/LabelWithIcon.tsx +0 -0
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import React, { useCallback, useMemo } from "react";
|
|
2
2
|
import { Entity, EntityCollection, EntityReference, FieldProps, ResolvedProperty } from "../../types";
|
|
3
3
|
import { ReferencePreview } from "../../preview";
|
|
4
|
-
import { FieldHelperText, FormikArrayContainer } from "../components";
|
|
5
|
-
import { ErrorView
|
|
4
|
+
import { FieldHelperText, FormikArrayContainer, LabelWithIcon } from "../components";
|
|
5
|
+
import { ErrorView } from "../../components";
|
|
6
6
|
import { getIconForProperty, getReferenceFrom } from "../../util";
|
|
7
7
|
|
|
8
|
-
import {
|
|
9
|
-
import { Button, ExpandablePanel } from "@firecms/ui";
|
|
8
|
+
import { useNavigationController, useReferenceDialog } from "../../hooks";
|
|
9
|
+
import { Button, cn, ExpandablePanel, fieldBackgroundMixin } from "@firecms/ui";
|
|
10
|
+
import { useClearRestoreValue } from "../useClearRestoreValue";
|
|
10
11
|
|
|
11
12
|
type ArrayOfReferencesFieldProps = FieldProps<EntityReference[]>;
|
|
12
13
|
|
|
@@ -37,7 +38,6 @@ export function ArrayOfReferencesFieldBinding({
|
|
|
37
38
|
}
|
|
38
39
|
|
|
39
40
|
const expanded = property.expanded === undefined ? true : property.expanded;
|
|
40
|
-
const [onHover, setOnHover] = React.useState(false);
|
|
41
41
|
const selectedEntityIds = value && Array.isArray(value) ? value.map((ref) => ref.id) : [];
|
|
42
42
|
|
|
43
43
|
useClearRestoreValue({
|
|
@@ -80,21 +80,17 @@ export function ArrayOfReferencesFieldBinding({
|
|
|
80
80
|
if (!entryValue)
|
|
81
81
|
return <div>Internal ERROR</div>;
|
|
82
82
|
return (
|
|
83
|
-
<div
|
|
84
|
-
onMouseEnter={() => setOnHover(true)}
|
|
85
|
-
onMouseMove={() => setOnHover(true)}
|
|
86
|
-
onMouseLeave={() => setOnHover(false)}>
|
|
87
83
|
<ReferencePreview
|
|
84
|
+
key={internalId}
|
|
88
85
|
disabled={!ofProperty.path}
|
|
89
86
|
previewProperties={ofProperty.previewProperties}
|
|
90
87
|
size={"medium"}
|
|
91
88
|
onClick={onEntryClick}
|
|
89
|
+
hover={!disabled}
|
|
92
90
|
reference={entryValue}
|
|
93
|
-
onHover={onHover}
|
|
94
91
|
/>
|
|
95
|
-
</div>
|
|
96
92
|
);
|
|
97
|
-
}, [ofProperty.path, ofProperty.previewProperties,
|
|
93
|
+
}, [ofProperty.path, ofProperty.previewProperties, value]);
|
|
98
94
|
|
|
99
95
|
const title = (
|
|
100
96
|
<LabelWithIcon icon={getIconForProperty(property, "small")}
|
|
@@ -107,7 +103,7 @@ export function ArrayOfReferencesFieldBinding({
|
|
|
107
103
|
{!collection && <ErrorView
|
|
108
104
|
error={"The specified collection does not exist. Check console"}/>}
|
|
109
105
|
|
|
110
|
-
{collection &&
|
|
106
|
+
{collection && <div className={"group"}>
|
|
111
107
|
|
|
112
108
|
<FormikArrayContainer value={value}
|
|
113
109
|
addLabel={property.name ? "Add reference to " + property.name : "Add reference"}
|
|
@@ -125,7 +121,7 @@ export function ArrayOfReferencesFieldBinding({
|
|
|
125
121
|
onClick={onEntryClick}>
|
|
126
122
|
Edit {property.name}
|
|
127
123
|
</Button>
|
|
128
|
-
|
|
124
|
+
</div>}
|
|
129
125
|
</>;
|
|
130
126
|
|
|
131
127
|
return (
|
|
@@ -133,7 +129,8 @@ export function ArrayOfReferencesFieldBinding({
|
|
|
133
129
|
|
|
134
130
|
{!tableMode &&
|
|
135
131
|
<ExpandablePanel
|
|
136
|
-
|
|
132
|
+
titleClassName={fieldBackgroundMixin}
|
|
133
|
+
className={cn("px-2 md:px-4 pb-2 md:pb-4 pt-1 md:pt-2", fieldBackgroundMixin)}
|
|
137
134
|
initiallyExpanded={expanded}
|
|
138
135
|
title={title}>
|
|
139
136
|
{body}
|
|
@@ -2,15 +2,14 @@ import React, { useCallback, useEffect, useState } from "react";
|
|
|
2
2
|
|
|
3
3
|
import { Field, useFormex } from "@firecms/formex";
|
|
4
4
|
|
|
5
|
-
import { FieldHelperText, FormikArrayContainer } from "../components";
|
|
6
|
-
import { LabelWithIcon } from "../../components";
|
|
7
|
-
import { useClearRestoreValue } from "../../hooks";
|
|
5
|
+
import { FieldHelperText, FormikArrayContainer, LabelWithIcon } from "../components";
|
|
8
6
|
import { PropertyFieldBinding } from "../PropertyFieldBinding";
|
|
9
7
|
import { EnumValuesChip } from "../../preview";
|
|
10
8
|
import { FieldProps, FormContext, PropertyFieldBindingProps, PropertyOrBuilder } from "../../types";
|
|
11
9
|
import { getDefaultValueFor, getIconForProperty, } from "../../util";
|
|
12
10
|
import { DEFAULT_ONE_OF_TYPE, DEFAULT_ONE_OF_VALUE } from "../../util/common";
|
|
13
11
|
import { cn, ExpandablePanel, paperMixin, Select, SelectItem, Typography } from "@firecms/ui";
|
|
12
|
+
import { useClearRestoreValue } from "../useClearRestoreValue";
|
|
14
13
|
|
|
15
14
|
/**
|
|
16
15
|
* If the `oneOf` property is specified, this fields render each array entry as
|
|
@@ -2,11 +2,11 @@ import React from "react";
|
|
|
2
2
|
|
|
3
3
|
import { FieldProps } from "../../types";
|
|
4
4
|
|
|
5
|
-
import { FieldHelperText } from "../components";
|
|
6
|
-
import {
|
|
7
|
-
import { useClearRestoreValue, useCustomizationController } from "../../hooks";
|
|
5
|
+
import { FieldHelperText, LabelWithIcon } from "../components";
|
|
6
|
+
import { useCustomizationController } from "../../hooks";
|
|
8
7
|
import { getIconForProperty } from "../../util";
|
|
9
8
|
import { DateTimeField } from "@firecms/ui";
|
|
9
|
+
import { useClearRestoreValue } from "../useClearRestoreValue";
|
|
10
10
|
|
|
11
11
|
type DateTimeFieldProps = FieldProps<Date>;
|
|
12
12
|
|
|
@@ -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}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import React, { useEffect, useState } from "react";
|
|
2
|
-
import { DataType,
|
|
2
|
+
import { DataType, FieldProps, GeoPoint } from "../../types";
|
|
3
3
|
|
|
4
|
-
import { ArrayContainer
|
|
5
|
-
import { FieldHelperText } from "../components";
|
|
4
|
+
import { ArrayContainer } from "../../components";
|
|
5
|
+
import { FieldHelperText, LabelWithIcon } from "../components";
|
|
6
6
|
import {
|
|
7
7
|
AddIcon,
|
|
8
8
|
ArrowDropDownIcon,
|
|
@@ -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
|
|
|
@@ -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";
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { FieldProps, Properties, ResolvedProperties } from "../../types";
|
|
3
3
|
|
|
4
|
-
import { ErrorBoundary
|
|
4
|
+
import { ErrorBoundary } from "../../components";
|
|
5
5
|
import { getIconForProperty, isHidden, pick } from "../../util";
|
|
6
|
-
import { FieldHelperText } from "../components";
|
|
6
|
+
import { FieldHelperText, LabelWithIcon } from "../components";
|
|
7
7
|
import { PropertyFieldBinding } from "../PropertyFieldBinding";
|
|
8
8
|
import { ExpandablePanel, InputLabel, Select, SelectItem } from "@firecms/ui";
|
|
9
9
|
|
|
@@ -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;
|
|
@@ -4,8 +4,7 @@ import React, { useDeferredValue, useEffect, useRef } from "react";
|
|
|
4
4
|
import MarkdownIt from "markdown-it";
|
|
5
5
|
import MdEditor, { Plugins } from "react-markdown-editor-lite";
|
|
6
6
|
|
|
7
|
-
import { FieldHelperText } from "../components";
|
|
8
|
-
import { LabelWithIcon } from "../../components";
|
|
7
|
+
import { FieldHelperText, LabelWithIcon } from "../components";
|
|
9
8
|
import { FieldProps } from "../../types";
|
|
10
9
|
import { getIconForProperty } from "../../util";
|
|
11
10
|
import {
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import React, { useCallback } from "react";
|
|
2
2
|
|
|
3
3
|
import { EnumType, FieldProps, ResolvedProperty } from "../../types";
|
|
4
|
-
import { FieldHelperText } from "../components";
|
|
5
|
-
import { LabelWithIcon } from "../../components";
|
|
6
|
-
import { useClearRestoreValue } from "../../hooks";
|
|
4
|
+
import { FieldHelperText, LabelWithIcon } from "../components";
|
|
7
5
|
import { EnumValuesChip } from "../../preview";
|
|
8
6
|
import { enumToObjectEntries, getIconForProperty, getLabelOrConfigFrom } from "../../util";
|
|
9
7
|
import { CloseIcon, MultiSelect, MultiSelectItem } from "@firecms/ui";
|
|
8
|
+
import { useClearRestoreValue } from "../useClearRestoreValue";
|
|
10
9
|
|
|
11
10
|
/**
|
|
12
11
|
* This fields renders a dropdown with multiple selection.
|
|
@@ -3,8 +3,8 @@ import React from "react";
|
|
|
3
3
|
import { Entity, FieldProps } from "../../types";
|
|
4
4
|
|
|
5
5
|
import { PropertyPreview } from "../../preview";
|
|
6
|
-
import { FieldHelperText } from "../components";
|
|
7
|
-
import { ErrorBoundary
|
|
6
|
+
import { FieldHelperText, LabelWithIcon } from "../components";
|
|
7
|
+
import { ErrorBoundary } from "../../components";
|
|
8
8
|
import { getIconForProperty } from "../../util";
|
|
9
9
|
import { cn, paperMixin } from "@firecms/ui";
|
|
10
10
|
|
|
@@ -53,7 +53,7 @@ export function ReadOnlyFieldBinding({
|
|
|
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
|
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import React, { useCallback, useMemo } from "react";
|
|
2
2
|
|
|
3
3
|
import { Entity, EntityCollection, EntityReference, FieldProps } from "../../types";
|
|
4
|
-
import {
|
|
4
|
+
import { useNavigationController, useReferenceDialog } from "../../hooks";
|
|
5
5
|
import { ReadOnlyFieldBinding } from "./ReadOnlyFieldBinding";
|
|
6
|
-
import { FieldHelperText } from "../components";
|
|
7
|
-
import { ErrorView
|
|
6
|
+
import { FieldHelperText, LabelWithIcon } from "../components";
|
|
7
|
+
import { ErrorView } from "../../components";
|
|
8
8
|
import { ReferencePreview } from "../../preview";
|
|
9
9
|
import { getIconForProperty, getReferenceFrom } from "../../util";
|
|
10
10
|
import { Button } from "@firecms/ui";
|
|
11
|
+
import { useClearRestoreValue } from "../useClearRestoreValue";
|
|
11
12
|
|
|
12
13
|
/**
|
|
13
14
|
* Field that opens a reference selection dialog.
|
|
@@ -94,6 +95,7 @@ function ReferenceFieldBindingInternal<M extends Record<string, any>>({
|
|
|
94
95
|
{value && <ReferencePreview
|
|
95
96
|
disabled={!property.path}
|
|
96
97
|
previewProperties={property.previewProperties}
|
|
98
|
+
hover={!disabled}
|
|
97
99
|
size={"medium"}
|
|
98
100
|
onClick={disabled || isSubmitting ? undefined : onEntryClick}
|
|
99
101
|
reference={value}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import React, { useState } from "react";
|
|
2
2
|
import { CMSType, FieldProps, ResolvedProperty } from "../../types";
|
|
3
|
-
import { FieldHelperText, FormikArrayContainer } from "../components";
|
|
4
|
-
import { ErrorBoundary
|
|
5
|
-
import { useClearRestoreValue } from "../../hooks";
|
|
3
|
+
import { FieldHelperText, FormikArrayContainer, LabelWithIcon } from "../components";
|
|
4
|
+
import { ErrorBoundary } from "../../components";
|
|
6
5
|
import { getIconForProperty } from "../../util";
|
|
7
6
|
import { PropertyFieldBinding } from "../PropertyFieldBinding";
|
|
8
7
|
import { ExpandablePanel } from "@firecms/ui";
|
|
8
|
+
import { useClearRestoreValue } from "../useClearRestoreValue";
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
11
|
* Generic array field that allows reordering and renders the child property
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import React, { useCallback } from "react";
|
|
2
2
|
|
|
3
3
|
import { EnumType, FieldProps } from "../../types";
|
|
4
|
-
import { FieldHelperText } from "../components";
|
|
5
|
-
import { LabelWithIcon } from "../../components";
|
|
6
|
-
import { useClearRestoreValue } from "../../hooks";
|
|
4
|
+
import { FieldHelperText, LabelWithIcon } from "../components";
|
|
7
5
|
import { EnumValuesChip } from "../../preview";
|
|
8
6
|
import { getIconForProperty } from "../../util";
|
|
9
7
|
import { ClearIcon, cn, IconButton, Select, SelectItem } from "@firecms/ui";
|
|
8
|
+
import { useClearRestoreValue } from "../useClearRestoreValue";
|
|
10
9
|
|
|
11
10
|
type SelectProps<T extends EnumType> = FieldProps<T>;
|
|
12
11
|
|
|
@@ -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,11 +11,10 @@ import {
|
|
|
10
11
|
} from "../../types";
|
|
11
12
|
import { useDropzone } from "react-dropzone";
|
|
12
13
|
import { PreviewSize } from "../../preview";
|
|
13
|
-
import { FieldHelperText } from "../components";
|
|
14
|
-
import { LabelWithIcon } from "../../components";
|
|
14
|
+
import { FieldHelperText, LabelWithIcon } from "../components";
|
|
15
15
|
|
|
16
16
|
import { getIconForProperty, isReadOnly } from "../../util";
|
|
17
|
-
import {
|
|
17
|
+
import { useSnackbarController, useStorageSource } from "../../hooks";
|
|
18
18
|
import { DragDropContext, Draggable, Droppable } from "@hello-pangea/dnd";
|
|
19
19
|
import { StorageFieldItem, useStorageUploadController } from "../../util/useStorageUploadController";
|
|
20
20
|
import { StorageUploadProgress } from "../components/StorageUploadProgress";
|
|
@@ -27,6 +27,7 @@ import {
|
|
|
27
27
|
focusedMixin,
|
|
28
28
|
Typography
|
|
29
29
|
} from "@firecms/ui";
|
|
30
|
+
import { useClearRestoreValue } from "../useClearRestoreValue";
|
|
30
31
|
|
|
31
32
|
const dropZoneClasses = "box-border relative pt-[2px] items-center border border-transparent min-h-[254px] outline-none rounded-md duration-200 ease-[cubic-bezier(0.4,0,0.2,1)] focus:border-primary-solid";
|
|
32
33
|
const disabledClasses = "border-dotted-gray"
|
|
@@ -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,
|
|
@@ -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}
|
|
@@ -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}
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
|
|
3
3
|
import { FieldProps } from "../../types";
|
|
4
|
-
import { useClearRestoreValue } from "../../hooks";
|
|
5
4
|
import { getIconForProperty } from "../../util";
|
|
6
|
-
import { FieldHelperText } from "../components
|
|
5
|
+
import { FieldHelperText, LabelWithIcon } from "../components";
|
|
7
6
|
import { BooleanSwitchWithLabel } from "@firecms/ui";
|
|
8
|
-
import {
|
|
7
|
+
import { useClearRestoreValue } from "../useClearRestoreValue";
|
|
9
8
|
|
|
10
9
|
type SwitchFieldProps = FieldProps<boolean>;
|
|
11
10
|
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
import React, { useCallback } from "react";
|
|
2
2
|
|
|
3
|
+
import { ClearIcon, Collapse, IconButton, TextField } from "@firecms/ui";
|
|
3
4
|
import { FieldProps, PreviewType } from "../../types";
|
|
4
|
-
import { FieldHelperText } from "../components";
|
|
5
|
-
import { useClearRestoreValue } from "../../hooks";
|
|
5
|
+
import { FieldHelperText, LabelWithIcon } from "../components";
|
|
6
6
|
import { getIconForProperty } from "../../util";
|
|
7
|
-
import { ClearIcon, Collapse, IconButton, TextField } from "@firecms/ui";
|
|
8
7
|
import { PropertyPreview } from "../../preview";
|
|
9
|
-
import {
|
|
8
|
+
import { useClearRestoreValue } from "../useClearRestoreValue";
|
|
10
9
|
|
|
11
|
-
interface
|
|
10
|
+
interface TextFieldBindingProps<T extends string | number> extends FieldProps<T> {
|
|
12
11
|
allowInfinity?: boolean
|
|
13
12
|
}
|
|
14
13
|
|
|
@@ -19,6 +18,7 @@ interface TextFieldProps<T extends string | number> extends FieldProps<T> {
|
|
|
19
18
|
* @group Form fields
|
|
20
19
|
*/
|
|
21
20
|
export function TextFieldBinding<T extends string | number>({
|
|
21
|
+
context,
|
|
22
22
|
propertyKey,
|
|
23
23
|
value,
|
|
24
24
|
setValue,
|
|
@@ -28,7 +28,7 @@ export function TextFieldBinding<T extends string | number>({
|
|
|
28
28
|
autoFocus,
|
|
29
29
|
property,
|
|
30
30
|
includeDescription,
|
|
31
|
-
}:
|
|
31
|
+
}: TextFieldBindingProps<T>) {
|
|
32
32
|
|
|
33
33
|
let multiline: boolean | undefined;
|
|
34
34
|
let url: boolean | PreviewType | undefined;
|
|
@@ -97,9 +97,10 @@ export function TextFieldBinding<T extends string | number>({
|
|
|
97
97
|
{url && <Collapse
|
|
98
98
|
className="mt-1 ml-1"
|
|
99
99
|
in={Boolean(value)}>
|
|
100
|
-
<PropertyPreview
|
|
101
|
-
|
|
102
|
-
|
|
100
|
+
<PropertyPreview
|
|
101
|
+
value={value}
|
|
102
|
+
property={property}
|
|
103
|
+
size={"medium"}/>
|
|
103
104
|
</Collapse>}
|
|
104
105
|
|
|
105
106
|
</>
|
package/src/form/index.tsx
CHANGED
package/src/form/validation.ts
CHANGED
|
@@ -9,8 +9,7 @@ import {
|
|
|
9
9
|
} from "../types";
|
|
10
10
|
import * as yup from "yup";
|
|
11
11
|
import { AnySchema, ArraySchema, BooleanSchema, DateSchema, NumberSchema, ObjectSchema, StringSchema } from "yup";
|
|
12
|
-
import { enumToObjectEntries } from "../util
|
|
13
|
-
import { getValueInPath, hydrateRegExp, isPropertyBuilder } from "../util";
|
|
12
|
+
import { enumToObjectEntries, getValueInPath, hydrateRegExp, isPropertyBuilder } from "../util";
|
|
14
13
|
|
|
15
14
|
// Add custom unique function for array values
|
|
16
15
|
declare module "yup" {
|
|
@@ -90,12 +89,12 @@ export function mapPropertyToYup<T extends CMSType>(propertyContext: PropertyCon
|
|
|
90
89
|
throw Error("Unsupported data type in yup mapping");
|
|
91
90
|
}
|
|
92
91
|
|
|
93
|
-
export function getYupMapObjectSchema
|
|
92
|
+
export function getYupMapObjectSchema({
|
|
94
93
|
property,
|
|
95
94
|
entityId,
|
|
96
95
|
customFieldValidator,
|
|
97
96
|
name
|
|
98
|
-
}: PropertyContext<
|
|
97
|
+
}: PropertyContext<Record<string, any>>): ObjectSchema<any> {
|
|
99
98
|
const objectSchema: any = {};
|
|
100
99
|
const validation = property.validation;
|
|
101
100
|
if (property.properties)
|
package/src/hooks/data/delete.ts
CHANGED
|
@@ -12,10 +12,10 @@ import {
|
|
|
12
12
|
/**
|
|
13
13
|
* @group Hooks and utilities
|
|
14
14
|
*/
|
|
15
|
-
export type DeleteEntityWithCallbacksProps<M extends Record<string, any
|
|
15
|
+
export type DeleteEntityWithCallbacksProps<M extends Record<string, any>, UserType extends User = User> =
|
|
16
16
|
DeleteEntityProps<M>
|
|
17
17
|
& {
|
|
18
|
-
callbacks?: EntityCallbacks<M>;
|
|
18
|
+
callbacks?: EntityCallbacks<M, UserType>;
|
|
19
19
|
onDeleteSuccess?: (entity: Entity<M>) => void;
|
|
20
20
|
onDeleteFailure?: (entity: Entity<M>, e: Error) => void;
|
|
21
21
|
onPreDeleteHookError?: (entity: Entity<M>, e: Error) => void;
|
|
@@ -62,7 +62,7 @@ export async function deleteEntityWithCallbacks<M extends Record<string, any>, U
|
|
|
62
62
|
|
|
63
63
|
console.debug("Deleting entity", entity.path, entity.id);
|
|
64
64
|
|
|
65
|
-
const entityDeleteProps: EntityOnDeleteProps<M,
|
|
65
|
+
const entityDeleteProps: EntityOnDeleteProps<M, any> = {
|
|
66
66
|
entity,
|
|
67
67
|
collection,
|
|
68
68
|
entityId: entity.id,
|
package/src/hooks/data/save.ts
CHANGED
|
@@ -64,7 +64,7 @@ export async function saveEntityWithCallbacks<M extends Record<string, any>, Use
|
|
|
64
64
|
onPreSaveHookError,
|
|
65
65
|
onSaveSuccessHookError
|
|
66
66
|
}: SaveEntityWithCallbacksProps<M> & {
|
|
67
|
-
collection: EntityCollection<M>,
|
|
67
|
+
collection: EntityCollection<M, UserType>,
|
|
68
68
|
dataSource: DataSource,
|
|
69
69
|
context: FireCMSContext<UserType>,
|
|
70
70
|
}
|
|
@@ -70,7 +70,7 @@ export function useCollectionFetch<M extends Record<string, any>, UserType exten
|
|
|
70
70
|
searchString
|
|
71
71
|
}: CollectionFetchProps<M>): CollectionFetchResult<M> {
|
|
72
72
|
|
|
73
|
-
const dataSource = useDataSource();
|
|
73
|
+
const dataSource = useDataSource(collection);
|
|
74
74
|
const navigationController = useNavigationController();
|
|
75
75
|
|
|
76
76
|
const path = navigationController.resolveAliasesFrom(inputPath);
|
|
@@ -1,9 +1,14 @@
|
|
|
1
|
-
import { useContext } from "react";
|
|
2
|
-
import { DataSource } from "../../types";
|
|
1
|
+
import { useContext, useMemo } from "react";
|
|
2
|
+
import { DataSource, EntityCollection } from "../../types";
|
|
3
3
|
import { DataSourceContext } from "../../contexts/DataSourceContext";
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* Use this hook to get the datasource being used
|
|
7
7
|
* @group Hooks and utilities
|
|
8
8
|
*/
|
|
9
|
-
export const useDataSource = (): DataSource =>
|
|
9
|
+
export const useDataSource = (collection?: EntityCollection<any, any>): DataSource => {
|
|
10
|
+
const defaultDataSource = useContext(DataSourceContext);
|
|
11
|
+
if (collection?.overrides?.dataSource)
|
|
12
|
+
return collection?.overrides.dataSource;
|
|
13
|
+
return defaultDataSource;
|
|
14
|
+
};
|
|
@@ -7,10 +7,10 @@ import { useFireCMSContext } from "../useFireCMSContext";
|
|
|
7
7
|
/**
|
|
8
8
|
* @group Hooks and utilities
|
|
9
9
|
*/
|
|
10
|
-
export interface EntityFetchProps<M extends Record<string, any
|
|
10
|
+
export interface EntityFetchProps<M extends Record<string, any>, UserType extends User = User> {
|
|
11
11
|
path: string;
|
|
12
12
|
entityId?: string;
|
|
13
|
-
collection: EntityCollection<M>;
|
|
13
|
+
collection: EntityCollection<M, UserType>;
|
|
14
14
|
useCache?: boolean;
|
|
15
15
|
}
|
|
16
16
|
|
|
@@ -41,9 +41,9 @@ export function useEntityFetch<M extends Record<string, any>, UserType extends U
|
|
|
41
41
|
entityId,
|
|
42
42
|
collection,
|
|
43
43
|
useCache = false
|
|
44
|
-
}: EntityFetchProps<M>): EntityFetchResult<M> {
|
|
44
|
+
}: EntityFetchProps<M, UserType>): EntityFetchResult<M> {
|
|
45
45
|
|
|
46
|
-
const dataSource = useDataSource();
|
|
46
|
+
const dataSource = useDataSource(collection);
|
|
47
47
|
const navigationController = useNavigationController();
|
|
48
48
|
|
|
49
49
|
const path = navigationController.resolveAliasesFrom(inputPath);
|