@firecms/core 3.0.0-canary.14 → 3.0.0-canary.140

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 (300) hide show
  1. package/README.md +3 -3
  2. package/dist/app/AppBar.d.ts +12 -0
  3. package/dist/app/Drawer.d.ts +16 -0
  4. package/dist/app/Scaffold.d.ts +30 -0
  5. package/dist/app/index.d.ts +4 -0
  6. package/dist/app/useApp.d.ts +16 -0
  7. package/dist/components/ArrayContainer.d.ts +5 -4
  8. package/dist/components/CircularProgressCenter.d.ts +1 -1
  9. package/dist/components/ClearFilterSortButton.d.ts +5 -0
  10. package/dist/components/{DeleteConfirmationDialog.d.ts → ConfirmationDialog.d.ts} +1 -1
  11. package/dist/components/EntityCollectionTable/EntityCollectionRowActions.d.ts +11 -12
  12. package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +1 -1
  13. package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +5 -3
  14. package/dist/components/EntityCollectionTable/PropertyTableCell.d.ts +1 -0
  15. package/dist/components/EntityCollectionTable/column_utils.d.ts +1 -2
  16. package/dist/components/EntityCollectionTable/fields/TableReferenceField.d.ts +3 -1
  17. package/dist/components/EntityCollectionTable/internal/CollectionTableToolbar.d.ts +1 -4
  18. package/dist/components/EntityCollectionTable/internal/EntityTableCell.d.ts +2 -2
  19. package/dist/components/EntityCollectionTable/internal/popup_field/PopupFormField.d.ts +2 -2
  20. package/dist/components/EntityCollectionView/EntityCollectionView.d.ts +12 -2
  21. package/dist/components/EntityCollectionView/EntityCollectionViewStartActions.d.ts +11 -0
  22. package/dist/components/EntityCollectionView/utils.d.ts +3 -0
  23. package/dist/components/EntityPreview.d.ts +7 -6
  24. package/dist/components/ErrorView.d.ts +1 -1
  25. package/dist/components/HomePage/DefaultHomePage.d.ts +1 -1
  26. package/dist/components/HomePage/NavigationCardBinding.d.ts +1 -1
  27. package/dist/components/PropertyConfigBadge.d.ts +2 -1
  28. package/dist/components/PropertyIdCopyTooltip.d.ts +8 -0
  29. package/dist/components/ReferenceWidget.d.ts +3 -1
  30. package/dist/components/SelectableTable/SelectableTable.d.ts +1 -1
  31. package/dist/components/SelectableTable/filters/ReferenceFilterField.d.ts +2 -1
  32. package/dist/components/VirtualTable/VirtualTableProps.d.ts +15 -12
  33. package/dist/components/VirtualTable/types.d.ts +3 -3
  34. package/dist/components/{EntityCollectionTable/internal → common}/default_entity_actions.d.ts +1 -1
  35. package/dist/components/common/index.d.ts +1 -0
  36. package/dist/components/common/table_height.d.ts +5 -0
  37. package/dist/components/common/types.d.ts +4 -6
  38. package/dist/components/common/useColumnsIds.d.ts +2 -1
  39. package/dist/components/common/useDataSourceEntityCollectionTableController.d.ts +3 -0
  40. package/dist/components/index.d.ts +4 -2
  41. package/dist/{components/FireCMSAppBar.d.ts → core/DefaultAppBar.d.ts} +6 -9
  42. package/dist/core/DefaultDrawer.d.ts +19 -0
  43. package/dist/core/DrawerNavigationItem.d.ts +10 -0
  44. package/dist/core/EntityEditView.d.ts +18 -4
  45. package/dist/core/FireCMS.d.ts +1 -1
  46. package/dist/core/NavigationRoutes.d.ts +3 -3
  47. package/dist/core/index.d.ts +3 -4
  48. package/dist/form/PropertyFieldBinding.d.ts +1 -1
  49. package/dist/form/components/ErrorFocus.d.ts +1 -1
  50. package/dist/form/components/FieldHelperText.d.ts +3 -3
  51. package/dist/form/components/FormikArrayContainer.d.ts +2 -1
  52. package/dist/form/components/LabelWithIcon.d.ts +1 -1
  53. package/dist/form/components/LabelWithIconAndTooltip.d.ts +15 -0
  54. package/dist/form/components/StorageItemPreview.d.ts +4 -4
  55. package/dist/form/components/index.d.ts +1 -0
  56. package/dist/form/field_bindings/ArrayCustomShapedFieldBinding.d.ts +1 -1
  57. package/dist/form/field_bindings/ArrayOfReferencesFieldBinding.d.ts +1 -1
  58. package/dist/form/field_bindings/BlockFieldBinding.d.ts +1 -1
  59. package/dist/form/field_bindings/KeyValueFieldBinding.d.ts +1 -1
  60. package/dist/form/field_bindings/MapFieldBinding.d.ts +1 -1
  61. package/dist/form/field_bindings/MarkdownEditorFieldBinding.d.ts +11 -0
  62. package/dist/form/field_bindings/{MultiSelectBinding.d.ts → MultiSelectFieldBinding.d.ts} +1 -1
  63. package/dist/form/field_bindings/ReadOnlyFieldBinding.d.ts +1 -1
  64. package/dist/form/field_bindings/RepeatFieldBinding.d.ts +1 -1
  65. package/dist/form/field_bindings/SelectFieldBinding.d.ts +1 -1
  66. package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +3 -5
  67. package/dist/form/field_bindings/TextFieldBinding.d.ts +1 -1
  68. package/dist/form/index.d.ts +3 -5
  69. package/dist/form/useClearRestoreValue.d.ts +2 -2
  70. package/dist/hooks/data/save.d.ts +1 -2
  71. package/dist/hooks/index.d.ts +1 -0
  72. package/dist/hooks/useBuildNavigationController.d.ts +1 -2
  73. package/dist/hooks/useProjectLog.d.ts +8 -2
  74. package/dist/hooks/useValidateAuthenticator.d.ts +4 -8
  75. package/dist/index.d.ts +1 -0
  76. package/dist/index.es.js +15817 -12453
  77. package/dist/index.es.js.map +1 -1
  78. package/dist/index.umd.js +20045 -587
  79. package/dist/index.umd.js.map +1 -1
  80. package/dist/internal/useBuildDataSource.d.ts +1 -16
  81. package/dist/preview/PropertyPreviewProps.d.ts +6 -1
  82. package/dist/preview/components/EnumValuesChip.d.ts +1 -1
  83. package/dist/preview/components/ReferencePreview.d.ts +3 -2
  84. package/dist/preview/components/StorageThumbnail.d.ts +2 -1
  85. package/dist/preview/components/UrlComponentPreview.d.ts +2 -1
  86. package/dist/types/auth.d.ts +3 -3
  87. package/dist/types/collections.d.ts +39 -5
  88. package/dist/types/datasource.d.ts +55 -35
  89. package/dist/types/entities.d.ts +6 -1
  90. package/dist/types/entity_actions.d.ts +14 -0
  91. package/dist/types/entity_overrides.d.ts +2 -2
  92. package/dist/types/fields.d.ts +47 -41
  93. package/dist/types/firecms.d.ts +4 -0
  94. package/dist/types/index.d.ts +0 -1
  95. package/dist/types/navigation.d.ts +6 -5
  96. package/dist/types/plugins.d.ts +14 -4
  97. package/dist/types/properties.d.ts +34 -21
  98. package/dist/types/property_config.d.ts +0 -2
  99. package/dist/types/side_dialogs_controller.d.ts +10 -0
  100. package/dist/types/storage.d.ts +86 -3
  101. package/dist/util/entities.d.ts +2 -2
  102. package/dist/util/icon_list.d.ts +5 -1
  103. package/dist/util/icon_synonyms.d.ts +1 -97
  104. package/dist/util/icons.d.ts +3 -2
  105. package/dist/util/index.d.ts +1 -0
  106. package/dist/util/navigation_utils.d.ts +2 -2
  107. package/dist/util/objects.d.ts +1 -1
  108. package/dist/util/plurals.d.ts +0 -2
  109. package/dist/util/property_utils.d.ts +1 -1
  110. package/dist/util/resolutions.d.ts +30 -16
  111. package/dist/util/storage.d.ts +23 -2
  112. package/dist/util/useStorageUploadController.d.ts +3 -3
  113. package/package.json +128 -119
  114. package/src/app/AppBar.tsx +18 -0
  115. package/src/app/Drawer.tsx +24 -0
  116. package/src/app/Scaffold.tsx +243 -0
  117. package/src/app/index.ts +4 -0
  118. package/src/app/useApp.tsx +32 -0
  119. package/src/components/ArrayContainer.tsx +19 -15
  120. package/src/components/CircularProgressCenter.tsx +1 -1
  121. package/src/components/ClearFilterSortButton.tsx +41 -0
  122. package/src/components/{DeleteConfirmationDialog.tsx → ConfirmationDialog.tsx} +1 -1
  123. package/src/components/DeleteEntityDialog.tsx +1 -1
  124. package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +12 -19
  125. package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +21 -20
  126. package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +10 -6
  127. package/src/components/EntityCollectionTable/PropertyTableCell.tsx +41 -35
  128. package/src/components/EntityCollectionTable/column_utils.tsx +3 -3
  129. package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +31 -16
  130. package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +14 -6
  131. package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +29 -34
  132. package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +32 -30
  133. package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +19 -7
  134. package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +8 -11
  135. package/src/components/EntityCollectionView/EntityCollectionView.tsx +138 -85
  136. package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +68 -0
  137. package/src/components/EntityCollectionView/useSelectionController.tsx +19 -7
  138. package/src/components/EntityCollectionView/utils.ts +19 -0
  139. package/src/components/EntityPreview.tsx +43 -39
  140. package/src/components/EntityView.tsx +6 -6
  141. package/src/components/ErrorView.tsx +1 -1
  142. package/src/components/HomePage/DefaultHomePage.tsx +25 -19
  143. package/src/components/HomePage/NavigationCard.tsx +3 -3
  144. package/src/components/HomePage/NavigationCardBinding.tsx +1 -1
  145. package/src/components/HomePage/NavigationGroup.tsx +1 -1
  146. package/src/components/HomePage/SmallNavigationCard.tsx +5 -6
  147. package/src/components/PropertyConfigBadge.tsx +9 -3
  148. package/src/components/PropertyIdCopyTooltip.tsx +48 -0
  149. package/src/components/ReferenceTable/ReferenceSelectionTable.tsx +8 -7
  150. package/src/components/ReferenceWidget.tsx +22 -12
  151. package/src/components/SearchIconsView.tsx +10 -7
  152. package/src/components/SelectableTable/SelectableTable.tsx +7 -7
  153. package/src/components/SelectableTable/filters/BooleanFilterField.tsx +2 -3
  154. package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +22 -7
  155. package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +28 -6
  156. package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +88 -21
  157. package/src/components/VirtualTable/VirtualTable.tsx +77 -46
  158. package/src/components/VirtualTable/VirtualTableCell.tsx +1 -9
  159. package/src/components/VirtualTable/VirtualTableHeader.tsx +4 -4
  160. package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +2 -2
  161. package/src/components/VirtualTable/VirtualTableProps.tsx +18 -14
  162. package/src/components/VirtualTable/VirtualTableRow.tsx +4 -5
  163. package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +4 -4
  164. package/src/components/VirtualTable/fields/VirtualTableInput.tsx +2 -1
  165. package/src/components/VirtualTable/fields/VirtualTableNumberInput.tsx +2 -1
  166. package/src/components/VirtualTable/fields/VirtualTableSelect.tsx +14 -28
  167. package/src/components/VirtualTable/types.tsx +2 -3
  168. package/src/components/{EntityCollectionTable/internal → common}/default_entity_actions.tsx +8 -4
  169. package/src/components/common/index.ts +1 -0
  170. package/src/components/{VirtualTable/common.tsx → common/table_height.tsx} +5 -2
  171. package/src/components/common/types.tsx +4 -6
  172. package/src/components/common/useColumnsIds.tsx +23 -2
  173. package/src/components/common/useDataSourceEntityCollectionTableController.tsx +23 -12
  174. package/src/components/common/useTableSearchHelper.ts +53 -12
  175. package/src/components/index.tsx +4 -2
  176. package/src/contexts/DialogsProvider.tsx +2 -2
  177. package/src/core/DefaultAppBar.tsx +176 -0
  178. package/src/core/DefaultDrawer.tsx +183 -0
  179. package/src/core/DrawerNavigationItem.tsx +66 -0
  180. package/src/core/EntityEditView.tsx +716 -153
  181. package/src/core/EntitySidePanel.tsx +1 -2
  182. package/src/core/FireCMS.tsx +53 -52
  183. package/src/core/NavigationRoutes.tsx +7 -8
  184. package/src/core/SideDialogs.tsx +1 -0
  185. package/src/core/field_configs.tsx +7 -8
  186. package/src/core/index.tsx +3 -4
  187. package/src/form/PropertyFieldBinding.tsx +56 -22
  188. package/src/form/components/CustomIdField.tsx +4 -2
  189. package/src/form/components/FieldHelperText.tsx +4 -4
  190. package/src/form/components/FormikArrayContainer.tsx +4 -1
  191. package/src/form/components/LabelWithIcon.tsx +27 -19
  192. package/src/form/components/LabelWithIconAndTooltip.tsx +28 -0
  193. package/src/form/components/StorageItemPreview.tsx +21 -11
  194. package/src/form/components/StorageUploadProgress.tsx +3 -4
  195. package/src/form/components/index.tsx +1 -0
  196. package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +29 -17
  197. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +29 -25
  198. package/src/form/field_bindings/BlockFieldBinding.tsx +30 -27
  199. package/src/form/field_bindings/DateTimeFieldBinding.tsx +17 -14
  200. package/src/form/field_bindings/KeyValueFieldBinding.tsx +50 -44
  201. package/src/form/field_bindings/MapFieldBinding.tsx +20 -19
  202. package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +150 -0
  203. package/src/form/field_bindings/{MultiSelectBinding.tsx → MultiSelectFieldBinding.tsx} +25 -20
  204. package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +11 -16
  205. package/src/form/field_bindings/ReferenceFieldBinding.tsx +41 -30
  206. package/src/form/field_bindings/RepeatFieldBinding.tsx +32 -19
  207. package/src/form/field_bindings/SelectFieldBinding.tsx +20 -13
  208. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +36 -46
  209. package/src/form/field_bindings/SwitchFieldBinding.tsx +9 -5
  210. package/src/form/field_bindings/TextFieldBinding.tsx +26 -23
  211. package/src/form/index.tsx +4 -9
  212. package/src/form/useClearRestoreValue.tsx +2 -2
  213. package/src/form/validation.ts +1 -17
  214. package/src/hooks/data/delete.ts +2 -1
  215. package/src/hooks/data/save.ts +9 -4
  216. package/src/hooks/data/useDataSource.tsx +11 -3
  217. package/src/hooks/index.tsx +1 -0
  218. package/src/hooks/useBuildLocalConfigurationPersistence.tsx +8 -10
  219. package/src/hooks/useBuildModeController.tsx +11 -5
  220. package/src/hooks/useBuildNavigationController.tsx +91 -31
  221. package/src/hooks/useProjectLog.tsx +32 -10
  222. package/src/hooks/useResolvedNavigationFrom.tsx +1 -1
  223. package/src/hooks/useValidateAuthenticator.tsx +21 -41
  224. package/src/index.ts +1 -0
  225. package/src/internal/useBuildDataSource.ts +72 -82
  226. package/src/internal/useBuildSideDialogsController.tsx +1 -0
  227. package/src/internal/useBuildSideEntityController.tsx +102 -22
  228. package/src/internal/useUnsavedChangesDialog.tsx +3 -1
  229. package/src/preview/PropertyPreview.tsx +11 -18
  230. package/src/preview/PropertyPreviewProps.tsx +7 -1
  231. package/src/preview/components/BooleanPreview.tsx +2 -2
  232. package/src/preview/components/EnumValuesChip.tsx +2 -2
  233. package/src/preview/components/ImagePreview.tsx +25 -35
  234. package/src/preview/components/ReferencePreview.tsx +23 -34
  235. package/src/preview/components/StorageThumbnail.tsx +5 -1
  236. package/src/preview/components/UrlComponentPreview.tsx +44 -11
  237. package/src/preview/property_previews/ArrayOfMapsPreview.tsx +2 -3
  238. package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +4 -3
  239. package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +2 -3
  240. package/src/preview/property_previews/ArrayOfStringsPreview.tsx +1 -2
  241. package/src/preview/property_previews/ArrayOneOfPreview.tsx +4 -5
  242. package/src/preview/property_previews/ArrayPropertyPreview.tsx +4 -5
  243. package/src/preview/property_previews/MapPropertyPreview.tsx +6 -6
  244. package/src/preview/property_previews/SkeletonPropertyComponent.tsx +2 -2
  245. package/src/preview/property_previews/StringPropertyPreview.tsx +3 -3
  246. package/src/preview/util.ts +2 -2
  247. package/src/types/auth.tsx +3 -3
  248. package/src/types/collections.ts +48 -7
  249. package/src/types/customization_controller.tsx +0 -1
  250. package/src/types/datasource.ts +65 -43
  251. package/src/types/entities.ts +11 -1
  252. package/src/types/entity_actions.tsx +16 -3
  253. package/src/types/entity_overrides.tsx +2 -2
  254. package/src/types/fields.tsx +51 -45
  255. package/src/types/firecms.tsx +5 -0
  256. package/src/types/index.ts +0 -1
  257. package/src/types/navigation.ts +7 -7
  258. package/src/types/plugins.tsx +16 -6
  259. package/src/types/properties.ts +39 -22
  260. package/src/types/property_config.tsx +0 -2
  261. package/src/types/side_dialogs_controller.tsx +13 -0
  262. package/src/types/storage.ts +94 -3
  263. package/src/util/entities.ts +6 -5
  264. package/src/util/enums.ts +1 -1
  265. package/src/util/icon_list.ts +15 -10
  266. package/src/util/icon_synonyms.ts +3 -99
  267. package/src/util/icons.tsx +8 -2
  268. package/src/util/index.ts +1 -0
  269. package/src/util/make_properties_editable.ts +13 -5
  270. package/src/util/navigation_utils.ts +6 -6
  271. package/src/util/objects.ts +25 -28
  272. package/src/util/permissions.ts +1 -0
  273. package/src/util/plurals.ts +0 -2
  274. package/src/util/property_utils.tsx +2 -2
  275. package/src/util/references.ts +3 -0
  276. package/src/util/resolutions.ts +79 -46
  277. package/src/util/storage.ts +79 -21
  278. package/src/util/strings.ts +2 -2
  279. package/src/util/useStorageUploadController.tsx +33 -7
  280. package/src/util/useTraceUpdate.tsx +1 -0
  281. package/dist/components/PropertyIdCopyTooltipContent.d.ts +0 -3
  282. package/dist/components/VirtualTable/common.d.ts +0 -2
  283. package/dist/core/Drawer.d.ts +0 -23
  284. package/dist/core/Scaffold.d.ts +0 -55
  285. package/dist/core/SideEntityView.d.ts +0 -7
  286. package/dist/form/EntityForm.d.ts +0 -77
  287. package/dist/form/field_bindings/MarkdownFieldBinding.d.ts +0 -9
  288. package/dist/internal/useBuildCustomizationController.d.ts +0 -2
  289. package/dist/internal/useLocaleConfig.d.ts +0 -1
  290. package/dist/types/appcheck.d.ts +0 -26
  291. package/src/components/FireCMSAppBar.tsx +0 -165
  292. package/src/components/PropertyIdCopyTooltipContent.tsx +0 -28
  293. package/src/core/Drawer.tsx +0 -191
  294. package/src/core/Scaffold.tsx +0 -281
  295. package/src/core/SideEntityView.tsx +0 -38
  296. package/src/form/EntityForm.tsx +0 -728
  297. package/src/form/field_bindings/MarkdownFieldBinding.tsx +0 -695
  298. package/src/internal/useBuildCustomizationController.tsx +0 -5
  299. package/src/internal/useLocaleConfig.tsx +0 -18
  300. package/src/types/appcheck.ts +0 -29
