@firecms/core 3.0.0-beta.1 → 3.0.0-beta.11

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 (387) hide show
  1. package/README.md +6 -7
  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 -8
  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 +13 -18
  12. package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +2 -5
  13. package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +9 -15
  14. package/dist/components/EntityCollectionTable/PropertyTableCell.d.ts +3 -2
  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/index.d.ts +2 -4
  18. package/dist/components/EntityCollectionTable/internal/CollectionTableToolbar.d.ts +1 -4
  19. package/dist/components/EntityCollectionTable/internal/EntityTableCell.d.ts +2 -2
  20. package/dist/components/EntityCollectionTable/internal/popup_field/PopupFormField.d.ts +8 -5
  21. package/dist/components/EntityCollectionView/EntityCollectionView.d.ts +13 -4
  22. package/dist/components/EntityCollectionView/EntityCollectionViewStartActions.d.ts +11 -0
  23. package/dist/components/EntityCollectionView/useSelectionController.d.ts +2 -0
  24. package/dist/components/EntityCollectionView/utils.d.ts +3 -0
  25. package/dist/components/EntityPreview.d.ts +26 -7
  26. package/dist/components/EntityView.d.ts +11 -0
  27. package/dist/components/ErrorView.d.ts +1 -1
  28. package/dist/components/FieldCaption.d.ts +5 -0
  29. package/dist/components/HomePage/DefaultHomePage.d.ts +1 -1
  30. package/dist/components/HomePage/NavigationCard.d.ts +8 -0
  31. package/dist/components/HomePage/{NavigationCollectionCard.d.ts → NavigationCardBinding.d.ts} +3 -3
  32. package/dist/components/HomePage/SmallNavigationCard.d.ts +6 -0
  33. package/dist/components/HomePage/index.d.ts +3 -1
  34. package/dist/components/{FieldConfigBadge.d.ts → PropertyConfigBadge.d.ts} +2 -1
  35. package/dist/components/PropertyIdCopyTooltip.d.ts +8 -0
  36. package/dist/components/{ReferenceSelectionInner.d.ts → ReferenceTable/ReferenceSelectionTable.d.ts} +2 -2
  37. package/dist/components/ReferenceWidget.d.ts +6 -4
  38. package/dist/components/{EntityCollectionTable/SimpleEntityCollectionTable.d.ts → SelectableTable/SelectableTable.d.ts} +8 -28
  39. package/dist/components/SelectableTable/SelectableTableContext.d.ts +4 -0
  40. package/dist/components/{EntityCollectionTable → SelectableTable}/filters/ReferenceFilterField.d.ts +2 -1
  41. package/dist/components/VirtualTable/VirtualTableProps.d.ts +16 -13
  42. package/dist/components/VirtualTable/types.d.ts +3 -3
  43. package/dist/components/{EntityCollectionTable/internal → common}/default_entity_actions.d.ts +1 -1
  44. package/dist/components/common/index.d.ts +6 -0
  45. package/dist/components/common/table_height.d.ts +5 -0
  46. package/dist/components/{EntityCollectionTable → common}/types.d.ts +11 -6
  47. package/dist/components/{EntityCollectionView → common}/useColumnsIds.d.ts +2 -1
  48. package/dist/components/{EntityCollectionTable → common}/useDataSourceEntityCollectionTableController.d.ts +5 -2
  49. package/dist/components/common/useTableSearchHelper.d.ts +12 -0
  50. package/dist/components/index.d.ts +14 -8
  51. package/dist/contexts/AuthControllerContext.d.ts +1 -1
  52. package/dist/{components/FireCMSAppBar.d.ts → core/DefaultAppBar.d.ts} +6 -9
  53. package/dist/core/DefaultDrawer.d.ts +19 -0
  54. package/dist/core/DrawerNavigationItem.d.ts +10 -0
  55. package/dist/core/EntityEditView.d.ts +36 -0
  56. package/dist/core/FireCMS.d.ts +2 -2
  57. package/dist/core/NavigationRoutes.d.ts +3 -3
  58. package/dist/core/index.d.ts +3 -6
  59. package/dist/form/PropertyFieldBinding.d.ts +1 -1
  60. package/dist/form/components/CustomIdField.d.ts +2 -1
  61. package/dist/form/components/ErrorFocus.d.ts +1 -1
  62. package/dist/form/components/FieldHelperText.d.ts +3 -3
  63. package/dist/{components → form/components}/LabelWithIcon.d.ts +1 -1
  64. package/dist/form/components/LabelWithIconAndTooltip.d.ts +15 -0
  65. package/dist/form/components/StorageItemPreview.d.ts +4 -3
  66. package/dist/form/components/StorageUploadProgress.d.ts +1 -1
  67. package/dist/form/components/index.d.ts +2 -2
  68. package/dist/form/field_bindings/ArrayCustomShapedFieldBinding.d.ts +1 -1
  69. package/dist/form/field_bindings/ArrayOfReferencesFieldBinding.d.ts +1 -1
  70. package/dist/form/field_bindings/BlockFieldBinding.d.ts +1 -1
  71. package/dist/form/field_bindings/KeyValueFieldBinding.d.ts +1 -1
  72. package/dist/form/field_bindings/MapFieldBinding.d.ts +1 -1
  73. package/dist/form/field_bindings/MarkdownEditorFieldBinding.d.ts +11 -0
  74. package/dist/form/field_bindings/{MultiSelectBinding.d.ts → MultiSelectFieldBinding.d.ts} +1 -1
  75. package/dist/form/field_bindings/ReadOnlyFieldBinding.d.ts +1 -1
  76. package/dist/form/field_bindings/ReferenceFieldBinding.d.ts +2 -2
  77. package/dist/form/field_bindings/RepeatFieldBinding.d.ts +1 -1
  78. package/dist/form/field_bindings/SelectFieldBinding.d.ts +1 -1
  79. package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +3 -4
  80. package/dist/form/field_bindings/SwitchFieldBinding.d.ts +1 -2
  81. package/dist/form/field_bindings/TextFieldBinding.d.ts +2 -2
  82. package/dist/form/index.d.ts +4 -5
  83. package/dist/form/useClearRestoreValue.d.ts +2 -2
  84. package/dist/form/validation.d.ts +1 -1
  85. package/dist/hooks/data/delete.d.ts +4 -4
  86. package/dist/hooks/data/save.d.ts +4 -5
  87. package/dist/hooks/data/useCollectionFetch.d.ts +1 -1
  88. package/dist/hooks/data/useDataSource.d.ts +2 -2
  89. package/dist/hooks/data/useEntityFetch.d.ts +3 -3
  90. package/dist/hooks/index.d.ts +5 -1
  91. package/dist/hooks/useAuthController.d.ts +1 -1
  92. package/dist/{core → hooks}/useBuildModeController.d.ts +1 -1
  93. package/dist/hooks/useBuildNavigationController.d.ts +23 -0
  94. package/dist/hooks/useFireCMSContext.d.ts +1 -1
  95. package/dist/hooks/useProjectLog.d.ts +14 -0
  96. package/dist/hooks/useResolvedNavigationFrom.d.ts +3 -3
  97. package/dist/hooks/useSnackbarController.d.ts +1 -0
  98. package/dist/hooks/useStorageSource.d.ts +2 -2
  99. package/dist/hooks/useValidateAuthenticator.d.ts +21 -0
  100. package/dist/index.d.ts +1 -0
  101. package/dist/index.es.js +20246 -13863
  102. package/dist/index.es.js.map +1 -1
  103. package/dist/index.umd.js +22772 -588
  104. package/dist/index.umd.js.map +1 -1
  105. package/dist/internal/useBuildDataSource.d.ts +1 -12
  106. package/dist/preview/PropertyPreview.d.ts +1 -1
  107. package/dist/preview/PropertyPreviewProps.d.ts +7 -5
  108. package/dist/preview/components/BooleanPreview.d.ts +5 -1
  109. package/dist/preview/components/EnumValuesChip.d.ts +1 -1
  110. package/dist/preview/components/ReferencePreview.d.ts +4 -9
  111. package/dist/preview/components/StorageThumbnail.d.ts +2 -1
  112. package/dist/preview/components/UrlComponentPreview.d.ts +2 -1
  113. package/dist/preview/util.d.ts +3 -3
  114. package/dist/types/analytics.d.ts +1 -1
  115. package/dist/types/auth.d.ts +37 -3
  116. package/dist/types/collections.d.ts +68 -20
  117. package/dist/types/datasource.d.ts +55 -39
  118. package/dist/types/entities.d.ts +7 -1
  119. package/dist/types/entity_actions.d.ts +18 -4
  120. package/dist/types/entity_callbacks.d.ts +17 -17
  121. package/dist/types/entity_overrides.d.ts +6 -0
  122. package/dist/types/export_import.d.ts +4 -4
  123. package/dist/types/fields.d.ts +63 -42
  124. package/dist/types/firecms.d.ts +10 -25
  125. package/dist/types/firecms_context.d.ts +1 -1
  126. package/dist/types/index.d.ts +2 -1
  127. package/dist/types/navigation.d.ts +18 -16
  128. package/dist/types/permissions.d.ts +8 -4
  129. package/dist/types/plugins.d.ts +39 -39
  130. package/dist/types/properties.d.ts +36 -23
  131. package/dist/types/property_config.d.ts +2 -4
  132. package/dist/types/roles.d.ts +31 -0
  133. package/dist/types/side_dialogs_controller.d.ts +10 -0
  134. package/dist/types/storage.d.ts +86 -3
  135. package/dist/types/user.d.ts +6 -0
  136. package/dist/util/builders.d.ts +2 -2
  137. package/dist/util/collections.d.ts +9 -1
  138. package/dist/util/entities.d.ts +3 -3
  139. package/dist/util/icon_list.d.ts +5 -1
  140. package/dist/util/icon_synonyms.d.ts +1 -98
  141. package/dist/util/icons.d.ts +13 -4
  142. package/dist/util/index.d.ts +3 -1
  143. package/dist/util/navigation_utils.d.ts +2 -2
  144. package/dist/util/objects.d.ts +2 -1
  145. package/dist/util/permissions.d.ts +4 -4
  146. package/dist/util/plurals.d.ts +0 -2
  147. package/dist/util/property_utils.d.ts +3 -3
  148. package/dist/util/references.d.ts +4 -2
  149. package/dist/util/resolutions.d.ts +31 -17
  150. package/dist/util/storage.d.ts +23 -2
  151. package/dist/util/strings.d.ts +1 -1
  152. package/dist/util/useDebouncedCallback.d.ts +1 -0
  153. package/dist/util/useStorageUploadController.d.ts +3 -3
  154. package/dist/util/useTraceUpdate.d.ts +1 -0
  155. package/package.json +70 -47
  156. package/src/app/AppBar.tsx +18 -0
  157. package/src/app/Drawer.tsx +24 -0
  158. package/src/app/Scaffold.tsx +243 -0
  159. package/src/app/index.ts +4 -0
  160. package/src/app/useApp.tsx +32 -0
  161. package/src/components/ArrayContainer.tsx +122 -90
  162. package/src/components/CircularProgressCenter.tsx +2 -2
  163. package/src/components/ClearFilterSortButton.tsx +41 -0
  164. package/src/components/{DeleteConfirmationDialog.tsx → ConfirmationDialog.tsx} +3 -3
  165. package/src/components/DeleteEntityDialog.tsx +13 -22
  166. package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +51 -59
  167. package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +258 -453
  168. package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +13 -14
  169. package/src/components/EntityCollectionTable/PropertyTableCell.tsx +60 -52
  170. package/src/components/EntityCollectionTable/column_utils.tsx +4 -4
  171. package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +40 -33
  172. package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +22 -20
  173. package/src/components/EntityCollectionTable/index.tsx +1 -9
  174. package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +44 -46
  175. package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +36 -34
  176. package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +20 -8
  177. package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +191 -178
  178. package/src/components/EntityCollectionView/EntityCollectionView.tsx +187 -175
  179. package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +5 -6
  180. package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +68 -0
  181. package/src/components/EntityCollectionView/useSelectionController.tsx +43 -0
  182. package/src/components/EntityCollectionView/utils.ts +19 -0
  183. package/src/components/EntityPreview.tsx +218 -72
  184. package/src/components/EntityView.tsx +84 -0
  185. package/src/components/ErrorView.tsx +4 -4
  186. package/src/components/FieldCaption.tsx +14 -0
  187. package/src/components/HomePage/DefaultHomePage.tsx +39 -28
  188. package/src/components/HomePage/FavouritesView.tsx +6 -11
  189. package/src/components/HomePage/NavigationCard.tsx +69 -0
  190. package/src/components/HomePage/NavigationCardBinding.tsx +111 -0
  191. package/src/components/HomePage/NavigationGroup.tsx +2 -2
  192. package/src/components/HomePage/SmallNavigationCard.tsx +44 -0
  193. package/src/components/HomePage/index.tsx +3 -1
  194. package/src/components/PropertyConfigBadge.tsx +23 -0
  195. package/src/components/PropertyIdCopyTooltip.tsx +48 -0
  196. package/src/components/{ReferenceSelectionInner.tsx → ReferenceTable/ReferenceSelectionTable.tsx} +38 -24
  197. package/src/components/ReferenceWidget.tsx +26 -16
  198. package/src/components/SearchIconsView.tsx +10 -7
  199. package/src/components/{EntityCollectionTable/SimpleEntityCollectionTable.tsx → SelectableTable/SelectableTable.tsx} +46 -84
  200. package/src/components/SelectableTable/SelectableTableContext.tsx +6 -0
  201. package/src/components/{EntityCollectionTable → SelectableTable}/filters/BooleanFilterField.tsx +2 -3
  202. package/src/components/{EntityCollectionTable → SelectableTable}/filters/DateTimeFilterField.tsx +25 -8
  203. package/src/components/{EntityCollectionTable → SelectableTable}/filters/ReferenceFilterField.tsx +40 -24
  204. package/src/components/{EntityCollectionTable → SelectableTable}/filters/StringNumberFilterField.tsx +92 -24
  205. package/src/components/VirtualTable/VirtualTable.tsx +77 -46
  206. package/src/components/VirtualTable/VirtualTableCell.tsx +1 -9
  207. package/src/components/VirtualTable/VirtualTableHeader.tsx +19 -13
  208. package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +2 -2
  209. package/src/components/VirtualTable/VirtualTableProps.tsx +19 -15
  210. package/src/components/VirtualTable/VirtualTableRow.tsx +5 -6
  211. package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +5 -5
  212. package/src/components/VirtualTable/fields/VirtualTableInput.tsx +4 -3
  213. package/src/components/VirtualTable/fields/VirtualTableNumberInput.tsx +4 -3
  214. package/src/components/VirtualTable/fields/VirtualTableSelect.tsx +16 -28
  215. package/src/components/VirtualTable/types.tsx +2 -3
  216. package/src/components/{EntityCollectionTable/internal → common}/default_entity_actions.tsx +17 -9
  217. package/src/components/common/index.ts +6 -0
  218. package/src/components/{VirtualTable/common.tsx → common/table_height.tsx} +5 -2
  219. package/src/components/{EntityCollectionTable → common}/types.tsx +9 -6
  220. package/src/components/{EntityCollectionView → common}/useColumnsIds.tsx +23 -2
  221. package/src/components/{EntityCollectionTable → common}/useDataSourceEntityCollectionTableController.tsx +27 -16
  222. package/src/components/common/useTableSearchHelper.ts +88 -0
  223. package/src/components/index.tsx +15 -8
  224. package/src/contexts/AuthControllerContext.tsx +1 -1
  225. package/src/contexts/DialogsProvider.tsx +2 -2
  226. package/src/contexts/SnackbarProvider.tsx +2 -0
  227. package/src/core/DefaultAppBar.tsx +177 -0
  228. package/src/core/DefaultDrawer.tsx +185 -0
  229. package/src/core/DrawerNavigationItem.tsx +66 -0
  230. package/src/core/EntityEditView.tsx +1125 -0
  231. package/src/core/EntitySidePanel.tsx +9 -8
  232. package/src/core/FireCMS.tsx +71 -63
  233. package/src/core/NavigationRoutes.tsx +25 -17
  234. package/src/core/SideDialogs.tsx +2 -1
  235. package/src/core/field_configs.tsx +22 -23
  236. package/src/core/index.tsx +3 -6
  237. package/src/form/PropertyFieldBinding.tsx +79 -45
  238. package/src/form/components/CustomIdField.tsx +53 -36
  239. package/src/form/components/ErrorFocus.tsx +3 -3
  240. package/src/form/components/FieldHelperText.tsx +4 -4
  241. package/src/form/components/LabelWithIcon.tsx +41 -0
  242. package/src/form/components/LabelWithIconAndTooltip.tsx +28 -0
  243. package/src/form/components/StorageItemPreview.tsx +23 -11
  244. package/src/form/components/StorageUploadProgress.tsx +8 -8
  245. package/src/form/components/index.tsx +2 -2
  246. package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +30 -19
  247. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +52 -46
  248. package/src/form/field_bindings/BlockFieldBinding.tsx +67 -47
  249. package/src/form/field_bindings/DateTimeFieldBinding.tsx +20 -17
  250. package/src/form/field_bindings/KeyValueFieldBinding.tsx +76 -67
  251. package/src/form/field_bindings/MapFieldBinding.tsx +81 -60
  252. package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +150 -0
  253. package/src/form/field_bindings/{MultiSelectBinding.tsx → MultiSelectFieldBinding.tsx} +26 -22
  254. package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +12 -18
  255. package/src/form/field_bindings/ReferenceFieldBinding.tsx +46 -34
  256. package/src/form/field_bindings/RepeatFieldBinding.tsx +55 -35
  257. package/src/form/field_bindings/SelectFieldBinding.tsx +24 -17
  258. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +42 -43
  259. package/src/form/field_bindings/SwitchFieldBinding.tsx +30 -27
  260. package/src/form/field_bindings/TextFieldBinding.tsx +34 -30
  261. package/src/form/index.tsx +5 -9
  262. package/src/form/useClearRestoreValue.tsx +2 -2
  263. package/src/form/validation.ts +4 -21
  264. package/src/hooks/data/delete.ts +7 -6
  265. package/src/hooks/data/save.ts +12 -8
  266. package/src/hooks/data/useCollectionFetch.tsx +3 -3
  267. package/src/hooks/data/useDataSource.tsx +15 -2
  268. package/src/hooks/data/useEntityFetch.tsx +6 -6
  269. package/src/hooks/index.tsx +7 -1
  270. package/src/hooks/useAuthController.tsx +1 -1
  271. package/src/{core → hooks}/useBuildLocalConfigurationPersistence.tsx +8 -10
  272. package/src/{core → hooks}/useBuildModeController.tsx +12 -6
  273. package/src/{internal → hooks}/useBuildNavigationController.tsx +245 -101
  274. package/src/hooks/useFireCMSContext.tsx +53 -5
  275. package/src/hooks/useLargeLayout.tsx +10 -7
  276. package/src/hooks/useProjectLog.tsx +63 -0
  277. package/src/hooks/useReferenceDialog.tsx +3 -3
  278. package/src/hooks/useResolvedNavigationFrom.tsx +6 -6
  279. package/src/hooks/useSnackbarController.tsx +1 -2
  280. package/src/hooks/useStorageSource.tsx +7 -2
  281. package/src/hooks/useValidateAuthenticator.tsx +115 -0
  282. package/src/index.ts +1 -0
  283. package/src/internal/useBuildDataSource.ts +80 -85
  284. package/src/internal/useBuildSideDialogsController.tsx +1 -0
  285. package/src/internal/useBuildSideEntityController.tsx +103 -23
  286. package/src/internal/useUnsavedChangesDialog.tsx +5 -3
  287. package/src/preview/PropertyPreview.tsx +15 -22
  288. package/src/preview/PropertyPreviewProps.tsx +6 -10
  289. package/src/preview/components/BooleanPreview.tsx +19 -4
  290. package/src/preview/components/EmptyValue.tsx +1 -1
  291. package/src/preview/components/EnumValuesChip.tsx +2 -2
  292. package/src/preview/components/ImagePreview.tsx +25 -36
  293. package/src/preview/components/ReferencePreview.tsx +73 -176
  294. package/src/preview/components/StorageThumbnail.tsx +5 -1
  295. package/src/preview/components/UrlComponentPreview.tsx +44 -11
  296. package/src/preview/property_previews/ArrayOfMapsPreview.tsx +2 -3
  297. package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +4 -3
  298. package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +2 -3
  299. package/src/preview/property_previews/ArrayOfStringsPreview.tsx +1 -2
  300. package/src/preview/property_previews/ArrayOneOfPreview.tsx +4 -5
  301. package/src/preview/property_previews/ArrayPropertyPreview.tsx +4 -5
  302. package/src/preview/property_previews/MapPropertyPreview.tsx +9 -9
  303. package/src/preview/property_previews/SkeletonPropertyComponent.tsx +12 -12
  304. package/src/preview/property_previews/StringPropertyPreview.tsx +8 -7
  305. package/src/preview/util.ts +10 -10
  306. package/src/types/analytics.ts +1 -0
  307. package/src/types/auth.tsx +48 -3
  308. package/src/types/collections.ts +77 -20
  309. package/src/types/customization_controller.tsx +0 -1
  310. package/src/types/datasource.ts +64 -47
  311. package/src/types/entities.ts +15 -1
  312. package/src/types/entity_actions.tsx +21 -4
  313. package/src/types/entity_callbacks.ts +20 -19
  314. package/src/types/entity_overrides.tsx +7 -0
  315. package/src/types/export_import.ts +4 -4
  316. package/src/types/fields.tsx +69 -45
  317. package/src/types/firecms.tsx +11 -28
  318. package/src/types/firecms_context.tsx +1 -1
  319. package/src/types/index.ts +2 -1
  320. package/src/types/navigation.ts +20 -19
  321. package/src/types/permissions.ts +10 -5
  322. package/src/types/plugins.tsx +46 -48
  323. package/src/types/properties.ts +42 -24
  324. package/src/types/property_config.tsx +2 -4
  325. package/src/types/roles.ts +41 -0
  326. package/src/types/side_dialogs_controller.tsx +13 -0
  327. package/src/types/side_entity_controller.tsx +1 -0
  328. package/src/types/storage.ts +94 -3
  329. package/src/types/user.ts +9 -0
  330. package/src/util/builders.ts +6 -6
  331. package/src/util/collections.ts +22 -0
  332. package/src/util/entities.ts +9 -6
  333. package/src/util/enums.ts +1 -1
  334. package/src/util/icon_list.ts +16 -10
  335. package/src/util/icon_synonyms.ts +3 -100
  336. package/src/util/icons.tsx +26 -8
  337. package/src/util/index.ts +3 -1
  338. package/src/util/make_properties_editable.ts +13 -5
  339. package/src/util/navigation_utils.ts +6 -6
  340. package/src/util/objects.ts +45 -28
  341. package/src/util/permissions.ts +20 -16
  342. package/src/util/plurals.ts +0 -2
  343. package/src/util/property_utils.tsx +11 -4
  344. package/src/util/references.ts +45 -5
  345. package/src/util/resolutions.ts +80 -47
  346. package/src/util/storage.ts +79 -21
  347. package/src/util/strings.ts +4 -3
  348. package/src/util/{useDebounce.ts → useDebouncedCallback.ts} +1 -1
  349. package/src/util/useStorageUploadController.tsx +34 -8
  350. package/src/util/useTraceUpdate.tsx +2 -1
  351. package/dist/components/VirtualTable/common.d.ts +0 -2
  352. package/dist/core/Drawer.d.ts +0 -23
  353. package/dist/core/Scaffold.d.ts +0 -52
  354. package/dist/form/EntityForm.d.ts +0 -75
  355. package/dist/form/components/FormikArrayContainer.d.ts +0 -18
  356. package/dist/form/components/SubmitListener.d.ts +0 -1
  357. package/dist/form/components/SwitchControl.d.ts +0 -8
  358. package/dist/form/field_bindings/MarkdownFieldBinding.d.ts +0 -9
  359. package/dist/hooks/useVerifyLicense.d.ts +0 -0
  360. package/dist/internal/EntityView.d.ts +0 -22
  361. package/dist/internal/useBuildCustomizationController.d.ts +0 -2
  362. package/dist/internal/useBuildNavigationController.d.ts +0 -14
  363. package/dist/internal/useLocaleConfig.d.ts +0 -1
  364. package/dist/types/appcheck.d.ts +0 -26
  365. package/dist/util/useDebounce.d.ts +0 -1
  366. package/src/components/FieldConfigBadge.tsx +0 -17
  367. package/src/components/FireCMSAppBar.tsx +0 -157
  368. package/src/components/HomePage/NavigationCollectionCard.tsx +0 -146
  369. package/src/components/LabelWithIcon.tsx +0 -33
  370. package/src/core/Drawer.tsx +0 -162
  371. package/src/core/Scaffold.tsx +0 -278
  372. package/src/form/EntityForm.tsx +0 -657
  373. package/src/form/components/FormikArrayContainer.tsx +0 -44
  374. package/src/form/components/SubmitListener.tsx +0 -32
  375. package/src/form/components/SwitchControl.tsx +0 -39
  376. package/src/form/field_bindings/MarkdownFieldBinding.tsx +0 -696
  377. package/src/hooks/useVerifyLicense.tsx +0 -1
  378. package/src/internal/EntityView.tsx +0 -578
  379. package/src/internal/useBuildCustomizationController.tsx +0 -5
  380. package/src/internal/useLocaleConfig.tsx +0 -18
  381. package/src/types/appcheck.ts +0 -29
  382. /package/dist/components/{EntityCollectionTable → SelectableTable}/filters/BooleanFilterField.d.ts +0 -0
  383. /package/dist/components/{EntityCollectionTable → SelectableTable}/filters/DateTimeFilterField.d.ts +0 -0
  384. /package/dist/components/{EntityCollectionTable → SelectableTable}/filters/StringNumberFilterField.d.ts +0 -0
  385. /package/dist/components/{EntityCollectionTable → common}/useDebouncedData.d.ts +0 -0
  386. /package/dist/{core → hooks}/useBuildLocalConfigurationPersistence.d.ts +0 -0
  387. /package/src/components/{EntityCollectionTable → common}/useDebouncedData.ts +0 -0
