@firecms/core 3.0.0-canary.10 → 3.0.0-canary.100

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.
Files changed (238) hide show
  1. package/README.md +1 -1
  2. package/dist/app/AppBar.d.ts +12 -0
  3. package/dist/app/Drawer.d.ts +17 -0
  4. package/dist/app/Scaffold.d.ts +30 -0
  5. package/dist/app/index.d.ts +4 -0
  6. package/dist/app/useApp.d.ts +16 -0
  7. package/dist/components/CircularProgressCenter.d.ts +1 -1
  8. package/dist/components/ClearFilterSortButton.d.ts +5 -0
  9. package/dist/components/EntityCollectionTable/EntityCollectionRowActions.d.ts +11 -12
  10. package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +1 -1
  11. package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +5 -3
  12. package/dist/components/EntityCollectionTable/PropertyTableCell.d.ts +1 -0
  13. package/dist/components/EntityCollectionTable/column_utils.d.ts +1 -2
  14. package/dist/components/EntityCollectionTable/fields/TableReferenceField.d.ts +2 -0
  15. package/dist/components/EntityCollectionTable/internal/CollectionTableToolbar.d.ts +1 -4
  16. package/dist/components/EntityCollectionTable/internal/EntityTableCell.d.ts +2 -2
  17. package/dist/components/EntityCollectionTable/internal/popup_field/PopupFormField.d.ts +1 -1
  18. package/dist/components/EntityCollectionView/EntityCollectionView.d.ts +12 -2
  19. package/dist/components/EntityCollectionView/EntityCollectionViewStartActions.d.ts +11 -0
  20. package/dist/components/EntityPreview.d.ts +5 -4
  21. package/dist/components/ErrorView.d.ts +1 -1
  22. package/dist/components/HomePage/DefaultHomePage.d.ts +1 -1
  23. package/dist/components/HomePage/NavigationCardBinding.d.ts +1 -1
  24. package/dist/components/ReferenceWidget.d.ts +3 -1
  25. package/dist/components/SelectableTable/SelectableTable.d.ts +1 -1
  26. package/dist/components/SelectableTable/filters/ReferenceFilterField.d.ts +2 -1
  27. package/dist/components/VirtualTable/VirtualTableProps.d.ts +15 -12
  28. package/dist/components/VirtualTable/types.d.ts +3 -3
  29. package/dist/components/{EntityCollectionTable/internal → common}/default_entity_actions.d.ts +1 -1
  30. package/dist/components/common/index.d.ts +1 -0
  31. package/dist/components/common/table_height.d.ts +5 -0
  32. package/dist/components/common/types.d.ts +4 -6
  33. package/dist/components/common/useColumnsIds.d.ts +2 -1
  34. package/dist/components/common/useDataSourceEntityCollectionTableController.d.ts +3 -0
  35. package/dist/components/index.d.ts +2 -1
  36. package/dist/{components/FireCMSAppBar.d.ts → core/DefaultAppBar.d.ts} +6 -9
  37. package/dist/core/DefaultDrawer.d.ts +19 -0
  38. package/dist/core/DrawerNavigationItem.d.ts +9 -0
  39. package/dist/core/EntityEditView.d.ts +18 -4
  40. package/dist/core/FireCMS.d.ts +1 -1
  41. package/dist/core/NavigationRoutes.d.ts +3 -3
  42. package/dist/core/index.d.ts +3 -4
  43. package/dist/form/PropertiesForm.d.ts +8 -0
  44. package/dist/form/PropertyFieldBinding.d.ts +1 -1
  45. package/dist/form/components/ErrorFocus.d.ts +1 -1
  46. package/dist/form/components/FieldHelperText.d.ts +3 -3
  47. package/dist/form/components/StorageItemPreview.d.ts +4 -4
  48. package/dist/form/field_bindings/MapFieldBinding.d.ts +1 -1
  49. package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +2 -4
  50. package/dist/form/index.d.ts +0 -2
  51. package/dist/hooks/data/save.d.ts +1 -2
  52. package/dist/hooks/index.d.ts +1 -0
  53. package/dist/hooks/useBuildNavigationController.d.ts +1 -2
  54. package/dist/hooks/useProjectLog.d.ts +2 -2
  55. package/dist/hooks/useValidateAuthenticator.d.ts +4 -8
  56. package/dist/index.d.ts +1 -0
  57. package/dist/index.es.js +15833 -12220
  58. package/dist/index.es.js.map +1 -1
  59. package/dist/index.umd.js +19713 -7
  60. package/dist/index.umd.js.map +1 -1
  61. package/dist/internal/useBuildDataSource.d.ts +1 -16
  62. package/dist/preview/PropertyPreviewProps.d.ts +5 -0
  63. package/dist/preview/components/ReferencePreview.d.ts +2 -1
  64. package/dist/preview/components/StorageThumbnail.d.ts +2 -1
  65. package/dist/preview/components/UrlComponentPreview.d.ts +2 -1
  66. package/dist/types/auth.d.ts +3 -3
  67. package/dist/types/collections.d.ts +28 -4
  68. package/dist/types/datasource.d.ts +33 -19
  69. package/dist/types/entities.d.ts +5 -1
  70. package/dist/types/entity_actions.d.ts +14 -0
  71. package/dist/types/fields.d.ts +36 -30
  72. package/dist/types/index.d.ts +0 -1
  73. package/dist/types/navigation.d.ts +5 -5
  74. package/dist/types/plugins.d.ts +14 -4
  75. package/dist/types/properties.d.ts +32 -19
  76. package/dist/types/storage.d.ts +11 -3
  77. package/dist/util/entities.d.ts +1 -1
  78. package/dist/util/icon_list.d.ts +5 -1
  79. package/dist/util/icon_synonyms.d.ts +1 -97
  80. package/dist/util/icons.d.ts +2 -2
  81. package/dist/util/navigation_utils.d.ts +2 -2
  82. package/dist/util/objects.d.ts +1 -1
  83. package/dist/util/plurals.d.ts +0 -2
  84. package/dist/util/resolutions.d.ts +14 -13
  85. package/dist/util/storage.d.ts +23 -2
  86. package/dist/util/useStorageUploadController.d.ts +1 -1
  87. package/package.json +128 -119
  88. package/src/app/AppBar.tsx +18 -0
  89. package/src/app/Drawer.tsx +25 -0
  90. package/src/app/Scaffold.tsx +251 -0
  91. package/src/app/index.ts +4 -0
  92. package/src/app/useApp.tsx +32 -0
  93. package/src/components/ArrayContainer.tsx +1 -1
  94. package/src/components/CircularProgressCenter.tsx +1 -1
  95. package/src/components/ClearFilterSortButton.tsx +41 -0
  96. package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +9 -18
  97. package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +21 -20
  98. package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +10 -6
  99. package/src/components/EntityCollectionTable/PropertyTableCell.tsx +38 -34
  100. package/src/components/EntityCollectionTable/column_utils.tsx +3 -3
  101. package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +11 -2
  102. package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +14 -6
  103. package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +29 -34
  104. package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +16 -12
  105. package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +4 -5
  106. package/src/components/EntityCollectionView/EntityCollectionView.tsx +69 -45
  107. package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +68 -0
  108. package/src/components/EntityCollectionView/useSelectionController.tsx +19 -7
  109. package/src/components/EntityPreview.tsx +15 -9
  110. package/src/components/EntityView.tsx +5 -5
  111. package/src/components/ErrorView.tsx +1 -1
  112. package/src/components/HomePage/DefaultHomePage.tsx +24 -15
  113. package/src/components/HomePage/NavigationCard.tsx +3 -3
  114. package/src/components/HomePage/NavigationCardBinding.tsx +1 -1
  115. package/src/components/HomePage/SmallNavigationCard.tsx +5 -5
  116. package/src/components/PropertyIdCopyTooltipContent.tsx +2 -3
  117. package/src/components/ReferenceTable/ReferenceSelectionTable.tsx +1 -0
  118. package/src/components/ReferenceWidget.tsx +22 -12
  119. package/src/components/SearchIconsView.tsx +9 -6
  120. package/src/components/SelectableTable/SelectableTable.tsx +7 -7
  121. package/src/components/SelectableTable/filters/BooleanFilterField.tsx +2 -3
  122. package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +22 -7
  123. package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +28 -6
  124. package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +35 -15
  125. package/src/components/VirtualTable/VirtualTable.tsx +70 -37
  126. package/src/components/VirtualTable/VirtualTableCell.tsx +1 -1
  127. package/src/components/VirtualTable/VirtualTableHeader.tsx +4 -4
  128. package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +2 -2
  129. package/src/components/VirtualTable/VirtualTableProps.tsx +18 -14
  130. package/src/components/VirtualTable/VirtualTableRow.tsx +4 -5
  131. package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +1 -1
  132. package/src/components/VirtualTable/types.tsx +2 -3
  133. package/src/components/{EntityCollectionTable/internal → common}/default_entity_actions.tsx +2 -2
  134. package/src/components/common/index.ts +1 -0
  135. package/src/components/{VirtualTable/common.tsx → common/table_height.tsx} +5 -2
  136. package/src/components/common/types.tsx +4 -6
  137. package/src/components/common/useColumnsIds.tsx +23 -2
  138. package/src/components/common/useDataSourceEntityCollectionTableController.tsx +11 -0
  139. package/src/components/common/useTableSearchHelper.ts +52 -12
  140. package/src/components/index.tsx +2 -1
  141. package/src/contexts/DialogsProvider.tsx +2 -2
  142. package/src/{components/FireCMSAppBar.tsx → core/DefaultAppBar.tsx} +52 -37
  143. package/src/core/DefaultDrawer.tsx +177 -0
  144. package/src/core/DrawerNavigationItem.tsx +62 -0
  145. package/src/core/EntityEditView.tsx +709 -140
  146. package/src/core/EntitySidePanel.tsx +1 -2
  147. package/src/core/FireCMS.tsx +39 -44
  148. package/src/core/NavigationRoutes.tsx +7 -8
  149. package/src/core/SideDialogs.tsx +1 -0
  150. package/src/core/field_configs.tsx +2 -3
  151. package/src/core/index.tsx +3 -4
  152. package/src/form/PropertiesForm.tsx +81 -0
  153. package/src/form/PropertyFieldBinding.tsx +38 -9
  154. package/src/form/components/FieldHelperText.tsx +3 -3
  155. package/src/form/components/StorageItemPreview.tsx +20 -11
  156. package/src/form/components/StorageUploadProgress.tsx +3 -3
  157. package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +8 -5
  158. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +8 -5
  159. package/src/form/field_bindings/BlockFieldBinding.tsx +2 -2
  160. package/src/form/field_bindings/KeyValueFieldBinding.tsx +44 -39
  161. package/src/form/field_bindings/MapFieldBinding.tsx +11 -3
  162. package/src/form/field_bindings/MarkdownFieldBinding.tsx +2 -2
  163. package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +2 -9
  164. package/src/form/field_bindings/ReferenceFieldBinding.tsx +15 -13
  165. package/src/form/field_bindings/RepeatFieldBinding.tsx +11 -8
  166. package/src/form/field_bindings/SelectFieldBinding.tsx +3 -3
  167. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +22 -43
  168. package/src/form/field_bindings/SwitchFieldBinding.tsx +1 -1
  169. package/src/form/index.tsx +4 -4
  170. package/src/form/validation.ts +1 -17
  171. package/src/hooks/data/save.ts +3 -1
  172. package/src/hooks/data/useDataSource.tsx +1 -1
  173. package/src/hooks/index.tsx +1 -0
  174. package/src/hooks/useBuildLocalConfigurationPersistence.tsx +8 -10
  175. package/src/hooks/useBuildModeController.tsx +11 -5
  176. package/src/hooks/useBuildNavigationController.tsx +86 -29
  177. package/src/hooks/useProjectLog.tsx +19 -8
  178. package/src/hooks/useResolvedNavigationFrom.tsx +1 -1
  179. package/src/hooks/useValidateAuthenticator.tsx +21 -41
  180. package/src/index.ts +1 -0
  181. package/src/internal/useBuildDataSource.ts +56 -49
  182. package/src/internal/useBuildSideEntityController.tsx +88 -21
  183. package/src/preview/PropertyPreview.tsx +9 -16
  184. package/src/preview/PropertyPreviewProps.tsx +6 -0
  185. package/src/preview/components/BooleanPreview.tsx +2 -2
  186. package/src/preview/components/EnumValuesChip.tsx +1 -1
  187. package/src/preview/components/ImagePreview.tsx +21 -33
  188. package/src/preview/components/ReferencePreview.tsx +23 -23
  189. package/src/preview/components/StorageThumbnail.tsx +5 -1
  190. package/src/preview/components/UrlComponentPreview.tsx +44 -11
  191. package/src/preview/property_previews/ArrayOfMapsPreview.tsx +0 -1
  192. package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +2 -1
  193. package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +0 -1
  194. package/src/preview/property_previews/ArrayOfStringsPreview.tsx +0 -1
  195. package/src/preview/property_previews/ArrayOneOfPreview.tsx +2 -3
  196. package/src/preview/property_previews/ArrayPropertyPreview.tsx +2 -3
  197. package/src/preview/property_previews/MapPropertyPreview.tsx +5 -5
  198. package/src/preview/property_previews/StringPropertyPreview.tsx +2 -2
  199. package/src/types/auth.tsx +3 -3
  200. package/src/types/collections.ts +35 -6
  201. package/src/types/customization_controller.tsx +0 -1
  202. package/src/types/datasource.ts +40 -23
  203. package/src/types/entities.ts +9 -1
  204. package/src/types/entity_actions.tsx +16 -3
  205. package/src/types/fields.tsx +39 -33
  206. package/src/types/index.ts +0 -1
  207. package/src/types/navigation.ts +6 -7
  208. package/src/types/plugins.tsx +16 -6
  209. package/src/types/properties.ts +37 -20
  210. package/src/types/storage.ts +12 -3
  211. package/src/util/entities.ts +5 -4
  212. package/src/util/enums.ts +1 -1
  213. package/src/util/icon_list.ts +15 -10
  214. package/src/util/icon_synonyms.ts +3 -99
  215. package/src/util/navigation_utils.ts +6 -6
  216. package/src/util/objects.ts +25 -28
  217. package/src/util/permissions.ts +1 -0
  218. package/src/util/plurals.ts +0 -2
  219. package/src/util/resolutions.ts +44 -39
  220. package/src/util/storage.ts +75 -21
  221. package/src/util/strings.ts +2 -2
  222. package/src/util/useStorageUploadController.tsx +21 -3
  223. package/src/util/useTraceUpdate.tsx +1 -0
  224. package/dist/components/VirtualTable/common.d.ts +0 -2
  225. package/dist/core/Drawer.d.ts +0 -23
  226. package/dist/core/Scaffold.d.ts +0 -55
  227. package/dist/core/SideEntityView.d.ts +0 -7
  228. package/dist/form/EntityForm.d.ts +0 -77
  229. package/dist/internal/useBuildCustomizationController.d.ts +0 -2
  230. package/dist/internal/useLocaleConfig.d.ts +0 -1
  231. package/dist/types/appcheck.d.ts +0 -26
  232. package/src/core/Drawer.tsx +0 -191
  233. package/src/core/Scaffold.tsx +0 -281
  234. package/src/core/SideEntityView.tsx +0 -38
  235. package/src/form/EntityForm.tsx +0 -728
  236. package/src/internal/useBuildCustomizationController.tsx +0 -5
  237. package/src/internal/useLocaleConfig.tsx +0 -18
  238. package/src/types/appcheck.ts +0 -29