@@ -7,7 +7,7 @@ import {
7
7
  AddIcon,
8
8
  Button,
9
9
  ContentCopyIcon,
10
- fieldBackgroundHoverMixin, HandleIcon,
10
+ HandleIcon,
11
11
  IconButton,
12
12
  Menu,
13
13
  MenuItem,
@@ -16,17 +16,18 @@ import {
16
16
  useOutsideAlerter
17
17
  } from "@firecms/ui";
18
18
 
19
- interface ArrayContainerProps<T> {
19
+ export interface ArrayContainerProps<T> {
20
20
  droppableId: string;
21
21
  value: T[];
22
22
  addLabel: string;
23
- buildEntry: (index: number, internalId: number) => React.ReactNode;
23
+ buildEntry: (index: number, internalId: number, isDragging:boolean) => React.ReactNode;
24
24
  disabled?: boolean;
25
25
  size?: "small" | "medium";
26
26
  onInternalIdAdded?: (id: number) => void;
27
27
  includeAddButton?: boolean;
28
28
  newDefaultEntry: T;
29
- onValueChange: (value: T[]) => void
29
+ onValueChange: (value: T[]) => void,
30
+ className?: string;
30
31
  }
31
32
 
32
33
  const buildIdsMap = (value: any[]) =>
@@ -52,7 +53,8 @@ export function ArrayContainer<T>({
52
53
  onInternalIdAdded,
53
54
  includeAddButton,
54
55
  newDefaultEntry,
55
- onValueChange
56
+ onValueChange,
57
+ className
56
58
  }: ArrayContainerProps<T>) {
57
59
 
58
60
  const hasValue = value && Array.isArray(value) && value.length > 0;
@@ -153,6 +155,7 @@ export function ArrayContainer<T>({
153
155
  >
154
156
  {(droppableProvided, droppableSnapshot) => (
155
157
  <div
158
+ className={className}
156
159
  {...droppableProvided.droppableProps}
157
160
  ref={droppableProvided.innerRef}>
158
161
  {hasValue && internalIds.map((internalId: number, index: number) => {
@@ -205,7 +208,7 @@ type ArrayContainerItemProps = {
205
208
  internalId: number,
206
209
  size?: "small" | "medium",
207
210
  disabled: boolean,
208
- buildEntry: (index: number, internalId: number) => React.ReactNode,
211
+ buildEntry: (index: number, internalId: number, isDragging: boolean) => React.ReactNode,
209
212
  remove: (index: number) => void,
210
213
  copy: (index: number) => void,
211
214
  isDragging: boolean,
@@ -235,13 +238,14 @@ export function ArrayContainerItem({
235
238
  {...provided.draggableProps}
236
239
  style={provided.draggableProps.style}
237
240
  className={`${
238
- (isDragging || onHover) ? fieldBackgroundHoverMixin : ""
241
+ (isDragging || onHover) ? "hover:bg-slate-50 dark:hover:bg-gray-800 dark:hover:bg-opacity-20" : ""
239
242
  } mb-1 rounded-md opacity-100`}
240
243
  >
241
244
  <div
242
245
  className="flex items-start">
243
- <div className="flex-grow w-[calc(100%-48px)] text-text-primary dark:text-text-primary-dark">
244
- {buildEntry(index, internalId)}
246
+ <div
247
+ className="flex-grow w-[calc(100%-48px)] text-text-primary dark:text-text-primary-dark">
248
+ {buildEntry(index, internalId, isDragging)}
245
249
  </div>
246
250
  <ArrayItemOptions direction={size === "small" ? "row" : "column"}
247
251
  disabled={disabled}
@@ -253,7 +257,6 @@ export function ArrayContainerItem({
253
257
  </div>;
254
258
  }
255
259
 
256
-
257
260
  export function ArrayItemOptions({
258
261
  direction,
259
262
  disabled,
@@ -275,7 +278,7 @@ export function ArrayItemOptions({
275
278
  const iconRef = React.useRef<HTMLDivElement>(null);
276
279
  useOutsideAlerter(iconRef, () => setMenuOpen(false));
277
280
 
278
- return <div className={`pl-2 pt-1 pb-4 flex ${direction === "row" ? "flex-row-reverse" : "flex-col"} items-center`}
281
+ return <div className={`pl-2 pt-1 pb-1 flex ${direction === "row" ? "flex-row-reverse" : "flex-col"} items-center`}
279
282
  ref={iconRef}
280
283
  {...provided.dragHandleProps}>
281
284
  <Tooltip
@@ -283,11 +286,13 @@ export function ArrayItemOptions({
283
286
  open={menuOpen ? false : undefined}
284
287
  side={direction === "column" ? "left" : undefined}
285
288
  title="Drag to move. Click for more options">
286
-
287
289
  <IconButton
288
290
  size="small"
289
291
  disabled={disabled}
290
- onClick={() => setMenuOpen(true)}
292
+ onClick={(e) => {
293
+ e.preventDefault();
294
+ setMenuOpen(true);
295
+ }}
291
296
  onDragStart={(e: any) => {
292
297
  setMenuOpen(false);
293
298
  }}
@@ -298,7 +303,7 @@ export function ArrayItemOptions({
298
303
  <Menu
299
304
  portalContainer={iconRef.current}
300
305
  open={menuOpen}
301
- trigger={<div/>}>
306
+ trigger={<div tabIndex={-1}/>}>
302
307
 
303
308
  <MenuItem dense onClick={(e) => {
304
309
  setMenuOpen(false);
@@ -316,7 +321,6 @@ export function ArrayItemOptions({
316
321
  </MenuItem>
317
322
 
318
323
  </Menu>
319
-
320
324
  </Tooltip>
321
325
 
322
326
  </div>;
@@ -5,7 +5,7 @@ import { CircularProgress, CircularProgressProps, Typography } from "@firecms/ui
5
5
  *
6
6
  * @param text
7
7
  * @param props
8
- * @constructor
8
+
9
9
  * @ignore
10
10
  */
11
11
  export function CircularProgressCenter({ text, ...props }: CircularProgressProps & {
@@ -0,0 +1,41 @@
1
+ import { Button, FilterListOffIcon } from "@firecms/ui";
2
+ import { EntityTableController } from "../types";
3
+
4
+ export function ClearFilterSortButton({
5
+ tableController,
6
+ enabled
7
+ }: {
8
+ enabled: boolean;
9
+ tableController: EntityTableController
10
+ }) {
11
+ if (!enabled) {
12
+ return null;
13
+ }
14
+
15
+ const filterIsSet = !!tableController.filterValues && Object.keys(tableController.filterValues).length > 0;
16
+ const sortIsSet = !!tableController.sortBy && tableController.sortBy.length > 0;
17
+
18
+ if ((filterIsSet || sortIsSet) && (tableController.clearFilter || tableController.setSortBy)) {
19
+ let label;
20
+ if (filterIsSet && sortIsSet) {
21
+ label = "Clear filter and sort";
22
+ } else if (filterIsSet) {
23
+ label = "Clear filter";
24
+ } else {
25
+ label = "Clear sort";
26
+ }
27
+ return <Button
28
+ variant={"outlined"}
29
+ className="h-fit-content"
30
+ aria-label="filter clear"
31
+ onClick={() => {
32
+ tableController.clearFilter?.();
33
+ tableController.setSortBy?.(undefined);
34
+ }}
35
+ size={"small"}>
36
+ <FilterListOffIcon/>
37
+ {label}
38
+ </Button>
39
+ }
40
+ return null;
41
+ }
@@ -2,7 +2,7 @@ import React from "react";
2
2
 
3
3
  import { Button, Dialog, DialogActions, DialogContent, LoadingButton, Typography } from "@firecms/ui";
4
4
 
5
- export function DeleteConfirmationDialog({
5
+ export function ConfirmationDialog({
6
6
  open,
7
7
  onAccept,
8
8
  onCancel,
@@ -58,7 +58,7 @@ export function DeleteEntityDialog<M extends Record<string, any>>({
58
58
  const resolvedCollection = useMemo(() => resolveCollection<M>({
59
59
  collection,
60
60
  path,
61
- fields: customizationController.propertyConfigs
61
+ propertyConfigs: customizationController.propertyConfigs
62
62
  }), [collection, path]);
63
63
 
64
64
  const handleCancel = useCallback(() => {
@@ -1,7 +1,7 @@
1
1
  import React, { MouseEvent, useCallback } from "react";
2
2
 
3
3
  import { CollectionSize, Entity, EntityAction, EntityCollection, SelectionController } from "../../types";
4
- import { Checkbox, cn, IconButton, Menu, MenuItem, MoreVertIcon, Skeleton, Tooltip, Typography } from "@firecms/ui";
4
+ import { Checkbox, cls, IconButton, Menu, MenuItem, MoreVertIcon, Skeleton, Tooltip } from "@firecms/ui";
5
5
  import { useFireCMSContext, useLargeLayout } from "../../hooks";
6
6
 
7
7
  /**
@@ -14,7 +14,6 @@ import { useFireCMSContext, useLargeLayout } from "../../hooks";
14
14
  * @param size
15
15
  * @param toggleEntitySelection
16
16
  * @param hideId
17
- * @constructor
18
17
  *
19
18
  * @group Collection components
20
19
  */
@@ -56,12 +55,7 @@ export const EntityCollectionRowActions = function EntityCollectionRowActions({
56
55
  const context = useFireCMSContext();
57
56
 
58
57
  const onCheckedChange = useCallback((checked: boolean) => {
59
- selectionController?.toggleEntitySelection(entity);
60
- }, [entity, selectionController?.toggleEntitySelection]);
61
-
62
- const onClick = useCallback((event: MouseEvent) => {
63
- event.stopPropagation();
64
- selectionController?.toggleEntitySelection(entity);
58
+ selectionController?.toggleEntitySelection(entity, checked);
65
59
  }, [entity, selectionController?.toggleEntitySelection]);
66
60
 
67
61
  const hasActions = actions.length > 0;
@@ -71,8 +65,7 @@ export const EntityCollectionRowActions = function EntityCollectionRowActions({
71
65
  const uncollapsedActions = actions.filter(a => a.collapsed === false);
72
66
  return (
73
67
  <div
74
- onClick={onClick}
75
- className={cn(
68
+ className={cls(
76
69
  "h-full flex items-center justify-center flex-col bg-gray-50 dark:bg-gray-900 bg-opacity-90 dark:bg-opacity-90 z-10",
77
70
  frozen ? "sticky left-0" : ""
78
71
  )}
@@ -87,7 +80,9 @@ export const EntityCollectionRowActions = function EntityCollectionRowActions({
87
80
  <div className="w-34 flex justify-center">
88
81
 
89
82
  {uncollapsedActions.map((action, index) => (
90
- <Tooltip key={index} title={action.name}>
83
+ <Tooltip key={index}
84
+ title={action.name}
85
+ asChild={true}>
91
86
  <IconButton
92
87
  onClick={(event: MouseEvent) => {
93
88
  event.stopPropagation();
@@ -149,16 +144,14 @@ export const EntityCollectionRowActions = function EntityCollectionRowActions({
149
144
  </div>}
150
145
 
151
146
  {!hideId && size !== "xs" && (
152
- <div className="w-[138px] text-center overflow-hidden truncate">
147
+ <div
148
+ className="w-[138px] text-center overflow-hidden truncate font-mono text-xs text-text-secondary dark:text-text-secondary-dark max-w-full text-ellipsis px-2"
149
+ onClick={(event) => {
150
+ event.stopPropagation();
151
+ }}>
153
152
 
154
153
  {entity
155
- ? <Typography
156
- onClick={(event) => {
157
- event.stopPropagation();
158
- }}
159
- className={"font-mono select-all"}
160
- variant={"caption"}
161
- color={"secondary"}> {entity.id} </Typography>
154
+ ? entity.id
162
155
  : <Skeleton/>
163
156
  }
164
157
  </div>
@@ -5,7 +5,6 @@ import { ErrorBoundary } from "../ErrorBoundary";
5
5
  import { useFireCMSContext, useLargeLayout } from "../../hooks";
6
6
  import { CellRendererParams, VirtualTableColumn } from "../VirtualTable";
7
7
  import { getValueInPath } from "../../util";
8
- import { getRowHeight } from "../VirtualTable/common";
9
8
  import { EntityCollectionRowActions } from "./EntityCollectionRowActions";
10
9
  import { CollectionTableToolbar } from "./internal/CollectionTableToolbar";
11
10
  import { EntityCollectionTableProps } from "./EntityCollectionTableProps";
@@ -15,7 +14,8 @@ import { renderSkeletonText } from "../../preview";
15
14
  import { propertiesToColumns } from "./column_utils";
16
15
  import { ErrorView } from "../ErrorView";
17
16
  import { SelectableTable } from "../SelectableTable/SelectableTable";
18
-
17
+ import { cls } from "@firecms/ui";
18
+ import { getRowHeight } from "../common/table_height";
19
19
 
20
20
  /**
21
21
  * This component is in charge of rendering a collection table with a high
@@ -43,6 +43,8 @@ import { SelectableTable } from "../SelectableTable/SelectableTable";
43
43
  */
44
44
  export const EntityCollectionTable = function EntityCollectionTable<M extends Record<string, any>, UserType extends User>
45
45
  ({
46
+ className,
47
+ style,
46
48
  forceFilter,
47
49
  actionsStart,
48
50
  actions,
@@ -73,13 +75,13 @@ export const EntityCollectionTable = function EntityCollectionTable<M extends Re
73
75
  emptyComponent,
74
76
  getIdColumnWidth,
75
77
  onTextSearchClick,
76
- textSearchLoading
78
+ textSearchLoading,
79
+ enablePopupIcon
77
80
  }: EntityCollectionTableProps<M>) {
78
81
 
79
82
  const ref = useRef<HTMLDivElement>(null);
80
83
 
81
84
  const largeLayout = useLargeLayout();
82
- const disabledFilterChange = Boolean(forceFilter);
83
85
  const selectedEntities = (selectionController?.selectedEntities?.length > 0 ? selectionController?.selectedEntities : highlightedEntities)?.filter(Boolean);
84
86
 
85
87
  const context: FireCMSContext<UserType> = useFireCMSContext();
@@ -88,8 +90,6 @@ export const EntityCollectionTable = function EntityCollectionTable<M extends Re
88
90
 
89
91
  const selectedEntityIds = selectedEntities?.map(e => e.id);
90
92
 
91
- const filterIsSet = !!tableController.filterValues && Object.keys(tableController.filterValues).length > 0;
92
-
93
93
  const updateSize = useCallback((size: CollectionSize) => {
94
94
  if (onSizeChanged)
95
95
  onSizeChanged(size);
@@ -120,10 +120,8 @@ export const EntityCollectionTable = function EntityCollectionTable<M extends Re
120
120
  const propertyKey = column.key;
121
121
 
122
122
  let disabled = column.custom?.disabled;
123
- const propertyValue = entity.values ? getValueInPath(entity.values, propertyKey) : undefined;
124
123
  const property = getPropertyFor?.({
125
124
  propertyKey,
126
- propertyValue,
127
125
  entity
128
126
  }) ?? column.custom.resolvedProperty;
129
127
  if (!property?.disabled) {
@@ -150,6 +148,7 @@ export const EntityCollectionTable = function EntityCollectionTable<M extends Re
150
148
  height={getRowHeight(size)}
151
149
  entity={entity}
152
150
  disabled={disabled}
151
+ enablePopupIcon={enablePopupIcon}
153
152
  path={entity.path}/>
154
153
  : renderSkeletonText()
155
154
  }
@@ -179,7 +178,10 @@ export const EntityCollectionTable = function EntityCollectionTable<M extends Re
179
178
 
180
179
  const child = Builder
181
180
  ? <Builder entity={entity} context={context}/>
182
- : <>{additionalField.value?.({ entity, context })}</>;
181
+ : <>{additionalField.value?.({
182
+ entity,
183
+ context
184
+ })}</>;
183
185
 
184
186
  return (
185
187
  <EntityTableCell
@@ -207,7 +209,6 @@ export const EntityCollectionTable = function EntityCollectionTable<M extends Re
207
209
  properties,
208
210
  sortable,
209
211
  forceFilter,
210
- disabledFilter: disabledFilterChange,
211
212
  AdditionalHeaderWidget
212
213
  });
213
214
 
@@ -237,13 +238,15 @@ export const EntityCollectionTable = function EntityCollectionTable<M extends Re
237
238
 
238
239
  const columns: VirtualTableColumn[] = [
239
240
  idColumn,
240
- ...displayedColumnIds
241
- .map((p) => {
242
- return collectionColumns.find(c => c.key === p.key);
243
- }).filter(Boolean) as VirtualTableColumn[]
241
+ ...(displayedColumnIds
242
+ ? displayedColumnIds
243
+ .map((p) => {
244
+ return collectionColumns.find(c => c.key === p.key);
245
+ }).filter(Boolean)
246
+ : collectionColumns) as VirtualTableColumn[]
244
247
  ];
245
248
 
246
- const cellRenderer = (props: CellRendererParams<any>) => {
249
+ const cellRenderer = useCallback((props: CellRendererParams<any>) => {
247
250
  const column = props.column;
248
251
  const columns = props.columns;
249
252
  const columnKey = column.key;
@@ -283,20 +286,18 @@ export const EntityCollectionTable = function EntityCollectionTable<M extends Re
283
286
  <ErrorView error={e}/>
284
287
  </EntityTableCell>;
285
288
  }
286
- }
289
+ }, [tableRowActionsBuilder, additionalCellRenderer, propertyCellRenderer, size]);
287
290
 
288
291
  return (
289
292
 
290
293
  <div ref={ref}
291
- className="h-full w-full flex flex-col bg-white dark:bg-gray-950">
294
+ style={style}
295
+ className={cls("h-full w-full flex flex-col bg-white dark:bg-gray-950", className)}>
292
296
 
293
297
  <CollectionTableToolbar
294
- forceFilter={disabledFilterChange}
295
- filterIsSet={filterIsSet}
296
298
  onTextSearch={textSearchEnabled ? onTextSearch : undefined}
297
299
  textSearchLoading={textSearchLoading}
298
300
  onTextSearchClick={textSearchEnabled ? onTextSearchClick : undefined}
299
- clearFilter={tableController.clearFilter}
300
301
  size={size}
301
302
  onSizeChanged={updateSize}
302
303
  title={title}
@@ -2,7 +2,7 @@ import React from "react";
2
2
  import {
3
3
  AdditionalFieldDelegate,
4
4
  CollectionSize,
5
- Entity, EntityCollection,
5
+ Entity,
6
6
  EntityTableController,
7
7
  FilterValues,
8
8
  ResolvedProperties,
@@ -12,13 +12,16 @@ import {
12
12
  } from "../../types";
13
13
  import { OnCellValueChange, OnColumnResizeParams, UniqueFieldValidator } from "../common/types";
14
14
 
15
-
16
15
  /**
17
16
  * @group Collection components
18
17
  */
19
18
  export type EntityCollectionTableProps<M extends Record<string, any>,
20
19
  UserType extends User = User> = {
21
20
 
21
+ className?: string;
22
+
23
+ style?: React.CSSProperties;
24
+
22
25
  /**
23
26
  * Display these entities as selected
24
27
  */
@@ -92,7 +95,7 @@ export type EntityCollectionTableProps<M extends Record<string, any>,
92
95
  */
93
96
  tableController: EntityTableController<M>;
94
97
 
95
- displayedColumnIds: PropertyColumnConfig[];
98
+ displayedColumnIds?: PropertyColumnConfig[];
96
99
 
97
100
  forceFilter?: FilterValues<Extract<keyof M, string>>;
98
101
 
@@ -131,15 +134,16 @@ export type EntityCollectionTableProps<M extends Record<string, any>,
131
134
  onTextSearchClick?: () => void;
132
135
 
133
136
  textSearchLoading?: boolean;
134
- }
137
+
138
+ enablePopupIcon: boolean;
139
+ };
135
140
 
136
141
  export type GetPropertyForProps<M extends Record<string, any>> = {
137
142
  propertyKey: string,
138
- propertyValue: any,
139
143
  entity: Entity<M>
140
144
  };
141
145
 
142
146
  export type PropertyColumnConfig = {
143
147
  key: string,
144
- disabled: boolean,
148
+ disabled?: boolean,
145
149
  };