@rebasepro/admin 0.0.1-canary.eae7889 → 0.1.0

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 (197) hide show
  1. package/dist/{CollectionEditorDialog-B2M9lCyL.js → CollectionEditorDialog-MbvXGzEq.js} +42 -31
  2. package/dist/CollectionEditorDialog-MbvXGzEq.js.map +1 -0
  3. package/dist/{CollectionsStudioView-WG6soyfs.js → CollectionsStudioView-D9X6aiAr.js} +12 -12
  4. package/dist/CollectionsStudioView-D9X6aiAr.js.map +1 -0
  5. package/dist/{ContentHomePage-CDF_a6Lp.js → ContentHomePage-CfVB1eUo.js} +26 -26
  6. package/dist/ContentHomePage-CfVB1eUo.js.map +1 -0
  7. package/dist/{ExportCollectionAction-Dc0VOWMN.js → ExportCollectionAction-CUwJg4F9.js} +2 -2
  8. package/dist/{ExportCollectionAction-Dc0VOWMN.js.map → ExportCollectionAction-CUwJg4F9.js.map} +1 -1
  9. package/dist/{ImportCollectionAction-DpCagAOy.js → ImportCollectionAction-DGa_SF_8.js} +2 -2
  10. package/dist/{ImportCollectionAction-DpCagAOy.js.map → ImportCollectionAction-DGa_SF_8.js.map} +1 -1
  11. package/dist/{PropertyEditView-DS67DxoT.js → PropertyEditView-C4nlYmAc.js} +82 -104
  12. package/dist/PropertyEditView-C4nlYmAc.js.map +1 -0
  13. package/dist/{RolesView-CIuYBimF.js → RolesView-CNWxnR8e.js} +7 -5
  14. package/dist/RolesView-CNWxnR8e.js.map +1 -0
  15. package/dist/{UsersView-B5zelXnH.js → UsersView-YiTIcXkA.js} +14 -35
  16. package/dist/UsersView-YiTIcXkA.js.map +1 -0
  17. package/dist/collection_editor/ConfigControllerProvider.d.ts +0 -4
  18. package/dist/collection_editor/types/collection_editor_controller.d.ts +6 -3
  19. package/dist/collection_editor/types/config_controller.d.ts +14 -7
  20. package/dist/collection_editor/ui/AddKanbanColumnAction.d.ts +3 -2
  21. package/dist/collection_editor/ui/CollectionViewHeaderAction.d.ts +3 -2
  22. package/dist/collection_editor/ui/EditorCollectionAction.d.ts +1 -1
  23. package/dist/collection_editor/ui/EditorCollectionActionStart.d.ts +1 -1
  24. package/dist/collection_editor/ui/EditorEntityAction.d.ts +1 -1
  25. package/dist/collection_editor/ui/KanbanSetupAction.d.ts +3 -2
  26. package/dist/collection_editor/ui/PropertyAddColumnComponent.d.ts +3 -2
  27. package/dist/collection_editor/ui/collection_editor/CollectionDetailsForm.d.ts +3 -4
  28. package/dist/collection_editor/ui/collection_editor/CollectionEditorDialog.d.ts +2 -3
  29. package/dist/collection_editor/ui/collection_editor/CollectionPropertiesEditorForm.d.ts +1 -2
  30. package/dist/collection_editor/ui/collection_editor/SubcollectionsEditTab.d.ts +3 -2
  31. package/dist/collection_editor_ui.js +3 -3
  32. package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +1 -1
  33. package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +1 -1
  34. package/dist/components/EntityCollectionTable/column_utils.d.ts +2 -2
  35. package/dist/components/EntityCollectionTable/fields/TableMultipleRelationField.d.ts +1 -1
  36. package/dist/components/EntityCollectionTable/fields/TableReferenceField.d.ts +1 -1
  37. package/dist/components/EntityCollectionTable/fields/TableRelationField.d.ts +1 -1
  38. package/dist/components/EntityCollectionTable/fields/TableRelationSelectorField.d.ts +2 -2
  39. package/dist/components/EntityCollectionTable/internal/CollectionTableToolbar.d.ts +5 -1
  40. package/dist/components/EntityCollectionView/EntityCollectionBoardView.d.ts +3 -2
  41. package/dist/components/EntityCollectionView/EntityCollectionView.d.ts +2 -1
  42. package/dist/components/EntityCollectionView/EntityCollectionViewActions.d.ts +4 -2
  43. package/dist/components/EntityCollectionView/EntityCollectionViewStartActions.d.ts +4 -2
  44. package/dist/components/EntityCollectionView/FiltersDialog.d.ts +2 -2
  45. package/dist/components/EntityCollectionView/SplitListView.d.ts +3 -2
  46. package/dist/components/EntityEditView.d.ts +9 -2
  47. package/dist/components/RebaseCMS.d.ts +1 -1
  48. package/dist/components/ReferenceTable/EntitySelectionTable.d.ts +2 -2
  49. package/dist/components/ReferenceWidget.d.ts +2 -2
  50. package/dist/components/RelationSelector.d.ts +1 -1
  51. package/dist/components/SelectableTable/SelectableTable.d.ts +2 -2
  52. package/dist/editor.js +2 -2
  53. package/dist/editor.js.map +1 -1
  54. package/dist/hooks/navigation/useNavigationRegistry.d.ts +2 -1
  55. package/dist/hooks/useEntityHistory.d.ts +1 -1
  56. package/dist/{index-CHxgwt6E.js → index-CtzpHzMQ.js} +11 -4
  57. package/dist/index-CtzpHzMQ.js.map +1 -0
  58. package/dist/{index-Dey5WJpO.js → index-DKlrVD1m.js} +3 -3
  59. package/dist/index-DKlrVD1m.js.map +1 -0
  60. package/dist/{index-CBhrgpR7.js → index-kHJXfLNI.js} +3 -3
  61. package/dist/index-kHJXfLNI.js.map +1 -0
  62. package/dist/index.js +79 -63
  63. package/dist/index.js.map +1 -1
  64. package/dist/{useEntityHistory-Dcj4zhGj.js → useEntityHistory-UVsSclfZ.js} +3 -1
  65. package/dist/useEntityHistory-UVsSclfZ.js.map +1 -0
  66. package/dist/util/navigation_utils.d.ts +10 -1
  67. package/dist/{util-BQ82ySL3.js → util-CwLmSpGp.js} +1653 -1257
  68. package/dist/util-CwLmSpGp.js.map +1 -0
  69. package/package.json +9 -17
  70. package/src/collection_editor/ConfigControllerProvider.tsx +19 -28
  71. package/src/collection_editor/types/collection_editor_controller.tsx +3 -3
  72. package/src/collection_editor/types/config_controller.tsx +7 -7
  73. package/src/collection_editor/ui/AddKanbanColumnAction.tsx +4 -4
  74. package/src/collection_editor/ui/CollectionViewHeaderAction.tsx +3 -3
  75. package/src/collection_editor/ui/EditorCollectionAction.tsx +3 -3
  76. package/src/collection_editor/ui/EditorCollectionActionStart.tsx +7 -7
  77. package/src/collection_editor/ui/EditorEntityAction.tsx +3 -3
  78. package/src/collection_editor/ui/HomePageEditorCollectionAction.tsx +4 -2
  79. package/src/collection_editor/ui/KanbanSetupAction.tsx +4 -3
  80. package/src/collection_editor/ui/MissingReferenceWidget.tsx +3 -2
  81. package/src/collection_editor/ui/NewCollectionButton.tsx +2 -1
  82. package/src/collection_editor/ui/NewCollectionCard.tsx +2 -1
  83. package/src/collection_editor/ui/PropertyAddColumnComponent.tsx +3 -3
  84. package/src/collection_editor/ui/collection_editor/CollectionDetailsForm.tsx +5 -50
  85. package/src/collection_editor/ui/collection_editor/CollectionEditorDialog.tsx +12 -20
  86. package/src/collection_editor/ui/collection_editor/CollectionPropertiesEditorForm.tsx +1 -3
  87. package/src/collection_editor/ui/collection_editor/CollectionRLSTab.tsx +17 -2
  88. package/src/collection_editor/ui/collection_editor/CollectionRelationsTab.tsx +3 -3
  89. package/src/collection_editor/ui/collection_editor/CollectionStudioView.tsx +2 -1
  90. package/src/collection_editor/ui/collection_editor/CollectionsStudioView.tsx +18 -12
  91. package/src/collection_editor/ui/collection_editor/DisplaySettingsForm.tsx +1 -2
  92. package/src/collection_editor/ui/collection_editor/GetCodeDialog.tsx +1 -2
  93. package/src/collection_editor/ui/collection_editor/PropertyFieldPreview.tsx +6 -6
  94. package/src/collection_editor/ui/collection_editor/SubcollectionsEditTab.tsx +4 -4
  95. package/src/collection_editor/ui/collection_editor/properties/MapPropertyField.tsx +2 -2
  96. package/src/collection_editor/ui/collection_editor/properties/ReferencePropertyField.tsx +15 -49
  97. package/src/collection_editor/ui/collection_editor/properties/advanced/AdvancedPropertyValidation.tsx +4 -5
  98. package/src/collection_editor/ui/collection_editor/templates/pages_template.ts +1 -1
  99. package/src/collection_editor/ui/collection_editor/templates/products_template.ts +2 -2
  100. package/src/components/DefaultAppBar.tsx +2 -2
  101. package/src/components/DefaultDrawer.tsx +25 -17
  102. package/src/components/DrawerNavigationGroup.tsx +4 -4
  103. package/src/components/DrawerNavigationItem.tsx +6 -6
  104. package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +4 -4
  105. package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +1 -1
  106. package/src/components/EntityCollectionTable/PropertyTableCell.tsx +4 -4
  107. package/src/components/EntityCollectionTable/column_utils.tsx +3 -3
  108. package/src/components/EntityCollectionTable/fields/TableMultipleRelationField.tsx +3 -3
  109. package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +3 -3
  110. package/src/components/EntityCollectionTable/fields/TableRelationField.tsx +4 -4
  111. package/src/components/EntityCollectionTable/fields/TableRelationSelectorField.tsx +3 -3
  112. package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +8 -2
  113. package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +1 -1
  114. package/src/components/EntityCollectionTable/internal/common.tsx +5 -5
  115. package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +1 -1
  116. package/src/components/EntityCollectionTable/table_bindings.tsx +45 -35
  117. package/src/components/EntityCollectionView/EntityBoardCard.tsx +18 -19
  118. package/src/components/EntityCollectionView/EntityCard.tsx +2 -2
  119. package/src/components/EntityCollectionView/EntityCollectionBoardView.tsx +42 -14
  120. package/src/components/EntityCollectionView/EntityCollectionCardView.tsx +4 -3
  121. package/src/components/EntityCollectionView/EntityCollectionListView.tsx +157 -54
  122. package/src/components/EntityCollectionView/EntityCollectionView.tsx +169 -75
  123. package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +23 -13
  124. package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +21 -12
  125. package/src/components/EntityCollectionView/FiltersDialog.tsx +7 -7
  126. package/src/components/EntityCollectionView/SplitListView.tsx +24 -8
  127. package/src/components/EntityCollectionView/useEntityPreviewSlots.ts +33 -5
  128. package/src/components/EntityEditView.tsx +85 -85
  129. package/src/components/EntitySidePanel.tsx +18 -10
  130. package/src/components/HomePage/ContentHomePage.tsx +24 -15
  131. package/src/components/HomePage/NavigationCard.tsx +4 -4
  132. package/src/components/HomePage/NavigationGroup.tsx +2 -2
  133. package/src/components/RebaseAuthGate.tsx +2 -0
  134. package/src/components/RebaseCMS.tsx +4 -3
  135. package/src/components/RebaseNavigation.tsx +8 -5
  136. package/src/components/ReferenceTable/EntitySelectionTable.tsx +4 -4
  137. package/src/components/ReferenceWidget.tsx +3 -3
  138. package/src/components/RelationSelector.tsx +33 -5
  139. package/src/components/SelectableTable/SelectableTable.tsx +6 -6
  140. package/src/components/UserSelector.tsx +1 -1
  141. package/src/components/admin/RolesView.tsx +10 -3
  142. package/src/components/admin/UsersView.tsx +13 -25
  143. package/src/components/app/Scaffold.tsx +4 -4
  144. package/src/components/field_configs.tsx +29 -32
  145. package/src/components/history/EntityHistoryView.tsx +12 -1
  146. package/src/editor/editor.tsx +2 -2
  147. package/src/form/EntityForm.tsx +5 -4
  148. package/src/form/PropertyFieldBinding.tsx +14 -10
  149. package/src/form/components/FieldHelperText.tsx +1 -1
  150. package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +3 -3
  151. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +5 -5
  152. package/src/form/field_bindings/BlockFieldBinding.tsx +4 -4
  153. package/src/form/field_bindings/DateTimeFieldBinding.tsx +1 -1
  154. package/src/form/field_bindings/KeyValueFieldBinding.tsx +1 -1
  155. package/src/form/field_bindings/MapFieldBinding.tsx +7 -7
  156. package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +1 -1
  157. package/src/form/field_bindings/MultipleRelationFieldBinding.tsx +3 -3
  158. package/src/form/field_bindings/ReferenceAsStringFieldBinding.tsx +7 -7
  159. package/src/form/field_bindings/ReferenceFieldBinding.tsx +2 -2
  160. package/src/form/field_bindings/RelationFieldBinding.tsx +4 -4
  161. package/src/form/field_bindings/RepeatFieldBinding.tsx +5 -5
  162. package/src/form/field_bindings/SelectFieldBinding.tsx +1 -1
  163. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +1 -1
  164. package/src/form/field_bindings/SwitchFieldBinding.tsx +1 -1
  165. package/src/form/field_bindings/TextFieldBinding.tsx +7 -7
  166. package/src/form/field_bindings/UserSelectFieldBinding.tsx +1 -1
  167. package/src/form/useClearRestoreValue.tsx +1 -1
  168. package/src/form/validation.ts +1 -1
  169. package/src/hooks/navigation/contexts/CollectionRegistryContext.tsx +2 -1
  170. package/src/hooks/navigation/useBuildCollectionRegistryController.tsx +15 -3
  171. package/src/hooks/navigation/useNavigationRegistry.ts +14 -3
  172. package/src/hooks/navigation/useResolvedViews.tsx +1 -3
  173. package/src/hooks/navigation/useTopLevelNavigation.ts +1 -1
  174. package/src/hooks/navigation/utils.ts +1 -1
  175. package/src/hooks/useEntityHistory.ts +7 -2
  176. package/src/preview/PropertyPreview.tsx +27 -23
  177. package/src/preview/components/StorageThumbnail.tsx +4 -1
  178. package/src/preview/property_previews/ArrayOfMapsPreview.tsx +1 -1
  179. package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +1 -1
  180. package/src/preview/property_previews/ArrayOfRelationsPreview.tsx +1 -1
  181. package/src/preview/property_previews/SkeletonPropertyComponent.tsx +3 -3
  182. package/src/preview/property_previews/StringPropertyPreview.tsx +3 -3
  183. package/src/routes/RebaseRoute.tsx +57 -11
  184. package/src/util/navigation_utils.ts +21 -2
  185. package/src/util/previews.ts +15 -6
  186. package/src/util/property_utils.tsx +3 -3
  187. package/dist/CollectionEditorDialog-B2M9lCyL.js.map +0 -1
  188. package/dist/CollectionsStudioView-WG6soyfs.js.map +0 -1
  189. package/dist/ContentHomePage-CDF_a6Lp.js.map +0 -1
  190. package/dist/PropertyEditView-DS67DxoT.js.map +0 -1
  191. package/dist/RolesView-CIuYBimF.js.map +0 -1
  192. package/dist/UsersView-B5zelXnH.js.map +0 -1
  193. package/dist/index-CBhrgpR7.js.map +0 -1
  194. package/dist/index-CHxgwt6E.js.map +0 -1
  195. package/dist/index-Dey5WJpO.js.map +0 -1
  196. package/dist/useEntityHistory-Dcj4zhGj.js.map +0 -1
  197. package/dist/util-BQ82ySL3.js.map +0 -1
