@firecms/core 3.0.0-alpha.7 → 3.0.0-alpha.70

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 (460) hide show
  1. package/README.md +1 -1
  2. package/dist/components/ArrayContainer.d.ts +42 -0
  3. package/dist/components/CircularProgressCenter.d.ts +11 -0
  4. package/dist/components/DeleteConfirmationDialog.d.ts +9 -0
  5. package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +30 -0
  6. package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +106 -0
  7. package/dist/components/EntityCollectionTable/fields/TableReferenceField.d.ts +15 -0
  8. package/dist/components/EntityCollectionTable/fields/TableStorageUpload.d.ts +33 -0
  9. package/dist/components/EntityCollectionTable/filters/BooleanFilterField.d.ts +9 -0
  10. package/dist/components/EntityCollectionTable/filters/DateTimeFilterField.d.ts +11 -0
  11. package/dist/components/EntityCollectionTable/filters/ReferenceFilterField.d.ts +14 -0
  12. package/dist/components/EntityCollectionTable/filters/StringNumberFilterField.d.ts +13 -0
  13. package/dist/components/EntityCollectionTable/index.d.ts +4 -0
  14. package/dist/components/EntityCollectionTable/internal/CollectionTableToolbar.d.ts +18 -0
  15. package/dist/components/EntityCollectionTable/internal/DeleteEntityDialog.d.ts +12 -0
  16. package/dist/components/EntityCollectionTable/internal/EntityCollectionRowActions.d.ts +35 -0
  17. package/dist/components/EntityCollectionTable/internal/EntityTableCell.d.ts +26 -0
  18. package/dist/components/EntityCollectionTable/internal/EntityTableCellActions.d.ts +9 -0
  19. package/dist/components/EntityCollectionTable/internal/PropertyTableCell.d.ts +18 -0
  20. package/dist/components/EntityCollectionTable/internal/common.d.ts +4 -0
  21. package/dist/components/EntityCollectionTable/internal/default_entity_actions.d.ts +6 -0
  22. package/dist/components/EntityCollectionTable/internal/popup_field/ElementResizeListener.d.ts +5 -0
  23. package/dist/components/EntityCollectionTable/internal/popup_field/PopupFormField.d.ts +23 -0
  24. package/dist/components/EntityCollectionTable/internal/popup_field/useDraggable.d.ts +13 -0
  25. package/dist/components/EntityCollectionTable/internal/popup_field/useWindowSize.d.ts +6 -0
  26. package/dist/components/EntityCollectionTable/types.d.ts +39 -0
  27. package/dist/components/EntityCollectionTable/useDebouncedData.d.ts +9 -0
  28. package/dist/components/EntityCollectionTable/useEntityCollectionTableController.d.ts +21 -0
  29. package/dist/components/EntityCollectionView/EntityCollectionView.d.ts +37 -0
  30. package/dist/components/EntityCollectionView/EntityCollectionViewActions.d.ts +14 -0
  31. package/dist/components/EntityCollectionView/useColumnsIds.d.ts +4 -0
  32. package/dist/components/EntityPreview.d.ts +11 -0
  33. package/dist/components/ErrorBoundary.d.ts +11 -0
  34. package/dist/components/ErrorTooltip.d.ts +2 -0
  35. package/dist/components/ErrorView.d.ts +19 -0
  36. package/dist/components/FieldConfigBadge.d.ts +4 -0
  37. package/dist/components/FireCMSAppBar.d.ts +26 -0
  38. package/dist/components/FireCMSLogo.d.ts +7 -0
  39. package/dist/components/HomePage/DefaultHomePage.d.ts +21 -0
  40. package/dist/components/HomePage/FavouritesView.d.ts +3 -0
  41. package/dist/components/HomePage/NavigationCollectionCard.d.ts +17 -0
  42. package/dist/components/HomePage/NavigationGroup.d.ts +4 -0
  43. package/dist/components/HomePage/index.d.ts +3 -0
  44. package/dist/components/LabelWithIcon.d.ts +14 -0
  45. package/dist/components/NotFoundPage.d.ts +1 -0
  46. package/dist/components/ReferenceSelectionInner.d.ts +58 -0
  47. package/dist/components/ReferenceWidget.d.ts +28 -0
  48. package/dist/components/VirtualTable/VirtualTable.d.ts +11 -0
  49. package/dist/components/VirtualTable/VirtualTableCell.d.ts +14 -0
  50. package/dist/components/VirtualTable/VirtualTableHeader.d.ts +27 -0
  51. package/dist/components/VirtualTable/VirtualTableHeaderRow.d.ts +2 -0
  52. package/dist/components/VirtualTable/VirtualTableProps.d.ts +215 -0
  53. package/dist/components/VirtualTable/VirtualTableRow.d.ts +3 -0
  54. package/dist/components/VirtualTable/common.d.ts +2 -0
  55. package/dist/components/VirtualTable/fields/VirtualTableDateField.d.ts +11 -0
  56. package/dist/components/VirtualTable/fields/VirtualTableInput.d.ts +8 -0
  57. package/dist/components/VirtualTable/fields/VirtualTableNumberInput.d.ts +8 -0
  58. package/dist/components/VirtualTable/fields/VirtualTableSelect.d.ts +15 -0
  59. package/dist/components/VirtualTable/fields/VirtualTableSwitch.d.ts +7 -0
  60. package/dist/components/VirtualTable/index.d.ts +2 -0
  61. package/dist/components/VirtualTable/types.d.ts +34 -0
  62. package/dist/components/index.d.ts +20 -0
  63. package/dist/contexts/AuthControllerContext.d.ts +3 -0
  64. package/dist/contexts/DataSourceContext.d.ts +3 -0
  65. package/dist/contexts/DialogsProvider.d.ts +4 -0
  66. package/dist/contexts/ModeController.d.ts +4 -0
  67. package/dist/contexts/NavigationContext.d.ts +3 -0
  68. package/dist/contexts/SideDialogsControllerContext.d.ts +3 -0
  69. package/dist/contexts/SideEntityControllerContext.d.ts +3 -0
  70. package/dist/contexts/SnackbarProvider.d.ts +2 -0
  71. package/dist/contexts/StorageSourceContext.d.ts +3 -0
  72. package/dist/contexts/UserConfigurationPersistenceContext.d.ts +3 -0
  73. package/dist/contexts/index.d.ts +3 -0
  74. package/dist/core/Drawer.d.ts +23 -0
  75. package/dist/core/EntitySidePanel.d.ts +10 -0
  76. package/dist/core/FireCMS.d.ts +14 -0
  77. package/dist/core/NavigationRoutes.d.ts +21 -0
  78. package/dist/core/Scaffold.d.ts +52 -0
  79. package/dist/core/SideDialogs.d.ts +23 -0
  80. package/dist/core/field_configs.d.ts +7 -0
  81. package/dist/core/index.d.ts +10 -0
  82. package/dist/core/useBuildLocalConfigurationPersistence.d.ts +2 -0
  83. package/dist/core/useBuildModeController.d.ts +6 -0
  84. package/dist/form/EntityForm.d.ts +75 -0
  85. package/dist/form/PropertyFieldBinding.d.ts +30 -0
  86. package/dist/form/components/CustomIdField.d.ts +9 -0
  87. package/dist/form/components/ErrorFocus.d.ts +4 -0
  88. package/dist/form/components/FieldHelperText.d.ts +12 -0
  89. package/dist/form/components/FormikArrayContainer.d.ts +18 -0
  90. package/dist/form/components/StorageItemPreview.d.ts +13 -0
  91. package/dist/form/components/StorageUploadProgress.d.ts +10 -0
  92. package/dist/form/components/SubmitListener.d.ts +1 -0
  93. package/dist/form/components/SwitchControl.d.ts +8 -0
  94. package/dist/form/components/index.d.ts +3 -0
  95. package/dist/form/field_bindings/ArrayCustomShapedFieldBinding.d.ts +9 -0
  96. package/dist/form/field_bindings/ArrayOfReferencesFieldBinding.d.ts +11 -0
  97. package/dist/form/field_bindings/BlockFieldBinding.d.ts +10 -0
  98. package/dist/form/field_bindings/DateTimeFieldBinding.d.ts +11 -0
  99. package/dist/form/field_bindings/KeyValueFieldBinding.d.ts +7 -0
  100. package/dist/form/field_bindings/MapFieldBinding.d.ts +9 -0
  101. package/dist/form/field_bindings/MarkdownFieldBinding.d.ts +9 -0
  102. package/dist/form/field_bindings/MultiSelectBinding.d.ts +9 -0
  103. package/dist/form/field_bindings/ReadOnlyFieldBinding.d.ts +10 -0
  104. package/dist/form/field_bindings/ReferenceFieldBinding.d.ts +9 -0
  105. package/dist/form/field_bindings/RepeatFieldBinding.d.ts +10 -0
  106. package/dist/form/field_bindings/SelectFieldBinding.d.ts +12 -0
  107. package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +28 -0
  108. package/dist/form/field_bindings/SwitchFieldBinding.d.ts +12 -0
  109. package/dist/form/field_bindings/TextFieldBinding.d.ts +12 -0
  110. package/dist/form/index.d.ts +20 -0
  111. package/dist/form/useClearRestoreValue.d.ts +13 -0
  112. package/dist/form/validation.d.ts +25 -0
  113. package/dist/hooks/data/delete.d.ts +37 -0
  114. package/dist/hooks/data/save.d.ts +42 -0
  115. package/dist/hooks/data/useCollectionFetch.d.ts +50 -0
  116. package/dist/hooks/data/useDataOrder.d.ts +12 -0
  117. package/dist/hooks/data/useDataSource.d.ts +6 -0
  118. package/dist/hooks/data/useEntityFetch.d.ts +28 -0
  119. package/dist/hooks/index.d.ts +19 -0
  120. package/dist/hooks/useAuthController.d.ts +11 -0
  121. package/dist/hooks/useBrowserTitleAndIcon.d.ts +6 -0
  122. package/dist/hooks/useClipboard.d.ts +57 -0
  123. package/dist/hooks/useDialogsController.d.ts +11 -0
  124. package/dist/hooks/useFireCMSContext.d.ts +12 -0
  125. package/dist/hooks/useLargeLayout.d.ts +1 -0
  126. package/dist/hooks/useModeController.d.ts +20 -0
  127. package/dist/hooks/useNavigationController.d.ts +9 -0
  128. package/dist/hooks/useReferenceDialog.d.ts +18 -0
  129. package/dist/hooks/useResolvedNavigationFrom.d.ts +72 -0
  130. package/dist/hooks/useSideDialogsController.d.ts +18 -0
  131. package/dist/hooks/useSideEntityController.d.ts +12 -0
  132. package/dist/hooks/useSnackbarController.d.ts +41 -0
  133. package/dist/hooks/useStorageSource.d.ts +6 -0
  134. package/dist/hooks/useUserConfigurationPersistence.d.ts +8 -0
  135. package/dist/index.d.ts +8 -0
  136. package/dist/index.es.js +12415 -25618
  137. package/dist/index.es.js.map +1 -1
  138. package/dist/index.umd.js +5 -1027
  139. package/dist/index.umd.js.map +1 -1
  140. package/dist/internal/EntityView.d.ts +22 -0
  141. package/dist/internal/common.d.ts +3 -0
  142. package/dist/internal/useBuildDataSource.d.ts +22 -0
  143. package/dist/internal/useBuildNavigationController.d.ts +14 -0
  144. package/dist/internal/useBuildSideDialogsController.d.ts +2 -0
  145. package/dist/internal/useBuildSideEntityController.d.ts +4 -0
  146. package/dist/internal/useLocaleConfig.d.ts +1 -0
  147. package/dist/internal/useRestoreScroll.d.ts +6 -0
  148. package/dist/internal/useUnsavedChangesDialog.d.ts +14 -0
  149. package/dist/preview/PropertyPreview.d.ts +7 -0
  150. package/dist/preview/PropertyPreviewProps.d.ts +43 -0
  151. package/dist/preview/components/ArrayEnumPreview.d.ts +11 -0
  152. package/dist/preview/components/AsyncPreviewComponent.d.ts +11 -0
  153. package/dist/preview/components/BooleanPreview.d.ts +7 -0
  154. package/dist/preview/components/DatePreview.d.ts +7 -0
  155. package/dist/preview/components/EmptyValue.d.ts +4 -0
  156. package/dist/preview/components/EnumValuesChip.d.ts +13 -0
  157. package/dist/preview/components/ImagePreview.d.ts +12 -0
  158. package/dist/preview/components/ReferencePreview.d.ts +22 -0
  159. package/dist/preview/components/StorageThumbnail.d.ts +13 -0
  160. package/dist/preview/components/UrlComponentPreview.d.ts +12 -0
  161. package/dist/preview/index.d.ts +23 -0
  162. package/dist/preview/property_previews/ArrayOfMapsPreview.d.ts +5 -0
  163. package/dist/preview/property_previews/ArrayOfReferencesPreview.d.ts +5 -0
  164. package/dist/preview/property_previews/ArrayOfStorageComponentsPreview.d.ts +5 -0
  165. package/dist/preview/property_previews/ArrayOfStringsPreview.d.ts +5 -0
  166. package/dist/preview/property_previews/ArrayOneOfPreview.d.ts +5 -0
  167. package/dist/preview/property_previews/ArrayPropertyEnumPreview.d.ts +5 -0
  168. package/dist/preview/property_previews/ArrayPropertyPreview.d.ts +5 -0
  169. package/dist/preview/property_previews/MapPropertyPreview.d.ts +8 -0
  170. package/dist/preview/property_previews/NumberPropertyPreview.d.ts +6 -0
  171. package/dist/preview/property_previews/SkeletonPropertyComponent.d.ts +14 -0
  172. package/dist/preview/property_previews/StringPropertyPreview.d.ts +6 -0
  173. package/dist/preview/util.d.ts +7 -0
  174. package/dist/types/analytics.d.ts +1 -0
  175. package/dist/types/appcheck.d.ts +26 -0
  176. package/dist/types/auth.d.ts +40 -0
  177. package/dist/types/collections.d.ts +451 -0
  178. package/dist/types/datasource.d.ts +262 -0
  179. package/dist/types/dialogs_controller.d.ts +32 -0
  180. package/dist/types/entities.d.ts +57 -0
  181. package/dist/types/entity_actions.d.ts +35 -0
  182. package/dist/types/entity_callbacks.d.ts +171 -0
  183. package/dist/types/entity_link_builder.d.ts +7 -0
  184. package/dist/types/export_import.d.ts +21 -0
  185. package/dist/types/fields.d.ts +181 -0
  186. package/dist/types/firecms.d.ts +151 -0
  187. package/dist/types/firecms_context.d.ts +110 -0
  188. package/dist/types/index.d.ts +26 -0
  189. package/dist/types/local_config_persistence.d.ts +21 -0
  190. package/dist/types/locales.d.ts +4 -0
  191. package/dist/types/modify_collections.d.ts +5 -0
  192. package/dist/types/navigation.d.ts +178 -0
  193. package/dist/types/permissions.d.ts +63 -0
  194. package/dist/types/plugins.d.ts +179 -0
  195. package/dist/types/properties.d.ts +681 -0
  196. package/dist/types/property_config.d.ts +42 -0
  197. package/dist/types/resolved_entities.d.ts +98 -0
  198. package/dist/types/side_dialogs_controller.d.ts +57 -0
  199. package/dist/types/side_entity_controller.d.ts +83 -0
  200. package/dist/types/storage.d.ts +82 -0
  201. package/dist/types/user.d.ts +36 -0
  202. package/dist/util/arrays.d.ts +1 -0
  203. package/dist/util/builders.d.ts +64 -0
  204. package/dist/util/chip_utils.d.ts +3 -0
  205. package/dist/util/collections.d.ts +3 -0
  206. package/dist/util/common.d.ts +2 -0
  207. package/dist/util/dates.d.ts +1 -0
  208. package/dist/util/entities.d.ts +28 -0
  209. package/dist/util/enums.d.ts +7 -0
  210. package/dist/util/flatten_object.d.ts +3 -0
  211. package/dist/util/hash.d.ts +1 -0
  212. package/dist/util/icons.d.ts +4 -0
  213. package/dist/util/index.d.ts +20 -0
  214. package/dist/util/join_collections.d.ts +9 -0
  215. package/dist/util/make_properties_editable.d.ts +3 -0
  216. package/dist/util/navigation_from_path.d.ts +24 -0
  217. package/dist/util/navigation_utils.d.ts +20 -0
  218. package/dist/util/objects.d.ts +10 -0
  219. package/dist/util/os.d.ts +2 -0
  220. package/dist/util/parent_references_from_path.d.ts +6 -0
  221. package/dist/util/paths.d.ts +14 -0
  222. package/dist/util/permissions.d.ts +5 -0
  223. package/dist/util/plurals.d.ts +18 -0
  224. package/dist/util/property_utils.d.ts +23 -0
  225. package/dist/util/references.d.ts +2 -0
  226. package/dist/util/regexp.d.ts +7 -0
  227. package/dist/util/resolutions.d.ts +64 -0
  228. package/dist/util/storage.d.ts +3 -0
  229. package/dist/util/strings.d.ts +6 -0
  230. package/dist/util/useDebounce.d.ts +1 -0
  231. package/dist/util/useStorageUploadController.d.ts +36 -0
  232. package/dist/util/useTraceUpdate.d.ts +1 -0
  233. package/package.json +114 -142
  234. package/src/components/ArrayContainer.tsx +369 -0
  235. package/src/components/CircularProgressCenter.tsx +26 -0
  236. package/src/components/DeleteConfirmationDialog.tsx +47 -0
  237. package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +520 -0
  238. package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +150 -0
  239. package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +159 -0
  240. package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +313 -0
  241. package/src/components/EntityCollectionTable/filters/BooleanFilterField.tsx +49 -0
  242. package/src/components/EntityCollectionTable/filters/DateTimeFilterField.tsx +109 -0
  243. package/src/components/EntityCollectionTable/filters/ReferenceFilterField.tsx +187 -0
  244. package/src/components/EntityCollectionTable/filters/StringNumberFilterField.tsx +159 -0
  245. package/src/components/EntityCollectionTable/index.tsx +16 -0
  246. package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +113 -0
  247. package/src/components/EntityCollectionTable/internal/DeleteEntityDialog.tsx +207 -0
  248. package/src/components/EntityCollectionTable/internal/EntityCollectionRowActions.tsx +174 -0
  249. package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +264 -0
  250. package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +70 -0
  251. package/src/components/EntityCollectionTable/internal/PropertyTableCell.tsx +460 -0
  252. package/src/components/EntityCollectionTable/internal/common.tsx +70 -0
  253. package/src/components/EntityCollectionTable/internal/default_entity_actions.tsx +122 -0
  254. package/src/components/EntityCollectionTable/internal/popup_field/ElementResizeListener.tsx +59 -0
  255. package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +401 -0
  256. package/src/components/EntityCollectionTable/internal/popup_field/useDraggable.tsx +97 -0
  257. package/src/components/EntityCollectionTable/internal/popup_field/useWindowSize.tsx +20 -0
  258. package/src/components/EntityCollectionTable/types.tsx +44 -0
  259. package/src/components/EntityCollectionTable/useDebouncedData.ts +49 -0
  260. package/src/components/EntityCollectionTable/useEntityCollectionTableController.tsx +213 -0
  261. package/src/components/EntityCollectionView/EntityCollectionView.tsx +815 -0
  262. package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +131 -0
  263. package/src/components/EntityCollectionView/useColumnsIds.tsx +100 -0
  264. package/src/components/EntityPreview.tsx +83 -0
  265. package/src/components/ErrorBoundary.tsx +40 -0
  266. package/src/components/ErrorTooltip.tsx +11 -0
  267. package/src/components/ErrorView.tsx +52 -0
  268. package/src/components/FieldConfigBadge.tsx +17 -0
  269. package/src/components/FireCMSAppBar.tsx +157 -0
  270. package/src/components/FireCMSLogo.tsx +73 -0
  271. package/src/components/HomePage/DefaultHomePage.tsx +209 -0
  272. package/src/components/HomePage/FavouritesView.tsx +64 -0
  273. package/src/components/HomePage/NavigationCollectionCard.tsx +145 -0
  274. package/src/components/HomePage/NavigationGroup.tsx +39 -0
  275. package/src/components/HomePage/index.tsx +3 -0
  276. package/src/components/LabelWithIcon.tsx +33 -0
  277. package/src/components/NotFoundPage.tsx +25 -0
  278. package/src/components/ReferenceSelectionInner.tsx +364 -0
  279. package/src/components/ReferenceWidget.tsx +145 -0
  280. package/src/components/VirtualTable/VirtualTable.tsx +402 -0
  281. package/src/components/VirtualTable/VirtualTableCell.tsx +36 -0
  282. package/src/components/VirtualTable/VirtualTableHeader.tsx +260 -0
  283. package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +131 -0
  284. package/src/components/VirtualTable/VirtualTableProps.tsx +270 -0
  285. package/src/components/VirtualTable/VirtualTableRow.tsx +54 -0
  286. package/src/components/VirtualTable/common.tsx +18 -0
  287. package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +37 -0
  288. package/src/components/VirtualTable/fields/VirtualTableInput.tsx +91 -0
  289. package/src/components/VirtualTable/fields/VirtualTableNumberInput.tsx +82 -0
  290. package/src/components/VirtualTable/fields/VirtualTableSelect.tsx +130 -0
  291. package/src/components/VirtualTable/fields/VirtualTableSwitch.tsx +32 -0
  292. package/src/components/VirtualTable/index.tsx +2 -0
  293. package/src/components/VirtualTable/types.tsx +44 -0
  294. package/src/components/index.tsx +30 -0
  295. package/src/contexts/AuthControllerContext.tsx +4 -0
  296. package/src/contexts/DataSourceContext.tsx +4 -0
  297. package/src/contexts/DialogsProvider.tsx +52 -0
  298. package/src/contexts/ModeController.tsx +13 -0
  299. package/src/contexts/NavigationContext.tsx +4 -0
  300. package/src/contexts/SideDialogsControllerContext.tsx +4 -0
  301. package/src/contexts/SideEntityControllerContext.tsx +4 -0
  302. package/src/contexts/SnackbarProvider.tsx +12 -0
  303. package/src/contexts/StorageSourceContext.tsx +4 -0
  304. package/src/contexts/UserConfigurationPersistenceContext.tsx +4 -0
  305. package/src/contexts/index.ts +3 -0
  306. package/src/core/Drawer.tsx +161 -0
  307. package/src/core/EntitySidePanel.tsx +90 -0
  308. package/src/core/FireCMS.tsx +184 -0
  309. package/src/core/NavigationRoutes.tsx +118 -0
  310. package/src/core/Scaffold.tsx +278 -0
  311. package/src/core/SideDialogs.tsx +156 -0
  312. package/src/core/field_configs.tsx +400 -0
  313. package/src/core/index.tsx +14 -0
  314. package/src/core/useBuildLocalConfigurationPersistence.tsx +67 -0
  315. package/src/core/useBuildModeController.tsx +60 -0
  316. package/src/form/EntityForm.tsx +647 -0
  317. package/src/form/PropertyFieldBinding.tsx +311 -0
  318. package/src/form/components/CustomIdField.tsx +124 -0
  319. package/src/form/components/ErrorFocus.tsx +51 -0
  320. package/src/form/components/FieldHelperText.tsx +58 -0
  321. package/src/form/components/FormikArrayContainer.tsx +44 -0
  322. package/src/form/components/StorageItemPreview.tsx +66 -0
  323. package/src/form/components/StorageUploadProgress.tsx +104 -0
  324. package/src/form/components/SubmitListener.tsx +32 -0
  325. package/src/form/components/SwitchControl.tsx +39 -0
  326. package/src/form/components/index.tsx +3 -0
  327. package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +88 -0
  328. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +153 -0
  329. package/src/form/field_bindings/BlockFieldBinding.tsx +245 -0
  330. package/src/form/field_bindings/DateTimeFieldBinding.tsx +66 -0
  331. package/src/form/field_bindings/KeyValueFieldBinding.tsx +560 -0
  332. package/src/form/field_bindings/MapFieldBinding.tsx +142 -0
  333. package/src/form/field_bindings/MarkdownFieldBinding.tsx +696 -0
  334. package/src/form/field_bindings/MultiSelectBinding.tsx +115 -0
  335. package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +70 -0
  336. package/src/form/field_bindings/ReferenceFieldBinding.tsx +122 -0
  337. package/src/form/field_bindings/RepeatFieldBinding.tsx +103 -0
  338. package/src/form/field_bindings/SelectFieldBinding.tsx +100 -0
  339. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +438 -0
  340. package/src/form/field_bindings/SwitchFieldBinding.tsx +61 -0
  341. package/src/form/field_bindings/TextFieldBinding.tsx +108 -0
  342. package/src/form/index.tsx +42 -0
  343. package/src/form/useClearRestoreValue.tsx +35 -0
  344. package/src/form/validation.ts +409 -0
  345. package/src/hooks/data/delete.ts +101 -0
  346. package/src/hooks/data/save.ts +165 -0
  347. package/src/hooks/data/useCollectionFetch.tsx +162 -0
  348. package/src/hooks/data/useDataOrder.ts +26 -0
  349. package/src/hooks/data/useDataSource.tsx +9 -0
  350. package/src/hooks/data/useEntityFetch.tsx +129 -0
  351. package/src/hooks/index.tsx +23 -0
  352. package/src/hooks/useAuthController.tsx +14 -0
  353. package/src/hooks/useBrowserTitleAndIcon.tsx +25 -0
  354. package/src/hooks/useClipboard.tsx +158 -0
  355. package/src/hooks/useDialogsController.tsx +14 -0
  356. package/src/hooks/useFireCMSContext.tsx +50 -0
  357. package/src/hooks/useLargeLayout.tsx +34 -0
  358. package/src/hooks/useModeController.tsx +24 -0
  359. package/src/hooks/useNavigationController.tsx +12 -0
  360. package/src/hooks/useReferenceDialog.tsx +56 -0
  361. package/src/hooks/useResolvedNavigationFrom.tsx +160 -0
  362. package/src/hooks/useSideDialogsController.tsx +21 -0
  363. package/src/hooks/useSideEntityController.tsx +15 -0
  364. package/src/hooks/useSnackbarController.tsx +76 -0
  365. package/src/hooks/useStorageSource.tsx +9 -0
  366. package/src/hooks/useUserConfigurationPersistence.tsx +11 -0
  367. package/src/index.ts +8 -0
  368. package/src/internal/EntityView.tsx +576 -0
  369. package/src/internal/common.tsx +5 -0
  370. package/src/internal/useBuildDataSource.ts +360 -0
  371. package/src/internal/useBuildNavigationController.tsx +371 -0
  372. package/src/internal/useBuildSideDialogsController.tsx +125 -0
  373. package/src/internal/useBuildSideEntityController.tsx +160 -0
  374. package/src/internal/useLocaleConfig.tsx +18 -0
  375. package/src/internal/useRestoreScroll.tsx +48 -0
  376. package/src/internal/useUnsavedChangesDialog.tsx +106 -0
  377. package/src/preview/PropertyPreview.tsx +222 -0
  378. package/src/preview/PropertyPreviewProps.tsx +59 -0
  379. package/src/preview/components/ArrayEnumPreview.tsx +39 -0
  380. package/src/preview/components/AsyncPreviewComponent.tsx +47 -0
  381. package/src/preview/components/BooleanPreview.tsx +11 -0
  382. package/src/preview/components/DatePreview.tsx +27 -0
  383. package/src/preview/components/EmptyValue.tsx +10 -0
  384. package/src/preview/components/EnumValuesChip.tsx +38 -0
  385. package/src/preview/components/ImagePreview.tsx +106 -0
  386. package/src/preview/components/ReferencePreview.tsx +249 -0
  387. package/src/preview/components/StorageThumbnail.tsx +84 -0
  388. package/src/preview/components/UrlComponentPreview.tsx +79 -0
  389. package/src/preview/index.ts +27 -0
  390. package/src/preview/property_previews/ArrayOfMapsPreview.tsx +82 -0
  391. package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +52 -0
  392. package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +54 -0
  393. package/src/preview/property_previews/ArrayOfStringsPreview.tsx +55 -0
  394. package/src/preview/property_previews/ArrayOneOfPreview.tsx +67 -0
  395. package/src/preview/property_previews/ArrayPropertyEnumPreview.tsx +28 -0
  396. package/src/preview/property_previews/ArrayPropertyPreview.tsx +68 -0
  397. package/src/preview/property_previews/MapPropertyPreview.tsx +144 -0
  398. package/src/preview/property_previews/NumberPropertyPreview.tsx +27 -0
  399. package/src/preview/property_previews/SkeletonPropertyComponent.tsx +283 -0
  400. package/src/preview/property_previews/StringPropertyPreview.tsx +60 -0
  401. package/src/preview/util.ts +31 -0
  402. package/src/types/analytics.ts +34 -0
  403. package/src/types/appcheck.ts +29 -0
  404. package/src/types/auth.tsx +49 -0
  405. package/src/types/collections.ts +530 -0
  406. package/src/types/datasource.ts +389 -0
  407. package/src/types/dialogs_controller.tsx +33 -0
  408. package/src/types/entities.ts +76 -0
  409. package/src/types/entity_actions.tsx +39 -0
  410. package/src/types/entity_callbacks.ts +209 -0
  411. package/src/types/entity_link_builder.ts +8 -0
  412. package/src/types/export_import.ts +26 -0
  413. package/src/types/fields.tsx +220 -0
  414. package/src/types/firecms.tsx +175 -0
  415. package/src/types/firecms_context.tsx +128 -0
  416. package/src/types/index.ts +26 -0
  417. package/src/types/local_config_persistence.tsx +23 -0
  418. package/src/types/locales.ts +81 -0
  419. package/src/types/modify_collections.tsx +6 -0
  420. package/src/types/navigation.ts +214 -0
  421. package/src/types/permissions.ts +76 -0
  422. package/src/types/plugins.tsx +217 -0
  423. package/src/types/properties.ts +851 -0
  424. package/src/types/property_config.tsx +72 -0
  425. package/src/types/resolved_entities.ts +148 -0
  426. package/src/types/side_dialogs_controller.tsx +68 -0
  427. package/src/types/side_entity_controller.tsx +96 -0
  428. package/src/types/storage.ts +96 -0
  429. package/src/types/user.ts +37 -0
  430. package/src/util/arrays.ts +3 -0
  431. package/src/util/builders.ts +139 -0
  432. package/src/util/chip_utils.ts +13 -0
  433. package/src/util/collections.ts +50 -0
  434. package/src/util/common.tsx +2 -0
  435. package/src/util/dates.ts +1 -0
  436. package/src/util/entities.ts +196 -0
  437. package/src/util/enums.ts +57 -0
  438. package/src/util/flatten_object.ts +45 -0
  439. package/src/util/hash.ts +11 -0
  440. package/src/util/icons.tsx +45 -0
  441. package/src/util/index.ts +20 -0
  442. package/src/util/join_collections.ts +172 -0
  443. package/src/util/make_properties_editable.ts +29 -0
  444. package/src/util/navigation_from_path.ts +107 -0
  445. package/src/util/navigation_utils.ts +111 -0
  446. package/src/util/objects.ts +168 -0
  447. package/src/util/os.ts +13 -0
  448. package/src/util/parent_references_from_path.ts +56 -0
  449. package/src/util/paths.ts +27 -0
  450. package/src/util/permissions.ts +80 -0
  451. package/src/util/plurals.ts +190 -0
  452. package/src/util/property_utils.tsx +130 -0
  453. package/src/util/references.ts +20 -0
  454. package/src/util/regexp.ts +32 -0
  455. package/src/util/resolutions.ts +399 -0
  456. package/src/util/storage.ts +92 -0
  457. package/src/util/strings.ts +62 -0
  458. package/src/util/useDebounce.ts +25 -0
  459. package/src/util/useStorageUploadController.tsx +243 -0
  460. package/src/util/useTraceUpdate.tsx +23 -0
