@strapi/content-manager 5.60.0 → 5.61.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 (256) hide show
  1. package/dist/admin/constants/customOrder.js +14 -0
  2. package/dist/admin/constants/customOrder.js.map +1 -0
  3. package/dist/admin/constants/customOrder.mjs +10 -0
  4. package/dist/admin/constants/customOrder.mjs.map +1 -0
  5. package/dist/admin/hooks/useDocument.js +22 -11
  6. package/dist/admin/hooks/useDocument.js.map +1 -1
  7. package/dist/admin/hooks/useDocument.mjs +22 -11
  8. package/dist/admin/hooks/useDocument.mjs.map +1 -1
  9. package/dist/admin/hooks/useDocumentLayout.js.map +1 -1
  10. package/dist/admin/hooks/useDocumentLayout.mjs.map +1 -1
  11. package/dist/admin/hooks/useHasBeenNearViewport.js +70 -0
  12. package/dist/admin/hooks/useHasBeenNearViewport.js.map +1 -0
  13. package/dist/admin/hooks/useHasBeenNearViewport.mjs +46 -0
  14. package/dist/admin/hooks/useHasBeenNearViewport.mjs.map +1 -0
  15. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.js +102 -32
  16. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.js.map +1 -1
  17. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.mjs +104 -35
  18. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.mjs.map +1 -1
  19. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.js +20 -17
  20. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.js.map +1 -1
  21. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.mjs +20 -17
  22. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.mjs.map +1 -1
  23. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js +15 -1
  24. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js.map +1 -1
  25. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs +17 -3
  26. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs.map +1 -1
  27. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withStrapiSchema.js +21 -0
  28. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withStrapiSchema.js.map +1 -1
  29. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withStrapiSchema.mjs +22 -1
  30. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withStrapiSchema.mjs.map +1 -1
  31. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +4 -7
  32. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -1
  33. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs +4 -7
  34. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs.map +1 -1
  35. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +46 -10
  36. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
  37. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +47 -11
  38. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
  39. package/dist/admin/pages/EditView/components/FormLayout.js +201 -51
  40. package/dist/admin/pages/EditView/components/FormLayout.js.map +1 -1
  41. package/dist/admin/pages/EditView/components/FormLayout.mjs +202 -53
  42. package/dist/admin/pages/EditView/components/FormLayout.mjs.map +1 -1
  43. package/dist/admin/pages/ListConfiguration/components/Settings.js +31 -2
  44. package/dist/admin/pages/ListConfiguration/components/Settings.js.map +1 -1
  45. package/dist/admin/pages/ListConfiguration/components/Settings.mjs +31 -2
  46. package/dist/admin/pages/ListConfiguration/components/Settings.mjs.map +1 -1
  47. package/dist/admin/pages/ListView/ListViewPage.js +196 -132
  48. package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
  49. package/dist/admin/pages/ListView/ListViewPage.mjs +196 -132
  50. package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
  51. package/dist/admin/pages/ListView/components/CustomOrder.js +571 -0
  52. package/dist/admin/pages/ListView/components/CustomOrder.js.map +1 -0
  53. package/dist/admin/pages/ListView/components/CustomOrder.mjs +546 -0
  54. package/dist/admin/pages/ListView/components/CustomOrder.mjs.map +1 -0
  55. package/dist/admin/pages/ListView/components/TableActions.js +4 -1
  56. package/dist/admin/pages/ListView/components/TableActions.js.map +1 -1
  57. package/dist/admin/pages/ListView/components/TableActions.mjs +4 -1
  58. package/dist/admin/pages/ListView/components/TableActions.mjs.map +1 -1
  59. package/dist/admin/services/documents.js +22 -1
  60. package/dist/admin/services/documents.js.map +1 -1
  61. package/dist/admin/services/documents.mjs +21 -2
  62. package/dist/admin/services/documents.mjs.map +1 -1
  63. package/dist/admin/src/constants/customOrder.d.ts +8 -0
  64. package/dist/admin/src/exports.d.ts +1 -1
  65. package/dist/admin/src/hooks/useDocument.d.ts +4 -0
  66. package/dist/admin/src/hooks/useDocumentLayout.d.ts +6 -2
  67. package/dist/admin/src/hooks/useHasBeenNearViewport.d.ts +13 -0
  68. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.d.ts +13 -1
  69. package/dist/admin/src/pages/EditView/components/FormLayout.d.ts +11 -1
  70. package/dist/admin/src/pages/ListView/components/CustomOrder.d.ts +72 -0
  71. package/dist/admin/src/services/documents.d.ts +10 -2
  72. package/dist/admin/translations/en.json.js +9 -0
  73. package/dist/admin/translations/en.json.js.map +1 -1
  74. package/dist/admin/translations/en.json.mjs +9 -0
  75. package/dist/admin/translations/en.json.mjs.map +1 -1
  76. package/dist/server/audit-logs.js +36 -0
  77. package/dist/server/audit-logs.js.map +1 -0
  78. package/dist/server/audit-logs.mjs +33 -0
  79. package/dist/server/audit-logs.mjs.map +1 -0
  80. package/dist/server/bootstrap.js +8 -0
  81. package/dist/server/bootstrap.js.map +1 -1
  82. package/dist/server/bootstrap.mjs +8 -0
  83. package/dist/server/bootstrap.mjs.map +1 -1
  84. package/dist/server/controllers/collection-types.js +8 -0
  85. package/dist/server/controllers/collection-types.js.map +1 -1
  86. package/dist/server/controllers/collection-types.mjs +8 -0
  87. package/dist/server/controllers/collection-types.mjs.map +1 -1
  88. package/dist/server/controllers/content-types.js +15 -0
  89. package/dist/server/controllers/content-types.js.map +1 -1
  90. package/dist/server/controllers/content-types.mjs +16 -1
  91. package/dist/server/controllers/content-types.mjs.map +1 -1
  92. package/dist/server/controllers/index.js +3 -1
  93. package/dist/server/controllers/index.js.map +1 -1
  94. package/dist/server/controllers/index.mjs +2 -0
  95. package/dist/server/controllers/index.mjs.map +1 -1
  96. package/dist/server/controllers/relations.js +5 -1
  97. package/dist/server/controllers/relations.js.map +1 -1
  98. package/dist/server/controllers/relations.mjs +5 -1
  99. package/dist/server/controllers/relations.mjs.map +1 -1
  100. package/dist/server/controllers/single-types.js +10 -1
  101. package/dist/server/controllers/single-types.js.map +1 -1
  102. package/dist/server/controllers/single-types.mjs +10 -1
  103. package/dist/server/controllers/single-types.mjs.map +1 -1
  104. package/dist/server/controllers/validation/model-configuration.js +2 -1
  105. package/dist/server/controllers/validation/model-configuration.js.map +1 -1
  106. package/dist/server/controllers/validation/model-configuration.mjs +2 -1
  107. package/dist/server/controllers/validation/model-configuration.mjs.map +1 -1
  108. package/dist/server/custom-order/constants.js +21 -0
  109. package/dist/server/custom-order/constants.js.map +1 -0
  110. package/dist/server/custom-order/constants.mjs +17 -0
  111. package/dist/server/custom-order/constants.mjs.map +1 -0
  112. package/dist/server/custom-order/controllers/custom-order.js +77 -0
  113. package/dist/server/custom-order/controllers/custom-order.js.map +1 -0
  114. package/dist/server/custom-order/controllers/custom-order.mjs +75 -0
  115. package/dist/server/custom-order/controllers/custom-order.mjs.map +1 -0
  116. package/dist/server/custom-order/controllers/index.js +10 -0
  117. package/dist/server/custom-order/controllers/index.js.map +1 -0
  118. package/dist/server/custom-order/controllers/index.mjs +8 -0
  119. package/dist/server/custom-order/controllers/index.mjs.map +1 -0
  120. package/dist/server/custom-order/index.js +71 -0
  121. package/dist/server/custom-order/index.js.map +1 -0
  122. package/dist/server/custom-order/index.mjs +69 -0
  123. package/dist/server/custom-order/index.mjs.map +1 -0
  124. package/dist/server/custom-order/routes/custom-order.js +38 -0
  125. package/dist/server/custom-order/routes/custom-order.js.map +1 -0
  126. package/dist/server/custom-order/routes/custom-order.mjs +36 -0
  127. package/dist/server/custom-order/routes/custom-order.mjs.map +1 -0
  128. package/dist/server/custom-order/routes/index.js +13 -0
  129. package/dist/server/custom-order/routes/index.js.map +1 -0
  130. package/dist/server/custom-order/routes/index.mjs +11 -0
  131. package/dist/server/custom-order/routes/index.mjs.map +1 -0
  132. package/dist/server/custom-order/services/custom-order.js +286 -0
  133. package/dist/server/custom-order/services/custom-order.js.map +1 -0
  134. package/dist/server/custom-order/services/custom-order.mjs +284 -0
  135. package/dist/server/custom-order/services/custom-order.mjs.map +1 -0
  136. package/dist/server/custom-order/services/document-middleware.js +83 -0
  137. package/dist/server/custom-order/services/document-middleware.js.map +1 -0
  138. package/dist/server/custom-order/services/document-middleware.mjs +81 -0
  139. package/dist/server/custom-order/services/document-middleware.mjs.map +1 -0
  140. package/dist/server/custom-order/services/index.js +10 -0
  141. package/dist/server/custom-order/services/index.js.map +1 -0
  142. package/dist/server/custom-order/services/index.mjs +8 -0
  143. package/dist/server/custom-order/services/index.mjs.map +1 -0
  144. package/dist/server/custom-order/services/utils.js +152 -0
  145. package/dist/server/custom-order/services/utils.js.map +1 -0
  146. package/dist/server/custom-order/services/utils.mjs +148 -0
  147. package/dist/server/custom-order/services/utils.mjs.map +1 -0
  148. package/dist/server/custom-order/utils.js +13 -0
  149. package/dist/server/custom-order/utils.js.map +1 -0
  150. package/dist/server/custom-order/utils.mjs +10 -0
  151. package/dist/server/custom-order/utils.mjs.map +1 -0
  152. package/dist/server/history/constants.js +2 -1
  153. package/dist/server/history/constants.js.map +1 -1
  154. package/dist/server/history/constants.mjs +2 -1
  155. package/dist/server/history/constants.mjs.map +1 -1
  156. package/dist/server/history/controllers/history-version.js +6 -2
  157. package/dist/server/history/controllers/history-version.js.map +1 -1
  158. package/dist/server/history/controllers/history-version.mjs +6 -2
  159. package/dist/server/history/controllers/history-version.mjs.map +1 -1
  160. package/dist/server/history/services/history.js +23 -6
  161. package/dist/server/history/services/history.js.map +1 -1
  162. package/dist/server/history/services/history.mjs +24 -7
  163. package/dist/server/history/services/history.mjs.map +1 -1
  164. package/dist/server/history/services/lifecycles.js +2 -16
  165. package/dist/server/history/services/lifecycles.js.map +1 -1
  166. package/dist/server/history/services/lifecycles.mjs +2 -16
  167. package/dist/server/history/services/lifecycles.mjs.map +1 -1
  168. package/dist/server/register.js +4 -0
  169. package/dist/server/register.js.map +1 -1
  170. package/dist/server/register.mjs +4 -0
  171. package/dist/server/register.mjs.map +1 -1
  172. package/dist/server/routes/index.js +3 -1
  173. package/dist/server/routes/index.js.map +1 -1
  174. package/dist/server/routes/index.mjs +2 -0
  175. package/dist/server/routes/index.mjs.map +1 -1
  176. package/dist/server/services/content-types.js +2 -2
  177. package/dist/server/services/content-types.js.map +1 -1
  178. package/dist/server/services/content-types.mjs +2 -2
  179. package/dist/server/services/content-types.mjs.map +1 -1
  180. package/dist/server/services/document-manager.js +13 -0
  181. package/dist/server/services/document-manager.js.map +1 -1
  182. package/dist/server/services/document-manager.mjs +14 -1
  183. package/dist/server/services/document-manager.mjs.map +1 -1
  184. package/dist/server/services/index.js +3 -1
  185. package/dist/server/services/index.js.map +1 -1
  186. package/dist/server/services/index.mjs +2 -0
  187. package/dist/server/services/index.mjs.map +1 -1
  188. package/dist/server/services/utils/configuration/settings.js +2 -1
  189. package/dist/server/services/utils/configuration/settings.js.map +1 -1
  190. package/dist/server/services/utils/configuration/settings.mjs +2 -1
  191. package/dist/server/services/utils/configuration/settings.mjs.map +1 -1
  192. package/dist/server/src/audit-logs.d.ts +40 -0
  193. package/dist/server/src/audit-logs.d.ts.map +1 -0
  194. package/dist/server/src/bootstrap.d.ts.map +1 -1
  195. package/dist/server/src/controllers/collection-types.d.ts +1 -1
  196. package/dist/server/src/controllers/collection-types.d.ts.map +1 -1
  197. package/dist/server/src/controllers/content-types.d.ts.map +1 -1
  198. package/dist/server/src/controllers/index.d.ts +21 -3
  199. package/dist/server/src/controllers/index.d.ts.map +1 -1
  200. package/dist/server/src/controllers/relations.d.ts +19 -1
  201. package/dist/server/src/controllers/relations.d.ts.map +1 -1
  202. package/dist/server/src/controllers/single-types.d.ts +1 -1
  203. package/dist/server/src/controllers/single-types.d.ts.map +1 -1
  204. package/dist/server/src/custom-order/constants.d.ts +18 -0
  205. package/dist/server/src/custom-order/constants.d.ts.map +1 -0
  206. package/dist/server/src/custom-order/controllers/custom-order.d.ts +8 -0
  207. package/dist/server/src/custom-order/controllers/custom-order.d.ts.map +1 -0
  208. package/dist/server/src/custom-order/controllers/index.d.ts +3 -0
  209. package/dist/server/src/custom-order/controllers/index.d.ts.map +1 -0
  210. package/dist/server/src/custom-order/index.d.ts +8 -0
  211. package/dist/server/src/custom-order/index.d.ts.map +1 -0
  212. package/dist/server/src/custom-order/routes/custom-order.d.ts +4 -0
  213. package/dist/server/src/custom-order/routes/custom-order.d.ts.map +1 -0
  214. package/dist/server/src/custom-order/routes/index.d.ts +10 -0
  215. package/dist/server/src/custom-order/routes/index.d.ts.map +1 -0
  216. package/dist/server/src/custom-order/services/custom-order.d.ts +43 -0
  217. package/dist/server/src/custom-order/services/custom-order.d.ts.map +1 -0
  218. package/dist/server/src/custom-order/services/document-middleware.d.ts +16 -0
  219. package/dist/server/src/custom-order/services/document-middleware.d.ts.map +1 -0
  220. package/dist/server/src/custom-order/services/index.d.ts +24 -0
  221. package/dist/server/src/custom-order/services/index.d.ts.map +1 -0
  222. package/dist/server/src/custom-order/services/utils.d.ts +34 -0
  223. package/dist/server/src/custom-order/services/utils.d.ts.map +1 -0
  224. package/dist/server/src/custom-order/utils.d.ts +6 -0
  225. package/dist/server/src/custom-order/utils.d.ts.map +1 -0
  226. package/dist/server/src/history/constants.d.ts.map +1 -1
  227. package/dist/server/src/history/controllers/history-version.d.ts.map +1 -1
  228. package/dist/server/src/history/services/history.d.ts.map +1 -1
  229. package/dist/server/src/history/services/lifecycles.d.ts.map +1 -1
  230. package/dist/server/src/index.d.ts +22 -6
  231. package/dist/server/src/index.d.ts.map +1 -1
  232. package/dist/server/src/register.d.ts.map +1 -1
  233. package/dist/server/src/routes/index.d.ts.map +1 -1
  234. package/dist/server/src/services/content-types.d.ts +1 -3
  235. package/dist/server/src/services/content-types.d.ts.map +1 -1
  236. package/dist/server/src/services/document-manager.d.ts.map +1 -1
  237. package/dist/server/src/services/index.d.ts +1 -3
  238. package/dist/server/src/services/index.d.ts.map +1 -1
  239. package/dist/server/src/services/utils/configuration/settings.d.ts.map +1 -1
  240. package/dist/shared/contracts/content-types.d.ts +5 -0
  241. package/dist/shared/contracts/content-types.d.ts.map +1 -1
  242. package/dist/shared/contracts/custom-order.d.ts +33 -0
  243. package/dist/shared/contracts/custom-order.d.ts.map +1 -0
  244. package/dist/shared/contracts/custom-order.js +3 -0
  245. package/dist/shared/contracts/custom-order.js.map +1 -0
  246. package/dist/shared/contracts/custom-order.mjs +2 -0
  247. package/dist/shared/contracts/custom-order.mjs.map +1 -0
  248. package/dist/shared/contracts/history-versions.d.ts +0 -1
  249. package/dist/shared/contracts/history-versions.d.ts.map +1 -1
  250. package/dist/shared/contracts/index.d.ts +1 -0
  251. package/dist/shared/contracts/index.d.ts.map +1 -1
  252. package/dist/shared/contracts/index.js +2 -0
  253. package/dist/shared/contracts/index.js.map +1 -1
  254. package/dist/shared/contracts/index.mjs +2 -0
  255. package/dist/shared/contracts/index.mjs.map +1 -1
  256. package/package.json +8 -8