@@ -32,7 +32,7 @@ export const DEFAULT_FIELD_CONFIGS: Record<DefaultFieldConfig, PropertyConfig> =
32
32
  color: "#2d7ff9",
33
33
  property: {
34
34
  type: "string",
35
- Field: TextFieldBinding
35
+ ui: { Field: TextFieldBinding }
36
36
  }
37
37
  },
38
38
  multiline: {
@@ -43,8 +43,7 @@ export const DEFAULT_FIELD_CONFIGS: Record<DefaultFieldConfig, PropertyConfig> =
43
43
  color: "#2d7ff9",
44
44
  property: {
45
45
  type: "string",
46
- multiline: true,
47
- Field: TextFieldBinding
46
+ ui: { multiline: true, Field: TextFieldBinding }
48
47
  }
49
48
  },
50
49
  markdown: {
@@ -55,8 +54,7 @@ export const DEFAULT_FIELD_CONFIGS: Record<DefaultFieldConfig, PropertyConfig> =
55
54
  color: "#2d7ff9",
56
55
  property: {
57
56
  type: "string",
58
- markdown: true,
59
- Field: MarkdownEditorFieldBinding
57
+ ui: { markdown: true, Field: MarkdownEditorFieldBinding }
60
58
  }
61
59
  },
62
60
  url: {
@@ -67,8 +65,7 @@ export const DEFAULT_FIELD_CONFIGS: Record<DefaultFieldConfig, PropertyConfig> =
67
65
  color: "#154fb3",
68
66
  property: {
69
67
  type: "string",
70
- url: true,
71
- Field: TextFieldBinding
68
+ ui: { url: true, Field: TextFieldBinding }
72
69
  }
73
70
  },
