@firecms/core 3.0.0-canary.16 → 3.0.0-canary.161

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 (329) hide show
  1. package/README.md +3 -3
  2. package/dist/app/AppBar.d.ts +12 -0
  3. package/dist/app/Drawer.d.ts +16 -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/ArrayContainer.d.ts +19 -6
  8. package/dist/components/CircularProgressCenter.d.ts +1 -1
  9. package/dist/components/ClearFilterSortButton.d.ts +5 -0
  10. package/dist/components/{DeleteConfirmationDialog.d.ts → ConfirmationDialog.d.ts} +1 -1
  11. package/dist/components/EntityCollectionTable/EntityCollectionRowActions.d.ts +11 -12
  12. package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +1 -1
  13. package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +7 -5
  14. package/dist/components/EntityCollectionTable/PropertyTableCell.d.ts +1 -0
  15. package/dist/components/EntityCollectionTable/column_utils.d.ts +1 -2
  16. package/dist/components/EntityCollectionTable/fields/TableReferenceField.d.ts +3 -1
  17. package/dist/components/EntityCollectionTable/internal/CollectionTableToolbar.d.ts +1 -4
  18. package/dist/components/EntityCollectionTable/internal/EntityTableCell.d.ts +2 -2
  19. package/dist/components/EntityCollectionTable/internal/popup_field/PopupFormField.d.ts +7 -4
  20. package/dist/components/EntityCollectionView/EntityCollectionView.d.ts +12 -2
  21. package/dist/components/EntityCollectionView/EntityCollectionViewStartActions.d.ts +11 -0
  22. package/dist/components/EntityCollectionView/utils.d.ts +3 -0
  23. package/dist/components/EntityPreview.d.ts +7 -6
  24. package/dist/components/ErrorView.d.ts +1 -1
  25. package/dist/components/HomePage/DefaultHomePage.d.ts +1 -1
  26. package/dist/components/HomePage/NavigationCardBinding.d.ts +1 -1
  27. package/dist/components/PropertyConfigBadge.d.ts +2 -1
  28. package/dist/components/PropertyIdCopyTooltip.d.ts +8 -0
  29. package/dist/components/ReferenceWidget.d.ts +3 -1
  30. package/dist/components/SelectableTable/SelectableTable.d.ts +1 -1
  31. package/dist/components/SelectableTable/filters/ReferenceFilterField.d.ts +2 -1
  32. package/dist/components/VirtualTable/VirtualTableProps.d.ts +15 -12
  33. package/dist/components/VirtualTable/types.d.ts +3 -3
  34. package/dist/components/{EntityCollectionTable/internal → common}/default_entity_actions.d.ts +1 -1
  35. package/dist/components/common/index.d.ts +1 -0
  36. package/dist/components/common/table_height.d.ts +5 -0
  37. package/dist/components/common/types.d.ts +4 -6
  38. package/dist/components/common/useColumnsIds.d.ts +2 -1
  39. package/dist/components/common/useDataSourceEntityCollectionTableController.d.ts +4 -1
  40. package/dist/components/index.d.ts +4 -2
  41. package/dist/{components/FireCMSAppBar.d.ts → core/DefaultAppBar.d.ts} +6 -9
  42. package/dist/core/DefaultDrawer.d.ts +19 -0
  43. package/dist/core/DrawerNavigationItem.d.ts +10 -0
  44. package/dist/core/EntityEditView.d.ts +18 -4
  45. package/dist/core/FireCMS.d.ts +2 -2
  46. package/dist/core/NavigationRoutes.d.ts +3 -3
  47. package/dist/core/index.d.ts +3 -4
  48. package/dist/form/PropertyFieldBinding.d.ts +1 -1
  49. package/dist/form/components/ErrorFocus.d.ts +1 -1
  50. package/dist/form/components/FieldHelperText.d.ts +3 -3
  51. package/dist/form/components/LabelWithIcon.d.ts +1 -1
  52. package/dist/form/components/LabelWithIconAndTooltip.d.ts +15 -0
  53. package/dist/form/components/StorageItemPreview.d.ts +4 -4
  54. package/dist/form/components/index.d.ts +1 -1
  55. package/dist/form/field_bindings/ArrayCustomShapedFieldBinding.d.ts +1 -1
  56. package/dist/form/field_bindings/ArrayOfReferencesFieldBinding.d.ts +1 -1
  57. package/dist/form/field_bindings/BlockFieldBinding.d.ts +1 -1
  58. package/dist/form/field_bindings/KeyValueFieldBinding.d.ts +1 -1
  59. package/dist/form/field_bindings/MapFieldBinding.d.ts +1 -1
  60. package/dist/form/field_bindings/MarkdownEditorFieldBinding.d.ts +11 -0
  61. package/dist/form/field_bindings/{MultiSelectBinding.d.ts → MultiSelectFieldBinding.d.ts} +1 -1
  62. package/dist/form/field_bindings/ReadOnlyFieldBinding.d.ts +1 -1
  63. package/dist/form/field_bindings/ReferenceFieldBinding.d.ts +2 -2
  64. package/dist/form/field_bindings/RepeatFieldBinding.d.ts +1 -1
  65. package/dist/form/field_bindings/SelectFieldBinding.d.ts +1 -1
  66. package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +3 -5
  67. package/dist/form/field_bindings/SwitchFieldBinding.d.ts +1 -2
  68. package/dist/form/field_bindings/TextFieldBinding.d.ts +1 -1
  69. package/dist/form/index.d.ts +3 -5
  70. package/dist/form/useClearRestoreValue.d.ts +2 -2
  71. package/dist/hooks/data/delete.d.ts +4 -4
  72. package/dist/hooks/data/save.d.ts +4 -5
  73. package/dist/hooks/data/useCollectionFetch.d.ts +1 -1
  74. package/dist/hooks/data/useEntityFetch.d.ts +3 -3
  75. package/dist/hooks/index.d.ts +1 -0
  76. package/dist/hooks/useAuthController.d.ts +1 -1
  77. package/dist/hooks/useBuildNavigationController.d.ts +3 -4
  78. package/dist/hooks/useFireCMSContext.d.ts +1 -1
  79. package/dist/hooks/useProjectLog.d.ts +8 -2
  80. package/dist/hooks/useResolvedNavigationFrom.d.ts +3 -3
  81. package/dist/hooks/useValidateAuthenticator.d.ts +5 -9
  82. package/dist/index.d.ts +1 -0
  83. package/dist/index.es.js +20199 -14111
  84. package/dist/index.es.js.map +1 -1
  85. package/dist/index.umd.js +22769 -588
  86. package/dist/index.umd.js.map +1 -1
  87. package/dist/internal/useBuildDataSource.d.ts +1 -16
  88. package/dist/preview/PropertyPreviewProps.d.ts +6 -1
  89. package/dist/preview/components/EnumValuesChip.d.ts +1 -1
  90. package/dist/preview/components/ReferencePreview.d.ts +3 -2
  91. package/dist/preview/components/StorageThumbnail.d.ts +2 -1
  92. package/dist/preview/components/UrlComponentPreview.d.ts +2 -1
  93. package/dist/preview/util.d.ts +3 -3
  94. package/dist/types/auth.d.ts +8 -10
  95. package/dist/types/collections.d.ts +53 -18
  96. package/dist/types/datasource.d.ts +51 -35
  97. package/dist/types/entities.d.ts +6 -1
  98. package/dist/types/entity_actions.d.ts +18 -4
  99. package/dist/types/entity_callbacks.d.ts +16 -16
  100. package/dist/types/entity_overrides.d.ts +2 -2
  101. package/dist/types/export_import.d.ts +4 -4
  102. package/dist/types/fields.d.ts +63 -41
  103. package/dist/types/firecms.d.ts +6 -2
  104. package/dist/types/firecms_context.d.ts +1 -1
  105. package/dist/types/index.d.ts +0 -1
  106. package/dist/types/navigation.d.ts +6 -5
  107. package/dist/types/permissions.d.ts +4 -4
  108. package/dist/types/plugins.d.ts +22 -12
  109. package/dist/types/properties.d.ts +34 -21
  110. package/dist/types/property_config.d.ts +0 -2
  111. package/dist/types/side_dialogs_controller.d.ts +10 -0
  112. package/dist/types/storage.d.ts +86 -3
  113. package/dist/types/user.d.ts +1 -0
  114. package/dist/util/builders.d.ts +2 -2
  115. package/dist/util/entities.d.ts +2 -2
  116. package/dist/util/icon_list.d.ts +5 -1
  117. package/dist/util/icon_synonyms.d.ts +1 -98
  118. package/dist/util/icons.d.ts +6 -3
  119. package/dist/util/index.d.ts +1 -0
  120. package/dist/util/navigation_utils.d.ts +2 -2
  121. package/dist/util/objects.d.ts +2 -1
  122. package/dist/util/permissions.d.ts +4 -4
  123. package/dist/util/plurals.d.ts +0 -2
  124. package/dist/util/property_utils.d.ts +3 -3
  125. package/dist/util/resolutions.d.ts +30 -16
  126. package/dist/util/storage.d.ts +23 -2
  127. package/dist/util/useStorageUploadController.d.ts +3 -3
  128. package/package.json +59 -44
  129. package/src/app/AppBar.tsx +18 -0
  130. package/src/app/Drawer.tsx +24 -0
  131. package/src/app/Scaffold.tsx +243 -0
  132. package/src/app/index.ts +4 -0
  133. package/src/app/useApp.tsx +32 -0
  134. package/src/components/ArrayContainer.tsx +92 -25
  135. package/src/components/CircularProgressCenter.tsx +2 -2
  136. package/src/components/ClearFilterSortButton.tsx +41 -0
  137. package/src/components/{DeleteConfirmationDialog.tsx → ConfirmationDialog.tsx} +3 -3
  138. package/src/components/DeleteEntityDialog.tsx +9 -18
  139. package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +13 -20
  140. package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +28 -25
  141. package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +12 -8
  142. package/src/components/EntityCollectionTable/PropertyTableCell.tsx +47 -39
  143. package/src/components/EntityCollectionTable/column_utils.tsx +3 -3
  144. package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +31 -17
  145. package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +19 -17
  146. package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +30 -35
  147. package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +36 -34
  148. package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +20 -8
  149. package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +84 -77
  150. package/src/components/EntityCollectionView/EntityCollectionView.tsx +139 -87
  151. package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +68 -0
  152. package/src/components/EntityCollectionView/useSelectionController.tsx +19 -7
  153. package/src/components/EntityCollectionView/utils.ts +19 -0
  154. package/src/components/EntityPreview.tsx +60 -51
  155. package/src/components/EntityView.tsx +10 -10
  156. package/src/components/ErrorView.tsx +4 -4
  157. package/src/components/HomePage/DefaultHomePage.tsx +26 -19
  158. package/src/components/HomePage/FavouritesView.tsx +6 -11
  159. package/src/components/HomePage/NavigationCard.tsx +4 -4
  160. package/src/components/HomePage/NavigationCardBinding.tsx +5 -10
  161. package/src/components/HomePage/NavigationGroup.tsx +2 -2
  162. package/src/components/HomePage/SmallNavigationCard.tsx +5 -6
  163. package/src/components/PropertyConfigBadge.tsx +9 -3
  164. package/src/components/PropertyIdCopyTooltip.tsx +48 -0
  165. package/src/components/ReferenceTable/ReferenceSelectionTable.tsx +8 -7
  166. package/src/components/ReferenceWidget.tsx +22 -12
  167. package/src/components/SearchIconsView.tsx +10 -7
  168. package/src/components/SelectableTable/SelectableTable.tsx +9 -9
  169. package/src/components/SelectableTable/filters/BooleanFilterField.tsx +2 -3
  170. package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +25 -8
  171. package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +30 -6
  172. package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +92 -23
  173. package/src/components/VirtualTable/VirtualTable.tsx +77 -46
  174. package/src/components/VirtualTable/VirtualTableCell.tsx +1 -9
  175. package/src/components/VirtualTable/VirtualTableHeader.tsx +10 -10
  176. package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +2 -2
  177. package/src/components/VirtualTable/VirtualTableProps.tsx +18 -14
  178. package/src/components/VirtualTable/VirtualTableRow.tsx +5 -6
  179. package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +5 -5
  180. package/src/components/VirtualTable/fields/VirtualTableInput.tsx +2 -1
  181. package/src/components/VirtualTable/fields/VirtualTableNumberInput.tsx +2 -1
  182. package/src/components/VirtualTable/fields/VirtualTableSelect.tsx +16 -28
  183. package/src/components/VirtualTable/types.tsx +2 -3
  184. package/src/components/{EntityCollectionTable/internal → common}/default_entity_actions.tsx +8 -4
  185. package/src/components/common/index.ts +1 -0
  186. package/src/components/{VirtualTable/common.tsx → common/table_height.tsx} +5 -2
  187. package/src/components/common/types.tsx +4 -6
  188. package/src/components/common/useColumnsIds.tsx +23 -2
  189. package/src/components/common/useDataSourceEntityCollectionTableController.tsx +25 -14
  190. package/src/components/common/useTableSearchHelper.ts +53 -12
  191. package/src/components/index.tsx +4 -2
  192. package/src/contexts/DialogsProvider.tsx +2 -2
  193. package/src/contexts/SnackbarProvider.tsx +2 -0
  194. package/src/core/DefaultAppBar.tsx +178 -0
  195. package/src/core/DefaultDrawer.tsx +184 -0
  196. package/src/core/DrawerNavigationItem.tsx +66 -0
  197. package/src/core/EntityEditView.tsx +721 -156
  198. package/src/core/EntitySidePanel.tsx +1 -2
  199. package/src/core/FireCMS.tsx +57 -53
  200. package/src/core/NavigationRoutes.tsx +7 -8
  201. package/src/core/SideDialogs.tsx +2 -1
  202. package/src/core/field_configs.tsx +11 -12
  203. package/src/core/index.tsx +3 -4
  204. package/src/form/PropertyFieldBinding.tsx +74 -35
  205. package/src/form/components/CustomIdField.tsx +6 -2
  206. package/src/form/components/FieldHelperText.tsx +4 -4
  207. package/src/form/components/LabelWithIcon.tsx +27 -19
  208. package/src/form/components/LabelWithIconAndTooltip.tsx +28 -0
  209. package/src/form/components/StorageItemPreview.tsx +22 -12
  210. package/src/form/components/StorageUploadProgress.tsx +3 -4
  211. package/src/form/components/index.tsx +1 -1
  212. package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +29 -17
  213. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +45 -35
  214. package/src/form/field_bindings/BlockFieldBinding.tsx +53 -33
  215. package/src/form/field_bindings/DateTimeFieldBinding.tsx +17 -14
  216. package/src/form/field_bindings/KeyValueFieldBinding.tsx +60 -51
  217. package/src/form/field_bindings/MapFieldBinding.tsx +67 -48
  218. package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +150 -0
  219. package/src/form/field_bindings/{MultiSelectBinding.tsx → MultiSelectFieldBinding.tsx} +25 -20
  220. package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +11 -16
  221. package/src/form/field_bindings/ReferenceFieldBinding.tsx +42 -31
  222. package/src/form/field_bindings/RepeatFieldBinding.tsx +52 -34
  223. package/src/form/field_bindings/SelectFieldBinding.tsx +22 -14
  224. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +37 -47
  225. package/src/form/field_bindings/SwitchFieldBinding.tsx +28 -24
  226. package/src/form/field_bindings/TextFieldBinding.tsx +27 -24
  227. package/src/form/index.tsx +4 -9
  228. package/src/form/useClearRestoreValue.tsx +2 -2
  229. package/src/form/validation.ts +1 -17
  230. package/src/hooks/data/delete.ts +6 -5
  231. package/src/hooks/data/save.ts +12 -8
  232. package/src/hooks/data/useCollectionFetch.tsx +2 -2
  233. package/src/hooks/data/useDataSource.tsx +11 -3
  234. package/src/hooks/data/useEntityFetch.tsx +5 -5
  235. package/src/hooks/index.tsx +1 -0
  236. package/src/hooks/useAuthController.tsx +1 -1
  237. package/src/hooks/useBuildLocalConfigurationPersistence.tsx +8 -10
  238. package/src/hooks/useBuildModeController.tsx +11 -5
  239. package/src/hooks/useBuildNavigationController.tsx +93 -34
  240. package/src/hooks/useFireCMSContext.tsx +5 -5
  241. package/src/hooks/useProjectLog.tsx +32 -10
  242. package/src/hooks/useResolvedNavigationFrom.tsx +6 -6
  243. package/src/hooks/useValidateAuthenticator.tsx +21 -41
  244. package/src/index.ts +1 -0
  245. package/src/internal/useBuildDataSource.ts +72 -82
  246. package/src/internal/useBuildSideDialogsController.tsx +1 -0
  247. package/src/internal/useBuildSideEntityController.tsx +102 -22
  248. package/src/internal/useUnsavedChangesDialog.tsx +5 -3
  249. package/src/preview/PropertyPreview.tsx +11 -18
  250. package/src/preview/PropertyPreviewProps.tsx +7 -1
  251. package/src/preview/components/BooleanPreview.tsx +2 -2
  252. package/src/preview/components/EmptyValue.tsx +1 -1
  253. package/src/preview/components/EnumValuesChip.tsx +2 -2
  254. package/src/preview/components/ImagePreview.tsx +25 -36
  255. package/src/preview/components/ReferencePreview.tsx +23 -34
  256. package/src/preview/components/StorageThumbnail.tsx +5 -1
  257. package/src/preview/components/UrlComponentPreview.tsx +44 -11
  258. package/src/preview/property_previews/ArrayOfMapsPreview.tsx +2 -3
  259. package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +4 -3
  260. package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +2 -3
  261. package/src/preview/property_previews/ArrayOfStringsPreview.tsx +1 -2
  262. package/src/preview/property_previews/ArrayOneOfPreview.tsx +4 -5
  263. package/src/preview/property_previews/ArrayPropertyPreview.tsx +4 -5
  264. package/src/preview/property_previews/MapPropertyPreview.tsx +9 -9
  265. package/src/preview/property_previews/SkeletonPropertyComponent.tsx +12 -12
  266. package/src/preview/property_previews/StringPropertyPreview.tsx +3 -3
  267. package/src/preview/util.ts +10 -10
  268. package/src/types/auth.tsx +9 -13
  269. package/src/types/collections.ts +62 -20
  270. package/src/types/customization_controller.tsx +0 -1
  271. package/src/types/datasource.ts +60 -43
  272. package/src/types/entities.ts +11 -1
  273. package/src/types/entity_actions.tsx +20 -7
  274. package/src/types/entity_callbacks.ts +18 -18
  275. package/src/types/entity_overrides.tsx +2 -2
  276. package/src/types/export_import.ts +4 -4
  277. package/src/types/fields.tsx +69 -45
  278. package/src/types/firecms.tsx +7 -2
  279. package/src/types/firecms_context.tsx +1 -1
  280. package/src/types/index.ts +0 -1
  281. package/src/types/navigation.ts +7 -7
  282. package/src/types/permissions.ts +5 -5
  283. package/src/types/plugins.tsx +24 -14
  284. package/src/types/properties.ts +39 -22
  285. package/src/types/property_config.tsx +0 -2
  286. package/src/types/side_dialogs_controller.tsx +13 -0
  287. package/src/types/storage.ts +94 -3
  288. package/src/types/user.ts +2 -0
  289. package/src/util/builders.ts +6 -6
  290. package/src/util/entities.ts +6 -5
  291. package/src/util/enums.ts +1 -1
  292. package/src/util/icon_list.ts +16 -10
  293. package/src/util/icon_synonyms.ts +3 -100
  294. package/src/util/icons.tsx +17 -7
  295. package/src/util/index.ts +1 -0
  296. package/src/util/make_properties_editable.ts +13 -5
  297. package/src/util/navigation_utils.ts +6 -6
  298. package/src/util/objects.ts +45 -28
  299. package/src/util/permissions.ts +9 -8
  300. package/src/util/plurals.ts +0 -2
  301. package/src/util/property_utils.tsx +11 -4
  302. package/src/util/references.ts +11 -2
  303. package/src/util/resolutions.ts +79 -46
  304. package/src/util/storage.ts +79 -21
  305. package/src/util/strings.ts +2 -2
  306. package/src/util/useStorageUploadController.tsx +34 -8
  307. package/src/util/useTraceUpdate.tsx +1 -0
  308. package/dist/components/PropertyIdCopyTooltipContent.d.ts +0 -3
  309. package/dist/components/VirtualTable/common.d.ts +0 -2
  310. package/dist/core/Drawer.d.ts +0 -23
  311. package/dist/core/Scaffold.d.ts +0 -55
  312. package/dist/core/SideEntityView.d.ts +0 -7
  313. package/dist/form/EntityForm.d.ts +0 -77
  314. package/dist/form/components/FormikArrayContainer.d.ts +0 -18
  315. package/dist/form/field_bindings/MarkdownFieldBinding.d.ts +0 -9
  316. package/dist/internal/useBuildCustomizationController.d.ts +0 -2
  317. package/dist/internal/useLocaleConfig.d.ts +0 -1
  318. package/dist/types/appcheck.d.ts +0 -26
  319. package/src/components/FireCMSAppBar.tsx +0 -165
  320. package/src/components/PropertyIdCopyTooltipContent.tsx +0 -28
  321. package/src/core/Drawer.tsx +0 -191
  322. package/src/core/Scaffold.tsx +0 -281
  323. package/src/core/SideEntityView.tsx +0 -38
  324. package/src/form/EntityForm.tsx +0 -728
  325. package/src/form/components/FormikArrayContainer.tsx +0 -44
  326. package/src/form/field_bindings/MarkdownFieldBinding.tsx +0 -695
  327. package/src/internal/useBuildCustomizationController.tsx +0 -5
  328. package/src/internal/useLocaleConfig.tsx +0 -18
  329. package/src/types/appcheck.ts +0 -29
