@strapi/content-manager 0.0.0-experimental.82fd5bc51d11a2da848fc7fd1cc573f8ea0a6535 → 0.0.0-experimental.8a51c4efa09335588f9c6bf9abb944755c850b31

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 (257) hide show
  1. package/dist/admin/components/ConfigurationForm/Fields.js +300 -204
  2. package/dist/admin/components/ConfigurationForm/Fields.js.map +1 -1
  3. package/dist/admin/components/ConfigurationForm/Fields.mjs +304 -209
  4. package/dist/admin/components/ConfigurationForm/Fields.mjs.map +1 -1
  5. package/dist/admin/components/LeftMenu.js +34 -30
  6. package/dist/admin/components/LeftMenu.js.map +1 -1
  7. package/dist/admin/components/LeftMenu.mjs +36 -32
  8. package/dist/admin/components/LeftMenu.mjs.map +1 -1
  9. package/dist/admin/components/Widgets.js +161 -0
  10. package/dist/admin/components/Widgets.js.map +1 -0
  11. package/dist/admin/components/Widgets.mjs +158 -0
  12. package/dist/admin/components/Widgets.mjs.map +1 -0
  13. package/dist/admin/history/components/VersionHeader.js +6 -0
  14. package/dist/admin/history/components/VersionHeader.js.map +1 -1
  15. package/dist/admin/history/components/VersionHeader.mjs +7 -1
  16. package/dist/admin/history/components/VersionHeader.mjs.map +1 -1
  17. package/dist/admin/hooks/useDocumentActions.js +12 -4
  18. package/dist/admin/hooks/useDocumentActions.js.map +1 -1
  19. package/dist/admin/hooks/useDocumentActions.mjs +12 -4
  20. package/dist/admin/hooks/useDocumentActions.mjs.map +1 -1
  21. package/dist/admin/hooks/useDocumentContext.js.map +1 -1
  22. package/dist/admin/hooks/useDocumentContext.mjs.map +1 -1
  23. package/dist/admin/index.js +42 -5
  24. package/dist/admin/index.js.map +1 -1
  25. package/dist/admin/index.mjs +42 -3
  26. package/dist/admin/index.mjs.map +1 -1
  27. package/dist/admin/pages/EditView/EditViewPage.js +81 -74
  28. package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
  29. package/dist/admin/pages/EditView/EditViewPage.mjs +82 -75
  30. package/dist/admin/pages/EditView/EditViewPage.mjs.map +1 -1
  31. package/dist/admin/pages/EditView/components/DocumentActions.js +235 -71
  32. package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
  33. package/dist/admin/pages/EditView/components/DocumentActions.mjs +238 -74
  34. package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
  35. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js +12 -15
  36. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js.map +1 -1
  37. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs +12 -15
  38. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs.map +1 -1
  39. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js +61 -26
  40. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js.map +1 -1
  41. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs +63 -28
  42. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs.map +1 -1
  43. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js +21 -35
  44. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js.map +1 -1
  45. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs +21 -35
  46. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs.map +1 -1
  47. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js +46 -95
  48. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js.map +1 -1
  49. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs +48 -78
  50. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs.map +1 -1
  51. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +2 -0
  52. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
  53. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs +2 -0
  54. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
  55. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +2 -2
  56. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
  57. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +3 -3
  58. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
  59. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +128 -55
  60. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -1
  61. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs +128 -55
  62. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs.map +1 -1
  63. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +120 -32
  64. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
  65. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +124 -36
  66. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
  67. package/dist/admin/pages/EditView/components/FormInputs/UID.js +4 -2
  68. package/dist/admin/pages/EditView/components/FormInputs/UID.js.map +1 -1
  69. package/dist/admin/pages/EditView/components/FormInputs/UID.mjs +4 -2
  70. package/dist/admin/pages/EditView/components/FormInputs/UID.mjs.map +1 -1
  71. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js +1 -1
  72. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js.map +1 -1
  73. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs +1 -1
  74. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs.map +1 -1
  75. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js +50 -97
  76. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js.map +1 -1
  77. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs +51 -79
  78. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs.map +1 -1
  79. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.js +86 -118
  80. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.js.map +1 -1
  81. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs +86 -118
  82. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs.map +1 -1
  83. package/dist/admin/pages/EditView/components/FormLayout.js +20 -24
  84. package/dist/admin/pages/EditView/components/FormLayout.js.map +1 -1
  85. package/dist/admin/pages/EditView/components/FormLayout.mjs +20 -24
  86. package/dist/admin/pages/EditView/components/FormLayout.mjs.map +1 -1
  87. package/dist/admin/pages/ListView/ListViewPage.js +77 -0
  88. package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
  89. package/dist/admin/pages/ListView/ListViewPage.mjs +78 -1
  90. package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
  91. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js +2 -1
  92. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js.map +1 -1
  93. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs +2 -1
  94. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs.map +1 -1
  95. package/dist/admin/pages/ListView/components/Filters.js +1 -0
  96. package/dist/admin/pages/ListView/components/Filters.js.map +1 -1
  97. package/dist/admin/pages/ListView/components/Filters.mjs +1 -0
  98. package/dist/admin/pages/ListView/components/Filters.mjs.map +1 -1
  99. package/dist/admin/pages/ListView/components/TableActions.js +13 -3
  100. package/dist/admin/pages/ListView/components/TableActions.js.map +1 -1
  101. package/dist/admin/pages/ListView/components/TableActions.mjs +13 -3
  102. package/dist/admin/pages/ListView/components/TableActions.mjs.map +1 -1
  103. package/dist/admin/preview/components/PreviewHeader.js +1 -1
  104. package/dist/admin/preview/components/PreviewHeader.js.map +1 -1
  105. package/dist/admin/preview/components/PreviewHeader.mjs +1 -1
  106. package/dist/admin/preview/components/PreviewHeader.mjs.map +1 -1
  107. package/dist/admin/services/documents.js +2 -2
  108. package/dist/admin/services/documents.js.map +1 -1
  109. package/dist/admin/services/documents.mjs +2 -2
  110. package/dist/admin/services/documents.mjs.map +1 -1
  111. package/dist/admin/services/homepage.js +30 -0
  112. package/dist/admin/services/homepage.js.map +1 -0
  113. package/dist/admin/services/homepage.mjs +28 -0
  114. package/dist/admin/services/homepage.mjs.map +1 -0
  115. package/dist/admin/src/components/ConfigurationForm/Fields.d.ts +6 -4
  116. package/dist/admin/src/components/Widgets.d.ts +3 -0
  117. package/dist/admin/src/hooks/useDocumentActions.d.ts +1 -0
  118. package/dist/admin/src/hooks/useDocumentContext.d.ts +1 -1
  119. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.d.ts +2 -2
  120. package/dist/admin/src/pages/EditView/components/FormInputs/Relations/RelationModal.d.ts +26 -5
  121. package/dist/admin/src/pages/EditView/components/FormInputs/UID.d.ts +1 -0
  122. package/dist/admin/src/pages/EditView/components/FormLayout.d.ts +7 -8
  123. package/dist/admin/src/services/documents.d.ts +7 -1
  124. package/dist/admin/src/services/homepage.d.ts +5 -0
  125. package/dist/admin/translations/en.json.js +3 -1
  126. package/dist/admin/translations/en.json.js.map +1 -1
  127. package/dist/admin/translations/en.json.mjs +3 -1
  128. package/dist/admin/translations/en.json.mjs.map +1 -1
  129. package/dist/admin/translations/ru.json.js +235 -226
  130. package/dist/admin/translations/ru.json.js.map +1 -1
  131. package/dist/admin/translations/ru.json.mjs +230 -226
  132. package/dist/admin/translations/ru.json.mjs.map +1 -1
  133. package/dist/admin/utils/validation.js +1 -1
  134. package/dist/admin/utils/validation.js.map +1 -1
  135. package/dist/admin/utils/validation.mjs +1 -1
  136. package/dist/admin/utils/validation.mjs.map +1 -1
  137. package/dist/server/controllers/content-types.js +11 -1
  138. package/dist/server/controllers/content-types.js.map +1 -1
  139. package/dist/server/controllers/content-types.mjs +11 -1
  140. package/dist/server/controllers/content-types.mjs.map +1 -1
  141. package/dist/server/controllers/index.js +3 -1
  142. package/dist/server/controllers/index.js.map +1 -1
  143. package/dist/server/controllers/index.mjs +3 -1
  144. package/dist/server/controllers/index.mjs.map +1 -1
  145. package/dist/server/controllers/validation/index.js +14 -2
  146. package/dist/server/controllers/validation/index.js.map +1 -1
  147. package/dist/server/controllers/validation/index.mjs +14 -2
  148. package/dist/server/controllers/validation/index.mjs.map +1 -1
  149. package/dist/server/history/services/lifecycles.js +3 -0
  150. package/dist/server/history/services/lifecycles.js.map +1 -1
  151. package/dist/server/history/services/lifecycles.mjs +3 -0
  152. package/dist/server/history/services/lifecycles.mjs.map +1 -1
  153. package/dist/server/homepage/controllers/homepage.js +57 -0
  154. package/dist/server/homepage/controllers/homepage.js.map +1 -0
  155. package/dist/server/homepage/controllers/homepage.mjs +36 -0
  156. package/dist/server/homepage/controllers/homepage.mjs.map +1 -0
  157. package/dist/server/homepage/controllers/index.js +10 -0
  158. package/dist/server/homepage/controllers/index.js.map +1 -0
  159. package/dist/server/homepage/controllers/index.mjs +8 -0
  160. package/dist/server/homepage/controllers/index.mjs.map +1 -0
  161. package/dist/server/homepage/index.js +14 -0
  162. package/dist/server/homepage/index.js.map +1 -0
  163. package/dist/server/homepage/index.mjs +12 -0
  164. package/dist/server/homepage/index.mjs.map +1 -0
  165. package/dist/server/homepage/routes/homepage.js +25 -0
  166. package/dist/server/homepage/routes/homepage.js.map +1 -0
  167. package/dist/server/homepage/routes/homepage.mjs +23 -0
  168. package/dist/server/homepage/routes/homepage.mjs.map +1 -0
  169. package/dist/server/homepage/routes/index.js +13 -0
  170. package/dist/server/homepage/routes/index.js.map +1 -0
  171. package/dist/server/homepage/routes/index.mjs +11 -0
  172. package/dist/server/homepage/routes/index.mjs.map +1 -0
  173. package/dist/server/homepage/services/homepage.js +157 -0
  174. package/dist/server/homepage/services/homepage.js.map +1 -0
  175. package/dist/server/homepage/services/homepage.mjs +155 -0
  176. package/dist/server/homepage/services/homepage.mjs.map +1 -0
  177. package/dist/server/homepage/services/index.js +10 -0
  178. package/dist/server/homepage/services/index.js.map +1 -0
  179. package/dist/server/homepage/services/index.mjs +8 -0
  180. package/dist/server/homepage/services/index.mjs.map +1 -0
  181. package/dist/server/preview/services/preview.js +0 -1
  182. package/dist/server/preview/services/preview.js.map +1 -1
  183. package/dist/server/preview/services/preview.mjs +0 -1
  184. package/dist/server/preview/services/preview.mjs.map +1 -1
  185. package/dist/server/routes/index.js +3 -1
  186. package/dist/server/routes/index.js.map +1 -1
  187. package/dist/server/routes/index.mjs +3 -1
  188. package/dist/server/routes/index.mjs.map +1 -1
  189. package/dist/server/services/data-mapper.js +4 -1
  190. package/dist/server/services/data-mapper.js.map +1 -1
  191. package/dist/server/services/data-mapper.mjs +4 -1
  192. package/dist/server/services/data-mapper.mjs.map +1 -1
  193. package/dist/server/services/document-manager.js +8 -1
  194. package/dist/server/services/document-manager.js.map +1 -1
  195. package/dist/server/services/document-manager.mjs +8 -1
  196. package/dist/server/services/document-manager.mjs.map +1 -1
  197. package/dist/server/services/document-metadata.js +3 -1
  198. package/dist/server/services/document-metadata.js.map +1 -1
  199. package/dist/server/services/document-metadata.mjs +3 -1
  200. package/dist/server/services/document-metadata.mjs.map +1 -1
  201. package/dist/server/services/index.js +3 -1
  202. package/dist/server/services/index.js.map +1 -1
  203. package/dist/server/services/index.mjs +3 -1
  204. package/dist/server/services/index.mjs.map +1 -1
  205. package/dist/server/services/utils/configuration/attributes.js +1 -1
  206. package/dist/server/services/utils/configuration/attributes.js.map +1 -1
  207. package/dist/server/services/utils/configuration/attributes.mjs +1 -1
  208. package/dist/server/services/utils/configuration/attributes.mjs.map +1 -1
  209. package/dist/server/services/utils/configuration/layouts.js +1 -1
  210. package/dist/server/services/utils/configuration/layouts.js.map +1 -1
  211. package/dist/server/services/utils/configuration/layouts.mjs +1 -1
  212. package/dist/server/services/utils/configuration/layouts.mjs.map +1 -1
  213. package/dist/server/services/utils/configuration/metadatas.js +8 -0
  214. package/dist/server/services/utils/configuration/metadatas.js.map +1 -1
  215. package/dist/server/services/utils/configuration/metadatas.mjs +8 -0
  216. package/dist/server/services/utils/configuration/metadatas.mjs.map +1 -1
  217. package/dist/server/services/utils/populate.js +11 -0
  218. package/dist/server/services/utils/populate.js.map +1 -1
  219. package/dist/server/services/utils/populate.mjs +11 -0
  220. package/dist/server/services/utils/populate.mjs.map +1 -1
  221. package/dist/server/src/controllers/content-types.d.ts.map +1 -1
  222. package/dist/server/src/controllers/index.d.ts.map +1 -1
  223. package/dist/server/src/controllers/validation/index.d.ts +6 -1
  224. package/dist/server/src/controllers/validation/index.d.ts.map +1 -1
  225. package/dist/server/src/history/services/lifecycles.d.ts.map +1 -1
  226. package/dist/server/src/homepage/controllers/homepage.d.ts +7 -0
  227. package/dist/server/src/homepage/controllers/homepage.d.ts.map +1 -0
  228. package/dist/server/src/homepage/controllers/index.d.ts +2 -0
  229. package/dist/server/src/homepage/controllers/index.d.ts.map +1 -0
  230. package/dist/server/src/homepage/index.d.ts +16 -0
  231. package/dist/server/src/homepage/index.d.ts.map +1 -0
  232. package/dist/server/src/homepage/routes/homepage.d.ts +4 -0
  233. package/dist/server/src/homepage/routes/homepage.d.ts.map +1 -0
  234. package/dist/server/src/homepage/routes/index.d.ts +8 -0
  235. package/dist/server/src/homepage/routes/index.d.ts.map +1 -0
  236. package/dist/server/src/homepage/services/homepage.d.ts +11 -0
  237. package/dist/server/src/homepage/services/homepage.d.ts.map +1 -0
  238. package/dist/server/src/homepage/services/index.d.ts +9 -0
  239. package/dist/server/src/homepage/services/index.d.ts.map +1 -0
  240. package/dist/server/src/index.d.ts +8 -0
  241. package/dist/server/src/index.d.ts.map +1 -1
  242. package/dist/server/src/preview/services/preview.d.ts.map +1 -1
  243. package/dist/server/src/routes/index.d.ts +1 -0
  244. package/dist/server/src/routes/index.d.ts.map +1 -1
  245. package/dist/server/src/services/data-mapper.d.ts +1 -0
  246. package/dist/server/src/services/data-mapper.d.ts.map +1 -1
  247. package/dist/server/src/services/document-manager.d.ts.map +1 -1
  248. package/dist/server/src/services/document-metadata.d.ts.map +1 -1
  249. package/dist/server/src/services/index.d.ts +7 -0
  250. package/dist/server/src/services/index.d.ts.map +1 -1
  251. package/dist/server/src/services/utils/configuration/metadatas.d.ts.map +1 -1
  252. package/dist/server/src/services/utils/populate.d.ts.map +1 -1
  253. package/dist/shared/contracts/collection-types.d.ts +0 -1
  254. package/dist/shared/contracts/collection-types.d.ts.map +1 -1
  255. package/dist/shared/contracts/homepage.d.ts +25 -0
  256. package/dist/shared/contracts/homepage.d.ts.map +1 -0
  257. package/package.json +11 -8
