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