@@ -1,6 +1,6 @@
1
- import { EntityValues } from "./entities";
2
1
  import { CMSType, PropertyOrBuilder } from "./properties";
3
2
  import { ResolvedEntityCollection, ResolvedProperty } from "./resolved_entities";
3
+ import { FormexController } from "@firecms/formex";
4
4
 
5
5
  /**
6
6
  * When building a custom field you need to create a React component that takes
@@ -21,11 +21,6 @@ export interface FieldProps<T extends CMSType = any, CustomProps = any, M extend
21
21
  */
22
22
  value: T;
23
23
 
24
- /**
25
- * Initial value of this field
26
- */
27
- // initialValue: T | undefined;
28
-
29
24
  /**
30
25
  * Set value of field directly
31
26
  */
@@ -42,7 +37,7 @@ export interface FieldProps<T extends CMSType = any, CustomProps = any, M extend
42
37
  /**
43
38
  * Is the form currently submitting
44
39
  */
45
- isSubmitting: boolean;
40
+ isSubmitting?: boolean;
46
41
 
47
42
  /**
48
43
  * Should this field show the error indicator.
@@ -50,19 +45,19 @@ export interface FieldProps<T extends CMSType = any, CustomProps = any, M extend
50
45
  * filled) but we don't want to show the error until the user has tried
51
46
  * saving.
52
47
  */
