@firecms/core 3.0.0-canary.11 → 3.0.0-canary.111
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/app/AppBar.d.ts +12 -0
- package/dist/app/Drawer.d.ts +17 -0
- package/dist/app/Scaffold.d.ts +30 -0
- package/dist/app/index.d.ts +4 -0
- package/dist/app/useApp.d.ts +16 -0
- package/dist/components/CircularProgressCenter.d.ts +1 -1
- package/dist/components/ClearFilterSortButton.d.ts +5 -0
- package/dist/components/EntityCollectionTable/EntityCollectionRowActions.d.ts +11 -12
- package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +1 -1
- package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +5 -3
- package/dist/components/EntityCollectionTable/PropertyTableCell.d.ts +1 -0
- package/dist/components/EntityCollectionTable/column_utils.d.ts +1 -2
- package/dist/components/EntityCollectionTable/fields/TableReferenceField.d.ts +2 -0
- package/dist/components/EntityCollectionTable/internal/CollectionTableToolbar.d.ts +1 -4
- package/dist/components/EntityCollectionTable/internal/EntityTableCell.d.ts +2 -2
- package/dist/components/EntityCollectionTable/internal/popup_field/PopupFormField.d.ts +2 -2
- package/dist/components/EntityCollectionView/EntityCollectionView.d.ts +12 -2
- package/dist/components/EntityCollectionView/EntityCollectionViewStartActions.d.ts +11 -0
- package/dist/components/EntityPreview.d.ts +5 -4
- package/dist/components/ErrorView.d.ts +1 -1
- package/dist/components/HomePage/DefaultHomePage.d.ts +1 -1
- package/dist/components/HomePage/NavigationCardBinding.d.ts +1 -1
- package/dist/components/PropertyIdCopyTooltip.d.ts +8 -0
- package/dist/components/ReferenceWidget.d.ts +3 -1
- package/dist/components/SelectableTable/SelectableTable.d.ts +1 -1
- package/dist/components/SelectableTable/filters/ReferenceFilterField.d.ts +2 -1
- package/dist/components/VirtualTable/VirtualTableProps.d.ts +15 -12
- package/dist/components/VirtualTable/types.d.ts +3 -3
- package/dist/components/{EntityCollectionTable/internal → common}/default_entity_actions.d.ts +1 -1
- package/dist/components/common/index.d.ts +1 -0
- package/dist/components/common/table_height.d.ts +5 -0
- package/dist/components/common/types.d.ts +4 -6
- package/dist/components/common/useColumnsIds.d.ts +2 -1
- package/dist/components/common/useDataSourceEntityCollectionTableController.d.ts +3 -0
- package/dist/components/index.d.ts +3 -1
- package/dist/{components/FireCMSAppBar.d.ts → core/DefaultAppBar.d.ts} +6 -9
- package/dist/core/DefaultDrawer.d.ts +19 -0
- package/dist/core/DrawerNavigationItem.d.ts +9 -0
- package/dist/core/EntityEditView.d.ts +18 -4
- package/dist/core/FireCMS.d.ts +1 -1
- package/dist/core/NavigationRoutes.d.ts +3 -3
- package/dist/core/index.d.ts +3 -4
- package/dist/form/PropertyFieldBinding.d.ts +1 -1
- package/dist/form/components/ErrorFocus.d.ts +1 -1
- package/dist/form/components/FieldHelperText.d.ts +3 -3
- package/dist/form/components/LabelWithIcon.d.ts +1 -1
- package/dist/form/components/LabelWithIconAndTooltip.d.ts +15 -0
- package/dist/form/components/StorageItemPreview.d.ts +4 -4
- package/dist/form/components/index.d.ts +1 -0
- package/dist/form/field_bindings/ArrayCustomShapedFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/ArrayOfReferencesFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/BlockFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/KeyValueFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/MapFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/MarkdownEditorFieldBinding.d.ts +11 -0
- package/dist/form/field_bindings/MultiSelectBinding.d.ts +1 -1
- package/dist/form/field_bindings/ReadOnlyFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/RepeatFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/SelectFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +3 -5
- package/dist/form/field_bindings/TextFieldBinding.d.ts +1 -1
- package/dist/form/index.d.ts +2 -4
- package/dist/hooks/data/save.d.ts +1 -2
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/useBuildNavigationController.d.ts +1 -2
- package/dist/hooks/useProjectLog.d.ts +2 -2
- package/dist/hooks/useValidateAuthenticator.d.ts +4 -8
- package/dist/index.d.ts +1 -0
- package/dist/index.es.js +15632 -12442
- package/dist/index.es.js.map +1 -1
- package/dist/index.umd.js +19871 -587
- package/dist/index.umd.js.map +1 -1
- package/dist/internal/useBuildDataSource.d.ts +1 -16
- package/dist/preview/PropertyPreviewProps.d.ts +6 -1
- package/dist/preview/components/EnumValuesChip.d.ts +1 -1
- package/dist/preview/components/ReferencePreview.d.ts +2 -1
- package/dist/preview/components/StorageThumbnail.d.ts +2 -1
- package/dist/preview/components/UrlComponentPreview.d.ts +2 -1
- package/dist/types/auth.d.ts +3 -3
- package/dist/types/collections.d.ts +39 -5
- package/dist/types/datasource.d.ts +45 -31
- package/dist/types/entities.d.ts +6 -1
- package/dist/types/entity_actions.d.ts +14 -0
- package/dist/types/fields.d.ts +45 -39
- package/dist/types/index.d.ts +0 -1
- package/dist/types/navigation.d.ts +6 -5
- package/dist/types/plugins.d.ts +14 -4
- package/dist/types/properties.d.ts +32 -19
- package/dist/types/storage.d.ts +11 -3
- package/dist/util/entities.d.ts +1 -1
- package/dist/util/icon_list.d.ts +5 -1
- package/dist/util/icon_synonyms.d.ts +1 -97
- package/dist/util/icons.d.ts +2 -2
- package/dist/util/index.d.ts +1 -0
- package/dist/util/navigation_utils.d.ts +2 -2
- package/dist/util/objects.d.ts +1 -1
- package/dist/util/plurals.d.ts +0 -2
- package/dist/util/resolutions.d.ts +14 -13
- package/dist/util/storage.d.ts +23 -2
- package/dist/util/useStorageUploadController.d.ts +1 -1
- package/package.json +128 -119
- package/src/app/AppBar.tsx +18 -0
- package/src/app/Drawer.tsx +25 -0
- package/src/app/Scaffold.tsx +245 -0
- package/src/app/index.ts +4 -0
- package/src/app/useApp.tsx +32 -0
- package/src/components/ArrayContainer.tsx +9 -7
- package/src/components/CircularProgressCenter.tsx +1 -1
- package/src/components/ClearFilterSortButton.tsx +41 -0
- package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +12 -19
- package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +21 -20
- package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +10 -6
- package/src/components/EntityCollectionTable/PropertyTableCell.tsx +41 -35
- package/src/components/EntityCollectionTable/column_utils.tsx +3 -3
- package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +22 -12
- package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +14 -6
- package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +29 -34
- package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +17 -13
- package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +19 -7
- package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +7 -10
- package/src/components/EntityCollectionView/EntityCollectionView.tsx +75 -51
- package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +68 -0
- package/src/components/EntityCollectionView/useSelectionController.tsx +19 -7
- package/src/components/EntityPreview.tsx +21 -15
- package/src/components/EntityView.tsx +5 -5
- package/src/components/ErrorView.tsx +1 -1
- package/src/components/HomePage/DefaultHomePage.tsx +24 -15
- package/src/components/HomePage/NavigationCard.tsx +3 -3
- package/src/components/HomePage/NavigationCardBinding.tsx +1 -1
- package/src/components/HomePage/SmallNavigationCard.tsx +5 -6
- package/src/components/PropertyIdCopyTooltip.tsx +48 -0
- package/src/components/ReferenceTable/ReferenceSelectionTable.tsx +2 -5
- package/src/components/ReferenceWidget.tsx +22 -12
- package/src/components/SearchIconsView.tsx +11 -7
- package/src/components/SelectableTable/SelectableTable.tsx +7 -7
- package/src/components/SelectableTable/filters/BooleanFilterField.tsx +2 -3
- package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +22 -7
- package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +28 -6
- package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +35 -15
- package/src/components/VirtualTable/VirtualTable.tsx +70 -37
- package/src/components/VirtualTable/VirtualTableCell.tsx +1 -1
- package/src/components/VirtualTable/VirtualTableHeader.tsx +4 -4
- package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +2 -2
- package/src/components/VirtualTable/VirtualTableProps.tsx +18 -14
- package/src/components/VirtualTable/VirtualTableRow.tsx +4 -5
- package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +1 -1
- package/src/components/VirtualTable/types.tsx +2 -3
- package/src/components/{EntityCollectionTable/internal → common}/default_entity_actions.tsx +2 -2
- package/src/components/common/index.ts +1 -0
- package/src/components/{VirtualTable/common.tsx → common/table_height.tsx} +5 -2
- package/src/components/common/types.tsx +4 -6
- package/src/components/common/useColumnsIds.tsx +23 -2
- package/src/components/common/useDataSourceEntityCollectionTableController.tsx +11 -0
- package/src/components/common/useTableSearchHelper.ts +53 -12
- package/src/components/index.tsx +3 -1
- package/src/contexts/DialogsProvider.tsx +2 -2
- package/src/{components/FireCMSAppBar.tsx → core/DefaultAppBar.tsx} +52 -37
- package/src/core/DefaultDrawer.tsx +177 -0
- package/src/core/DrawerNavigationItem.tsx +64 -0
- package/src/core/EntityEditView.tsx +702 -137
- package/src/core/EntitySidePanel.tsx +1 -2
- package/src/core/FireCMS.tsx +39 -44
- package/src/core/NavigationRoutes.tsx +7 -8
- package/src/core/SideDialogs.tsx +4 -0
- package/src/core/field_configs.tsx +4 -5
- package/src/core/index.tsx +3 -4
- package/src/form/PropertyFieldBinding.tsx +53 -21
- package/src/form/components/CustomIdField.tsx +4 -2
- package/src/form/components/FieldHelperText.tsx +4 -4
- package/src/form/components/LabelWithIcon.tsx +27 -19
- package/src/form/components/LabelWithIconAndTooltip.tsx +28 -0
- package/src/form/components/StorageItemPreview.tsx +21 -11
- package/src/form/components/StorageUploadProgress.tsx +3 -4
- package/src/form/components/index.tsx +1 -0
- package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +15 -11
- package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +26 -21
- package/src/form/field_bindings/BlockFieldBinding.tsx +13 -12
- package/src/form/field_bindings/DateTimeFieldBinding.tsx +17 -14
- package/src/form/field_bindings/KeyValueFieldBinding.tsx +52 -46
- package/src/form/field_bindings/MapFieldBinding.tsx +15 -15
- package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +138 -0
- package/src/form/field_bindings/MultiSelectBinding.tsx +9 -5
- package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +11 -16
- package/src/form/field_bindings/ReferenceFieldBinding.tsx +37 -27
- package/src/form/field_bindings/RepeatFieldBinding.tsx +20 -16
- package/src/form/field_bindings/SelectFieldBinding.tsx +47 -41
- package/src/form/field_bindings/StorageUploadFieldBinding.tsx +31 -52
- package/src/form/field_bindings/SwitchFieldBinding.tsx +9 -5
- package/src/form/field_bindings/TextFieldBinding.tsx +26 -22
- package/src/form/index.tsx +6 -6
- package/src/form/validation.ts +1 -17
- package/src/hooks/data/save.ts +6 -1
- package/src/hooks/data/useDataSource.tsx +1 -1
- package/src/hooks/index.tsx +1 -0
- package/src/hooks/useBuildLocalConfigurationPersistence.tsx +8 -10
- package/src/hooks/useBuildModeController.tsx +11 -5
- package/src/hooks/useBuildNavigationController.tsx +94 -32
- package/src/hooks/useProjectLog.tsx +19 -8
- package/src/hooks/useResolvedNavigationFrom.tsx +1 -1
- package/src/hooks/useValidateAuthenticator.tsx +21 -41
- package/src/index.ts +1 -0
- package/src/internal/useBuildDataSource.ts +84 -62
- package/src/internal/useBuildSideEntityController.tsx +90 -21
- package/src/internal/useUnsavedChangesDialog.tsx +3 -1
- package/src/preview/PropertyPreview.tsx +10 -17
- package/src/preview/PropertyPreviewProps.tsx +7 -1
- package/src/preview/components/BooleanPreview.tsx +2 -2
- package/src/preview/components/EnumValuesChip.tsx +2 -2
- package/src/preview/components/ImagePreview.tsx +24 -34
- package/src/preview/components/ReferencePreview.tsx +23 -23
- package/src/preview/components/StorageThumbnail.tsx +5 -1
- package/src/preview/components/UrlComponentPreview.tsx +44 -11
- package/src/preview/property_previews/ArrayOfMapsPreview.tsx +0 -1
- package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +3 -2
- package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +1 -2
- package/src/preview/property_previews/ArrayOfStringsPreview.tsx +0 -1
- package/src/preview/property_previews/ArrayOneOfPreview.tsx +3 -4
- package/src/preview/property_previews/ArrayPropertyPreview.tsx +3 -4
- package/src/preview/property_previews/MapPropertyPreview.tsx +6 -6
- package/src/preview/property_previews/SkeletonPropertyComponent.tsx +2 -2
- package/src/preview/property_previews/StringPropertyPreview.tsx +3 -3
- package/src/preview/util.ts +2 -2
- package/src/types/auth.tsx +3 -3
- package/src/types/collections.ts +48 -7
- package/src/types/customization_controller.tsx +0 -1
- package/src/types/datasource.ts +53 -39
- package/src/types/entities.ts +11 -1
- package/src/types/entity_actions.tsx +16 -3
- package/src/types/fields.tsx +49 -43
- package/src/types/index.ts +0 -1
- package/src/types/navigation.ts +7 -7
- package/src/types/plugins.tsx +16 -6
- package/src/types/properties.ts +37 -20
- package/src/types/storage.ts +12 -3
- package/src/util/entities.ts +5 -4
- package/src/util/enums.ts +1 -1
- package/src/util/icon_list.ts +15 -10
- package/src/util/icon_synonyms.ts +3 -99
- package/src/util/index.ts +1 -0
- package/src/util/navigation_utils.ts +6 -6
- package/src/util/objects.ts +25 -28
- package/src/util/permissions.ts +1 -0
- package/src/util/plurals.ts +0 -2
- package/src/util/references.ts +3 -0
- package/src/util/resolutions.ts +44 -39
- package/src/util/storage.ts +76 -22
- package/src/util/strings.ts +2 -2
- package/src/util/useStorageUploadController.tsx +22 -4
- package/src/util/useTraceUpdate.tsx +1 -0
- package/dist/components/PropertyIdCopyTooltipContent.d.ts +0 -3
- package/dist/components/VirtualTable/common.d.ts +0 -2
- package/dist/core/Drawer.d.ts +0 -23
- package/dist/core/Scaffold.d.ts +0 -55
- package/dist/core/SideEntityView.d.ts +0 -7
- package/dist/form/EntityForm.d.ts +0 -77
- package/dist/form/field_bindings/MarkdownFieldBinding.d.ts +0 -9
- package/dist/internal/useBuildCustomizationController.d.ts +0 -2
- package/dist/internal/useLocaleConfig.d.ts +0 -1
- package/dist/types/appcheck.d.ts +0 -26
- package/src/components/PropertyIdCopyTooltipContent.tsx +0 -28
- package/src/core/Drawer.tsx +0 -191
- package/src/core/Scaffold.tsx +0 -281
- package/src/core/SideEntityView.tsx +0 -38
- package/src/form/EntityForm.tsx +0 -728
- package/src/form/field_bindings/MarkdownFieldBinding.tsx +0 -695
- package/src/internal/useBuildCustomizationController.tsx +0 -5
- package/src/internal/useLocaleConfig.tsx +0 -18
- package/src/types/appcheck.ts +0 -29
|
@@ -5,12 +5,11 @@ import {
|
|
|
5
5
|
DeleteEntityProps,
|
|
6
6
|
Entity,
|
|
7
7
|
EntityCollection,
|
|
8
|
-
EntityReference,
|
|
9
8
|
EntityValues,
|
|
10
9
|
FetchCollectionProps,
|
|
11
10
|
FetchEntityProps,
|
|
12
11
|
FilterValues,
|
|
13
|
-
|
|
12
|
+
FireCMSContext,
|
|
14
13
|
ListenCollectionProps,
|
|
15
14
|
ListenEntityProps,
|
|
16
15
|
NavigationController,
|
|
@@ -53,13 +52,13 @@ export function useBuildDataSource({
|
|
|
53
52
|
*/
|
|
54
53
|
fetchCollection: useCallback(<M extends Record<string, any>>({
|
|
55
54
|
path,
|
|
56
|
-
collection
|
|
55
|
+
collection,
|
|
57
56
|
filter,
|
|
58
57
|
limit,
|
|
59
58
|
startAfter,
|
|
60
59
|
searchString,
|
|
61
60
|
orderBy,
|
|
62
|
-
order
|
|
61
|
+
order,
|
|
63
62
|
}: FetchCollectionProps<M>
|
|
64
63
|
): Promise<Entity<M>[]> => {
|
|
65
64
|
return delegate.fetchCollection<M>({
|
|
@@ -69,7 +68,8 @@ export function useBuildDataSource({
|
|
|
69
68
|
startAfter,
|
|
70
69
|
searchString,
|
|
71
70
|
orderBy,
|
|
72
|
-
order
|
|
71
|
+
order,
|
|
72
|
+
collection
|
|
73
73
|
});
|
|
74
74
|
}, [delegate]),
|
|
75
75
|
|
|
@@ -90,7 +90,6 @@ export function useBuildDataSource({
|
|
|
90
90
|
* @group Firestore
|
|
91
91
|
*/
|
|
92
92
|
listenCollection: delegate.listenCollection
|
|
93
|
-
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
94
93
|
? useCallback(<M extends Record<string, any>>(
|
|
95
94
|
{
|
|
96
95
|
path,
|
|
@@ -107,7 +106,7 @@ export function useBuildDataSource({
|
|
|
107
106
|
): () => void => {
|
|
108
107
|
|
|
109
108
|
const collection = collectionProp ?? navigationController.getCollection(path);
|
|
110
|
-
const isCollectionGroup = Boolean(collection?.collectionGroup)
|
|
109
|
+
const isCollectionGroup = Boolean(collection?.collectionGroup);
|
|
111
110
|
if (!delegate.listenCollection)
|
|
112
111
|
throw Error("useBuildDataSource delegate not initialised");
|
|
113
112
|
|
|
@@ -121,8 +120,7 @@ export function useBuildDataSource({
|
|
|
121
120
|
order,
|
|
122
121
|
onUpdate,
|
|
123
122
|
onError,
|
|
124
|
-
|
|
125
|
-
collection
|
|
123
|
+
collection,
|
|
126
124
|
});
|
|
127
125
|
}, [delegate, navigationController.getCollection])
|
|
128
126
|
: undefined,
|
|
@@ -136,11 +134,13 @@ export function useBuildDataSource({
|
|
|
136
134
|
*/
|
|
137
135
|
fetchEntity: useCallback(<M extends Record<string, any>>({
|
|
138
136
|
path,
|
|
139
|
-
entityId
|
|
137
|
+
entityId,
|
|
138
|
+
collection
|
|
140
139
|
}: FetchEntityProps<M>
|
|
141
140
|
): Promise<Entity<M> | undefined> => delegate.fetchEntity({
|
|
142
141
|
path,
|
|
143
|
-
entityId
|
|
142
|
+
entityId,
|
|
143
|
+
collection
|
|
144
144
|
}), [delegate]),
|
|
145
145
|
|
|
146
146
|
/**
|
|
@@ -154,7 +154,6 @@ export function useBuildDataSource({
|
|
|
154
154
|
* @group Firestore
|
|
155
155
|
*/
|
|
156
156
|
listenEntity: delegate.listenEntity
|
|
157
|
-
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
158
157
|
? useCallback(<M extends Record<string, any>>(
|
|
159
158
|
{
|
|
160
159
|
path,
|
|
@@ -170,7 +169,8 @@ export function useBuildDataSource({
|
|
|
170
169
|
path,
|
|
171
170
|
entityId,
|
|
172
171
|
onUpdate,
|
|
173
|
-
onError
|
|
172
|
+
onError,
|
|
173
|
+
collection
|
|
174
174
|
})
|
|
175
175
|
}, [delegate.listenEntity]) : undefined,
|
|
176
176
|
|
|
@@ -196,6 +196,15 @@ export function useBuildDataSource({
|
|
|
196
196
|
|
|
197
197
|
const collection = collectionProp ?? navigationController.getCollection(path);
|
|
198
198
|
|
|
199
|
+
console.log("useBuildDatasource save", {
|
|
200
|
+
path,
|
|
201
|
+
entityId,
|
|
202
|
+
values,
|
|
203
|
+
collectionProp,
|
|
204
|
+
collection,
|
|
205
|
+
status
|
|
206
|
+
});
|
|
207
|
+
|
|
199
208
|
const resolvedCollection = collection
|
|
200
209
|
? resolveCollection<M>({
|
|
201
210
|
collection,
|
|
@@ -207,26 +216,24 @@ export function useBuildDataSource({
|
|
|
207
216
|
|
|
208
217
|
const properties: ResolvedProperties<M> | undefined = resolvedCollection?.properties;
|
|
209
218
|
|
|
210
|
-
const firestoreValues = cmsToDelegateModel(
|
|
219
|
+
const firestoreValues = delegate.cmsToDelegateModel(
|
|
211
220
|
values,
|
|
212
|
-
delegate.buildReference,
|
|
213
|
-
delegate.buildGeoPoint,
|
|
214
|
-
delegate.buildDate,
|
|
215
|
-
delegate.buildDeleteFieldValue
|
|
216
221
|
);
|
|
222
|
+
|
|
217
223
|
const updatedFirestoreValues: EntityValues<M> = properties
|
|
218
224
|
? updateDateAutoValues(
|
|
219
225
|
{
|
|
220
226
|
inputValues: firestoreValues,
|
|
221
227
|
properties,
|
|
222
228
|
status,
|
|
223
|
-
timestampNowValue: delegate.currentTime(),
|
|
229
|
+
timestampNowValue: delegate.currentTime?.() ?? new Date(),
|
|
224
230
|
setDateToMidnight: delegate.setDateToMidnight
|
|
225
231
|
})
|
|
226
232
|
: firestoreValues;
|
|
227
233
|
|
|
228
234
|
return delegate.saveEntity({
|
|
229
235
|
path,
|
|
236
|
+
collection,
|
|
230
237
|
entityId,
|
|
231
238
|
values: updatedFirestoreValues,
|
|
232
239
|
status
|
|
@@ -267,9 +274,10 @@ export function useBuildDataSource({
|
|
|
267
274
|
path: string,
|
|
268
275
|
name: string,
|
|
269
276
|
value: any,
|
|
270
|
-
entityId?: string
|
|
277
|
+
entityId?: string,
|
|
278
|
+
databaseId?: string
|
|
271
279
|
): Promise<boolean> => {
|
|
272
|
-
return delegate.checkUniqueField(path, name, value, entityId);
|
|
280
|
+
return delegate.checkUniqueField(path, name, value, entityId, databaseId);
|
|
273
281
|
}, [delegate.checkUniqueField]),
|
|
274
282
|
|
|
275
283
|
generateEntityId: useCallback((path: string): string => {
|
|
@@ -294,16 +302,18 @@ export function useBuildDataSource({
|
|
|
294
302
|
filter,
|
|
295
303
|
orderBy,
|
|
296
304
|
order,
|
|
297
|
-
|
|
305
|
+
collection
|
|
298
306
|
});
|
|
299
307
|
} : undefined,
|
|
300
308
|
|
|
301
309
|
isFilterCombinationValid: useCallback(({
|
|
302
310
|
path,
|
|
311
|
+
databaseId,
|
|
303
312
|
filterValues,
|
|
304
313
|
sortBy
|
|
305
314
|
}: {
|
|
306
315
|
path: string,
|
|
316
|
+
databaseId?: string,
|
|
307
317
|
filterValues: FilterValues<any>,
|
|
308
318
|
sortBy?: [string, "asc" | "desc"]
|
|
309
319
|
}): boolean => {
|
|
@@ -312,52 +322,64 @@ export function useBuildDataSource({
|
|
|
312
322
|
return delegate.isFilterCombinationValid(
|
|
313
323
|
{
|
|
314
324
|
path,
|
|
325
|
+
databaseId,
|
|
315
326
|
filterValues,
|
|
316
327
|
sortBy
|
|
317
328
|
}
|
|
318
329
|
)
|
|
319
|
-
}, [delegate.isFilterCombinationValid])
|
|
330
|
+
}, [delegate.isFilterCombinationValid]),
|
|
331
|
+
|
|
332
|
+
initTextSearch: useCallback(async (props: {
|
|
333
|
+
context: FireCMSContext,
|
|
334
|
+
path: string,
|
|
335
|
+
collection: EntityCollection,
|
|
336
|
+
parentCollectionIds?: string[]
|
|
337
|
+
}): Promise<boolean> => {
|
|
338
|
+
if (!delegate.initTextSearch)
|
|
339
|
+
return false;
|
|
340
|
+
return delegate.initTextSearch(props)
|
|
341
|
+
}, [delegate.initTextSearch]),
|
|
320
342
|
|
|
321
343
|
};
|
|
322
344
|
|
|
323
345
|
}
|
|
324
346
|
|
|
325
|
-
/**
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
export function cmsToDelegateModel(data: any,
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
): any {
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
}
|
|
347
|
+
// /**
|
|
348
|
+
// * Recursive function that converts Firestore data types into CMS or plain
|
|
349
|
+
// * JS types.
|
|
350
|
+
// * FireCMS uses Javascript dates internally instead of Firestore timestamps.
|
|
351
|
+
// * This makes it easier to interact with the rest of the libraries and
|
|
352
|
+
// * bindings.
|
|
353
|
+
// * Also, Firestore references are replaced with {@link EntityReference}
|
|
354
|
+
// * @param data
|
|
355
|
+
// * @param buildReference
|
|
356
|
+
// * @param buildGeoPoint
|
|
357
|
+
// * @param buildDate
|
|
358
|
+
// * @param buildDelete
|
|
359
|
+
// * @group Firestore
|
|
360
|
+
// */
|
|
361
|
+
// export function cmsToDelegateModel(data: any,
|
|
362
|
+
// buildReference: (reference: EntityReference) => any,
|
|
363
|
+
// buildGeoPoint: (geoPoint: GeoPoint) => any,
|
|
364
|
+
// buildDate: (date: Date) => any,
|
|
365
|
+
// buildDelete: () => any
|
|
366
|
+
// ): any {
|
|
367
|
+
// if (data === undefined) {
|
|
368
|
+
// return buildDelete();
|
|
369
|
+
// } else if (data === null) {
|
|
370
|
+
// return null;
|
|
371
|
+
// } else if (Array.isArray(data)) {
|
|
372
|
+
// return data.map(v => cmsToDelegateModel(v, buildReference, buildGeoPoint, buildDate, buildDelete));
|
|
373
|
+
// } else if (data.isEntityReference && data.isEntityReference()) {
|
|
374
|
+
// return buildReference(data);
|
|
375
|
+
// } else if (data instanceof GeoPoint) {
|
|
376
|
+
// return buildGeoPoint(data);
|
|
377
|
+
// } else if (data instanceof Date) {
|
|
378
|
+
// return buildDate(data);
|
|
379
|
+
// } else if (data && typeof data === "object") {
|
|
380
|
+
// return Object.entries(data)
|
|
381
|
+
// .map(([key, v]) => ({ [key]: cmsToDelegateModel(v, buildReference, buildGeoPoint, buildDate, buildDelete) }))
|
|
382
|
+
// .reduce((a, b) => ({ ...a, ...b }), {});
|
|
383
|
+
// }
|
|
384
|
+
// return data;
|
|
385
|
+
// }
|
|
@@ -3,13 +3,14 @@ import {
|
|
|
3
3
|
EntityCollection,
|
|
4
4
|
EntitySidePanelProps,
|
|
5
5
|
NavigationController,
|
|
6
|
+
ResolvedProperty,
|
|
6
7
|
SideDialogPanelProps,
|
|
7
8
|
SideDialogsController,
|
|
8
9
|
SideEntityController
|
|
9
10
|
} from "../types";
|
|
10
11
|
import { getNavigationEntriesFromPathInternal, NavigationViewInternal } from "../util/navigation_from_path";
|
|
11
12
|
import { useLocation } from "react-router-dom";
|
|
12
|
-
import { removeInitialAndTrailingSlashes, resolveDefaultSelectedView } from "../util";
|
|
13
|
+
import { removeInitialAndTrailingSlashes, resolveCollection, resolveDefaultSelectedView } from "../util";
|
|
13
14
|
import { ADDITIONAL_TAB_WIDTH, CONTAINER_FULL_WIDTH, FORM_CONTAINER_WIDTH } from "./common";
|
|
14
15
|
import { useLargeLayout } from "../hooks";
|
|
15
16
|
import { EntitySidePanel } from "../core/EntitySidePanel";
|
|
@@ -19,8 +20,67 @@ const NEW_URL_HASH = "new";
|
|
|
19
20
|
export function getEntityViewWidth(props: EntitySidePanelProps<any>, small: boolean): string {
|
|
20
21
|
if (small) return CONTAINER_FULL_WIDTH;
|
|
21
22
|
const mainViewSelected = !props.selectedSubPath;
|
|
22
|
-
|
|
23
|
-
|
|
23
|
+
let resolvedWidth: string | undefined;
|
|
24
|
+
if (props.width) {
|
|
25
|
+
resolvedWidth = typeof props.width === "number" ? `${props.width}px` : props.width;
|
|
26
|
+
} else if (props.collection?.sideDialogWidth) {
|
|
27
|
+
resolvedWidth = typeof props.collection.sideDialogWidth === "number" ? `${props.collection.sideDialogWidth}px` : props.collection.sideDialogWidth;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
if (!mainViewSelected) {
|
|
31
|
+
return `calc(${ADDITIONAL_TAB_WIDTH} + ${resolvedWidth ?? FORM_CONTAINER_WIDTH})`
|
|
32
|
+
} else {
|
|
33
|
+
if (resolvedWidth) {
|
|
34
|
+
return resolvedWidth
|
|
35
|
+
} else if (!props.collection) {
|
|
36
|
+
return FORM_CONTAINER_WIDTH;
|
|
37
|
+
} else {
|
|
38
|
+
return calculateCollectionDesiredWidth(props.collection);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
const collectionViewWidthCache: { [key: string]: string } = {};
|
|
44
|
+
|
|
45
|
+
function calculateCollectionDesiredWidth(collection: EntityCollection<any>): string {
|
|
46
|
+
if (collectionViewWidthCache[collection.id]) {
|
|
47
|
+
return collectionViewWidthCache[collection.id];
|
|
48
|
+
}
|
|
49
|
+
const resolvedCollection = resolveCollection({
|
|
50
|
+
collection,
|
|
51
|
+
path: "__ignored",
|
|
52
|
+
ignoreMissingFields: true
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
let result = FORM_CONTAINER_WIDTH
|
|
56
|
+
if (resolvedCollection?.properties) {
|
|
57
|
+
const values = Object.values(resolvedCollection.properties).map((p: ResolvedProperty) => getNestedPropertiesDepth(p));
|
|
58
|
+
const maxDepth = Math.max(...values);
|
|
59
|
+
if (maxDepth < 3) {
|
|
60
|
+
result = FORM_CONTAINER_WIDTH;
|
|
61
|
+
} else {
|
|
62
|
+
result = 768 + 32 * (maxDepth - 2) + "px";
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
collectionViewWidthCache[collection.id] = result;
|
|
66
|
+
return result;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
function getNestedPropertiesDepth(property: ResolvedProperty, accumulator: number = 0): number {
|
|
70
|
+
if (property.dataType === "map" && property.properties) {
|
|
71
|
+
const values = Object.values(property.properties).flatMap((property) => getNestedPropertiesDepth(property, accumulator + 1));
|
|
72
|
+
return Math.max(...values);
|
|
73
|
+
} else if (property.dataType === "array" && property.oneOf) {
|
|
74
|
+
return accumulator + 3;
|
|
75
|
+
} else if (property.dataType === "array" && property.of) {
|
|
76
|
+
if (Array.isArray(property.of)) {
|
|
77
|
+
return Math.max(...property.of.map((p) => getNestedPropertiesDepth(p, accumulator + 1)));
|
|
78
|
+
} else {
|
|
79
|
+
return getNestedPropertiesDepth(property.of, accumulator + 1);
|
|
80
|
+
}
|
|
81
|
+
} else {
|
|
82
|
+
return accumulator + 1;
|
|
83
|
+
}
|
|
24
84
|
}
|
|
25
85
|
|
|
26
86
|
export const useBuildSideEntityController = (navigation: NavigationController,
|
|
@@ -34,23 +94,26 @@ export const useBuildSideEntityController = (navigation: NavigationController,
|
|
|
34
94
|
// only on initialisation, create panels from URL
|
|
35
95
|
useEffect(() => {
|
|
36
96
|
if (!navigation.loading && !initialised.current) {
|
|
97
|
+
console.debug("Initialising side entity controller");
|
|
37
98
|
if (navigation.isUrlCollectionPath(location.pathname)) {
|
|
38
99
|
const newFlag = location.hash === `#${NEW_URL_HASH}`;
|
|
39
100
|
const entityOrCollectionPath = navigation.urlPathToDataPath(location.pathname);
|
|
40
101
|
const panelsFromUrl = buildSidePanelsFromUrl(entityOrCollectionPath, navigation.collections ?? [], newFlag);
|
|
41
102
|
for (let i = 0; i < panelsFromUrl.length; i++) {
|
|
42
|
-
const
|
|
103
|
+
const props = panelsFromUrl[i];
|
|
43
104
|
setTimeout(() => {
|
|
44
105
|
if (i === 0)
|
|
45
|
-
sideDialogsController.replace(propsToSidePanel(
|
|
106
|
+
sideDialogsController.replace(propsToSidePanel(props, navigation.buildUrlCollectionPath, navigation.resolveAliasesFrom, smallLayout));
|
|
46
107
|
else
|
|
47
|
-
sideDialogsController.open(propsToSidePanel(
|
|
108
|
+
sideDialogsController.open(propsToSidePanel(props, navigation.buildUrlCollectionPath, navigation.resolveAliasesFrom, smallLayout))
|
|
48
109
|
}, 1);
|
|
49
110
|
}
|
|
111
|
+
} else {
|
|
112
|
+
// console.warn("Location path is not a collection path");
|
|
50
113
|
}
|
|
51
114
|
initialised.current = true;
|
|
52
115
|
}
|
|
53
|
-
}, [location, navigation, sideDialogsController, smallLayout]);
|
|
116
|
+
}, [location, navigation.loading, navigation.isUrlCollectionPath, navigation.buildUrlCollectionPath, navigation.resolveAliasesFrom, sideDialogsController, smallLayout, navigation]);
|
|
54
117
|
|
|
55
118
|
const close = useCallback(() => {
|
|
56
119
|
sideDialogsController.close();
|
|
@@ -73,9 +136,9 @@ export const useBuildSideEntityController = (navigation: NavigationController,
|
|
|
73
136
|
sideDialogsController.open(propsToSidePanel({
|
|
74
137
|
selectedSubPath: defaultSelectedView,
|
|
75
138
|
...props,
|
|
76
|
-
}, navigation, smallLayout));
|
|
139
|
+
}, navigation.buildUrlCollectionPath, navigation.resolveAliasesFrom, smallLayout));
|
|
77
140
|
|
|
78
|
-
}, [sideDialogsController, navigation, smallLayout]);
|
|
141
|
+
}, [sideDialogsController, navigation.buildUrlCollectionPath, navigation.resolveAliasesFrom, smallLayout]);
|
|
79
142
|
|
|
80
143
|
const replace = useCallback((props: EntitySidePanelProps<any>) => {
|
|
81
144
|
|
|
@@ -83,9 +146,9 @@ export const useBuildSideEntityController = (navigation: NavigationController,
|
|
|
83
146
|
throw Error("If you want to copy an entity you need to provide an entityId");
|
|
84
147
|
}
|
|
85
148
|
|
|
86
|
-
sideDialogsController.replace(propsToSidePanel(props, navigation, smallLayout));
|
|
149
|
+
sideDialogsController.replace(propsToSidePanel(props, navigation.buildUrlCollectionPath, navigation.resolveAliasesFrom, smallLayout));
|
|
87
150
|
|
|
88
|
-
}, [navigation, sideDialogsController, smallLayout]);
|
|
151
|
+
}, [navigation.buildUrlCollectionPath, navigation.resolveAliasesFrom, sideDialogsController, smallLayout]);
|
|
89
152
|
|
|
90
153
|
return {
|
|
91
154
|
close,
|
|
@@ -116,7 +179,8 @@ export function buildSidePanelsFromUrl(path: string, collections: EntityCollecti
|
|
|
116
179
|
sidePanels.push({
|
|
117
180
|
path: navigationEntry.path,
|
|
118
181
|
entityId: navigationEntry.entityId,
|
|
119
|
-
copy: false
|
|
182
|
+
copy: false,
|
|
183
|
+
width: navigationEntry.parentCollection?.sideDialogWidth
|
|
120
184
|
}
|
|
121
185
|
);
|
|
122
186
|
} else if (navigationEntry.type === "custom_view") {
|
|
@@ -146,27 +210,32 @@ export function buildSidePanelsFromUrl(path: string, collections: EntityCollecti
|
|
|
146
210
|
return sidePanels;
|
|
147
211
|
}
|
|
148
212
|
|
|
149
|
-
const propsToSidePanel = (props: EntitySidePanelProps<any>,
|
|
213
|
+
const propsToSidePanel = (props: EntitySidePanelProps<any>,
|
|
214
|
+
buildUrlCollectionPath: (path: string) => string,
|
|
215
|
+
resolveAliasesFrom: (pathWithAliases: string) => string,
|
|
216
|
+
smallLayout: boolean): SideDialogPanelProps => {
|
|
150
217
|
|
|
151
218
|
const collectionPath = removeInitialAndTrailingSlashes(props.path);
|
|
152
219
|
|
|
153
220
|
const newPath = props.entityId
|
|
154
|
-
?
|
|
155
|
-
:
|
|
156
|
-
const resolvedPath =
|
|
221
|
+
? buildUrlCollectionPath(`${collectionPath}/${props.entityId}/${props.selectedSubPath || ""}`)
|
|
222
|
+
: buildUrlCollectionPath(`${collectionPath}#${NEW_URL_HASH}`);
|
|
223
|
+
const resolvedPath = resolveAliasesFrom(props.path);
|
|
157
224
|
|
|
158
225
|
const resolvedPanelProps: EntitySidePanelProps<any> = {
|
|
159
226
|
...props,
|
|
160
|
-
path: resolvedPath
|
|
227
|
+
path: resolvedPath,
|
|
161
228
|
};
|
|
162
229
|
|
|
163
|
-
|
|
230
|
+
const entityViewWidth = getEntityViewWidth(props, smallLayout);
|
|
231
|
+
|
|
232
|
+
return {
|
|
164
233
|
key: `${props.path}/${props.entityId}`,
|
|
165
234
|
component: <EntitySidePanel {...resolvedPanelProps}/>,
|
|
166
235
|
urlPath: newPath,
|
|
167
|
-
parentUrlPath:
|
|
168
|
-
width:
|
|
236
|
+
parentUrlPath: buildUrlCollectionPath(collectionPath),
|
|
237
|
+
width: entityViewWidth,
|
|
169
238
|
onClose: props.onClose
|
|
170
|
-
}
|
|
239
|
+
};
|
|
171
240
|
}
|
|
172
241
|
;
|
|
@@ -84,8 +84,10 @@ export function UnsavedChangesDialog({
|
|
|
84
84
|
|
|
85
85
|
return (
|
|
86
86
|
<Dialog
|
|
87
|
+
onEscapeKeyDown={() => {
|
|
88
|
+
handleCancel();
|
|
89
|
+
}}
|
|
87
90
|
open={open}
|
|
88
|
-
onOpenChange={(open) => open ? handleCancel() : handleOk()}
|
|
89
91
|
>
|
|
90
92
|
<DialogContent>
|
|
91
93
|
<Typography variant={"h6"}>{title}</Typography>
|
|
@@ -47,13 +47,12 @@ export const PropertyPreview = React.memo(function PropertyPreview<T extends CMS
|
|
|
47
47
|
size,
|
|
48
48
|
height,
|
|
49
49
|
width,
|
|
50
|
-
|
|
50
|
+
interactive
|
|
51
51
|
} = props;
|
|
52
52
|
|
|
53
53
|
const property = resolveProperty({
|
|
54
54
|
propertyKey,
|
|
55
55
|
propertyOrBuilder: inputProperty,
|
|
56
|
-
propertyValue: value,
|
|
57
56
|
fields: customizationController.propertyConfigs
|
|
58
57
|
});
|
|
59
58
|
|
|
@@ -85,14 +84,17 @@ export const PropertyPreview = React.memo(function PropertyPreview<T extends CMS
|
|
|
85
84
|
content =
|
|
86
85
|
<UrlComponentPreview size={props.size}
|
|
87
86
|
url={value}
|
|
87
|
+
interactive={interactive}
|
|
88
88
|
previewType={stringProperty.url}/>;
|
|
89
|
+
} else if (stringProperty.markdown) {
|
|
90
|
+
content = <Markdown source={value} size={"small"}/>;
|
|
89
91
|
} else if (stringProperty.storage) {
|
|
92
|
+
const filePath = stringProperty.storage.previewUrl ? stringProperty.storage.previewUrl(value) : value;
|
|
90
93
|
content = <StorageThumbnail
|
|
94
|
+
interactive={interactive}
|
|
91
95
|
storeUrl={property.storage?.storeUrl ?? false}
|
|
92
96
|
size={props.size}
|
|
93
|
-
storagePathOrDownloadUrl={
|
|
94
|
-
} else if (stringProperty.markdown) {
|
|
95
|
-
content = <Markdown source={value}/>;
|
|
97
|
+
storagePathOrDownloadUrl={filePath}/>;
|
|
96
98
|
} else {
|
|
97
99
|
content = <StringPropertyPreview {...props}
|
|
98
100
|
property={stringProperty}
|
|
@@ -113,17 +115,7 @@ export const PropertyPreview = React.memo(function PropertyPreview<T extends CMS
|
|
|
113
115
|
content = <ArrayPropertyPreview {...props}
|
|
114
116
|
value={value}
|
|
115
117
|
property={property as ResolvedArrayProperty}/>;
|
|
116
|
-
}
|
|
117
|
-
// else if (arrayProperty.of.dataType === "map") {
|
|
118
|
-
// content =
|
|
119
|
-
// <ArrayOfMapsPreview propertyKey={propertyKey}
|
|
120
|
-
// property={property as ResolvedArrayProperty}
|
|
121
|
-
// value={value as Record<string, any>[]} // This might be wrong
|
|
122
|
-
// entity={entity}
|
|
123
|
-
// size={size}
|
|
124
|
-
// />;
|
|
125
|
-
// }
|
|
126
|
-
else if (arrayProperty.of.dataType === "reference") {
|
|
118
|
+
} else if (arrayProperty.of.dataType === "reference") {
|
|
127
119
|
content = <ArrayOfReferencesPreview {...props}
|
|
128
120
|
value={value}
|
|
129
121
|
property={property as ResolvedArrayProperty}/>;
|
|
@@ -182,8 +174,9 @@ export const PropertyPreview = React.memo(function PropertyPreview<T extends CMS
|
|
|
182
174
|
content = <ReferencePreview
|
|
183
175
|
disabled={!property.path}
|
|
184
176
|
previewProperties={property.previewProperties}
|
|
177
|
+
includeId={property.includeId}
|
|
178
|
+
includeEntityLink={property.includeEntityLink}
|
|
185
179
|
size={props.size}
|
|
186
|
-
// onClick={props.onClick}
|
|
187
180
|
reference={value as EntityReference}
|
|
188
181
|
/>;
|
|
189
182
|
} else {
|
|
@@ -3,7 +3,7 @@ import { CMSType, Property, ResolvedProperty } from "../types";
|
|
|
3
3
|
/**
|
|
4
4
|
* @group Preview components
|
|
5
5
|
*/
|
|
6
|
-
export type PreviewSize = "medium" | "small" | "
|
|
6
|
+
export type PreviewSize = "medium" | "small" | "smallest";
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
9
|
* @group Preview components
|
|
@@ -46,4 +46,10 @@ export interface PropertyPreviewProps<T extends CMSType = any, CustomProps = any
|
|
|
46
46
|
*/
|
|
47
47
|
customProps?: CustomProps;
|
|
48
48
|
|
|
49
|
+
/**
|
|
50
|
+
* If the preview should be interactive or not.
|
|
51
|
+
* This applies only to videos.
|
|
52
|
+
*/
|
|
53
|
+
interactive?: boolean;
|
|
54
|
+
|
|
49
55
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import { Checkbox,
|
|
2
|
+
import { Checkbox, cls } from "@firecms/ui";
|
|
3
3
|
import { PreviewSize } from "../PropertyPreviewProps";
|
|
4
4
|
import { Property } from "../../types";
|
|
5
5
|
|
|
@@ -21,6 +21,6 @@ export function BooleanPreview({
|
|
|
21
21
|
size={size}
|
|
22
22
|
color={"secondary"}/>
|
|
23
23
|
{property.name && <span
|
|
24
|
-
className={
|
|
24
|
+
className={cls("text-text-secondary dark:text-text-secondary-dark", size === "smallest" ? "text-sm" : "")}>{property.name}</span>}
|
|
25
25
|
</div>;
|
|
26
26
|
}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
+
import { Chip } from "@firecms/ui";
|
|
2
3
|
import { EnumValues } from "../../types";
|
|
3
4
|
import { buildEnumLabel, enumToObjectEntries, getColorScheme, getLabelOrConfigFrom } from "../../util/enums";
|
|
4
|
-
import { Chip } from "@firecms/ui";
|
|
5
5
|
|
|
6
6
|
export interface EnumValuesChipProps {
|
|
7
7
|
enumValues?: EnumValues;
|
|
8
8
|
enumKey: string | number;
|
|
9
|
-
size: "
|
|
9
|
+
size: "smallest" | "small" | "medium";
|
|
10
10
|
className?: string;
|
|
11
11
|
children?: React.ReactNode;
|
|
12
12
|
}
|