74
71
  email: {
@@ -80,7 +77,7 @@ export const DEFAULT_FIELD_CONFIGS: Record<DefaultFieldConfig, PropertyConfig> =
80
77
  property: {
81
78
  type: "string",
82
79
  email: true,
83
- Field: TextFieldBinding
80
+ ui: { Field: TextFieldBinding }
84
81
  }
85
82
  },
86
83
  switch: {
@@ -91,7 +88,7 @@ export const DEFAULT_FIELD_CONFIGS: Record<DefaultFieldConfig, PropertyConfig> =
91
88
  color: "#20d9d2",
92
89
  property: {
93
90
  type: "boolean",
94
- Field: SwitchFieldBinding
91
+ ui: { Field: SwitchFieldBinding }
95
92
  }
96
93
  },
97
94
  select: {
@@ -103,7 +100,7 @@ export const DEFAULT_FIELD_CONFIGS: Record<DefaultFieldConfig, PropertyConfig> =
103
100
  property: {
104
101
  type: "string",
105
102
  enum: [],
106
- Field: SelectFieldBinding
103
+ ui: { Field: SelectFieldBinding }
107
104
  }
108
105
  },
109
106
  multi_select: {
@@ -118,7 +115,7 @@ export const DEFAULT_FIELD_CONFIGS: Record<DefaultFieldConfig, PropertyConfig> =
118
115
  type: "string",
119
116
  enum: []
120
117
  },