53
- showError: boolean;
48
+ showError?: boolean;
54
49
 
55
50
  /**
56
51
  * Is there an error in this field. The error field has the same shape as
57
52
  * the field, replacing values with a string containing the error.
58
53
  * It takes the value `null` if there is no error
59
54
  */
60
- error: any | null;
55
+ error?: any | null;
61
56
 
62
57
  /**
63
58
  * Has this field been touched
64
59
  */
65
- touched: boolean;
60
+ touched?: boolean;
66
61
 
67
62
  /**
68
63
  * Property related to this field
@@ -72,38 +67,38 @@ export interface FieldProps<T extends CMSType = any, CustomProps = any, M extend
72
67
  /**
73
68
  * Should this field include a description
74
69
  */
75
- includeDescription: boolean;
70
+ includeDescription?: boolean;
76
71
 
77
72
  /**
78
73
  * Flag to indicate that the underlying value has been updated in the
79
74
  * datasource
80
75
  */
81
- underlyingValueHasChanged: boolean;
76
+ underlyingValueHasChanged?: boolean;
82
77
 
83
78
  /**
84
79
  * Is this field part of an array
85
80
  */
86
- partOfArray: boolean;
81
+ partOfArray?: boolean;
87
82
 
88
83
  /**
89
84
  * Is this field part of a block (oneOf array)
90
85
  */