@@ -1,7 +1,7 @@
1
1
  import React, { ComponentType, ReactElement, useCallback, useRef } from "react";
2
2
  import equal from "react-fast-compare"
3
3
 
4
- import { FastField, Field, FieldProps as FormikFieldProps, getIn } from "formik";
4
+ import { Field, FieldProps as FormexFieldProps, getIn } from "@firecms/formex";
5
5
 
6
6
  import {
7
7
  CMSType,
@@ -51,6 +51,13 @@ export const PropertyFieldBinding = React.memo(PropertyFieldBindingInternal, (a:
51
51
  if (a.propertyKey !== b.propertyKey) {
52
52
  return false;
53
53
  }
54
+ if (a.index !== b.index) {
55
+ return false;
56
+ }
57
+
58
+ if (a.size !== b.size) {
59
+ return false;
60
+ }
54
61
  const aIsBuilder = isPropertyBuilder(a.property) || a.property.fromBuilder;
55
62
  const bIsBuilder = isPropertyBuilder(b.property) || b.property.fromBuilder;
56
63
 
@@ -67,44 +74,44 @@ export const PropertyFieldBinding = React.memo(PropertyFieldBindingInternal, (a:
67
74
  return false;
68
75
  }) as typeof PropertyFieldBindingInternal;
69
76
 
70
- function PropertyFieldBindingInternal<T extends CMSType = CMSType, CustomProps = any, M extends Record<string, any> = Record<string, any>>
77
+ function PropertyFieldBindingInternal<T extends CMSType = CMSType, M extends Record<string, any> = Record<string, any>>
71
78
  ({
72
79
  propertyKey,
73
80
  property,
74
81
  context,
75
82
  includeDescription,
76
83
  underlyingValueHasChanged,
77
- disabled,
78
- tableMode,
84
+ disabled: disabledProp,
79
85
  partOfArray,
80
- partOfBlock,
86
+ minimalistView,
81
87
  autoFocus,
88
+ index,
89
+ size,
90
+ onPropertyChange
82
91
  }: PropertyFieldBindingProps<T, M>): ReactElement<PropertyFieldBindingProps<T, M>> {
83
92
 
84
93
  const customizationController = useCustomizationController();
85
94
 
86
- const shouldAlwaysRerender = shouldPropertyReRender(property, customizationController.plugins);
87
- // we use the standard Field for user defined fields, since it rebuilds
88
- // when there are changes in other values, in contrast to FastField
89
- const FieldComponent = shouldAlwaysRerender ? Field : FastField;
90
-
91
95
  return (
92
- <FieldComponent
96
+ <Field
97
+ key={propertyKey}
93
98
  name={propertyKey}
94
99
  >
95
- {(fieldProps: FormikFieldProps<T>) => {
100
+ {(fieldProps) => {
96
101
 
97
102
  let Component: ComponentType<FieldProps<T>> | undefined;
98
103
  const resolvedProperty: ResolvedProperty<T> | null = resolveProperty({
99
104
  propertyKey,
100
- propertyValue: fieldProps.field.value,
101
105
  propertyOrBuilder: property,
102
106
  values: fieldProps.form.values,
103
107
  path: context.path,
104
108
  entityId: context.entityId,
105
- fields: customizationController.propertyConfigs
109
+ propertyConfigs: customizationController.propertyConfigs,
110
+ index
106
111
  });
107
112
 
113
+ const disabled = disabledProp || isReadOnly(resolvedProperty) || Boolean(resolvedProperty?.disabled);
114
+
108
115
  if (resolvedProperty === null || isHidden(resolvedProperty)) {
109
116
  return <></>;
110
117
  } else if (isReadOnly(resolvedProperty)) {
@@ -116,16 +123,23 @@ function PropertyFieldBindingInternal<T extends CMSType = CMSType, CustomProps =
116
123
  } else {
117
124
  const propertyConfig = getFieldConfig(resolvedProperty, customizationController.propertyConfigs);
118
125
  if (!propertyConfig) {
119
- console.log("INTERNAL: Could not find field config for property", { propertyKey, resolvedProperty, fields: customizationController.propertyConfigs, propertyConfig });
126
+ console.log("INTERNAL: Could not find field config for property", {
127
+ propertyKey,
128
+ property,
129
+ resolvedProperty,
130
+ fields: customizationController.propertyConfigs,
131
+ propertyConfig
132
+ });
120
133
  throw new Error(`INTERNAL: Could not find field config for property ${propertyKey}`);
121
134
  }
122
135
  const configProperty = resolveProperty({
136
+ propertyKey,
123
137
  propertyOrBuilder: propertyConfig.property,
124
- propertyValue: fieldProps.field.value,
125
138
  values: fieldProps.form.values,
126
139
  path: context.path,
127
140
  entityId: context.entityId,
128
- fields: customizationController.propertyConfigs
141
+ propertyConfigs: customizationController.propertyConfigs,
142
+ index
129
143
  });
130
144
  Component = configProperty.Field as ComponentType<FieldProps<T>>;
131
145
  }
@@ -144,18 +158,19 @@ function PropertyFieldBindingInternal<T extends CMSType = CMSType, CustomProps =
144
158
  underlyingValueHasChanged,
145
159
  context,
146
160
  disabled,
147
- tableMode,
148
161
  partOfArray,
149
- partOfBlock,
150
- autoFocus
162
+ minimalistView,
163
+ autoFocus,
164
+ size,
165
+ onPropertyChange
151
166
  };
152
167
 
153
168
  return <FieldInternal
154
169
  Component={Component as ComponentType<FieldProps>}
155
170
  componentProps={componentProps}
156
- fieldProps={fieldProps}/>;
171
+ formexFieldProps={fieldProps}/>;
157
172
  }}
158
- </FieldComponent>
173
+ </Field>
159
174
  );
160
175
 
161
176
  }
@@ -174,52 +189,59 @@ function FieldInternal<T extends CMSType, CustomProps, M extends Record<string,
174
189
  property,
175
190
  includeDescription,
176
191
  underlyingValueHasChanged,
177
- tableMode,
178
192
  partOfArray,
179
- partOfBlock,
193
+ minimalistView,
180
194
  autoFocus,
181
195
  context,
182
- disabled
196
+ disabled,
197
+ size,
198
+ onPropertyChange
183
199
  },
184
- fieldProps
200
+ formexFieldProps
185
201
  }:
186
202
  {
187
203
  Component: ComponentType<FieldProps<T, any, M>>,
188
204
  componentProps: ResolvedPropertyFieldBindingProps<T, M>,
189
- fieldProps: FormikFieldProps<T>
205
+ formexFieldProps: FormexFieldProps<T, any>
190
206
  }) {
191
207
 
192
208
  const { plugins } = useCustomizationController();
193
209
 
194
210
  const customFieldProps: any = property.customProps;
195
- const value = fieldProps.field.value;
196
- const initialValue = fieldProps.meta.initialValue;
197
- const error = getIn(fieldProps.form.errors, propertyKey);
198
- const touched = getIn(fieldProps.form.touched, propertyKey);
211
+ const value = formexFieldProps.field.value;
212
+ // const initialValue = formexFieldProps.meta.initialValue;
213
+ const error = getIn(formexFieldProps.form.errors, propertyKey);
214
+ const touched = getIn(formexFieldProps.form.touched, propertyKey);
199
215
 
200
216
  const showError: boolean = error &&
201
- (fieldProps.form.submitCount > 0 || property.validation?.unique) &&
217
+ (formexFieldProps.form.submitCount > 0 || property.validation?.unique) &&
202
218
  (!Array.isArray(error) || !!error.filter((e: any) => !!e).length);
203
219
 
204
- const WrappedComponent: ComponentType<FieldProps<T, any, M>> | null = useWrappedComponent(context.path, context.collection, propertyKey, property, Component, plugins);
220
+ const WrappedComponent: ComponentType<FieldProps<T, any, M>> | null = useWrappedComponent({
221
+ path: context.path,
222
+ collection: context.collection,
223
+ propertyKey: propertyKey,
224
+ property: property,
225
+ Component: Component,
226
+ plugins: plugins
227
+ });
205
228
  const UsedComponent: ComponentType<FieldProps<T>> = WrappedComponent ?? Component;
206
229
 
207
- const isSubmitting = fieldProps.form.isSubmitting;
230
+ const isSubmitting = formexFieldProps.form.isSubmitting;
208
231
 
209
232
  const setValue = useCallback((value: T | null, shouldValidate?: boolean) => {
210
- fieldProps.form.setFieldTouched(propertyKey, true, false);
211
- fieldProps.form.setFieldValue(propertyKey, value, shouldValidate);
233
+ formexFieldProps.form.setFieldTouched(propertyKey, true, false);
234
+ formexFieldProps.form.setFieldValue(propertyKey, value, shouldValidate);
212
235
  }, []);
213
236
 
214
237
  const setFieldValue = useCallback((otherPropertyKey: string, value: CMSType | null, shouldValidate?: boolean) => {
215
- fieldProps.form.setFieldTouched(propertyKey, true, false);
216
- fieldProps.form.setFieldValue(otherPropertyKey, value, shouldValidate);
238
+ formexFieldProps.form.setFieldTouched(propertyKey, true, false);
239
+ formexFieldProps.form.setFieldValue(otherPropertyKey, value, shouldValidate);
217
240
  }, []);
218
241
 
219
242
  const cmsFieldProps: FieldProps<T, CustomProps, M> = {
220
243
  propertyKey,
221
244
  value: value as T,
222
- initialValue,
223
245
  setValue,
224
246
  setFieldValue,
225
247
  error,
@@ -230,12 +252,13 @@ function FieldInternal<T extends CMSType, CustomProps, M extends Record<string,
230
252
  property: property as ResolvedProperty<T>,
231
253
  disabled: disabled ?? false,
232
254
  underlyingValueHasChanged: underlyingValueHasChanged ?? false,
233
- tableMode: tableMode ?? false,
234
255
  partOfArray: partOfArray ?? false,
235
- partOfBlock: partOfBlock ?? false,
256
+ minimalistView: minimalistView ?? false,
236
257
  autoFocus: autoFocus ?? false,
237
258
  customProps: customFieldProps,
238
- context
259
+ context,
260
+ size,
261
+ onPropertyChange
239
262
  };
240
263
 
241
264
  return (
@@ -271,13 +294,24 @@ const shouldPropertyReRender = (property: PropertyOrBuilder | ResolvedProperty,
271
294
  }
272
295
  }
273
296
 
274
- function useWrappedComponent<T extends CMSType = CMSType, M extends Record<string, any> = any>(
275
- path: string,
276
- collection: EntityCollection<M>,
297
+ interface UseWrappedComponentParams<T extends CMSType = CMSType, M extends Record<string, any> = any> {
298
+ path?: string,
299
+ collection?: EntityCollection<M>,
277
300
  propertyKey: string,
278
301
  property: ResolvedProperty<T>,
279
302
  Component: ComponentType<FieldProps<T, any, M>>,
280
303
  plugins?: FireCMSPlugin[]
304
+ }
305
+
306
+ function useWrappedComponent<T extends CMSType = CMSType, M extends Record<string, any> = any>(
307
+ {
308
+ path,
309
+ collection,
310
+ propertyKey,
311
+ property,
312
+ Component,
313
+ plugins
314
+ }: UseWrappedComponentParams<T, M>
281
315
  ): ComponentType<FieldProps<T, any, M>> | null {
282
316
 
283
317
  const wrapperRef = useRef<ComponentType<FieldProps<T, any, M>> | null>((() => {
@@ -1,15 +1,25 @@
1
1
  import React, { useMemo } from "react";
2
2
 
3
- import { ErrorMessage } from "formik";
4
-
3
+ // import { ErrorMessage } from "@firecms/formex";
5
4
  import { Entity, EntityStatus, EnumValueConfig, EnumValues } from "../../types";
6
5
 
7
6
  import { useClipboard, useSnackbarController } from "../../hooks";
8
7
  import { enumToObjectEntries } from "../../util";
9
- import { ContentCopyIcon, IconButton, OpenInNewIcon, Select, SelectItem, TextField, Tooltip } from "@firecms/ui";
8
+ import {
9
+ CircularProgress,
10
+ ContentCopyIcon,
11
+ IconButton,
12
+ OpenInNewIcon,
13
+ Select,
14
+ SelectItem,
15
+ TextField,
16
+ Tooltip,
17
+ Typography
18
+ } from "@firecms/ui";
10
19
  import { EnumValuesChip } from "../../preview";
11
20
  import { useCustomizationController } from "../../hooks/useCustomizationController";
12
21
  import { CustomizationController } from "../../types/customization_controller";
22
+ import { useFormex } from "@firecms/formex";
13
23
 
14
24
  export function CustomIdField<M extends Record<string, any>>({
15
25
  customId,
@@ -17,16 +27,19 @@ export function CustomIdField<M extends Record<string, any>>({
17
27
  status,
18
28
  onChange,
19
29
  error,
20
- entity
30
+ entity,
31
+ loading
21
32
  }: {
22
33
  customId?: boolean | EnumValues | "optional"
23
34
  entityId?: string
24
35
  status: EntityStatus,
25
36
  onChange: (id?: string) => void,
26
37
  error: boolean,
27
- entity: Entity<M> | undefined
38
+ entity: Entity<M> | undefined,
39
+ loading: boolean
28
40
  }) {
29
41
 
42
+ const { errors } = useFormex();
30
43
  const disabled = status === "existing" || !customId;
31
44
  const idSetAutomatically = status !== "existing" && !customId;
32
45
 
@@ -48,36 +61,38 @@ export function CustomIdField<M extends Record<string, any>>({
48
61
 
49
62
  const fieldProps = {
50
63
  label: idSetAutomatically ? "ID is set automatically" : "ID",
51
- disabled,
64
+ disabled: disabled || loading,
52
65
  name: "id",
53
66
  value: (entity && status === "existing" ? entity.id : entityId) ?? "",
54
- endAdornment: entity
55
- ? (
56
- <>
57
-
58
- <Tooltip title={"Copy"}>
59
- <IconButton onClick={(e) => copy(entity.id)}
60
- aria-label="copy-id">
61
- <ContentCopyIcon size={"small"}/>
62
- </IconButton>
63
- </Tooltip>
64
-
65
- {customizationController?.entityLinkBuilder &&
66
- <Tooltip title={"Open in the console"}>
67
- <IconButton component={"a"}
68
- href={customizationController.entityLinkBuilder({ entity })}
69
- rel="noopener noreferrer"
70
- target="_blank"
71
- onClick={(e) => e.stopPropagation()}
72
- aria-label="go-to-datasource">
73
- <OpenInNewIcon size={"small"}/>
67
+ endAdornment: loading ? <CircularProgress size={"small"}/> : (entity
68
+ ? (
69
+ <>
70
+
71
+ <Tooltip title={"Copy"}
72
+ asChild={true}>
73
+ <IconButton onClick={(e) => copy(entity.id)}
74
+ aria-label="copy-id">
75
+ <ContentCopyIcon size={"small"}/>
74
76
  </IconButton>
75
- </Tooltip>}
76
-
77
- </>
78
- )
79
- : undefined
80
-
77
+ </Tooltip>
78
+
79
+ {customizationController?.entityLinkBuilder &&
80
+ <Tooltip title={"Open in the console"}
81
+ asChild={true}>
82
+ <IconButton component={"a"}
83
+ href={customizationController.entityLinkBuilder({ entity })}
84
+ rel="noopener noreferrer"
85
+ target="_blank"
86
+ onClick={(e) => e.stopPropagation()}
87
+ aria-label="go-to-datasource">
88
+ <OpenInNewIcon size={"small"}/>
89
+ </IconButton>
90
+ </Tooltip>}
91
+
92
+ </>
93
+ )
94
+ : undefined
95
+ )
81
96
  };
82
97
 
83
98
  return (
@@ -85,7 +100,9 @@ export function CustomIdField<M extends Record<string, any>>({
85
100
 
86
101
  {enumValues &&
87
102
  <Select
103
+ size={"large"}
88
104
  error={error}
105
+ fullWidth={true}
89
106
  onValueChange={(v) => onChange(v as string)}
90
107
  {...fieldProps}
91
108
  renderValue={(option) => {
@@ -116,10 +133,10 @@ export function CustomIdField<M extends Record<string, any>>({
116
133
  return onChange(value.length ? value : undefined);
117
134
  }}/>}
118
135
 
119
- <ErrorMessage name={"id"}
120
- component="div">
121
- {(_) => "You need to specify an ID"}
122
- </ErrorMessage>
136
+ {errors.id && <Typography variant={"caption"}
137
+ className={"ml-3.5 text-red-500 dark:text-red-500"}>
138
+ {errors.id}
139
+ </Typography>}
123
140
 
124
141
  </>
125
142
  );
@@ -1,11 +1,11 @@
1
1
  import React, { useEffect } from "react";
2
- import { useFormikContext } from "formik";
2
+ import { useFormex } from "@firecms/formex";
3
3
 
4
4
  export const ErrorFocus = ({ containerRef }:
5
5
  {
6
6
  containerRef?: React.RefObject<HTMLDivElement>
7
7
  }) => {
8
- const { isSubmitting, isValidating, errors } = useFormikContext();
8
+ const { isSubmitting, isValidating, errors } = useFormex();
9
9
 
10
10
  useEffect(() => {
11
11
  const keys = Object.keys(errors);
@@ -21,7 +21,7 @@ export const ErrorFocus = ({ containerRef }:
21
21
  if (scrollableParent) {
22
22
  const top = errorElement.getBoundingClientRect().top;
23
23
  scrollableParent.scrollTo({
24
- top: scrollableParent.scrollTop + top - 64,
24
+ top: scrollableParent.scrollTop + top - 196,
25
25
  behavior: "smooth"
26
26
  });
27
27
  }
@@ -1,4 +1,4 @@
1
- import { ResolvedProperty } from "../../types";
1
+ import { Property, ResolvedProperty } from "../../types";
2
2
  import { IconButton, InfoIcon, Tooltip, Typography } from "@firecms/ui";
3
3
 
4
4
  /**
@@ -13,8 +13,8 @@ export function FieldHelperText({
13
13
  disabled
14
14
  }: {
15
15
  error?: string,
16
- showError: boolean,
17
- property: ResolvedProperty,
16
+ showError?: boolean,
17
+ property: ResolvedProperty | Property,
18
18
  includeDescription?: boolean,
19
19
  disabled?: boolean,
20
20
  }
@@ -44,7 +44,7 @@ export function FieldHelperText({
44
44
  {property.longDescription &&
45
45
  <Tooltip title={property.longDescription}
46
46
  side="bottom"
47
- >
47
+ asChild={true}>
48
48
  <IconButton
49
49
  size={"small"}
50
50
  className="self-start">
@@ -0,0 +1,41 @@
1
+ import React, { forwardRef } from "react";
2
+
3
+ interface LabelWithIconProps {
4
+ icon: React.ReactNode;
5
+ title?: string;
6
+ small?: boolean;
7
+ className?: string;
8
+ required?: boolean;
9
+ }
10
+
11
+ /**
12
+ * Render the label of with an icon and the title of a property
13
+ * @group Form custom fields
14
+ */
15
+ export const LabelWithIcon = forwardRef<HTMLDivElement, LabelWithIconProps>(
16
+ ({
17
+ icon,
18
+ title,
19
+ small,
20
+ className,
21
+ required
22
+ }, ref) => {
23
+ return (
24
+ <div
25
+ ref={ref}
26
+ className={`inline-flex items-center my-0.5 ${small ? "gap-1" : "gap-2"} ${className ?? ""}`}
27
+ >
28
+ {icon}
29
+ <span
30
+ className={`text-start font-medium text-${small ? "base" : "sm"} origin-top-left transform ${
31
+ small ? "translate-x-2 scale-75" : ""
32
+ }`}
33
+ >
34
+ {(title ?? "") + (required ? " *" : "")}
35
+ </span>
36
+ </div>
37
+ );
38
+ }
39
+ );
40
+
41
+ LabelWithIcon.displayName = "LabelWithIcon";
@@ -0,0 +1,28 @@
1
+ import React from "react";
2
+ import { LabelWithIcon } from "./LabelWithIcon";
3
+ import { PropertyIdCopyTooltip } from "../../components/PropertyIdCopyTooltip";
4
+
5
+ interface LabelWithIconAndTooltip {
6
+ icon: React.ReactNode;
7
+ title?: string;
8
+ small?: boolean;
9
+ className?: string;
10
+ required?: boolean;
11
+ propertyKey: string
12
+ }
13
+
14
+ /**
15
+ * Render the label of with an icon and the title of a property
16
+ * @group Form custom fields
17
+ */
18
+ export function LabelWithIconAndTooltip({
19
+ propertyKey,
20
+ className,
21
+ ...props
22
+ }: LabelWithIconAndTooltip) {
23
+ return (
24
+ <PropertyIdCopyTooltip propertyKey={propertyKey} className={className}>
25
+ <LabelWithIcon {...props}/>
26
+ </PropertyIdCopyTooltip>
27
+ );
28
+ }
@@ -1,41 +1,45 @@
1
1
  import React from "react";
2
2
 
3
- import { Entity, ResolvedStringProperty } from "../../types";
3
+ import { ResolvedStringProperty } from "../../types";
4
4
  import { PreviewSize, PropertyPreview } from "../../preview";
5
5
 
6
- import { cn, IconButton, paperMixin, RemoveIcon, Tooltip } from "@firecms/ui";
6
+ import { cls, DescriptionIcon, IconButton, paperMixin, RemoveIcon, Tooltip } from "@firecms/ui";
7
7
  import { ErrorBoundary } from "../../components";
8
8
 
9
9
  interface StorageItemPreviewProps {
10
10
  name: string;
11
11
  property: ResolvedStringProperty;
12
12
  value: string,
13
- entity: Entity<any>,
14
13
  onRemove: (value: string) => void;
15
14
  size: PreviewSize;
16
15
  disabled: boolean;
16
+ placeholder?: boolean;
17
+ className?: string;
17
18
  }
18
19
 
19
20
  export function StorageItemPreview({
20
21
  name,
21
22
  property,
22
23
  value,
23
- entity,
24
24
  onRemove,
25
25
  disabled,
26
- size
26
+ size,
27
+ placeholder,
28
+ className
27
29
  }: StorageItemPreviewProps) {
28
30
 
29
31
  return (
30
- <div className={cn(paperMixin,
32
+ <div className={cls(paperMixin,
31
33
  "relative m-4 border-box flex items-center justify-center",
32
- size === "medium" ? "min-w-[220px] min-h-[220px] max-w-[220px]" : "min-w-[118px] min-h-[118px] max-w-[118px]")}>
34
+ size === "large" ? "min-w-[220px] min-h-[220px] max-w-[220px]" : "min-w-[118px] min-h-[118px] max-w-[118px]",
35
+ className)}>
33
36
 
34
- {!disabled &&
37
+ {!placeholder && !disabled &&
35
38
  <div
36
- className="absolute rounded-full -top-2 -right-2 z-10 bg-white dark:bg-gray-900">
39
+ className="absolute rounded-full -top-2 -right-2 z-10 bg-white dark:bg-surface-900">
37
40
 
38
41
  <Tooltip
42
+ asChild={true}
39
43
  title="Remove">
40
44
  <IconButton
41
45
  size={"small"}
@@ -49,16 +53,24 @@ export function StorageItemPreview({
49
53
  </div>
50
54
  }
51
55
 
52
- {value &&
56
+ {!placeholder && value &&
53
57
  <ErrorBoundary>
54
58
  <PropertyPreview propertyKey={name}
55
59
  value={value}
56
60
  property={property}
57
- // entity={entity}
61
+ interactive={false}
58
62
  size={size}/>
59
63
  </ErrorBoundary>
60
64
  }
61
65
 
66
+ {placeholder &&
67
+ <div
68
+ onClick={(e) => e.stopPropagation()}
69
+ className="flex flex-col items-center justify-center w-full h-full">
70
+ <DescriptionIcon className="text-surface-700 dark:text-surface-300"/>
71
+ </div>
72
+ }
73
+
62
74
 
63
75
  </div>
64
76
  );
@@ -3,7 +3,7 @@ import React, { useCallback } from "react";
3
3
  import { useSnackbarController, useStorageSource } from "../../hooks";
4
4
  import { StorageFieldItem } from "../../util/useStorageUploadController";
5
5
  import { ErrorView } from "../../components";
6
- import { cn, paperMixin, Skeleton } from "@firecms/ui";
6
+ import { cls, paperMixin, Skeleton } from "@firecms/ui";
7
7
 
8
8
  export interface StorageUploadItemProps {
9
9
  storagePath: string;
@@ -22,10 +22,10 @@ export function StorageUploadProgress({
22
22
  metadata,
23
23
  onFileUploadComplete,
24
24
  imageSize,
25
- simple
25
+ simple,
26
26
  }: StorageUploadItemProps) {
27
27
 
28
- const storage = useStorageSource();
28
+ const storageSource = useStorageSource();
29
29
 
30
30
  const snackbarController = useSnackbarController();
31
31
 
@@ -41,14 +41,14 @@ export function StorageUploadProgress({
41
41
  setError(undefined);
42
42
  setLoading(true);
43
43
 
44
- storage.uploadFile({
44
+ storageSource.uploadFile({
45
45
  file,
46
46
  fileName,
47
47
  path: storagePath,
48
48
  metadata
49
49
  })
50
50
  .then(async ({ path }) => {
51
- console.debug("Upload successful");
51
+ console.debug("Upload successful", path);
52
52
  await onFileUploadComplete(path, entry, metadata);
53
53
  if (mounted.current)
54
54
  setLoading(false);
@@ -67,7 +67,7 @@ export function StorageUploadProgress({
67
67
  .finally(() => {
68
68
  uploading.current = false;
69
69
  });
70
- }, [entry, metadata, onFileUploadComplete, storage, storagePath]);
70
+ }, [entry, metadata, onFileUploadComplete, storageSource, storagePath]);
71
71
 
72
72
  React.useEffect(() => {
73
73
  mounted.current = true;
@@ -87,9 +87,9 @@ export function StorageUploadProgress({
87
87
  }
88
88
  return (
89
89
 
90
- <div className={cn(paperMixin,
90
+ <div className={cls(paperMixin,
91
91
  "relative m-4 border-box flex items-center justify-center",
92
- `min-w-[${imageSize}px] min-h-[${imageSize}px]`)}>
92
+ `min-w-[${imageSize}px] min-h-[${imageSize}px]`)}>
93
93
 
94
94
  {loading &&
95
95
  <Skeleton className="w-full h-full"/>}
@@ -1,3 +1,3 @@
1
- export * from "./FormikArrayContainer";
2
- export * from "./SwitchControl";
3
1
  export * from "./FieldHelperText";
2
+ export * from "./LabelWithIcon";
3
+ export * from "./LabelWithIconAndTooltip";