@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
@@ -1 +1 @@
1
- {"version":3,"file":"TableActions.js","sources":["../../../../../admin/src/pages/ListView/components/TableActions.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n DescriptionComponentRenderer,\n useNotification,\n useStrapiApp,\n useQueryParams,\n} from '@strapi/admin/strapi-admin';\nimport { Button, LinkButton, Modal } from '@strapi/design-system';\nimport { Duplicate, ExternalLink, Pencil } from '@strapi/icons';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useHref, useNavigate } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { useDocumentRBAC } from '../../../features/DocumentRBAC';\nimport { Document, useDoc } from '../../../hooks/useDocument';\nimport { useDocumentActions } from '../../../hooks/useDocumentActions';\nimport { isBaseQueryError } from '../../../utils/api';\nimport { DocumentActionsMenu } from '../../EditView/components/DocumentActions';\n\nimport { AutoCloneFailureModalBody } from './AutoCloneFailureModal';\n\nimport type { ProhibitedCloningField } from '../../../../../shared/contracts/collection-types';\nimport type {\n ContentManagerPlugin,\n DocumentActionComponent,\n DocumentActionProps,\n} from '../../../content-manager';\n\n/* -------------------------------------------------------------------------------------------------\n * TableActions\n * -----------------------------------------------------------------------------------------------*/\n\ninterface TableActionsProps {\n document: Document;\n}\n\nconst TableActions = ({ document }: TableActionsProps) => {\n const { formatMessage } = useIntl();\n const { model, collectionType } = useDoc();\n const plugins = useStrapiApp('TableActions', (state) => state.plugins);\n\n const props: DocumentActionProps = {\n activeTab: null,\n model,\n documentId: document.documentId,\n collectionType,\n document,\n };\n\n return (\n <DescriptionComponentRenderer\n props={props}\n descriptions={(plugins['content-manager'].apis as ContentManagerPlugin['config']['apis'])\n .getDocumentActions('table-row')\n // We explicitly remove the PublishAction from description so we never render it and we don't make unnecessary requests.\n .filter((action) => action.name !== 'PublishAction')}\n >\n {(actions) => {\n const tableRowActions = actions.filter((action) => {\n const positions = Array.isArray(action.position) ? action.position : [action.position];\n return positions.includes('table-row');\n });\n\n return (\n <DocumentActionsMenu\n actions={tableRowActions}\n label={formatMessage({\n id: 'content-manager.containers.list.table.row-actions',\n defaultMessage: 'Row actions',\n })}\n variant=\"ghost\"\n />\n );\n }}\n </DescriptionComponentRenderer>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * TableActionComponents\n * -----------------------------------------------------------------------------------------------*/\n\nconst EditAction: DocumentActionComponent = ({ documentId }) => {\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const { canRead } = useDocumentRBAC('EditAction', ({ canRead }) => ({ canRead }));\n const { toggleNotification } = useNotification();\n const [{ query }] = useQueryParams<{ plugins?: object }>();\n\n return {\n disabled: !canRead,\n icon: <StyledPencil />,\n label: formatMessage({\n id: 'content-manager.actions.edit.label',\n defaultMessage: 'Edit',\n }),\n position: 'table-row',\n onClick: async () => {\n if (!documentId) {\n console.error(\n \"You're trying to edit a document without an id, this is likely a bug with Strapi. Please open an issue.\"\n );\n\n toggleNotification({\n message: formatMessage({\n id: 'content-manager.actions.edit.error',\n defaultMessage: 'An error occurred while trying to edit the document.',\n }),\n type: 'danger',\n });\n\n return;\n }\n\n navigate({\n pathname: documentId,\n search: stringify({\n plugins: query.plugins,\n }),\n });\n },\n };\n};\n\nEditAction.type = 'edit';\nEditAction.position = 'table-row';\n\n/**\n * Because the icon system is completely broken, we have to do\n * this to remove the fill from the cog.\n */\nconst StyledPencil = styled(Pencil)`\n path {\n fill: currentColor;\n }\n`;\n\nconst OpenInNewTabAction: DocumentActionComponent = ({ documentId }) => {\n const { formatMessage } = useIntl();\n const { canRead } = useDocumentRBAC('OpenInNewTabAction', ({ canRead }) => ({ canRead }));\n const [{ query }] = useQueryParams<{ plugins?: object }>();\n\n // Resolve the entry's absolute URL (incl. router basename) so we can open it\n // in a real new browser tab. The primary list-view cell is also a link, this\n // gives the same affordance an explicit, discoverable menu entry.\n const href = useHref({\n pathname: documentId ?? '',\n search: stringify({ plugins: query.plugins }),\n });\n\n return {\n disabled: !canRead || !documentId,\n icon: <StyledExternalLink />,\n label: formatMessage({\n id: 'content-manager.actions.open-in-new-tab.label',\n defaultMessage: 'Open in new tab',\n }),\n position: 'table-row',\n onClick: () => {\n window.open(href, '_blank', 'noopener,noreferrer');\n },\n };\n};\n\n// No `type` is set: it's an optional discriminator constrained to a known union\n// and this action is identified by its component name instead.\nOpenInNewTabAction.position = 'table-row';\n\nconst StyledExternalLink = styled(ExternalLink)`\n path {\n fill: currentColor;\n }\n`;\n\nconst CloneAction: DocumentActionComponent = ({ model, documentId }) => {\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const { canCreate } = useDocumentRBAC('CloneAction', ({ canCreate }) => ({ canCreate }));\n const { toggleNotification } = useNotification();\n const { autoClone } = useDocumentActions();\n const [prohibitedFields, setProhibitedFields] = React.useState<ProhibitedCloningField[]>([]);\n const [{ query }] = useQueryParams<{ plugins?: { i18n?: { locale?: string } } }>();\n\n return {\n disabled: !canCreate,\n icon: <StyledDuplicate />,\n label: formatMessage({\n id: 'content-manager.actions.clone.label',\n defaultMessage: 'Duplicate',\n }),\n position: 'table-row',\n onClick: async () => {\n if (!documentId) {\n console.error(\n \"You're trying to clone a document in the table without an id, this is likely a bug with Strapi. Please open an issue.\"\n );\n\n toggleNotification({\n message: formatMessage({\n id: 'content-manager.actions.clone.error',\n defaultMessage: 'An error occurred while trying to clone the document.',\n }),\n type: 'danger',\n });\n\n return;\n }\n\n const res = await autoClone({\n model,\n sourceId: documentId,\n locale: query.plugins?.i18n?.locale,\n });\n\n if ('data' in res) {\n navigate({\n pathname: res.data.documentId,\n search: stringify({\n plugins: query.plugins,\n }),\n });\n\n /**\n * We return true because we don't need to show a modal anymore.\n */\n return true;\n }\n\n if (\n isBaseQueryError(res.error) &&\n res.error.details &&\n typeof res.error.details === 'object' &&\n 'prohibitedFields' in res.error.details &&\n Array.isArray(res.error.details.prohibitedFields)\n ) {\n const prohibitedFields = res.error.details.prohibitedFields as ProhibitedCloningField[];\n\n setProhibitedFields(prohibitedFields);\n }\n },\n dialog: {\n type: 'modal',\n title: formatMessage({\n id: 'content-manager.containers.list.autoCloneModal.header',\n defaultMessage: 'Duplicate',\n }),\n content: <AutoCloneFailureModalBody prohibitedFields={prohibitedFields} />,\n footer: ({ onClose }) => {\n return (\n <Modal.Footer>\n <Button onClick={onClose} variant=\"tertiary\">\n {formatMessage({\n id: 'cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n <LinkButton\n tag={NavLink}\n to={{\n pathname: `clone/${documentId}`,\n search: stringify({\n plugins: query.plugins,\n }),\n }}\n >\n {formatMessage({\n id: 'content-manager.containers.list.autoCloneModal.create',\n defaultMessage: 'Create',\n })}\n </LinkButton>\n </Modal.Footer>\n );\n },\n },\n };\n};\n\nCloneAction.type = 'clone';\nCloneAction.position = 'table-row';\n\n/**\n * Because the icon system is completely broken, we have to do\n * this to remove the fill from the cog.\n */\nconst StyledDuplicate = styled(Duplicate)`\n path {\n fill: currentColor;\n }\n`;\n\nconst DEFAULT_TABLE_ROW_ACTIONS = [EditAction, OpenInNewTabAction, CloneAction];\n\nexport { TableActions, DEFAULT_TABLE_ROW_ACTIONS };\n"],"names":["TableActions","document","formatMessage","useIntl","model","collectionType","useDoc","plugins","useStrapiApp","state","props","activeTab","documentId","_jsx","DescriptionComponentRenderer","descriptions","apis","getDocumentActions","filter","action","name","actions","tableRowActions","positions","Array","isArray","position","includes","DocumentActionsMenu","label","id","defaultMessage","variant","EditAction","navigate","useNavigate","canRead","useDocumentRBAC","toggleNotification","useNotification","query","useQueryParams","disabled","icon","StyledPencil","onClick","console","error","message","type","pathname","search","stringify","styled","Pencil","OpenInNewTabAction","href","useHref","StyledExternalLink","window","open","ExternalLink","CloneAction","canCreate","autoClone","useDocumentActions","prohibitedFields","setProhibitedFields","React","useState","StyledDuplicate","res","sourceId","locale","i18n","data","isBaseQueryError","details","dialog","title","content","AutoCloneFailureModalBody","footer","onClose","_jsxs","Modal","Footer","Button","LinkButton","tag","NavLink","to","Duplicate","DEFAULT_TABLE_ROW_ACTIONS"],"mappings":"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"}
1
+ {"version":3,"file":"TableActions.js","sources":["../../../../../admin/src/pages/ListView/components/TableActions.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n DescriptionComponentRenderer,\n useNotification,\n useStrapiApp,\n useQueryParams,\n} from '@strapi/admin/strapi-admin';\nimport { Button, LinkButton, Modal } from '@strapi/design-system';\nimport { Duplicate, ExternalLink, Pencil } from '@strapi/icons';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useHref, useNavigate } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { useDocumentRBAC } from '../../../features/DocumentRBAC';\nimport { Document, useDoc } from '../../../hooks/useDocument';\nimport { useDocumentActions } from '../../../hooks/useDocumentActions';\nimport { isBaseQueryError } from '../../../utils/api';\nimport { DocumentActionsMenu } from '../../EditView/components/DocumentActions';\n\nimport { AutoCloneFailureModalBody } from './AutoCloneFailureModal';\nimport { MoveToBottomAction, MoveToTopAction } from './CustomOrder';\n\nimport type { ProhibitedCloningField } from '../../../../../shared/contracts/collection-types';\nimport type {\n ContentManagerPlugin,\n DocumentActionComponent,\n DocumentActionProps,\n} from '../../../content-manager';\n\n/* -------------------------------------------------------------------------------------------------\n * TableActions\n * -----------------------------------------------------------------------------------------------*/\n\ninterface TableActionsProps {\n document: Document;\n}\n\nconst TableActions = ({ document }: TableActionsProps) => {\n const { formatMessage } = useIntl();\n const { model, collectionType } = useDoc();\n const plugins = useStrapiApp('TableActions', (state) => state.plugins);\n\n const props: DocumentActionProps = {\n activeTab: null,\n model,\n documentId: document.documentId,\n collectionType,\n document,\n };\n\n return (\n <DescriptionComponentRenderer\n props={props}\n descriptions={(plugins['content-manager'].apis as ContentManagerPlugin['config']['apis'])\n .getDocumentActions('table-row')\n // We explicitly remove the PublishAction from description so we never render it and we don't make unnecessary requests.\n .filter((action) => action.name !== 'PublishAction')}\n >\n {(actions) => {\n const tableRowActions = actions.filter((action) => {\n const positions = Array.isArray(action.position) ? action.position : [action.position];\n return positions.includes('table-row');\n });\n\n return (\n <DocumentActionsMenu\n actions={tableRowActions}\n label={formatMessage({\n id: 'content-manager.containers.list.table.row-actions',\n defaultMessage: 'Row actions',\n })}\n variant=\"ghost\"\n />\n );\n }}\n </DescriptionComponentRenderer>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * TableActionComponents\n * -----------------------------------------------------------------------------------------------*/\n\nconst EditAction: DocumentActionComponent = ({ documentId }) => {\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const { canRead } = useDocumentRBAC('EditAction', ({ canRead }) => ({ canRead }));\n const { toggleNotification } = useNotification();\n const [{ query }] = useQueryParams<{ plugins?: object }>();\n\n return {\n disabled: !canRead,\n icon: <StyledPencil />,\n label: formatMessage({\n id: 'content-manager.actions.edit.label',\n defaultMessage: 'Edit',\n }),\n position: 'table-row',\n onClick: async () => {\n if (!documentId) {\n console.error(\n \"You're trying to edit a document without an id, this is likely a bug with Strapi. Please open an issue.\"\n );\n\n toggleNotification({\n message: formatMessage({\n id: 'content-manager.actions.edit.error',\n defaultMessage: 'An error occurred while trying to edit the document.',\n }),\n type: 'danger',\n });\n\n return;\n }\n\n navigate({\n pathname: documentId,\n search: stringify({\n plugins: query.plugins,\n }),\n });\n },\n };\n};\n\nEditAction.type = 'edit';\nEditAction.position = 'table-row';\n\n/**\n * Because the icon system is completely broken, we have to do\n * this to remove the fill from the cog.\n */\nconst StyledPencil = styled(Pencil)`\n path {\n fill: currentColor;\n }\n`;\n\nconst OpenInNewTabAction: DocumentActionComponent = ({ documentId }) => {\n const { formatMessage } = useIntl();\n const { canRead } = useDocumentRBAC('OpenInNewTabAction', ({ canRead }) => ({ canRead }));\n const [{ query }] = useQueryParams<{ plugins?: object }>();\n\n // Resolve the entry's absolute URL (incl. router basename) so we can open it\n // in a real new browser tab. The primary list-view cell is also a link, this\n // gives the same affordance an explicit, discoverable menu entry.\n const href = useHref({\n pathname: documentId ?? '',\n search: stringify({ plugins: query.plugins }),\n });\n\n return {\n disabled: !canRead || !documentId,\n icon: <StyledExternalLink />,\n label: formatMessage({\n id: 'content-manager.actions.open-in-new-tab.label',\n defaultMessage: 'Open in new tab',\n }),\n position: 'table-row',\n onClick: () => {\n window.open(href, '_blank', 'noopener,noreferrer');\n },\n };\n};\n\n// No `type` is set: it's an optional discriminator constrained to a known union\n// and this action is identified by its component name instead.\nOpenInNewTabAction.position = 'table-row';\n\nconst StyledExternalLink = styled(ExternalLink)`\n path {\n fill: currentColor;\n }\n`;\n\nconst CloneAction: DocumentActionComponent = ({ model, documentId }) => {\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const { canCreate } = useDocumentRBAC('CloneAction', ({ canCreate }) => ({ canCreate }));\n const { toggleNotification } = useNotification();\n const { autoClone } = useDocumentActions();\n const [prohibitedFields, setProhibitedFields] = React.useState<ProhibitedCloningField[]>([]);\n const [{ query }] = useQueryParams<{ plugins?: { i18n?: { locale?: string } } }>();\n\n return {\n disabled: !canCreate,\n icon: <StyledDuplicate />,\n label: formatMessage({\n id: 'content-manager.actions.clone.label',\n defaultMessage: 'Duplicate',\n }),\n position: 'table-row',\n onClick: async () => {\n if (!documentId) {\n console.error(\n \"You're trying to clone a document in the table without an id, this is likely a bug with Strapi. Please open an issue.\"\n );\n\n toggleNotification({\n message: formatMessage({\n id: 'content-manager.actions.clone.error',\n defaultMessage: 'An error occurred while trying to clone the document.',\n }),\n type: 'danger',\n });\n\n return;\n }\n\n const res = await autoClone({\n model,\n sourceId: documentId,\n locale: query.plugins?.i18n?.locale,\n });\n\n if ('data' in res) {\n navigate({\n pathname: res.data.documentId,\n search: stringify({\n plugins: query.plugins,\n }),\n });\n\n /**\n * We return true because we don't need to show a modal anymore.\n */\n return true;\n }\n\n if (\n isBaseQueryError(res.error) &&\n res.error.details &&\n typeof res.error.details === 'object' &&\n 'prohibitedFields' in res.error.details &&\n Array.isArray(res.error.details.prohibitedFields)\n ) {\n const prohibitedFields = res.error.details.prohibitedFields as ProhibitedCloningField[];\n\n setProhibitedFields(prohibitedFields);\n }\n },\n dialog: {\n type: 'modal',\n title: formatMessage({\n id: 'content-manager.containers.list.autoCloneModal.header',\n defaultMessage: 'Duplicate',\n }),\n content: <AutoCloneFailureModalBody prohibitedFields={prohibitedFields} />,\n footer: ({ onClose }) => {\n return (\n <Modal.Footer>\n <Button onClick={onClose} variant=\"tertiary\">\n {formatMessage({\n id: 'cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n <LinkButton\n tag={NavLink}\n to={{\n pathname: `clone/${documentId}`,\n search: stringify({\n plugins: query.plugins,\n }),\n }}\n >\n {formatMessage({\n id: 'content-manager.containers.list.autoCloneModal.create',\n defaultMessage: 'Create',\n })}\n </LinkButton>\n </Modal.Footer>\n );\n },\n },\n };\n};\n\nCloneAction.type = 'clone';\nCloneAction.position = 'table-row';\n\n/**\n * Because the icon system is completely broken, we have to do\n * this to remove the fill from the cog.\n */\nconst StyledDuplicate = styled(Duplicate)`\n path {\n fill: currentColor;\n }\n`;\n\nconst DEFAULT_TABLE_ROW_ACTIONS = [\n EditAction,\n OpenInNewTabAction,\n CloneAction,\n MoveToTopAction,\n MoveToBottomAction,\n];\n\nexport { TableActions, DEFAULT_TABLE_ROW_ACTIONS };\n"],"names":["TableActions","document","formatMessage","useIntl","model","collectionType","useDoc","plugins","useStrapiApp","state","props","activeTab","documentId","_jsx","DescriptionComponentRenderer","descriptions","apis","getDocumentActions","filter","action","name","actions","tableRowActions","positions","Array","isArray","position","includes","DocumentActionsMenu","label","id","defaultMessage","variant","EditAction","navigate","useNavigate","canRead","useDocumentRBAC","toggleNotification","useNotification","query","useQueryParams","disabled","icon","StyledPencil","onClick","console","error","message","type","pathname","search","stringify","styled","Pencil","OpenInNewTabAction","href","useHref","StyledExternalLink","window","open","ExternalLink","CloneAction","canCreate","autoClone","useDocumentActions","prohibitedFields","setProhibitedFields","React","useState","StyledDuplicate","res","sourceId","locale","i18n","data","isBaseQueryError","details","dialog","title","content","AutoCloneFailureModalBody","footer","onClose","_jsxs","Modal","Footer","Button","LinkButton","tag","NavLink","to","Duplicate","DEFAULT_TABLE_ROW_ACTIONS","MoveToTopAction","MoveToBottomAction"],"mappings":"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"}
@@ -13,6 +13,7 @@ import { useDocumentActions } from '../../../hooks/useDocumentActions.mjs';
13
13
  import { isBaseQueryError } from '../../../utils/api.mjs';
