@firecms/core 3.0.0-alpha.8 → 3.0.0-alpha.81

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 (470) 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/DeleteEntityDialog.d.ts +12 -0
  6. package/dist/components/EntityCollectionTable/EntityCollectionRowActions.d.ts +35 -0
  7. package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +30 -0
  8. package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +106 -0
  9. package/dist/components/EntityCollectionTable/PropertyTableCell.d.ts +18 -0
  10. package/dist/components/EntityCollectionTable/SimpleEntityCollectionTable.d.ts +95 -0
  11. package/dist/components/EntityCollectionTable/column_utils.d.ts +16 -0
  12. package/dist/components/EntityCollectionTable/fields/TableReferenceField.d.ts +15 -0
  13. package/dist/components/EntityCollectionTable/fields/TableStorageUpload.d.ts +33 -0
  14. package/dist/components/EntityCollectionTable/filters/BooleanFilterField.d.ts +9 -0
  15. package/dist/components/EntityCollectionTable/filters/DateTimeFilterField.d.ts +11 -0
  16. package/dist/components/EntityCollectionTable/filters/ReferenceFilterField.d.ts +14 -0
  17. package/dist/components/EntityCollectionTable/filters/StringNumberFilterField.d.ts +13 -0
  18. package/dist/components/EntityCollectionTable/index.d.ts +8 -0
  19. package/dist/components/EntityCollectionTable/internal/CollectionTableToolbar.d.ts +18 -0
  20. package/dist/components/EntityCollectionTable/internal/EntityTableCell.d.ts +26 -0
  21. package/dist/components/EntityCollectionTable/internal/EntityTableCellActions.d.ts +9 -0
  22. package/dist/components/EntityCollectionTable/internal/common.d.ts +4 -0
  23. package/dist/components/EntityCollectionTable/internal/default_entity_actions.d.ts +6 -0
  24. package/dist/components/EntityCollectionTable/internal/popup_field/ElementResizeListener.d.ts +5 -0
  25. package/dist/components/EntityCollectionTable/internal/popup_field/PopupFormField.d.ts +23 -0
  26. package/dist/components/EntityCollectionTable/internal/popup_field/useDraggable.d.ts +13 -0
  27. package/dist/components/EntityCollectionTable/internal/popup_field/useWindowSize.d.ts +6 -0
  28. package/dist/components/EntityCollectionTable/types.d.ts +53 -0
  29. package/dist/components/EntityCollectionTable/useDataSourceEntityCollectionTableController.d.ts +32 -0
  30. package/dist/components/EntityCollectionTable/useDebouncedData.d.ts +9 -0
  31. package/dist/components/EntityCollectionView/EntityCollectionView.d.ts +37 -0
  32. package/dist/components/EntityCollectionView/EntityCollectionViewActions.d.ts +14 -0
  33. package/dist/components/EntityCollectionView/useColumnsIds.d.ts +4 -0
  34. package/dist/components/EntityPreview.d.ts +11 -0
  35. package/dist/components/ErrorBoundary.d.ts +11 -0
  36. package/dist/components/ErrorTooltip.d.ts +2 -0
  37. package/dist/components/ErrorView.d.ts +19 -0
  38. package/dist/components/FieldConfigBadge.d.ts +4 -0
  39. package/dist/components/FireCMSAppBar.d.ts +26 -0
  40. package/dist/components/FireCMSLogo.d.ts +7 -0
  41. package/dist/components/HomePage/DefaultHomePage.d.ts +21 -0
  42. package/dist/components/HomePage/FavouritesView.d.ts +3 -0
  43. package/dist/components/HomePage/NavigationCollectionCard.d.ts +17 -0
  44. package/dist/components/HomePage/NavigationGroup.d.ts +4 -0
  45. package/dist/components/HomePage/index.d.ts +3 -0
  46. package/dist/components/LabelWithIcon.d.ts +14 -0
  47. package/dist/components/NotFoundPage.d.ts +1 -0
  48. package/dist/components/ReferenceSelectionInner.d.ts +58 -0
  49. package/dist/components/ReferenceWidget.d.ts +28 -0
  50. package/dist/components/SearchIconsView.d.ts +5 -0
  51. package/dist/components/VirtualTable/VirtualTable.d.ts +11 -0
  52. package/dist/components/VirtualTable/VirtualTableCell.d.ts +14 -0
  53. package/dist/components/VirtualTable/VirtualTableHeader.d.ts +27 -0
  54. package/dist/components/VirtualTable/VirtualTableHeaderRow.d.ts +2 -0
  55. package/dist/components/VirtualTable/VirtualTableProps.d.ts +214 -0
  56. package/dist/components/VirtualTable/VirtualTableRow.d.ts +3 -0
  57. package/dist/components/VirtualTable/common.d.ts +2 -0
  58. package/dist/components/VirtualTable/fields/VirtualTableDateField.d.ts +11 -0
  59. package/dist/components/VirtualTable/fields/VirtualTableInput.d.ts +8 -0
  60. package/dist/components/VirtualTable/fields/VirtualTableNumberInput.d.ts +8 -0
  61. package/dist/components/VirtualTable/fields/VirtualTableSelect.d.ts +15 -0
  62. package/dist/components/VirtualTable/fields/VirtualTableSwitch.d.ts +7 -0
  63. package/dist/components/VirtualTable/index.d.ts +2 -0
  64. package/dist/components/VirtualTable/types.d.ts +34 -0
  65. package/dist/components/index.d.ts +21 -0
  66. package/dist/contexts/AuthControllerContext.d.ts +3 -0
  67. package/dist/contexts/DataSourceContext.d.ts +3 -0
  68. package/dist/contexts/DialogsProvider.d.ts +4 -0
  69. package/dist/contexts/ModeController.d.ts +4 -0
  70. package/dist/contexts/NavigationContext.d.ts +3 -0
  71. package/dist/contexts/SideDialogsControllerContext.d.ts +3 -0
  72. package/dist/contexts/SideEntityControllerContext.d.ts +3 -0
  73. package/dist/contexts/SnackbarProvider.d.ts +2 -0
  74. package/dist/contexts/StorageSourceContext.d.ts +3 -0
  75. package/dist/contexts/UserConfigurationPersistenceContext.d.ts +3 -0
  76. package/dist/contexts/index.d.ts +3 -0
  77. package/dist/core/Drawer.d.ts +23 -0
  78. package/dist/core/EntitySidePanel.d.ts +10 -0
  79. package/dist/core/FireCMS.d.ts +14 -0
  80. package/dist/core/NavigationRoutes.d.ts +21 -0
  81. package/dist/core/Scaffold.d.ts +52 -0
  82. package/dist/core/SideDialogs.d.ts +23 -0
  83. package/dist/core/field_configs.d.ts +7 -0
  84. package/dist/core/index.d.ts +10 -0
  85. package/dist/core/useBuildLocalConfigurationPersistence.d.ts +2 -0
  86. package/dist/core/useBuildModeController.d.ts +6 -0
  87. package/dist/form/EntityForm.d.ts +75 -0
  88. package/dist/form/PropertyFieldBinding.d.ts +30 -0
  89. package/dist/form/components/CustomIdField.d.ts +9 -0
  90. package/dist/form/components/ErrorFocus.d.ts +4 -0
  91. package/dist/form/components/FieldHelperText.d.ts +12 -0
  92. package/dist/form/components/FormikArrayContainer.d.ts +18 -0
  93. package/dist/form/components/StorageItemPreview.d.ts +13 -0
  94. package/dist/form/components/StorageUploadProgress.d.ts +10 -0
  95. package/dist/form/components/SubmitListener.d.ts +1 -0
  96. package/dist/form/components/SwitchControl.d.ts +8 -0
  97. package/dist/form/components/index.d.ts +3 -0
  98. package/dist/form/field_bindings/ArrayCustomShapedFieldBinding.d.ts +9 -0
  99. package/dist/form/field_bindings/ArrayOfReferencesFieldBinding.d.ts +11 -0
  100. package/dist/form/field_bindings/BlockFieldBinding.d.ts +10 -0
  101. package/dist/form/field_bindings/DateTimeFieldBinding.d.ts +11 -0
  102. package/dist/form/field_bindings/KeyValueFieldBinding.d.ts +7 -0
  103. package/dist/form/field_bindings/MapFieldBinding.d.ts +9 -0
  104. package/dist/form/field_bindings/MarkdownFieldBinding.d.ts +9 -0
  105. package/dist/form/field_bindings/MultiSelectBinding.d.ts +9 -0
  106. package/dist/form/field_bindings/ReadOnlyFieldBinding.d.ts +10 -0
  107. package/dist/form/field_bindings/ReferenceFieldBinding.d.ts +9 -0
  108. package/dist/form/field_bindings/RepeatFieldBinding.d.ts +10 -0
  109. package/dist/form/field_bindings/SelectFieldBinding.d.ts +12 -0
  110. package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +28 -0
  111. package/dist/form/field_bindings/SwitchFieldBinding.d.ts +12 -0
  112. package/dist/form/field_bindings/TextFieldBinding.d.ts +12 -0
  113. package/dist/form/index.d.ts +20 -0
  114. package/dist/form/useClearRestoreValue.d.ts +13 -0
  115. package/dist/form/validation.d.ts +25 -0
  116. package/dist/hooks/data/delete.d.ts +37 -0
  117. package/dist/hooks/data/save.d.ts +42 -0
  118. package/dist/hooks/data/useCollectionFetch.d.ts +50 -0
  119. package/dist/hooks/data/useDataOrder.d.ts +12 -0
  120. package/dist/hooks/data/useDataSource.d.ts +6 -0
  121. package/dist/hooks/data/useEntityFetch.d.ts +28 -0
  122. package/dist/hooks/index.d.ts +19 -0
  123. package/dist/hooks/useAuthController.d.ts +11 -0
  124. package/dist/hooks/useBrowserTitleAndIcon.d.ts +6 -0
  125. package/dist/hooks/useClipboard.d.ts +57 -0
  126. package/dist/hooks/useDialogsController.d.ts +11 -0
  127. package/dist/hooks/useFireCMSContext.d.ts +12 -0
  128. package/dist/hooks/useLargeLayout.d.ts +1 -0
  129. package/dist/hooks/useModeController.d.ts +20 -0
  130. package/dist/hooks/useNavigationController.d.ts +9 -0
  131. package/dist/hooks/useReferenceDialog.d.ts +18 -0
  132. package/dist/hooks/useResolvedNavigationFrom.d.ts +72 -0
  133. package/dist/hooks/useSideDialogsController.d.ts +18 -0
  134. package/dist/hooks/useSideEntityController.d.ts +12 -0
  135. package/dist/hooks/useSnackbarController.d.ts +41 -0
  136. package/dist/hooks/useStorageSource.d.ts +6 -0
  137. package/dist/hooks/useUserConfigurationPersistence.d.ts +8 -0
  138. package/dist/hooks/useVerifyLicense.d.ts +0 -0
  139. package/dist/index.d.ts +8 -0
  140. package/dist/index.es.js +15810 -26791
  141. package/dist/index.es.js.map +1 -1
  142. package/dist/index.umd.js +5 -1027
  143. package/dist/index.umd.js.map +1 -1
  144. package/dist/internal/EntityView.d.ts +22 -0
  145. package/dist/internal/common.d.ts +3 -0
  146. package/dist/internal/useBuildDataSource.d.ts +22 -0
  147. package/dist/internal/useBuildNavigationController.d.ts +14 -0
  148. package/dist/internal/useBuildSideDialogsController.d.ts +2 -0
  149. package/dist/internal/useBuildSideEntityController.d.ts +4 -0
  150. package/dist/internal/useLocaleConfig.d.ts +1 -0
  151. package/dist/internal/useRestoreScroll.d.ts +6 -0
  152. package/dist/internal/useUnsavedChangesDialog.d.ts +14 -0
  153. package/dist/preview/PropertyPreview.d.ts +7 -0
  154. package/dist/preview/PropertyPreviewProps.d.ts +43 -0
  155. package/dist/preview/components/ArrayEnumPreview.d.ts +11 -0
  156. package/dist/preview/components/AsyncPreviewComponent.d.ts +11 -0
  157. package/dist/preview/components/BooleanPreview.d.ts +7 -0
  158. package/dist/preview/components/DatePreview.d.ts +7 -0
  159. package/dist/preview/components/EmptyValue.d.ts +4 -0
  160. package/dist/preview/components/EnumValuesChip.d.ts +13 -0
  161. package/dist/preview/components/ImagePreview.d.ts +12 -0
  162. package/dist/preview/components/ReferencePreview.d.ts +22 -0
  163. package/dist/preview/components/StorageThumbnail.d.ts +13 -0
  164. package/dist/preview/components/UrlComponentPreview.d.ts +12 -0
  165. package/dist/preview/index.d.ts +23 -0
  166. package/dist/preview/property_previews/ArrayOfMapsPreview.d.ts +5 -0
  167. package/dist/preview/property_previews/ArrayOfReferencesPreview.d.ts +5 -0
  168. package/dist/preview/property_previews/ArrayOfStorageComponentsPreview.d.ts +5 -0
  169. package/dist/preview/property_previews/ArrayOfStringsPreview.d.ts +5 -0
  170. package/dist/preview/property_previews/ArrayOneOfPreview.d.ts +5 -0
  171. package/dist/preview/property_previews/ArrayPropertyEnumPreview.d.ts +5 -0
  172. package/dist/preview/property_previews/ArrayPropertyPreview.d.ts +5 -0
  173. package/dist/preview/property_previews/MapPropertyPreview.d.ts +8 -0
  174. package/dist/preview/property_previews/NumberPropertyPreview.d.ts +6 -0
  175. package/dist/preview/property_previews/SkeletonPropertyComponent.d.ts +14 -0
  176. package/dist/preview/property_previews/StringPropertyPreview.d.ts +6 -0
  177. package/dist/preview/util.d.ts +7 -0
  178. package/dist/types/analytics.d.ts +1 -0
  179. package/dist/types/appcheck.d.ts +26 -0
  180. package/dist/types/auth.d.ts +40 -0
  181. package/dist/types/collections.d.ts +451 -0
  182. package/dist/types/datasource.d.ts +262 -0
  183. package/dist/types/dialogs_controller.d.ts +32 -0
  184. package/dist/types/entities.d.ts +57 -0
  185. package/dist/types/entity_actions.d.ts +35 -0
  186. package/dist/types/entity_callbacks.d.ts +171 -0
  187. package/dist/types/entity_link_builder.d.ts +7 -0
  188. package/dist/types/export_import.d.ts +21 -0
  189. package/dist/types/fields.d.ts +181 -0
  190. package/dist/types/firecms.d.ts +151 -0
  191. package/dist/types/firecms_context.d.ts +110 -0
  192. package/dist/types/index.d.ts +26 -0
  193. package/dist/types/local_config_persistence.d.ts +21 -0
  194. package/dist/types/locales.d.ts +4 -0
  195. package/dist/types/modify_collections.d.ts +5 -0
  196. package/dist/types/navigation.d.ts +178 -0
  197. package/dist/types/permissions.d.ts +63 -0
  198. package/dist/types/plugins.d.ts +181 -0
  199. package/dist/types/properties.d.ts +681 -0
  200. package/dist/types/property_config.d.ts +42 -0
  201. package/dist/types/resolved_entities.d.ts +98 -0
  202. package/dist/types/side_dialogs_controller.d.ts +57 -0
  203. package/dist/types/side_entity_controller.d.ts +83 -0
  204. package/dist/types/storage.d.ts +82 -0
  205. package/dist/types/user.d.ts +36 -0
  206. package/dist/util/arrays.d.ts +1 -0
  207. package/dist/util/builders.d.ts +64 -0
  208. package/dist/util/collections.d.ts +3 -0
  209. package/dist/util/common.d.ts +2 -0
  210. package/dist/util/dates.d.ts +1 -0
  211. package/dist/util/entities.d.ts +28 -0
  212. package/dist/util/enums.d.ts +7 -0
  213. package/dist/util/flatten_object.d.ts +3 -0
  214. package/dist/util/hash.d.ts +1 -0
  215. package/dist/util/icon_list.d.ts +1 -0
  216. package/dist/util/icon_synonyms.d.ts +1950 -0
  217. package/dist/util/icons.d.ts +4 -0
  218. package/dist/util/index.d.ts +22 -0
  219. package/dist/util/join_collections.d.ts +9 -0
  220. package/dist/util/make_properties_editable.d.ts +3 -0
  221. package/dist/util/navigation_from_path.d.ts +24 -0
  222. package/dist/util/navigation_utils.d.ts +20 -0
  223. package/dist/util/objects.d.ts +10 -0
  224. package/dist/util/os.d.ts +2 -0
  225. package/dist/util/parent_references_from_path.d.ts +6 -0
  226. package/dist/util/paths.d.ts +14 -0
  227. package/dist/util/permissions.d.ts +5 -0
  228. package/dist/util/plurals.d.ts +18 -0
  229. package/dist/util/property_utils.d.ts +23 -0
  230. package/dist/util/references.d.ts +2 -0
  231. package/dist/util/regexp.d.ts +7 -0
  232. package/dist/util/resolutions.d.ts +64 -0
  233. package/dist/util/storage.d.ts +3 -0
  234. package/dist/util/strings.d.ts +6 -0
  235. package/dist/util/useDebounce.d.ts +1 -0
  236. package/dist/util/useStorageUploadController.d.ts +36 -0
  237. package/dist/util/useTraceUpdate.d.ts +1 -0
  238. package/package.json +112 -142
  239. package/src/components/ArrayContainer.tsx +369 -0
  240. package/src/components/CircularProgressCenter.tsx +26 -0
  241. package/src/components/DeleteConfirmationDialog.tsx +47 -0
  242. package/src/components/DeleteEntityDialog.tsx +207 -0
  243. package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +174 -0
  244. package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +496 -0
  245. package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +150 -0
  246. package/src/components/EntityCollectionTable/PropertyTableCell.tsx +461 -0
  247. package/src/components/EntityCollectionTable/SimpleEntityCollectionTable.tsx +369 -0
  248. package/src/components/EntityCollectionTable/column_utils.tsx +74 -0
  249. package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +159 -0
  250. package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +313 -0
  251. package/src/components/EntityCollectionTable/filters/BooleanFilterField.tsx +49 -0
  252. package/src/components/EntityCollectionTable/filters/DateTimeFilterField.tsx +109 -0
  253. package/src/components/EntityCollectionTable/filters/ReferenceFilterField.tsx +187 -0
  254. package/src/components/EntityCollectionTable/filters/StringNumberFilterField.tsx +159 -0
  255. package/src/components/EntityCollectionTable/index.tsx +20 -0
  256. package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +113 -0
  257. package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +257 -0
  258. package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +70 -0
  259. package/src/components/EntityCollectionTable/internal/common.tsx +70 -0
  260. package/src/components/EntityCollectionTable/internal/default_entity_actions.tsx +122 -0
  261. package/src/components/EntityCollectionTable/internal/popup_field/ElementResizeListener.tsx +59 -0
  262. package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +401 -0
  263. package/src/components/EntityCollectionTable/internal/popup_field/useDraggable.tsx +97 -0
  264. package/src/components/EntityCollectionTable/internal/popup_field/useWindowSize.tsx +20 -0
  265. package/src/components/EntityCollectionTable/types.tsx +58 -0
  266. package/src/components/EntityCollectionTable/useDataSourceEntityCollectionTableController.tsx +225 -0
  267. package/src/components/EntityCollectionTable/useDebouncedData.ts +49 -0
  268. package/src/components/EntityCollectionView/EntityCollectionView.tsx +815 -0
  269. package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +131 -0
  270. package/src/components/EntityCollectionView/useColumnsIds.tsx +100 -0
  271. package/src/components/EntityPreview.tsx +83 -0
  272. package/src/components/ErrorBoundary.tsx +40 -0
  273. package/src/components/ErrorTooltip.tsx +11 -0
  274. package/src/components/ErrorView.tsx +52 -0
  275. package/src/components/FieldConfigBadge.tsx +17 -0
  276. package/src/components/FireCMSAppBar.tsx +157 -0
  277. package/src/components/FireCMSLogo.tsx +73 -0
  278. package/src/components/HomePage/DefaultHomePage.tsx +209 -0
  279. package/src/components/HomePage/FavouritesView.tsx +64 -0
  280. package/src/components/HomePage/NavigationCollectionCard.tsx +145 -0
  281. package/src/components/HomePage/NavigationGroup.tsx +39 -0
  282. package/src/components/HomePage/index.tsx +3 -0
  283. package/src/components/LabelWithIcon.tsx +33 -0
  284. package/src/components/NotFoundPage.tsx +25 -0
  285. package/src/components/ReferenceSelectionInner.tsx +364 -0
  286. package/src/components/ReferenceWidget.tsx +145 -0
  287. package/src/components/SearchIconsView.tsx +75 -0
  288. package/src/components/VirtualTable/VirtualTable.tsx +402 -0
  289. package/src/components/VirtualTable/VirtualTableCell.tsx +32 -0
  290. package/src/components/VirtualTable/VirtualTableHeader.tsx +260 -0
  291. package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +131 -0
  292. package/src/components/VirtualTable/VirtualTableProps.tsx +269 -0
  293. package/src/components/VirtualTable/VirtualTableRow.tsx +53 -0
  294. package/src/components/VirtualTable/common.tsx +18 -0
  295. package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +37 -0
  296. package/src/components/VirtualTable/fields/VirtualTableInput.tsx +91 -0
  297. package/src/components/VirtualTable/fields/VirtualTableNumberInput.tsx +82 -0
  298. package/src/components/VirtualTable/fields/VirtualTableSelect.tsx +130 -0
  299. package/src/components/VirtualTable/fields/VirtualTableSwitch.tsx +32 -0
  300. package/src/components/VirtualTable/index.tsx +2 -0
  301. package/src/components/VirtualTable/types.tsx +44 -0
  302. package/src/components/index.tsx +31 -0
  303. package/src/contexts/AuthControllerContext.tsx +4 -0
  304. package/src/contexts/DataSourceContext.tsx +4 -0
  305. package/src/contexts/DialogsProvider.tsx +52 -0
  306. package/src/contexts/ModeController.tsx +13 -0
  307. package/src/contexts/NavigationContext.tsx +4 -0
  308. package/src/contexts/SideDialogsControllerContext.tsx +4 -0
  309. package/src/contexts/SideEntityControllerContext.tsx +4 -0
  310. package/src/contexts/SnackbarProvider.tsx +12 -0
  311. package/src/contexts/StorageSourceContext.tsx +4 -0
  312. package/src/contexts/UserConfigurationPersistenceContext.tsx +4 -0
  313. package/src/contexts/index.ts +3 -0
  314. package/src/core/Drawer.tsx +161 -0
  315. package/src/core/EntitySidePanel.tsx +89 -0
  316. package/src/core/FireCMS.tsx +184 -0
  317. package/src/core/NavigationRoutes.tsx +118 -0
  318. package/src/core/Scaffold.tsx +278 -0
  319. package/src/core/SideDialogs.tsx +156 -0
  320. package/src/core/field_configs.tsx +400 -0
  321. package/src/core/index.tsx +14 -0
  322. package/src/core/useBuildLocalConfigurationPersistence.tsx +67 -0
  323. package/src/core/useBuildModeController.tsx +60 -0
  324. package/src/form/EntityForm.tsx +646 -0
  325. package/src/form/PropertyFieldBinding.tsx +313 -0
  326. package/src/form/components/CustomIdField.tsx +124 -0
  327. package/src/form/components/ErrorFocus.tsx +51 -0
  328. package/src/form/components/FieldHelperText.tsx +58 -0
  329. package/src/form/components/FormikArrayContainer.tsx +44 -0
  330. package/src/form/components/StorageItemPreview.tsx +66 -0
  331. package/src/form/components/StorageUploadProgress.tsx +104 -0
  332. package/src/form/components/SubmitListener.tsx +32 -0
  333. package/src/form/components/SwitchControl.tsx +39 -0
  334. package/src/form/components/index.tsx +3 -0
  335. package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +88 -0
  336. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +153 -0
  337. package/src/form/field_bindings/BlockFieldBinding.tsx +245 -0
  338. package/src/form/field_bindings/DateTimeFieldBinding.tsx +67 -0
  339. package/src/form/field_bindings/KeyValueFieldBinding.tsx +560 -0
  340. package/src/form/field_bindings/MapFieldBinding.tsx +136 -0
  341. package/src/form/field_bindings/MarkdownFieldBinding.tsx +696 -0
  342. package/src/form/field_bindings/MultiSelectBinding.tsx +115 -0
  343. package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +70 -0
  344. package/src/form/field_bindings/ReferenceFieldBinding.tsx +122 -0
  345. package/src/form/field_bindings/RepeatFieldBinding.tsx +103 -0
  346. package/src/form/field_bindings/SelectFieldBinding.tsx +100 -0
  347. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +438 -0
  348. package/src/form/field_bindings/SwitchFieldBinding.tsx +61 -0
  349. package/src/form/field_bindings/TextFieldBinding.tsx +108 -0
  350. package/src/form/index.tsx +42 -0
  351. package/src/form/useClearRestoreValue.tsx +35 -0
  352. package/src/form/validation.ts +413 -0
  353. package/src/hooks/data/delete.ts +101 -0
  354. package/src/hooks/data/save.ts +165 -0
  355. package/src/hooks/data/useCollectionFetch.tsx +162 -0
  356. package/src/hooks/data/useDataOrder.ts +26 -0
  357. package/src/hooks/data/useDataSource.tsx +9 -0
  358. package/src/hooks/data/useEntityFetch.tsx +129 -0
  359. package/src/hooks/index.tsx +23 -0
  360. package/src/hooks/useAuthController.tsx +14 -0
  361. package/src/hooks/useBrowserTitleAndIcon.tsx +25 -0
  362. package/src/hooks/useClipboard.tsx +158 -0
  363. package/src/hooks/useDialogsController.tsx +14 -0
  364. package/src/hooks/useFireCMSContext.tsx +50 -0
  365. package/src/hooks/useLargeLayout.tsx +97 -0
  366. package/src/hooks/useModeController.tsx +24 -0
  367. package/src/hooks/useNavigationController.tsx +12 -0
  368. package/src/hooks/useReferenceDialog.tsx +56 -0
  369. package/src/hooks/useResolvedNavigationFrom.tsx +160 -0
  370. package/src/hooks/useSideDialogsController.tsx +21 -0
  371. package/src/hooks/useSideEntityController.tsx +15 -0
  372. package/src/hooks/useSnackbarController.tsx +76 -0
  373. package/src/hooks/useStorageSource.tsx +9 -0
  374. package/src/hooks/useUserConfigurationPersistence.tsx +11 -0
  375. package/src/hooks/useVerifyLicense.tsx +1 -0
  376. package/src/index.ts +8 -0
  377. package/src/internal/EntityView.tsx +576 -0
  378. package/src/internal/common.tsx +5 -0
  379. package/src/internal/useBuildDataSource.ts +358 -0
  380. package/src/internal/useBuildNavigationController.tsx +371 -0
  381. package/src/internal/useBuildSideDialogsController.tsx +126 -0
  382. package/src/internal/useBuildSideEntityController.tsx +172 -0
  383. package/src/internal/useLocaleConfig.tsx +18 -0
  384. package/src/internal/useRestoreScroll.tsx +48 -0
  385. package/src/internal/useUnsavedChangesDialog.tsx +106 -0
  386. package/src/preview/PropertyPreview.tsx +222 -0
  387. package/src/preview/PropertyPreviewProps.tsx +59 -0
  388. package/src/preview/components/ArrayEnumPreview.tsx +39 -0
  389. package/src/preview/components/AsyncPreviewComponent.tsx +47 -0
  390. package/src/preview/components/BooleanPreview.tsx +11 -0
  391. package/src/preview/components/DatePreview.tsx +27 -0
  392. package/src/preview/components/EmptyValue.tsx +10 -0
  393. package/src/preview/components/EnumValuesChip.tsx +38 -0
  394. package/src/preview/components/ImagePreview.tsx +106 -0
  395. package/src/preview/components/ReferencePreview.tsx +249 -0
  396. package/src/preview/components/StorageThumbnail.tsx +84 -0
  397. package/src/preview/components/UrlComponentPreview.tsx +79 -0
  398. package/src/preview/index.ts +27 -0
  399. package/src/preview/property_previews/ArrayOfMapsPreview.tsx +82 -0
  400. package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +52 -0
  401. package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +54 -0
  402. package/src/preview/property_previews/ArrayOfStringsPreview.tsx +55 -0
  403. package/src/preview/property_previews/ArrayOneOfPreview.tsx +67 -0
  404. package/src/preview/property_previews/ArrayPropertyEnumPreview.tsx +28 -0
  405. package/src/preview/property_previews/ArrayPropertyPreview.tsx +68 -0
  406. package/src/preview/property_previews/MapPropertyPreview.tsx +146 -0
  407. package/src/preview/property_previews/NumberPropertyPreview.tsx +27 -0
  408. package/src/preview/property_previews/SkeletonPropertyComponent.tsx +283 -0
  409. package/src/preview/property_previews/StringPropertyPreview.tsx +59 -0
  410. package/src/preview/util.ts +31 -0
  411. package/src/types/analytics.ts +34 -0
  412. package/src/types/appcheck.ts +29 -0
  413. package/src/types/auth.tsx +49 -0
  414. package/src/types/collections.ts +530 -0
  415. package/src/types/datasource.ts +389 -0
  416. package/src/types/dialogs_controller.tsx +33 -0
  417. package/src/types/entities.ts +76 -0
  418. package/src/types/entity_actions.tsx +39 -0
  419. package/src/types/entity_callbacks.ts +209 -0
  420. package/src/types/entity_link_builder.ts +8 -0
  421. package/src/types/export_import.ts +26 -0
  422. package/src/types/fields.tsx +220 -0
  423. package/src/types/firecms.tsx +175 -0
  424. package/src/types/firecms_context.tsx +128 -0
  425. package/src/types/index.ts +26 -0
  426. package/src/types/local_config_persistence.tsx +23 -0
  427. package/src/types/locales.ts +81 -0
  428. package/src/types/modify_collections.tsx +6 -0
  429. package/src/types/navigation.ts +214 -0
  430. package/src/types/permissions.ts +76 -0
  431. package/src/types/plugins.tsx +219 -0
  432. package/src/types/properties.ts +851 -0
  433. package/src/types/property_config.tsx +72 -0
  434. package/src/types/resolved_entities.ts +148 -0
  435. package/src/types/side_dialogs_controller.tsx +68 -0
  436. package/src/types/side_entity_controller.tsx +96 -0
  437. package/src/types/storage.ts +96 -0
  438. package/src/types/user.ts +37 -0
  439. package/src/util/arrays.ts +3 -0
  440. package/src/util/builders.ts +139 -0
  441. package/src/util/collections.ts +50 -0
  442. package/src/util/common.tsx +2 -0
  443. package/src/util/dates.ts +1 -0
  444. package/src/util/entities.ts +196 -0
  445. package/src/util/enums.ts +56 -0
  446. package/src/util/flatten_object.ts +45 -0
  447. package/src/util/hash.ts +11 -0
  448. package/src/util/icon_list.ts +17 -0
  449. package/src/util/icon_synonyms.ts +1950 -0
  450. package/src/util/icons.tsx +45 -0
  451. package/src/util/index.ts +22 -0
  452. package/src/util/join_collections.ts +172 -0
  453. package/src/util/make_properties_editable.ts +29 -0
  454. package/src/util/navigation_from_path.ts +107 -0
  455. package/src/util/navigation_utils.ts +111 -0
  456. package/src/util/objects.ts +168 -0
  457. package/src/util/os.ts +13 -0
  458. package/src/util/parent_references_from_path.ts +56 -0
  459. package/src/util/paths.ts +27 -0
  460. package/src/util/permissions.ts +80 -0
  461. package/src/util/plurals.ts +190 -0
  462. package/src/util/property_utils.tsx +130 -0
  463. package/src/util/references.ts +20 -0
  464. package/src/util/regexp.ts +32 -0
  465. package/src/util/resolutions.ts +399 -0
  466. package/src/util/storage.ts +92 -0
  467. package/src/util/strings.ts +62 -0
  468. package/src/util/useDebounce.ts +25 -0
  469. package/src/util/useStorageUploadController.tsx +243 -0
  470. package/src/util/useTraceUpdate.tsx +23 -0