121
- Field: MultiSelectFieldBinding
118
+ ui: { Field: MultiSelectFieldBinding }
122
119
  }
123
120
  },
124
121
  user_select: {
@@ -128,7 +125,7 @@ export const DEFAULT_FIELD_CONFIGS: Record<DefaultFieldConfig, PropertyConfig> =
128
125
  Icon: UserIcon,
129
126
  property: {
130
127
  type: "string",
131
- Field: UserSelectFieldBinding
128
+ ui: { Field: UserSelectFieldBinding }
132
129
  }
133
130
  },
134
131
  number_input: {
@@ -139,7 +136,7 @@ export const DEFAULT_FIELD_CONFIGS: Record<DefaultFieldConfig, PropertyConfig> =
139
136
  color: "#bec920",
140
137
  property: {
141
138
  type: "number",
142
- Field: TextFieldBinding
139
+ ui: { Field: TextFieldBinding }
143
140
  }
144
141
  },
145
142
  number_select: {
@@ -151,7 +148,7 @@ export const DEFAULT_FIELD_CONFIGS: Record<DefaultFieldConfig, PropertyConfig> =
151
148
  property: {
152
149
  type: "number",
153
150
  enum: [],
154
- Field: SelectFieldBinding
151
+ ui: { Field: SelectFieldBinding }
155
152
  }
156
153
  },
157
154
  multi_number_select: {
@@ -166,7 +163,7 @@ export const DEFAULT_FIELD_CONFIGS: Record<DefaultFieldConfig, PropertyConfig> =
166
163
  type: "number",
167
164
  enum: []
168
165
  },
169
- Field: MultiSelectFieldBinding
166
+ ui: { Field: MultiSelectFieldBinding }
170
167
  }
171
168
  },
172
169
  file_upload: {
@@ -180,7 +177,7 @@ export const DEFAULT_FIELD_CONFIGS: Record<DefaultFieldConfig, PropertyConfig> =
180
177
  storage: {
181
178
  storagePath: "{path}"
182
179
  },
183
- Field: StorageUploadFieldBinding
180
+ ui: { Field: StorageUploadFieldBinding }
184
181
  }
185
182
  },
186
183
  multi_file_upload: {
@@ -197,7 +194,7 @@ export const DEFAULT_FIELD_CONFIGS: Record<DefaultFieldConfig, PropertyConfig> =
197
194
  storagePath: "{path}"
198
195
  }
199
196
  },
200
- Field: StorageUploadFieldBinding
197
+ ui: { Field: StorageUploadFieldBinding }
201
198
  }
202
199
  },
203
200
  reference_as_string: {
@@ -208,7 +205,7 @@ export const DEFAULT_FIELD_CONFIGS: Record<DefaultFieldConfig, PropertyConfig> =
208
205
  color: "#154fb3",
209
206
  property: {
210
207
  type: "string",
211
- Field: ReferenceAsStringFieldBinding
208
+ ui: { Field: ReferenceAsStringFieldBinding }
212
209
  }
213
210
  },
214
211
  reference: {
@@ -219,7 +216,7 @@ export const DEFAULT_FIELD_CONFIGS: Record<DefaultFieldConfig, PropertyConfig> =
219
216
  color: "#ff0042",
220
217
  property: {
221
218
  type: "reference",
222
- Field: ReferenceFieldBinding
219
+ ui: { Field: ReferenceFieldBinding }
223
220
  }
224
221
  },
225
222
  multi_references: {
@@ -233,7 +230,7 @@ export const DEFAULT_FIELD_CONFIGS: Record<DefaultFieldConfig, PropertyConfig> =
233
230
  of: {
234
231
  type: "reference"
235
232
  },
236
- Field: ArrayOfReferencesFieldBinding
233
+ ui: { Field: ArrayOfReferencesFieldBinding }
237
234
  }
238
235
  },
239
236
  relation: {
@@ -245,7 +242,7 @@ export const DEFAULT_FIELD_CONFIGS: Record<DefaultFieldConfig, PropertyConfig> =
245
242
  property: {
246
243
  relationName: "",
247
244
  type: "relation",
248
- Field: RelationFieldBinding
245
+ ui: { Field: RelationFieldBinding }
249
246
  }
250
247
  },
251
248
  date_time: {
@@ -256,7 +253,7 @@ export const DEFAULT_FIELD_CONFIGS: Record<DefaultFieldConfig, PropertyConfig> =
256
253
  color: "#8b46ff",
257
254
  property: {
258
255
  type: "date",
259
- Field: DateTimeFieldBinding
256
+ ui: { Field: DateTimeFieldBinding }
260
257
  }
261
258
  },
262
259
  group: {
@@ -268,7 +265,7 @@ export const DEFAULT_FIELD_CONFIGS: Record<DefaultFieldConfig, PropertyConfig> =
268
265
  property: {
269
266
  type: "map",
270
267
  properties: {},
271
- Field: MapFieldBinding
268
+ ui: { Field: MapFieldBinding }
272
269
  }
273
270
  },
274
271
  key_value: {
@@ -280,7 +277,7 @@ export const DEFAULT_FIELD_CONFIGS: Record<DefaultFieldConfig, PropertyConfig> =
280
277
  property: {
281
278
  type: "map",
282
279
  keyValue: true,
283
- Field: KeyValueFieldBinding
280
+ ui: { Field: KeyValueFieldBinding }
284
281
  }
285
282
  },