@@ -0,0 +1,161 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var strapiAdmin = require('@strapi/admin/strapi-admin');
5
+ var designSystem = require('@strapi/design-system');
6
+ var Icons = require('@strapi/icons');
7
+ var reactIntl = require('react-intl');
8
+ var reactRouterDom = require('react-router-dom');
9
+ var styledComponents = require('styled-components');
10
+ var DocumentStatus = require('../pages/EditView/components/DocumentStatus.js');
11
+ var homepage = require('../services/homepage.js');
12
+ var RelativeTime = require('./RelativeTime.js');
13
+
14
+ const CellTypography = styledComponents.styled(designSystem.Typography).attrs({
15
+ maxWidth: '14.4rem',
16
+ display: 'block'
17
+ })`
18
+ overflow: hidden;
19
+ text-overflow: ellipsis;
20
+ white-space: nowrap;
21
+ `;
22
+ const RecentDocumentsTable = ({ documents })=>{
23
+ const { formatMessage } = reactIntl.useIntl();
24
+ const { trackUsage } = strapiAdmin.useTracking();
25
+ const navigate = reactRouterDom.useNavigate();
26
+ const getEditViewLink = (document)=>{
27
+ const isSingleType = document.kind === 'singleType';
28
+ const kindPath = isSingleType ? 'single-types' : 'collection-types';
29
+ const queryParams = document.locale ? `?plugins[i18n][locale]=${document.locale}` : '';
30
+ return `/content-manager/${kindPath}/${document.contentTypeUid}${isSingleType ? '' : '/' + document.documentId}${queryParams}`;
31
+ };
32
+ const handleRowClick = (document)=>()=>{
33
+ trackUsage('willEditEntryFromHome');
34
+ const link = getEditViewLink(document);
35
+ navigate(link);
36
+ };
37
+ return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Table, {
38
+ colCount: 5,
39
+ rowCount: documents?.length ?? 0,
40
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Tbody, {
41
+ children: documents?.map((document)=>/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Tr, {
42
+ onClick: handleRowClick(document),
43
+ cursor: "pointer",
44
+ children: [
45
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Td, {
46
+ children: /*#__PURE__*/ jsxRuntime.jsx(CellTypography, {
47
+ title: document.title,
48
+ variant: "omega",
49
+ textColor: "neutral800",
50
+ children: document.title
51
+ })
52
+ }),
53
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Td, {
54
+ children: /*#__PURE__*/ jsxRuntime.jsx(CellTypography, {
55
+ variant: "omega",
56
+ textColor: "neutral600",
57
+ children: document.kind === 'singleType' ? formatMessage({
58
+ id: 'content-manager.widget.last-edited.single-type',
59
+ defaultMessage: 'Single-Type'
60
+ }) : formatMessage({
61
+ id: document.contentTypeDisplayName,
62
+ defaultMessage: document.contentTypeDisplayName
63
+ })
64
+ })
65
+ }),
66
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Td, {
67
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
68
+ display: "inline-block",
69
+ children: document.status ? /*#__PURE__*/ jsxRuntime.jsx(DocumentStatus.DocumentStatus, {
70
+ status: document.status
71
+ }) : /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
72
+ textColor: "neutral600",
73
+ "aria-hidden": true,
74
+ children: "-"
75
+ })
76
+ })
77
+ }),
78
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Td, {
79
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
80
+ textColor: "neutral600",
81
+ children: /*#__PURE__*/ jsxRuntime.jsx(RelativeTime.RelativeTime, {
82
+ timestamp: new Date(document.updatedAt)
83
+ })
84
+ })
85
+ }),
86
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Td, {
87
+ onClick: (e)=>e.stopPropagation(),
88
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
89
+ display: "inline-block",
90
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
91
+ tag: reactRouterDom.Link,
92
+ to: getEditViewLink(document),
93
+ onClick: ()=>trackUsage('willEditEntryFromHome'),
94
+ label: formatMessage({
95
+ id: 'content-manager.actions.edit.label',
96
+ defaultMessage: 'Edit'
97
+ }),
98
+ variant: "ghost",
99
+ children: /*#__PURE__*/ jsxRuntime.jsx(Icons.Pencil, {})
100
+ })
101
+ })
102
+ })
103
+ ]
104
+ }, document.documentId))
105
+ })
106
+ });
107
+ };
108
+ /* -------------------------------------------------------------------------------------------------
109
+ * LastEditedWidget
110
+ * -----------------------------------------------------------------------------------------------*/ const LastEditedWidget = ()=>{
111
+ const { formatMessage } = reactIntl.useIntl();
112
+ const { data, isLoading, error } = homepage.useGetRecentDocumentsQuery({
113
+ action: 'update'
114
+ });
115
+ if (isLoading) {
116
+ return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Widget.Loading, {});
117
+ }
118
+ if (error || !data) {
119
+ return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Widget.Error, {});
120
+ }
121
+ if (data.length === 0) {
122
+ return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Widget.NoData, {
123
+ children: formatMessage({
124
+ id: 'content-manager.widget.last-edited.no-data',
125
+ defaultMessage: 'No edited entries'
126
+ })
127
+ });
128
+ }
129
+ return /*#__PURE__*/ jsxRuntime.jsx(RecentDocumentsTable, {
130
+ documents: data
131
+ });
132
+ };
133
+ /* -------------------------------------------------------------------------------------------------
134
+ * LastPublishedWidget
135
+ * -----------------------------------------------------------------------------------------------*/ const LastPublishedWidget = ()=>{
136
+ const { formatMessage } = reactIntl.useIntl();
137
+ const { data, isLoading, error } = homepage.useGetRecentDocumentsQuery({
138
+ action: 'publish'
139
+ });
140
+ if (isLoading) {
141
+ return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Widget.Loading, {});
142
+ }
143
+ if (error || !data) {
144
+ return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Widget.Error, {});
145
+ }
146
+ if (data.length === 0) {
147
+ return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Widget.NoData, {
148
+ children: formatMessage({
149
+ id: 'content-manager.widget.last-published.no-data',
150
+ defaultMessage: 'No published entries'
151
+ })
152
+ });
153
+ }
154
+ return /*#__PURE__*/ jsxRuntime.jsx(RecentDocumentsTable, {
155
+ documents: data
156
+ });
157
+ };
158
+
159
+ exports.LastEditedWidget = LastEditedWidget;
160
+ exports.LastPublishedWidget = LastPublishedWidget;
161
+ //# sourceMappingURL=Widgets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Widgets.js","sources":["../../../admin/src/components/Widgets.tsx"],"sourcesContent":["import { Widget, useTracking } from '@strapi/admin/strapi-admin';\nimport { Box, IconButton, Table, Tbody, Td, Tr, Typography } from '@strapi/design-system';\nimport { Pencil } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { Link, useNavigate } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { DocumentStatus } from '../pages/EditView/components/DocumentStatus';\nimport { useGetRecentDocumentsQuery } from '../services/homepage';\n\nimport { RelativeTime } from './RelativeTime';\n\nimport type { RecentDocument } from '../../../shared/contracts/homepage';\n\nconst CellTypography = styled(Typography).attrs({ maxWidth: '14.4rem', display: 'block' })`\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\nconst RecentDocumentsTable = ({ documents }: { documents: RecentDocument[] }) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const navigate = useNavigate();\n\n const getEditViewLink = (document: RecentDocument): string => {\n const isSingleType = document.kind === 'singleType';\n const kindPath = isSingleType ? 'single-types' : 'collection-types';\n const queryParams = document.locale ? `?plugins[i18n][locale]=${document.locale}` : '';\n\n return `/content-manager/${kindPath}/${document.contentTypeUid}${isSingleType ? '' : '/' + document.documentId}${queryParams}`;\n };\n\n const handleRowClick = (document: RecentDocument) => () => {\n trackUsage('willEditEntryFromHome');\n const link = getEditViewLink(document);\n navigate(link);\n };\n\n return (\n <Table colCount={5} rowCount={documents?.length ?? 0}>\n <Tbody>\n {documents?.map((document) => (\n <Tr onClick={handleRowClick(document)} cursor=\"pointer\" key={document.documentId}>\n <Td>\n <CellTypography title={document.title} variant=\"omega\" textColor=\"neutral800\">\n {document.title}\n </CellTypography>\n </Td>\n <Td>\n <CellTypography variant=\"omega\" textColor=\"neutral600\">\n {document.kind === 'singleType'\n ? formatMessage({\n id: 'content-manager.widget.last-edited.single-type',\n defaultMessage: 'Single-Type',\n })\n : formatMessage({\n id: document.contentTypeDisplayName,\n defaultMessage: document.contentTypeDisplayName,\n })}\n </CellTypography>\n </Td>\n <Td>\n <Box display=\"inline-block\">\n {document.status ? (\n <DocumentStatus status={document.status} />\n ) : (\n <Typography textColor=\"neutral600\" aria-hidden>\n -\n </Typography>\n )}\n </Box>\n </Td>\n <Td>\n <Typography textColor=\"neutral600\">\n <RelativeTime timestamp={new Date(document.updatedAt)} />\n </Typography>\n </Td>\n <Td onClick={(e) => e.stopPropagation()}>\n <Box display=\"inline-block\">\n <IconButton\n tag={Link}\n to={getEditViewLink(document)}\n onClick={() => trackUsage('willEditEntryFromHome')}\n label={formatMessage({\n id: 'content-manager.actions.edit.label',\n defaultMessage: 'Edit',\n })}\n variant=\"ghost\"\n >\n <Pencil />\n </IconButton>\n </Box>\n </Td>\n </Tr>\n ))}\n </Tbody>\n </Table>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * LastEditedWidget\n * -----------------------------------------------------------------------------------------------*/\n\nconst LastEditedWidget = () => {\n const { formatMessage } = useIntl();\n const { data, isLoading, error } = useGetRecentDocumentsQuery({ action: 'update' });\n\n if (isLoading) {\n return <Widget.Loading />;\n }\n\n if (error || !data) {\n return <Widget.Error />;\n }\n\n if (data.length === 0) {\n return (\n <Widget.NoData>\n {formatMessage({\n id: 'content-manager.widget.last-edited.no-data',\n defaultMessage: 'No edited entries',\n })}\n </Widget.NoData>\n );\n }\n\n return <RecentDocumentsTable documents={data} />;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * LastPublishedWidget\n * -----------------------------------------------------------------------------------------------*/\n\nconst LastPublishedWidget = () => {\n const { formatMessage } = useIntl();\n const { data, isLoading, error } = useGetRecentDocumentsQuery({ action: 'publish' });\n\n if (isLoading) {\n return <Widget.Loading />;\n }\n\n if (error || !data) {\n return <Widget.Error />;\n }\n\n if (data.length === 0) {\n return (\n <Widget.NoData>\n {formatMessage({\n id: 'content-manager.widget.last-published.no-data',\n defaultMessage: 'No published entries',\n })}\n </Widget.NoData>\n );\n }\n\n return <RecentDocumentsTable documents={data} />;\n};\n\nexport { LastEditedWidget, LastPublishedWidget };\n"],"names":["CellTypography","styled","Typography","attrs","maxWidth","display","RecentDocumentsTable","documents","formatMessage","useIntl","trackUsage","useTracking","navigate","useNavigate","getEditViewLink","document","isSingleType","kind","kindPath","queryParams","locale","contentTypeUid","documentId","handleRowClick","link","_jsx","Table","colCount","rowCount","length","Tbody","map","_jsxs","Tr","onClick","cursor","Td","title","variant","textColor","id","defaultMessage","contentTypeDisplayName","Box","status","DocumentStatus","aria-hidden","RelativeTime","timestamp","Date","updatedAt","e","stopPropagation","IconButton","tag","Link","to","label","Pencil","LastEditedWidget","data","isLoading","error","useGetRecentDocumentsQuery","action","Widget","Loading","Error","NoData","LastPublishedWidget"],"mappings":"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"}
@@ -0,0 +1,158 @@
1
+ import { jsx, jsxs } from 'react/jsx-runtime';
2
+ import { Widget, useTracking } from '@strapi/admin/strapi-admin';
3
+ import { Typography, Table, Tbody, Tr, Td, Box, IconButton } from '@strapi/design-system';
4
+ import { Pencil } from '@strapi/icons';
5
+ import { useIntl } from 'react-intl';
6
+ import { useNavigate, Link } from 'react-router-dom';
7
+ import { styled } from 'styled-components';
8
+ import { DocumentStatus } from '../pages/EditView/components/DocumentStatus.mjs';
9
+ import { useGetRecentDocumentsQuery } from '../services/homepage.mjs';
10
+ import { RelativeTime } from './RelativeTime.mjs';
11
+
12
+ const CellTypography = styled(Typography).attrs({
13
+ maxWidth: '14.4rem',
14
+ display: 'block'
15
+ })`
16
+ overflow: hidden;
17
+ text-overflow: ellipsis;
18
+ white-space: nowrap;
19
+ `;
20
+ const RecentDocumentsTable = ({ documents })=>{
21
+ const { formatMessage } = useIntl();
22
+ const { trackUsage } = useTracking();
23
+ const navigate = useNavigate();
24
+ const getEditViewLink = (document)=>{
25
+ const isSingleType = document.kind === 'singleType';
26
+ const kindPath = isSingleType ? 'single-types' : 'collection-types';
27
+ const queryParams = document.locale ? `?plugins[i18n][locale]=${document.locale}` : '';
28
+ return `/content-manager/${kindPath}/${document.contentTypeUid}${isSingleType ? '' : '/' + document.documentId}${queryParams}`;
29
+ };
30
+ const handleRowClick = (document)=>()=>{
31
+ trackUsage('willEditEntryFromHome');
32
+ const link = getEditViewLink(document);
33
+ navigate(link);
34
+ };
35
+ return /*#__PURE__*/ jsx(Table, {
36
+ colCount: 5,
37
+ rowCount: documents?.length ?? 0,
38
+ children: /*#__PURE__*/ jsx(Tbody, {
39
+ children: documents?.map((document)=>/*#__PURE__*/ jsxs(Tr, {
40
+ onClick: handleRowClick(document),
41
+ cursor: "pointer",
42
+ children: [
43
+ /*#__PURE__*/ jsx(Td, {
44
+ children: /*#__PURE__*/ jsx(CellTypography, {
45
+ title: document.title,
46
+ variant: "omega",
47
+ textColor: "neutral800",
48
+ children: document.title
49
+ })
50
+ }),
51
+ /*#__PURE__*/ jsx(Td, {
52
+ children: /*#__PURE__*/ jsx(CellTypography, {
53
+ variant: "omega",
54
+ textColor: "neutral600",
55
+ children: document.kind === 'singleType' ? formatMessage({
56
+ id: 'content-manager.widget.last-edited.single-type',
57
+ defaultMessage: 'Single-Type'
58
+ }) : formatMessage({
59
+ id: document.contentTypeDisplayName,
60
+ defaultMessage: document.contentTypeDisplayName
61
+ })
62
+ })
63
+ }),
64
+ /*#__PURE__*/ jsx(Td, {
65
+ children: /*#__PURE__*/ jsx(Box, {
66
+ display: "inline-block",
67
+ children: document.status ? /*#__PURE__*/ jsx(DocumentStatus, {
68
+ status: document.status
69
+ }) : /*#__PURE__*/ jsx(Typography, {
70
+ textColor: "neutral600",
71
+ "aria-hidden": true,
72
+ children: "-"
73
+ })
74
+ })
75
+ }),
76
+ /*#__PURE__*/ jsx(Td, {
77
+ children: /*#__PURE__*/ jsx(Typography, {
78
+ textColor: "neutral600",
79
+ children: /*#__PURE__*/ jsx(RelativeTime, {
80
+ timestamp: new Date(document.updatedAt)
81
+ })
82
+ })
83
+ }),
84
+ /*#__PURE__*/ jsx(Td, {
85
+ onClick: (e)=>e.stopPropagation(),
86
+ children: /*#__PURE__*/ jsx(Box, {
87
+ display: "inline-block",
88
+ children: /*#__PURE__*/ jsx(IconButton, {
89
+ tag: Link,
90
+ to: getEditViewLink(document),
91
+ onClick: ()=>trackUsage('willEditEntryFromHome'),
92
+ label: formatMessage({
93
+ id: 'content-manager.actions.edit.label',
94
+ defaultMessage: 'Edit'
95
+ }),
96
+ variant: "ghost",
97
+ children: /*#__PURE__*/ jsx(Pencil, {})
98
+ })
99
+ })
100
+ })
101
+ ]
102
+ }, document.documentId))
103
+ })
104
+ });
105
+ };
106
+ /* -------------------------------------------------------------------------------------------------
107
+ * LastEditedWidget
108
+ * -----------------------------------------------------------------------------------------------*/ const LastEditedWidget = ()=>{
109
+ const { formatMessage } = useIntl();
110
+ const { data, isLoading, error } = useGetRecentDocumentsQuery({
111
+ action: 'update'
112
+ });
113
+ if (isLoading) {
114
+ return /*#__PURE__*/ jsx(Widget.Loading, {});
115
+ }
116
+ if (error || !data) {
117
+ return /*#__PURE__*/ jsx(Widget.Error, {});
118
+ }
119
+ if (data.length === 0) {
120
+ return /*#__PURE__*/ jsx(Widget.NoData, {
121
+ children: formatMessage({
122
+ id: 'content-manager.widget.last-edited.no-data',
123
+ defaultMessage: 'No edited entries'
124
+ })
125
+ });
126
+ }
127
+ return /*#__PURE__*/ jsx(RecentDocumentsTable, {
128
+ documents: data
129
+ });
130
+ };
131
+ /* -------------------------------------------------------------------------------------------------
132
+ * LastPublishedWidget
133
+ * -----------------------------------------------------------------------------------------------*/ const LastPublishedWidget = ()=>{
134
+ const { formatMessage } = useIntl();
135
+ const { data, isLoading, error } = useGetRecentDocumentsQuery({
136
+ action: 'publish'
137
+ });
138
+ if (isLoading) {
139
+ return /*#__PURE__*/ jsx(Widget.Loading, {});
140
+ }
141
+ if (error || !data) {
142
+ return /*#__PURE__*/ jsx(Widget.Error, {});
143
+ }
144
+ if (data.length === 0) {
145
+ return /*#__PURE__*/ jsx(Widget.NoData, {
146
+ children: formatMessage({
147
+ id: 'content-manager.widget.last-published.no-data',
148
+ defaultMessage: 'No published entries'
149
+ })
150
+ });
151
+ }
152
+ return /*#__PURE__*/ jsx(RecentDocumentsTable, {
153
+ documents: data
154
+ });
155
+ };
156
+
157
+ export { LastEditedWidget, LastPublishedWidget };
158
+ //# sourceMappingURL=Widgets.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Widgets.mjs","sources":["../../../admin/src/components/Widgets.tsx"],"sourcesContent":["import { Widget, useTracking } from '@strapi/admin/strapi-admin';\nimport { Box, IconButton, Table, Tbody, Td, Tr, Typography } from '@strapi/design-system';\nimport { Pencil } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { Link, useNavigate } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { DocumentStatus } from '../pages/EditView/components/DocumentStatus';\nimport { useGetRecentDocumentsQuery } from '../services/homepage';\n\nimport { RelativeTime } from './RelativeTime';\n\nimport type { RecentDocument } from '../../../shared/contracts/homepage';\n\nconst CellTypography = styled(Typography).attrs({ maxWidth: '14.4rem', display: 'block' })`\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\nconst RecentDocumentsTable = ({ documents }: { documents: RecentDocument[] }) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const navigate = useNavigate();\n\n const getEditViewLink = (document: RecentDocument): string => {\n const isSingleType = document.kind === 'singleType';\n const kindPath = isSingleType ? 'single-types' : 'collection-types';\n const queryParams = document.locale ? `?plugins[i18n][locale]=${document.locale}` : '';\n\n return `/content-manager/${kindPath}/${document.contentTypeUid}${isSingleType ? '' : '/' + document.documentId}${queryParams}`;\n };\n\n const handleRowClick = (document: RecentDocument) => () => {\n trackUsage('willEditEntryFromHome');\n const link = getEditViewLink(document);\n navigate(link);\n };\n\n return (\n <Table colCount={5} rowCount={documents?.length ?? 0}>\n <Tbody>\n {documents?.map((document) => (\n <Tr onClick={handleRowClick(document)} cursor=\"pointer\" key={document.documentId}>\n <Td>\n <CellTypography title={document.title} variant=\"omega\" textColor=\"neutral800\">\n {document.title}\n </CellTypography>\n </Td>\n <Td>\n <CellTypography variant=\"omega\" textColor=\"neutral600\">\n {document.kind === 'singleType'\n ? formatMessage({\n id: 'content-manager.widget.last-edited.single-type',\n defaultMessage: 'Single-Type',\n })\n : formatMessage({\n id: document.contentTypeDisplayName,\n defaultMessage: document.contentTypeDisplayName,\n })}\n </CellTypography>\n </Td>\n <Td>\n <Box display=\"inline-block\">\n {document.status ? (\n <DocumentStatus status={document.status} />\n ) : (\n <Typography textColor=\"neutral600\" aria-hidden>\n -\n </Typography>\n )}\n </Box>\n </Td>\n <Td>\n <Typography textColor=\"neutral600\">\n <RelativeTime timestamp={new Date(document.updatedAt)} />\n </Typography>\n </Td>\n <Td onClick={(e) => e.stopPropagation()}>\n <Box display=\"inline-block\">\n <IconButton\n tag={Link}\n to={getEditViewLink(document)}\n onClick={() => trackUsage('willEditEntryFromHome')}\n label={formatMessage({\n id: 'content-manager.actions.edit.label',\n defaultMessage: 'Edit',\n })}\n variant=\"ghost\"\n >\n <Pencil />\n </IconButton>\n </Box>\n </Td>\n </Tr>\n ))}\n </Tbody>\n </Table>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * LastEditedWidget\n * -----------------------------------------------------------------------------------------------*/\n\nconst LastEditedWidget = () => {\n const { formatMessage } = useIntl();\n const { data, isLoading, error } = useGetRecentDocumentsQuery({ action: 'update' });\n\n if (isLoading) {\n return <Widget.Loading />;\n }\n\n if (error || !data) {\n return <Widget.Error />;\n }\n\n if (data.length === 0) {\n return (\n <Widget.NoData>\n {formatMessage({\n id: 'content-manager.widget.last-edited.no-data',\n defaultMessage: 'No edited entries',\n })}\n </Widget.NoData>\n );\n }\n\n return <RecentDocumentsTable documents={data} />;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * LastPublishedWidget\n * -----------------------------------------------------------------------------------------------*/\n\nconst LastPublishedWidget = () => {\n const { formatMessage } = useIntl();\n const { data, isLoading, error } = useGetRecentDocumentsQuery({ action: 'publish' });\n\n if (isLoading) {\n return <Widget.Loading />;\n }\n\n if (error || !data) {\n return <Widget.Error />;\n }\n\n if (data.length === 0) {\n return (\n <Widget.NoData>\n {formatMessage({\n id: 'content-manager.widget.last-published.no-data',\n defaultMessage: 'No published entries',\n })}\n </Widget.NoData>\n );\n }\n\n return <RecentDocumentsTable documents={data} />;\n};\n\nexport { LastEditedWidget, LastPublishedWidget };\n"],"names":["CellTypography","styled","Typography","attrs","maxWidth","display","RecentDocumentsTable","documents","formatMessage","useIntl","trackUsage","useTracking","navigate","useNavigate","getEditViewLink","document","isSingleType","kind","kindPath","queryParams","locale","contentTypeUid","documentId","handleRowClick","link","_jsx","Table","colCount","rowCount","length","Tbody","map","_jsxs","Tr","onClick","cursor","Td","title","variant","textColor","id","defaultMessage","contentTypeDisplayName","Box","status","DocumentStatus","aria-hidden","RelativeTime","timestamp","Date","updatedAt","e","stopPropagation","IconButton","tag","Link","to","label","Pencil","LastEditedWidget","data","isLoading","error","useGetRecentDocumentsQuery","action","Widget","Loading","Error","NoData","LastPublishedWidget"],"mappings":"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"}
@@ -122,6 +122,12 @@ const VersionHeader = ({ headerId })=>{
122
122
  hour: 'numeric',
123
123
  minute: 'numeric'
124
124
  }),