@@ -0,0 +1,50 @@
1
+ import {
2
+ DefaultSelectedViewBuilder,
3
+ DefaultSelectedViewParams,
4
+ PropertiesOrBuilders,
5
+ PropertyOrBuilder
6
+ } from "../types";
7
+ import { isPropertyBuilder } from "./entities";
8
+
9
+ export function sortProperties<M extends Record<string, any>>(properties: PropertiesOrBuilders<M>, propertiesOrder?: (keyof M)[]): PropertiesOrBuilders<M> {
10
+ try {
11
+ const propertiesKeys = Object.keys(properties);
12
+ const allPropertiesOrder = propertiesOrder ?? propertiesKeys;
13
+ return allPropertiesOrder
14
+ .map((key) => {
15
+ if (properties[key as keyof M]) {
16
+ const property = properties[key] as PropertyOrBuilder;
17
+ if (!isPropertyBuilder(property) && property?.dataType === "map" && property.properties) {
18
+ return ({
19
+ [key]: {
20
+ ...property,
21
+ properties: sortProperties(property.properties, property.propertiesOrder)
22
+ }
23
+ });
24
+ } else {
25
+ return ({ [key]: property });
26
+ }
27
+ } else {
28
+ return undefined;
29
+ }
30
+ })
31
+ .filter((a) => a !== undefined)
32
+ .reduce((a: any, b: any) => ({ ...a, ...b }), {}) as PropertiesOrBuilders<M>;
33
+ } catch (e) {
34
+ console.error("Error sorting properties", e);
35
+ return properties;
36
+ }
37
+ }
38
+
39
+ export function resolveDefaultSelectedView(
40
+ defaultSelectedView: string | DefaultSelectedViewBuilder | undefined,
41
+ params: DefaultSelectedViewParams
42
+ ) {
43
+ if (!defaultSelectedView) {
44
+ return undefined;
45
+ } else if (typeof defaultSelectedView === "string") {
46
+ return defaultSelectedView;
47
+ } else {
48
+ return defaultSelectedView(params);
49
+ }
50
+ }
@@ -0,0 +1,2 @@
1
+ export const DEFAULT_ONE_OF_TYPE = "type"
2
+ export const DEFAULT_ONE_OF_VALUE = "value"
@@ -0,0 +1 @@
1
+ export const defaultDateFormat = "MMMM dd, yyyy, HH:mm:ss";
@@ -0,0 +1,196 @@
1
+ import {
2
+ CMSType,
3
+ DataType,
4
+ Entity,
5
+ EntityReference,
6
+ EntityStatus,
7
+ EntityValues,
8
+ Properties,
9
+ PropertiesOrBuilders,
10
+ Property,
11
+ PropertyBuilder,
12
+ PropertyOrBuilder,
13
+ ResolvedProperties,
14
+ ResolvedProperty
15
+ } from "../types";
16
+ import { DEFAULT_ONE_OF_TYPE, DEFAULT_ONE_OF_VALUE } from "./common";
17
+
18
+ export function isReadOnly(property: Property | ResolvedProperty): boolean {
19
+ if (property.readOnly)
20
+ return true;
21
+ if (property.dataType === "date") {
22
+ if (property.autoValue)
23
+ return true;
24
+ }
25
+ if (property.dataType === "reference") {
26
+ return !property.path;
27
+ }
28
+ return false;
29
+ }
30
+
31
+ export function isHidden(property: Property | ResolvedProperty): boolean {
32
+ return typeof property.disabled === "object" && Boolean(property.disabled.hidden);
33
+ }
34
+
35
+ export function isPropertyBuilder<T extends CMSType, M extends Record<string, any>>(propertyOrBuilder?: PropertyOrBuilder<T, M> | Property<T> | ResolvedProperty<T>): propertyOrBuilder is PropertyBuilder<T, M> {
36
+ return typeof propertyOrBuilder === "function";
37
+ }
38
+
39
+ export function getDefaultValuesFor<M extends Record<string, any>>(properties: PropertiesOrBuilders<M> | ResolvedProperties<M>): Partial<EntityValues<M>> {
40
+ if (!properties) return {};
41
+ return Object.entries(properties)
42
+ .map(([key, property]) => {
43
+ const value = getDefaultValueFor(property as PropertyOrBuilder);
44
+ return value === undefined ? {} : { [key]: value };
45
+ })
46
+ .reduce((a, b) => ({ ...a, ...b }), {}) as EntityValues<M>;
47
+ }
48
+
49
+ export function getDefaultValueFor(property: PropertyOrBuilder) {
50
+ if (isPropertyBuilder(property)) return undefined;
51
+ if (property.dataType === "map" && property.properties) {
52
+ const defaultValuesFor = getDefaultValuesFor(property.properties as Properties);
53
+ if (Object.keys(defaultValuesFor).length === 0) return undefined;
54
+ return defaultValuesFor;
55
+ } else if (property.defaultValue) {
56
+ return property.defaultValue;
57
+ } else {
58
+ return getDefaultValueForDataType(property.dataType);
59
+ }
60
+ }
61
+
62
+ export function getDefaultValueForDataType(dataType: DataType) {
63
+ if (dataType === "string") {
64
+ return null;
65
+ } else if (dataType === "number") {
66
+ return null;
67
+ } else if (dataType === "boolean") {
68
+ return false;
69
+ } else if (dataType === "date") {
70
+ return null;
71
+ } else if (dataType === "array") {
72
+ return [];
73
+ } else if (dataType === "map") {
74
+ return {};
75
+ } else {
76
+ return null;
77
+ }
78
+ }
79
+
80
+ /**
81
+ * Update the automatic values in an entity before save
82
+ * @group Datasource
83
+ */
84
+ export function updateDateAutoValues<M extends Record<string, any>>({
85
+ inputValues,
86
+ properties,
87
+ status,
88
+ timestampNowValue,
89
+ setDateToMidnight
90
+ }:
91
+ {
92
+ inputValues: Partial<EntityValues<M>>,
93
+ properties: ResolvedProperties<M>,
94
+ status: EntityStatus,
95
+ timestampNowValue: any,
96
+ setDateToMidnight: (input?: any) => any | undefined
97
+ }): EntityValues<M> {
98
+ return traverseValuesProperties(
99
+ inputValues,
100
+ properties,
101
+ (inputValue, property) => {
102
+ if (property.dataType === "date") {
103
+ let resultDate;
104
+ if (status === "existing" && property.autoValue === "on_update") {
105
+ resultDate = timestampNowValue;
106
+ } else if ((status === "new" || status === "copy") &&
107
+ (property.autoValue === "on_update" || property.autoValue === "on_create")) {
108
+ resultDate = timestampNowValue;
109
+ } else {
110
+ resultDate = inputValue;
111
+ }
112
+ if (property.mode === "date")
113
+ resultDate = setDateToMidnight(resultDate);
114
+ return resultDate;
115
+ } else {
116
+ return inputValue;
117
+ }
118
+ }
119
+ ) ?? {} as M;
120
+ }
121
+
122
+ /**
123
+ * Add missing required fields, expected in the collection, to the values of an entity
124
+ * @param values
125
+ * @param properties
126
+ * @group Datasource
127
+ */
128
+ export function sanitizeData<M extends Record<string, any>>
129
+ (
130
+ values: EntityValues<M>,
131
+ properties: ResolvedProperties<M>
132
+ ) {
133
+ const result: any = values;
134
+ Object.entries(properties)
135
+ .forEach(([key, property]) => {
136
+ if (values && values[key] !== undefined) result[key] = values[key];
137
+ else if ((property as Property).validation?.required) result[key] = null;
138
+ });
139
+ return result;
140
+ }
141
+
142
+ export function getReferenceFrom<M extends Record<string, any>>(entity: Entity<M>): EntityReference<M> {
143
+ return new EntityReference(entity.id, entity.path);
144
+ }
145
+
146
+ export function traverseValuesProperties<M extends Record<string, any>>(
147
+ inputValues: Partial<EntityValues<M>>,
148
+ properties: ResolvedProperties<M>,
149
+ operation: (value: any, property: Property) => any
150
+ ): EntityValues<M> | undefined {
151
+ const updatedValues = Object.entries(properties)
152
+ .map(([key, property]) => {
153
+ const inputValue = inputValues && (inputValues)[key];
154
+ const updatedValue = traverseValueProperty(inputValue, property as Property, operation);
155
+ if (updatedValue === undefined) return undefined;
156
+ return ({ [key]: updatedValue });
157
+ })
158
+ .reduce((a, b) => ({ ...a, ...b }), {}) as EntityValues<M>;
159
+ const result = { ...inputValues, ...updatedValues };
160
+ if (Object.keys(result).length === 0) return undefined;
161
+ return result;
162
+ }
163
+
164
+ export function traverseValueProperty(inputValue: any,
165
+ property: Property,
166
+ operation: (value: any, property: Property) => any): any {
167
+
168
+ let value;
169
+ if (property.dataType === "map" && property.properties) {
170
+ value = traverseValuesProperties(inputValue, property.properties as ResolvedProperties, operation);
171
+ } else if (property.dataType === "array") {
172
+ if (property.of && Array.isArray(inputValue)) {
173
+ value = inputValue.map((e) => traverseValueProperty(e, property.of as Property, operation));
174
+ } else if (property.oneOf && Array.isArray(inputValue)) {
175
+ const typeField = property.oneOf?.typeField ?? DEFAULT_ONE_OF_TYPE;
176
+ const valueField = property.oneOf?.valueField ?? DEFAULT_ONE_OF_VALUE;
177
+ value = inputValue.map((e) => {
178
+ if (e === null) return null;
179
+ if (typeof e !== "object") return e;
180
+ const type = e[typeField];
181
+ const childProperty = property.oneOf?.properties[type];
182
+ if (!type || !childProperty) return e;
183
+ return {
184
+ [typeField]: type,
185
+ [valueField]: traverseValueProperty(e[valueField], childProperty, operation)
186
+ };
187
+ });
188
+ } else {
189
+ value = inputValue;
190
+ }
191
+ } else {
192
+ value = operation(inputValue, property);
193
+ }
194
+
195
+ return value;
196
+ }
@@ -0,0 +1,57 @@
1
+ import { EnumValueConfig, EnumValues } from "../types";
2
+ import { CHIP_COLORS, ChipColorScheme } from "@firecms/ui";
3
+ import { getColorSchemeForSeed } from "./chip_utils";
4
+
5
+ export function enumToObjectEntries(enumValues: EnumValues): EnumValueConfig[] {
6
+ if (Array.isArray(enumValues)) {
7
+ return enumValues;
8
+ } else {
9
+ return Object.entries(enumValues).map(([id, value]) => {
10
+ if (typeof value === "string") {
11
+ return {
12
+ id,
13
+ label: value
14
+ }
15
+ } else {
16
+ return {
17
+ ...value,
18
+ id
19
+ }
20
+ }
21
+ });
22
+ }
23
+ }
24
+
25
+ export function getLabelOrConfigFrom(enumValues: EnumValueConfig[], key?: string | number): EnumValueConfig | undefined {
26
+ if (!key) return undefined;
27
+ return enumValues.find((entry) => String(entry.id) === String(key));
28
+ }
29
+
30
+ export function getColorScheme(enumValues: EnumValueConfig[], key: string | number): ChipColorScheme | undefined {
31
+ const labelOrConfig = getLabelOrConfigFrom(enumValues, key);
32
+ if (!labelOrConfig?.color)
33
+ return getColorSchemeForSeed(key.toString());
34
+ if (typeof labelOrConfig === "object" && "color" in labelOrConfig) {
35
+ if (typeof labelOrConfig.color === "string")
36
+ return CHIP_COLORS[labelOrConfig.color];
37
+ if (typeof labelOrConfig.color === "object")
38
+ return labelOrConfig.color;
39
+ }
40
+ return undefined;
41
+ }
42
+
43
+ export function isEnumValueDisabled(labelOrConfig?: string | EnumValueConfig) {
44
+ return typeof labelOrConfig === "object" && (labelOrConfig as EnumValueConfig).disabled;
45
+ }
46
+
47
+ export function buildEnumLabel(
48
+ labelOrConfig?: string | EnumValueConfig
49
+ ): string | undefined {
50
+ if (labelOrConfig === undefined)
51
+ return undefined;
52
+ if (typeof labelOrConfig === "object") {
53
+ return labelOrConfig.label;
54
+ } else {
55
+ return labelOrConfig;
56
+ }
57
+ }
@@ -0,0 +1,45 @@
1
+ export function flattenObject(obj: any, parentKey = "") {
2
+ if (!obj) return obj;
3
+ return Object.keys(obj).reduce((flatObj, key) => {
4
+ const newKey = parentKey ? `${parentKey}.${key}` : key;
5
+
6
+ if (typeof obj[key] === "object" && obj[key] !== null) {
7
+ if (Array.isArray(obj[key])) {
8
+ obj[key].forEach((item: any, index: number) => {
9
+ Object.assign(flatObj, flattenObject(item, `${newKey}[${index}]`));
10
+ });
11
+ } else {
12
+ Object.assign(flatObj, flattenObject(obj[key], newKey));
13
+ }
14
+ } else {
15
+ flatObj[newKey] = obj[key];
16
+ }
17
+
18
+ return flatObj;
19
+ }, {} as { [key: string]: any });
20
+ }
21
+
22
+
23
+ // map from nested property key like "a.b.c" to the maximum array count found in a list of objects for that array
24
+ export type ArrayValuesCount = Record<string, number>;
25
+
26
+ export function getArrayValuesCount(array: any[]): ArrayValuesCount {
27
+ return array.reduce((acc: ArrayValuesCount, obj: any) => {
28
+ Object.entries(obj).forEach(([key, value]) => {
29
+ // proceed only if value is an array
30
+ if (Array.isArray(value)) {
31
+ acc[key] = Math.max(acc[key] || 0, value.length);
32
+ }
33
+
34
+ // handle nested object
35
+ if (typeof value === "object" && value !== null) {
36
+ const nested = getArrayValuesCount([value]);
37
+ Object.entries(nested).forEach(([nestedKey, nestedCount]) => {
38
+ const compoundKey = `${key}.${nestedKey}`;
39
+ acc[compoundKey] = Math.max(acc[compoundKey] || 0, nestedCount);
40
+ });
41
+ }
42
+ });
43
+ return acc;
44
+ }, {});
45
+ }
@@ -0,0 +1,11 @@
1
+ export function hashString(str: string): number {
2
+ let hash = 0;
3
+ let i;
4
+ let chr;
5
+ for (i = 0; i < str.length; i++) {
6
+ chr = str.charCodeAt(i);
7
+ hash = ((hash << 5) - hash) + chr;
8
+ hash |= 0; // Convert to 32bit integer
9
+ }
10
+ return Math.abs(hash);
11
+ }
@@ -0,0 +1,45 @@
1
+ import React from "react";
2
+ import { CMSView, EntityCollection } from "../types";
3
+ import { hashString } from "./hash";
4
+ import { coolIconKeys, Icon, iconKeys } from "@firecms/ui";
5
+ import { slugify } from "./strings";
6
+
7
+ export function getIcon(iconKey?: string, className?:string): React.ReactElement | undefined {
8
+ if (!iconKey) return undefined;
9
+ iconKey = slugify(iconKey);
10
+ if (!(iconKey in iconKeysMap)) {
11
+ return undefined;
12
+ }
13
+ return iconKey in iconKeysMap ? <Icon iconKey={iconKey} size={"medium"} className={className}/> : undefined;
14
+ }
15
+
16
+ export function getIconForView(collectionOrView: EntityCollection | CMSView, className?:string): React.ReactElement {
17
+
18
+ const icon = getIcon(collectionOrView.icon, className);
19
+ if (collectionOrView?.icon && icon)
20
+ return icon;
21
+
22
+ let slugName = slugify(("singularName" in collectionOrView ? collectionOrView.singularName : undefined) ?? collectionOrView.name);
23
+
24
+ let key: string | undefined;
25
+ if (slugName in iconKeysMap)
26
+ key = slugName;
27
+
28
+ if (!key) {
29
+ slugName = slugify(collectionOrView.path);
30
+ if (slugName in iconKeysMap)
31
+ key = slugName;
32
+ }
33
+
34
+ const iconsCount = coolIconKeys.length;
35
+
36
+ if (!key)
37
+ key = coolIconKeys[hashString(collectionOrView.path) % iconsCount];
38
+
39
+ return <Icon iconKey={key} size={"medium"} className={className}/>;
40
+ }
41
+
42
+ const iconKeysMap: Record<string, string> = iconKeys.reduce((acc: Record<string, string>, key) => {
43
+ acc[key] = key;
44
+ return acc;
45
+ }, {});
@@ -0,0 +1,20 @@
1
+ export * from "./collections";
2
+ export * from "./entities";
3
+ export * from "./strings";
4
+ export * from "./dates";
5
+ export * from "./enums";
6
+ export * from "./objects";
7
+ export * from "./paths";
8
+ export * from "./regexp";
9
+ export * from "./navigation_utils";
10
+ export * from "./useDebounce";
11
+ export * from "./property_utils";
12
+ export * from "./resolutions";
13
+ export * from "./permissions";
14
+ export * from "./icons";
15
+ export * from "./plurals";
16
+ export * from "./references";
17
+ export * from "./flatten_object";
18
+ export * from "./make_properties_editable";
19
+ export * from "./join_collections";
20
+ export * from "./builders";
@@ -0,0 +1,172 @@
1
+ import {
2
+ EntityCollection,
3
+ MapProperty,
4
+ ModifyCollectionProps,
5
+ PropertiesOrBuilders,
6
+ Property,
7
+ PropertyOrBuilder
8
+ } from "../types";
9
+ import { mergeDeep } from "./objects";
10
+ import { sortProperties } from "./collections";
11
+ import { isPropertyBuilder } from "./entities";
12
+
13
+ function applyModifyFunction(modifyCollection: ((props: ModifyCollectionProps) => (EntityCollection | void)) | undefined,
14
+ collection: EntityCollection,
15
+ parentPaths: string[]) {
16
+ if (modifyCollection) {
17
+ const modified = modifyCollection({
18
+ collection,
19
+ parentPaths
20
+ });
21
+ const resCollection = modified ?? collection;
22
+ if (resCollection.subcollections) {
23
+ resCollection.subcollections = resCollection.subcollections.map((subcollection) => {
24
+ return applyModifyFunction(modifyCollection, subcollection, [...parentPaths, collection.path]);
25
+ });
26
+ }
27
+ return resCollection;
28
+ } else {
29
+ return collection;
30
+ }
31
+ }
32
+
33
+ /**
34
+ *
35
+ */
36
+ export function joinCollectionLists(targetCollections: EntityCollection[],
37
+ sourceCollections: EntityCollection[] | undefined,
38
+ parentPaths: string[] = [],
39
+ modifyCollection?: (props: ModifyCollectionProps) => EntityCollection | void): EntityCollection[] {
40
+
41
+ // merge collections that are in both lists
42
+ const updatedCollections = (sourceCollections ?? [])
43
+ .map((sourceCol) => {
44
+ const targetCol = targetCollections?.find((collection) => {
45
+ return collection.id === sourceCol.id;
46
+ // return collection.path === codedCollection.path || collection.id && codedCollection.id;
47
+ });
48
+ if (!targetCol) {
49
+ return applyModifyFunction(modifyCollection, sourceCol, parentPaths);
50
+ } else {
51
+ return mergeCollection(targetCol, sourceCol, parentPaths, modifyCollection);
52
+ }
53
+ });
54
+
55
+ const sourceCollectionIds = updatedCollections.map(c => c.id);
56
+ // fetched collections that are not in the source collections
57
+ const resultStoredCollections = targetCollections
58
+ .filter((col) => {
59
+ return !sourceCollectionIds.includes(col.id);
60
+ })
61
+ .map((col) => {
62
+ if (modifyCollection) {
63
+ return applyModifyFunction(modifyCollection, col, parentPaths);
64
+ } else {
65
+ return col;
66
+ }
67
+ });
68
+
69
+ return [...updatedCollections, ...resultStoredCollections];
70
+ }
71
+
72
+ /**
73
+ *
74
+ */
75
+ export function mergeCollection(target: EntityCollection,
76
+ source: EntityCollection,
77
+ parentPaths: string[] = [],
78
+ modifyCollection?: (props: ModifyCollectionProps) => EntityCollection | void
79
+ ): EntityCollection {
80
+
81
+ const subcollectionsMerged = joinCollectionLists(
82
+ target?.subcollections ?? [],
83
+ source?.subcollections ?? [],
84
+ [...parentPaths, target.path],
85
+ modifyCollection
86
+ );
87
+
88
+ const propertiesMerged: PropertiesOrBuilders = { ...target.properties } as PropertiesOrBuilders;
89
+ Object.keys(source.properties).forEach((key) => {
90
+ const property = target.properties[key] as Property;
91
+ if (property)
92
+ propertiesMerged[key] = mergePropertyOrBuilder(property, source.properties[key] as PropertyOrBuilder);
93
+ else
94
+ propertiesMerged[key] = source.properties[key] as PropertyOrBuilder;
95
+ });
96
+
97
+ const mergedCollection = mergeDeep(target, source);
98
+ const targetPropertiesOrder = getCollectionKeys(target);
99
+ const sourcePropertiesOrder = getCollectionKeys(source);
100
+ const mergedPropertiesOrder = [...new Set([...sourcePropertiesOrder, ...targetPropertiesOrder])];
101
+ const mergedEntityViews = [...new Set([...(target.entityViews ?? []), ...(source.entityViews ?? [])])];
102
+
103
+ let resultCollection: EntityCollection = {
104
+ ...mergedCollection,
105
+ subcollections: subcollectionsMerged,
106
+ properties: sortProperties(propertiesMerged, mergedPropertiesOrder),
107
+ propertiesOrder: mergedPropertiesOrder,
108
+ entityViews: mergedEntityViews
109
+ };
110
+ if (modifyCollection) {
111
+ const modifiedCollection = modifyCollection({
112
+ collection: resultCollection,
113
+ parentPaths
114
+ });
115
+ if (modifiedCollection)
116
+ resultCollection = modifiedCollection;
117
+ }
118
+ return resultCollection
119
+ }
120
+
121
+ function mergePropertyOrBuilder(target: PropertyOrBuilder, source: PropertyOrBuilder): PropertyOrBuilder {
122
+ if (isPropertyBuilder(source)) {
123
+ return source;
124
+ } else if (isPropertyBuilder(target)) {
125
+ return target;
126
+ } else {
127
+ const mergedProperty = mergeDeep(target, source);
128
+ const targetEditable = Boolean(target.editable);
129
+ const sourceEditable = Boolean(source.editable);
130
+ if (source.dataType === "map" && source.properties) {
131
+ const targetProperties = ("properties" in target ? target.properties : {}) as PropertiesOrBuilders;
132
+ const sourceProperties = ("properties" in source ? source.properties : {}) as PropertiesOrBuilders;
133
+ const targetPropertiesOrder = "propertiesOrder" in target && target.propertiesOrder ? target.propertiesOrder : Object.keys(targetProperties);
134
+ const sourcePropertiesOrder = "propertiesOrder" in source && source.propertiesOrder ? source.propertiesOrder : ("properties" in source ? Object.keys(source.properties) : []);
135
+ const mergedPropertiesOrder = [...new Set([...targetPropertiesOrder, ...sourcePropertiesOrder])];
136
+ const mergedProperties: PropertiesOrBuilders = { ...targetProperties } as PropertiesOrBuilders;
137
+ Object.keys(source.properties).forEach((key) => {
138
+ const property = targetProperties[key] as Property;
139
+ if (property)
140
+ mergedProperties[key] = mergePropertyOrBuilder(property, sourceProperties[key] as PropertyOrBuilder);
141
+ });
142
+ return {
143
+ ...mergedProperty,
144
+ editable: targetEditable && sourceEditable,
145
+ properties: mergedProperties,
146
+ propertiesOrder: mergedPropertiesOrder
147
+ } as MapProperty;
148
+ }
149
+ return {
150
+ ...mergedProperty,
151
+ editable: targetEditable && sourceEditable
152
+ };
153
+ }
154
+ }
155
+
156
+ function getCollectionKeys(collection: EntityCollection) {
157
+ if (collection.propertiesOrder && collection.propertiesOrder.length > 0) {
158
+ const propertiesOrder = collection.propertiesOrder;
159
+ if (collection.additionalFields) {
160
+ collection.additionalFields.forEach((field) => {
161
+ if (!propertiesOrder.includes(field.key)) {
162
+ propertiesOrder.push(field.key);
163
+ }
164
+ });
165
+ }
166
+ return propertiesOrder;
167
+ }
168
+ return [
169
+ ...Object.keys(collection.properties),
170
+ ...(collection.additionalFields ?? [])?.map(f => f.key)
171
+ ];
172
+ }
@@ -0,0 +1,29 @@
1
+ import { Properties, PropertiesOrBuilders } from "../types";
2
+ import { isPropertyBuilder } from "./entities";
3
+
4
+ export function makePropertiesEditable(properties: Properties) {
5
+ Object.keys(properties).forEach((key) => {
6
+ const property = properties[key];
7
+ property.editable = true;
8
+ if (property.dataType === "map" && property.properties) {
9
+ makePropertiesEditable(property.properties as Properties);
10
+ }
11
+ });
12
+ return properties;
13
+ }
14
+
15
+ export function makePropertiesNonEditable(properties: PropertiesOrBuilders): PropertiesOrBuilders {
16
+ return Object.entries(properties).reduce((acc, [key, property]) => {
17
+ if (!isPropertyBuilder(property) && property.dataType === "map" && property.properties) {
18
+ const updated = { ...property, properties: makePropertiesNonEditable(property.properties as PropertiesOrBuilders) };
19
+ acc[key] = updated;
20
+ }
21
+ if (isPropertyBuilder(property)) {
22
+ acc[key] = property;
23
+ } else {
24
+ acc[key] = { ...property, editable: false };
25
+ }
26
+ return acc;
27
+ }, {} as PropertiesOrBuilders);
28
+
29
+ }