@firecms/core 3.0.0-canary.98 → 3.0.0-rc.1

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 (349) hide show
  1. package/README.md +2 -2
  2. package/dist/app/Drawer.d.ts +0 -1
  3. package/dist/app/Scaffold.d.ts +4 -0
  4. package/dist/components/ArrayContainer.d.ts +31 -12
  5. package/dist/components/{DeleteConfirmationDialog.d.ts → ConfirmationDialog.d.ts} +1 -1
  6. package/dist/components/EntityCollectionTable/EntityCollectionRowActions.d.ts +3 -1
  7. package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +2 -2
  8. package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +17 -3
  9. package/dist/components/EntityCollectionTable/fields/TableReferenceField.d.ts +1 -1
  10. package/dist/components/EntityCollectionTable/index.d.ts +1 -1
  11. package/dist/components/EntityCollectionTable/internal/popup_field/PopupFormField.d.ts +6 -3
  12. package/dist/components/EntityCollectionView/EntityCollectionView.d.ts +8 -0
  13. package/dist/components/EntityCollectionView/utils.d.ts +3 -0
  14. package/dist/components/EntityJsonPreview.d.ts +3 -0
  15. package/dist/components/EntityPreview.d.ts +8 -6
  16. package/dist/components/HomePage/DefaultHomePage.d.ts +2 -15
  17. package/dist/components/HomePage/HomePageDnD.d.ts +76 -0
  18. package/dist/components/HomePage/NavigationCard.d.ts +3 -1
  19. package/dist/components/HomePage/NavigationCardBinding.d.ts +3 -2
  20. package/dist/components/HomePage/NavigationGroup.d.ts +8 -1
  21. package/dist/components/HomePage/RenameGroupDialog.d.ts +9 -0
  22. package/dist/components/PropertyConfigBadge.d.ts +2 -1
  23. package/dist/components/PropertyIdCopyTooltip.d.ts +8 -0
  24. package/dist/components/SelectableTable/SelectableTable.d.ts +13 -3
  25. package/dist/components/SelectableTable/filters/ReferenceFilterField.d.ts +1 -1
  26. package/dist/components/UnsavedChangesDialog.d.ts +8 -0
  27. package/dist/components/VirtualTable/VirtualTableProps.d.ts +11 -2
  28. package/dist/components/common/default_entity_actions.d.ts +0 -2
  29. package/dist/components/common/index.d.ts +1 -1
  30. package/dist/components/common/useColumnsIds.d.ts +1 -0
  31. package/dist/components/common/{useDataSourceEntityCollectionTableController.d.ts → useDataSourceTableController.d.ts} +10 -2
  32. package/dist/components/common/useDebouncedCallback.d.ts +1 -0
  33. package/dist/components/common/useScrollRestoration.d.ts +14 -0
  34. package/dist/components/index.d.ts +3 -1
  35. package/dist/contexts/BreacrumbsContext.d.ts +8 -0
  36. package/dist/core/DefaultAppBar.d.ts +8 -2
  37. package/dist/core/DrawerNavigationItem.d.ts +2 -1
  38. package/dist/core/EntityEditView.d.ts +40 -22
  39. package/dist/core/EntityEditViewFormActions.d.ts +2 -0
  40. package/dist/core/FireCMS.d.ts +2 -2
  41. package/dist/core/FireCMSRouter.d.ts +4 -0
  42. package/dist/core/NavigationRoutes.d.ts +0 -1
  43. package/dist/core/SideDialogs.d.ts +4 -2
  44. package/dist/core/field_configs.d.ts +1 -1
  45. package/dist/core/index.d.ts +2 -1
  46. package/dist/form/EntityForm.d.ts +50 -0
  47. package/dist/form/EntityFormActions.d.ts +21 -0
  48. package/dist/form/PropertyFieldBinding.d.ts +1 -1
  49. package/dist/form/components/FormEntry.d.ts +6 -0
  50. package/dist/form/components/FormLayout.d.ts +5 -0
  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/index.d.ts +3 -1
  54. package/dist/form/field_bindings/ArrayCustomShapedFieldBinding.d.ts +1 -1
  55. package/dist/form/field_bindings/ArrayOfReferencesFieldBinding.d.ts +1 -1
  56. package/dist/form/field_bindings/BlockFieldBinding.d.ts +1 -1
  57. package/dist/form/field_bindings/KeyValueFieldBinding.d.ts +1 -1
  58. package/dist/form/field_bindings/MapFieldBinding.d.ts +1 -1
  59. package/dist/form/field_bindings/MarkdownEditorFieldBinding.d.ts +11 -0
  60. package/dist/form/field_bindings/{MultiSelectBinding.d.ts → MultiSelectFieldBinding.d.ts} +1 -1
  61. package/dist/form/field_bindings/ReadOnlyFieldBinding.d.ts +1 -1
  62. package/dist/form/field_bindings/ReferenceAsStringFieldBinding.d.ts +9 -0
  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 +4 -10
  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 +17 -16
  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 +3 -3
  73. package/dist/hooks/data/useCollectionFetch.d.ts +1 -1
  74. package/dist/hooks/data/useEntityFetch.d.ts +4 -3
  75. package/dist/hooks/useAuthController.d.ts +1 -1
  76. package/dist/hooks/useBreadcrumbsController.d.ts +26 -0
  77. package/dist/hooks/useBuildNavigationController.d.ts +57 -12
  78. package/dist/hooks/useFireCMSContext.d.ts +1 -1
  79. package/dist/hooks/useModeController.d.ts +1 -2
  80. package/dist/hooks/useProjectLog.d.ts +7 -1
  81. package/dist/hooks/useResolvedNavigationFrom.d.ts +3 -3
  82. package/dist/hooks/useValidateAuthenticator.d.ts +3 -3
  83. package/dist/index.es.js +20108 -14471
  84. package/dist/index.es.js.map +1 -1
  85. package/dist/index.umd.js +20039 -14407
  86. package/dist/index.umd.js.map +1 -1
  87. package/dist/internal/useBuildDataSource.d.ts +3 -2
  88. package/dist/internal/useBuildSideEntityController.d.ts +3 -3
  89. package/dist/internal/useUnsavedChangesDialog.d.ts +7 -9
  90. package/dist/preview/PropertyPreviewProps.d.ts +1 -1
  91. package/dist/preview/components/EnumValuesChip.d.ts +1 -1
  92. package/dist/preview/components/ReferencePreview.d.ts +2 -2
  93. package/dist/preview/util.d.ts +3 -3
  94. package/dist/routes/CustomCMSRoute.d.ts +4 -0
  95. package/dist/routes/FireCMSRoute.d.ts +1 -0
  96. package/dist/routes/HomePageRoute.d.ts +3 -0
  97. package/dist/types/analytics.d.ts +1 -1
  98. package/dist/types/auth.d.ts +7 -9
  99. package/dist/types/collections.d.ts +86 -25
  100. package/dist/types/customization_controller.d.ts +8 -0
  101. package/dist/types/datasource.d.ts +19 -17
  102. package/dist/types/dialogs_controller.d.ts +7 -3
  103. package/dist/types/entities.d.ts +2 -1
  104. package/dist/types/entity_actions.d.ts +58 -8
  105. package/dist/types/entity_callbacks.d.ts +16 -16
  106. package/dist/types/entity_overrides.d.ts +2 -2
  107. package/dist/types/export_import.d.ts +4 -4
  108. package/dist/types/fields.d.ts +43 -17
  109. package/dist/types/firecms.d.ts +16 -3
  110. package/dist/types/firecms_context.d.ts +1 -1
  111. package/dist/types/navigation.d.ts +60 -17
  112. package/dist/types/permissions.d.ts +4 -4
  113. package/dist/types/plugins.d.ts +42 -9
  114. package/dist/types/properties.d.ts +65 -22
  115. package/dist/types/property_config.d.ts +1 -3
  116. package/dist/types/roles.d.ts +3 -0
  117. package/dist/types/side_dialogs_controller.d.ts +10 -0
  118. package/dist/types/side_entity_controller.d.ts +14 -1
  119. package/dist/types/storage.d.ts +75 -0
  120. package/dist/types/user.d.ts +1 -0
  121. package/dist/util/builders.d.ts +3 -3
  122. package/dist/util/callbacks.d.ts +2 -0
  123. package/dist/util/createFormexStub.d.ts +2 -0
  124. package/dist/util/entities.d.ts +2 -2
  125. package/dist/util/entity_actions.d.ts +2 -0
  126. package/dist/util/entity_cache.d.ts +23 -0
  127. package/dist/util/icon_synonyms.d.ts +0 -1
  128. package/dist/util/icons.d.ts +5 -2
  129. package/dist/util/index.d.ts +3 -0
  130. package/dist/util/navigation_from_path.d.ts +10 -1
  131. package/dist/util/navigation_utils.d.ts +13 -1
  132. package/dist/util/objects.d.ts +2 -1
  133. package/dist/util/permissions.d.ts +4 -4
  134. package/dist/util/property_utils.d.ts +4 -4
  135. package/dist/util/references.d.ts +2 -2
  136. package/dist/util/resolutions.d.ts +30 -6
  137. package/dist/util/storage.d.ts +1 -1
  138. package/dist/util/useStorageUploadController.d.ts +2 -2
  139. package/package.json +133 -125
  140. package/src/app/Drawer.tsx +0 -1
  141. package/src/app/Scaffold.tsx +33 -29
  142. package/src/components/ArrayContainer.tsx +447 -229
  143. package/src/components/CircularProgressCenter.tsx +1 -1
  144. package/src/components/ClearFilterSortButton.tsx +1 -1
  145. package/src/components/{DeleteConfirmationDialog.tsx → ConfirmationDialog.tsx} +12 -11
  146. package/src/components/DeleteEntityDialog.tsx +13 -20
  147. package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +59 -25
  148. package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +23 -17
  149. package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +20 -3
  150. package/src/components/EntityCollectionTable/PropertyTableCell.tsx +35 -9
  151. package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +21 -16
  152. package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +6 -12
  153. package/src/components/EntityCollectionTable/index.tsx +1 -1
  154. package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +6 -6
  155. package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +35 -26
  156. package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +20 -8
  157. package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +132 -101
  158. package/src/components/EntityCollectionTable/internal/popup_field/useDraggable.tsx +9 -9
  159. package/src/components/EntityCollectionView/EntityCollectionView.tsx +178 -85
  160. package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +7 -4
  161. package/src/components/EntityCollectionView/useSelectionController.tsx +5 -4
  162. package/src/components/EntityCollectionView/utils.ts +19 -0
  163. package/src/components/EntityJsonPreview.tsx +66 -0
  164. package/src/components/EntityPreview.tsx +75 -57
  165. package/src/components/EntityView.tsx +8 -5
  166. package/src/components/ErrorView.tsx +3 -3
  167. package/src/components/FireCMSLogo.tsx +7 -51
  168. package/src/components/HomePage/DefaultHomePage.tsx +522 -160
  169. package/src/components/HomePage/FavouritesView.tsx +9 -14
  170. package/src/components/HomePage/HomePageDnD.tsx +642 -0
  171. package/src/components/HomePage/NavigationCard.tsx +47 -38
  172. package/src/components/HomePage/NavigationCardBinding.tsx +16 -15
  173. package/src/components/HomePage/NavigationGroup.tsx +144 -30
  174. package/src/components/HomePage/RenameGroupDialog.tsx +117 -0
  175. package/src/components/HomePage/SmallNavigationCard.tsx +1 -2
  176. package/src/components/NotFoundPage.tsx +2 -2
  177. package/src/components/PropertyConfigBadge.tsx +9 -3
  178. package/src/components/PropertyIdCopyTooltip.tsx +47 -0
  179. package/src/components/ReferenceTable/ReferenceSelectionTable.tsx +22 -13
  180. package/src/components/SearchIconsView.tsx +2 -2
  181. package/src/components/SelectableTable/SelectableTable.tsx +154 -142
  182. package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +4 -2
  183. package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +10 -8
  184. package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +59 -10
  185. package/src/components/UnsavedChangesDialog.tsx +46 -0
  186. package/src/components/VirtualTable/VirtualTable.tsx +65 -44
  187. package/src/components/VirtualTable/VirtualTableCell.tsx +0 -8
  188. package/src/components/VirtualTable/VirtualTableHeader.tsx +8 -8
  189. package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +1 -1
  190. package/src/components/VirtualTable/VirtualTableProps.tsx +12 -2
  191. package/src/components/VirtualTable/VirtualTableRow.tsx +1 -1
  192. package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +4 -4
  193. package/src/components/VirtualTable/fields/VirtualTableInput.tsx +2 -2
  194. package/src/components/VirtualTable/fields/VirtualTableNumberInput.tsx +2 -1
  195. package/src/components/VirtualTable/fields/VirtualTableSelect.tsx +16 -28
  196. package/src/components/common/default_entity_actions.tsx +62 -42
  197. package/src/components/common/index.ts +1 -1
  198. package/src/components/common/useColumnsIds.tsx +1 -1
  199. package/src/components/common/useDataSourceTableController.tsx +420 -0
  200. package/src/components/common/useDebouncedCallback.tsx +20 -0
  201. package/src/components/common/useScrollRestoration.tsx +68 -0
  202. package/src/components/common/useTableSearchHelper.ts +1 -0
  203. package/src/components/index.tsx +4 -1
  204. package/src/contexts/BreacrumbsContext.tsx +38 -0
  205. package/src/contexts/DialogsProvider.tsx +3 -2
  206. package/src/contexts/ModeController.tsx +1 -3
  207. package/src/contexts/SnackbarProvider.tsx +2 -0
  208. package/src/core/DefaultAppBar.tsx +124 -85
  209. package/src/core/DefaultDrawer.tsx +30 -22
  210. package/src/core/DrawerNavigationItem.tsx +32 -28
  211. package/src/core/EntityEditView.tsx +388 -995
  212. package/src/core/EntityEditViewFormActions.tsx +329 -0
  213. package/src/core/EntitySidePanel.tsx +88 -20
  214. package/src/core/FireCMS.tsx +46 -25
  215. package/src/core/FireCMSRouter.tsx +17 -0
  216. package/src/core/NavigationRoutes.tsx +23 -32
  217. package/src/core/SideDialogs.tsx +22 -12
  218. package/src/core/field_configs.tsx +24 -10
  219. package/src/core/index.tsx +4 -2
  220. package/src/form/EntityForm.tsx +814 -0
  221. package/src/form/EntityFormActions.tsx +211 -0
  222. package/src/form/PropertyFieldBinding.tsx +55 -41
  223. package/src/form/components/CustomIdField.tsx +9 -3
  224. package/src/form/components/FieldHelperText.tsx +1 -1
  225. package/src/form/components/FormEntry.tsx +22 -0
  226. package/src/form/components/FormLayout.tsx +16 -0
  227. package/src/form/components/LabelWithIcon.tsx +30 -19
  228. package/src/form/components/LabelWithIconAndTooltip.tsx +28 -0
  229. package/src/form/components/StorageItemPreview.tsx +5 -4
  230. package/src/form/components/StorageUploadProgress.tsx +2 -3
  231. package/src/form/components/index.tsx +3 -1
  232. package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +30 -18
  233. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +47 -36
  234. package/src/form/field_bindings/BlockFieldBinding.tsx +55 -33
  235. package/src/form/field_bindings/DateTimeFieldBinding.tsx +18 -14
  236. package/src/form/field_bindings/KeyValueFieldBinding.tsx +19 -15
  237. package/src/form/field_bindings/MapFieldBinding.tsx +72 -62
  238. package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +159 -0
  239. package/src/form/field_bindings/{MultiSelectBinding.tsx → MultiSelectFieldBinding.tsx} +26 -21
  240. package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +10 -8
  241. package/src/form/field_bindings/ReferenceAsStringFieldBinding.tsx +135 -0
  242. package/src/form/field_bindings/ReferenceFieldBinding.tsx +28 -19
  243. package/src/form/field_bindings/RepeatFieldBinding.tsx +56 -32
  244. package/src/form/field_bindings/SelectFieldBinding.tsx +22 -13
  245. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +247 -168
  246. package/src/form/field_bindings/SwitchFieldBinding.tsx +29 -24
  247. package/src/form/field_bindings/TextFieldBinding.tsx +28 -24
  248. package/src/form/index.tsx +17 -37
  249. package/src/form/useClearRestoreValue.tsx +2 -2
  250. package/src/form/validation.ts +12 -6
  251. package/src/hooks/data/delete.ts +6 -5
  252. package/src/hooks/data/save.ts +26 -35
  253. package/src/hooks/data/useCollectionFetch.tsx +3 -3
  254. package/src/hooks/data/useDataSource.tsx +10 -2
  255. package/src/hooks/data/useEntityFetch.tsx +10 -6
  256. package/src/hooks/useAuthController.tsx +1 -1
  257. package/src/hooks/useBreadcrumbsController.tsx +31 -0
  258. package/src/hooks/useBrowserTitleAndIcon.tsx +1 -1
  259. package/src/hooks/useBuildModeController.tsx +15 -28
  260. package/src/hooks/useBuildNavigationController.tsx +386 -124
  261. package/src/hooks/useFireCMSContext.tsx +3 -33
  262. package/src/hooks/useLargeLayout.tsx +0 -35
  263. package/src/hooks/useModeController.tsx +1 -2
  264. package/src/hooks/useProjectLog.tsx +16 -5
  265. package/src/hooks/useResolvedNavigationFrom.tsx +9 -11
  266. package/src/hooks/useValidateAuthenticator.tsx +3 -3
  267. package/src/internal/useBuildDataSource.ts +67 -80
  268. package/src/internal/useBuildSideDialogsController.tsx +4 -2
  269. package/src/internal/useBuildSideEntityController.tsx +149 -86
  270. package/src/internal/useUnsavedChangesDialog.tsx +127 -91
  271. package/src/preview/PropertyPreview.tsx +28 -12
  272. package/src/preview/PropertyPreviewProps.tsx +1 -1
  273. package/src/preview/components/BooleanPreview.tsx +1 -1
  274. package/src/preview/components/EmptyValue.tsx +1 -1
  275. package/src/preview/components/EnumValuesChip.tsx +1 -1
  276. package/src/preview/components/ImagePreview.tsx +10 -9
  277. package/src/preview/components/ReferencePreview.tsx +6 -16
  278. package/src/preview/components/UrlComponentPreview.tsx +20 -21
  279. package/src/preview/property_previews/ArrayOfMapsPreview.tsx +6 -5
  280. package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +5 -4
  281. package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +5 -3
  282. package/src/preview/property_previews/ArrayOfStringsPreview.tsx +4 -3
  283. package/src/preview/property_previews/ArrayOneOfPreview.tsx +6 -4
  284. package/src/preview/property_previews/ArrayPropertyPreview.tsx +5 -3
  285. package/src/preview/property_previews/MapPropertyPreview.tsx +7 -6
  286. package/src/preview/property_previews/SkeletonPropertyComponent.tsx +13 -13
  287. package/src/preview/property_previews/StringPropertyPreview.tsx +2 -2
  288. package/src/preview/util.ts +10 -10
  289. package/src/routes/CustomCMSRoute.tsx +21 -0
  290. package/src/routes/FireCMSRoute.tsx +246 -0
  291. package/src/routes/HomePageRoute.tsx +17 -0
  292. package/src/types/analytics.ts +3 -0
  293. package/src/types/auth.tsx +8 -12
  294. package/src/types/collections.ts +101 -28
  295. package/src/types/customization_controller.tsx +9 -0
  296. package/src/types/datasource.ts +21 -20
  297. package/src/types/dialogs_controller.tsx +7 -3
  298. package/src/types/entities.ts +3 -1
  299. package/src/types/entity_actions.tsx +71 -8
  300. package/src/types/entity_callbacks.ts +18 -18
  301. package/src/types/entity_overrides.tsx +2 -2
  302. package/src/types/export_import.ts +4 -4
  303. package/src/types/fields.tsx +52 -19
  304. package/src/types/firecms.tsx +18 -4
  305. package/src/types/firecms_context.tsx +1 -1
  306. package/src/types/navigation.ts +76 -22
  307. package/src/types/permissions.ts +5 -5
  308. package/src/types/plugins.tsx +50 -9
  309. package/src/types/properties.ts +74 -22
  310. package/src/types/property_config.tsx +1 -2
  311. package/src/types/roles.ts +3 -0
  312. package/src/types/side_dialogs_controller.tsx +15 -0
  313. package/src/types/side_entity_controller.tsx +16 -1
  314. package/src/types/storage.ts +82 -0
  315. package/src/types/user.ts +2 -0
  316. package/src/util/builders.ts +10 -8
  317. package/src/util/callbacks.ts +119 -0
  318. package/src/util/createFormexStub.tsx +62 -0
  319. package/src/util/entities.ts +5 -3
  320. package/src/util/entity_actions.ts +28 -0
  321. package/src/util/entity_cache.ts +204 -0
  322. package/src/util/icon_list.ts +1 -1
  323. package/src/util/icon_synonyms.ts +0 -1
  324. package/src/util/icons.tsx +36 -11
  325. package/src/util/index.ts +3 -0
  326. package/src/util/join_collections.ts +9 -2
  327. package/src/util/make_properties_editable.ts +13 -5
  328. package/src/util/navigation_from_path.ts +33 -12
  329. package/src/util/navigation_utils.ts +135 -19
  330. package/src/util/objects.ts +74 -14
  331. package/src/util/parent_references_from_path.ts +3 -3
  332. package/src/util/permissions.ts +8 -8
  333. package/src/util/property_utils.tsx +17 -6
  334. package/src/util/references.ts +19 -8
  335. package/src/util/resolutions.ts +93 -24
  336. package/src/util/storage.ts +6 -2
  337. package/src/util/useStorageUploadController.tsx +74 -29
  338. package/dist/components/EntityCollectionTable/internal/popup_field/ElementResizeListener.d.ts +0 -5
  339. package/dist/components/PropertyIdCopyTooltipContent.d.ts +0 -3
  340. package/dist/form/PropertiesForm.d.ts +0 -8
  341. package/dist/form/components/FormikArrayContainer.d.ts +0 -18
  342. package/dist/form/field_bindings/MarkdownFieldBinding.d.ts +0 -9
  343. package/src/components/EntityCollectionTable/internal/popup_field/ElementResizeListener.tsx +0 -59
  344. package/src/components/PropertyIdCopyTooltipContent.tsx +0 -27
  345. package/src/components/common/useDataSourceEntityCollectionTableController.tsx +0 -236
  346. package/src/form/PropertiesForm.tsx +0 -81
  347. package/src/form/components/FormikArrayContainer.tsx +0 -44
  348. package/src/form/field_bindings/MarkdownFieldBinding.tsx +0 -695
  349. /package/src/util/{common.tsx → common.ts} +0 -0
