@firecms/core 3.0.0-canary.12 → 3.0.0-canary.120

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 (286) hide show
  1. package/README.md +1 -1
  2. package/dist/app/AppBar.d.ts +12 -0
  3. package/dist/app/Drawer.d.ts +17 -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 +2 -1
  8. package/dist/components/CircularProgressCenter.d.ts +1 -1
  9. package/dist/components/ClearFilterSortButton.d.ts +5 -0
  10. package/dist/components/EntityCollectionTable/EntityCollectionRowActions.d.ts +11 -12
  11. package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +1 -1
  12. package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +5 -3
  13. package/dist/components/EntityCollectionTable/PropertyTableCell.d.ts +1 -0
  14. package/dist/components/EntityCollectionTable/column_utils.d.ts +1 -2
  15. package/dist/components/EntityCollectionTable/fields/TableReferenceField.d.ts +3 -1
  16. package/dist/components/EntityCollectionTable/internal/CollectionTableToolbar.d.ts +1 -4
  17. package/dist/components/EntityCollectionTable/internal/EntityTableCell.d.ts +2 -2
  18. package/dist/components/EntityCollectionTable/internal/popup_field/PopupFormField.d.ts +2 -2
  19. package/dist/components/EntityCollectionView/EntityCollectionView.d.ts +12 -2
  20. package/dist/components/EntityCollectionView/EntityCollectionViewStartActions.d.ts +11 -0
  21. package/dist/components/EntityPreview.d.ts +6 -5
  22. package/dist/components/ErrorView.d.ts +1 -1
  23. package/dist/components/HomePage/DefaultHomePage.d.ts +1 -1
  24. package/dist/components/HomePage/NavigationCardBinding.d.ts +1 -1
  25. package/dist/components/PropertyIdCopyTooltip.d.ts +8 -0
  26. package/dist/components/ReferenceWidget.d.ts +3 -1
  27. package/dist/components/SelectableTable/SelectableTable.d.ts +1 -1
  28. package/dist/components/SelectableTable/filters/ReferenceFilterField.d.ts +2 -1
  29. package/dist/components/VirtualTable/VirtualTableProps.d.ts +15 -12
  30. package/dist/components/VirtualTable/types.d.ts +3 -3
  31. package/dist/components/{EntityCollectionTable/internal → common}/default_entity_actions.d.ts +1 -1
  32. package/dist/components/common/index.d.ts +1 -0
  33. package/dist/components/common/table_height.d.ts +5 -0
  34. package/dist/components/common/types.d.ts +4 -6
  35. package/dist/components/common/useColumnsIds.d.ts +2 -1
  36. package/dist/components/common/useDataSourceEntityCollectionTableController.d.ts +3 -0
  37. package/dist/components/index.d.ts +3 -1
  38. package/dist/{components/FireCMSAppBar.d.ts → core/DefaultAppBar.d.ts} +6 -9
  39. package/dist/core/DefaultDrawer.d.ts +19 -0
  40. package/dist/core/DrawerNavigationItem.d.ts +10 -0
  41. package/dist/core/EntityEditView.d.ts +18 -4
  42. package/dist/core/FireCMS.d.ts +1 -1
  43. package/dist/core/NavigationRoutes.d.ts +3 -3
  44. package/dist/core/index.d.ts +3 -4
  45. package/dist/form/PropertyFieldBinding.d.ts +1 -1
  46. package/dist/form/components/ErrorFocus.d.ts +1 -1
  47. package/dist/form/components/FieldHelperText.d.ts +3 -3
  48. package/dist/form/components/FormikArrayContainer.d.ts +2 -1
  49. package/dist/form/components/LabelWithIcon.d.ts +1 -1
  50. package/dist/form/components/LabelWithIconAndTooltip.d.ts +15 -0
  51. package/dist/form/components/StorageItemPreview.d.ts +4 -4
  52. package/dist/form/components/index.d.ts +1 -0
  53. package/dist/form/field_bindings/ArrayCustomShapedFieldBinding.d.ts +1 -1
  54. package/dist/form/field_bindings/ArrayOfReferencesFieldBinding.d.ts +1 -1
  55. package/dist/form/field_bindings/BlockFieldBinding.d.ts +1 -1
  56. package/dist/form/field_bindings/KeyValueFieldBinding.d.ts +1 -1
  57. package/dist/form/field_bindings/MapFieldBinding.d.ts +1 -1
  58. package/dist/form/field_bindings/MarkdownEditorFieldBinding.d.ts +11 -0
  59. package/dist/form/field_bindings/MultiSelectBinding.d.ts +1 -1
  60. package/dist/form/field_bindings/ReadOnlyFieldBinding.d.ts +1 -1
  61. package/dist/form/field_bindings/RepeatFieldBinding.d.ts +1 -1
  62. package/dist/form/field_bindings/SelectFieldBinding.d.ts +1 -1
  63. package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +3 -5
  64. package/dist/form/field_bindings/TextFieldBinding.d.ts +1 -1
  65. package/dist/form/index.d.ts +2 -4
  66. package/dist/form/useClearRestoreValue.d.ts +2 -2
  67. package/dist/hooks/data/save.d.ts +1 -2
  68. package/dist/hooks/index.d.ts +1 -0
  69. package/dist/hooks/useBuildNavigationController.d.ts +1 -2
  70. package/dist/hooks/useProjectLog.d.ts +2 -2
  71. package/dist/hooks/useValidateAuthenticator.d.ts +4 -8
  72. package/dist/index.d.ts +1 -0
  73. package/dist/index.es.js +15742 -12458
  74. package/dist/index.es.js.map +1 -1
  75. package/dist/index.umd.js +19965 -587
  76. package/dist/index.umd.js.map +1 -1
  77. package/dist/internal/useBuildDataSource.d.ts +1 -16
  78. package/dist/preview/PropertyPreviewProps.d.ts +6 -1
  79. package/dist/preview/components/EnumValuesChip.d.ts +1 -1
  80. package/dist/preview/components/ReferencePreview.d.ts +3 -2
  81. package/dist/preview/components/StorageThumbnail.d.ts +2 -1
  82. package/dist/preview/components/UrlComponentPreview.d.ts +2 -1
  83. package/dist/types/auth.d.ts +3 -3
  84. package/dist/types/collections.d.ts +39 -5
  85. package/dist/types/datasource.d.ts +55 -35
  86. package/dist/types/entities.d.ts +6 -1
  87. package/dist/types/entity_actions.d.ts +14 -0
  88. package/dist/types/entity_overrides.d.ts +2 -2
  89. package/dist/types/fields.d.ts +47 -41
  90. package/dist/types/index.d.ts +0 -1
  91. package/dist/types/navigation.d.ts +6 -5
  92. package/dist/types/plugins.d.ts +14 -4
  93. package/dist/types/properties.d.ts +34 -21
  94. package/dist/types/side_dialogs_controller.d.ts +10 -0
  95. package/dist/types/storage.d.ts +11 -3
  96. package/dist/util/entities.d.ts +2 -2
  97. package/dist/util/icon_list.d.ts +5 -1
  98. package/dist/util/icon_synonyms.d.ts +1 -97
  99. package/dist/util/icons.d.ts +3 -2
  100. package/dist/util/index.d.ts +1 -0
  101. package/dist/util/navigation_utils.d.ts +2 -2
  102. package/dist/util/objects.d.ts +1 -1
  103. package/dist/util/plurals.d.ts +0 -2
  104. package/dist/util/property_utils.d.ts +1 -1
  105. package/dist/util/resolutions.d.ts +27 -13
  106. package/dist/util/storage.d.ts +23 -2
  107. package/dist/util/useStorageUploadController.d.ts +3 -3
  108. package/package.json +128 -119
  109. package/src/app/AppBar.tsx +18 -0
  110. package/src/app/Drawer.tsx +25 -0
  111. package/src/app/Scaffold.tsx +245 -0
  112. package/src/app/index.ts +4 -0
  113. package/src/app/useApp.tsx +32 -0
  114. package/src/components/ArrayContainer.tsx +15 -10
  115. package/src/components/CircularProgressCenter.tsx +1 -1
  116. package/src/components/ClearFilterSortButton.tsx +41 -0
  117. package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +12 -19
  118. package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +21 -20
  119. package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +10 -6
  120. package/src/components/EntityCollectionTable/PropertyTableCell.tsx +41 -35
  121. package/src/components/EntityCollectionTable/column_utils.tsx +3 -3
  122. package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +32 -17
  123. package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +14 -6
  124. package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +29 -34
  125. package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +17 -13
  126. package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +19 -7
  127. package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +7 -10
  128. package/src/components/EntityCollectionView/EntityCollectionView.tsx +75 -51
  129. package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +68 -0
  130. package/src/components/EntityCollectionView/useSelectionController.tsx +19 -7
  131. package/src/components/EntityPreview.tsx +38 -34
  132. package/src/components/EntityView.tsx +5 -5
  133. package/src/components/ErrorView.tsx +1 -1
  134. package/src/components/HomePage/DefaultHomePage.tsx +26 -19
  135. package/src/components/HomePage/NavigationCard.tsx +3 -3
  136. package/src/components/HomePage/NavigationCardBinding.tsx +1 -1
  137. package/src/components/HomePage/SmallNavigationCard.tsx +5 -6
  138. package/src/components/PropertyIdCopyTooltip.tsx +48 -0
  139. package/src/components/ReferenceTable/ReferenceSelectionTable.tsx +8 -6
  140. package/src/components/ReferenceWidget.tsx +22 -12
  141. package/src/components/SearchIconsView.tsx +11 -7
  142. package/src/components/SelectableTable/SelectableTable.tsx +7 -7
  143. package/src/components/SelectableTable/filters/BooleanFilterField.tsx +2 -3
  144. package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +22 -7
  145. package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +28 -6
  146. package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +35 -15
  147. package/src/components/VirtualTable/VirtualTable.tsx +70 -37
  148. package/src/components/VirtualTable/VirtualTableCell.tsx +1 -1
  149. package/src/components/VirtualTable/VirtualTableHeader.tsx +4 -4
  150. package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +2 -2
  151. package/src/components/VirtualTable/VirtualTableProps.tsx +18 -14
  152. package/src/components/VirtualTable/VirtualTableRow.tsx +4 -5
  153. package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +4 -4
  154. package/src/components/VirtualTable/fields/VirtualTableInput.tsx +2 -1
  155. package/src/components/VirtualTable/fields/VirtualTableNumberInput.tsx +2 -1
  156. package/src/components/VirtualTable/fields/VirtualTableSelect.tsx +0 -2
  157. package/src/components/VirtualTable/types.tsx +2 -3
  158. package/src/components/{EntityCollectionTable/internal → common}/default_entity_actions.tsx +2 -2
  159. package/src/components/common/index.ts +1 -0
  160. package/src/components/{VirtualTable/common.tsx → common/table_height.tsx} +5 -2
  161. package/src/components/common/types.tsx +4 -6
  162. package/src/components/common/useColumnsIds.tsx +23 -2
  163. package/src/components/common/useDataSourceEntityCollectionTableController.tsx +11 -0
  164. package/src/components/common/useTableSearchHelper.ts +53 -12
  165. package/src/components/index.tsx +3 -1
  166. package/src/contexts/DialogsProvider.tsx +2 -2
  167. package/src/{components/FireCMSAppBar.tsx → core/DefaultAppBar.tsx} +52 -37
  168. package/src/core/DefaultDrawer.tsx +179 -0
  169. package/src/core/DrawerNavigationItem.tsx +66 -0
  170. package/src/core/EntityEditView.tsx +716 -149
  171. package/src/core/EntitySidePanel.tsx +1 -2
  172. package/src/core/FireCMS.tsx +39 -44
  173. package/src/core/NavigationRoutes.tsx +7 -8
  174. package/src/core/SideDialogs.tsx +2 -0
  175. package/src/core/field_configs.tsx +4 -5
  176. package/src/core/index.tsx +3 -4
  177. package/src/form/PropertyFieldBinding.tsx +53 -21
  178. package/src/form/components/CustomIdField.tsx +4 -2
  179. package/src/form/components/FieldHelperText.tsx +4 -4
  180. package/src/form/components/FormikArrayContainer.tsx +4 -1
  181. package/src/form/components/LabelWithIcon.tsx +27 -19
  182. package/src/form/components/LabelWithIconAndTooltip.tsx +28 -0
  183. package/src/form/components/StorageItemPreview.tsx +21 -11
  184. package/src/form/components/StorageUploadProgress.tsx +3 -4
  185. package/src/form/components/index.tsx +1 -0
  186. package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +26 -15
  187. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +29 -24
  188. package/src/form/field_bindings/BlockFieldBinding.tsx +14 -12
  189. package/src/form/field_bindings/DateTimeFieldBinding.tsx +17 -14
  190. package/src/form/field_bindings/KeyValueFieldBinding.tsx +52 -46
  191. package/src/form/field_bindings/MapFieldBinding.tsx +17 -17
  192. package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +150 -0
  193. package/src/form/field_bindings/MultiSelectBinding.tsx +9 -5
  194. package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +11 -16
  195. package/src/form/field_bindings/ReferenceFieldBinding.tsx +41 -30
  196. package/src/form/field_bindings/RepeatFieldBinding.tsx +32 -19
  197. package/src/form/field_bindings/SelectFieldBinding.tsx +20 -13
  198. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +36 -46
  199. package/src/form/field_bindings/SwitchFieldBinding.tsx +9 -5
  200. package/src/form/field_bindings/TextFieldBinding.tsx +26 -23
  201. package/src/form/index.tsx +2 -7
  202. package/src/form/useClearRestoreValue.tsx +2 -2
  203. package/src/form/validation.ts +1 -17
  204. package/src/hooks/data/delete.ts +2 -1
  205. package/src/hooks/data/save.ts +6 -1
  206. package/src/hooks/data/useDataSource.tsx +11 -3
  207. package/src/hooks/index.tsx +1 -0
  208. package/src/hooks/useBuildLocalConfigurationPersistence.tsx +8 -10
  209. package/src/hooks/useBuildModeController.tsx +11 -5
  210. package/src/hooks/useBuildNavigationController.tsx +91 -31
  211. package/src/hooks/useProjectLog.tsx +19 -8
  212. package/src/hooks/useResolvedNavigationFrom.tsx +1 -1
  213. package/src/hooks/useValidateAuthenticator.tsx +21 -41
  214. package/src/index.ts +1 -0
  215. package/src/internal/useBuildDataSource.ts +77 -81
  216. package/src/internal/useBuildSideDialogsController.tsx +1 -0
  217. package/src/internal/useBuildSideEntityController.tsx +102 -22
  218. package/src/internal/useUnsavedChangesDialog.tsx +3 -1
  219. package/src/preview/PropertyPreview.tsx +10 -17
  220. package/src/preview/PropertyPreviewProps.tsx +7 -1
  221. package/src/preview/components/BooleanPreview.tsx +2 -2
  222. package/src/preview/components/EnumValuesChip.tsx +2 -2
  223. package/src/preview/components/ImagePreview.tsx +24 -34
  224. package/src/preview/components/ReferencePreview.tsx +23 -34
  225. package/src/preview/components/StorageThumbnail.tsx +5 -1
  226. package/src/preview/components/UrlComponentPreview.tsx +44 -11
  227. package/src/preview/property_previews/ArrayOfMapsPreview.tsx +1 -2
  228. package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +3 -2
  229. package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +1 -2
  230. package/src/preview/property_previews/ArrayOfStringsPreview.tsx +0 -1
  231. package/src/preview/property_previews/ArrayOneOfPreview.tsx +3 -4
  232. package/src/preview/property_previews/ArrayPropertyPreview.tsx +3 -4
  233. package/src/preview/property_previews/MapPropertyPreview.tsx +6 -6
  234. package/src/preview/property_previews/SkeletonPropertyComponent.tsx +2 -2
  235. package/src/preview/property_previews/StringPropertyPreview.tsx +3 -3
  236. package/src/preview/util.ts +2 -2
  237. package/src/types/auth.tsx +3 -3
  238. package/src/types/collections.ts +48 -7
  239. package/src/types/customization_controller.tsx +0 -1
  240. package/src/types/datasource.ts +65 -43
  241. package/src/types/entities.ts +11 -1
  242. package/src/types/entity_actions.tsx +16 -3
  243. package/src/types/entity_overrides.tsx +2 -2
  244. package/src/types/fields.tsx +51 -45
  245. package/src/types/index.ts +0 -1
  246. package/src/types/navigation.ts +7 -7
  247. package/src/types/plugins.tsx +16 -6
  248. package/src/types/properties.ts +39 -22
  249. package/src/types/side_dialogs_controller.tsx +13 -0
  250. package/src/types/storage.ts +12 -3
  251. package/src/util/entities.ts +6 -5
  252. package/src/util/enums.ts +1 -1
  253. package/src/util/icon_list.ts +15 -10
  254. package/src/util/icon_synonyms.ts +3 -99
  255. package/src/util/icons.tsx +8 -2
  256. package/src/util/index.ts +1 -0
  257. package/src/util/navigation_utils.ts +6 -6
  258. package/src/util/objects.ts +25 -28
  259. package/src/util/permissions.ts +1 -0
  260. package/src/util/plurals.ts +0 -2
  261. package/src/util/property_utils.tsx +1 -1
  262. package/src/util/references.ts +3 -0
  263. package/src/util/resolutions.ts +74 -41
  264. package/src/util/storage.ts +79 -21
  265. package/src/util/strings.ts +2 -2
  266. package/src/util/useStorageUploadController.tsx +33 -7
  267. package/src/util/useTraceUpdate.tsx +1 -0
  268. package/dist/components/PropertyIdCopyTooltipContent.d.ts +0 -3
  269. package/dist/components/VirtualTable/common.d.ts +0 -2
  270. package/dist/core/Drawer.d.ts +0 -23
  271. package/dist/core/Scaffold.d.ts +0 -55
  272. package/dist/core/SideEntityView.d.ts +0 -7
  273. package/dist/form/EntityForm.d.ts +0 -77
  274. package/dist/form/field_bindings/MarkdownFieldBinding.d.ts +0 -9
  275. package/dist/internal/useBuildCustomizationController.d.ts +0 -2
  276. package/dist/internal/useLocaleConfig.d.ts +0 -1
  277. package/dist/types/appcheck.d.ts +0 -26
  278. package/src/components/PropertyIdCopyTooltipContent.tsx +0 -28
  279. package/src/core/Drawer.tsx +0 -191
  280. package/src/core/Scaffold.tsx +0 -281
  281. package/src/core/SideEntityView.tsx +0 -38
  282. package/src/form/EntityForm.tsx +0 -728
  283. package/src/form/field_bindings/MarkdownFieldBinding.tsx +0 -695
  284. package/src/internal/useBuildCustomizationController.tsx +0 -5
  285. package/src/internal/useLocaleConfig.tsx +0 -18
  286. package/src/types/appcheck.ts +0 -29