91
- partOfBlock: boolean;
86
+ partOfBlock?: boolean;
92
87
 
93
88
  /**
94
89
  * Is this field being rendered in the entity table popup
95
90
  */
96
- tableMode: boolean;
91
+ tableMode?: boolean;
97
92
 
98
93
  /**
99
94
  * Should this field autofocus on mount
100
95
  */
101
- autoFocus: boolean;
96
+ autoFocus?: boolean;
102
97
 
103
98
  /**
104
99
  * Additional properties set by the developer
105
100
  */
106
- customProps: CustomProps
101
+ customProps?: CustomProps
107
102
 
108
103
  /**
109
104
  * Additional values related to the state of the form or the entity
@@ -113,7 +108,7 @@ export interface FieldProps<T extends CMSType = any, CustomProps = any, M extend
113
108
  /**
114
109
  * Flag to indicate if this field should be disabled
115
110
  */
116
- disabled: boolean;
111
+ disabled?: boolean;
117
112
 
118
113
  }
119
114
 
@@ -124,37 +119,42 @@ export interface FieldProps<T extends CMSType = any, CustomProps = any, M extend
124
119
  export interface FormContext<M extends Record<string, any> = any> {
125
120
 
126
121
  /**
127
- * Collection of the entity being modified
122
+ * Current values of the entity
128
123
  */
129
- collection: ResolvedEntityCollection<M>;
124
+ values: M;
130
125
 
131
126
  /**
132
- * Current values of the entity
127
+ * Update the value of a field
128
+ * @param key
129
+ * @param value
130
+ * @param shouldValidate
131
+ */
132
+ setFieldValue: (key: string, value: any, shouldValidate?: boolean) => void;
133
+
134
+ /**
135
+ * Save the entity.
133
136
  */
134
- values: EntityValues<M>;
137
+ save: (values: M) => void;
135
138
 
136
139
  /**
137
- * Entity id, it can be null if it's a new entity
140
+ * Collection of the entity being modified
138
141
  */
139
- entityId?: string;
142
+ collection?: ResolvedEntityCollection<M>;
140
143
 
141
144
  /**
142
- * Path this entity is located at
145
+ * Entity id, it can be null if it's a new entity
143
146
  */
144
- path: string;
147
+ entityId?: string;
145
148
 
146
149
  /**
147
- * Update the value of a field
148
- * @param key
149
- * @param value
150
- * @param shouldValidate
150
+ * Path this entity is located at
151
151
  */
152
- setFieldValue: (key: string, value: any, shouldValidate?: boolean) => void;
152
+ path?: string;
153
153
 
154
154
  /**
155
- * Save the entity
155
+ * This is the underlying formex controller that powers the form
156
156
  */
157
- save: (values: EntityValues<M>) => void;
157
+ formex: FormexController<M>;
158
158
  }
