@firecms/core 3.0.0-canary.7 → 3.0.0-canary.70
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/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/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/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 +6 -3
- package/dist/contexts/AuthControllerContext.d.ts +1 -1
- package/dist/{components/FireCMSAppBar.d.ts → core/DefaultAppBar.d.ts} +5 -8
- package/dist/core/DefaultDrawer.d.ts +19 -0
- package/dist/core/DrawerNavigationItem.d.ts +9 -0
- package/dist/core/EntityEditView.d.ts +36 -0
- package/dist/core/NavigationRoutes.d.ts +2 -2
- 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 +2 -3
- 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 +3 -4
- package/dist/form/field_bindings/TextFieldBinding.d.ts +2 -2
- package/dist/form/index.d.ts +0 -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.d.ts +1 -0
- package/dist/index.es.js +10512 -9997
- 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 +44 -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/fields.d.ts +31 -30
- 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 +22 -22
- package/dist/types/properties.d.ts +13 -5
- 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/storage.d.ts +23 -2
- package/dist/util/useStorageUploadController.d.ts +1 -1
- package/dist/util/useTraceUpdate.d.ts +1 -0
- package/package.json +139 -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/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 +4 -5
- 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/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 +6 -3
- package/src/contexts/AuthControllerContext.tsx +1 -1
- package/src/{components/FireCMSAppBar.tsx → core/DefaultAppBar.tsx} +51 -34
- package/src/core/DefaultDrawer.tsx +177 -0
- package/src/core/DrawerNavigationItem.tsx +62 -0
- package/src/core/EntityEditView.tsx +1101 -0
- package/src/core/EntitySidePanel.tsx +3 -4
- package/src/core/FireCMS.tsx +54 -43
- package/src/core/NavigationRoutes.tsx +14 -7
- 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 +5 -7
- 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 +25 -17
- 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 +16 -13
- package/src/form/field_bindings/SelectFieldBinding.tsx +3 -3
- package/src/form/field_bindings/StorageUploadFieldBinding.tsx +14 -35
- package/src/form/field_bindings/TextFieldBinding.tsx +7 -5
- package/src/form/index.tsx +4 -4
- package/src/form/validation.ts +4 -21
- 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/index.ts +1 -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 +51 -6
- package/src/types/customization_controller.tsx +0 -1
- 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/fields.tsx +33 -33
- 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 +28 -30
- package/src/types/properties.ts +19 -7
- 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 +2 -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 +12 -8
- package/src/util/references.ts +36 -5
- 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/EntityView.d.ts +0 -22
- 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/components/HomePage/NavigationCollectionCard.tsx +0 -146
- package/src/core/Drawer.tsx +0 -164
- package/src/core/EntityView.tsx +0 -578
- package/src/core/Scaffold.tsx +0 -281
- package/src/core/SideEntityView.tsx +0 -38
- package/src/form/EntityForm.tsx +0 -720
- package/src/internal/useBuildCustomizationController.tsx +0 -5
- package/src/internal/useLocaleConfig.tsx +0 -18
- package/src/types/appcheck.ts +0 -29
|
@@ -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";
|
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
CMSType,
|
|
4
|
+
FieldProps,
|
|
5
|
+
FormContext,
|
|
6
|
+
MapProperty,
|
|
7
|
+
Properties,
|
|
8
|
+
ResolvedProperties,
|
|
9
|
+
ResolvedProperty
|
|
10
|
+
} from "../../types";
|
|
3
11
|
|
|
4
12
|
import { ErrorBoundary } from "../../components";
|
|
5
13
|
import { getIconForProperty, isHidden, pick } from "../../util";
|
|
@@ -14,21 +22,20 @@ import { ExpandablePanel, InputLabel, Select, SelectItem } from "@firecms/ui";
|
|
|
14
22
|
* and tables to the specified properties.
|
|
15
23
|
* @group Form fields
|
|
16
24
|
*/
|
|
17
|
-
export function MapFieldBinding
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
}: FieldProps<T>) {
|
|
25
|
+
export function MapFieldBinding({
|
|
26
|
+
propertyKey,
|
|
27
|
+
value,
|
|
28
|
+
showError,
|
|
29
|
+
error,
|
|
30
|
+
disabled,
|
|
31
|
+
property,
|
|
32
|
+
partOfBlock,
|
|
33
|
+
tableMode,
|
|
34
|
+
includeDescription,
|
|
35
|
+
underlyingValueHasChanged,
|
|
36
|
+
autoFocus,
|
|
37
|
+
context
|
|
38
|
+
}: FieldProps<Record<string, any>>) {
|
|
32
39
|
|
|
33
40
|
const pickOnlySomeKeys = property.pickOnlySomeKeys || false;
|
|
34
41
|
const expanded = (property.expanded === undefined ? true : property.expanded) || autoFocus;
|
|
@@ -68,6 +75,7 @@ export function MapFieldBinding<T extends Record<string, any>>({
|
|
|
68
75
|
partOfBlock: false,
|
|
69
76
|
autoFocus: autoFocus && index === 0
|
|
70
77
|
};
|
|
78
|
+
|
|
71
79
|
return (
|
|
72
80
|
<div key={`map-${propertyKey}-${index}`}>
|
|
73
81
|
<ErrorBoundary>
|
|
@@ -101,7 +109,7 @@ export function MapFieldBinding<T extends Record<string, any>>({
|
|
|
101
109
|
{(tableMode || partOfBlock) && mapFormView}
|
|
102
110
|
|
|
103
111
|
<FieldHelperText includeDescription={includeDescription}
|
|
104
|
-
showError={showError}
|
|
112
|
+
showError={showError ?? false}
|
|
105
113
|
error={error ? (typeof error === "string" ? error : "A property of this map has an error") : undefined}
|
|
106
114
|
disabled={disabled}
|
|
107
115
|
property={property}/>
|
|
@@ -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
|
*
|
|
@@ -30,12 +30,6 @@ export function ReadOnlyFieldBinding({
|
|
|
30
30
|
if (!context.entityId)
|
|
31
31
|
throw new Error("ReadOnlyFieldBinding: Entity id is null");
|
|
32
32
|
|
|
33
|
-
const entity: Entity<any> = {
|
|
34
|
-
id: context.entityId!,
|
|
35
|
-
values: context.values,
|
|
36
|
-
path: context.path
|
|
37
|
-
};
|
|
38
|
-
|
|
39
33
|
return (
|
|
40
34
|
|
|
41
35
|
<>
|
|
@@ -47,13 +41,12 @@ export function ReadOnlyFieldBinding({
|
|
|
47
41
|
}
|
|
48
42
|
|
|
49
43
|
<div
|
|
50
|
-
className={
|
|
44
|
+
className={cls(paperMixin, "min-h-14 p-4 md:p-6 overflow-x-scroll no-scrollbar")}>
|
|
51
45
|
|
|
52
46
|
<ErrorBoundary>
|
|
53
47
|
<PropertyPreview propertyKey={propertyKey}
|
|
54
48
|
value={value}
|
|
55
49
|
property={property}
|
|
56
|
-
// entity={entity}
|
|
57
50
|
size={"medium"}/>
|
|
58
51
|
</ErrorBoundary>
|
|
59
52
|
|
|
@@ -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}
|
|
@@ -1,25 +1,18 @@
|
|
|
1
1
|
import React, { useCallback } from "react";
|
|
2
2
|
|
|
3
|
-
import {
|
|
4
|
-
ArrayProperty,
|
|
5
|
-
Entity,
|
|
6
|
-
FieldProps,
|
|
7
|
-
ResolvedArrayProperty,
|
|
8
|
-
ResolvedStringProperty,
|
|
9
|
-
StorageConfig
|
|
10
|
-
} from "../../types";
|
|
3
|
+
import { ArrayProperty, FieldProps, ResolvedArrayProperty, ResolvedStringProperty, StorageConfig } from "../../types";
|
|
11
4
|
import { useDropzone } from "react-dropzone";
|
|
12
5
|
import { PreviewSize } from "../../preview";
|
|
13
|
-
import { FieldHelperText,LabelWithIcon } from "../components";
|
|
6
|
+
import { FieldHelperText, LabelWithIcon } from "../components";
|
|
14
7
|
|
|
15
8
|
import { getIconForProperty, isReadOnly } from "../../util";
|
|
16
|
-
import {
|
|
9
|
+
import { useSnackbarController, useStorageSource } from "../../hooks";
|
|
17
10
|
import { DragDropContext, Draggable, Droppable } from "@hello-pangea/dnd";
|
|
18
11
|
import { StorageFieldItem, useStorageUploadController } from "../../util/useStorageUploadController";
|
|
19
12
|
import { StorageUploadProgress } from "../components/StorageUploadProgress";
|
|
20
13
|
import { StorageItemPreview } from "../components/StorageItemPreview";
|
|
21
14
|
import {
|
|
22
|
-
|
|
15
|
+
cls,
|
|
23
16
|
fieldBackgroundDisabledMixin,
|
|
24
17
|
fieldBackgroundHoverMixin,
|
|
25
18
|
fieldBackgroundMixin,
|
|
@@ -30,7 +23,7 @@ import { useClearRestoreValue } from "../useClearRestoreValue";
|
|
|
30
23
|
|
|
31
24
|
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
25
|
const disabledClasses = "border-dotted-gray"
|
|
33
|
-
const nonActiveDropClasses =
|
|
26
|
+
const nonActiveDropClasses = fieldBackgroundHoverMixin
|
|
34
27
|
const activeDropClasses = "pt-0 border-2 border-solid"
|
|
35
28
|
const acceptDropClasses = "transition-colors duration-200 ease-[cubic-bezier(0,0,0.2,1)] border-2 border-solid border-green-500"
|
|
36
29
|
const rejectDropClasses = "transition-colors duration-200 ease-[cubic-bezier(0,0,0.2,1)] border-2 border-solid border-red-500"
|
|
@@ -55,13 +48,13 @@ export function StorageUploadFieldBinding({
|
|
|
55
48
|
property,
|
|
56
49
|
includeDescription,
|
|
57
50
|
context,
|
|
58
|
-
isSubmitting
|
|
51
|
+
isSubmitting,
|
|
59
52
|
}: StorageUploadFieldProps) {
|
|
60
53
|
|
|
61
54
|
if (!context.entityId)
|
|
62
55
|
throw new Error("StorageUploadFieldBinding: Entity id is null");
|
|
63
56
|
|
|
64
|
-
const storageSource = useStorageSource();
|
|
57
|
+
const storageSource = useStorageSource(context.collection);
|
|
65
58
|
const disabled = isReadOnly(property) || !!property.disabled || isSubmitting;
|
|
66
59
|
|
|
67
60
|
const {
|
|
@@ -80,7 +73,7 @@ export function StorageUploadFieldBinding({
|
|
|
80
73
|
propertyKey,
|
|
81
74
|
value,
|
|
82
75
|
storageSource,
|
|
83
|
-
disabled,
|
|
76
|
+
disabled: disabled ?? false,
|
|
84
77
|
onChange: setValue
|
|
85
78
|
});
|
|
86
79
|
|
|
@@ -90,12 +83,6 @@ export function StorageUploadFieldBinding({
|
|
|
90
83
|
setValue
|
|
91
84
|
});
|
|
92
85
|
|
|
93
|
-
const entity: Entity<any> = {
|
|
94
|
-
id: context.entityId,
|
|
95
|
-
values: context.values,
|
|
96
|
-
path: context.path
|
|
97
|
-
};
|
|
98
|
-
|
|
99
86
|
return (
|
|
100
87
|
|
|
101
88
|
<>
|
|
@@ -109,13 +96,12 @@ export function StorageUploadFieldBinding({
|
|
|
109
96
|
<StorageUpload
|
|
110
97
|
value={internalValue}
|
|
111
98
|
name={propertyKey}
|
|
112
|
-
disabled={disabled}
|
|
113
|
-
autoFocus={autoFocus}
|
|
99
|
+
disabled={disabled ?? false}
|
|
100
|
+
autoFocus={autoFocus ?? false}
|
|
114
101
|
property={property}
|
|
115
102
|
onChange={setValue}
|
|
116
103
|
setInternalValue={setInternalValue}
|
|
117
104
|
onFilesAdded={onFilesAdded}
|
|
118
|
-
entity={entity}
|
|
119
105
|
onFileUploadComplete={onFileUploadComplete}
|
|
120
106
|
storagePathBuilder={storagePathBuilder}
|
|
121
107
|
storage={storage}
|
|
@@ -141,7 +127,6 @@ function FileDropComponent({
|
|
|
141
127
|
autoFocus,
|
|
142
128
|
internalValue,
|
|
143
129
|
property,
|
|
144
|
-
entity,
|
|
145
130
|
onClear,
|
|
146
131
|
metadata,
|
|
147
132
|
storagePathBuilder,
|
|
@@ -161,7 +146,6 @@ function FileDropComponent({
|
|
|
161
146
|
property: ResolvedStringProperty,
|
|
162
147
|
onClear: (clearedStoragePathOrDownloadUrl: string) => void,
|
|
163
148
|
metadata: any,
|
|
164
|
-
entity: Entity<any>;
|
|
165
149
|
storagePathBuilder: (file: File) => string,
|
|
166
150
|
onFileUploadComplete: (uploadedPath: string, entry: StorageFieldItem, fileMetadata?: any) => Promise<void>,
|
|
167
151
|
size: PreviewSize,
|
|
@@ -199,7 +183,7 @@ function FileDropComponent({
|
|
|
199
183
|
return (
|
|
200
184
|
<div
|
|
201
185
|
{...getRootProps()}
|
|
202
|
-
className={
|
|
186
|
+
className={cls(
|
|
203
187
|
fieldBackgroundMixin,
|
|
204
188
|
disabled ? fieldBackgroundDisabledMixin : fieldBackgroundHoverMixin,
|
|
205
189
|
dropZoneClasses,
|
|
@@ -216,7 +200,7 @@ function FileDropComponent({
|
|
|
216
200
|
<div
|
|
217
201
|
{...droppableProvided.droppableProps}
|
|
218
202
|
ref={droppableProvided.innerRef}
|
|
219
|
-
className={
|
|
203
|
+
className={cls("flex items-center p-1 no-scrollbar",
|
|
220
204
|
multipleFilesSupported && internalValue.length ? "overflow-auto" : "",
|
|
221
205
|
multipleFilesSupported && internalValue.length ? "min-h-[180px]" : "min-h-[250px]"
|
|
222
206
|
)}
|
|
@@ -234,7 +218,6 @@ function FileDropComponent({
|
|
|
234
218
|
name={`storage_preview_${entry.storagePathOrDownloadUrl}`}
|
|
235
219
|
property={property}
|
|
236
220
|
disabled={disabled}
|
|
237
|
-
entity={entity}
|
|
238
221
|
value={entry.storagePathOrDownloadUrl}
|
|
239
222
|
onRemove={onClear}
|
|
240
223
|
size={entry.size}/>
|
|
@@ -263,7 +246,7 @@ function FileDropComponent({
|
|
|
263
246
|
ref={provided.innerRef}
|
|
264
247
|
{...provided.draggableProps}
|
|
265
248
|
{...provided.dragHandleProps}
|
|
266
|
-
className={
|
|
249
|
+
className={cls(focusedMixin, "rounded-md")}
|
|
267
250
|
style={{
|
|
268
251
|
...provided.draggableProps.style
|
|
269
252
|
}}
|
|
@@ -301,7 +284,6 @@ export interface StorageUploadProps {
|
|
|
301
284
|
multipleFilesSupported: boolean;
|
|
302
285
|
autoFocus: boolean;
|
|
303
286
|
disabled: boolean;
|
|
304
|
-
entity: Entity<any>;
|
|
305
287
|
storage: StorageConfig;
|
|
306
288
|
onFilesAdded: (acceptedFiles: File[]) => void;
|
|
307
289
|
storagePathBuilder: (file: File) => string;
|
|
@@ -320,8 +302,7 @@ export function StorageUpload({
|
|
|
320
302
|
onFilesAdded,
|
|
321
303
|
autoFocus,
|
|
322
304
|
storage,
|
|
323
|
-
|
|
324
|
-
storagePathBuilder
|
|
305
|
+
storagePathBuilder,
|
|
325
306
|
}: StorageUploadProps) {
|
|
326
307
|
|
|
327
308
|
if (multipleFilesSupported) {
|
|
@@ -404,7 +385,6 @@ export function StorageUpload({
|
|
|
404
385
|
name={`storage_preview_${entry.storagePathOrDownloadUrl}`}
|
|
405
386
|
property={renderProperty}
|
|
406
387
|
disabled={true}
|
|
407
|
-
entity={entity}
|
|
408
388
|
value={entry.storagePathOrDownloadUrl as string}
|
|
409
389
|
onRemove={onClear}
|
|
410
390
|
size={entry.size}/>
|
|
@@ -422,7 +402,6 @@ export function StorageUpload({
|
|
|
422
402
|
autoFocus={autoFocus}
|
|
423
403
|
internalValue={value}
|
|
424
404
|
property={renderProperty}
|
|
425
|
-
entity={entity}
|
|
426
405
|
onClear={onClear}
|
|
427
406
|
metadata={metadata}
|
|
428
407
|
storagePathBuilder={storagePathBuilder}
|
|
@@ -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
|
</>
|
package/src/form/index.tsx
CHANGED
|
@@ -34,10 +34,10 @@ export {
|
|
|
34
34
|
|
|
35
35
|
export * from "./components";
|
|
36
36
|
|
|
37
|
-
export type { EntityFormProps } from "./EntityForm";
|
|
38
|
-
export {
|
|
39
|
-
|
|
40
|
-
} from "./EntityForm";
|
|
37
|
+
// export type { EntityFormProps } from "./EntityForm";
|
|
38
|
+
// export {
|
|
39
|
+
// EntityForm
|
|
40
|
+
// } from "./EntityForm";
|
|
41
41
|
|
|
42
42
|
export { PropertyFieldBinding } from "./PropertyFieldBinding";
|
|
43
43
|
export * from "./useClearRestoreValue";
|
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)
|
|
@@ -113,23 +112,7 @@ export function getYupMapObjectSchema<M extends Record<string, any>>({
|
|
|
113
112
|
if (validation?.required) {
|
|
114
113
|
return shape.required(validation?.requiredMessage ? validation.requiredMessage : "Required").nullable(true);
|
|
115
114
|
}
|
|
116
|
-
return shape.nullable(true);
|
|
117
|
-
// const object: ObjectSchema<any> = yup.object().shape(objectSchema);
|
|
118
|
-
// return validation?.required
|
|
119
|
-
// ? object.required(validation?.requiredMessage ? validation.requiredMessage : "Required").nullable(true)
|
|
120
|
-
// : yup.object().optional().default(undefined).notRequired().nullable(true).test(
|
|
121
|
-
// "empty-check",
|
|
122
|
-
// "Optional map can be empty",
|
|
123
|
-
// (o: any, testContext: any) => {
|
|
124
|
-
// try {
|
|
125
|
-
// if (!o || Object.keys(o).length === 0) return true;
|
|
126
|
-
// return object.validateSync(o);
|
|
127
|
-
// } catch (e) {
|
|
128
|
-
// testContext.createError(e);
|
|
129
|
-
// console.error(e);
|
|
130
|
-
// return false;
|
|
131
|
-
// }
|
|
132
|
-
// });
|
|
115
|
+
return yup.object().shape(shape.fields).default(undefined).notRequired().nullable(true);
|
|
133
116
|
}
|
|
134
117
|
|
|
135
118
|
function getYupStringSchema({
|
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
|
@@ -17,7 +17,6 @@ import { resolveCollection } from "../../util";
|
|
|
17
17
|
export type SaveEntityWithCallbacksProps<M extends Record<string, any>> =
|
|
18
18
|
SaveEntityProps<M> &
|
|
19
19
|
{
|
|
20
|
-
callbacks?: EntityCallbacks<M>;
|
|
21
20
|
onSaveSuccess?: (updatedEntity: Entity<M>) => void,
|
|
22
21
|
onSaveFailure?: (e: Error) => void,
|
|
23
22
|
onPreSaveHookError?: (e: Error) => void,
|
|
@@ -64,7 +63,7 @@ export async function saveEntityWithCallbacks<M extends Record<string, any>, Use
|
|
|
64
63
|
onPreSaveHookError,
|
|
65
64
|
onSaveSuccessHookError
|
|
66
65
|
}: SaveEntityWithCallbacksProps<M> & {
|
|
67
|
-
collection: EntityCollection<M>,
|
|
66
|
+
collection: EntityCollection<M, UserType>,
|
|
68
67
|
dataSource: DataSource,
|
|
69
68
|
context: FireCMSContext<UserType>,
|
|
70
69
|
}
|
|
@@ -109,6 +108,7 @@ export async function saveEntityWithCallbacks<M extends Record<string, any>, Use
|
|
|
109
108
|
updatedValues = values;
|
|
110
109
|
}
|
|
111
110
|
|
|
111
|
+
console.log("Saving entity", entityId, updatedValues);
|
|
112
112
|
return dataSource.saveEntity({
|
|
113
113
|
collection,
|
|
114
114
|
path: resolvedPath,
|
|
@@ -117,6 +117,7 @@ export async function saveEntityWithCallbacks<M extends Record<string, any>, Use
|
|
|
117
117
|
previousValues,
|
|
118
118
|
status
|
|
119
119
|
}).then((entity) => {
|
|
120
|
+
console.log("Entity saved");
|
|
120
121
|
try {
|
|
121
122
|
if (callbacks?.onSaveSuccess) {
|
|
122
123
|
const resolvedCollection = resolveCollection<M>({
|
|
@@ -145,6 +146,7 @@ export async function saveEntityWithCallbacks<M extends Record<string, any>, Use
|
|
|
145
146
|
onSaveSuccess(entity);
|
|
146
147
|
})
|
|
147
148
|
.catch((e) => {
|
|
149
|
+
console.error("!!!", e);
|
|
148
150
|
if (callbacks?.onSaveFailure) {
|
|
149
151
|
|
|
150
152
|
const resolvedCollection = resolveCollection<M>({
|
|
@@ -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
|
+
};
|