14
14
  import { DocumentActionsMenu } from '../../EditView/components/DocumentActions.mjs';
15
15
  import { AutoCloneFailureModalBody } from './AutoCloneFailureModal.mjs';
16
+ import { MoveToTopAction, MoveToBottomAction } from './CustomOrder.mjs';
16
17
 
17
18
  const TableActions = ({ document })=>{
18
19
  const { formatMessage } = useIntl();
@@ -235,7 +236,9 @@ CloneAction.position = 'table-row';
235
236
  const DEFAULT_TABLE_ROW_ACTIONS = [
236
237
  EditAction,
237
238
  OpenInNewTabAction,
238
- CloneAction
239
+ CloneAction,
240
+ MoveToTopAction,
241
+ MoveToBottomAction
239
242
  ];
240
243
 
241
244
  export { DEFAULT_TABLE_ROW_ACTIONS, TableActions };
@@ -1 +1 @@
1
- {"version":3,"file":"TableActions.mjs","sources":["../../../../../admin/src/pages/ListView/components/TableActions.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n DescriptionComponentRenderer,\n useNotification,\n useStrapiApp,\n useQueryParams,\n} from '@strapi/admin/strapi-admin';\nimport { Button, LinkButton, Modal } from '@strapi/design-system';\nimport { Duplicate, ExternalLink, Pencil } from '@strapi/icons';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useHref, useNavigate } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { useDocumentRBAC } from '../../../features/DocumentRBAC';\nimport { Document, useDoc } from '../../../hooks/useDocument';\nimport { useDocumentActions } from '../../../hooks/useDocumentActions';\nimport { isBaseQueryError } from '../../../utils/api';\nimport { DocumentActionsMenu } from '../../EditView/components/DocumentActions';\n\nimport { AutoCloneFailureModalBody } from './AutoCloneFailureModal';\n\nimport type { ProhibitedCloningField } from '../../../../../shared/contracts/collection-types';\nimport type {\n ContentManagerPlugin,\n DocumentActionComponent,\n DocumentActionProps,\n} from '../../../content-manager';\n\n/* -------------------------------------------------------------------------------------------------\n * TableActions\n * -----------------------------------------------------------------------------------------------*/\n\ninterface TableActionsProps {\n document: Document;\n}\n\nconst TableActions = ({ document }: TableActionsProps) => {\n const { formatMessage } = useIntl();\n const { model, collectionType } = useDoc();\n const plugins = useStrapiApp('TableActions', (state) => state.plugins);\n\n const props: DocumentActionProps = {\n activeTab: null,\n model,\n documentId: document.documentId,\n collectionType,\n document,\n };\n\n return (\n <DescriptionComponentRenderer\n props={props}\n descriptions={(plugins['content-manager'].apis as ContentManagerPlugin['config']['apis'])\n .getDocumentActions('table-row')\n // We explicitly remove the PublishAction from description so we never render it and we don't make unnecessary requests.\n .filter((action) => action.name !== 'PublishAction')}\n >\n {(actions) => {\n const tableRowActions = actions.filter((action) => {\n const positions = Array.isArray(action.position) ? action.position : [action.position];\n return positions.includes('table-row');\n });\n\n return (\n <DocumentActionsMenu\n actions={tableRowActions}\n label={formatMessage({\n id: 'content-manager.containers.list.table.row-actions',\n defaultMessage: 'Row actions',\n })}\n variant=\"ghost\"\n />\n );\n }}\n </DescriptionComponentRenderer>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * TableActionComponents\n * -----------------------------------------------------------------------------------------------*/\n\nconst EditAction: DocumentActionComponent = ({ documentId }) => {\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const { canRead } = useDocumentRBAC('EditAction', ({ canRead }) => ({ canRead }));\n const { toggleNotification } = useNotification();\n const [{ query }] = useQueryParams<{ plugins?: object }>();\n\n return {\n disabled: !canRead,\n icon: <StyledPencil />,\n label: formatMessage({\n id: 'content-manager.actions.edit.label',\n defaultMessage: 'Edit',\n }),\n position: 'table-row',\n onClick: async () => {\n if (!documentId) {\n console.error(\n \"You're trying to edit a document without an id, this is likely a bug with Strapi. Please open an issue.\"\n );\n\n toggleNotification({\n message: formatMessage({\n id: 'content-manager.actions.edit.error',\n defaultMessage: 'An error occurred while trying to edit the document.',\n }),\n type: 'danger',\n });\n\n return;\n }\n\n navigate({\n pathname: documentId,\n search: stringify({\n plugins: query.plugins,\n }),\n });\n },\n };\n};\n\nEditAction.type = 'edit';\nEditAction.position = 'table-row';\n\n/**\n * Because the icon system is completely broken, we have to do\n * this to remove the fill from the cog.\n */\nconst StyledPencil = styled(Pencil)`\n path {\n fill: currentColor;\n }\n`;\n\nconst OpenInNewTabAction: DocumentActionComponent = ({ documentId }) => {\n const { formatMessage } = useIntl();\n const { canRead } = useDocumentRBAC('OpenInNewTabAction', ({ canRead }) => ({ canRead }));\n const [{ query }] = useQueryParams<{ plugins?: object }>();\n\n // Resolve the entry's absolute URL (incl. router basename) so we can open it\n // in a real new browser tab. The primary list-view cell is also a link, this\n // gives the same affordance an explicit, discoverable menu entry.\n const href = useHref({\n pathname: documentId ?? '',\n search: stringify({ plugins: query.plugins }),\n });\n\n return {\n disabled: !canRead || !documentId,\n icon: <StyledExternalLink />,\n label: formatMessage({\n id: 'content-manager.actions.open-in-new-tab.label',\n defaultMessage: 'Open in new tab',\n }),\n position: 'table-row',\n onClick: () => {\n window.open(href, '_blank', 'noopener,noreferrer');\n },\n };\n};\n\n// No `type` is set: it's an optional discriminator constrained to a known union\n// and this action is identified by its component name instead.\nOpenInNewTabAction.position = 'table-row';\n\nconst StyledExternalLink = styled(ExternalLink)`\n path {\n fill: currentColor;\n }\n`;\n\nconst CloneAction: DocumentActionComponent = ({ model, documentId }) => {\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const { canCreate } = useDocumentRBAC('CloneAction', ({ canCreate }) => ({ canCreate }));\n const { toggleNotification } = useNotification();\n const { autoClone } = useDocumentActions();\n const [prohibitedFields, setProhibitedFields] = React.useState<ProhibitedCloningField[]>([]);\n const [{ query }] = useQueryParams<{ plugins?: { i18n?: { locale?: string } } }>();\n\n return {\n disabled: !canCreate,\n icon: <StyledDuplicate />,\n label: formatMessage({\n id: 'content-manager.actions.clone.label',\n defaultMessage: 'Duplicate',\n }),\n position: 'table-row',\n onClick: async () => {\n if (!documentId) {\n console.error(\n \"You're trying to clone a document in the table without an id, this is likely a bug with Strapi. Please open an issue.\"\n );\n\n toggleNotification({\n message: formatMessage({\n id: 'content-manager.actions.clone.error',\n defaultMessage: 'An error occurred while trying to clone the document.',\n }),\n type: 'danger',\n });\n\n return;\n }\n\n const res = await autoClone({\n model,\n sourceId: documentId,\n locale: query.plugins?.i18n?.locale,\n });\n\n if ('data' in res) {\n navigate({\n pathname: res.data.documentId,\n search: stringify({\n plugins: query.plugins,\n }),\n });\n\n /**\n * We return true because we don't need to show a modal anymore.\n */\n return true;\n }\n\n if (\n isBaseQueryError(res.error) &&\n res.error.details &&\n typeof res.error.details === 'object' &&\n 'prohibitedFields' in res.error.details &&\n Array.isArray(res.error.details.prohibitedFields)\n ) {\n const prohibitedFields = res.error.details.prohibitedFields as ProhibitedCloningField[];\n\n setProhibitedFields(prohibitedFields);\n }\n },\n dialog: {\n type: 'modal',\n title: formatMessage({\n id: 'content-manager.containers.list.autoCloneModal.header',\n defaultMessage: 'Duplicate',\n }),\n content: <AutoCloneFailureModalBody prohibitedFields={prohibitedFields} />,\n footer: ({ onClose }) => {\n return (\n <Modal.Footer>\n <Button onClick={onClose} variant=\"tertiary\">\n {formatMessage({\n id: 'cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n <LinkButton\n tag={NavLink}\n to={{\n pathname: `clone/${documentId}`,\n search: stringify({\n plugins: query.plugins,\n }),\n }}\n >\n {formatMessage({\n id: 'content-manager.containers.list.autoCloneModal.create',\n defaultMessage: 'Create',\n })}\n </LinkButton>\n </Modal.Footer>\n );\n },\n },\n };\n};\n\nCloneAction.type = 'clone';\nCloneAction.position = 'table-row';\n\n/**\n * Because the icon system is completely broken, we have to do\n * this to remove the fill from the cog.\n */\nconst StyledDuplicate = styled(Duplicate)`\n path {\n fill: currentColor;\n }\n`;\n\nconst DEFAULT_TABLE_ROW_ACTIONS = [EditAction, OpenInNewTabAction, CloneAction];\n\nexport { TableActions, DEFAULT_TABLE_ROW_ACTIONS };\n"],"names":["TableActions","document","formatMessage","useIntl","model","collectionType","useDoc","plugins","useStrapiApp","state","props","activeTab","documentId","_jsx","DescriptionComponentRenderer","descriptions","apis","getDocumentActions","filter","action","name","actions","tableRowActions","positions","Array","isArray","position","includes","DocumentActionsMenu","label","id","defaultMessage","variant","EditAction","navigate","useNavigate","canRead","useDocumentRBAC","toggleNotification","useNotification","query","useQueryParams","disabled","icon","StyledPencil","onClick","console","error","message","type","pathname","search","stringify","styled","Pencil","OpenInNewTabAction","href","useHref","StyledExternalLink","window","open","ExternalLink","CloneAction","canCreate","autoClone","useDocumentActions","prohibitedFields","setProhibitedFields","React","useState","StyledDuplicate","res","sourceId","locale","i18n","data","isBaseQueryError","details","dialog","title","content","AutoCloneFailureModalBody","footer","onClose","_jsxs","Modal","Footer","Button","LinkButton","tag","NavLink","to","Duplicate","DEFAULT_TABLE_ROW_ACTIONS"],"mappings":"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"}
1
+ {"version":3,"file":"TableActions.mjs","sources":["../../../../../admin/src/pages/ListView/components/TableActions.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n DescriptionComponentRenderer,\n useNotification,\n useStrapiApp,\n useQueryParams,\n} from '@strapi/admin/strapi-admin';\nimport { Button, LinkButton, Modal } from '@strapi/design-system';\nimport { Duplicate, ExternalLink, Pencil } from '@strapi/icons';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useHref, useNavigate } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { useDocumentRBAC } from '../../../features/DocumentRBAC';\nimport { Document, useDoc } from '../../../hooks/useDocument';\nimport { useDocumentActions } from '../../../hooks/useDocumentActions';\nimport { isBaseQueryError } from '../../../utils/api';\nimport { DocumentActionsMenu } from '../../EditView/components/DocumentActions';\n\nimport { AutoCloneFailureModalBody } from './AutoCloneFailureModal';\nimport { MoveToBottomAction, MoveToTopAction } from './CustomOrder';\n\nimport type { ProhibitedCloningField } from '../../../../../shared/contracts/collection-types';\nimport type {\n ContentManagerPlugin,\n DocumentActionComponent,\n DocumentActionProps,\n} from '../../../content-manager';\n\n/* -------------------------------------------------------------------------------------------------\n * TableActions\n * -----------------------------------------------------------------------------------------------*/\n\ninterface TableActionsProps {\n document: Document;\n}\n\nconst TableActions = ({ document }: TableActionsProps) => {\n const { formatMessage } = useIntl();\n const { model, collectionType } = useDoc();\n const plugins = useStrapiApp('TableActions', (state) => state.plugins);\n\n const props: DocumentActionProps = {\n activeTab: null,\n model,\n documentId: document.documentId,\n collectionType,\n document,\n };\n\n return (\n <DescriptionComponentRenderer\n props={props}\n descriptions={(plugins['content-manager'].apis as ContentManagerPlugin['config']['apis'])\n .getDocumentActions('table-row')\n // We explicitly remove the PublishAction from description so we never render it and we don't make unnecessary requests.\n .filter((action) => action.name !== 'PublishAction')}\n >\n {(actions) => {\n const tableRowActions = actions.filter((action) => {\n const positions = Array.isArray(action.position) ? action.position : [action.position];\n return positions.includes('table-row');\n });\n\n return (\n <DocumentActionsMenu\n actions={tableRowActions}\n label={formatMessage({\n id: 'content-manager.containers.list.table.row-actions',\n defaultMessage: 'Row actions',\n })}\n variant=\"ghost\"\n />\n );\n }}\n </DescriptionComponentRenderer>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * TableActionComponents\n * -----------------------------------------------------------------------------------------------*/\n\nconst EditAction: DocumentActionComponent = ({ documentId }) => {\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const { canRead } = useDocumentRBAC('EditAction', ({ canRead }) => ({ canRead }));\n const { toggleNotification } = useNotification();\n const [{ query }] = useQueryParams<{ plugins?: object }>();\n\n return {\n disabled: !canRead,\n icon: <StyledPencil />,\n label: formatMessage({\n id: 'content-manager.actions.edit.label',\n defaultMessage: 'Edit',\n }),\n position: 'table-row',\n onClick: async () => {\n if (!documentId) {\n console.error(\n \"You're trying to edit a document without an id, this is likely a bug with Strapi. Please open an issue.\"\n );\n\n toggleNotification({\n message: formatMessage({\n id: 'content-manager.actions.edit.error',\n defaultMessage: 'An error occurred while trying to edit the document.',\n }),\n type: 'danger',\n });\n\n return;\n }\n\n navigate({\n pathname: documentId,\n search: stringify({\n plugins: query.plugins,\n }),\n });\n },\n };\n};\n\nEditAction.type = 'edit';\nEditAction.position = 'table-row';\n\n/**\n * Because the icon system is completely broken, we have to do\n * this to remove the fill from the cog.\n */\nconst StyledPencil = styled(Pencil)`\n path {\n fill: currentColor;\n }\n`;\n\nconst OpenInNewTabAction: DocumentActionComponent = ({ documentId }) => {\n const { formatMessage } = useIntl();\n const { canRead } = useDocumentRBAC('OpenInNewTabAction', ({ canRead }) => ({ canRead }));\n const [{ query }] = useQueryParams<{ plugins?: object }>();\n\n // Resolve the entry's absolute URL (incl. router basename) so we can open it\n // in a real new browser tab. The primary list-view cell is also a link, this\n // gives the same affordance an explicit, discoverable menu entry.\n const href = useHref({\n pathname: documentId ?? '',\n search: stringify({ plugins: query.plugins }),\n });\n\n return {\n disabled: !canRead || !documentId,\n icon: <StyledExternalLink />,\n label: formatMessage({\n id: 'content-manager.actions.open-in-new-tab.label',\n defaultMessage: 'Open in new tab',\n }),\n position: 'table-row',\n onClick: () => {\n window.open(href, '_blank', 'noopener,noreferrer');\n },\n };\n};\n\n// No `type` is set: it's an optional discriminator constrained to a known union\n// and this action is identified by its component name instead.\nOpenInNewTabAction.position = 'table-row';\n\nconst StyledExternalLink = styled(ExternalLink)`\n path {\n fill: currentColor;\n }\n`;\n\nconst CloneAction: DocumentActionComponent = ({ model, documentId }) => {\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const { canCreate } = useDocumentRBAC('CloneAction', ({ canCreate }) => ({ canCreate }));\n const { toggleNotification } = useNotification();\n const { autoClone } = useDocumentActions();\n const [prohibitedFields, setProhibitedFields] = React.useState<ProhibitedCloningField[]>([]);\n const [{ query }] = useQueryParams<{ plugins?: { i18n?: { locale?: string } } }>();\n\n return {\n disabled: !canCreate,\n icon: <StyledDuplicate />,\n label: formatMessage({\n id: 'content-manager.actions.clone.label',\n defaultMessage: 'Duplicate',\n }),\n position: 'table-row',\n onClick: async () => {\n if (!documentId) {\n console.error(\n \"You're trying to clone a document in the table without an id, this is likely a bug with Strapi. Please open an issue.\"\n );\n\n toggleNotification({\n message: formatMessage({\n id: 'content-manager.actions.clone.error',\n defaultMessage: 'An error occurred while trying to clone the document.',\n }),\n type: 'danger',\n });\n\n return;\n }\n\n const res = await autoClone({\n model,\n sourceId: documentId,\n locale: query.plugins?.i18n?.locale,\n });\n\n if ('data' in res) {\n navigate({\n pathname: res.data.documentId,\n search: stringify({\n plugins: query.plugins,\n }),\n });\n\n /**\n * We return true because we don't need to show a modal anymore.\n */\n return true;\n }\n\n if (\n isBaseQueryError(res.error) &&\n res.error.details &&\n typeof res.error.details === 'object' &&\n 'prohibitedFields' in res.error.details &&\n Array.isArray(res.error.details.prohibitedFields)\n ) {\n const prohibitedFields = res.error.details.prohibitedFields as ProhibitedCloningField[];\n\n setProhibitedFields(prohibitedFields);\n }\n },\n dialog: {\n type: 'modal',\n title: formatMessage({\n id: 'content-manager.containers.list.autoCloneModal.header',\n defaultMessage: 'Duplicate',\n }),\n content: <AutoCloneFailureModalBody prohibitedFields={prohibitedFields} />,\n footer: ({ onClose }) => {\n return (\n <Modal.Footer>\n <Button onClick={onClose} variant=\"tertiary\">\n {formatMessage({\n id: 'cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n <LinkButton\n tag={NavLink}\n to={{\n pathname: `clone/${documentId}`,\n search: stringify({\n plugins: query.plugins,\n }),\n }}\n >\n {formatMessage({\n id: 'content-manager.containers.list.autoCloneModal.create',\n defaultMessage: 'Create',\n })}\n </LinkButton>\n </Modal.Footer>\n );\n },\n },\n };\n};\n\nCloneAction.type = 'clone';\nCloneAction.position = 'table-row';\n\n/**\n * Because the icon system is completely broken, we have to do\n * this to remove the fill from the cog.\n */\nconst StyledDuplicate = styled(Duplicate)`\n path {\n fill: currentColor;\n }\n`;\n\nconst DEFAULT_TABLE_ROW_ACTIONS = [\n EditAction,\n OpenInNewTabAction,\n CloneAction,\n MoveToTopAction,\n MoveToBottomAction,\n];\n\nexport { TableActions, DEFAULT_TABLE_ROW_ACTIONS };\n"],"names":["TableActions","document","formatMessage","useIntl","model","collectionType","useDoc","plugins","useStrapiApp","state","props","activeTab","documentId","_jsx","DescriptionComponentRenderer","descriptions","apis","getDocumentActions","filter","action","name","actions","tableRowActions","positions","Array","isArray","position","includes","DocumentActionsMenu","label","id","defaultMessage","variant","EditAction","navigate","useNavigate","canRead","useDocumentRBAC","toggleNotification","useNotification","query","useQueryParams","disabled","icon","StyledPencil","onClick","console","error","message","type","pathname","search","stringify","styled","Pencil","OpenInNewTabAction","href","useHref","StyledExternalLink","window","open","ExternalLink","CloneAction","canCreate","autoClone","useDocumentActions","prohibitedFields","setProhibitedFields","React","useState","StyledDuplicate","res","sourceId","locale","i18n","data","isBaseQueryError","details","dialog","title","content","AutoCloneFailureModalBody","footer","onClose","_jsxs","Modal","Footer","Button","LinkButton","tag","NavLink","to","Duplicate","DEFAULT_TABLE_ROW_ACTIONS","MoveToTopAction","MoveToBottomAction"],"mappings":"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"}
@@ -8,6 +8,7 @@ var qs = require('qs');
8
8
  var reactIntl = require('react-intl');
9
9
  var reactRouterDom = require('react-router-dom');
10
10
  var preview = require('../services/preview.js');
11
+ var getPreviewUrlStatus = require('../utils/getPreviewUrlStatus.js');
11
12
 
12
13
  function _interopNamespace(e) {
13
14
  if (e && e.__esModule) return e;
@@ -63,7 +64,7 @@ const PreviewSidePanel = ({ model, documentId, document })=>{
63
64
  query: {
64
65
  documentId,
65
66
  locale: document?.locale,
66
- status: document?.status
67
+ status: getPreviewUrlStatus.getPreviewUrlStatus(document?.status)
67
68
  }
68
69
  }, // Don't bother making the request since we won't show any UI
69
70
  {
@@ -1 +1 @@
1
- {"version":3,"file":"PreviewSidePanel.js","sources":["../../../../admin/src/preview/components/PreviewSidePanel.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useQueryParams, useTracking, useForm } from '@strapi/admin/strapi-admin';\nimport { Box, Button, Tooltip, type TooltipProps } from '@strapi/design-system';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { Link, useLocation } from 'react-router-dom';\n\nimport { useGetPreviewUrlQuery } from '../services/preview';\n\nimport type { PanelComponent } from '@strapi/content-manager/strapi-admin';\nimport type { UID } from '@strapi/types';\n\ninterface ConditionalTooltipProps {\n isShown: boolean;\n label: TooltipProps['label'];\n children: React.ReactNode;\n}\n\n/**\n * Always keeps the Tooltip (and therefore the children subtree) mounted: conditionally wrapping\n * would remount the child button whenever `isShown` flips, and a click landing during that swap\n * is silently lost. When the tooltip must not show, it is force-closed via the controlled `open`\n * prop instead of being removed from the tree.\n */\nconst ConditionalTooltip = ({ isShown, label, children }: ConditionalTooltipProps) => {\n return (\n <Tooltip label={label} open={isShown ? undefined : false}>\n {children}\n </Tooltip>\n );\n};\n\nconst PreviewSidePanel: PanelComponent = ({ model, documentId, document }) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const { pathname } = useLocation();\n const [{ query }] = useQueryParams();\n const isModified = useForm('PreviewSidePanel', (state) => state.modified);\n const isUnsaved = Boolean(!document || !document.id);\n\n const title = formatMessage({\n id: 'content-manager.preview.panel.title',\n defaultMessage: 'Preview',\n });\n\n /**\n * The preview URL isn't used in this component, we just fetch it to know if preview is enabled\n * for the content type. If it's not, the panel is not displayed. If it is, we display a link to\n * /preview, and the URL will already be loaded in the RTK query cache.\n */\n const { data, error } = useGetPreviewUrlQuery(\n {\n params: {\n contentType: model as UID.ContentType,\n },\n query: {\n documentId,\n locale: document?.locale,\n status: document?.status,\n },\n },\n // Don't bother making the request since we won't show any UI\n { skip: isUnsaved }\n );\n\n /**\n * The query args above change while the document settles (locale/status resolve after load and\n * on save/publish), and each change is a new cache entry with transiently empty data. Latch\n * enablement once a URL has been seen so the \"Open preview\" button doesn't unmount and remount\n * mid-interaction — a click landing during such a swap is silently lost.\n */\n const [isPreviewEnabled, setIsPreviewEnabled] = React.useState(false);\n const previewUrl = data?.data?.url;\n React.useEffect(() => {\n if (previewUrl) {\n setIsPreviewEnabled(true);\n }\n }, [previewUrl]);\n\n if (isUnsaved) {\n return null;\n }\n\n // Preview was not configured but not disabled either (otherwise it would be a success 204).\n // So we encourage the user to set it up.\n if (error && error.name === 'NotFoundError') {\n return {\n title,\n content: (\n <Button\n variant=\"tertiary\"\n tag={Link}\n to=\"https://docs.strapi.io/cms/features/preview\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n width=\"100%\"\n >\n {formatMessage({\n id: 'content-manager.preview.panel.button-configuration',\n defaultMessage: 'Set up preview',\n })}\n </Button>\n ),\n };\n }\n\n if (!isPreviewEnabled && (!data?.data?.url || error)) {\n return null;\n }\n\n const trackNavigation = () => {\n // Append /preview to the current URL\n const destinationPathname = pathname.replace(/\\/$/, '') + '/preview';\n trackUsage('willNavigate', { from: pathname, to: destinationPathname });\n };\n\n return {\n title,\n content: (\n <ConditionalTooltip\n label={formatMessage({\n id: 'content-manager.preview.panel.button-disabled-tooltip',\n defaultMessage: 'Please save to open the preview',\n })}\n isShown={isModified}\n >\n <Box cursor=\"not-allowed\" width=\"100%\">\n <Button\n variant=\"tertiary\"\n tag={Link}\n to={{ pathname: 'preview', search: stringify(query, { encode: false }) }}\n onClick={trackNavigation}\n width=\"100%\"\n disabled={isModified}\n pointerEvents={isModified ? 'none' : undefined}\n tabIndex={isModified ? -1 : undefined}\n >\n {formatMessage({\n id: 'content-manager.preview.panel.button',\n defaultMessage: 'Open preview',\n })}\n </Button>\n </Box>\n </ConditionalTooltip>\n ),\n };\n};\n\nexport { PreviewSidePanel };\n"],"names":["ConditionalTooltip","isShown","label","children","_jsx","Tooltip","open","undefined","PreviewSidePanel","model","documentId","document","formatMessage","useIntl","trackUsage","useTracking","pathname","useLocation","query","useQueryParams","isModified","useForm","state","modified","isUnsaved","Boolean","id","title","defaultMessage","data","error","useGetPreviewUrlQuery","params","contentType","locale","status","skip","isPreviewEnabled","setIsPreviewEnabled","React","useState","previewUrl","url","useEffect","name","content","Button","variant","tag","Link","to","target","rel","width","trackNavigation","destinationPathname","replace","from","Box","cursor","search","stringify","encode","onClick","disabled","pointerEvents","tabIndex"],"mappings":"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"}
1
+ {"version":3,"file":"PreviewSidePanel.js","sources":["../../../../admin/src/preview/components/PreviewSidePanel.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useQueryParams, useTracking, useForm } from '@strapi/admin/strapi-admin';\nimport { Box, Button, Tooltip, type TooltipProps } from '@strapi/design-system';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { Link, useLocation } from 'react-router-dom';\n\nimport { useGetPreviewUrlQuery } from '../services/preview';\nimport { getPreviewUrlStatus } from '../utils/getPreviewUrlStatus';\n\nimport type { PanelComponent } from '@strapi/content-manager/strapi-admin';\nimport type { UID } from '@strapi/types';\n\ninterface ConditionalTooltipProps {\n isShown: boolean;\n label: TooltipProps['label'];\n children: React.ReactNode;\n}\n\n/**\n * Always keeps the Tooltip (and therefore the children subtree) mounted: conditionally wrapping\n * would remount the child button whenever `isShown` flips, and a click landing during that swap\n * is silently lost. When the tooltip must not show, it is force-closed via the controlled `open`\n * prop instead of being removed from the tree.\n */\nconst ConditionalTooltip = ({ isShown, label, children }: ConditionalTooltipProps) => {\n return (\n <Tooltip label={label} open={isShown ? undefined : false}>\n {children}\n </Tooltip>\n );\n};\n\nconst PreviewSidePanel: PanelComponent = ({ model, documentId, document }) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const { pathname } = useLocation();\n const [{ query }] = useQueryParams();\n const isModified = useForm('PreviewSidePanel', (state) => state.modified);\n const isUnsaved = Boolean(!document || !document.id);\n\n const title = formatMessage({\n id: 'content-manager.preview.panel.title',\n defaultMessage: 'Preview',\n });\n\n /**\n * The preview URL isn't used in this component, we just fetch it to know if preview is enabled\n * for the content type. If it's not, the panel is not displayed. If it is, we display a link to\n * /preview, and the URL will already be loaded in the RTK query cache.\n */\n const { data, error } = useGetPreviewUrlQuery(\n {\n params: {\n contentType: model as UID.ContentType,\n },\n query: {\n documentId,\n locale: document?.locale,\n status: getPreviewUrlStatus(document?.status),\n },\n },\n // Don't bother making the request since we won't show any UI\n { skip: isUnsaved }\n );\n\n /**\n * The query args above change while the document settles (locale/status resolve after load and\n * on save/publish), and each change is a new cache entry with transiently empty data. Latch\n * enablement once a URL has been seen so the \"Open preview\" button doesn't unmount and remount\n * mid-interaction — a click landing during such a swap is silently lost.\n */\n const [isPreviewEnabled, setIsPreviewEnabled] = React.useState(false);\n const previewUrl = data?.data?.url;\n React.useEffect(() => {\n if (previewUrl) {\n setIsPreviewEnabled(true);\n }\n }, [previewUrl]);\n\n if (isUnsaved) {\n return null;\n }\n\n // Preview was not configured but not disabled either (otherwise it would be a success 204).\n // So we encourage the user to set it up.\n if (error && error.name === 'NotFoundError') {\n return {\n title,\n content: (\n <Button\n variant=\"tertiary\"\n tag={Link}\n to=\"https://docs.strapi.io/cms/features/preview\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n width=\"100%\"\n >\n {formatMessage({\n id: 'content-manager.preview.panel.button-configuration',\n defaultMessage: 'Set up preview',\n })}\n </Button>\n ),\n };\n }\n\n if (!isPreviewEnabled && (!data?.data?.url || error)) {\n return null;\n }\n\n const trackNavigation = () => {\n // Append /preview to the current URL\n const destinationPathname = pathname.replace(/\\/$/, '') + '/preview';\n trackUsage('willNavigate', { from: pathname, to: destinationPathname });\n };\n\n return {\n title,\n content: (\n <ConditionalTooltip\n label={formatMessage({\n id: 'content-manager.preview.panel.button-disabled-tooltip',\n defaultMessage: 'Please save to open the preview',\n })}\n isShown={isModified}\n >\n <Box cursor=\"not-allowed\" width=\"100%\">\n <Button\n variant=\"tertiary\"\n tag={Link}\n to={{ pathname: 'preview', search: stringify(query, { encode: false }) }}\n onClick={trackNavigation}\n width=\"100%\"\n disabled={isModified}\n pointerEvents={isModified ? 'none' : undefined}\n tabIndex={isModified ? -1 : undefined}\n >\n {formatMessage({\n id: 'content-manager.preview.panel.button',\n defaultMessage: 'Open preview',\n })}\n </Button>\n </Box>\n </ConditionalTooltip>\n ),\n };\n};\n\nexport { PreviewSidePanel };\n"],"names":["ConditionalTooltip","isShown","label","children","_jsx","Tooltip","open","undefined","PreviewSidePanel","model","documentId","document","formatMessage","useIntl","trackUsage","useTracking","pathname","useLocation","query","useQueryParams","isModified","useForm","state","modified","isUnsaved","Boolean","id","title","defaultMessage","data","error","useGetPreviewUrlQuery","params","contentType","locale","status","getPreviewUrlStatus","skip","isPreviewEnabled","setIsPreviewEnabled","React","useState","previewUrl","url","useEffect","name","content","Button","variant","tag","Link","to","target","rel","width","trackNavigation","destinationPathname","replace","from","Box","cursor","search","stringify","encode","onClick","disabled","pointerEvents","tabIndex"],"mappings":"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"}
@@ -6,6 +6,7 @@ import { stringify } from 'qs';
6
6
  import { useIntl } from 'react-intl';
7
7
  import { useLocation, Link } from 'react-router-dom';
8
8
  import { useGetPreviewUrlQuery } from '../services/preview.mjs';
9
+ import { getPreviewUrlStatus } from '../utils/getPreviewUrlStatus.mjs';
9
10
 
10
11
  /**
11
12
  * Always keeps the Tooltip (and therefore the children subtree) mounted: conditionally wrapping
@@ -41,7 +42,7 @@ const PreviewSidePanel = ({ model, documentId, document })=>{
41
42
  query: {
42
43
  documentId,
43
44
  locale: document?.locale,
44
- status: document?.status
45
+ status: getPreviewUrlStatus(document?.status)
45
46
  }
46
47
  }, // Don't bother making the request since we won't show any UI
47
48
  {
@@ -1 +1 @@
1
- {"version":3,"file":"PreviewSidePanel.mjs","sources":["../../../../admin/src/preview/components/PreviewSidePanel.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useQueryParams, useTracking, useForm } from '@strapi/admin/strapi-admin';\nimport { Box, Button, Tooltip, type TooltipProps } from '@strapi/design-system';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { Link, useLocation } from 'react-router-dom';\n\nimport { useGetPreviewUrlQuery } from '../services/preview';\n\nimport type { PanelComponent } from '@strapi/content-manager/strapi-admin';\nimport type { UID } from '@strapi/types';\n\ninterface ConditionalTooltipProps {\n isShown: boolean;\n label: TooltipProps['label'];\n children: React.ReactNode;\n}\n\n/**\n * Always keeps the Tooltip (and therefore the children subtree) mounted: conditionally wrapping\n * would remount the child button whenever `isShown` flips, and a click landing during that swap\n * is silently lost. When the tooltip must not show, it is force-closed via the controlled `open`\n * prop instead of being removed from the tree.\n */\nconst ConditionalTooltip = ({ isShown, label, children }: ConditionalTooltipProps) => {\n return (\n <Tooltip label={label} open={isShown ? undefined : false}>\n {children}\n </Tooltip>\n );\n};\n\nconst PreviewSidePanel: PanelComponent = ({ model, documentId, document }) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const { pathname } = useLocation();\n const [{ query }] = useQueryParams();\n const isModified = useForm('PreviewSidePanel', (state) => state.modified);\n const isUnsaved = Boolean(!document || !document.id);\n\n const title = formatMessage({\n id: 'content-manager.preview.panel.title',\n defaultMessage: 'Preview',\n });\n\n /**\n * The preview URL isn't used in this component, we just fetch it to know if preview is enabled\n * for the content type. If it's not, the panel is not displayed. If it is, we display a link to\n * /preview, and the URL will already be loaded in the RTK query cache.\n */\n const { data, error } = useGetPreviewUrlQuery(\n {\n params: {\n contentType: model as UID.ContentType,\n },\n query: {\n documentId,\n locale: document?.locale,\n status: document?.status,\n },\n },\n // Don't bother making the request since we won't show any UI\n { skip: isUnsaved }\n );\n\n /**\n * The query args above change while the document settles (locale/status resolve after load and\n * on save/publish), and each change is a new cache entry with transiently empty data. Latch\n * enablement once a URL has been seen so the \"Open preview\" button doesn't unmount and remount\n * mid-interaction — a click landing during such a swap is silently lost.\n */\n const [isPreviewEnabled, setIsPreviewEnabled] = React.useState(false);\n const previewUrl = data?.data?.url;\n React.useEffect(() => {\n if (previewUrl) {\n setIsPreviewEnabled(true);\n }\n }, [previewUrl]);\n\n if (isUnsaved) {\n return null;\n }\n\n // Preview was not configured but not disabled either (otherwise it would be a success 204).\n // So we encourage the user to set it up.\n if (error && error.name === 'NotFoundError') {\n return {\n title,\n content: (\n <Button\n variant=\"tertiary\"\n tag={Link}\n to=\"https://docs.strapi.io/cms/features/preview\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n width=\"100%\"\n >\n {formatMessage({\n id: 'content-manager.preview.panel.button-configuration',\n defaultMessage: 'Set up preview',\n })}\n </Button>\n ),\n };\n }\n\n if (!isPreviewEnabled && (!data?.data?.url || error)) {\n return null;\n }\n\n const trackNavigation = () => {\n // Append /preview to the current URL\n const destinationPathname = pathname.replace(/\\/$/, '') + '/preview';\n trackUsage('willNavigate', { from: pathname, to: destinationPathname });\n };\n\n return {\n title,\n content: (\n <ConditionalTooltip\n label={formatMessage({\n id: 'content-manager.preview.panel.button-disabled-tooltip',\n defaultMessage: 'Please save to open the preview',\n })}\n isShown={isModified}\n >\n <Box cursor=\"not-allowed\" width=\"100%\">\n <Button\n variant=\"tertiary\"\n tag={Link}\n to={{ pathname: 'preview', search: stringify(query, { encode: false }) }}\n onClick={trackNavigation}\n width=\"100%\"\n disabled={isModified}\n pointerEvents={isModified ? 'none' : undefined}\n tabIndex={isModified ? -1 : undefined}\n >\n {formatMessage({\n id: 'content-manager.preview.panel.button',\n defaultMessage: 'Open preview',\n })}\n </Button>\n </Box>\n </ConditionalTooltip>\n ),\n };\n};\n\nexport { PreviewSidePanel };\n"],"names":["ConditionalTooltip","isShown","label","children","_jsx","Tooltip","open","undefined","PreviewSidePanel","model","documentId","document","formatMessage","useIntl","trackUsage","useTracking","pathname","useLocation","query","useQueryParams","isModified","useForm","state","modified","isUnsaved","Boolean","id","title","defaultMessage","data","error","useGetPreviewUrlQuery","params","contentType","locale","status","skip","isPreviewEnabled","setIsPreviewEnabled","React","useState","previewUrl","url","useEffect","name","content","Button","variant","tag","Link","to","target","rel","width","trackNavigation","destinationPathname","replace","from","Box","cursor","search","stringify","encode","onClick","disabled","pointerEvents","tabIndex"],"mappings":"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"}
1
+ {"version":3,"file":"PreviewSidePanel.mjs","sources":["../../../../admin/src/preview/components/PreviewSidePanel.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useQueryParams, useTracking, useForm } from '@strapi/admin/strapi-admin';\nimport { Box, Button, Tooltip, type TooltipProps } from '@strapi/design-system';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { Link, useLocation } from 'react-router-dom';\n\nimport { useGetPreviewUrlQuery } from '../services/preview';\nimport { getPreviewUrlStatus } from '../utils/getPreviewUrlStatus';\n\nimport type { PanelComponent } from '@strapi/content-manager/strapi-admin';\nimport type { UID } from '@strapi/types';\n\ninterface ConditionalTooltipProps {\n isShown: boolean;\n label: TooltipProps['label'];\n children: React.ReactNode;\n}\n\n/**\n * Always keeps the Tooltip (and therefore the children subtree) mounted: conditionally wrapping\n * would remount the child button whenever `isShown` flips, and a click landing during that swap\n * is silently lost. When the tooltip must not show, it is force-closed via the controlled `open`\n * prop instead of being removed from the tree.\n */\nconst ConditionalTooltip = ({ isShown, label, children }: ConditionalTooltipProps) => {\n return (\n <Tooltip label={label} open={isShown ? undefined : false}>\n {children}\n </Tooltip>\n );\n};\n\nconst PreviewSidePanel: PanelComponent = ({ model, documentId, document }) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const { pathname } = useLocation();\n const [{ query }] = useQueryParams();\n const isModified = useForm('PreviewSidePanel', (state) => state.modified);\n const isUnsaved = Boolean(!document || !document.id);\n\n const title = formatMessage({\n id: 'content-manager.preview.panel.title',\n defaultMessage: 'Preview',\n });\n\n /**\n * The preview URL isn't used in this component, we just fetch it to know if preview is enabled\n * for the content type. If it's not, the panel is not displayed. If it is, we display a link to\n * /preview, and the URL will already be loaded in the RTK query cache.\n */\n const { data, error } = useGetPreviewUrlQuery(\n {\n params: {\n contentType: model as UID.ContentType,\n },\n query: {\n documentId,\n locale: document?.locale,\n status: getPreviewUrlStatus(document?.status),\n },\n },\n // Don't bother making the request since we won't show any UI\n { skip: isUnsaved }\n );\n\n /**\n * The query args above change while the document settles (locale/status resolve after load and\n * on save/publish), and each change is a new cache entry with transiently empty data. Latch\n * enablement once a URL has been seen so the \"Open preview\" button doesn't unmount and remount\n * mid-interaction — a click landing during such a swap is silently lost.\n */\n const [isPreviewEnabled, setIsPreviewEnabled] = React.useState(false);\n const previewUrl = data?.data?.url;\n React.useEffect(() => {\n if (previewUrl) {\n setIsPreviewEnabled(true);\n }\n }, [previewUrl]);\n\n if (isUnsaved) {\n return null;\n }\n\n // Preview was not configured but not disabled either (otherwise it would be a success 204).\n // So we encourage the user to set it up.\n if (error && error.name === 'NotFoundError') {\n return {\n title,\n content: (\n <Button\n variant=\"tertiary\"\n tag={Link}\n to=\"https://docs.strapi.io/cms/features/preview\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n width=\"100%\"\n >\n {formatMessage({\n id: 'content-manager.preview.panel.button-configuration',\n defaultMessage: 'Set up preview',\n })}\n </Button>\n ),\n };\n }\n\n if (!isPreviewEnabled && (!data?.data?.url || error)) {\n return null;\n }\n\n const trackNavigation = () => {\n // Append /preview to the current URL\n const destinationPathname = pathname.replace(/\\/$/, '') + '/preview';\n trackUsage('willNavigate', { from: pathname, to: destinationPathname });\n };\n\n return {\n title,\n content: (\n <ConditionalTooltip\n label={formatMessage({\n id: 'content-manager.preview.panel.button-disabled-tooltip',\n defaultMessage: 'Please save to open the preview',\n })}\n isShown={isModified}\n >\n <Box cursor=\"not-allowed\" width=\"100%\">\n <Button\n variant=\"tertiary\"\n tag={Link}\n to={{ pathname: 'preview', search: stringify(query, { encode: false }) }}\n onClick={trackNavigation}\n width=\"100%\"\n disabled={isModified}\n pointerEvents={isModified ? 'none' : undefined}\n tabIndex={isModified ? -1 : undefined}\n >\n {formatMessage({\n id: 'content-manager.preview.panel.button',\n defaultMessage: 'Open preview',\n })}\n </Button>\n </Box>\n </ConditionalTooltip>\n ),\n };\n};\n\nexport { PreviewSidePanel };\n"],"names":["ConditionalTooltip","isShown","label","children","_jsx","Tooltip","open","undefined","PreviewSidePanel","model","documentId","document","formatMessage","useIntl","trackUsage","useTracking","pathname","useLocation","query","useQueryParams","isModified","useForm","state","modified","isUnsaved","Boolean","id","title","defaultMessage","data","error","useGetPreviewUrlQuery","params","contentType","locale","status","getPreviewUrlStatus","skip","isPreviewEnabled","setIsPreviewEnabled","React","useState","previewUrl","url","useEffect","name","content","Button","variant","tag","Link","to","target","rel","width","trackNavigation","destinationPathname","replace","from","Box","cursor","search","stringify","encode","onClick","disabled","pointerEvents","tabIndex"],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * The preview URL endpoint only accepts the draft and published statuses.
5
+ * A modified document is a draft with changes that are not published yet, so its preview is the draft.
6
+ */ function getPreviewUrlStatus(status) {
7
+ if (status === 'modified') {
8
+ return 'draft';
9
+ }
10
+ if (status === 'draft' || status === 'published') {
11
+ return status;
12
+ }
13
+ return undefined;
14
+ }
15
+
16
+ exports.getPreviewUrlStatus = getPreviewUrlStatus;
17
+ //# sourceMappingURL=getPreviewUrlStatus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getPreviewUrlStatus.js","sources":["../../../../admin/src/preview/utils/getPreviewUrlStatus.ts"],"sourcesContent":["import type { GetPreviewUrl } from '../../../../shared/contracts/preview';\n\n/**\n * The preview URL endpoint only accepts the draft and published statuses.\n * A modified document is a draft with changes that are not published yet, so its preview is the draft.\n */\nexport function getPreviewUrlStatus(\n status: string | undefined\n): GetPreviewUrl.Request['query']['status'] {\n if (status === 'modified') {\n return 'draft';\n }\n\n if (status === 'draft' || status === 'published') {\n return status;\n }\n\n return undefined;\n}\n"],"names":["getPreviewUrlStatus","status","undefined"],"mappings":";;AAEA;;;IAIO,SAASA,mBAAAA,CACdC,MAA0B,EAAA;AAE1B,IAAA,IAAIA,WAAW,UAAA,EAAY;QACzB,OAAO,OAAA;AACT,IAAA;IAEA,IAAIA,MAAAA,KAAW,OAAA,IAAWA,MAAAA,KAAW,WAAA,EAAa;QAChD,OAAOA,MAAAA;AACT,IAAA;IAEA,OAAOC,SAAAA;AACT;;;;"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * The preview URL endpoint only accepts the draft and published statuses.
3
+ * A modified document is a draft with changes that are not published yet, so its preview is the draft.
4
+ */ function getPreviewUrlStatus(status) {
5
+ if (status === 'modified') {
6
+ return 'draft';
7
+ }
8
+ if (status === 'draft' || status === 'published') {
9
+ return status;
10
+ }
11
+ return undefined;
12
+ }
13
+
14
+ export { getPreviewUrlStatus };
15
+ //# sourceMappingURL=getPreviewUrlStatus.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getPreviewUrlStatus.mjs","sources":["../../../../admin/src/preview/utils/getPreviewUrlStatus.ts"],"sourcesContent":["import type { GetPreviewUrl } from '../../../../shared/contracts/preview';\n\n/**\n * The preview URL endpoint only accepts the draft and published statuses.\n * A modified document is a draft with changes that are not published yet, so its preview is the draft.\n */\nexport function getPreviewUrlStatus(\n status: string | undefined\n): GetPreviewUrl.Request['query']['status'] {\n if (status === 'modified') {\n return 'draft';\n }\n\n if (status === 'draft' || status === 'published') {\n return status;\n }\n\n return undefined;\n}\n"],"names":["getPreviewUrlStatus","status","undefined"],"mappings":"AAEA;;;IAIO,SAASA,mBAAAA,CACdC,MAA0B,EAAA;AAE1B,IAAA,IAAIA,WAAW,UAAA,EAAY;QACzB,OAAO,OAAA;AACT,IAAA;IAEA,IAAIA,MAAAA,KAAW,OAAA,IAAWA,MAAAA,KAAW,WAAA,EAAa;QAChD,OAAOA,MAAAA;AACT,IAAA;IAEA,OAAOC,SAAAA;AACT;;;;"}
@@ -200,6 +200,25 @@ const documentApi = api.contentManagerApi.injectEndpoints({
200
200
  ];
201
201
  }
202
202
  }),
203
+ /**
204
+ * Places a document right before or after another one in the custom order
205
+ * of its collection type.
206
+ */ moveDocument: builder.mutation({
207
+ query: ({ model, id, body, params })=>({
208
+ url: `/content-manager/collection-types/${model}/${id}/actions/move`,
209
+ method: 'POST',
210
+ data: body,
211
+ config: {
212
+ params
213
+ }
214
+ }),
215
+ invalidatesTags: (_result, error, { model })=>error ? [] : [
216
+ {
217
+ type: 'Document',
218
+ id: `${model}_LIST`
219
+ }
220
+ ]
221
+ }),
203
222
  getDraftRelationCount: builder.query({
204
223
  query: ({ collectionType, model, documentId, params })=>({
205
224
  url: documentId && collectionType !== collections.SINGLE_TYPES ? `/content-manager/${collectionType}/${model}/${documentId}/actions/countDraftRelations` : `/content-manager/${collectionType}/${model}/actions/countDraftRelations`,
@@ -435,7 +454,7 @@ const documentApi = api.contentManagerApi.injectEndpoints({
435
454
  })
436
455
  })
437
456
  });
438
- const { useAutoCloneDocumentMutation, useCloneDocumentMutation, useCreateDocumentMutation, useDeleteDocumentMutation, useDeleteManyDocumentsMutation, useDiscardDocumentMutation, useGetAllDocumentsQuery, useGetDocumentsForValidationQuery, useLazyGetDocumentQuery, useGetDocumentQuery, useGetDraftRelationCountQuery, useLazyGetDraftRelationCountQuery, useGetManyDraftRelationCountQuery, usePublishDocumentMutation, usePublishManyDocumentsMutation, useUpdateDocumentMutation, useUnpublishDocumentMutation, useUnpublishManyDocumentsMutation } = documentApi;
457
+ const { useAutoCloneDocumentMutation, useCloneDocumentMutation, useCreateDocumentMutation, useDeleteDocumentMutation, useDeleteManyDocumentsMutation, useDiscardDocumentMutation, useGetAllDocumentsQuery, useLazyGetAllDocumentsQuery, useGetDocumentsForValidationQuery, useLazyGetDocumentQuery, useGetDocumentQuery, useGetDraftRelationCountQuery, useLazyGetDraftRelationCountQuery, useGetManyDraftRelationCountQuery, useMoveDocumentMutation, usePublishDocumentMutation, usePublishManyDocumentsMutation, useUpdateDocumentMutation, useUnpublishDocumentMutation, useUnpublishManyDocumentsMutation } = documentApi;
439
458
 
440
459
  exports.useAutoCloneDocumentMutation = useAutoCloneDocumentMutation;
441
460
  exports.useCloneDocumentMutation = useCloneDocumentMutation;
@@ -448,8 +467,10 @@ exports.useGetDocumentQuery = useGetDocumentQuery;
448
467
  exports.useGetDocumentsForValidationQuery = useGetDocumentsForValidationQuery;
449
468
  exports.useGetDraftRelationCountQuery = useGetDraftRelationCountQuery;
450
469
  exports.useGetManyDraftRelationCountQuery = useGetManyDraftRelationCountQuery;
470
+ exports.useLazyGetAllDocumentsQuery = useLazyGetAllDocumentsQuery;
451
471
  exports.useLazyGetDocumentQuery = useLazyGetDocumentQuery;
452
472
  exports.useLazyGetDraftRelationCountQuery = useLazyGetDraftRelationCountQuery;
473
+ exports.useMoveDocumentMutation = useMoveDocumentMutation;
453
474
  exports.usePublishDocumentMutation = usePublishDocumentMutation;
454
475
  exports.usePublishManyDocumentsMutation = usePublishManyDocumentsMutation;
455
476
  exports.useUnpublishDocumentMutation = useUnpublishDocumentMutation;