159
159
 
160
160
  /**
@@ -217,4 +217,10 @@ export interface PropertyFieldBindingProps<T extends CMSType, M extends Record<s
217
217
  * Should this field be disabled
218
218
  */
219
219
  disabled?: boolean;
220
+
221
+ /**
222
+ * Index of the field in the array.
223
+ * Only used when the field is part of an array.
224
+ */
225
+ index?: number;
220
226
  }
@@ -23,7 +23,6 @@ export * from "./plugins";
23
23
  export * from "./analytics";
24
24
  export * from "./firecms";
25
25
  export * from "./roles";
26
- export * from "./appcheck";
27
26
  export * from "./export_import";
28
27
  export * from "./modify_collections";
29
28
  export * from "./analytics_controller";
@@ -7,7 +7,7 @@ import { EntityReference } from "./entities";
7
7
  * attributes.
8
8
  * @group Models
9
9
  */
10
- export type NavigationController = {
10
+ export type NavigationController<EC extends EntityCollection = EntityCollection<any>> = {
11
11
 
12
12
  /**
13
13
  * List of the mapped collections in the CMS.
@@ -56,18 +56,17 @@ export type NavigationController = {
56
56
  * Get the collection configuration for a given path.
57
57
  * The collection is resolved from the given path or alias.
58
58
  */
59
- getCollection: <EC extends EntityCollection = EntityCollection<any>>(pathOrAlias: string,
60
- entityId?: string,
61
- includeUserOverride?: boolean) => EC | undefined;
59
+ getCollection: (pathOrId: string,
60
+ includeUserOverride?: boolean) => EC | undefined;
62
61
  /**
63
- * Get the collection configuration from its parent path segments.
62
+ * Get the collection configuration from its parent ids.
64
63
  */
65
- getCollectionFromIds: <EC extends EntityCollection = EntityCollection<any>>(ids: string[]) => EC | undefined;
64
+ getCollectionFromIds: (ids: string[]) => EC | undefined;
66
65
 
67
66
  /**
68
67
  * Get the collection configuration from its parent path segments.
69
68
  */
70
- getCollectionFromPaths: <EC extends EntityCollection = EntityCollection<any>>(pathSegments: string[]) => EC | undefined;
69
+ getCollectionFromPaths: (pathSegments: string[]) => EC | undefined;
71
70
 
72
71
  /**
73
72
  * Default path under the navigation routes of the CMS will be created
@@ -1,20 +1,19 @@
1
1
  import React, { PropsWithChildren } from "react";
2
2
 
3
3
  import { FireCMSContext } from "./firecms_context";
4
- import { CollectionActionsProps, EntityCollection } from "./collections";
4
+ import { CollectionActionsProps, EntityCollection, EntityTableController } from "./collections";
5
5
  import { User } from "./user";
6
6
  import { FieldProps, FormContext } from "./fields";
7
7
  import { CMSType, Property } from "./properties";
8
8
  import { EntityStatus } from "./entities";
9
9
  import { ResolvedProperty } from "./resolved_entities";
10
- import { CMSView } from "./navigation";
11
10
 
12
11
  /**
13
12
  * Interface used to define plugins for FireCMS.
14
13
  * NOTE: This is a work in progress and the API is not stable yet.
15
14
  * @group Core
16
15
  */
17
- export type FireCMSPlugin<PROPS = any, FORM_PROPS = any, EC extends EntityCollection = EntityCollection, COL_ACTIONS_PROPS = any> = {
16
+ export type FireCMSPlugin<PROPS = any, FORM_PROPS = any, EC extends EntityCollection = EntityCollection, COL_ACTIONS_PROPS = any, COL_ACTIONS_START__PROPS = any> = {
18
17
 
19
18
  /**
20
19
  * Key of the plugin. This is used to identify the plugin in the CMS.
@@ -94,9 +93,18 @@ export type FireCMSPlugin<PROPS = any, FORM_PROPS = any, EC extends EntityCollec
94
93
  * toolbar.
95
94
  */
96
95
  CollectionActions?: React.ComponentType<CollectionActionsProps<any, any, EC> & COL_ACTIONS_PROPS> | React.ComponentType<CollectionActionsProps<any, any, EC> & COL_ACTIONS_PROPS>[];
97
-
98
96
  collectionActionsProps?: COL_ACTIONS_PROPS;
99
97
 
98
+ CollectionActionsStart?: React.ComponentType<CollectionActionsProps<any, any, EC> & COL_ACTIONS_START__PROPS> | React.ComponentType<CollectionActionsProps<any, any, EC> & COL_ACTIONS_START__PROPS>[];
99
+ collectionActionsStartProps?: COL_ACTIONS_START__PROPS;
100
+
101
+ blockSearch?: (props: {
102
+ context: FireCMSContext,
103
+ path: string,
104
+ collection: EC,
105
+ parentCollectionIds?: string[]
106
+ }) => boolean;
107
+
100
108
  showTextSearchBar?: (props: {
101
109
  context: FireCMSContext,
102
110
  path: string,
@@ -122,6 +130,7 @@ export type FireCMSPlugin<PROPS = any, FORM_PROPS = any, EC extends EntityCollec
122
130
  parentCollectionIds: string[],
123
131
  onHover: boolean,
124
132
  collection: EC;
133
+ tableController: EntityTableController;
125
134
  }>;
126
135
 
127
136
  /**
@@ -132,6 +141,7 @@ export type FireCMSPlugin<PROPS = any, FORM_PROPS = any, EC extends EntityCollec
132
141
  fullPath: string,
133
142
  parentCollectionIds: string[],
134
143
  collection: EC;
144
+ tableController: EntityTableController;
135
145
  }>;
136
146
  }
137
147
 
@@ -193,8 +203,8 @@ export type PluginFieldBuilderParams<T extends CMSType = CMSType, M extends Reco
193
203
  property: Property<T> | ResolvedProperty<T>;
194
204
  Field: React.ComponentType<FieldProps<T, any, M>>;
195
205
  plugin: FireCMSPlugin;
196
- path: string;
197
- collection: EC;
206
+ path?: string;
207
+ collection?: EC;
198
208
  };
199
209
 
200
210
  export interface PluginGenericProps<UserType extends User = User> {
@@ -1,7 +1,7 @@
1
1
  import React from "react";
2
2
  import { FieldProps } from "./fields";
3
3
  import { PropertyPreviewProps } from "../preview";
4
- import { EntityReference, EntityValues, GeoPoint } from "./entities";
4
+ import { EntityReference, EntityValues, GeoPoint, Vector } from "./entities";
5
5
  import { ResolvedArrayProperty, ResolvedStringProperty } from "./resolved_entities";
6
6
  import { FilterValues } from "./collections";
7
7
  import { ChipColorKey, ChipColorScheme } from "@firecms/ui";
@@ -15,9 +15,10 @@ export type DataType<T extends CMSType = CMSType> =
15
15
  T extends boolean ? "boolean" :
16
16
  T extends Date ? "date" :
17
17
  T extends GeoPoint ? "geopoint" :
18
- T extends EntityReference ? "reference" :
19
- T extends Array<CMSType> ? "array" :
20
- T extends Record<string, any> ? "map" : never;
18
+ T extends Vector ? "vector" :
19
+ T extends EntityReference ? "reference" :
20
+ T extends Array<CMSType> ? "array" :
21
+ T extends Record<string, any> ? "map" : never;
21
22
 
22
23
  /**
23
24
  * @group Entity properties
@@ -148,7 +149,7 @@ export interface BaseProperty<T extends CMSType, CustomProps = any> {
148
149
  /**
149
150
  * This value will be set by default for new entities.
150
151
  */
151
- defaultValue?: T;
152
+ defaultValue?: T | null;
152
153
 
153
154
  /**
154
155
  * Should this property be editable. If set to true, the user will be able to modify the property and
@@ -276,6 +277,7 @@ export type PropertyBuilder<T extends CMSType = any, M extends Record<string, an
276
277
  values,
277
278
  previousValues,
278
279
  propertyValue,
280
+ index,
279
281
  path,
280
282
  entityId
281
283
  }: PropertyBuilderProps<M>) => Property<T> | null;
@@ -608,6 +610,16 @@ export interface ReferenceProperty extends BaseProperty<EntityReference> {
608
610
  */
609
611
  previewProperties?: string[];
610
612
 
613
+ /**
614
+ * Should the reference include the ID of the entity. Defaults to `true`
615
+ */
616
+ includeId?: boolean;
617
+
618
+ /**
619
+ * Should the reference include a link to the entity (open the entity details). Defaults to `true`
620
+ */
621
+ includeEntityLink?: boolean;
622
+
611
623
  }
612
624
 
613
625
  /**
@@ -722,13 +734,13 @@ export type StorageConfig = {
722
734
  * You can use this prop to customize the uploaded filename.
723
735
  * You can use a function as a callback or a string where you
724
736
  * specify some placeholders that get replaced with the corresponding values.
725
- * - {file} - Full file name
726
- * - {file.name} - Name of the file without extension
727
- * - {file.ext} - Extension of the file
728
- * - {rand} - Random value used to avoid name collisions
729
- * - {entityId} - ID of the entity
730
- * - {propertyKey} - ID of this property
731
- * - {path} - Path of this entity
737
+ * - `{file}` - Full file name
738
+ * - `{file.name}` - Name of the file without extension
739
+ * - `{file.ext}` - Extension of the file
740
+ * - `{rand}` - Random value used to avoid name collisions
741
+ * - `{entityId}` - ID of the entity
742
+ * - `{propertyKey}` - ID of this property
743
+ * - `{path}` - Path of this entity
732
744
  *
733
745
  * @param context
734
746
  */
@@ -739,13 +751,13 @@ export type StorageConfig = {
739
751
  *
740
752
  * You can use a function as a callback or a string where you
741
753
  * specify some placeholders that get replaced with the corresponding values.
742
- * - {file} - Full file name
743
- * - {file.name} - Name of the file without extension
744
- * - {file.ext} - Extension of the file
745
- * - {rand} - Random value used to avoid name collisions
746
- * - {entityId} - ID of the entity
747
- * - {propertyKey} - ID of this property
748
- * - {path} - Path of this entity
754
+ * - `{file}` - Full file name
755
+ * - `{file.name}` - Name of the file without extension
756
+ * - `{file.ext}` - Extension of the file
757
+ * - `{rand}` - Random value used to avoid name collisions
758
+ * - `{entityId}` - ID of the entity
759
+ * - `{propertyKey}` - ID of this property
760
+ * - `{path}` - Path of this entity
749
761
  */
750
762
  storagePath: string | ((context: UploadedFileContext) => string);
751
763
 
@@ -772,6 +784,11 @@ export type StorageConfig = {
772
784
  */
773
785
  postProcess?: (pathOrUrl: string) => Promise<string>;
774
786
 
787
+ /**
788
+ * You can use this prop in order to provide a custom preview URL.
789
+ * Useful when the file's path is different from the original field value
790
+ */
791
+ previewUrl?: (fileName: string) => string;
775
792
  }
776
793
 
777
794
  /**
@@ -801,7 +818,7 @@ export interface UploadedFileContext {
801
818
  /**
802
819
  * Entity path. E.g. `products/PID/locales`
803
820
  */
804
- path: string;
821
+ path?: string;
805
822
 
806
823
  /**
807
824
  * Values of the current entity
@@ -6,6 +6,7 @@ export interface UploadFileProps {
6
6
  fileName?: string,
7
7
  path?: string,
8
8
  metadata?: any,
9
+ bucket?: string
9
10
  }
10
11
 
11
12
  /**
@@ -16,6 +17,10 @@ export interface UploadFileResult {
16
17
  * Storage path including the file name where the file was uploaded.
17
18
  */
18
19
  path: string;
20
+ /**
21
+ * Bucket where the file was uploaded
22
+ */
23
+ bucket: string;
19
24
  }
20
25
 
21
26
  /**
@@ -73,24 +78,28 @@ export interface StorageSource {
73
78
  * @param fileName
74
79
  * @param path
75
80
  * @param metadata
81
+ * @param bucket
76
82
  */
77
83
  uploadFile: ({
78
84
  file,
79
85
  fileName,
80
86
  path,
81
- metadata
87
+ metadata,
88
+ bucket
82
89
  }: UploadFileProps) => Promise<UploadFileResult>;
83
90
 
84
91
  /**
85
92
  * Convert a storage path or URL into a download configuration
86
93
  * @param path
94
+ * @param bucket
87
95
  */
88
- getDownloadURL: (pathOrUrl: string) => Promise<DownloadConfig>;
96
+ getDownloadURL: (pathOrUrl: string, bucket?: string) => Promise<DownloadConfig>;
89
97
 
90
98
  /**
91
99
  * Get a file from a storage path.
92
100
  * It returns null if the file does not exist.
93
101
  * @param props
102
+ * @param bucket
94
103
  */
95
- getFile: (path:string) => Promise<File | null>;
104
+ getFile: (path: string, bucket?: string) => Promise<File | null>;
96
105
  }
@@ -48,12 +48,12 @@ export function getDefaultValuesFor<M extends Record<string, any>>(properties: P
48
48
 
49
49
  export function getDefaultValueFor(property: PropertyOrBuilder) {
50
50
  if (isPropertyBuilder(property)) return undefined;
51
- if (property.dataType === "map" && property.properties) {
51
+ if (property.defaultValue || property.defaultValue === null) {
52
+ return property.defaultValue;
53
+ } else if (property.dataType === "map" && property.properties) {
52
54
  const defaultValuesFor = getDefaultValuesFor(property.properties as Properties);
53
55
  if (Object.keys(defaultValuesFor).length === 0) return undefined;
54
56
  return defaultValuesFor;
55
- } else if (property.defaultValue) {
56
- return property.defaultValue;
57
57
  } else {
58
58
  return getDefaultValueForDataType(property.dataType);
59
59
  }
@@ -139,7 +139,7 @@ export function sanitizeData<M extends Record<string, any>>
139
139
  return result;
140
140
  }
141
141
 
142
- export function getReferenceFrom<M extends Record<string, any>>(entity: Entity<M>): EntityReference<M> {
142
+ export function getReferenceFrom<M extends Record<string, any>>(entity: Entity<M>): EntityReference {
143
143
  return new EntityReference(entity.id, entity.path);
144
144
  }
145
145
 
@@ -152,6 +152,7 @@ export function traverseValuesProperties<M extends Record<string, any>>(
152
152
  .map(([key, property]) => {
153
153
  const inputValue = inputValues && (inputValues)[key];
154
154
  const updatedValue = traverseValueProperty(inputValue, property as Property, operation);
155
+ if (updatedValue === null) return null;
155
156
  if (updatedValue === undefined) return undefined;
156
157
  return ({ [key]: updatedValue });
157
158
  })
package/src/util/enums.ts CHANGED
@@ -22,7 +22,7 @@ export function enumToObjectEntries(enumValues: EnumValues): EnumValueConfig[] {
22
22
  }
23
23
 
24
24
  export function getLabelOrConfigFrom(enumValues: EnumValueConfig[], key?: string | number): EnumValueConfig | undefined {
25
- if (!key) return undefined;
25
+ if (key === null || key === undefined) return undefined;
26
26
  return enumValues.find((entry) => String(entry.id) === String(key));
27
27
  }
28
28
 
@@ -1,17 +1,22 @@
1
- import { icon_synonyms } from "./icon_synonyms";
1
+ import { iconSynonyms } from "./icon_synonyms";
2
2
  import { iconKeys } from "@firecms/ui";
3
+ import Fuse from "fuse.js";
3
4
 
4
- // @ts-ignore
5
- import * as JsSearch from "js-search";
6
5
 
7
- export const iconsSearch = new JsSearch.Search("key");
8
- iconsSearch.addIndex("synonyms");
9
-
10
- iconsSearch.addDocuments(iconKeys
6
+ const map = iconKeys
11
7
  .map((importName) => {
8
+ // @ts-ignore
9
+ const iconSynonym = importName in iconSynonyms ? iconSynonyms[importName] : "";
12
10
  return {
13
11
  key: importName,
14
- // @ts-ignore
15
- synonyms: icon_synonyms[importName] ?? [],
12
+ synonyms: iconSynonym,
16
13
  }
17
- }));
14
+ });
15
+ export const iconsSearch = new Fuse(map, {
16
+ isCaseSensitive: false,
17
+ shouldSort: true,
18
+ distance: 0,
19
+ keys: ["key", "synonyms"]
20
+ })
21
+
22
+