@@ -1,7 +1,7 @@
1
1
  import React, { useCallback } from "react";
2
2
 
3
3
  import { EnumType, FieldProps, ResolvedProperty } from "../../types";
4
- import { FieldHelperText, LabelWithIcon } from "../components";
4
+ import { FieldHelperText, LabelWithIconAndTooltip } from "../components";
5
5
  import { EnumValuesChip } from "../../preview";
6
6
  import { enumToObjectEntries, getIconForProperty, getLabelOrConfigFrom } from "../../util";
7
7
  import { CloseIcon, MultiSelect, MultiSelectItem } from "@firecms/ui";
@@ -14,17 +14,18 @@ import { useClearRestoreValue } from "../useClearRestoreValue";
14
14
  * and tables to the specified properties.
15
15
  * @group Form fields
16
16
  */
17
- export function MultiSelectBinding({
18
- propertyKey,
19
- value,
20
- setValue,
21
- error,
22
- showError,
23
- disabled,
24
- property,
25
- includeDescription,
26
- autoFocus
27
- }: FieldProps<EnumType[], any, any>) {
17
+ export function MultiSelectFieldBinding({
18
+ propertyKey,
19
+ value,
20
+ setValue,
21
+ error,
22
+ showError,
23
+ disabled,
24
+ property,
25
+ includeDescription,
26
+ size = "medium",
27
+ autoFocus
28
+ }: FieldProps<EnumType[], any, any>) {
28
29
 
29
30
  const of: ResolvedProperty<any> | ResolvedProperty<any>[] = property.of;
30
31
  if (!of) {
@@ -79,16 +80,20 @@ export function MultiSelectBinding({
79
80
  }, [enumValues, setValue, value]);
80
81
 
81
82
  return (
82
- <div className="mt-0.5 ml-0.5 mt-2">
83
+ <>
83
84
  <MultiSelect
85
+ className={"w-full mt-2"}
86
+ size={size === "medium" ? "medium" : "small"}
84
87
  value={validValue ? value.map((v) => v.toString()) : []}
85
88
  disabled={disabled}
86
- label={<LabelWithIcon icon={getIconForProperty(property, "small")}
87
- required={property.validation?.required}
88
- title={property.name}
89
- className={"text-text-secondary dark:text-text-secondary-dark ml-3.5"}/>}
90
- renderValue={useCallback((v: string) => renderValue(v, false), [renderValue])}
91
- onMultiValueChange={(updatedValue: string[]) => {
89
+ modalPopover={true}
90
+ label={<LabelWithIconAndTooltip
91
+ propertyKey={propertyKey}
92
+ icon={getIconForProperty(property, "small")}
93
+ required={property.validation?.required}
94
+ title={property.name}
95
+ className={"text-text-secondary dark:text-text-secondary-dark ml-3.5"}/>}
96
+ onValueChange={(updatedValue: string[]) => {
92
97
  let newValue: EnumType[] | null;
93
98
  if (of && (of as ResolvedProperty)?.dataType === "number") {
94
99
  newValue = updatedValue ? (updatedValue as string[]).map((e) => parseFloat(e)) : [];
@@ -109,6 +114,6 @@ export function MultiSelectBinding({
109
114
  disabled={disabled}
110
115
  property={property}/>
111
116
 
112
- </div>
117
+ </>
113
118
  );
114
119
  }
@@ -1,12 +1,12 @@
1
1
  import React from "react";
2
2
 
3
- import { Entity, FieldProps } from "../../types";
3
+ import { FieldProps } from "../../types";
4
4
 
5
5
  import { PropertyPreview } from "../../preview";
6
- import { FieldHelperText, LabelWithIcon } from "../components";
6
+ import { FieldHelperText, LabelWithIconAndTooltip } from "../components";
7
7
  import { ErrorBoundary } from "../../components";
8
8
  import { getIconForProperty } from "../../util";
9
- import { cn, paperMixin } from "@firecms/ui";
9
+ import { cls, paperMixin } from "@firecms/ui";
10
10
 
11
11
  /**
12
12
  *
@@ -21,7 +21,7 @@ export function ReadOnlyFieldBinding({
21
21
  value,
22
22
  error,
23
23
  showError,
24
- tableMode,
24
+ minimalistView,
25
25
  property,
26
26
  includeDescription,
27
27
  context
@@ -30,30 +30,25 @@ 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
  <>
42
36
 
43
- {!tableMode && <LabelWithIcon icon={getIconForProperty(property, "small")}
44
- required={property.validation?.required}
45
- title={property.name}
46
- className={"text-text-secondary dark:text-text-secondary-dark ml-3.5"}/>
37
+ {!minimalistView && <LabelWithIconAndTooltip
38
+ propertyKey={propertyKey}
39
+ icon={getIconForProperty(property, "small")}
40
+ required={property.validation?.required}
41
+ title={property.name}
42
+ className={"text-text-secondary dark:text-text-secondary-dark ml-3.5"}/>
47
43
  }
48
44
 
49
45
  <div
50
- className={cn(paperMixin, "min-h-14 p-4 md:p-6 overflow-x-scroll no-scrollbar")}>
46
+ className={cls(paperMixin, "min-h-14 p-4 md:p-6 overflow-x-scroll no-scrollbar")}>
51
47
 
52
48
  <ErrorBoundary>
53
49
  <PropertyPreview propertyKey={propertyKey}
54
50
  value={value}
55
51
  property={property}
56
- // entity={entity}
57
52
  size={"medium"}/>
58
53
  </ErrorBoundary>
59
54
 
@@ -3,12 +3,13 @@ import React, { useCallback, useMemo } from "react";
3
3
  import { Entity, EntityCollection, EntityReference, FieldProps } from "../../types";
4
4
  import { useNavigationController, useReferenceDialog } from "../../hooks";
5
5
  import { ReadOnlyFieldBinding } from "./ReadOnlyFieldBinding";
6
- import { FieldHelperText, LabelWithIcon } from "../components";
6
+ import { FieldHelperText, LabelWithIconAndTooltip } from "../components";
7
7
  import { ErrorView } from "../../components";
8
- import { ReferencePreview } from "../../preview";
9
- import { getIconForProperty, getReferenceFrom } from "../../util";
10
- import { Button } from "@firecms/ui";
8
+ import { EmptyValue, ReferencePreview } from "../../preview";
9
+ import { getIconForProperty, getReferenceFrom, IconForView } from "../../util";
11
10
  import { useClearRestoreValue } from "../useClearRestoreValue";
11
+ import { EntityPreviewContainer } from "../../components/EntityPreview";
12
+ import { cls } from "@firecms/ui";
12
13
 
13
14
  /**
14
15
  * Field that opens a reference selection dialog.
@@ -17,7 +18,7 @@ import { useClearRestoreValue } from "../useClearRestoreValue";
17
18
  * and tables to the specified properties.
18
19
  * @group Form fields
19
20
  */
20
- export function ReferenceFieldBinding<M extends Record<string, any>>(props: FieldProps<EntityReference>) {
21
+ export function ReferenceFieldBinding(props: FieldProps) {
21
22
 
22
23
  if (typeof props.property.path !== "string") {
23
24
  return <ReadOnlyFieldBinding {...props}/>
@@ -27,19 +28,21 @@ export function ReferenceFieldBinding<M extends Record<string, any>>(props: Fiel
27
28
 
28
29
  }
29
30
 
30
- function ReferenceFieldBindingInternal<M extends Record<string, any>>({
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>) {
31
+ function ReferenceFieldBindingInternal({
32
+ propertyKey,
33
+ value,
34
+ setValue,
35
+ error,
36
+ showError,
37
+ isSubmitting,
38
+ disabled,
39
+ minimalistView,
40
+ touched,
41
+ autoFocus,
42
+ property,
43
+ includeDescription,
44
+ size = "medium"
45
+ }: FieldProps<EntityReference>) {
43
46
  if (!property.path) {
44
47
  throw new Error("Property path is required for ReferenceFieldBinding");
45
48
  }
@@ -75,17 +78,19 @@ function ReferenceFieldBindingInternal<M extends Record<string, any>>({
75
78
  }
76
79
  );
77
80
 
78
- const onEntryClick = useCallback((e: React.SyntheticEvent) => {
81
+ const onEntryClick = (e: React.SyntheticEvent) => {
79
82
  e.preventDefault();
80
83
  referenceDialogController.open();
81
- }, [referenceDialogController]);
84
+ };
82
85
 
83
86
  return (
84
87
  <>
85
- <LabelWithIcon icon={getIconForProperty(property, "small")}
86
- required={property.validation?.required}
87
- title={property.name}
88
- className={"text-text-secondary dark:text-text-secondary-dark ml-3.5"}/>
88
+ {!minimalistView && <LabelWithIconAndTooltip
89
+ propertyKey={propertyKey}
90
+ icon={getIconForProperty(property, "small")}
91
+ required={property.validation?.required}
92
+ title={property.name}
93
+ className={"text-text-secondary dark:text-text-secondary-dark ml-3.5"}/>}
89
94
 
90
95
  {!collection && <ErrorView
91
96
  error={"The specified collection does not exist. Check console"}/>}
@@ -96,18 +101,24 @@ function ReferenceFieldBindingInternal<M extends Record<string, any>>({
96
101
  disabled={!property.path}
97
102
  previewProperties={property.previewProperties}
98
103
  hover={!disabled}
99
- size={"medium"}
104
+ size={size}
100
105
  onClick={disabled || isSubmitting ? undefined : onEntryClick}
101
106
  reference={value}
107
+ includeEntityLink={property.includeEntityLink}
108
+ includeId={property.includeId}
102
109
  />}
103
110
 
104
111
  {!value && <div className="justify-center text-left">
105
- <Button variant="outlined"
106
- color="primary"
107
- disabled={disabled || isSubmitting}
108
- onClick={onEntryClick}>
109
- Edit {property.name}
110
- </Button>
112
+ <EntityPreviewContainer className={cls("px-6 h-16 text-sm font-medium flex items-center gap-6",
113
+ disabled || isSubmitting
114
+ ? "text-surface-accent-500"
115
+ : "cursor-pointer text-surface-accent-700 dark:text-surface-accent-300 hover:bg-surface-accent-50 dark:hover:bg-surface-800 group-hover:bg-surface-accent-50 dark:group-hover:bg-surface-800")}
116
+ onClick={onEntryClick}
117
+ size={"medium"}>
118
+ <IconForView collectionOrView={collection}
119
+ className={"text-surface-300 dark:text-surface-600"}/>
120
+ {`Edit ${property.name}`.toUpperCase()}
121
+ </EntityPreviewContainer>
111
122
  </div>}
112
123
  </>}
113
124
 
@@ -1,10 +1,10 @@
1
1
  import React, { useState } from "react";
2
- import { CMSType, FieldProps, ResolvedProperty } from "../../types";
3
- import { FieldHelperText, FormikArrayContainer, LabelWithIcon } from "../components";
4
- import { ErrorBoundary } from "../../components";
5
- import { getIconForProperty } from "../../util";
2
+ import { CMSType, FieldProps, PropertyFieldBindingProps, ResolvedProperty } from "../../types";
3
+ import { FieldHelperText, LabelWithIconAndTooltip } from "../components";
4
+ import { ArrayContainer, ArrayEntryParams, ErrorBoundary } from "../../components";
5
+ import { getArrayResolvedProperties, getDefaultValueFor, getIconForProperty, mergeDeep } from "../../util";
6
6
  import { PropertyFieldBinding } from "../PropertyFieldBinding";
7
- import { ExpandablePanel } from "@firecms/ui";
7
+ import { ExpandablePanel, Typography } from "@firecms/ui";
8
8
  import { useClearRestoreValue } from "../useClearRestoreValue";
9
9
 
10
10
  /**
@@ -23,7 +23,7 @@ export function RepeatFieldBinding<T extends Array<any>>({
23
23
  isSubmitting,
24
24
  setValue,
25
25
  setFieldValue,
26
- tableMode,
26
+ minimalistView,
27
27
  property,
28
28
  includeDescription,
29
29
  underlyingValueHasChanged,
@@ -34,8 +34,15 @@ export function RepeatFieldBinding<T extends Array<any>>({
34
34
  if (!property.of)
35
35
  throw Error("RepeatFieldBinding misconfiguration. Property `of` not set");
36
36
 
37
- if (!property.resolvedProperties || !Array.isArray(property.resolvedProperties))
38
- throw Error("RepeatFieldBinding - Internal error: Expected array in 'property.resolvedProperties'");
37
+ let resolvedProperties = "resolvedProperties" in property ? property.resolvedProperties : undefined;
38
+ if (!resolvedProperties) {
39
+ resolvedProperties = getArrayResolvedProperties({
40
+ propertyValue: value,
41
+ propertyKey,
42
+ property,
43
+ ignoreMissingFields: false
44
+ })
45
+ }
39
46
 
40
47
  const expanded = property.expanded === undefined ? true : property.expanded;
41
48
  const ofProperty: ResolvedProperty<CMSType[]> = property.of as ResolvedProperty<CMSType[]>;
@@ -48,55 +55,66 @@ export function RepeatFieldBinding<T extends Array<any>>({
48
55
  setValue
49
56
  });
50
57
 
51
- const buildEntry = (index: number, internalId: number) => {
52
- const childProperty = property.resolvedProperties[index] ?? ofProperty;
53
- const fieldProps = {
58
+ const buildEntry = ({
59
+ index,
60
+ internalId,
61
+ storedProps,
62
+ storeProps
63
+ }: ArrayEntryParams) => {
64
+ const childProperty = resolvedProperties[index] ?? ofProperty;
65
+ const fieldProps: PropertyFieldBindingProps<any, any> = {
54
66
  propertyKey: `${propertyKey}.${index}`,
55
67
  disabled,
56
- property: childProperty,
68
+ property: storedProps ? mergeDeep(childProperty, storedProps) : childProperty,
69
+ onPropertyChange: storeProps,
57
70
  includeDescription,
58
71
  underlyingValueHasChanged,
59
72
  context,
60
- tableMode: false,
61
73
  partOfArray: true,
62
- partOfBlock: false,
63
- autoFocus: internalId === lastAddedId
74
+ minimalistView: false,
75
+ autoFocus: internalId === lastAddedId,
64
76
  };
65
77
  return <ErrorBoundary>
66
- <PropertyFieldBinding {...fieldProps}/>
78
+ <PropertyFieldBinding {...fieldProps} index={index}/>
67
79
  </ErrorBoundary>;
68
80
  };
69
81
 
70
- const arrayContainer = <FormikArrayContainer value={value}
71
- addLabel={property.name ? "Add entry to " + property.name : "Add entry"}
72
- name={propertyKey}
73
- setFieldValue={setFieldValue}
74
- buildEntry={buildEntry}
75
- onInternalIdAdded={setLastAddedId}
76
- disabled={isSubmitting || Boolean(property.disabled)}
77
- includeAddButton={!property.disabled}
78
- newDefaultEntry={property.of.defaultValue}/>;
82
+ const arrayContainer = <ArrayContainer droppableId={propertyKey}
83
+ addLabel={property.name ? "Add entry to " + property.name : "Add entry"}
84
+ value={value}
85
+ buildEntry={buildEntry}
86
+ onInternalIdAdded={setLastAddedId}
87
+ disabled={isSubmitting || Boolean(property.disabled)}
88
+ includeAddButton={!property.disabled}
89
+ newDefaultEntry={getDefaultValueFor(property.of)}
90
+ onValueChange={(value) => setFieldValue(propertyKey, value)}
91
+ />;
79
92
 
80
- const title = (<LabelWithIcon icon={getIconForProperty(property, "small")}
81
- required={property.validation?.required}
82
- title={property.name}
83
- className={"text-text-secondary dark:text-text-secondary-dark"}/>);
93
+ const title = (<>
94
+ <LabelWithIconAndTooltip
95
+ propertyKey={propertyKey}
96
+ icon={getIconForProperty(property, "small")}
97
+ required={property.validation?.required}
98
+ title={property.name}
99
+ className={"flex flex-grow text-text-secondary dark:text-text-secondary-dark"}/>
100
+ {Array.isArray(value) && <Typography variant={"caption"} className={"px-4"}>({value.length})</Typography>}
101
+ </>);
84
102
 
85
103
  return (
86
104
 
87
105
  <>
88
106
 
89
- {!tableMode && <ExpandablePanel initiallyExpanded={expanded}
90
- className={"px-2 md:px-4 pb-2 md:pb-4 pt-1 md:pt-2"}
91
- title={title}>
107
+ {!minimalistView && <ExpandablePanel initiallyExpanded={expanded}
108
+ innerClassName={"px-2 md:px-4 pb-2 md:pb-4 pt-1 md:pt-2"}
109
+ title={title}>
92
110
  {arrayContainer}
93
111
  </ExpandablePanel>}
94
112
 
95
- {tableMode && arrayContainer}
113
+ {minimalistView && arrayContainer}
96
114
 
97
115
  <FieldHelperText includeDescription={includeDescription}
98
116
  showError={showError}
99
- error={error}
117
+ error={error ? (typeof error === "string" ? error : "A property of this array/repeat has an error") : undefined}
100
118
  disabled={disabled}
101
119
  property={property}/>
102
120
 
@@ -3,9 +3,10 @@ import React, { useCallback } from "react";
3
3
  import { EnumType, FieldProps } from "../../types";
4
4
  import { FieldHelperText, LabelWithIcon } from "../components";
5
5
  import { EnumValuesChip } from "../../preview";
6
- import { getIconForProperty } from "../../util";
7
- import { ClearIcon, cn, IconButton, Select, SelectItem } from "@firecms/ui";
6
+ import { getIconForProperty, resolveEnumValues } from "../../util";
7
+ import { CloseIcon, cls, IconButton, Select, SelectItem } from "@firecms/ui";
8
8
  import { useClearRestoreValue } from "../useClearRestoreValue";
9
+ import { PropertyIdCopyTooltip } from "../../components";
9
10
 
10
11
  type SelectProps<T extends EnumType> = FieldProps<T>;
11
12
 
@@ -27,10 +28,11 @@ export function SelectFieldBinding<T extends EnumType>({
27
28
  autoFocus,
28
29
  touched,
29
30
  property,
30
- includeDescription
31
+ includeDescription,
32
+ size = "large"
31
33
  }: SelectProps<T>) {
32
34
 
33
- const enumValues = property.enumValues;
35
+ const enumValues = resolveEnumValues(property.enumValues ?? []);
34
36
 
35
37
  useClearRestoreValue({
36
38
  property,
@@ -48,19 +50,25 @@ export function SelectFieldBinding<T extends EnumType>({
48
50
  <>
49
51
 
50
52
  <Select
51
- value={value ? value.toString() : ""}
53
+ value={value !== undefined && value != null ? value.toString() : ""}
52
54
  disabled={disabled}
55
+ size={size}
56
+ fullWidth={true}
53
57
  position="item-aligned"
54
- inputClassName={cn("w-full")}
55
- label={<LabelWithIcon icon={getIconForProperty(property, "small")}
56
- required={property.validation?.required}
57
- title={property.name}
58
- className={"text-text-secondary dark:text-text-secondary-dark ml-3.5"}
59
- />}
58
+ inputClassName={cls("w-full")}
59
+ label={
60
+ <PropertyIdCopyTooltip propertyKey={propertyKey}>
61
+ <LabelWithIcon
62
+ icon={getIconForProperty(property, "small")}
63
+ required={property.validation?.required}
64
+ title={property.name}
65
+ className={"text-text-secondary dark:text-text-secondary-dark ml-3.5"}
66
+ />
67
+ </PropertyIdCopyTooltip>}
60
68
  endAdornment={
61
69
  property.clearable && <IconButton
62
70
  onClick={handleClearClick}>
63
- <ClearIcon/>
71
+ <CloseIcon/>
64
72
  </IconButton>
65
73
  }
66
74
  onValueChange={(updatedValue: string) => {
@@ -73,7 +81,7 @@ export function SelectFieldBinding<T extends EnumType>({
73
81
  return <EnumValuesChip
74
82
  enumKey={enumKey}
75
83
  enumValues={enumValues}
76
- size={"medium"}/>;
84
+ size={size}/>;
77
85
  }}
78
86
  >
79
87
  {enumValues && enumValues.map((option) => {
@@ -83,7 +91,7 @@ export function SelectFieldBinding<T extends EnumType>({
83
91
  <EnumValuesChip
84
92
  enumKey={String(option.id)}
85
93
  enumValues={enumValues}
86
- size={"medium"}/>
94
+ size={size}/>
87
95
  </SelectItem>
88
96
  })}
89
97
  </Select>