@@ -24,14 +24,13 @@ import { getPreviewSizeFrom } from "../../preview/util";
24
24
  import { isReadOnly } from "../../util";
25
25
 
26
26
  import { CustomFieldValidator, mapPropertyToYup } from "../../form/validation";
27
- import { useFireCMSContext } from "../../hooks";
28
27
 
29
28
  import { EntityTableCell } from "./internal/EntityTableCell";
30
29
  import { EntityTableCellActions } from "./internal/EntityTableCellActions";
31
30
 
32
- import { getRowHeight } from "../VirtualTable/common";
33
31
  import { useSelectableTableController } from "../SelectableTable/SelectableTableContext";
34
32
  import { useClearRestoreValue } from "../../form/useClearRestoreValue";
33
+ import { getRowHeight } from "../common/table_height";
35
34
 
36
35
  export interface PropertyTableCellProps<T extends CMSType> {
37
36
  propertyKey: string;
@@ -46,9 +45,12 @@ export interface PropertyTableCellProps<T extends CMSType> {
46
45
  entity: Entity<any>;
47
46
  path: string;
48
47
  disabled: boolean;
48
+ enablePopupIcon?: boolean;
49
49
  }
50
50
 
51
51
  function isStorageProperty(property: ResolvedProperty) {
52
+ if (property.dataType === "string" && property.markdown)
53
+ return false;
52
54
  if (property.dataType === "string" && (property as ResolvedStringProperty).storage)
53
55
  return true;
54
56
  if (property.dataType === "array") {
@@ -74,11 +76,10 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any>>(
74
76
  path,
75
77
  entity,
76
78
  readonly,
77
- disabled: disabledProp
79
+ disabled: disabledProp,
80
+ enablePopupIcon = true
78
81
  }: PropertyTableCellProps<T>) {
79
82
 
80
- const context = useFireCMSContext();
81
-
82
83
  const {
83
84
  onValueChange,
84
85
  size,
@@ -95,6 +96,7 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any>>(
95
96
  const internalValueRef = useRef(value);
96
97
 
97
98
  const [error, setError] = useState<Error | undefined>();
99
+ const [validationError, setValidationError] = useState<Error | undefined>();
98
100
  const [saved, setSaved] = useState<boolean>(false);
99
101
 
100
102
  const onValueUpdated = useCallback(() => {
@@ -120,7 +122,7 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any>>(
120
122
  useEffect(
121
123
  () => {
122
124
  if (!equal(value, internalValueRef.current)) {
123
- setError(undefined);
125
+ setValidationError(undefined);
124
126
  setInternalValue(value);
125
127
  internalValueRef.current = value;
126
128
  onValueUpdated();
@@ -136,32 +138,34 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any>>(
136
138
  validation
137
139
  .validate(value)
138
140
  .then(() => {
139
- setError(undefined);
141
+ setValidationError(undefined);
140
142
  internalValueRef.current = value;
141
143
  if (onValueChange) {
142
- onValueChange({
143
- value,
144
- propertyKey,
145
- setError,
146
- onValueUpdated,
147
- entity,
148
- fullPath: path,
149
- context
150
- });
144
+ try {
145
+ onValueChange({
146
+ value,
147
+ propertyKey,
148
+ setError,
149
+ onValueUpdated,
150
+ data: entity,
151
+ });
152
+ } catch (e: any) {
153
+ console.error("onValueChange error", e);
154
+ setError(e);
155
+ }
156
+
151
157
  }
152
158
  })
153
159
  .catch((e) => {
154
- setError(e);
160
+ setValidationError(e);
155
161
  });
156
162
  };
157
163
 
158
164
  useEffect(() => {
159
165
  validation
160
166
  .validate(internalValue)
161
- .then(() => setError(undefined))
162
- .catch((e) => {
163
- setError(e);
164
- });
167
+ .then(() => setValidationError(undefined))
168
+ .catch(setValidationError);
165
169
  }, [internalValue, validation, propertyKey, property, entity]);
166
170
 
167
171
  const updateValue = (newValue: any | null) => {
@@ -237,7 +241,6 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any>>(
237
241
  height={getRowHeight(size)}
238
242
  propertyKey={propertyKey}
239
243
  property={property}
240
- // entity={entity}
241
244
  value={internalValue}
242
245
  size={getPreviewSizeFrom(size)}
243
246
  />
@@ -247,7 +250,7 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any>>(
247
250
  if (!customField && (!customPreview || selected)) {
248
251
  const isAStorageProperty = isStorageProperty(property);
249
252
  if (isAStorageProperty) {
250
- innerComponent = <TableStorageUpload error={error}
253
+ innerComponent = <TableStorageUpload error={validationError ?? error}
251
254
  disabled={disabled}
252
255
  focused={selected}
253
256
  selected={selected}
@@ -274,7 +277,7 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any>>(
274
277
  valueType={"number"}
275
278
  small={getPreviewSizeFrom(size) !== "medium"}
276
279
  enumValues={numberProperty.enumValues}
277
- error={error}
280
+ error={validationError ?? error}
278
281
  internalValue={internalValue as string | number}
279
282
  updateValue={updateValue}
280
283
  />;
@@ -282,7 +285,7 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any>>(
282
285
  } else {
283
286
  innerComponent = <VirtualTableNumberInput
284
287
  align={align}
285
- error={error}
288
+ error={validationError ?? error}
286
289
  focused={selected}
287
290
  disabled={disabled}
288
291
  value={internalValue as number}
@@ -300,14 +303,14 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any>>(
300
303
  valueType={"string"}
301
304
  small={getPreviewSizeFrom(size) !== "medium"}
302
305
  enumValues={stringProperty.enumValues}
303
- error={error}
306
+ error={validationError ?? error}
304
307
  internalValue={internalValue as string | number}
305
308
  updateValue={updateValue}
306
309
  />;
307
310
  fullHeight = true;
308
- } else if (!stringProperty.storage) {
311
+ } else if (stringProperty.markdown || !stringProperty.storage) {
309
312
  const multiline = Boolean(stringProperty.multiline) || Boolean(stringProperty.markdown);
310
- innerComponent = <VirtualTableInput error={error}
313
+ innerComponent = <VirtualTableInput error={validationError ?? error}
311
314
  disabled={disabled}
312
315
  multiline={multiline}
313
316
  focused={selected}
@@ -317,7 +320,7 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any>>(
317
320
  allowScroll = true;
318
321
  }
319
322
  } else if (property.dataType === "boolean") {
320
- innerComponent = <VirtualTableSwitch error={error}
323
+ innerComponent = <VirtualTableSwitch error={validationError ?? error}
321
324
  disabled={disabled}
322
325
  focused={selected}
323
326
  internalValue={internalValue as boolean}
@@ -325,7 +328,7 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any>>(
325
328
  />;
326
329
  } else if (property.dataType === "date") {
327
330
  innerComponent = <VirtualTableDateField name={propertyKey as string}
328
- error={error}
331
+ error={validationError ?? error}
329
332
  disabled={disabled}
330
333
  mode={property.mode}
331
334
  focused={selected}
@@ -346,6 +349,8 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any>>(
346
349
  path={property.path}
347
350
  multiselect={false}
348
351
  previewProperties={property.previewProperties}
352
+ includeId={property.includeId}
353
+ includeEntityLink={property.includeEntityLink}
349
354
  title={property.name}
350
355
  forceFilter={property.forceFilter}
351
356
  />;
@@ -368,7 +373,7 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any>>(
368
373
  small={getPreviewSizeFrom(size) !== "medium"}
369
374
  valueType={arrayProperty.of.dataType}
370
375
  enumValues={arrayProperty.of.enumValues}
371
- error={error}
376
+ error={validationError ?? error}
372
377
  internalValue={internalValue as string | number}
373
378
  updateValue={updateValue}
374
379
  />;
@@ -390,6 +395,8 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any>>(
390
395
  previewProperties={arrayProperty.of.previewProperties}
391
396
  title={arrayProperty.name}
392
397
  forceFilter={arrayProperty.of.forceFilter}
398
+ includeId={arrayProperty.of.includeId}
399
+ includeEntityLink={arrayProperty.of.includeEntityLink}
393
400
  />;
394
401
  }
395
402
  allowScroll = false;
@@ -401,11 +408,10 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any>>(
401
408
 
402
409
  if (!innerComponent) {
403
410
  allowScroll = false;
404
- showExpandIcon = selected && !innerComponent && !disabled && !readOnlyProperty;
411
+ showExpandIcon = enablePopupIcon && selected && !innerComponent && !disabled && !readOnlyProperty;
405
412
  innerComponent = (
406
- <PropertyPreview width={width}
413
+ <PropertyPreview width={width}
407
414
  height={height}
408
- // entity={entity}
409
415
  propertyKey={propertyKey as string}
410
416
  value={internalValue}
411
417
  property={property}
@@ -426,7 +432,7 @@ export const PropertyTableCell = React.memo<PropertyTableCellProps<any>>(
426
432
  removePadding={removePadding}
427
433
  fullHeight={fullHeight}
428
434
  saved={saved}
429
- error={error}
435
+ error={validationError ?? error}
430
436
  align={align}
431
437
  allowScroll={allowScroll}
432
438
  showExpandIcon={showExpandIcon}
@@ -21,7 +21,6 @@ export interface PropertiesToColumnsParams<M extends Record<string, any>> {
21
21
  properties: ResolvedProperties<M>;
22
22
  sortable?: boolean;
23
23
  forceFilter?: FilterValues<keyof M extends string ? keyof M : never>;
24
- disabledFilter?: boolean;
25
24
  AdditionalHeaderWidget?: React.ComponentType<{
26
25
  property: ResolvedProperty,
27
26
  propertyKey: string,
@@ -29,7 +28,8 @@ export interface PropertiesToColumnsParams<M extends Record<string, any>> {
29
28
  }>;
30
29
  }
31
30
 
32
- export function propertiesToColumns<M extends Record<string, any>>({ properties, sortable, forceFilter, disabledFilter, AdditionalHeaderWidget }: PropertiesToColumnsParams<M>): VirtualTableColumn[] {
31
+ export function propertiesToColumns<M extends Record<string, any>>({ properties, sortable, forceFilter, AdditionalHeaderWidget }: PropertiesToColumnsParams<M>): VirtualTableColumn[] {
32
+ const disabledFilter = Boolean(forceFilter);
33
33
  return Object.entries<ResolvedProperty>(properties)
34
34
  .flatMap(([key, property]) => getColumnKeysForProperty(property, key))
35
35
  .map(({
@@ -45,7 +45,7 @@ export function propertiesToColumns<M extends Record<string, any>>({ properties,
45
45
  align: getTableCellAlignment(property),
46
46
  icon: getIconForProperty(property, "small"),
47
47
  title: property.name ?? key as string,
48
- sortable: sortable && (forceFilter ? Object.keys(forceFilter).includes(key) : true),
48
+ sortable: sortable,
49
49
  filter: !disabledFilter && filterable,
50
50
  width: getTablePropertyColumnWidth(property),
51
51
  resizable: true,
@@ -1,14 +1,14 @@
1
- import React, { useCallback, useState } from "react";
1
+ import React, { useCallback } from "react";
2
2
  import equal from "react-fast-compare"
3
3
 
4
4
  import { ReferencePreview } from "../../../preview";
5
5
  import { CollectionSize, Entity, EntityCollection, EntityReference, FilterValues } from "../../../types";
6
6
 
7
7
  import { getPreviewSizeFrom } from "../../../preview/util";
8
- import { getReferenceFrom } from "../../../util";
8
+ import { getReferenceFrom, IconForView } from "../../../util";
9
9
  import { useCustomizationController, useNavigationController, useReferenceDialog } from "../../../hooks";
10
10
  import { ErrorView } from "../../ErrorView";
11
- import { Button } from "@firecms/ui";
11
+ import { cls } from "@firecms/ui";
12
12
  import { EntityPreviewContainer } from "../../EntityPreview";
13
13
 
14
14
  type TableReferenceFieldProps = {
@@ -22,6 +22,8 @@ type TableReferenceFieldProps = {
22
22
  title?: string;
23
23
  path: string;
24
24
  forceFilter?: FilterValues<string>;
25
+ includeId?: boolean;
26
+ includeEntityLink?: boolean;
25
27
  };
26
28
 
27
29
  export function TableReferenceField(props: TableReferenceFieldProps) {
@@ -29,7 +31,7 @@ export function TableReferenceField(props: TableReferenceFieldProps) {
29
31
 
30
32
  const navigationController = useNavigationController();
31
33
  const { path } = props;
32
- const collection = navigationController.getCollection<EntityCollection>(path);
34
+ const collection = navigationController.getCollection(path);
33
35
  if (!collection) {
34
36
  if (customizationController.components?.missingReference) {
35
37
  return <customizationController.components.missingReference path={path}/>;
@@ -37,11 +39,11 @@ export function TableReferenceField(props: TableReferenceFieldProps) {
37
39
  throw Error(`Couldn't find the corresponding collection view for the path: ${path}`);
38
40
  }
39
41
  }
40
- return <TableReferenceFieldSuccess {...props} collection={collection}/>;
42
+ return <TableReferenceFieldInternal {...props} collection={collection}/>;
41
43
  }
42
44
 
43
- export const TableReferenceFieldSuccess = React.memo(
44
- function TableReferenceFieldSuccess(props: TableReferenceFieldProps & {
45
+ export const TableReferenceFieldInternal = React.memo(
46
+ function TableReferenceFieldInternal(props: TableReferenceFieldProps & {
45
47
  collection: EntityCollection;
46
48
  }) {
47
49
  const {
@@ -55,7 +57,9 @@ export const TableReferenceFieldSuccess = React.memo(
55
57
  title,
56
58
  disabled,
57
59
  forceFilter,
58
- collection
60
+ collection,
61
+ includeId,
62
+ includeEntityLink
59
63
  } = props;
60
64
 
61
65
  const onSingleEntitySelected = useCallback((entity: Entity<any>) => {
@@ -63,6 +67,7 @@ export const TableReferenceFieldSuccess = React.memo(
63
67
  }, [updateValue]);
64
68
 
65
69
  const onMultipleEntitiesSelected = useCallback((entities: Entity<any>[]) => {
70
+ console.log("onMultipleEntitiesSelected", entities);
66
71
  updateValue(entities.map((e) => getReferenceFrom(e)));
67
72
  }, [updateValue]);
68
73
 
@@ -83,11 +88,11 @@ export const TableReferenceFieldSuccess = React.memo(
83
88
  }
84
89
  );
85
90
 
86
- const handleOpen = useCallback(() => {
91
+ const handleOpen = () => {
87
92
  if (disabled)
88
93
  return;
89
94
  referenceDialogController.open();
90
- }, [disabled, referenceDialogController]);
95
+ };
91
96
 
92
97
  const valueNotSet = !internalValue || (Array.isArray(internalValue) && internalValue.length === 0);
93
98
 
@@ -100,6 +105,8 @@ export const TableReferenceFieldSuccess = React.memo(
100
105
  hover={!disabled}
101
106
  disabled={!path}
102
107
  previewProperties={previewProperties}
108
+ includeId={includeId}
109
+ includeEntityLink={includeEntityLink}
103
110
  />;
104
111
  else
105
112
  return <EntityPreviewContainer
@@ -117,11 +124,13 @@ export const TableReferenceFieldSuccess = React.memo(
117
124
  key={`preview_array_ref_${name}_${index}`}>
118
125
  <ReferencePreview
119
126
  onClick={disabled ? undefined : handleOpen}
120
- size={"tiny"}
127
+ size={"smallest"}
121
128
  reference={reference}
122
129
  hover={!disabled}
123
130
  disabled={!path}
124
131
  previewProperties={previewProperties}
132
+ includeId={includeId}
133
+ includeEntityLink={includeEntityLink}
125
134
  />
126
135
  </div>
127
136
  )
@@ -142,13 +151,19 @@ export const TableReferenceFieldSuccess = React.memo(
142
151
  {internalValue && multiselect && buildMultipleReferenceField()}
143
152
 
144
153
  {valueNotSet &&
145
- <Button
146
- onClick={handleOpen}
147
- size={"small"}
148
- variant="outlined"
149
- color="primary">
154
+ <EntityPreviewContainer className={cls("p-4 text-sm font-medium flex items-center uppercase",
155
+ multiselect ? "gap-4" : "gap-6",
156
+ disabled
157
+ ? "text-slate-500"
158
+ : "cursor-pointer text-slate-700 dark:text-slate-300 hover:bg-slate-50 dark:hover:bg-gray-800 group-hover:bg-slate-50 dark:group-hover:bg-gray-800")}
159
+ onClick={handleOpen}
160
+ size={"medium"}>
161
+ <IconForView
162
+ size={"small"}
163
+ collectionOrView={collection}
164
+ className={"text-gray-300 dark:text-gray-600"}/>
150
165
  Edit {title}
151
- </Button>}
166
+ </EntityPreviewContainer>}
152
167
 
153
168
  </div>
154
169
  );
@@ -9,7 +9,7 @@ import { useSnackbarController, useStorageSource } from "../../../hooks";
9
9
  import { getThumbnailMeasure } from "../../../preview/util";
10
10
  import { StorageFieldItem, useStorageUploadController } from "../../../util/useStorageUploadController";
11
11
  import { StorageUploadProgress } from "../../../form/components/StorageUploadProgress";
12
- import { cn, EditIcon, IconButton, Typography } from "@firecms/ui";
12
+ import { cls, EditIcon, IconButton, Typography } from "@firecms/ui";
13
13
  import { EntityTableCellActions } from "../internal/EntityTableCellActions";
14
14
 
15
15
  const dropZoneClasses = "max-w-full box-border relative pt-[2px] items-center border border-transparent outline-none rounded-md duration-200 ease-[cubic-bezier(0.4,0,0.2,1)] focus:border-primary-solid";
@@ -179,10 +179,18 @@ function StorageUpload({
179
179
  onDropRejected: (fileRejections, event) => {
180
180
  for (const fileRejection of fileRejections) {
181
181
  for (const error of fileRejection.errors) {
182
- snackbarContext.open({
183
- type: "error",
184
- message: `Error uploading file: File is larger than ${storage.maxSize} bytes`
185
- });
182
+ console.log("Error uploading file: ", error);
183
+ if (error.code === "file-too-large") {
184
+ snackbarContext.open({
185
+ type: "error",
186
+ message: `Error uploading file: File is larger than ${storage.maxSize} bytes`
187
+ });
188
+ } else if (error.code === "file-invalid-type") {
189
+ snackbarContext.open({
190
+ type: "error",
191
+ message: "Error uploading file: File type is not supported"
192
+ });
193
+ }
186
194
  }
187
195
  }
188
196
  }
@@ -207,7 +215,7 @@ function StorageUpload({
207
215
  onMouseEnter={() => setOnHover(true)}
208
216
  onMouseMove={() => setOnHover(true)}
209
217
  onMouseLeave={() => setOnHover(false)}
210
- className={cn(dropZoneClasses,
218
+ className={cls(dropZoneClasses,
211
219
  "relative w-full h-full flex",
212
220
  `justify-${hasValue ? "start" : "center"}`,
213
221
  isDragActive ? activeDropClasses : "",
@@ -3,7 +3,7 @@ import React, { useEffect } from "react";
3
3
  import {
4
4
  Button,
5
5
  CircularProgress,
6
- cn,
6
+ cls,
7
7
  defaultBorderMixin,
8
8
  FilterListOffIcon,
9
9
  SearchBar,
@@ -16,20 +16,27 @@ import { useLargeLayout } from "../../../hooks";
16
16
 
17
17
  interface CollectionTableToolbarProps {
18
18
  size: CollectionSize;
19
- filterIsSet: boolean;
20
19
  loading: boolean;
21
- forceFilter?: boolean;
22
20
  actionsStart?: React.ReactNode;
23
21
  actions?: React.ReactNode;
24
22
  title?: React.ReactNode,
25
23
  onTextSearchClick?: () => void;
26
24
  onTextSearch?: (searchString?: string) => void;
27
25
  onSizeChanged: (size: CollectionSize) => void;
28
- clearFilter?: () => void;
29
26
  textSearchLoading?: boolean;
30
27
  }
31
28
 
32
- export function CollectionTableToolbar(props: CollectionTableToolbarProps) {
29
+ export function CollectionTableToolbar({
30
+ actions,
31
+ actionsStart,
32
+ loading,
33
+ onSizeChanged,
34
+ onTextSearch,
35
+ onTextSearchClick,
36
+ size,
37
+ textSearchLoading,
38
+ title
39
+ }: CollectionTableToolbarProps) {
33
40
 
34
41
  const searchInputRef = React.useRef<HTMLInputElement>(null);
35
42
  const largeLayout = useLargeLayout();
@@ -37,30 +44,20 @@ export function CollectionTableToolbar(props: CollectionTableToolbarProps) {
37
44
  const searchLoading = React.useRef<boolean>(false);
38
45
 
39
46
  useEffect(() => {
40
- if (searchInputRef.current && searchLoading.current && !props.textSearchLoading) {
47
+ if (searchInputRef.current && searchLoading.current && !textSearchLoading) {
41
48
  searchInputRef.current.focus();
42
49
  }
43
- searchLoading.current = props.textSearchLoading ?? false;
44
- }, [props.textSearchLoading]);
45
-
46
- const clearFilterButton = !props.forceFilter && props.filterIsSet && props.clearFilter &&
47
- <Button
48
- variant={"outlined"}
49
- className="h-fit-content"
50
- aria-label="filter clear"
51
- onClick={props.clearFilter}
52
- size={"small"}>
53
- <FilterListOffIcon/>
54
- Clear filter
55
- </Button>;
50
+ searchLoading.current = textSearchLoading ?? false;
51
+ }, [textSearchLoading]);
52
+
56
53
 
57
54
  const sizeSelect = (
58
55
  <Tooltip title={"Table row size"} side={"right"} sideOffset={4}>
59
56
  <Select
60
- value={props.size as string}
57
+ value={size as string}
61
58
  className="w-16 h-10"
62
59
  size={"small"}
63
- onValueChange={(v) => props.onSizeChanged(v as CollectionSize)}
60
+ onValueChange={(v) => onSizeChanged(v as CollectionSize)}
64
61
  renderValue={(v) => <div className={"font-medium"}>{v.toUpperCase()}</div>}
65
62
  >
66
63
  {["xs", "s", "m", "l", "xl"].map((size) => (
@@ -74,40 +71,38 @@ export function CollectionTableToolbar(props: CollectionTableToolbarProps) {
74
71
 
75
72
  return (
76
73
  <div
77
- className={cn(defaultBorderMixin, "no-scrollbar min-h-[56px] overflow-x-auto px-2 md:px-4 bg-gray-50 dark:bg-gray-900 border-b flex flex-row justify-between items-center w-full")}>
74
+ className={cls(defaultBorderMixin, "no-scrollbar min-h-[56px] overflow-x-auto px-2 md:px-4 bg-gray-50 dark:bg-gray-900 border-b flex flex-row justify-between items-center w-full")}>
78
75
 
79
76
  <div className="flex items-center gap-2 md:mr-4 mr-2">
80
77
 
81
- {props.title && <div className={"hidden lg:block"}>
82
- {props.title}
78
+ {title && <div className={"hidden lg:block"}>
79
+ {title}
83
80
  </div>}
84
81
 
85
82
  {sizeSelect}
86
83
 
87
- {props.actionsStart}
88
-
89
- {clearFilterButton}
84
+ {actionsStart}
90
85
 
91
86
  </div>
92
87
 
93
88
  <div className="flex items-center gap-2">
94
89
 
95
90
  {largeLayout && <div className="w-[22px]">
96
- {props.loading &&
91
+ {loading &&
97
92
  <CircularProgress size={"small"}/>}
98
93
  </div>}
99
94
 
100
- {(props.onTextSearch || props.onTextSearchClick) &&
95
+ {(onTextSearch || onTextSearchClick) &&
101
96
  <SearchBar
102
97
  key={"search-bar"}
103
98
  inputRef={searchInputRef}
104
- loading={props.textSearchLoading}
105
- disabled={Boolean(props.onTextSearchClick)}
106
- onClick={props.onTextSearchClick}
107
- onTextSearch={props.onTextSearchClick ? undefined : props.onTextSearch}
99
+ loading={textSearchLoading}
100
+ disabled={Boolean(onTextSearchClick)}
101
+ onClick={onTextSearchClick}
102
+ onTextSearch={onTextSearchClick ? undefined : onTextSearch}
108
103
  expandable={true}/>}
109
104
 
110
- {props.actions}
105
+ {actions}
111
106
 
112
107
  </div>
113
108
 
@@ -2,10 +2,9 @@ import React, { useCallback, useEffect, useMemo, useRef, useState } from "react"
2
2
 
3
3
  import useMeasure from "react-use-measure";
4
4
 
5
- import { VirtualTableSize } from "../../VirtualTable";
6
- import { getRowHeight } from "../../VirtualTable/common";
7
- import { cn, RemoveCircleIcon, Tooltip } from "@firecms/ui";
5
+ import { cls, RemoveCircleIcon, Tooltip } from "@firecms/ui";
8
6
  import { ErrorBoundary } from "../../../components";
7
+ import { getRowHeight, TableSize } from "../../common/table_height";
9
8
 
10
9
  interface EntityTableCellProps {
11
10
  children: React.ReactNode;
@@ -19,7 +18,7 @@ interface EntityTableCellProps {
19
18
  error?: Error;
20
19
  allowScroll?: boolean;
21
20
  align: "right" | "left" | "center";
22
- size: VirtualTableSize;
21
+ size: TableSize;
23
22
  disabledTooltip?: string;
24
23
  width: number;
25
24
  showExpandIcon?: boolean;
@@ -47,7 +46,7 @@ const TableCellInner = ({
47
46
  }: TableCellInnerProps) => {
48
47
  return (
49
48
  <div
50
- className={cn("flex flex-col max-h-full w-full",
49
+ className={cls("flex flex-col max-h-full w-full",
51
50
  {
52
51
  "items-start": faded || scrollable
53
52
  })}
@@ -96,7 +95,7 @@ export const EntityTableCell = React.memo<EntityTableCellProps>(
96
95
  const [onHover, setOnHover] = useState(false);
97
96
  const [internalSaved, setInternalSaved] = useState(saved);
98
97
 
99
- const showError = !disabled && error;
98
+ const showError = !disabled && Boolean(error);
100
99
 
101
100
  useEffect(() => {
102
101
  if (saved) {
@@ -176,21 +175,26 @@ export const EntityTableCell = React.memo<EntityTableCellProps>(
176
175
  const setOnHoverTrue = useCallback(() => setOnHover(true), []);
177
176
  const setOnHoverFalse = useCallback(() => setOnHover(false), []);
178
177
 
178
+ const borderClass = showError
179
+ ? "border-red-500"
180
+ : internalSaved
181
+ ? "border-green-500"
182
+ : isSelected
183
+ ? "border-primary"
184
+ : "border-transparent";
185
+
179
186
  return (
180
187
  <div
181
- ref={ref}
182
- className={cn(
188
+ className={cls(
183
189
  "transition-colors duration-100 ease-in-out",
184
190
  `flex relative h-full rounded-md p-${p} border border-4 border-opacity-75`,
185
191
  onHover && !disabled ? "bg-gray-50 dark:bg-gray-900" : "",
186
192
  saved ? "bg-gray-100 bg-opacity-75 dark:bg-gray-800 dark:bg-opacity-75" : "",
187
- !isSelected && !internalSaved && !showError ? "border-transparent" : "",
188
193
  hideOverflow ? "overflow-hidden" : "",
189
194
  isSelected ? "bg-gray-50 dark:bg-gray-900" : "",
190
- isSelected && !internalSaved ? "border-primary" : "",
191
- internalSaved ? "border-green-500 " : "",
192
- showError ? "border-red-500" : ""
195
+ borderClass
193
196
  )}
197
+ ref={ref}
194
198
  style={{
195
199
  justifyContent,
196
200
  alignItems: disabled || !isOverflowing ? "center" : undefined,
@@ -233,7 +237,7 @@ export const EntityTableCell = React.memo<EntityTableCellProps>(
233
237
 
234
238
  {disabled && onHover && disabledTooltip &&
235
239
  <div className="absolute top-1 right-1 text-xs">
236
- <Tooltip title={disabledTooltip}>
240
+ <Tooltip title={disabledTooltip} >
237
241
  <RemoveCircleIcon size={"smallest"} color={"disabled"} className={"text-gray-500"}/>
238
242
  </Tooltip>
239
243
  </div>}