@@ -0,0 +1,56 @@
1
+ import { EntityCollection, EntityReference } from "../types";
2
+ import { getCollectionPathsCombinations, removeInitialAndTrailingSlashes } from "./navigation_utils";
3
+
4
+ export function getParentReferencesFromPath(props: {
5
+ path: string,
6
+ collections: EntityCollection[] | undefined,
7
+ currentFullPath?: string,
8
+ }): EntityReference [] {
9
+
10
+ const {
11
+ path,
12
+ collections = [],
13
+ currentFullPath,
14
+ } = props;
15
+
16
+ const subpaths = removeInitialAndTrailingSlashes(path).split("/");
17
+ const subpathCombinations = getCollectionPathsCombinations(subpaths);
18
+
19
+ const result: EntityReference[] = [];
20
+ for (let i = 0; i < subpathCombinations.length; i++) {
21
+ const subpathCombination = subpathCombinations[i];
22
+
23
+ const collection: EntityCollection<any> | undefined = collections && collections.find((entry) => entry.id === subpathCombination || entry.path === subpathCombination);
24
+
25
+ if (collection) {
26
+ const pathOrAlias = collection.id ?? collection.path;
27
+ const collectionPath = currentFullPath && currentFullPath.length > 0
28
+ ? (currentFullPath + "/" + pathOrAlias)
29
+ : pathOrAlias;
30
+
31
+ const restOfThePath = removeInitialAndTrailingSlashes(removeInitialAndTrailingSlashes(path).replace(subpathCombination, ""));
32
+ const nextSegments = restOfThePath.length > 0 ? restOfThePath.split("/") : [];
33
+ if (nextSegments.length > 0) {
34
+ const entityId = nextSegments[0];
35
+ const fullPath = collectionPath + "/" + entityId;
36
+ result.push(new EntityReference(entityId, collectionPath));
37
+ if (nextSegments.length > 1) {
38
+ const newPath = nextSegments.slice(1).join("/");
39
+ if (!collection) {
40
+ throw Error("collection not found resolving path: " + collection);
41
+ }
42
+ if (collection.subcollections) {
43
+ result.push(...getParentReferencesFromPath({
44
+ path: newPath,
45
+ collections: collection.subcollections,
46
+ currentFullPath: fullPath
47
+ }));
48
+ }
49
+ }
50
+ }
51
+ break;
52
+ }
53
+
54
+ }
55
+ return result;
56
+ }
@@ -0,0 +1,27 @@
1
+ export const COLLECTION_PATH_SEPARATOR = "::";
2
+
3
+ /**
4
+ * Remove the entity ids from a given path
5
+ * `products/B44RG6APH/locales` => `products::locales`
6
+ * @param path
7
+ */
8
+ export function stripCollectionPath(path: string): string {
9
+ return segmentsToStrippedPath(fullPathToCollectionSegments(path));
10
+ }
11
+
12
+ export function segmentsToStrippedPath(paths: string[]) {
13
+ if (paths.length === 1)
14
+ return paths[0];
15
+ return paths.reduce((a, b) => `${a}${COLLECTION_PATH_SEPARATOR}${b}`);
16
+ }
17
+
18
+ /**
19
+ * Extract the collection path routes
20
+ * `products/B44RG6APH/locales` => [`products`, `locales`]
21
+ * @param path
22
+ */
23
+ export function fullPathToCollectionSegments(path: string): string[] {
24
+ return path
25
+ .split("/")
26
+ .filter((e, i) => i % 2 === 0);
27
+ }
@@ -0,0 +1,80 @@
1
+ import { AuthController, Entity, EntityCollection, Permissions, User } from "../types";
2
+
3
+ const DEFAULT_PERMISSIONS = {
4
+ read: true,
5
+ edit: true,
6
+ create: true,
7
+ delete: true
8
+ };
9
+
10
+ export function resolvePermissions<M extends Record<string, any>, UserType extends User>
11
+ (collection: EntityCollection<M>,
12
+ authController: AuthController<UserType>,
13
+ pathSegments: string[],
14
+ entity: Entity<M> | null): Permissions {
15
+
16
+ const permission = collection.permissions;
17
+ if (permission === undefined) {
18
+ return DEFAULT_PERMISSIONS;
19
+ } else if (typeof permission === "object") {
20
+ return permission as Permissions;
21
+ } else if (typeof permission === "function") {
22
+ return permission({
23
+ entity,
24
+ user: authController.user,
25
+ authController,
26
+ collection,
27
+ pathSegments
28
+ });
29
+ }
30
+ console.error("Permissions:", permission);
31
+ throw Error("New type of permission added and not mapped");
32
+ }
33
+
34
+ export function canEditEntity<M extends Record<string, any>, UserType extends User>
35
+ (
36
+ collection: EntityCollection<M>,
37
+ authController: AuthController<UserType>,
38
+ paths: string[],
39
+ entity: Entity<M> | null): boolean {
40
+ return resolvePermissions(collection, authController, paths, entity).edit ?? DEFAULT_PERMISSIONS.edit;
41
+ }
42
+
43
+ export function canCreateEntity<M extends Record<string, any>, UserType extends User>
44
+ (
45
+ collection: EntityCollection<M>,
46
+ authController: AuthController<UserType>,
47
+ paths: string[],
48
+ entity: Entity<M> | null): boolean {
49
+ return resolvePermissions(collection, authController, paths, entity).create ?? DEFAULT_PERMISSIONS.create;
50
+ }
51
+
52
+ export function canDeleteEntity<M extends Record<string, any>, UserType extends User>
53
+ (
54
+ collection: EntityCollection<M>,
55
+ authController: AuthController<UserType>,
56
+ paths: string[],
57
+ entity: Entity<M> | null): boolean {
58
+ return resolvePermissions(collection, authController, paths, entity).delete ?? DEFAULT_PERMISSIONS.delete;
59
+ }
60
+
61
+ // export function resolveCollectionsPermissions(roles: Role[]): Record<string, Permissions> {
62
+ // const collectionIds = Array.from(new Set(roles.flatMap(role => Object.keys(role.collections))));
63
+ // return collectionIds
64
+ // .map((colId) => {
65
+ // const rolesWithCollection = roles.filter((role) => colId in Object.keys(role.collections));
66
+ // return {
67
+ // [colId]: rolesWithCollection
68
+ // .map(role => role.collections[colId])
69
+ // .reduce((permA, permB) => {
70
+ // return {
71
+ // read: permA.read ?? permB.read ?? false,
72
+ // create: permA.create ?? permB.create ?? false,
73
+ // edit: permA.edit ?? permB.edit ?? false,
74
+ // delete: permA.delete ?? permB.delete ?? false
75
+ // };
76
+ // })
77
+ // };
78
+ // })
79
+ // .reduce((a, b) => ({ ...a, ...b }), {});
80
+ // }
@@ -0,0 +1,190 @@
1
+ /**
2
+ * Returns the plural of an English word.
3
+ *
4
+ * @export
5
+ * @param {string} word
6
+ * @param {number} [amount]
7
+ * @returns {string}
8
+ */
9
+ export function plural(word: string, amount?: number): string {
10
+ if (amount !== undefined && amount === 1) {
11
+ return word
12
+ }
13
+ const plurals: { [key: string]: string } = {
14
+ "(quiz)$": "$1zes",
15
+ "^(ox)$": "$1en",
16
+ "([m|l])ouse$": "$1ice",
17
+ "(matr|vert|ind)ix|ex$": "$1ices",
18
+ "(x|ch|ss|sh)$": "$1es",
19
+ "([^aeiouy]|qu)y$": "$1ies",
20
+ "(hive)$": "$1s",
21
+ "(?:([^f])fe|([lr])f)$": "$1$2ves",
22
+ "(shea|lea|loa|thie)f$": "$1ves",
23
+ sis$: "ses",
24
+ "([ti])um$": "$1a",
25
+ "(tomat|potat|ech|her|vet)o$": "$1oes",
26
+ "(bu)s$": "$1ses",
27
+ "(alias)$": "$1es",
28
+ "(octop)us$": "$1i",
29
+ "(ax|test)is$": "$1es",
30
+ "(us)$": "$1es",
31
+ "([^s]+)$": "$1s"
32
+ }
33
+ const irregular: { [key: string]: string } = {
34
+ move: "moves",
35
+ foot: "feet",
36
+ goose: "geese",
37
+ sex: "sexes",
38
+ child: "children",
39
+ man: "men",
40
+ tooth: "teeth",
41
+ person: "people"
42
+ }
43
+ const uncountable: string[] = [
44
+ "sheep",
45
+ "fish",
46
+ "deer",
47
+ "moose",
48
+ "series",
49
+ "species",
50
+ "money",
51
+ "rice",
52
+ "information",
53
+ "equipment",
54
+ "bison",
55
+ "cod",
56
+ "offspring",
57
+ "pike",
58
+ "salmon",
59
+ "shrimp",
60
+ "swine",
61
+ "trout",
62
+ "aircraft",
63
+ "hovercraft",
64
+ "spacecraft",
65
+ "sugar",
66
+ "tuna",
67
+ "you",
68
+ "wood"
69
+ ]
70
+ // save some time in the case that singular and plural are the same
71
+ if (uncountable.indexOf(word.toLowerCase()) >= 0) {
72
+ return word;
73
+ }
74
+ // check for irregular forms
75
+ for (const w in irregular) {
76
+ const pattern = new RegExp(`${w}$`, "i")
77
+ const replace = irregular[w]
78
+ if (pattern.test(word)) {
79
+ return word.replace(pattern, replace);
80
+ }
81
+ }
82
+ // check for matches using regular expressions
83
+ for (const reg in plurals) {
84
+ const pattern = new RegExp(reg, "i")
85
+ if (pattern.test(word)) {
86
+ return word.replace(pattern, plurals[reg])
87
+ }
88
+ }
89
+ return word;
90
+ }
91
+
92
+ /**
93
+ * Returns the singular of an English word.
94
+ *
95
+ * @export
96
+ * @param {string} word
97
+ * @param {number} [amount]
98
+ * @returns {string}
99
+ */
100
+ export function singular(word: string, amount?: number): string {
101
+ if (amount !== undefined && amount !== 1) {
102
+ return word;
103
+ }
104
+ const singulars: { [key: string]: string } = {
105
+ "(quiz)zes$": "$1",
106
+ "(matr)ices$": "$1ix",
107
+ "(vert|ind)ices$": "$1ex",
108
+ "^(ox)en$": "$1",
109
+ "(alias)es$": "$1",
110
+ "(octop|vir)i$": "$1us",
111
+ "(cris|ax|test)es$": "$1is",
112
+ "(shoe)s$": "$1",
113
+ "(o)es$": "$1",
114
+ "(bus)es$": "$1",
115
+ "([m|l])ice$": "$1ouse",
116
+ "(x|ch|ss|sh)es$": "$1",
117
+ "(m)ovies$": "$1ovie",
118
+ "(s)eries$": "$1eries",
119
+ "([^aeiouy]|qu)ies$": "$1y",
120
+ "([lr])ves$": "$1f",
121
+ "(tive)s$": "$1",
122
+ "(hive)s$": "$1",
123
+ "(li|wi|kni)ves$": "$1fe",
124
+ "(shea|loa|lea|thie)ves$": "$1f",
125
+ "(^analy)ses$": "$1sis",
126
+ "((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$": "$1$2sis",
127
+ "([ti])a$": "$1um",
128
+ "(n)ews$": "$1ews",
129
+ "(h|bl)ouses$": "$1ouse",
130
+ "(corpse)s$": "$1",
131
+ "(us)es$": "$1",
132
+ s$: ""
133
+ }
134
+ const irregular: { [key: string]: string } = {
135
+ move: "moves",
136
+ foot: "feet",
137
+ goose: "geese",
138
+ sex: "sexes",
139
+ child: "children",
140
+ man: "men",
141
+ tooth: "teeth",
142
+ person: "people"
143
+ }
144
+ const uncountable: string[] = [
145
+ "sheep",
146
+ "fish",
147
+ "deer",
148
+ "moose",
149
+ "series",
150
+ "species",
151
+ "money",
152
+ "rice",
153
+ "information",
154
+ "equipment",
155
+ "bison",
156
+ "cod",
157
+ "offspring",
158
+ "pike",
159
+ "salmon",
160
+ "shrimp",
161
+ "swine",
162
+ "trout",
163
+ "aircraft",
164
+ "hovercraft",
165
+ "spacecraft",
166
+ "sugar",
167
+ "tuna",
168
+ "you",
169
+ "wood"
170
+ ]
171
+ // save some time in the case that singular and plural are the same
172
+ if (uncountable.indexOf(word.toLowerCase()) >= 0) {
173
+ return word;
174
+ }
175
+ // check for irregular forms
176
+ for (const w in irregular) {
177
+ const pattern = new RegExp(`${irregular[w]}$`, "i");
178
+ if (pattern.test(word)) {
179
+ return word.replace(pattern, w);
180
+ }
181
+ }
182
+ // check for matches using regular expressions
183
+ for (const reg in singulars) {
184
+ const pattern = new RegExp(reg, "i");
185
+ if (pattern.test(word)) {
186
+ return word.replace(pattern, singulars[reg]);
187
+ }
188
+ }
189
+ return word;
190
+ }
@@ -0,0 +1,130 @@
1
+ import React from "react";
2
+
3
+ import { EntityCollection, PropertiesOrBuilders, PropertyConfig, PropertyOrBuilder, ResolvedProperty } from "../types";
4
+ import { isPropertyBuilder } from "./entities";
5
+ import { resolveProperty } from "./resolutions";
6
+ import { CircleIcon, FunctionsIcon } from "@firecms/ui";
7
+ import { getFieldConfig } from "../core";
8
+
9
+ export function isReferenceProperty(propertyOrBuilder: PropertyOrBuilder,
10
+ fields: Record<string, PropertyConfig>) {
11
+ const resolvedProperty = resolveProperty({
12
+ propertyKey: "ignore", // TODO
13
+ propertyOrBuilder,
14
+ fields
15
+ });
16
+ if (!resolvedProperty) return null;
17
+ if (resolvedProperty.dataType === "reference") {
18
+ return true;
19
+ }
20
+ if (resolvedProperty.dataType === "array") {
21
+ if (Array.isArray(resolvedProperty.of)) return false;
22
+ else return resolvedProperty.of?.dataType === "reference"
23
+ }
24
+ return false;
25
+ }
26
+
27
+ export function getIdIcon(size: "small" | "medium" | "large"): React.ReactNode {
28
+ return <CircleIcon size={size}/>;
29
+ }
30
+
31
+ export function getIconForWidget(widget: PropertyConfig | undefined,
32
+ size: "small" | "medium" | "large") {
33
+ const Icon = widget?.Icon ?? CircleIcon;
34
+ return <Icon size={size}/>;
35
+ }
36
+
37
+ export function getIconForProperty(
38
+ property: PropertyOrBuilder | ResolvedProperty,
39
+ size: "small" | "medium" | "large" = "small",
40
+ fields: Record<string, PropertyConfig> = {}
41
+ ): React.ReactNode {
42
+
43
+ if (isPropertyBuilder(property)) {
44
+ return <FunctionsIcon size={size}/>;
45
+ } else {
46
+ const widget = getFieldConfig(property, fields);
47
+ return getIconForWidget(widget, size);
48
+ }
49
+ }
50
+
51
+ export function getColorForProperty(property: PropertyOrBuilder, fields: Record<string, PropertyConfig>): string {
52
+ if (isPropertyBuilder(property)) {
53
+ return "#888";
54
+ } else {
55
+ const widget = getFieldConfig(property, fields);
56
+ return widget?.color ?? "#666";
57
+ }
58
+ }
59
+
60
+ /**
61
+ * Get a property in a property tree from a path like
62
+ * `address.street`
63
+ * @param properties
64
+ * @param path
65
+ */
66
+ export function getPropertyInPath<M extends Record<string, any>>(properties: PropertiesOrBuilders<M>, path: string): PropertyOrBuilder<any, M> | undefined {
67
+ if (typeof properties === "object") {
68
+ if (path in properties) {
69
+ return properties[path];
70
+ }
71
+ if (path.includes(".")) {
72
+ const pathSegments = path.split(".");
73
+ const childProperty = properties[pathSegments[0]];
74
+ if (typeof childProperty === "object" && childProperty.dataType === "map" && childProperty.properties) {
75
+ return getPropertyInPath(childProperty.properties, pathSegments.slice(1).join("."))
76
+ }
77
+ }
78
+ }
79
+ return undefined;
80
+ }
81
+
82
+ export function getResolvedPropertyInPath(properties: Record<string, ResolvedProperty>, path: string): ResolvedProperty | undefined {
83
+ if (typeof properties === "object") {
84
+ if (path in properties) {
85
+ return properties[path];
86
+ }
87
+ if (path.includes(".")) {
88
+ const pathSegments = path.split(".");
89
+ const childProperty = properties[pathSegments[0]];
90
+ if (childProperty.dataType === "map" && childProperty.properties) {
91
+ return getResolvedPropertyInPath(childProperty.properties, pathSegments.slice(1).join("."))
92
+ }
93
+ }
94
+ }
95
+ return undefined;
96
+ }
97
+
98
+ // replace the dot notation with brackets
99
+ // address.street => address[street]
100
+ export function getBracketNotation(path: string): string {
101
+ return path.replace(/\.([^.]*)/g, "[$1]");
102
+ }
103
+
104
+ /**
105
+ * Get properties exclusively indexed by their order
106
+ * @param properties
107
+ * @param propertiesOrder
108
+ */
109
+ export function getPropertiesWithPropertiesOrder<M extends Record<string, any>>(properties: PropertiesOrBuilders<M>, propertiesOrder?: Extract<keyof M, string>[]): PropertiesOrBuilders<M> {
110
+ if (!propertiesOrder) return properties;
111
+ const result: PropertiesOrBuilders<any> = {};
112
+ propertiesOrder.filter(Boolean).forEach(path => {
113
+ const property = getPropertyInPath(properties, path);
114
+ if (typeof property === "object" && property.dataType === "map" && property.properties) {
115
+ result[path] = {
116
+ ...property,
117
+ properties: getPropertiesWithPropertiesOrder(property.properties, property.propertiesOrder ?? [])
118
+ }
119
+ }
120
+ if (property) {
121
+ result[path] = property;
122
+ }
123
+ });
124
+ return result;
125
+ }
126
+
127
+ export function getDefaultPropertiesOrder(collection: EntityCollection<any>): string[] {
128
+ if (collection.propertiesOrder) return collection.propertiesOrder;
129
+ return [...Object.keys(collection.properties), ...(collection.additionalFields ?? []).map(field => field.key)];
130
+ }
@@ -0,0 +1,20 @@
1
+ import { EntityCollection, PropertyConfig } from "../types";
2
+ import { isReferenceProperty } from "./property_utils";
3
+ import { isPropertyBuilder } from "./entities";
4
+
5
+ export function getReferencePreviewKeys(targetCollection: EntityCollection<any>,
6
+ fields: Record<string, PropertyConfig>,
7
+ previewProperties?: string[],
8
+ limit = 3) {
9
+ const allProperties = Object.keys(targetCollection.properties);
10
+ let listProperties = previewProperties?.filter(p => allProperties.includes(p as string));
11
+ if (listProperties && listProperties.length > 0) {
12
+ return listProperties;
13
+ } else {
14
+ listProperties = allProperties;
15
+ return listProperties.filter(key => {
16
+ const propertyOrBuilder = targetCollection.properties[key];
17
+ return propertyOrBuilder && !isPropertyBuilder(propertyOrBuilder) && !isReferenceProperty(propertyOrBuilder, fields);
18
+ }).slice(0, limit);
19
+ }
20
+ }
@@ -0,0 +1,32 @@
1
+ export function serializeRegExp(input: RegExp): string {
2
+ if (!input) return "";
3
+ // const fragments = input.toString().match(/\/(.*?)\/([a-z]*)?$/i);
4
+ // if (fragments) {
5
+ // if (fragments[2])
6
+ // return input.toString();
7
+ // return fragments[1];
8
+ // }
9
+ return input.toString();
10
+ }
11
+
12
+ /**
13
+ * Get a RegExp out of a serialized string
14
+ * @param input
15
+ */
16
+ export function hydrateRegExp(input?: string): RegExp | undefined {
17
+ if (!input) return undefined;
18
+ const fragments = input.match(/\/(.*?)\/([a-z]*)?$/i);
19
+ if (fragments) {
20
+ return new RegExp(fragments[1], fragments[2] || "");
21
+ } else {
22
+ return new RegExp(input, "");
23
+ }
24
+ }
25
+
26
+ export function isValidRegExp(input: string): boolean {
27
+ const fullRegexp = input.match(/\/((?![*+?])(?:[^\r\n[/\\]|\\.|\[(?:[^\r\n\]\\]|\\.)*])+)\/((?:g(?:im?|mi?)?|i(?:gm?|mg?)?|m(?:gi?|ig?)?)?)/);
28
+ if (fullRegexp)
29
+ return true;
30
+ const simpleRegexp = input.match(/((?![*+?])(?:[^\r\n[/\\]|\\.|\[(?:[^\r\n\]\\]|\\.)*])+)/);
31
+ return !!simpleRegexp;
32
+ }