@firecms/core 3.0.0 → 3.1.0-canary.02232f4

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 (340) hide show
  1. package/README.md +1 -1
  2. package/dist/components/AIIcon.d.ts +16 -0
  3. package/dist/components/EntityCollectionTable/EntityCollectionRowActions.d.ts +7 -1
  4. package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +1 -1
  5. package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +14 -0
  6. package/dist/components/EntityCollectionTable/PropertyTableCell.d.ts +6 -0
  7. package/dist/components/EntityCollectionTable/internal/CollectionTableToolbar.d.ts +5 -4
  8. package/dist/components/EntityCollectionTable/internal/EntityTableCell.d.ts +6 -0
  9. package/dist/components/EntityCollectionTable/internal/popup_field/useDraggable.d.ts +2 -2
  10. package/dist/components/EntityCollectionView/Board.d.ts +2 -0
  11. package/dist/components/EntityCollectionView/BoardColumn.d.ts +42 -0
  12. package/dist/components/EntityCollectionView/BoardColumnTitle.d.ts +9 -0
  13. package/dist/components/EntityCollectionView/BoardSortableList.d.ts +14 -0
  14. package/dist/components/EntityCollectionView/CollectionDataErrorBanner.d.ts +4 -0
  15. package/dist/components/EntityCollectionView/EntityBoardCard.d.ts +26 -0
  16. package/dist/components/EntityCollectionView/EntityCard.d.ts +19 -0
  17. package/dist/components/EntityCollectionView/EntityCollectionBoardView.d.ts +20 -0
  18. package/dist/components/EntityCollectionView/EntityCollectionCardView.d.ts +31 -0
  19. package/dist/components/EntityCollectionView/EntityCollectionViewActions.d.ts +2 -2
  20. package/dist/components/EntityCollectionView/EntityCollectionViewStartActions.d.ts +7 -3
  21. package/dist/components/EntityCollectionView/FiltersDialog.d.ts +14 -0
  22. package/dist/components/EntityCollectionView/ViewModeToggle.d.ts +44 -0
  23. package/dist/components/EntityCollectionView/board_types.d.ts +105 -0
  24. package/dist/components/EntityCollectionView/useBoardDataController.d.ts +60 -0
  25. package/dist/components/ErrorBoundary.d.ts +4 -2
  26. package/dist/components/HomePage/DefaultHomePage.d.ts +0 -1
  27. package/dist/components/LanguageToggle.d.ts +1 -0
  28. package/dist/components/SelectableTable/SelectableTable.d.ts +5 -1
  29. package/dist/components/SelectableTable/filters/DateTimeFilterField.d.ts +2 -1
  30. package/dist/components/UnsavedChangesDialog.d.ts +1 -0
  31. package/dist/components/VirtualTable/VirtualTable.performance.test.d.ts +1 -0
  32. package/dist/components/VirtualTable/VirtualTableCell.d.ts +6 -0
  33. package/dist/components/VirtualTable/VirtualTableHeader.d.ts +4 -1
  34. package/dist/components/VirtualTable/VirtualTableHeaderRow.d.ts +1 -1
  35. package/dist/components/VirtualTable/VirtualTableProps.d.ts +17 -1
  36. package/dist/components/VirtualTable/fields/VirtualTableDateField.d.ts +1 -0
  37. package/dist/components/VirtualTable/types.d.ts +3 -0
  38. package/dist/components/index.d.ts +4 -0
  39. package/dist/contexts/index.d.ts +10 -0
  40. package/dist/core/DrawerNavigationGroup.d.ts +45 -0
  41. package/dist/core/index.d.ts +1 -0
  42. package/dist/editor/components/SlashCommandMenu.d.ts +6 -0
  43. package/dist/editor/components/editor-bubble-item.d.ts +8 -0
  44. package/dist/editor/components/editor-bubble.d.ts +8 -0
  45. package/dist/editor/components/image-bubble.d.ts +5 -0
  46. package/dist/editor/components/index.d.ts +16 -0
  47. package/dist/editor/components/table-bubble.d.ts +5 -0
  48. package/dist/editor/editor.d.ts +30 -0
  49. package/dist/editor/extensions/HighlightDecorationExtension.d.ts +24 -0
  50. package/dist/editor/extensions/Image/index.d.ts +6 -0
  51. package/dist/editor/extensions/Image.d.ts +6 -0
  52. package/dist/editor/extensions/TextLoadingDecorationExtension.d.ts +16 -0
  53. package/dist/editor/extensions/clipboard.d.ts +7 -0
  54. package/dist/editor/extensions/custom-keymap.d.ts +1 -0
  55. package/dist/editor/extensions/drag-and-drop.d.ts +9 -0
  56. package/dist/editor/hooks/useProseMirror.d.ts +13 -0
  57. package/dist/editor/hooks/useProseMirrorContext.d.ts +9 -0
  58. package/dist/editor/index.d.ts +2 -0
  59. package/dist/editor/markdown.d.ts +5 -0
  60. package/dist/editor/nodeViews/ImageComponent.d.ts +3 -0
  61. package/dist/editor/nodeViews/ReactNodeView.d.ts +29 -0
  62. package/dist/editor/nodeViews/TaskItemComponent.d.ts +3 -0
  63. package/dist/editor/nodeViews/index.d.ts +6 -0
  64. package/dist/editor/plugins/index.d.ts +2 -0
  65. package/dist/editor/plugins/inputrules.d.ts +6 -0
  66. package/dist/editor/plugins/placeholderPlugin.d.ts +3 -0
  67. package/dist/editor/plugins/slashCommandPlugin.d.ts +12 -0
  68. package/dist/editor/schema.d.ts +2 -0
  69. package/dist/editor/selectors/ai-selector.d.ts +0 -0
  70. package/dist/editor/selectors/color-selector.d.ts +10 -0
  71. package/dist/editor/selectors/link-selector.d.ts +8 -0
  72. package/dist/editor/selectors/node-selector.d.ts +15 -0
  73. package/dist/editor/selectors/text-buttons.d.ts +1 -0
  74. package/dist/editor/types.d.ts +5 -0
  75. package/dist/editor/useProseMirror.d.ts +16 -0
  76. package/dist/editor/utils/prosemirror-utils.d.ts +6 -0
  77. package/dist/editor/utils/remove_classes.d.ts +1 -0
  78. package/dist/editor/utils/useDebouncedCallback.d.ts +1 -0
  79. package/dist/form/components/ErrorFocus.d.ts +1 -1
  80. package/dist/form/components/LocalChangesMenu.d.ts +2 -2
  81. package/dist/form/components/StorageUploadProgress.d.ts +1 -1
  82. package/dist/form/field_bindings/MapFieldBinding.d.ts +1 -1
  83. package/dist/form/field_bindings/MarkdownEditorFieldBinding.d.ts +1 -1
  84. package/dist/form/validation.d.ts +3 -2
  85. package/dist/hooks/index.d.ts +1 -0
  86. package/dist/hooks/useBreadcrumbsController.d.ts +16 -0
  87. package/dist/hooks/useBuildNavigationController.d.ts +0 -1
  88. package/dist/hooks/useCollapsedGroups.d.ts +6 -3
  89. package/dist/hooks/useTranslation.d.ts +17 -0
  90. package/dist/i18n/FireCMSi18nProvider.d.ts +33 -0
  91. package/dist/index.d.ts +5 -0
  92. package/dist/index.es.js +31028 -16080
  93. package/dist/index.es.js.map +1 -1
  94. package/dist/index.umd.js +29955 -15028
  95. package/dist/index.umd.js.map +1 -1
  96. package/dist/internal/useRestoreScroll.d.ts +1 -1
  97. package/dist/locales/de.d.ts +2 -0
  98. package/dist/locales/en.d.ts +10 -0
  99. package/dist/locales/es.d.ts +10 -0
  100. package/dist/locales/fr.d.ts +2 -0
  101. package/dist/locales/hi.d.ts +2 -0
  102. package/dist/locales/it.d.ts +2 -0
  103. package/dist/locales/pt.d.ts +7 -0
  104. package/dist/preview/PropertyPreviewProps.d.ts +5 -0
  105. package/dist/preview/components/DatePreview.d.ts +13 -3
  106. package/dist/preview/components/ImagePreview.d.ts +5 -1
  107. package/dist/preview/components/StorageThumbnail.d.ts +2 -1
  108. package/dist/preview/components/UrlComponentPreview.d.ts +2 -1
  109. package/dist/preview/property_previews/ArrayOfStorageComponentsPreview.d.ts +1 -1
  110. package/dist/preview/property_previews/ArrayOfStringsPreview.d.ts +1 -1
  111. package/dist/preview/property_previews/SkeletonPropertyComponent.d.ts +1 -1
  112. package/dist/types/analytics.d.ts +1 -1
  113. package/dist/types/collections.d.ts +88 -2
  114. package/dist/types/customization_controller.d.ts +2 -1
  115. package/dist/types/datasource.d.ts +0 -1
  116. package/dist/types/entities.d.ts +1 -0
  117. package/dist/types/firecms.d.ts +2 -1
  118. package/dist/types/index.d.ts +1 -0
  119. package/dist/types/navigation.d.ts +2 -2
  120. package/dist/types/plugins.d.ts +69 -1
  121. package/dist/types/properties.d.ts +277 -12
  122. package/dist/types/storage.d.ts +9 -0
  123. package/dist/types/translations.d.ts +669 -0
  124. package/dist/util/__tests__/conditions.test.d.ts +1 -0
  125. package/dist/util/__tests__/objects.test.d.ts +1 -0
  126. package/dist/util/conditions.d.ts +26 -0
  127. package/dist/util/entities.d.ts +2 -3
  128. package/dist/util/index.d.ts +3 -1
  129. package/dist/util/lazy_eager.d.ts +7 -0
  130. package/dist/util/objects.d.ts +1 -0
  131. package/dist/util/property_utils.d.ts +2 -1
  132. package/dist/util/resolutions.d.ts +3 -3
  133. package/dist/util/useStorageUploadController.d.ts +11 -2
  134. package/package.json +52 -12
  135. package/src/app/Scaffold.tsx +20 -19
  136. package/src/components/AIIcon.tsx +41 -0
  137. package/src/components/ArrayContainer.tsx +7 -8
  138. package/src/components/ClearFilterSortButton.tsx +25 -19
  139. package/src/components/ConfirmationDialog.tsx +4 -4
  140. package/src/components/DeleteEntityDialog.tsx +12 -11
  141. package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +82 -43
  142. package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +130 -79
  143. package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +121 -104
  144. package/src/components/EntityCollectionTable/PropertyTableCell.tsx +132 -103
  145. package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +6 -3
  146. package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +24 -44
  147. package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +90 -49
  148. package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +1 -1
  149. package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +3 -2
  150. package/src/components/EntityCollectionTable/internal/popup_field/useDraggable.tsx +11 -11
  151. package/src/components/EntityCollectionView/Board.tsx +324 -0
  152. package/src/components/EntityCollectionView/BoardColumn.tsx +158 -0
  153. package/src/components/EntityCollectionView/BoardColumnTitle.tsx +45 -0
  154. package/src/components/EntityCollectionView/BoardSortableList.tsx +174 -0
  155. package/src/components/EntityCollectionView/CollectionDataErrorBanner.tsx +43 -0
  156. package/src/components/EntityCollectionView/EntityBoardCard.tsx +212 -0
  157. package/src/components/EntityCollectionView/EntityCard.tsx +235 -0
  158. package/src/components/EntityCollectionView/EntityCollectionBoardView.tsx +706 -0
  159. package/src/components/EntityCollectionView/EntityCollectionCardView.tsx +236 -0
  160. package/src/components/EntityCollectionView/EntityCollectionView.tsx +531 -209
  161. package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +35 -22
  162. package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +86 -15
  163. package/src/components/EntityCollectionView/FiltersDialog.tsx +252 -0
  164. package/src/components/EntityCollectionView/ViewModeToggle.tsx +202 -0
  165. package/src/components/EntityCollectionView/board_types.ts +113 -0
  166. package/src/components/EntityCollectionView/useBoardDataController.tsx +490 -0
  167. package/src/components/EntityJsonPreview.tsx +2 -1
  168. package/src/components/EntityPreview.tsx +1 -1
  169. package/src/components/EntityView.tsx +3 -2
  170. package/src/components/ErrorBoundary.tsx +27 -15
  171. package/src/components/ErrorTooltip.tsx +2 -1
  172. package/src/components/HomePage/DefaultHomePage.tsx +65 -22
  173. package/src/components/HomePage/HomePageDnD.tsx +59 -42
  174. package/src/components/HomePage/NavigationCard.tsx +20 -18
  175. package/src/components/HomePage/NavigationGroup.tsx +20 -17
  176. package/src/components/HomePage/RenameGroupDialog.tsx +15 -15
  177. package/src/components/HomePage/SmallNavigationCard.tsx +10 -9
  178. package/src/components/LanguageToggle.tsx +66 -0
  179. package/src/components/NotFoundPage.tsx +5 -3
  180. package/src/components/ReferenceTable/ReferenceSelectionTable.tsx +12 -17
  181. package/src/components/ReferenceWidget.tsx +5 -6
  182. package/src/components/SearchIconsView.tsx +3 -1
  183. package/src/components/SelectableTable/SelectableTable.tsx +75 -67
  184. package/src/components/SelectableTable/filters/BooleanFilterField.tsx +7 -6
  185. package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +50 -40
  186. package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +53 -40
  187. package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +60 -58
  188. package/src/components/UnsavedChangesDialog.tsx +6 -6
  189. package/src/components/UserDisplay.tsx +4 -4
  190. package/src/components/VirtualTable/VirtualTable.performance.test.tsx +387 -0
  191. package/src/components/VirtualTable/VirtualTable.tsx +277 -121
  192. package/src/components/VirtualTable/VirtualTableCell.tsx +18 -2
  193. package/src/components/VirtualTable/VirtualTableHeader.tsx +76 -64
  194. package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +163 -42
  195. package/src/components/VirtualTable/VirtualTableProps.tsx +21 -2
  196. package/src/components/VirtualTable/VirtualTableRow.tsx +1 -1
  197. package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +3 -0
  198. package/src/components/VirtualTable/fields/VirtualTableSelect.tsx +19 -6
  199. package/src/components/VirtualTable/types.tsx +3 -0
  200. package/src/components/common/default_entity_actions.tsx +4 -0
  201. package/src/components/common/useColumnsIds.tsx +95 -3
  202. package/src/components/common/useDataSourceTableController.tsx +12 -4
  203. package/src/components/index.tsx +5 -0
  204. package/src/contexts/BreacrumbsContext.tsx +15 -8
  205. package/src/contexts/index.ts +10 -0
  206. package/src/core/DefaultAppBar.tsx +49 -32
  207. package/src/core/DefaultDrawer.tsx +49 -57
  208. package/src/core/DrawerNavigationGroup.tsx +120 -0
  209. package/src/core/DrawerNavigationItem.tsx +4 -3
  210. package/src/core/EntityEditView.tsx +94 -50
  211. package/src/core/EntityEditViewFormActions.tsx +24 -17
  212. package/src/core/EntitySidePanel.tsx +34 -30
  213. package/src/core/FireCMS.tsx +33 -6
  214. package/src/core/SideDialogs.tsx +4 -2
  215. package/src/core/field_configs.tsx +18 -11
  216. package/src/core/index.tsx +1 -0
  217. package/src/editor/components/SlashCommandMenu.tsx +516 -0
  218. package/src/editor/components/editor-bubble-item.tsx +32 -0
  219. package/src/editor/components/editor-bubble.tsx +118 -0
  220. package/src/editor/components/image-bubble.tsx +156 -0
  221. package/src/editor/components/index.ts +14 -0
  222. package/src/editor/components/table-bubble.tsx +165 -0
  223. package/src/editor/editor.tsx +455 -0
  224. package/src/editor/extensions/HighlightDecorationExtension.ts +114 -0
  225. package/src/editor/extensions/Image/index.ts +133 -0
  226. package/src/editor/extensions/Image.ts +159 -0
  227. package/src/editor/extensions/TextLoadingDecorationExtension.tsx +107 -0
  228. package/src/editor/extensions/clipboard.ts +72 -0
  229. package/src/editor/extensions/custom-keymap.ts +24 -0
  230. package/src/editor/extensions/drag-and-drop.tsx +480 -0
  231. package/src/editor/hooks/useProseMirror.ts +124 -0
  232. package/src/editor/hooks/useProseMirrorContext.ts +15 -0
  233. package/src/editor/index.ts +2 -0
  234. package/src/editor/markdown.ts +172 -0
  235. package/src/editor/nodeViews/ImageComponent.tsx +20 -0
  236. package/src/editor/nodeViews/ReactNodeView.tsx +89 -0
  237. package/src/editor/nodeViews/TaskItemComponent.tsx +29 -0
  238. package/src/editor/nodeViews/index.ts +35 -0
  239. package/src/editor/plugins/index.ts +58 -0
  240. package/src/editor/plugins/inputrules.ts +82 -0
  241. package/src/editor/plugins/placeholderPlugin.ts +55 -0
  242. package/src/editor/plugins/slashCommandPlugin.ts +61 -0
  243. package/src/editor/schema.ts +240 -0
  244. package/src/editor/selectors/ai-selector.tsx +111 -0
  245. package/src/editor/selectors/color-selector.tsx +200 -0
  246. package/src/editor/selectors/link-selector.tsx +118 -0
  247. package/src/editor/selectors/node-selector.tsx +157 -0
  248. package/src/editor/selectors/text-buttons.tsx +86 -0
  249. package/src/editor/types.ts +6 -0
  250. package/src/editor/useProseMirror.ts +126 -0
  251. package/src/editor/utils/prosemirror-utils.ts +108 -0
  252. package/src/editor/utils/remove_classes.ts +17 -0
  253. package/src/editor/utils/useDebouncedCallback.ts +25 -0
  254. package/src/form/EntityForm.tsx +150 -75
  255. package/src/form/EntityFormActions.tsx +19 -12
  256. package/src/form/PropertyFieldBinding.tsx +68 -51
  257. package/src/form/components/ErrorFocus.tsx +3 -3
  258. package/src/form/components/LocalChangesMenu.tsx +19 -19
  259. package/src/form/components/StorageItemPreview.tsx +5 -3
  260. package/src/form/components/StorageUploadProgress.tsx +22 -6
  261. package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +18 -5
  262. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +22 -10
  263. package/src/form/field_bindings/BlockFieldBinding.tsx +26 -9
  264. package/src/form/field_bindings/DateTimeFieldBinding.tsx +18 -17
  265. package/src/form/field_bindings/KeyValueFieldBinding.tsx +46 -25
  266. package/src/form/field_bindings/MapFieldBinding.tsx +88 -70
  267. package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +93 -52
  268. package/src/form/field_bindings/MultiSelectFieldBinding.tsx +15 -1
  269. package/src/form/field_bindings/ReferenceAsStringFieldBinding.tsx +25 -11
  270. package/src/form/field_bindings/ReferenceFieldBinding.tsx +25 -11
  271. package/src/form/field_bindings/RepeatFieldBinding.tsx +21 -6
  272. package/src/form/field_bindings/SelectFieldBinding.tsx +7 -5
  273. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +110 -92
  274. package/src/form/field_bindings/SwitchFieldBinding.tsx +31 -14
  275. package/src/form/field_bindings/TextFieldBinding.tsx +77 -38
  276. package/src/form/field_bindings/UserSelectFieldBinding.tsx +7 -5
  277. package/src/form/validation.ts +245 -160
  278. package/src/hooks/index.tsx +1 -0
  279. package/src/hooks/useBreadcrumbsController.tsx +18 -0
  280. package/src/hooks/useBuildNavigationController.tsx +91 -41
  281. package/src/hooks/useCollapsedGroups.ts +18 -9
  282. package/src/hooks/useTranslation.ts +31 -0
  283. package/src/hooks/useValidateAuthenticator.tsx +1 -1
  284. package/src/i18n/FireCMSi18nProvider.tsx +160 -0
  285. package/src/index.ts +5 -0
  286. package/src/internal/useBuildDataSource.ts +68 -34
  287. package/src/internal/useBuildSideDialogsController.tsx +11 -8
  288. package/src/internal/useBuildSideEntityController.tsx +24 -24
  289. package/src/internal/useRestoreScroll.tsx +26 -14
  290. package/src/locales/de.ts +718 -0
  291. package/src/locales/en.ts +730 -0
  292. package/src/locales/es.ts +730 -0
  293. package/src/locales/fr.ts +718 -0
  294. package/src/locales/hi.ts +718 -0
  295. package/src/locales/it.ts +718 -0
  296. package/src/locales/pt.ts +727 -0
  297. package/src/preview/PropertyPreview.tsx +43 -33
  298. package/src/preview/PropertyPreviewProps.tsx +6 -0
  299. package/src/preview/components/DatePreview.tsx +72 -4
  300. package/src/preview/components/EmptyValue.tsx +1 -1
  301. package/src/preview/components/ImagePreview.tsx +37 -21
  302. package/src/preview/components/ReferencePreview.tsx +8 -2
  303. package/src/preview/components/StorageThumbnail.tsx +16 -12
  304. package/src/preview/components/UrlComponentPreview.tsx +32 -27
  305. package/src/preview/components/UserPreview.tsx +3 -1
  306. package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +9 -7
  307. package/src/preview/property_previews/ArrayOfStringsPreview.tsx +11 -9
  308. package/src/preview/property_previews/ArrayPropertyPreview.tsx +26 -24
  309. package/src/preview/property_previews/MapPropertyPreview.tsx +49 -27
  310. package/src/preview/property_previews/SkeletonPropertyComponent.tsx +61 -56
  311. package/src/routes/CustomCMSRoute.tsx +1 -0
  312. package/src/routes/FireCMSRoute.tsx +87 -65
  313. package/src/types/analytics.ts +10 -0
  314. package/src/types/collections.ts +97 -3
  315. package/src/types/customization_controller.tsx +2 -1
  316. package/src/types/datasource.ts +54 -56
  317. package/src/types/entities.ts +10 -0
  318. package/src/types/firecms.tsx +2 -1
  319. package/src/types/index.ts +1 -0
  320. package/src/types/navigation.ts +2 -2
  321. package/src/types/plugins.tsx +77 -1
  322. package/src/types/properties.ts +369 -37
  323. package/src/types/storage.ts +11 -1
  324. package/src/types/translations.ts +752 -0
  325. package/src/util/__tests__/conditions.test.ts +506 -0
  326. package/src/util/__tests__/objects.test.ts +196 -0
  327. package/src/util/callbacks.ts +6 -3
  328. package/src/util/collections.ts +51 -6
  329. package/src/util/conditions.ts +339 -0
  330. package/src/util/entities.ts +29 -30
  331. package/src/util/entity_cache.ts +2 -1
  332. package/src/util/index.ts +3 -1
  333. package/src/util/join_collections.ts +10 -8
  334. package/src/util/lazy_eager.tsx +33 -0
  335. package/src/util/objects.ts +46 -13
  336. package/src/util/{references.ts → previews.ts} +16 -2
  337. package/src/util/property_utils.tsx +37 -11
  338. package/src/util/resolutions.ts +62 -58
  339. package/src/util/useStorageUploadController.tsx +34 -30
  340. /package/dist/util/{references.d.ts → previews.d.ts} +0 -0