286
283
  repeat: {
@@ -294,7 +291,7 @@ export const DEFAULT_FIELD_CONFIGS: Record<DefaultFieldConfig, PropertyConfig> =
294
291
  of: {
295
292
  type: "string"
296
293
  },
297
- Field: RepeatFieldBinding
294
+ ui: { Field: RepeatFieldBinding }
298
295
  }
299
296
  },
300
297
  custom_array: {
@@ -305,7 +302,7 @@ export const DEFAULT_FIELD_CONFIGS: Record<DefaultFieldConfig, PropertyConfig> =
305
302
  color: "#ff9408",
306
303
  property: {
307
304
  type: "array",
308
- Field: ArrayCustomShapedFieldBinding
305
+ ui: { Field: ArrayCustomShapedFieldBinding }
309
306
  }
310
307
  },
311
308
  block: {
@@ -319,7 +316,7 @@ export const DEFAULT_FIELD_CONFIGS: Record<DefaultFieldConfig, PropertyConfig> =
319
316
  oneOf: {
320
317
  properties: {}
321
318
  },
322
- Field: BlockFieldBinding
319
+ ui: { Field: BlockFieldBinding }
323
320
  }
324
321
  }
325
322
  };
@@ -347,13 +344,13 @@ export function getFieldConfig(property: Property, propertyConfigs: Record<strin
347
344
 
348
345
  export function getDefaultFieldId(property: Property) {
349
346
  if (property.type === "string") {
350
- if (property.multiline) {
351
- return "multiline";
352
- } else if (property.markdown) {
347
+ if (property.ui?.markdown) {
353
348
  return "markdown";
349
+ } else if (property.ui?.multiline) {
350
+ return "multiline";
354
351
  } else if (property.storage) {
355
352
  return "file_upload";
356
- } else if (property.url) {
353
+ } else if (property.ui?.url) {
357
354
  return "url";
358
355
  } else if (property.email) {
359
356
  return "email";
@@ -361,7 +358,7 @@ export function getDefaultFieldId(property: Property) {
361
358
  return "select";
362
359
  } else if (property.userSelect) {
363
360
  return "user_select";
364
- } else if (property.reference) {
361
+ } else if ((property as any).reference) {
365
362
  return "reference_as_string";
366
363
  } else {
367
364
  return "text_field";
@@ -80,8 +80,19 @@ export function EntityHistoryView<M extends Record<string, unknown>>({
80
80
  async function doRevert(historyId: string) {
81
81
  setIsReverting(true);
82
82
  try {
83
- await revert(historyId);
83
+ const revertedValues = await revert(historyId);
84
84
  setRevertHistoryId(undefined);
85
+
86
+ // Reset the form with the reverted values so the UI updates
87
+ // immediately without requiring a page refresh.
88
+ if (formContext?.formex?.resetForm && revertedValues) {
89
+ formContext.formex.resetForm({
90
+ values: revertedValues as M,
91
+ submitCount: 0,
92
+ touched: {}
93
+ });
94
+ }
95
+
85
96
  snackbarController.open({
86
97
  message: "Reverted to selected version",
87
98
  type: "info"
@@ -252,7 +252,7 @@ view }), [state, view])}>
252
252
  <div style={{ display: isMarkdownMode ? "none" : "block" }}>
253
253
  <div
254
254
  ref={editorRef}
255
- className={cls("relative prose dark:prose-invert", proseClass, "prose-headings:font-title prose-headings:font-normal prose-strong:font-semibold prose-code:font-normal prose-blockquote:font-normal prose-a:font-normal font-default focus:outline-none max-w-full p-12")}
255
+ className={cls("relative prose dark:prose-invert", proseClass, "prose-headings:font-title prose-headings:font-normal prose-strong:font-semibold prose-code:font-normal prose-blockquote:font-normal prose-a:font-normal font-default focus:outline-none max-w-full px-12 py-4")}
256
256
  />
257
257
 
258
258
  {view && (
@@ -290,7 +290,7 @@ view }), [state, view])}>
290
290
  onChange={handleMarkdownChange}
291
291
  onBlur={handleMarkdownBlur}
292
292
  className={cls(
293
- "w-full h-full min-h-[200px] p-12 bg-transparent resize-none font-mono focus:ring-0",
293
+ "w-full h-full min-h-[200px] px-12 py-4 bg-transparent resize-none font-mono focus:ring-0",
294
294
  proseClass
295
295
  )}
296
296
  style={{
@@ -510,11 +510,12 @@ export function EntityForm<M extends Record<string, unknown>>({
510
510
  }, [formex.version, collection, entityId, path]);
511
511
 
512
512
  const actionsDisabled = disabled || formex.isSubmitting || (status === "existing" && !formex.dirty) || Boolean(disabledProp);
513
- const parentCollectionIds = collectionRegistryController.getParentCollectionIds(path);
513
+ const parentCollectionSlugs = collectionRegistryController.getParentCollectionSlugs(path);
514
+ const parentEntityIds = collectionRegistryController.getParentEntityIds(path);
514
515
 
515
516
  const formActionProps: PluginFormActionProps = {
516
517
  entityId,
517
- parentCollectionIds,
518
+ parentCollectionSlugs, parentEntityIds,
518
519
  path: path,
519
520
  status,
520
521
  collection: collection as EntityCollection,
@@ -605,10 +606,10 @@ export function EntityForm<M extends Record<string, unknown>>({
605
606
  const isNew = status === "new" || status === "copy";
606
607
  const isStringOrNumber = property.type === "string" || property.type === "number";
607
608
  const isIdAndAuto = isStringOrNumber && "isId" in property && typeof property.isId === "string" && property.isId !== "manual";
608
- const disabled = disabledProp || (!autoSave && formex.isSubmitting) || isReadOnly(property) || Boolean(property.disabled) || (!isNew && "isId" in property && Boolean(property.isId)) || (isNew && isIdAndAuto);
609
+ const disabled = disabledProp || (!autoSave && formex.isSubmitting) || isReadOnly(property) || Boolean(property.ui?.disabled) || (!isNew && "isId" in property && Boolean(property.isId)) || (isNew && isIdAndAuto);
609
610
  const hidden = isHidden(property);
610
611
  if (hidden) return null;
611
- const widthPercentage = property.widthPercentage ?? 100;
612
+ const widthPercentage = property.ui?.widthPercentage ?? 100;
612
613
  const cmsFormFieldProps: PropertyFieldBindingProps<M> = {
613
614
  propertyKey: key,
614
615
  disabled,
@@ -1,9 +1,11 @@
1
1
  import type { EntityCollection } from "@rebasepro/types";
2
2
  import type { FieldProps, PropertyFieldBindingProps } from "../types/fields";
3
3
  import type { RebasePlugin, PluginFieldBuilderParams, Property } from "@rebasepro/types";
4
- import React, { ComponentType, ReactElement, useCallback, useRef } from "react";
4
+ import React, { ComponentType, ReactElement, Suspense, useCallback, useRef } from "react";
5
5
  import { deepEqual as equal } from "fast-equals"
6
6
 
7
+ import { resolveComponentRef } from "@rebasepro/core";
8
+
7
9
  import { Field, FieldProps as FormexFieldProps, getIn } from "@rebasepro/formex";
8
10
 
9
11
  ;
@@ -107,15 +109,16 @@ function PropertyFieldBindingInternal<M extends Record<string, unknown> = Record
107
109
  }) as Property | null;
108
110
 
109
111
  const readOnly = resolvedProperty ? isReadOnly(resolvedProperty) : true;
110
- const disabled = disabledProp || readOnly || Boolean(resolvedProperty?.disabled) || context.disabled;
112
+ const disabled = disabledProp || readOnly || Boolean(resolvedProperty?.ui?.disabled) || context.disabled;
111
113
 
112
114
  if (resolvedProperty === null || isHidden(resolvedProperty)) {
113
115
  return <></>;
114
116
  } else if (readOnly) {
115
117
  Component = ReadOnlyFieldBinding;
116
- } else if (resolvedProperty.Field) {
117
- if (typeof resolvedProperty.Field === "function") {
118
- Component = resolvedProperty.Field as ComponentType<FieldProps<any>>;
118
+ } else if (resolvedProperty.ui?.Field) {
119
+ const resolved = resolveComponentRef(resolvedProperty.ui.Field);
120
+ if (resolved) {
121
+ Component = resolved as ComponentType<FieldProps<any>>;
119
122
  }
120
123
  } else {
121
124
  const propertyConfig = getFieldConfig(resolvedProperty, customizationController.propertyConfigs);
@@ -139,7 +142,7 @@ function PropertyFieldBindingInternal<M extends Record<string, unknown> = Record
139
142
  index,
140
143
  authController
141
144
  }) as Property | null;
142
- Component = configProperty?.Field as ComponentType<FieldProps> | undefined;
145
+ Component = resolveComponentRef(configProperty?.ui?.Field) as ComponentType<FieldProps> | undefined;
143
146
  }
144
147
  if (!Component) {
145
148
  console.warn(`No field component found for property ${propertyKey}`);
@@ -209,7 +212,7 @@ function FieldInternal<CustomProps, M extends Record<string, any>>
209
212
 
210
213
  const { plugins } = useCustomizationController();
211
214
 
212
- const customFieldProps: any = property.customProps;
215
+ const customFieldProps: any = property.ui?.customProps;
213
216
  const value = formexFieldProps.field.value;
214
217
  const error = getIn(formexFieldProps.form.errors, propertyKey) as string | string[] | undefined;
215
218
  const touched = getIn(formexFieldProps.form.touched, propertyKey) as boolean | undefined;
@@ -265,8 +268,9 @@ function FieldInternal<CustomProps, M extends Record<string, any>>
265
268
 
266
269
  return (
267
270
  <ErrorBoundary>
268
-
269
- <UsedComponent {...cmsFieldProps}/>
271
+ <Suspense fallback={null}>
272
+ <UsedComponent {...cmsFieldProps}/>
273
+ </Suspense>
270
274
 
271
275
  {underlyingValueHasChanged && !isSubmitting &&
272
276
  <Typography variant={"caption"} className={"ml-3.5"}>
@@ -285,7 +289,7 @@ const shouldPropertyReRender = (property: Property, plugins?: RebasePlugin[]): b
285
289
  return true;
286
290
  }
287
291
  const defAProperty = property as Property;
288
- const rerenderThisProperty = Boolean(defAProperty.Field);
292
+ const rerenderThisProperty = Boolean(defAProperty.ui?.Field);
289
293
  if (defAProperty.type === "map" && defAProperty.properties) {
290
294
  return Boolean(rerenderThisProperty || Object.values(defAProperty.properties).some((childProperty) => shouldPropertyReRender(childProperty as Property, plugins)));
291
295
  } else {
@@ -72,7 +72,7 @@ export function FieldHelperText<T>({
72
72
  </Typography>
73
73
  }
74
74
 
75
- const disabledTooltip: string | undefined = typeof property.disabled === "object" ? property.disabled.disabledMessage : undefined;
75
+ const disabledTooltip: string | undefined = typeof property.ui?.disabled === "object" ? property.ui?.disabled.disabledMessage : undefined;
76
76
 
77
77
  return <div className={"flex ml-3.5 mt-1"}>
78
78
  <Typography variant={"caption"}
@@ -34,7 +34,7 @@ export function ArrayCustomShapedFieldBinding({
34
34
  }: FieldProps<ArrayProperty | ArrayProperty>) {
35
35
 
36
36
  const authController = useAuthController();
37
- const minimalistView = minimalistViewProp || property.minimalistView;
37
+ const minimalistView = minimalistViewProp || property.ui?.minimalistView;
38
38
 
39
39
  const resolvedProperties: Property[] | undefined = getArrayResolvedProperties({
40
40
  propertyValue: value,
@@ -44,7 +44,7 @@ export function ArrayCustomShapedFieldBinding({
44
44
  authController
45
45
  })
46
46
 
47
- const expanded = property.expanded === undefined ? true : property.expanded;
47
+ const expanded = property.ui?.expanded === undefined ? true : property.ui?.expanded;
48
48
 
49
49
  useClearRestoreValue({
50
50
  property,
@@ -63,7 +63,7 @@ export function ArrayCustomShapedFieldBinding({
63
63
  </>);
64
64
 
65
65
  const body = (resolvedProperties ?? []).map((childProperty, index) => {
66
- const thisDisabled = isReadOnly(childProperty) || Boolean(childProperty.disabled);
66
+ const thisDisabled = isReadOnly(childProperty) || Boolean(childProperty.ui?.disabled);
67
67
  const fieldProps = {
68
68
  propertyKey: `${propertyKey}[${index}]`,
69
69
  disabled: disabled || thisDisabled,
@@ -39,7 +39,7 @@ export function ArrayOfReferencesFieldBinding({
39
39
  setFieldValue
40
40
  }: ArrayOfReferencesFieldProps) {
41
41
 
42
- const minimalistView = minimalistViewProp || property.minimalistView;
42
+ const minimalistView = minimalistViewProp || property.ui?.minimalistView;
43
43
  const { t } = useTranslation();
44
44
 
45
45
  const ofProperty = property.of as Property;
@@ -47,7 +47,7 @@ export function ArrayOfReferencesFieldBinding({
47
47
  throw Error("ArrayOfReferencesField expected a property containing references");
48
48
  }
49
49
 
50
- const expanded = property.expanded === undefined ? true : property.expanded;
50
+ const expanded = property.ui?.expanded === undefined ? true : property.ui?.expanded;
51
51
  const selectedEntityIds = value && Array.isArray(value) ? value.map((ref) => ref.id) : [];
52
52
 
53
53
  useClearRestoreValue({
@@ -76,7 +76,7 @@ export function ArrayOfReferencesFieldBinding({
76
76
  collection,
77
77
  onMultipleEntitiesSelected,
78
78
  selectedEntityIds,
79
- forceFilter: ofProperty.forceFilter
79
+ fixedFilter: ofProperty.fixedFilter
80
80
  }
81
81
  );
82
82
 
@@ -98,7 +98,7 @@ export function ArrayOfReferencesFieldBinding({
98
98
  <ReferencePreview
99
99
  key={internalId}
100
100
  disabled={!ofProperty.path}
101
- previewProperties={ofProperty.previewProperties}
101
+ previewProperties={ofProperty.ui?.previewProperties}
102
102
  size={"medium"}
103
103
  onClick={onEntryClick}
104
104
  hover={!disabled}
@@ -107,7 +107,7 @@ export function ArrayOfReferencesFieldBinding({
107
107
  includeEntityLink={ofProperty.includeEntityLink}
108
108
  />
109
109
  );
110
- }, [ofProperty.path, ofProperty.previewProperties, value]);
110
+ }, [ofProperty.path, ofProperty.ui?.previewProperties, value]);
111
111
 
112
112
  const title = (<>
113
113
  <LabelWithIconAndTooltip
@@ -40,13 +40,13 @@ export function BlockFieldBinding({
40
40
  disabled
41
41
  }: FieldProps<ArrayProperty>) {
42
42
 
43
- const minimalistView = minimalistViewProp || property.minimalistView;
43
+ const minimalistView = minimalistViewProp || property.ui?.minimalistView;
44
44
  const { t } = useTranslation();
45
45
 
46
46
  if (!property.oneOf)
47
47
  throw Error("ArrayOneOfField misconfiguration. Property `oneOf` not set");
48
48
 
49
- const expanded = property.expanded === undefined ? true : property.expanded;
49
+ const expanded = property.ui?.expanded === undefined ? true : property.ui?.expanded;
50
50
  useClearRestoreValue({
51
51
  property,
52
52
  value,
@@ -92,8 +92,8 @@ export function BlockFieldBinding({
92
92
  addLabel={property.name ? t("add_to_field", { fieldName: property.name }) : t("add_entry")}
93
93
  buildEntry={buildEntry}
94
94
  onInternalIdAdded={setLastAddedId}
95
- disabled={isSubmitting || Boolean(property.disabled)}
96
- canAddElements={!property.disabled}
95
+ disabled={isSubmitting || Boolean(property.ui?.disabled)}
96
+ canAddElements={!property.ui?.disabled}
97
97
  onValueChange={(value) => setFieldValue(propertyKey, value)}
98
98
  newDefaultEntry={{
99
99
  [property.oneOf!.typeField ?? DEFAULT_ONE_OF_TYPE]: firstOneOfKey,
@@ -49,7 +49,7 @@ export function DateTimeFieldBinding({
49
49
  value={internalValue}
50
50
  onChange={(dateValue) => setValue(dateValue)}
51
51
  mode={property.mode}
52
- clearable={property.clearable}
52
+ clearable={property.ui?.clearable}
53
53
  locale={locale}
54
54
  error={showError}
55
55
  disabled={disabled}
@@ -38,7 +38,7 @@ export function KeyValueFieldBinding({
38
38
  context
39
39
  }: FieldProps<MapProperty>) {
40
40
 
41
- const expanded = (property.expanded === undefined ? true : property.expanded) || autoFocus;
41
+ const expanded = (property.ui?.expanded === undefined ? true : property.ui?.expanded) || autoFocus;
42
42
 
43
43
  if (!property.keyValue) {
44
44
  throw Error(`Your property ${propertyKey} needs to have the 'keyValue' prop in order to use this field binding`);
@@ -36,8 +36,8 @@ export function MapFieldBinding({
36
36
  }: FieldProps<MapProperty>) {
37
37
 
38
38
  const pickOnlySomeKeys = property.pickOnlySomeKeys || false;
39
- const expanded = property.expanded === undefined ? true : property.expanded;
40
- const minimalistView = minimalistViewProp || property.minimalistView;
39
+ const expanded = property.ui?.expanded === undefined ? true : property.ui?.expanded;
40
+ const minimalistView = minimalistViewProp || property.ui?.minimalistView;
41
41
  const { t } = useTranslation();
42
42
 
43
43
  if (!property.properties) {
@@ -60,11 +60,11 @@ export function MapFieldBinding({
60
60
 
61
61
  const mapFormView = <>
62
62
  <div
63
- className={cls("py-1 flex flex-col space-y-2", minimalistView && property.widthPercentage !== undefined ? "mt-8" : undefined)}>
63
+ className={cls("py-1 flex flex-col space-y-2", minimalistView && property.ui?.widthPercentage !== undefined ? "mt-8" : undefined)}>
64
64
  {Object.entries(mapProperties)
65
65
  .filter(([_, property]) => !isHidden(property))
66
66
  .map(([entryKey, childProperty], index) => {
67
- const thisDisabled = isReadOnly(childProperty) || Boolean(childProperty.disabled);
67
+ const thisDisabled = isReadOnly(childProperty) || Boolean(childProperty.ui?.disabled);
68
68
  const fieldBindingProps: PropertyFieldBindingProps<any> = {
69
69
  propertyKey: `${propertyKey}.${entryKey}`,
70
70
  disabled: disabled || thisDisabled,
@@ -105,12 +105,12 @@ export function MapFieldBinding({
105
105
  <ErrorBoundary>
106
106
 
107
107
  {!minimalistView && <ExpandablePanel initiallyExpanded={expanded}
108
- onExpandedChange={(expanded) => {
108
+ onExpandedChange={(expanded: boolean) => {
109
109
  onPropertyChange?.({
110
- expanded
110
+ ui: { ...property.ui, expanded }
111
111
  });
112
112
  }}
113
- className={property.widthPercentage !== undefined ? "mt-8" : undefined}
113
+ className={property.ui?.widthPercentage !== undefined ? "mt-8" : undefined}
114
114
  innerClassName={"px-2 md:px-4 pb-2 md:pb-4 pt-1 md:pt-2 bg-white dark:bg-surface-900"}
115
115
  title={<LabelWithIconAndTooltip
116
116
  propertyKey={propertyKey}
@@ -204,7 +204,7 @@ export function MarkdownEditorFieldBinding({
204
204
  title={property.name ?? propertyKey}
205
205
  className={"h-8 text-text-secondary dark:text-text-secondary-dark ml-3.5"}/>
206
206
  <div className="flex-grow"/>
207
- {property.clearable && !disabled && (
207
+ {property.ui?.clearable && !disabled && (
208
208
  <IconButton
209
209
  size="small"
210
210
  onClick={(e) => {
@@ -66,7 +66,7 @@ export function MultipleRelationFieldBinding({
66
66
  collection,
67
67
  onMultipleEntitiesSelected,
68
68
  selectedEntityIds,
69
- forceFilter: property.forceFilter
69
+ fixedFilter: property.fixedFilter
70
70
  }
71
71
  );
72
72
 
@@ -87,7 +87,7 @@ export function MultipleRelationFieldBinding({
87
87
  return (
88
88
  <RelationPreview
89
89
  key={internalId}
90
- previewProperties={property.previewProperties}
90
+ previewProperties={property.ui?.previewProperties}
91
91
  size={"medium"}
92
92
  onClick={onEntryClick}
93
93
  hover={!disabled}
@@ -96,7 +96,7 @@ export function MultipleRelationFieldBinding({
96
96
  includeEntityLink={property.includeEntityLink}
97
97
  />
98
98
  );
99
- }, [relation, property.previewProperties, value]);
99
+ }, [relation, property.ui?.previewProperties, value]);
100
100
 
101
101
  const title = (<>
102
102
  <LabelWithIconAndTooltip
@@ -23,7 +23,7 @@ import { useCollectionRegistryController } from "../../index";
23
23
  * @group Form fields
24
24
  */
25
25
  export function ReferenceAsStringFieldBinding(props: FieldProps<StringProperty>) {
26
- if (typeof props.property.reference?.path !== "string") {
26
+ if (typeof (props.property as any).reference?.path !== "string") {
27
27
  return <ReadOnlyFieldBinding {...props as FieldProps<Property>}/>;
28
28
  }
29
29
 
@@ -43,7 +43,7 @@ function ReferenceAsStringFieldBindingInternal({
43
43
  includeDescription,
44
44
  size = "medium"
45
45
  }: FieldProps<StringProperty>) {
46
- if (!property.reference?.path) {
46
+ if (!(property as any).reference?.path) {
47
47
  throw new Error("Property path is required for ReferenceAsStringFieldBinding");
48
48
  }
49
49
 
@@ -54,7 +54,7 @@ function ReferenceAsStringFieldBindingInternal({
54
54
  });
55
55
 
56
56
  const collectionRegistryController = useCollectionRegistryController();
57
- const path = property.reference.path;
57
+ const path = (property as any).reference.path;
58
58
  const collection: EntityCollection | undefined = useMemo(() => {
59
59
  return path ? collectionRegistryController.getCollection(path) : undefined;
60
60
  }, [path]);
@@ -81,7 +81,7 @@ path });
81
81
  collection,
82
82
  onSingleEntitySelected,
83
83
  selectedEntityIds: value ? [value] : undefined,
84
- forceFilter: property.reference.forceFilter
84
+ fixedFilter: (property as any).reference.fixedFilter
85
85
  }
86
86
  );
87
87
 
@@ -106,13 +106,13 @@ path });
106
106
 
107
107
  {referenceValue && <ReferencePreview
108
108
  disabled={!path}
109
- previewProperties={property.reference?.previewProperties}
109
+ previewProperties={(property as any).reference?.previewProperties}
110
110
  hover={!disabled}
111
111
  size={size}
112
112
  onClick={disabled || isSubmitting ? undefined : onEntryClick}
113
113
  reference={referenceValue}
114
- includeEntityLink={property.reference?.includeEntityLink}
115
- includeId={property.reference?.includeId}
114
+ includeEntityLink={(property as any).reference?.includeEntityLink}
115
+ includeId={(property as any).reference?.includeId}
116
116
  />}
117
117
 
118
118
  {!value && <div className="justify-center text-left">
@@ -81,7 +81,7 @@ function ReferenceFieldBindingInternal({
81
81
  collection,
82
82
  onSingleEntitySelected,
83
83
  selectedEntityIds: validValue ? [value.id] : undefined,
84
- forceFilter: property.forceFilter
84
+ fixedFilter: property.fixedFilter
85
85
  }
86
86
  );
87
87
 
@@ -106,7 +106,7 @@ function ReferenceFieldBindingInternal({
106
106
 
107
107
  {value && <ReferencePreview
108
108
  disabled={!property.path}
109
- previewProperties={property.previewProperties}
109
+ previewProperties={property.ui?.previewProperties}
110
110
  hover={!disabled}
111
111
  size={size}
112
112
  onClick={disabled || isSubmitting ? undefined : onEntryClick}