125
+ secondaryAction: /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.GradientBadge, {
126
+ label: formatMessage({
127
+ id: 'components.premiumFeature.title',
128
+ defaultMessage: 'Premium feature'
129
+ })
130
+ }),
125
131
  subtitle: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
126
132
  variant: "epsilon",
127
133
  textColor: "neutral600",
@@ -1 +1 @@
1
- {"version":3,"file":"VersionHeader.js","sources":["../../../../admin/src/history/components/VersionHeader.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n ConfirmDialog,\n useNotification,\n useQueryParams,\n useTracking,\n useRBAC,\n Layouts,\n} from '@strapi/admin/strapi-admin';\nimport { Button, Typography, Flex, Link, Dialog } from '@strapi/design-system';\nimport { ArrowLeft, WarningCircle } from '@strapi/icons';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useNavigate, useParams, type To } from 'react-router-dom';\n\nimport { PERMISSIONS } from '../../constants/plugin';\nimport { useHistoryContext } from '../pages/History';\nimport { useRestoreVersionMutation } from '../services/historyVersion';\n\nimport type { UID } from '@strapi/types';\n\ninterface VersionHeaderProps {\n headerId: string;\n}\n\nexport const VersionHeader = ({ headerId }: VersionHeaderProps) => {\n const [isConfirmDialogOpen, setIsConfirmDialogOpen] = React.useState(false);\n const navigate = useNavigate();\n const { formatMessage, formatDate } = useIntl();\n const { trackUsage } = useTracking();\n const { toggleNotification } = useNotification();\n const [{ query }] = useQueryParams<{\n plugins?: Record<string, unknown>;\n }>();\n const { collectionType, slug } = useParams<{ collectionType: string; slug: UID.ContentType }>();\n const [restoreVersion, { isLoading }] = useRestoreVersionMutation();\n const { allowedActions } = useRBAC(PERMISSIONS.map((action) => ({ action, subject: slug })));\n\n const version = useHistoryContext('VersionHeader', (state) => state.selectedVersion);\n const mainField = useHistoryContext('VersionHeader', (state) => state.mainField);\n const schema = useHistoryContext('VersionHeader', (state) => state.schema);\n const isCurrentVersion = useHistoryContext(\n 'VersionHeader',\n (state) => state.page === 1 && state.versions.data[0].id === state.selectedVersion.id\n );\n\n const mainFieldValue = version.data[mainField];\n\n const getNextNavigation = (): To => {\n const pluginsQueryParams = stringify({ plugins: query.plugins }, { encode: false });\n\n return {\n pathname: '..',\n search: pluginsQueryParams,\n };\n };\n\n const handleRestore = async () => {\n try {\n const response = await restoreVersion({\n documentId: version.relatedDocumentId,\n collectionType,\n params: {\n versionId: version.id,\n contentType: version.contentType,\n },\n body: { contentType: version.contentType },\n });\n\n if ('data' in response) {\n navigate(getNextNavigation(), { relative: 'path' });\n\n toggleNotification({\n type: 'success',\n title: formatMessage({\n id: 'content-manager.restore.success.title',\n defaultMessage: 'Version restored.',\n }),\n message: formatMessage({\n id: 'content-manager.restore.success.message',\n defaultMessage: 'A past version of the content was restored.',\n }),\n });\n\n trackUsage('didRestoreHistoryVersion');\n }\n\n if ('error' in response) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'content-manager.history.restore.error.message',\n defaultMessage: 'Could not restore version.',\n }),\n });\n }\n } catch (error) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n return (\n <Dialog.Root open={isConfirmDialogOpen} onOpenChange={setIsConfirmDialogOpen}>\n <Layouts.BaseHeader\n id={headerId}\n title={formatDate(new Date(version.createdAt), {\n year: 'numeric',\n month: 'numeric',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n })}\n subtitle={\n <Typography variant=\"epsilon\" textColor=\"neutral600\">\n {formatMessage(\n {\n id: 'content-manager.history.version.subtitle',\n defaultMessage:\n '{hasLocale, select, true {{subtitle}, in {locale}} other {{subtitle}}}',\n },\n {\n hasLocale: Boolean(version.locale),\n subtitle: `${mainFieldValue || ''} (${schema.info.singularName})`.trim(),\n locale: version.locale?.name,\n }\n )}\n </Typography>\n }\n navigationAction={\n <Link\n startIcon={<ArrowLeft />}\n tag={NavLink}\n to={getNextNavigation()}\n relative=\"path\"\n isExternal={false}\n >\n {formatMessage({\n id: 'global.back',\n defaultMessage: 'Back',\n })}\n </Link>\n }\n sticky={false}\n primaryAction={\n <Dialog.Trigger>\n <Button\n disabled={!allowedActions.canUpdate || isCurrentVersion}\n onClick={() => {\n setIsConfirmDialogOpen(true);\n }}\n >\n {formatMessage({\n id: 'content-manager.history.restore.confirm.button',\n defaultMessage: 'Restore',\n })}\n </Button>\n </Dialog.Trigger>\n }\n />\n <ConfirmDialog\n onConfirm={handleRestore}\n endAction={\n <Button variant=\"secondary\" onClick={handleRestore} loading={isLoading}>\n {formatMessage({\n id: 'content-manager.history.restore.confirm.button',\n defaultMessage: 'Restore',\n })}\n </Button>\n }\n >\n <Flex\n direction=\"column\"\n alignItems=\"center\"\n justifyContent=\"center\"\n gap={2}\n textAlign=\"center\"\n >\n <Flex justifyContent=\"center\">\n <WarningCircle width=\"24px\" height=\"24px\" fill=\"danger600\" />\n </Flex>\n <Typography>\n {formatMessage({\n id: 'content-manager.history.restore.confirm.title',\n defaultMessage: 'Are you sure you want to restore this version?',\n })}\n </Typography>\n <Typography>\n {formatMessage(\n {\n id: 'content-manager.history.restore.confirm.message',\n defaultMessage:\n \"{isDraft, select, true {The restored content will override your draft.} other {The restored content won't be published, it will override the draft and be saved as pending changes. You'll be able to publish the changes at anytime.}}\",\n },\n {\n isDraft: version.status === 'draft',\n }\n )}\n </Typography>\n </Flex>\n </ConfirmDialog>\n </Dialog.Root>\n );\n};\n"],"names":["VersionHeader","headerId","isConfirmDialogOpen","setIsConfirmDialogOpen","React","useState","navigate","useNavigate","formatMessage","formatDate","useIntl","trackUsage","useTracking","toggleNotification","useNotification","query","useQueryParams","collectionType","slug","useParams","restoreVersion","isLoading","useRestoreVersionMutation","allowedActions","useRBAC","PERMISSIONS","map","action","subject","version","useHistoryContext","state","selectedVersion","mainField","schema","isCurrentVersion","page","versions","data","id","mainFieldValue","getNextNavigation","pluginsQueryParams","stringify","plugins","encode","pathname","search","handleRestore","response","documentId","relatedDocumentId","params","versionId","contentType","body","relative","type","title","defaultMessage","message","error","_jsxs","Dialog","Root","open","onOpenChange","_jsx","Layouts","BaseHeader","Date","createdAt","year","month","day","hour","minute","subtitle","Typography","variant","textColor","hasLocale","Boolean","locale","info","singularName","trim","name","navigationAction","Link","startIcon","ArrowLeft","tag","NavLink","to","isExternal","sticky","primaryAction","Trigger","Button","disabled","canUpdate","onClick","ConfirmDialog","onConfirm","endAction","loading","Flex","direction","alignItems","justifyContent","gap","textAlign","WarningCircle","width","height","fill","isDraft","status"],"mappings":"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"}
1
+ {"version":3,"file":"VersionHeader.js","sources":["../../../../admin/src/history/components/VersionHeader.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n ConfirmDialog,\n useNotification,\n useQueryParams,\n useTracking,\n useRBAC,\n Layouts,\n GradientBadge,\n} from '@strapi/admin/strapi-admin';\nimport { Button, Typography, Flex, Link, Dialog } from '@strapi/design-system';\nimport { ArrowLeft, WarningCircle } from '@strapi/icons';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useNavigate, useParams, type To } from 'react-router-dom';\n\nimport { PERMISSIONS } from '../../constants/plugin';\nimport { useHistoryContext } from '../pages/History';\nimport { useRestoreVersionMutation } from '../services/historyVersion';\n\nimport type { UID } from '@strapi/types';\n\ninterface VersionHeaderProps {\n headerId: string;\n}\n\nexport const VersionHeader = ({ headerId }: VersionHeaderProps) => {\n const [isConfirmDialogOpen, setIsConfirmDialogOpen] = React.useState(false);\n const navigate = useNavigate();\n const { formatMessage, formatDate } = useIntl();\n const { trackUsage } = useTracking();\n const { toggleNotification } = useNotification();\n const [{ query }] = useQueryParams<{\n plugins?: Record<string, unknown>;\n }>();\n const { collectionType, slug } = useParams<{ collectionType: string; slug: UID.ContentType }>();\n const [restoreVersion, { isLoading }] = useRestoreVersionMutation();\n const { allowedActions } = useRBAC(PERMISSIONS.map((action) => ({ action, subject: slug })));\n\n const version = useHistoryContext('VersionHeader', (state) => state.selectedVersion);\n const mainField = useHistoryContext('VersionHeader', (state) => state.mainField);\n const schema = useHistoryContext('VersionHeader', (state) => state.schema);\n const isCurrentVersion = useHistoryContext(\n 'VersionHeader',\n (state) => state.page === 1 && state.versions.data[0].id === state.selectedVersion.id\n );\n\n const mainFieldValue = version.data[mainField];\n\n const getNextNavigation = (): To => {\n const pluginsQueryParams = stringify({ plugins: query.plugins }, { encode: false });\n\n return {\n pathname: '..',\n search: pluginsQueryParams,\n };\n };\n\n const handleRestore = async () => {\n try {\n const response = await restoreVersion({\n documentId: version.relatedDocumentId,\n collectionType,\n params: {\n versionId: version.id,\n contentType: version.contentType,\n },\n body: { contentType: version.contentType },\n });\n\n if ('data' in response) {\n navigate(getNextNavigation(), { relative: 'path' });\n\n toggleNotification({\n type: 'success',\n title: formatMessage({\n id: 'content-manager.restore.success.title',\n defaultMessage: 'Version restored.',\n }),\n message: formatMessage({\n id: 'content-manager.restore.success.message',\n defaultMessage: 'A past version of the content was restored.',\n }),\n });\n\n trackUsage('didRestoreHistoryVersion');\n }\n\n if ('error' in response) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'content-manager.history.restore.error.message',\n defaultMessage: 'Could not restore version.',\n }),\n });\n }\n } catch (error) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n return (\n <Dialog.Root open={isConfirmDialogOpen} onOpenChange={setIsConfirmDialogOpen}>\n <Layouts.BaseHeader\n id={headerId}\n title={formatDate(new Date(version.createdAt), {\n year: 'numeric',\n month: 'numeric',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n })}\n secondaryAction={\n <GradientBadge\n label={formatMessage({\n id: 'components.premiumFeature.title',\n defaultMessage: 'Premium feature',\n })}\n />\n }\n subtitle={\n <Typography variant=\"epsilon\" textColor=\"neutral600\">\n {formatMessage(\n {\n id: 'content-manager.history.version.subtitle',\n defaultMessage:\n '{hasLocale, select, true {{subtitle}, in {locale}} other {{subtitle}}}',\n },\n {\n hasLocale: Boolean(version.locale),\n subtitle: `${mainFieldValue || ''} (${schema.info.singularName})`.trim(),\n locale: version.locale?.name,\n }\n )}\n </Typography>\n }\n navigationAction={\n <Link\n startIcon={<ArrowLeft />}\n tag={NavLink}\n to={getNextNavigation()}\n relative=\"path\"\n isExternal={false}\n >\n {formatMessage({\n id: 'global.back',\n defaultMessage: 'Back',\n })}\n </Link>\n }\n sticky={false}\n primaryAction={\n <Dialog.Trigger>\n <Button\n disabled={!allowedActions.canUpdate || isCurrentVersion}\n onClick={() => {\n setIsConfirmDialogOpen(true);\n }}\n >\n {formatMessage({\n id: 'content-manager.history.restore.confirm.button',\n defaultMessage: 'Restore',\n })}\n </Button>\n </Dialog.Trigger>\n }\n />\n <ConfirmDialog\n onConfirm={handleRestore}\n endAction={\n <Button variant=\"secondary\" onClick={handleRestore} loading={isLoading}>\n {formatMessage({\n id: 'content-manager.history.restore.confirm.button',\n defaultMessage: 'Restore',\n })}\n </Button>\n }\n >\n <Flex\n direction=\"column\"\n alignItems=\"center\"\n justifyContent=\"center\"\n gap={2}\n textAlign=\"center\"\n >\n <Flex justifyContent=\"center\">\n <WarningCircle width=\"24px\" height=\"24px\" fill=\"danger600\" />\n </Flex>\n <Typography>\n {formatMessage({\n id: 'content-manager.history.restore.confirm.title',\n defaultMessage: 'Are you sure you want to restore this version?',\n })}\n </Typography>\n <Typography>\n {formatMessage(\n {\n id: 'content-manager.history.restore.confirm.message',\n defaultMessage:\n \"{isDraft, select, true {The restored content will override your draft.} other {The restored content won't be published, it will override the draft and be saved as pending changes. You'll be able to publish the changes at anytime.}}\",\n },\n {\n isDraft: version.status === 'draft',\n }\n )}\n </Typography>\n </Flex>\n </ConfirmDialog>\n </Dialog.Root>\n );\n};\n"],"names":["VersionHeader","headerId","isConfirmDialogOpen","setIsConfirmDialogOpen","React","useState","navigate","useNavigate","formatMessage","formatDate","useIntl","trackUsage","useTracking","toggleNotification","useNotification","query","useQueryParams","collectionType","slug","useParams","restoreVersion","isLoading","useRestoreVersionMutation","allowedActions","useRBAC","PERMISSIONS","map","action","subject","version","useHistoryContext","state","selectedVersion","mainField","schema","isCurrentVersion","page","versions","data","id","mainFieldValue","getNextNavigation","pluginsQueryParams","stringify","plugins","encode","pathname","search","handleRestore","response","documentId","relatedDocumentId","params","versionId","contentType","body","relative","type","title","defaultMessage","message","error","_jsxs","Dialog","Root","open","onOpenChange","_jsx","Layouts","BaseHeader","Date","createdAt","year","month","day","hour","minute","secondaryAction","GradientBadge","label","subtitle","Typography","variant","textColor","hasLocale","Boolean","locale","info","singularName","trim","name","navigationAction","Link","startIcon","ArrowLeft","tag","NavLink","to","isExternal","sticky","primaryAction","Trigger","Button","disabled","canUpdate","onClick","ConfirmDialog","onConfirm","endAction","loading","Flex","direction","alignItems","justifyContent","gap","textAlign","WarningCircle","width","height","fill","isDraft","status"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
2
  import * as React from 'react';
3
- import { useTracking, useNotification, useQueryParams, useRBAC, Layouts, ConfirmDialog } from '@strapi/admin/strapi-admin';
3
+ import { useTracking, useNotification, useQueryParams, useRBAC, Layouts, GradientBadge, ConfirmDialog } from '@strapi/admin/strapi-admin';
4
4
  import { Dialog, Typography, Link, Button, Flex } from '@strapi/design-system';
5
5
  import { ArrowLeft, WarningCircle } from '@strapi/icons';
6
6
  import { stringify } from 'qs';
@@ -101,6 +101,12 @@ const VersionHeader = ({ headerId })=>{
101
101
  hour: 'numeric',
102
102
  minute: 'numeric'
103
103
  }),
104
+ secondaryAction: /*#__PURE__*/ jsx(GradientBadge, {
105
+ label: formatMessage({
106
+ id: 'components.premiumFeature.title',
107
+ defaultMessage: 'Premium feature'
108
+ })
109
+ }),
104
110
  subtitle: /*#__PURE__*/ jsx(Typography, {
105
111
  variant: "epsilon",
106
112
  textColor: "neutral600",
@@ -1 +1 @@
1
- {"version":3,"file":"VersionHeader.mjs","sources":["../../../../admin/src/history/components/VersionHeader.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n ConfirmDialog,\n useNotification,\n useQueryParams,\n useTracking,\n useRBAC,\n Layouts,\n} from '@strapi/admin/strapi-admin';\nimport { Button, Typography, Flex, Link, Dialog } from '@strapi/design-system';\nimport { ArrowLeft, WarningCircle } from '@strapi/icons';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useNavigate, useParams, type To } from 'react-router-dom';\n\nimport { PERMISSIONS } from '../../constants/plugin';\nimport { useHistoryContext } from '../pages/History';\nimport { useRestoreVersionMutation } from '../services/historyVersion';\n\nimport type { UID } from '@strapi/types';\n\ninterface VersionHeaderProps {\n headerId: string;\n}\n\nexport const VersionHeader = ({ headerId }: VersionHeaderProps) => {\n const [isConfirmDialogOpen, setIsConfirmDialogOpen] = React.useState(false);\n const navigate = useNavigate();\n const { formatMessage, formatDate } = useIntl();\n const { trackUsage } = useTracking();\n const { toggleNotification } = useNotification();\n const [{ query }] = useQueryParams<{\n plugins?: Record<string, unknown>;\n }>();\n const { collectionType, slug } = useParams<{ collectionType: string; slug: UID.ContentType }>();\n const [restoreVersion, { isLoading }] = useRestoreVersionMutation();\n const { allowedActions } = useRBAC(PERMISSIONS.map((action) => ({ action, subject: slug })));\n\n const version = useHistoryContext('VersionHeader', (state) => state.selectedVersion);\n const mainField = useHistoryContext('VersionHeader', (state) => state.mainField);\n const schema = useHistoryContext('VersionHeader', (state) => state.schema);\n const isCurrentVersion = useHistoryContext(\n 'VersionHeader',\n (state) => state.page === 1 && state.versions.data[0].id === state.selectedVersion.id\n );\n\n const mainFieldValue = version.data[mainField];\n\n const getNextNavigation = (): To => {\n const pluginsQueryParams = stringify({ plugins: query.plugins }, { encode: false });\n\n return {\n pathname: '..',\n search: pluginsQueryParams,\n };\n };\n\n const handleRestore = async () => {\n try {\n const response = await restoreVersion({\n documentId: version.relatedDocumentId,\n collectionType,\n params: {\n versionId: version.id,\n contentType: version.contentType,\n },\n body: { contentType: version.contentType },\n });\n\n if ('data' in response) {\n navigate(getNextNavigation(), { relative: 'path' });\n\n toggleNotification({\n type: 'success',\n title: formatMessage({\n id: 'content-manager.restore.success.title',\n defaultMessage: 'Version restored.',\n }),\n message: formatMessage({\n id: 'content-manager.restore.success.message',\n defaultMessage: 'A past version of the content was restored.',\n }),\n });\n\n trackUsage('didRestoreHistoryVersion');\n }\n\n if ('error' in response) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'content-manager.history.restore.error.message',\n defaultMessage: 'Could not restore version.',\n }),\n });\n }\n } catch (error) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n return (\n <Dialog.Root open={isConfirmDialogOpen} onOpenChange={setIsConfirmDialogOpen}>\n <Layouts.BaseHeader\n id={headerId}\n title={formatDate(new Date(version.createdAt), {\n year: 'numeric',\n month: 'numeric',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n })}\n subtitle={\n <Typography variant=\"epsilon\" textColor=\"neutral600\">\n {formatMessage(\n {\n id: 'content-manager.history.version.subtitle',\n defaultMessage:\n '{hasLocale, select, true {{subtitle}, in {locale}} other {{subtitle}}}',\n },\n {\n hasLocale: Boolean(version.locale),\n subtitle: `${mainFieldValue || ''} (${schema.info.singularName})`.trim(),\n locale: version.locale?.name,\n }\n )}\n </Typography>\n }\n navigationAction={\n <Link\n startIcon={<ArrowLeft />}\n tag={NavLink}\n to={getNextNavigation()}\n relative=\"path\"\n isExternal={false}\n >\n {formatMessage({\n id: 'global.back',\n defaultMessage: 'Back',\n })}\n </Link>\n }\n sticky={false}\n primaryAction={\n <Dialog.Trigger>\n <Button\n disabled={!allowedActions.canUpdate || isCurrentVersion}\n onClick={() => {\n setIsConfirmDialogOpen(true);\n }}\n >\n {formatMessage({\n id: 'content-manager.history.restore.confirm.button',\n defaultMessage: 'Restore',\n })}\n </Button>\n </Dialog.Trigger>\n }\n />\n <ConfirmDialog\n onConfirm={handleRestore}\n endAction={\n <Button variant=\"secondary\" onClick={handleRestore} loading={isLoading}>\n {formatMessage({\n id: 'content-manager.history.restore.confirm.button',\n defaultMessage: 'Restore',\n })}\n </Button>\n }\n >\n <Flex\n direction=\"column\"\n alignItems=\"center\"\n justifyContent=\"center\"\n gap={2}\n textAlign=\"center\"\n >\n <Flex justifyContent=\"center\">\n <WarningCircle width=\"24px\" height=\"24px\" fill=\"danger600\" />\n </Flex>\n <Typography>\n {formatMessage({\n id: 'content-manager.history.restore.confirm.title',\n defaultMessage: 'Are you sure you want to restore this version?',\n })}\n </Typography>\n <Typography>\n {formatMessage(\n {\n id: 'content-manager.history.restore.confirm.message',\n defaultMessage:\n \"{isDraft, select, true {The restored content will override your draft.} other {The restored content won't be published, it will override the draft and be saved as pending changes. You'll be able to publish the changes at anytime.}}\",\n },\n {\n isDraft: version.status === 'draft',\n }\n )}\n </Typography>\n </Flex>\n </ConfirmDialog>\n </Dialog.Root>\n );\n};\n"],"names":["VersionHeader","headerId","isConfirmDialogOpen","setIsConfirmDialogOpen","React","useState","navigate","useNavigate","formatMessage","formatDate","useIntl","trackUsage","useTracking","toggleNotification","useNotification","query","useQueryParams","collectionType","slug","useParams","restoreVersion","isLoading","useRestoreVersionMutation","allowedActions","useRBAC","PERMISSIONS","map","action","subject","version","useHistoryContext","state","selectedVersion","mainField","schema","isCurrentVersion","page","versions","data","id","mainFieldValue","getNextNavigation","pluginsQueryParams","stringify","plugins","encode","pathname","search","handleRestore","response","documentId","relatedDocumentId","params","versionId","contentType","body","relative","type","title","defaultMessage","message","error","_jsxs","Dialog","Root","open","onOpenChange","_jsx","Layouts","BaseHeader","Date","createdAt","year","month","day","hour","minute","subtitle","Typography","variant","textColor","hasLocale","Boolean","locale","info","singularName","trim","name","navigationAction","Link","startIcon","ArrowLeft","tag","NavLink","to","isExternal","sticky","primaryAction","Trigger","Button","disabled","canUpdate","onClick","ConfirmDialog","onConfirm","endAction","loading","Flex","direction","alignItems","justifyContent","gap","textAlign","WarningCircle","width","height","fill","isDraft","status"],"mappings":"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"}
1
+ {"version":3,"file":"VersionHeader.mjs","sources":["../../../../admin/src/history/components/VersionHeader.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n ConfirmDialog,\n useNotification,\n useQueryParams,\n useTracking,\n useRBAC,\n Layouts,\n GradientBadge,\n} from '@strapi/admin/strapi-admin';\nimport { Button, Typography, Flex, Link, Dialog } from '@strapi/design-system';\nimport { ArrowLeft, WarningCircle } from '@strapi/icons';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useNavigate, useParams, type To } from 'react-router-dom';\n\nimport { PERMISSIONS } from '../../constants/plugin';\nimport { useHistoryContext } from '../pages/History';\nimport { useRestoreVersionMutation } from '../services/historyVersion';\n\nimport type { UID } from '@strapi/types';\n\ninterface VersionHeaderProps {\n headerId: string;\n}\n\nexport const VersionHeader = ({ headerId }: VersionHeaderProps) => {\n const [isConfirmDialogOpen, setIsConfirmDialogOpen] = React.useState(false);\n const navigate = useNavigate();\n const { formatMessage, formatDate } = useIntl();\n const { trackUsage } = useTracking();\n const { toggleNotification } = useNotification();\n const [{ query }] = useQueryParams<{\n plugins?: Record<string, unknown>;\n }>();\n const { collectionType, slug } = useParams<{ collectionType: string; slug: UID.ContentType }>();\n const [restoreVersion, { isLoading }] = useRestoreVersionMutation();\n const { allowedActions } = useRBAC(PERMISSIONS.map((action) => ({ action, subject: slug })));\n\n const version = useHistoryContext('VersionHeader', (state) => state.selectedVersion);\n const mainField = useHistoryContext('VersionHeader', (state) => state.mainField);\n const schema = useHistoryContext('VersionHeader', (state) => state.schema);\n const isCurrentVersion = useHistoryContext(\n 'VersionHeader',\n (state) => state.page === 1 && state.versions.data[0].id === state.selectedVersion.id\n );\n\n const mainFieldValue = version.data[mainField];\n\n const getNextNavigation = (): To => {\n const pluginsQueryParams = stringify({ plugins: query.plugins }, { encode: false });\n\n return {\n pathname: '..',\n search: pluginsQueryParams,\n };\n };\n\n const handleRestore = async () => {\n try {\n const response = await restoreVersion({\n documentId: version.relatedDocumentId,\n collectionType,\n params: {\n versionId: version.id,\n contentType: version.contentType,\n },\n body: { contentType: version.contentType },\n });\n\n if ('data' in response) {\n navigate(getNextNavigation(), { relative: 'path' });\n\n toggleNotification({\n type: 'success',\n title: formatMessage({\n id: 'content-manager.restore.success.title',\n defaultMessage: 'Version restored.',\n }),\n message: formatMessage({\n id: 'content-manager.restore.success.message',\n defaultMessage: 'A past version of the content was restored.',\n }),\n });\n\n trackUsage('didRestoreHistoryVersion');\n }\n\n if ('error' in response) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'content-manager.history.restore.error.message',\n defaultMessage: 'Could not restore version.',\n }),\n });\n }\n } catch (error) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n return (\n <Dialog.Root open={isConfirmDialogOpen} onOpenChange={setIsConfirmDialogOpen}>\n <Layouts.BaseHeader\n id={headerId}\n title={formatDate(new Date(version.createdAt), {\n year: 'numeric',\n month: 'numeric',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n })}\n secondaryAction={\n <GradientBadge\n label={formatMessage({\n id: 'components.premiumFeature.title',\n defaultMessage: 'Premium feature',\n })}\n />\n }\n subtitle={\n <Typography variant=\"epsilon\" textColor=\"neutral600\">\n {formatMessage(\n {\n id: 'content-manager.history.version.subtitle',\n defaultMessage:\n '{hasLocale, select, true {{subtitle}, in {locale}} other {{subtitle}}}',\n },\n {\n hasLocale: Boolean(version.locale),\n subtitle: `${mainFieldValue || ''} (${schema.info.singularName})`.trim(),\n locale: version.locale?.name,\n }\n )}\n </Typography>\n }\n navigationAction={\n <Link\n startIcon={<ArrowLeft />}\n tag={NavLink}\n to={getNextNavigation()}\n relative=\"path\"\n isExternal={false}\n >\n {formatMessage({\n id: 'global.back',\n defaultMessage: 'Back',\n })}\n </Link>\n }\n sticky={false}\n primaryAction={\n <Dialog.Trigger>\n <Button\n disabled={!allowedActions.canUpdate || isCurrentVersion}\n onClick={() => {\n setIsConfirmDialogOpen(true);\n }}\n >\n {formatMessage({\n id: 'content-manager.history.restore.confirm.button',\n defaultMessage: 'Restore',\n })}\n </Button>\n </Dialog.Trigger>\n }\n />\n <ConfirmDialog\n onConfirm={handleRestore}\n endAction={\n <Button variant=\"secondary\" onClick={handleRestore} loading={isLoading}>\n {formatMessage({\n id: 'content-manager.history.restore.confirm.button',\n defaultMessage: 'Restore',\n })}\n </Button>\n }\n >\n <Flex\n direction=\"column\"\n alignItems=\"center\"\n justifyContent=\"center\"\n gap={2}\n textAlign=\"center\"\n >\n <Flex justifyContent=\"center\">\n <WarningCircle width=\"24px\" height=\"24px\" fill=\"danger600\" />\n </Flex>\n <Typography>\n {formatMessage({\n id: 'content-manager.history.restore.confirm.title',\n defaultMessage: 'Are you sure you want to restore this version?',\n })}\n </Typography>\n <Typography>\n {formatMessage(\n {\n id: 'content-manager.history.restore.confirm.message',\n defaultMessage:\n \"{isDraft, select, true {The restored content will override your draft.} other {The restored content won't be published, it will override the draft and be saved as pending changes. You'll be able to publish the changes at anytime.}}\",\n },\n {\n isDraft: version.status === 'draft',\n }\n )}\n </Typography>\n </Flex>\n </ConfirmDialog>\n </Dialog.Root>\n );\n};\n"],"names":["VersionHeader","headerId","isConfirmDialogOpen","setIsConfirmDialogOpen","React","useState","navigate","useNavigate","formatMessage","formatDate","useIntl","trackUsage","useTracking","toggleNotification","useNotification","query","useQueryParams","collectionType","slug","useParams","restoreVersion","isLoading","useRestoreVersionMutation","allowedActions","useRBAC","PERMISSIONS","map","action","subject","version","useHistoryContext","state","selectedVersion","mainField","schema","isCurrentVersion","page","versions","data","id","mainFieldValue","getNextNavigation","pluginsQueryParams","stringify","plugins","encode","pathname","search","handleRestore","response","documentId","relatedDocumentId","params","versionId","contentType","body","relative","type","title","defaultMessage","message","error","_jsxs","Dialog","Root","open","onOpenChange","_jsx","Layouts","BaseHeader","Date","createdAt","year","month","day","hour","minute","secondaryAction","GradientBadge","label","subtitle","Typography","variant","textColor","hasLocale","Boolean","locale","info","singularName","trim","name","navigationAction","Link","startIcon","ArrowLeft","tag","NavLink","to","isExternal","sticky","primaryAction","Trigger","Button","disabled","canUpdate","onClick","ConfirmDialog","onConfirm","endAction","loading","Flex","direction","alignItems","justifyContent","gap","textAlign","WarningCircle","width","height","fill","isDraft","status"],"mappings":"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"}
@@ -454,7 +454,9 @@ const DEFAULT_UNEXPECTED_ERROR_MSG = {
454
454
  }
455
455
  trackUsage('didCreateEntry', {
456
456
  ...trackerProperty,
457
- documentId: res.data.data.documentId
457
+ documentId: res.data.data.documentId,
458
+ fromPreview,
459
+ fromRelationModal
458
460
  });
459
461
  toggleNotification({
460
462
  type: 'success',
@@ -480,16 +482,21 @@ const DEFAULT_UNEXPECTED_ERROR_MSG = {
480
482
  createDocument,
481
483
  formatAPIError,
482
484
  formatMessage,
485
+ fromPreview,
486
+ fromRelationModal,
483
487
  setCurrentStep,
484
488
  toggleNotification,
485
489
  trackUsage
486
490
  ]);
487
491
  const [autoCloneDocument] = documents.useAutoCloneDocumentMutation();
488
- const autoClone = React__namespace.useCallback(async ({ model, sourceId })=>{
492
+ const autoClone = React__namespace.useCallback(async ({ model, sourceId, locale })=>{
489
493
  try {
490
494
  const res = await autoCloneDocument({
491
495
  model,
492
- sourceId
496
+ sourceId,
497
+ params: locale ? {
498
+ locale
499
+ } : undefined
493
500
  });
494
501
  if ('error' in res) {
495
502
  return {
@@ -519,7 +526,8 @@ const DEFAULT_UNEXPECTED_ERROR_MSG = {
519
526
  const [cloneDocument] = documents.useCloneDocumentMutation();
520
527
  const clone = React__namespace.useCallback(async ({ model, documentId, params }, body, trackerProperty)=>{
521
528
  try {
522
- const { id: _id, ...restBody } = body;
529
+ // Omit id and documentId so they are not copied to the clone
530
+ const { id: _id, documentId: _documentId, ...restBody } = body;
523
531
  /**
524
532
  * If we're cloning we want to post directly to this endpoint
525
533
  * so that the relations even if they're not listed in the EditView