@@ -1,6 +1,6 @@
1
1
  import React, { useState } from "react";
2
2
  import { VirtualTableWhereFilterOp } from "../../VirtualTable";
3
- import { Checkbox, DateTimeField, Label, Select, SelectItem } from "@firecms/ui";
3
+ import { DateTimeField, Select, SelectItem } from "@firecms/ui";
4
4
  import { useCustomizationController } from "../../../hooks";
5
5
 
6
6
  interface DateTimeFilterFieldProps {
@@ -10,9 +10,10 @@ interface DateTimeFilterFieldProps {
10
10
  setValue: (value?: [op: VirtualTableWhereFilterOp, newValue: any]) => void;
11
11
  isArray?: boolean;
12
12
  title?: string;
13
+ timezone?: string;
13
14
  }
14
15
 
15
- const operationLabels: Record<VirtualTableWhereFilterOp, string> = {
16
+ const operationLabels: Record<VirtualTableWhereFilterOp | "is-null", string> = {
16
17
  "==": "==",
17
18
  "!=": "!=",
18
19
  ">": ">",
@@ -22,30 +23,53 @@ const operationLabels: Record<VirtualTableWhereFilterOp, string> = {
22
23
  "not-in": "not in",
23
24
  in: "in",
24
25
  "array-contains": "Contains",
25
- "array-contains-any": "Any"
26
+ "array-contains-any": "Any",
27
+ "is-null": "Is null"
26
28
  };
27
29
 
28
30
  const multipleSelectOperations = ["array-contains-any", "in"];
29
31
 
30
32
  export function DateTimeFilterField({
31
- name,
32
- isArray,
33
- mode,
34
- value,
35
- setValue,
36
- title
37
- }: DateTimeFilterFieldProps) {
33
+ name,
34
+ isArray,
35
+ mode,
36
+ value,
37
+ setValue,
38
+ title,
39
+ timezone
40
+ }: DateTimeFilterFieldProps) {
38
41
 
39
42
  const { locale } = useCustomizationController();
40
- const possibleOperations: (keyof typeof operationLabels) [] = isArray
43
+ const possibleOperations: (keyof typeof operationLabels)[] = isArray
41
44
  ? ["array-contains"]
42
- : ["==", "!=", ">", "<", ">=", "<="];
45
+ : ["==", "!=", ">", "<", ">=", "<=", "is-null"];
43
46
 
44
47
  const [fieldOperation, fieldValue] = value || [possibleOperations[0], undefined];
45
- const [operation, setOperation] = useState<VirtualTableWhereFilterOp>(fieldOperation);
48
+ const [operation, setOperation] = useState<VirtualTableWhereFilterOp | "is-null">(fieldOperation === "==" && fieldValue === null ? "is-null" : fieldOperation);
46
49
  const [internalValue, setInternalValue] = useState<Date | null | undefined>(fieldValue);
47
50
 
48
- function updateFilter(op: VirtualTableWhereFilterOp, val: Date | undefined | null) {
51
+ React.useEffect(() => {
52
+ if (value) {
53
+ const [op, val] = value;
54
+ setOperation(op === "==" && val === null ? "is-null" : op);
55
+ setInternalValue(val);
56
+ } else {
57
+ setOperation(possibleOperations[0]);
58
+ setInternalValue(undefined);
59
+ }
60
+ }, [value, possibleOperations[0]]);
61
+
62
+ const isNullOperation = operation === "is-null";
63
+
64
+ function updateFilter(op: VirtualTableWhereFilterOp | "is-null", val: Date | undefined | null) {
65
+ // Handle "is null" operation
66
+ if (op === "is-null") {
67
+ setOperation(op);
68
+ setInternalValue(null);
69
+ setValue(["==", null]);
70
+ return;
71
+ }
72
+
49
73
  let newValue: Date | null | undefined = val;
50
74
  const prevOpIsArray = multipleSelectOperations.includes(operation);
51
75
  const newOpIsArray = multipleSelectOperations.includes(op);
@@ -73,15 +97,15 @@ export function DateTimeFilterField({
73
97
 
74
98
  return (
75
99
 
76
- <div className="flex w-[440px]">
77
- <div className="w-[80px]">
100
+ <div className="flex w-full">
101
+ <div className="w-[100px]">
78
102
  <Select value={operation}
79
- size={"large"}
80
- fullWidth={true}
81
- onValueChange={(value) => {
82
- updateFilter(value as VirtualTableWhereFilterOp, internalValue);
83
- }}
84
- renderValue={(op) => operationLabels[op as VirtualTableWhereFilterOp]}>
103
+ size={"medium"}
104
+ fullWidth={true}
105
+ onValueChange={(value) => {
106
+ updateFilter(value as VirtualTableWhereFilterOp | "is-null", internalValue);
107
+ }}
108
+ renderValue={(op) => operationLabels[op as keyof typeof operationLabels]}>
85
109
  {possibleOperations.map((op) => (
86
110
  <SelectItem key={op} value={op}>
87
111
  {operationLabels[op]}
@@ -94,31 +118,17 @@ export function DateTimeFilterField({
94
118
 
95
119
  <DateTimeField
96
120
  mode={mode}
97
- size={"large"}
121
+ size={"medium"}
98
122
  locale={locale}
99
- disabled={internalValue === null}
100
- value={internalValue ?? undefined}
123
+ timezone={timezone}
124
+ disabled={isNullOperation}
125
+ value={isNullOperation ? undefined : (internalValue ?? undefined)}
101
126
  onChange={(dateValue: Date | null) => {
102
127
  updateFilter(operation, dateValue === null ? undefined : dateValue);
103
128
  }}
104
129
  clearable={true}
105
130
  />
106
131
 
107
- <Label
108
- className="border cursor-pointer rounded-md p-2 flex items-center gap-2 [&:has(:checked)]:bg-surface-100 dark:[&:has(:checked)]:bg-surface-800"
109
- htmlFor="null-filter"
110
- >
111
- <Checkbox id="null-filter"
112
- checked={internalValue === null}
113
- size={"small"}
114
- onCheckedChange={(checked) => {
115
- if (internalValue !== null)
116
- updateFilter(operation, null);
117
- else updateFilter(operation, undefined);
118
- }}/>
119
- Filter for null values
120
- </Label>
121
-
122
132
  </div>
123
133
 
124
134
  </div>
@@ -3,7 +3,7 @@ import { VirtualTableWhereFilterOp } from "../../VirtualTable";
3
3
  import { Entity, EntityCollection, EntityReference } from "../../../types";
4
4
  import { ReferencePreview } from "../../../preview";
5
5
  import { getReferenceFrom } from "../../../util";
6
- import { useNavigationController, useReferenceDialog } from "../../../hooks";
6
+ import { useNavigationController, useReferenceDialog, useTranslation } from "../../../hooks";
7
7
  import { Button, Checkbox, Label, Select, SelectItem } from "@firecms/ui";
8
8
 
9
9
  interface ReferenceFilterFieldProps {
@@ -35,16 +35,18 @@ const operationLabels = {
35
35
  const multipleSelectOperations = ["array-contains-any", "in", "not-in"];
36
36
 
37
37
  export function ReferenceFilterField({
38
- value,
39
- setValue,
40
- isArray,
41
- path,
42
- includeId = true,
43
- previewProperties,
44
- setHidden
45
- }: ReferenceFilterFieldProps) {
46
-
47
- const possibleOperations: (keyof typeof operationLabels) [] = isArray
38
+ value,
39
+ setValue,
40
+ isArray,
41
+ path,
42
+ includeId = true,
43
+ previewProperties,
44
+ setHidden
45
+ }: ReferenceFilterFieldProps) {
46
+
47
+ const { t } = useTranslation();
48
+
49
+ const possibleOperations: (keyof typeof operationLabels)[] = isArray
48
50
  ? ["array-contains"]
49
51
  : ["==", "!=", ">", "<", ">=", "<="];
50
52
 
@@ -58,6 +60,17 @@ export function ReferenceFilterField({
58
60
  const [operation, setOperation] = useState<VirtualTableWhereFilterOp>(fieldOperation);
59
61
  const [internalValue, setInternalValue] = useState<EntityReference | EntityReference[] | undefined | null>(fieldValue);
60
62
 
63
+ React.useEffect(() => {
64
+ if (value) {
65
+ const [op, val] = value;
66
+ setOperation(op);
67
+ setInternalValue(val);
68
+ } else {
69
+ setOperation(possibleOperations[0] as VirtualTableWhereFilterOp);
70
+ setInternalValue(undefined);
71
+ }
72
+ }, [value, possibleOperations[0]]);
73
+
61
74
  const selectedEntityIds = internalValue
62
75
  ? (Array.isArray(internalValue) ? internalValue.map((ref) => {
63
76
  if (!(ref?.isEntityReference && ref?.isEntityReference())) {
@@ -110,16 +123,16 @@ export function ReferenceFilterField({
110
123
  const multiple = multipleSelectOperations.includes(operation);
111
124
 
112
125
  const referenceDialogController = useReferenceDialog({
113
- multiselect: multiple,
114
- path,
115
- collection,
116
- onSingleEntitySelected,
117
- onMultipleEntitiesSelected,
118
- selectedEntityIds,
119
- onClose: () => {
120
- setHidden(false);
121
- }
126
+ multiselect: multiple,
127
+ path,
128
+ collection,
129
+ onSingleEntitySelected,
130
+ onMultipleEntitiesSelected,
131
+ selectedEntityIds,
132
+ onClose: () => {
133
+ setHidden(false);
122
134
  }
135
+ }
123
136
  );
124
137
 
125
138
  const doOpenDialog = () => {
@@ -144,15 +157,15 @@ export function ReferenceFilterField({
144
157
 
145
158
  return (
146
159
 
147
- <div className="flex w-[480px] flex-row">
148
- <div className="w-[140px]">
160
+ <div className="flex w-full flex-row">
161
+ <div className="w-[100px]">
149
162
  <Select value={operation}
150
- size={"large"}
151
- fullWidth={true}
152
- onValueChange={(value) => {
153
- updateFilter(value as VirtualTableWhereFilterOp, internalValue);
154
- }}
155
- renderValue={(op) => operationLabels[op as VirtualTableWhereFilterOp]}>
163
+ size={"medium"}
164
+ fullWidth={true}
165
+ onValueChange={(value) => {
166
+ updateFilter(value as VirtualTableWhereFilterOp, internalValue);
167
+ }}
168
+ renderValue={(op) => operationLabels[op as VirtualTableWhereFilterOp]}>
156
169
  {possibleOperations.map((op) => (
157
170
  <SelectItem key={op} value={op}>
158
171
  {operationLabels[op]}
@@ -161,7 +174,7 @@ export function ReferenceFilterField({
161
174
  </Select>
162
175
  </div>
163
176
 
164
- <div className="flex-grow ml-2 h-full gap-2 flex flex-col w-[340px]">
177
+ <div className="flex-grow ml-2 h-full gap-2 flex flex-col">
165
178
 
166
179
  {internalValue && Array.isArray(internalValue) && <div>
167
180
  {internalValue.map((ref, index) => buildEntry(ref))}
@@ -173,9 +186,9 @@ export function ReferenceFilterField({
173
186
 
174
187
  {(!internalValue || (Array.isArray(internalValue) && internalValue.length === 0)) &&
175
188
  <Button onClick={doOpenDialog}
176
- variant={"outlined"}
177
- size={"large"}
178
- className="h-full w-full">
189
+
190
+ size={"medium"}
191
+ className="h-full w-full">
179
192
  {multiple ? "Select references" : "Select reference"}
180
193
  </Button>
181
194
  }
@@ -185,14 +198,14 @@ export function ReferenceFilterField({
185
198
  htmlFor="null-filter"
186
199
  >
187
200
  <Checkbox id="null-filter"
188
- checked={internalValue === null}
189
- size={"small"}
190
- onCheckedChange={(checked) => {
191
- if (internalValue !== null)
192
- updateFilter(operation, null);
193
- else updateFilter(operation, undefined);
194
- }}/>
195
- Filter for null values
201
+ checked={internalValue === null}
202
+ size={"small"}
203
+ onCheckedChange={(checked) => {
204
+ if (internalValue !== null)
205
+ updateFilter(operation, null);
206
+ else updateFilter(operation, undefined);
207
+ }} />
208
+ {t("filter_for_null_values")}
196
209
  </Label>}
197
210
 
198
211
  </div>
@@ -2,10 +2,8 @@ import React, { useState } from "react";
2
2
  import { EnumValuesChip } from "../../../preview";
3
3
  import { VirtualTableWhereFilterOp } from "../../VirtualTable";
4
4
  import {
5
- Checkbox,
6
5
  CloseIcon,
7
6
  IconButton,
8
- Label,
9
7
  MultiSelect,
10
8
  MultiSelectItem,
11
9
  Select,
@@ -34,24 +32,25 @@ const operationLabels = {
34
32
  in: "In",
35
33
  "not-in": "Not in",
36
34
  "array-contains": "Contains",
37
- "array-contains-any": "Any"
35
+ "array-contains-any": "Any",
36
+ "is-null": "Is null"
38
37
  };
39
38
 
40
39
  const multipleSelectOperations = ["array-contains-any", "in", "not-in"];
41
40
 
42
41
  export function StringNumberFilterField({
43
- name,
44
- value,
45
- setValue,
46
- dataType,
47
- isArray,
48
- enumValues,
49
- title
50
- }: StringNumberFilterFieldProps) {
51
-
52
- const possibleOperations: (keyof typeof operationLabels) [] = isArray
42
+ name,
43
+ value,
44
+ setValue,
45
+ dataType,
46
+ isArray,
47
+ enumValues,
48
+ title
49
+ }: StringNumberFilterFieldProps) {
50
+
51
+ const possibleOperations: (keyof typeof operationLabels)[] = isArray
53
52
  ? ["array-contains"]
54
- : ["==", "!=", ">", "<", ">=", "<="];
53
+ : ["==", "!=", ">", "<", ">=", "<=", "is-null"];
55
54
 
56
55
  if (enumValues)
57
56
  isArray
@@ -59,10 +58,31 @@ export function StringNumberFilterField({
59
58
  : possibleOperations.push("in", "not-in");
60
59
 
61
60
  const [fieldOperation, fieldValue] = value || [possibleOperations[0], undefined];
62
- const [operation, setOperation] = useState<VirtualTableWhereFilterOp>(fieldOperation);
61
+ const [operation, setOperation] = useState<VirtualTableWhereFilterOp | "is-null">(fieldOperation === "==" && fieldValue === null ? "is-null" : fieldOperation);
63
62
  const [internalValue, setInternalValue] = useState<string | number | string[] | number[] | null | undefined>(fieldValue);
64
63
 
65
- function updateFilter(op: VirtualTableWhereFilterOp, val: string | number | string[] | number[] | null | undefined) {
64
+ React.useEffect(() => {
65
+ if (value) {
66
+ const [op, val] = value;
67
+ setOperation(op === "==" && val === null ? "is-null" : op);
68
+ setInternalValue(val);
69
+ } else {
70
+ setOperation(possibleOperations[0]);
71
+ setInternalValue(undefined);
72
+ }
73
+ }, [value, possibleOperations[0]]);
74
+
75
+ const isNullOperation = operation === "is-null";
76
+
77
+ function updateFilter(op: VirtualTableWhereFilterOp | "is-null", val: string | number | string[] | number[] | null | undefined) {
78
+ // Handle "is null" operation
79
+ if (op === "is-null") {
80
+ setOperation(op);
81
+ setInternalValue(null);
82
+ setValue(["==", null]);
83
+ return;
84
+ }
85
+
66
86
  let newValue = val;
67
87
  const prevOpIsArray = multipleSelectOperations.includes(operation);
68
88
  const newOpIsArray = multipleSelectOperations.includes(op);
@@ -95,15 +115,16 @@ export function StringNumberFilterField({
95
115
 
96
116
  return (
97
117
 
98
- <div className="flex w-[440px]">
99
- <div className={"w-[80px]"}>
118
+ <div className="flex w-full">
119
+ <div className={"w-[100px]"}>
100
120
  <Select value={operation}
101
- fullWidth={true}
102
- position={"item-aligned"}
103
- onValueChange={(value) => {
104
- updateFilter(value as VirtualTableWhereFilterOp, internalValue);
105
- }}
106
- renderValue={(op) => operationLabels[op as VirtualTableWhereFilterOp]}>
121
+ size={"medium"}
122
+ fullWidth={true}
123
+ position={"item-aligned"}
124
+ onValueChange={(value) => {
125
+ updateFilter(value as VirtualTableWhereFilterOp | "is-null", internalValue);
126
+ }}
127
+ renderValue={(op) => operationLabels[op as keyof typeof operationLabels]}>
107
128
  {possibleOperations.map((op) => (
108
129
  <SelectItem key={op} value={op}>
109
130
  {operationLabels[op]}
@@ -115,8 +136,11 @@ export function StringNumberFilterField({
115
136
  <div className="flex-grow ml-2 flex flex-col gap-2">
116
137
 
117
138
  {!enumValues && <TextField
139
+ size={"medium"}
118
140
  type={dataType === "number" ? "number" : undefined}
119
141
  value={internalValue !== undefined && internalValue != null ? String(internalValue) : ""}
142
+ disabled={isNullOperation}
143
+ placeholder={isNullOperation ? "null" : undefined}
120
144
  onChange={(evt) => {
121
145
  const val = dataType === "number"
122
146
  ? parseFloat(evt.target.value)
@@ -125,14 +149,16 @@ export function StringNumberFilterField({
125
149
  }}
126
150
  endAdornment={internalValue !== undefined && internalValue != null && <IconButton
127
151
  onClick={(e) => updateFilter(operation, undefined)}>
128
- <CloseIcon/>
152
+ <CloseIcon />
129
153
  </IconButton>}
130
154
  />}
131
155
 
132
156
  {enumValues && !multiple &&
133
157
  <Select
158
+ size={"medium"}
134
159
  position={"item-aligned"}
135
160
  fullWidth={true}
161
+ disabled={isNullOperation}
136
162
  value={typeof internalValue === "string" ? internalValue : ""}
137
163
  onValueChange={(value) => {
138
164
  if (value !== "")
@@ -140,7 +166,7 @@ export function StringNumberFilterField({
140
166
  }}
141
167
  endAdornment={internalValue && <IconButton
142
168
  onClick={(e) => updateFilter(operation, undefined)}>
143
- <CloseIcon/>
169
+ <CloseIcon />
144
170
  </IconButton>}
145
171
  renderValue={(enumKey) => {
146
172
  if (enumKey === null)
@@ -152,15 +178,15 @@ export function StringNumberFilterField({
152
178
  key={`select_value_${name}_${enumKey}`}
153
179
  enumKey={enumKey}
154
180
  enumValues={enumValues}
155
- size={"small"}/>;
181
+ size={"small"} />;
156
182
  }}>
157
183
  {enumValues.map((enumConfig) => (
158
184
  <SelectItem key={`select_item_${name}_${enumConfig.id}`}
159
- value={String(enumConfig.id)}>
185
+ value={String(enumConfig.id)}>
160
186
  <EnumValuesChip
161
187
  enumKey={String(enumConfig.id)}
162
188
  enumValues={enumValues}
163
- size={"small"}/>
189
+ size={"small"} />
164
190
  </SelectItem>
165
191
  ))}
166
192
  </Select>
@@ -168,8 +194,10 @@ export function StringNumberFilterField({
168
194
 
169
195
  {enumValues && multiple &&
170
196
  <MultiSelect
197
+ size={"medium"}
171
198
  position={"item-aligned"}
172
199
  value={Array.isArray(internalValue) ? internalValue.map(e => String(e)) : []}
200
+ disabled={isNullOperation}
173
201
  onValueChange={(value) => {
174
202
  updateFilter(operation, dataType === "number" ? value.map(v => parseInt(v)) : value)
175
203
  }}
@@ -177,47 +205,21 @@ export function StringNumberFilterField({
177
205
  endAdornment={internalValue && <IconButton
178
206
  className="absolute right-2 top-3"
179
207
  onClick={(e) => updateFilter(operation, undefined)}>
180
- <CloseIcon/>
208
+ <CloseIcon />
181
209
  </IconButton>}
182
- // renderValues={(enumKeys) => {
183
- // console.log("renderValues", enumKeys);
184
- // if (enumKeys === null)
185
- // return "Filter for null values";
186
- //
187
- // return enumKeys.map(key => <EnumValuesChip
188
- // key={`select_value_${name}_${enumKeys}`}
189
- // enumKey={key}
190
- // enumValues={enumValues}
191
- // size={"small"}/>);
192
- // }}
193
210
  >
194
211
  {enumValues.map((enumConfig) => (
195
212
  <MultiSelectItem key={`select_value_${name}_${enumConfig.id}`}
196
- value={String(enumConfig.id)}>
213
+ value={String(enumConfig.id)}>
197
214
  <EnumValuesChip
198
215
  enumKey={String(enumConfig.id)}
199
216
  enumValues={enumValues}
200
- size={"small"}/>
217
+ size={"small"} />
201
218
  </MultiSelectItem>
202
219
  ))}
203
220
  </MultiSelect>
204
221
  }
205
222
 
206
- {!isArray && <Label
207
- className="border cursor-pointer rounded-md p-2 flex items-center gap-2 [&:has(:checked)]:bg-surface-100 dark:[&:has(:checked)]:bg-surface-800"
208
- htmlFor="null-filter"
209
- >
210
- <Checkbox id="null-filter"
211
- checked={internalValue === null}
212
- size={"small"}
213
- onCheckedChange={(checked) => {
214
- if (internalValue !== null)
215
- updateFilter(operation, null);
216
- else updateFilter(operation, undefined);
217
- }}/>
218
- Filter for null values
219
- </Label>}
220
-
221
223
  </div>
222
224
 
223
225
  </div>
@@ -1,4 +1,6 @@
1
+ import React from "react";
1
2
  import { Button, Dialog, DialogActions, DialogContent, DialogTitle, Typography } from "@firecms/ui";
3
+ import { useTranslation } from "../hooks/useTranslation";
2
4
 
3
5
  export interface UnsavedChangesDialogProps {
4
6
  open: boolean;
@@ -15,7 +17,7 @@ export function UnsavedChangesDialog({
15
17
  body,
16
18
  title
17
19
  }: UnsavedChangesDialogProps) {
18
-
20
+ const { t } = useTranslation();
19
21
  return (
20
22
  <Dialog
21
23
  onEscapeKeyDown={() => {
@@ -29,17 +31,15 @@ export function UnsavedChangesDialog({
29
31
  {body}
30
32
 
31
33
  <Typography>
32
- Are you sure you want to leave this page?
34
+ {t("are_you_sure_leave")}
33
35
  </Typography>
34
36
 
35
37
  </DialogContent>
36
38
  <DialogActions>
37
39
  <Button variant="text"
38
- color={"primary"}
39
- onClick={handleCancel} autoFocus> Cancel </Button>
40
+ onClick={handleCancel} autoFocus> {t("cancel")} </Button>
40
41
  <Button
41
- color={"primary"}
42
- onClick={handleOk}> Ok </Button>
42
+ onClick={handleOk}> {t("ok")} </Button>
43
43
  </DialogActions>
44
44
  </Dialog>
45
45
  );
@@ -6,17 +6,17 @@ import { EmptyValue } from "../preview";
6
6
  * Component to render a single user with name and email
7
7
  */
8
8
  export function UserDisplay({
9
- user,
10
- }: { user: User | null }) {
9
+ user,
10
+ }: { user: User | null }) {
11
11
  if (!user) {
12
- return <EmptyValue/>;
12
+ return <EmptyValue />;
13
13
  }
14
14
 
15
15
  const avatarSizeClass = "w-6 h-6";
16
16
 
17
17
  return (
18
18
  <div className={cls(
19
- "inline-flex items-center gap-4 px-2 py-1 rounded-xl",
19
+ "inline-flex items-center gap-4 px-2 py-1 rounded-xl text-left",
20
20
  "bg-surface-accent-100 dark:bg-surface-accent-800",
21
21
  "border",
22
22
  defaultBorderMixin