@@ -11,6 +11,8 @@ var reactIntl = require('react-intl');
11
11
  var reactRouterDom = require('react-router-dom');
12
12
  var styledComponents = require('styled-components');
13
13
  var InjectionZone = require('../../components/InjectionZone.js');
14
+ var collections = require('../../constants/collections.js');
15
+ var customOrder = require('../../constants/customOrder.js');
14
16
  var hooks = require('../../constants/hooks.js');
15
17
  var plugin = require('../../constants/plugin.js');
16
18
  var DocumentRBAC = require('../../features/DocumentRBAC.js');
@@ -25,6 +27,7 @@ var translations = require('../../utils/translations.js');
25
27
  var users = require('../../utils/users.js');
26
28
  var DocumentStatus = require('../EditView/components/DocumentStatus.js');
27
29
  var Actions = require('./components/BulkActions/Actions.js');
30
+ var CustomOrder = require('./components/CustomOrder.js');
28
31
  var Filters = require('./components/Filters.js');
29
32
  var TableActions = require('./components/TableActions.js');
30
33
  var CellContent = require('./components/TableCells/CellContent.js');
@@ -63,6 +66,16 @@ const NON_LINKABLE_TYPES = new Set([
63
66
  * -----------------------------------------------------------------------------------------------*/ const LayoutsHeaderCustom = styledComponents.styled(strapiAdmin.Layouts.Header)`
64
67
  overflow-wrap: anywhere;
65
68
  `;
69
+ /**
70
+ * When the entries of the collection type follow a custom order, that order is
71
+ * what the list shows unless the user sorts on a column.
72
+ */ const hasCustomOrderEnabled = (collectionType, settings)=>collectionType === collections.COLLECTION_TYPES && settings.customOrder === true && customOrder.isCustomOrderFeatureEnabled();
73
+ const getDefaultSort = (settings, hasCustomOrder)=>{
74
+ if (hasCustomOrder) {
75
+ return customOrder.CUSTOM_ORDER_SORT;
76
+ }
77
+ return settings.defaultSortBy ? `${settings.defaultSortBy}:${settings.defaultSortOrder}` : '';
78
+ };
66
79
  const ListViewPage = ()=>{
67
80
  const { trackUsage } = strapiAdmin.useTracking();
68
81
  const navigate = reactRouterDom.useNavigate();
@@ -178,11 +191,26 @@ const ListViewPage = ()=>{
178
191
  schema?.attributes,
179
192
  schema?.uid
180
193
  ]);
194
+ const hasCustomOrder = hasCustomOrderEnabled(collectionType, list.settings);
181
195
  const [{ query }, setQuery] = strapiAdmin.useQueryParams({
182
196
  page: '1',
183
197
  pageSize: list.settings.pageSize.toString(),
184
- sort: list.settings.defaultSortBy ? `${list.settings.defaultSortBy}:${list.settings.defaultSortOrder}` : ''
198
+ sort: getDefaultSort(list.settings, hasCustomOrder)
185
199
  });
200
+ // A sort on the custom order can be left over in the URL or in the saved view
201
+ // after the setting has been turned off.
202
+ React__namespace.useEffect(()=>{
203
+ if (!isLoadingLayout && !hasCustomOrder && typeof query.sort === 'string' && query.sort.startsWith(`${customOrder.CUSTOM_ORDER_FIELD}:`)) {
204
+ setQuery(strapiAdmin.withEncodedUserParams(query, {
205
+ sort: undefined
206
+ }), 'push', true);
207
+ }
208
+ }, [
209
+ hasCustomOrder,
210
+ isLoadingLayout,
211
+ query,
212
+ setQuery
213
+ ]);
186
214
  React__namespace.useEffect(()=>{
187
215
  if (!configurationReady || !schema?.attributes || schema.uid !== model) {
188
216
  return;
@@ -247,7 +275,7 @@ const ListViewPage = ()=>{
247
275
  query,
248
276
  setQuery
249
277
  ]);
250
- const { data, error, isLoading, isFetching } = documents.useGetAllDocumentsQuery({
278
+ const { data, error, isLoading, isFetching, fulfilledTimeStamp } = documents.useGetAllDocumentsQuery({
251
279
  model,
252
280
  params
253
281
  }, {
@@ -285,10 +313,19 @@ const ListViewPage = ()=>{
285
313
  query,
286
314
  navigate
287
315
  ]);
288
- const { canCreate, isLoadingActionsRBAC } = DocumentRBAC.useDocumentRBAC('ListViewPage', ({ canCreate, isLoading })=>({
316
+ const { canCreate, canUpdate, isLoadingActionsRBAC } = DocumentRBAC.useDocumentRBAC('ListViewPage', ({ canCreate, canUpdate, isLoading })=>({
289
317
  canCreate,
318
+ canUpdate,
290
319
  isLoadingActionsRBAC: isLoading
291
320
  }));
321
+ const customOrder$1 = CustomOrder.useCustomOrder({
322
+ model,
323
+ isAvailable: hasCustomOrder,
324
+ canUpdate: canUpdate === true,
325
+ sort: query.sort,
326
+ params,
327
+ results,
328
+ pagination});
292
329
  const runHookWaterfall = strapiAdmin.useStrapiApp('ListViewPage', ({ runHookWaterfall })=>runHookWaterfall);
293
330
  /**
294
331
  * Run the waterfall and then inject our additional table headers.
@@ -327,10 +364,26 @@ const ListViewPage = ()=>{
327
364
  sortable: !hasStatusFilter
328
365
  });
329
366
  }
367
+ if (hasCustomOrder) {
368
+ // Sorting on this column is how the user comes back to the custom order
369
+ formattedHeaders.unshift({
370
+ attribute: {
371
+ type: 'custom'
372
+ },
373
+ name: customOrder.CUSTOM_ORDER_FIELD,
374
+ label: formatMessage({
375
+ id: translations.getTranslation('containers.list.table-headers.order'),
376
+ defaultMessage: 'order'
377
+ }),
378
+ searchable: false,
379
+ sortable: true
380
+ });
381
+ }
330
382
  return formattedHeaders;
331
383
  }, [
332
384
  displayedHeaders,
333
385
  formatMessage,
386
+ hasCustomOrder,
334
387
  hasStatusFilter,
335
388
  list,
336
389
  runHookWaterfall,
@@ -368,7 +421,7 @@ const ListViewPage = ()=>{
368
421
  * Only genuinely interactive cells are skipped: relations, media, components,
369
422
  * dynamic zones (they embed their own links/menus), plugin-formatted columns
370
423
  * (`cellFormatter`), and the synthetic `status` column.
371
- */ const linkCandidates = tableHeaders.filter(({ name, attribute, cellFormatter })=>name !== 'status' && typeof cellFormatter !== 'function' && attribute && !NON_LINKABLE_TYPES.has(attribute.type));
424
+ */ const linkCandidates = tableHeaders.filter(({ name, attribute, cellFormatter })=>name !== 'status' && name !== customOrder.CUSTOM_ORDER_FIELD && typeof cellFormatter !== 'function' && attribute && !NON_LINKABLE_TYPES.has(attribute.type));
372
425
  // The link column for a given row: the first candidate that actually has a
373
426
  // value (uses CellContent's own hasContent so it matches the "-" the cell
374
427
  // would otherwise render). documentId is checked directly (its own cell).
@@ -483,141 +536,152 @@ const ListViewPage = ()=>{
483
536
  direction: "column",
484
537
  alignItems: "stretch",
485
538
  children: [
486
- /*#__PURE__*/ jsxRuntime.jsxs(strapiAdmin.Table.Root, {
487
- rows: results,
488
- headers: tableHeaders,
489
- isLoading: isFetching,
490
- children: [
491
- /*#__PURE__*/ jsxRuntime.jsx(TableActionsBar, {}),
492
- /*#__PURE__*/ jsxRuntime.jsxs(strapiAdmin.Table.Content, {
493
- children: [
494
- /*#__PURE__*/ jsxRuntime.jsxs(strapiAdmin.Table.Head, {
495
- children: [
496
- /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Table.HeaderCheckboxCell, {}),
497
- tableHeaders.map((header)=>/*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Table.HeaderCell, {
498
- ...header
499
- }, header.name))
500
- ]
501
- }),
502
- /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Table.Loading, {}),
503
- /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Table.Empty, {
504
- action: canCreate ? /*#__PURE__*/ jsxRuntime.jsx(CreateButton, {
505
- variant: "secondary"
506
- }) : null
507
- }),
508
- /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Table.Body, {
509
- children: results.map((row)=>{
510
- const rowLinkField = getRowLinkField(row);
511
- return /*#__PURE__*/ jsxRuntime.jsxs(strapiAdmin.Table.Row, {
512
- cursor: "pointer",
513
- onClick: handleRowClick(row.documentId),
514
- children: [
515
- /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Table.CheckboxCell, {
516
- id: row.id
517
- }),
518
- tableHeaders.map(({ cellFormatter, ...header })=>{
519
- if (header.name === 'status') {
520
- const { status } = row;
521
- return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Table.Cell, {
522
- children: /*#__PURE__*/ jsxRuntime.jsx(DocumentStatus.DocumentStatus, {
523
- status: status,
524
- maxWidth: 'min-content'
525
- })
526
- }, header.name);
527
- }
528
- if ([
529
- 'createdBy',
530
- 'updatedBy'
531
- ].includes(header.name.split('.')[0])) {
532
- // Display the users full name
533
- // Some entries doesn't have a user assigned as creator/updater (ex: entries created through content API)
534
- // In this case, we display a dash
535
- return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Table.Cell, {
536
- children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
537
- textColor: "neutral800",
538
- children: row[header.name.split('.')[0]] ? users.getDisplayName(row[header.name.split('.')[0]]) : '-'
539
- })
540
- }, header.name);
541
- }
542
- if (header.name === 'documentId') {
543
- // When documentId is the primary link column, only its
544
- // id text becomes the link; the copy button stays outside.
545
- const isDocumentIdLink = header.name === rowLinkField && Boolean(row.documentId);
546
- return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Table.Cell, {
547
- children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
548
- gap: 2,
549
- alignItems: "center",
550
- width: "100%",
551
- minWidth: 0,
552
- children: [
553
- isDocumentIdLink ? /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
554
- tag: reactRouterDom.Link,
555
- to: {
556
- pathname: row.documentId,
557
- search: qs.stringify({
558
- plugins: query.plugins
559
- })
560
- },
561
- onClick: (e)=>e.stopPropagation(),
562
- textColor: "neutral800",
563
- maxWidth: "30rem",
564
- ellipsis: true,
565
- children: row.documentId
566
- }) : /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
567
- textColor: "neutral800",
568
- maxWidth: "30rem",
569
- ellipsis: true,
570
- children: row.documentId || '-'
571
- }),
572
- row.documentId && /*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
573
- variant: "ghost",
574
- size: "S",
575
- label: formatMessage({
576
- id: 'content-manager.actions.copy-documentId.label',
577
- defaultMessage: 'Copy'
539
+ /*#__PURE__*/ jsxRuntime.jsx(CustomOrder.CustomOrder.Root, {
540
+ state: customOrder$1,
541
+ children: /*#__PURE__*/ jsxRuntime.jsxs(strapiAdmin.Table.Root, {
542
+ rows: customOrder$1.rows,
543
+ headers: tableHeaders,
544
+ isLoading: isFetching && !customOrder$1.isMoving,
545
+ children: [
546
+ /*#__PURE__*/ jsxRuntime.jsx(TableActionsBar, {}),
547
+ /*#__PURE__*/ jsxRuntime.jsxs(strapiAdmin.Table.Content, {
548
+ children: [
549
+ /*#__PURE__*/ jsxRuntime.jsxs(strapiAdmin.Table.Head, {
550
+ children: [
551
+ /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Table.HeaderCheckboxCell, {}),
552
+ tableHeaders.map((header)=>/*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Table.HeaderCell, {
553
+ ...header
554
+ }, header.name))
555
+ ]
556
+ }),
557
+ /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Table.Loading, {}),
558
+ /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Table.Empty, {
559
+ action: canCreate ? /*#__PURE__*/ jsxRuntime.jsx(CreateButton, {
560
+ variant: "secondary"
561
+ }) : null
562
+ }),
563
+ /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Table.Body, {
564
+ children: customOrder$1.rows.map((row, index)=>{
565
+ const rowLinkField = getRowLinkField(row);
566
+ return /*#__PURE__*/ jsxRuntime.jsxs(CustomOrder.CustomOrder.Row, {
567
+ cursor: "pointer",
568
+ documentId: row.documentId,
569
+ onClick: handleRowClick(row.documentId),
570
+ children: [
571
+ /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Table.CheckboxCell, {
572
+ id: row.id
573
+ }),
574
+ tableHeaders.map(({ cellFormatter, ...header })=>{
575
+ if (header.name === customOrder.CUSTOM_ORDER_FIELD) {
576
+ return /*#__PURE__*/ jsxRuntime.jsx(CustomOrder.CustomOrder.PositionCell, {
577
+ documentId: row.documentId,
578
+ position: ((pagination?.page ?? 1) - 1) * (pagination?.pageSize ?? 0) + index + 1,
579
+ total: pagination?.total ?? customOrder$1.rows.length
580
+ }, header.name);
581
+ }
582
+ if (header.name === 'status') {
583
+ const { status } = row;
584
+ return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Table.Cell, {
585
+ children: /*#__PURE__*/ jsxRuntime.jsx(DocumentStatus.DocumentStatus, {
586
+ status: status,
587
+ maxWidth: 'min-content'
588
+ })
589
+ }, header.name);
590
+ }
591
+ if ([
592
+ 'createdBy',
593
+ 'updatedBy'
594
+ ].includes(header.name.split('.')[0])) {
595
+ // Display the users full name
596
+ // Some entries doesn't have a user assigned as creator/updater (ex: entries created through content API)
597
+ // In this case, we display a dash
598
+ return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Table.Cell, {
599
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
600
+ textColor: "neutral800",
601
+ children: row[header.name.split('.')[0]] ? users.getDisplayName(row[header.name.split('.')[0]]) : '-'
602
+ })
603
+ }, header.name);
604
+ }
605
+ if (header.name === 'documentId') {
606
+ // When documentId is the primary link column, only its
607
+ // id text becomes the link; the copy button stays outside.
608
+ const isDocumentIdLink = header.name === rowLinkField && Boolean(row.documentId);
609
+ return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Table.Cell, {
610
+ children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
611
+ gap: 2,
612
+ alignItems: "center",
613
+ width: "100%",
614
+ minWidth: 0,
615
+ children: [
616
+ isDocumentIdLink ? /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
617
+ tag: reactRouterDom.Link,
618
+ to: {
619
+ pathname: row.documentId,
620
+ search: qs.stringify({
621
+ plugins: query.plugins
622
+ })
623
+ },
624
+ onClick: (e)=>e.stopPropagation(),
625
+ textColor: "neutral800",
626
+ maxWidth: "30rem",
627
+ ellipsis: true,
628
+ children: row.documentId
629
+ }) : /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
630
+ textColor: "neutral800",
631
+ maxWidth: "30rem",
632
+ ellipsis: true,
633
+ children: row.documentId || '-'
578
634
  }),
579
- onClick: (e)=>handleCopyDocumentId(e, row.documentId),
580
- children: /*#__PURE__*/ jsxRuntime.jsx(Icons.Duplicate, {})
581
- })
582
- ]
583
- })
584
- }, header.name);
585
- }
586
- if (typeof cellFormatter === 'function') {
635
+ row.documentId && /*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
636
+ variant: "ghost",
637
+ size: "S",
638
+ label: formatMessage({
639
+ id: 'content-manager.actions.copy-documentId.label',
640
+ defaultMessage: 'Copy'
641
+ }),
642
+ onClick: (e)=>handleCopyDocumentId(e, row.documentId),
643
+ children: /*#__PURE__*/ jsxRuntime.jsx(Icons.Duplicate, {})
644
+ })
645
+ ]
646
+ })
647
+ }, header.name);
648
+ }
649
+ if (typeof cellFormatter === 'function') {
650
+ return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Table.Cell, {
651
+ children: cellFormatter(row, header, {
652
+ collectionType,
653
+ model
654
+ })
655
+ }, header.name);
656
+ }
587
657
  return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Table.Cell, {
588
- children: cellFormatter(row, header, {
589
- collectionType,
590
- model
658
+ children: /*#__PURE__*/ jsxRuntime.jsx(CellContent.CellContent, {
659
+ content: row[header.name.split('.')[0]],
660
+ rowId: row.documentId,
661
+ ...header,
662
+ linkTo: header.name === rowLinkField ? {
663
+ pathname: row.documentId,
664
+ search: qs.stringify({
665
+ plugins: query.plugins
666
+ })
667
+ } : undefined
591
668
  })
592
669
  }, header.name);
593
- }
594
- return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Table.Cell, {
595
- children: /*#__PURE__*/ jsxRuntime.jsx(CellContent.CellContent, {
596
- content: row[header.name.split('.')[0]],
597
- rowId: row.documentId,
598
- ...header,
599
- linkTo: header.name === rowLinkField ? {
600
- pathname: row.documentId,
601
- search: qs.stringify({
602
- plugins: query.plugins
603
- })
604
- } : undefined
670
+ }),
671
+ /*#__PURE__*/ jsxRuntime.jsx(ActionsCell, {
672
+ onClick: (e)=>e.stopPropagation(),
673
+ children: /*#__PURE__*/ jsxRuntime.jsx(TableActions.TableActions, {
674
+ document: row
605
675
  })
606
- }, header.name);
607
- }),
608
- /*#__PURE__*/ jsxRuntime.jsx(ActionsCell, {
609
- onClick: (e)=>e.stopPropagation(),
610
- children: /*#__PURE__*/ jsxRuntime.jsx(TableActions.TableActions, {
611
- document: row
612
676
  })
613
- })
614
- ]
615
- }, row.id);
677
+ ]
678
+ }, row.id);
679
+ })
616
680
  })
617
- })
618
- ]
619
- })
620
- ]
681
+ ]
682
+ })
683
+ ]
684
+ })
621
685
  }),
622
686
  /*#__PURE__*/ jsxRuntime.jsxs(strapiAdmin.Pagination.Root, {
623
687
  ...pagination,