@@ -1,19 +1,11 @@
1
1
  import React from "react";
2
- import {
3
- CMSType,
4
- FieldProps,
5
- FormContext,
6
- MapProperty,
7
- Properties,
8
- ResolvedProperties,
9
- ResolvedProperty
10
- } from "../../types";
2
+ import { FieldProps, MapProperty, Properties, PropertyFieldBindingProps, ResolvedProperties } from "../../types";
11
3
 
12
4
  import { ErrorBoundary } from "../../components";
13
- import { getIconForProperty, isHidden, pick } from "../../util";
14
- import { FieldHelperText, LabelWithIcon } from "../components";
5
+ import { getIconForProperty, isHidden, isReadOnly, pick } from "../../util";
6
+ import { FieldHelperText, LabelWithIconAndTooltip } from "../components";
15
7
  import { PropertyFieldBinding } from "../PropertyFieldBinding";
16
- import { ExpandablePanel, InputLabel, Select, SelectItem } from "@firecms/ui";
8
+ import { cls, ExpandablePanel, InputLabel, Select, SelectItem } from "@firecms/ui";
17
9
 
18
10
  /**
19
11
  * Field that renders the children property fields
@@ -29,16 +21,17 @@ export function MapFieldBinding({
29
21
  error,
30
22
  disabled,
31
23
  property,
32
- partOfBlock,
33
- tableMode,
24
+ partOfArray,
25
+ minimalistView: minimalistViewProp,
34
26
  includeDescription,
35
- underlyingValueHasChanged,
36
27
  autoFocus,
37
- context
28
+ context,
29
+ onPropertyChange
38
30
  }: FieldProps<Record<string, any>>) {
39
31
 
40
32
  const pickOnlySomeKeys = property.pickOnlySomeKeys || false;
41
- const expanded = (property.expanded === undefined ? true : property.expanded) || autoFocus;
33
+ const expanded = property.expanded === undefined ? true : property.expanded;
34
+ const minimalistView = minimalistViewProp || property.minimalistView;
42
35
 
43
36
  if (!property.properties) {
44
37
  throw Error(`You need to specify a 'properties' prop (or specify a custom field) in your map property ${propertyKey}`);
@@ -59,58 +52,73 @@ export function MapFieldBinding({
59
52
  }
60
53
 
61
54
  const mapFormView = <>
62
- <div className="py-1 flex flex-col space-y-2">
63
- {Object.entries(mapProperties)
64
- .filter(([_, property]) => !isHidden(property))
65
- .map(([entryKey, childProperty], index) => {
66
- const fieldProps = {
67
- propertyKey: `${propertyKey}.${entryKey}`,
68
- disabled,
69
- property: childProperty,
70
- includeDescription,
71
- underlyingValueHasChanged,
72
- context,
73
- tableMode: false,
74
- partOfArray: false,
75
- partOfBlock: false,
76
- autoFocus: autoFocus && index === 0
77
- };
78
-
79
- return (
80
- <div key={`map-${propertyKey}-${index}`}>
81
- <ErrorBoundary>
82
- <PropertyFieldBinding
83
- {...fieldProps}/>
84
- </ErrorBoundary>
85
- </div>
86
- );
87
- }
88
- )}
89
- </div>
90
-
91
- {/*{pickOnlySomeKeys && buildPickKeysSelect(disabled, property.properties, setValue, value)}*/}
92
-
93
- </>;
94
-
95
- const title = (
96
- <LabelWithIcon icon={getIconForProperty(property, "small")}
97
- required={property.validation?.required}
98
- title={property.name}
99
- className={"text-text-secondary dark:text-text-secondary-dark"}/>
100
- );
55
+ <div
56
+ className={cls("py-1 flex flex-col space-y-2", minimalistView && property.widthPercentage !== undefined ? "mt-8" : undefined)}>
57
+ {Object.entries(mapProperties)
58
+ .filter(([_, property]) => !isHidden(property))
59
+ .map(([entryKey, childProperty], index) => {
60
+ const thisDisabled = isReadOnly(childProperty) || Boolean(childProperty.disabled);
61
+ const fieldBindingProps: PropertyFieldBindingProps<any> = {
62
+ propertyKey: `${propertyKey}.${entryKey}`,
63
+ disabled: disabled || thisDisabled,
64
+ property: childProperty,
65
+ includeDescription,
66
+ context,
67
+ partOfArray: false,
68
+ minimalistView: false,
69
+ autoFocus: autoFocus && index === 0,
70
+ onPropertyChange: function (updatedProperty) {
71
+ onPropertyChange?.({
72
+ properties: {
73
+ [entryKey]: updatedProperty
74
+ }
75
+ } as Partial<MapProperty>);
76
+ }
77
+ };
78
+
79
+ return (
80
+ <div key={`map-${propertyKey}-${index}`} className={"relative"}>
81
+ <ErrorBoundary>
82
+ <PropertyFieldBinding
83
+ {...fieldBindingProps}/>
84
+ </ErrorBoundary>
85
+ </div>
86
+ ) ;
87
+ }
88
+ )
89
+ }
90
+ </div>
91
+
92
+ {/*{pickOnlySomeKeys && buildPickKeysSelect(disabled, property.properties, setValue, value)}*/}
93
+
94
+ </>
95
+ ;
101
96
 
102
97
  return (
103
98
  <ErrorBoundary>
104
99
 
105
- {!tableMode && !partOfBlock && <ExpandablePanel initiallyExpanded={expanded}
106
- className={"px-2 md:px-4 pb-2 md:pb-4 pt-1 md:pt-2 bg-slate-50 bg-opacity-50 dark:bg-gray-900"}
107
- title={title}>{mapFormView}</ExpandablePanel>}
108
-
109
- {(tableMode || partOfBlock) && mapFormView}
100
+ {!minimalistView && <ExpandablePanel initiallyExpanded={expanded}
101
+ onExpandedChange={(expanded) => {
102
+ onPropertyChange?.({
103
+ expanded
104
+ });
105
+ }}
106
+ className={property.widthPercentage !== undefined ? "mt-8" : undefined}
107
+ innerClassName={"px-2 md:px-4 pb-2 md:pb-4 pt-1 md:pt-2 bg-white dark:bg-surface-900"}
108
+ title={<LabelWithIconAndTooltip
109
+ propertyKey={propertyKey}
110
+ icon={getIconForProperty(property, "small")}
111
+ required={property.validation?.required}
112
+ title={property.name}
113
+ className={"text-text-secondary dark:text-text-secondary-dark"}/>}>
114
+ {mapFormView}
115
+ </ExpandablePanel>}
116
+
117
+ {minimalistView && mapFormView}
110
118
 
111
119
  <FieldHelperText includeDescription={includeDescription}
112
120
  showError={showError ?? false}
113
- error={error ? (typeof error === "string" ? error : "A property of this map has an error") : undefined}
121
+ error={error && !partOfArray ? (typeof error === "string" ? error : "A property of this map has an error") : undefined}
114
122
  disabled={disabled}
115
123
  property={property}/>
116
124
 
@@ -136,6 +144,8 @@ const buildPickKeysSelect = (disabled: boolean, properties: Properties, setValue
136
144
  <InputLabel>Add property</InputLabel>
137
145
  <Select
138
146
  value={""}
147
+ size={"large"}
148
+ fullWidth={true}
139
149
  disabled={disabled}
140
150
  onValueChange={handleAddProperty}
141
151
  renderValue={(key) => (properties as Properties)[key].name || key}>
@@ -0,0 +1,159 @@
1
+ import React, { useCallback, useEffect, useRef, useState } from "react";
2
+ import {
3
+ FieldHelperText,
4
+ FieldProps,
5
+ getIconForProperty,
6
+ LabelWithIconAndTooltip,
7
+ PropertyOrBuilder,
8
+ randomString,
9
+ ResolvedArrayProperty,
10
+ ResolvedStringProperty,
11
+ useAuthController,
12
+ useStorageSource
13
+ } from "../../index";
14
+ import { cls, fieldBackgroundDisabledMixin, fieldBackgroundHoverMixin, fieldBackgroundMixin } from "@firecms/ui";
15
+ import { FireCMSEditor, FireCMSEditorProps } from "@firecms/editor";
16
+ import { resolveProperty, resolveStorageFilenameString, resolveStoragePathString } from "../../util";
17
+
18
+ interface MarkdownEditorFieldProps {
19
+ highlight?: { from: number, to: number };
20
+ editorProps?: Partial<FireCMSEditorProps>
21
+ }
22
+
23
+ export function MarkdownEditorFieldBinding({
24
+ property,
25
+ propertyKey,
26
+ value,
27
+ setValue,
28
+ includeDescription,
29
+ showError,
30
+ error,
31
+ minimalistView,
32
+ disabled: disabledProp,
33
+ isSubmitting,
34
+ context,
35
+ customProps,
36
+ }: FieldProps<string, MarkdownEditorFieldProps>) {
37
+
38
+ const authController = useAuthController();
39
+ const disabled = disabledProp || isSubmitting;
40
+ const highlight = customProps?.highlight;
41
+ const editorProps = customProps?.editorProps;
42
+ const storageSource = useStorageSource();
43
+ const storage = property.storage;
44
+
45
+ const entityValues = context.values;
46
+ const entityId = context.entityId;
47
+ const path = context.path;
48
+
49
+ const [fieldVersion, setFieldVersion] = useState(0);
50
+ const internalValue = useRef<string | null>(value);
51
+
52
+ const onContentChange = useCallback((content: string) => {
53
+ if (content === value || (value === null && content === "")) {
54
+ return;
55
+ }
56
+ internalValue.current = content;
57
+ setValue(content);
58
+ }, [setValue]);
59
+
60
+ useEffect(() => {
61
+ if (internalValue.current !== value) {
62
+ internalValue.current = value;
63
+ setFieldVersion(fieldVersion + 1);
64
+ }
65
+ }, [value]);
66
+
67
+ const resolvedProperty = resolveProperty({
68
+ propertyOrBuilder: property as PropertyOrBuilder,
69
+ values: entityValues,
70
+ authController
71
+ }) as ResolvedStringProperty | ResolvedArrayProperty<string[]>;
72
+
73
+ const fileNameBuilder = useCallback(async (file: File) => {
74
+ if (storage?.fileName) {
75
+ const fileName = await resolveStorageFilenameString({
76
+ input: storage.fileName,
77
+ storage,
78
+ values: entityValues,
79
+ entityId,
80
+ path,
81
+ property: resolvedProperty,
82
+ file,
83
+ propertyKey
84
+ });
85
+ if (!fileName || fileName.length === 0) {
86
+ throw Error("You need to return a valid filename");
87
+ }
88
+ return fileName;
89
+ }
90
+ return randomString() + "_" + file.name;
91
+ }, [entityId, entityValues, path, resolvedProperty, propertyKey, storage]);
92
+
93
+ const storagePathBuilder = useCallback((file: File) => {
94
+ if (!storage) return "/";
95
+ const resolvedProperty = resolveProperty({
96
+ propertyOrBuilder: property,
97
+ values: entityValues,
98
+ authController
99
+ }) as ResolvedStringProperty | ResolvedArrayProperty<string[]>;
100
+ return resolveStoragePathString({
101
+ input: storage.storagePath,
102
+ storage,
103
+ values: entityValues,
104
+ entityId,
105
+ path,
106
+ property: resolvedProperty,
107
+ file,
108
+ propertyKey
109
+ }) ?? "/";
110
+ }, [entityId, entityValues, path, property, propertyKey, storage]);
111
+
112
+ const editor = <FireCMSEditor
113
+ content={value}
114
+ onMarkdownContentChange={onContentChange}
115
+ version={context.formex.version + fieldVersion}
116
+ highlight={highlight}
117
+ disabled={disabled}
118
+ handleImageUpload={async (file: File) => {
119
+ const storagePath = storagePathBuilder(file);
120
+ const fileName = await fileNameBuilder(file);
121
+ const result = await storageSource.uploadFile({
122
+ file,
123
+ fileName,
124
+ path: storagePath,
125
+ });
126
+ const downloadConfig = await storageSource.getDownloadURL(result.path);
127
+ const url = downloadConfig.url;
128
+ if (!url) {
129
+ throw new Error("Error uploading image");
130
+ }
131
+ return url;
132
+ }}
133
+ {...editorProps}
134
+ />;
135
+
136
+ if (minimalistView)
137
+ return editor;
138
+
139
+ return (
140
+ <>
141
+ <LabelWithIconAndTooltip
142
+ propertyKey={propertyKey}
143
+ icon={getIconForProperty(property, "small")}
144
+ required={property.validation?.required}
145
+ title={property.name}
146
+ className={"h-8 text-text-secondary dark:text-text-secondary-dark ml-3.5"}/>
147
+ <div
148
+ className={cls("rounded-md", fieldBackgroundMixin, disabled ? fieldBackgroundDisabledMixin : fieldBackgroundHoverMixin)}>
149
+ {editor}
150
+ </div>
151
+ <FieldHelperText includeDescription={includeDescription}
152
+ showError={showError}
153
+ error={error}
154
+ property={property}/>
155
+ </>
156
+
157
+ );
158
+
159
+ }
@@ -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 = "large",
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
84
- value={validValue ? value.map((v) => v.toString()) : []}
85
+ className={"w-full mt-2"}
86
+ size={size}
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={"h-8 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,9 +1,9 @@
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
9
  import { cls, paperMixin } from "@firecms/ui";
@@ -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
@@ -34,14 +34,16 @@ export function ReadOnlyFieldBinding({
34
34
 
35
35
  <>
36
36
 
37
- {!tableMode && <LabelWithIcon icon={getIconForProperty(property, "small")}
38
- required={property.validation?.required}
39
- title={property.name}
40
- 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={"h-8 text-text-secondary dark:text-text-secondary-dark ml-3.5"}/>
41
43
  }
42
44
 
43
45
  <div
44
- className={cls(paperMixin, "min-h-14 p-4 md:p-6 overflow-x-scroll no-scrollbar")}>
46
+ className={cls(paperMixin, "w-full min-h-14 p-4 md:p-6 overflow-x-scroll no-scrollbar")}>
45
47
 
46
48
  <ErrorBoundary>
47
49
  <PropertyPreview propertyKey={propertyKey}
@@ -0,0 +1,135 @@
1
+ import React, { useCallback, useMemo } from "react";
2
+ import { Entity, EntityCollection, EntityReference, FieldProps } from "../../types";
3
+ import { useNavigationController, useReferenceDialog } from "../../hooks";
4
+ import { ReadOnlyFieldBinding } from "./ReadOnlyFieldBinding";
5
+ import { FieldHelperText, LabelWithIconAndTooltip } from "../components";
6
+ import { ErrorView } from "../../components";
7
+ import { ReferencePreview } from "../../preview";
8
+ import { getIconForProperty, IconForView } from "../../util";
9
+ import { useClearRestoreValue } from "../useClearRestoreValue";
10
+ import { EntityPreviewContainer } from "../../components/EntityPreview";
11
+ import { cls } from "@firecms/ui";
12
+
13
+ /**
14
+ * Field that opens a reference selection dialog and stores the entity ID as a string.
15
+ *
16
+ * This is one of the internal components that get mapped natively inside forms
17
+ * and tables to the specified properties.
18
+ * @group Form fields
19
+ */
20
+ export function ReferenceAsStringFieldBinding(props: FieldProps<string>) {
21
+ if (typeof props.property.reference?.path !== "string") {
22
+ return <ReadOnlyFieldBinding {...props}/>;
23
+ }
24
+
25
+ return <ReferenceAsStringFieldBindingInternal {...props}/>;
26
+ }
27
+
28
+ function ReferenceAsStringFieldBindingInternal({
29
+ propertyKey,
30
+ value,
31
+ setValue,
32
+ error,
33
+ showError,
34
+ isSubmitting,
35
+ disabled,
36
+ minimalistView,
37
+ property,
38
+ includeDescription,
39
+ size = "medium"
40
+ }: FieldProps<string>) {
41
+ if (!property.reference?.path) {
42
+ throw new Error("Property path is required for ReferenceAsStringFieldBinding");
43
+ }
44
+
45
+ useClearRestoreValue({
46
+ property,
47
+ value,
48
+ setValue
49
+ });
50
+
51
+ const navigationController = useNavigationController();
52
+ const path = property.reference.path;
53
+ const collection: EntityCollection | undefined = useMemo(() => {
54
+ return path ? navigationController.getCollection(path) : undefined;
55
+ }, [path]);
56
+
57
+ const referenceValue: EntityReference | undefined = useMemo(() => {
58
+ if (value && path) {
59
+ return new EntityReference(value, path);
60
+ }
61
+ return undefined;
62
+ }, [value, path]);
63
+
64
+ if (!collection) {
65
+ throw Error(`Couldn't find the corresponding collection for the path: ${path}`);
66
+ }
67
+
68
+ const onSingleEntitySelected = useCallback((e: Entity<any> | null) => {
69
+ setValue(e ? e.id : null);
70
+ }, [setValue]);
71
+
72
+ const referenceDialogController = useReferenceDialog({
73
+ multiselect: false,
74
+ path: path,
75
+ collection,
76
+ onSingleEntitySelected,
77
+ selectedEntityIds: value ? [value] : undefined,
78
+ forceFilter: property.reference.forceFilter
79
+ }
80
+ );
81
+
82
+ const onEntryClick = (e: React.SyntheticEvent) => {
83
+ e.preventDefault();
84
+ referenceDialogController.open();
85
+ };
86
+
87
+ return (
88
+ <>
89
+ {!minimalistView && <LabelWithIconAndTooltip
90
+ propertyKey={propertyKey}
91
+ icon={getIconForProperty(property, "small")}
92
+ required={property.validation?.required}
93
+ title={property.name}
94
+ className={"h-8 text-text-secondary dark:text-text-secondary-dark ml-3.5"}/>}
95
+
96
+ {!collection && <ErrorView
97
+ error={"The specified collection does not exist. Check console"}/>}
98
+
99
+ {collection && <>
100
+
101
+ {referenceValue && <ReferencePreview
102
+ disabled={!path}
103
+ previewProperties={property.reference?.previewProperties}
104
+ hover={!disabled}
105
+ size={size}
106
+ onClick={disabled || isSubmitting ? undefined : onEntryClick}
107
+ reference={referenceValue}
108
+ includeEntityLink={property.reference?.includeEntityLink}
109
+ includeId={property.reference?.includeId}
110
+ />}
111
+
112
+ {!value && <div className="justify-center text-left">
113
+ <EntityPreviewContainer
114
+ className={cls("px-6 h-16 text-sm font-medium flex items-center gap-6",
115
+ disabled || isSubmitting
116
+ ? "text-surface-accent-500"
117
+ : "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")}
118
+ onClick={onEntryClick}
119
+ size={"medium"}>
120
+ <IconForView collectionOrView={collection}
121
+ className={"text-surface-300 dark:text-surface-600"}/>
122
+ {`Edit ${property.name}`.toUpperCase()}
123
+ </EntityPreviewContainer>
124
+ </div>}
125
+ </>}
126
+
127
+ <FieldHelperText includeDescription={includeDescription}
128
+ showError={showError}
129
+ error={error}
130
+ disabled={disabled}
131
+ property={property}/>
132
+
133
+ </>
134
+ );
135
+ }