@strapi/content-manager 0.0.0-experimental.36632203b17974c18103c138ffbef53a82e448c3 → 0.0.0-experimental.382d4503a015dbc8e8850b92e67c203a76d9dfdb

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 (170) hide show
  1. package/dist/_chunks/CardDragPreview-C0QyJgRA.js.map +1 -1
  2. package/dist/_chunks/CardDragPreview-DOxamsuj.mjs.map +1 -1
  3. package/dist/_chunks/{ComponentConfigurationPage-DhwMhiRn.mjs → ComponentConfigurationPage-D4H-v0et.mjs} +3 -3
  4. package/dist/_chunks/{ComponentConfigurationPage-DhwMhiRn.mjs.map → ComponentConfigurationPage-D4H-v0et.mjs.map} +1 -1
  5. package/dist/_chunks/{ComponentConfigurationPage-Br8hp2Xt.js → ComponentConfigurationPage-DdkVGfXC.js} +4 -5
  6. package/dist/_chunks/{ComponentConfigurationPage-Br8hp2Xt.js.map → ComponentConfigurationPage-DdkVGfXC.js.map} +1 -1
  7. package/dist/_chunks/{ComponentIcon-BXdiCGQp.js → ComponentIcon-CRbtQEUV.js} +2 -3
  8. package/dist/_chunks/{ComponentIcon-BXdiCGQp.js.map → ComponentIcon-CRbtQEUV.js.map} +1 -1
  9. package/dist/_chunks/ComponentIcon-u4bIXTFY.mjs.map +1 -1
  10. package/dist/_chunks/{EditConfigurationPage-CWao3CZ3.mjs → EditConfigurationPage-D1nvB7Br.mjs} +3 -3
  11. package/dist/_chunks/{EditConfigurationPage-CWao3CZ3.mjs.map → EditConfigurationPage-D1nvB7Br.mjs.map} +1 -1
  12. package/dist/_chunks/{EditConfigurationPage-BG7rpPjL.js → EditConfigurationPage-LYEvR4fW.js} +4 -5
  13. package/dist/_chunks/{EditConfigurationPage-BG7rpPjL.js.map → EditConfigurationPage-LYEvR4fW.js.map} +1 -1
  14. package/dist/_chunks/{EditViewPage-hiwZg61J.mjs → EditViewPage-Bcnff6Vd.mjs} +19 -58
  15. package/dist/_chunks/EditViewPage-Bcnff6Vd.mjs.map +1 -0
  16. package/dist/_chunks/{EditViewPage-BUtpHsMz.js → EditViewPage-DqelJ9UK.js} +22 -62
  17. package/dist/_chunks/EditViewPage-DqelJ9UK.js.map +1 -0
  18. package/dist/_chunks/FieldTypeIcon-CMlNO8PE.mjs.map +1 -1
  19. package/dist/_chunks/FieldTypeIcon-Dnwq_IRF.js.map +1 -1
  20. package/dist/_chunks/{Form-v5pkY-X_.js → Form-CnHfBeiB.js} +5 -6
  21. package/dist/_chunks/{Form-v5pkY-X_.js.map → Form-CnHfBeiB.js.map} +1 -1
  22. package/dist/_chunks/{Form-DwJovCha.mjs → Form-CzPCJi3B.mjs} +3 -3
  23. package/dist/_chunks/{Form-DwJovCha.mjs.map → Form-CzPCJi3B.mjs.map} +1 -1
  24. package/dist/_chunks/{History-B9uJsxZl.mjs → History-CcmSn3Mj.mjs} +37 -60
  25. package/dist/_chunks/History-CcmSn3Mj.mjs.map +1 -0
  26. package/dist/_chunks/{History-40apIShV.js → History-zArjENzj.js} +48 -72
  27. package/dist/_chunks/History-zArjENzj.js.map +1 -0
  28. package/dist/_chunks/{Field-DEdug-Ll.js → Input-CDHKQd7o.js} +1294 -1271
  29. package/dist/_chunks/Input-CDHKQd7o.js.map +1 -0
  30. package/dist/_chunks/{Field-BQQLwyUs.mjs → Input-aV8SSoTa.mjs} +1333 -1310
  31. package/dist/_chunks/Input-aV8SSoTa.mjs.map +1 -0
  32. package/dist/_chunks/{ListConfigurationPage-CA4oi4Hj.mjs → ListConfigurationPage-BPvzENJJ.mjs} +6 -5
  33. package/dist/_chunks/ListConfigurationPage-BPvzENJJ.mjs.map +1 -0
  34. package/dist/_chunks/{ListConfigurationPage-DAGbWDIL.js → ListConfigurationPage-ByZAO_9H.js} +6 -6
  35. package/dist/_chunks/ListConfigurationPage-ByZAO_9H.js.map +1 -0
  36. package/dist/_chunks/{ListViewPage-CjaHQ2_V.js → ListViewPage-BVKBeQAA.js} +74 -60
  37. package/dist/_chunks/ListViewPage-BVKBeQAA.js.map +1 -0
  38. package/dist/_chunks/{ListViewPage-Ca8F1NL-.mjs → ListViewPage-HljQVnFH.mjs} +68 -53
  39. package/dist/_chunks/ListViewPage-HljQVnFH.mjs.map +1 -0
  40. package/dist/_chunks/{NoContentTypePage-CGxqLI8j.js → NoContentTypePage-BV5zfDxr.js} +2 -2
  41. package/dist/_chunks/{NoContentTypePage-CGxqLI8j.js.map → NoContentTypePage-BV5zfDxr.js.map} +1 -1
  42. package/dist/_chunks/{NoContentTypePage-CwfnU-aN.mjs → NoContentTypePage-BfHaSM-K.mjs} +2 -2
  43. package/dist/_chunks/{NoContentTypePage-CwfnU-aN.mjs.map → NoContentTypePage-BfHaSM-K.mjs.map} +1 -1
  44. package/dist/_chunks/{NoPermissionsPage-iPk2lFR6.mjs → NoPermissionsPage-D6ze2nQL.mjs} +2 -2
  45. package/dist/_chunks/{NoPermissionsPage-iPk2lFR6.mjs.map → NoPermissionsPage-D6ze2nQL.mjs.map} +1 -1
  46. package/dist/_chunks/{NoPermissionsPage-CY3_QduF.js → NoPermissionsPage-vdNpc6jb.js} +2 -2
  47. package/dist/_chunks/{NoPermissionsPage-CY3_QduF.js.map → NoPermissionsPage-vdNpc6jb.js.map} +1 -1
  48. package/dist/_chunks/{Preview-V8XOfrQf.js → Preview-DEHdENT1.js} +95 -76
  49. package/dist/_chunks/Preview-DEHdENT1.js.map +1 -0
  50. package/dist/_chunks/{Preview-DRJhcaIO.mjs → Preview-vfWOtPG5.mjs} +97 -77
  51. package/dist/_chunks/Preview-vfWOtPG5.mjs.map +1 -0
  52. package/dist/_chunks/{Relations-DGWa9W2j.mjs → Relations-B7_hbF0w.mjs} +9 -10
  53. package/dist/_chunks/Relations-B7_hbF0w.mjs.map +1 -0
  54. package/dist/_chunks/{Relations-CGerEwji.js → Relations-DcoOBejP.js} +10 -12
  55. package/dist/_chunks/Relations-DcoOBejP.js.map +1 -0
  56. package/dist/_chunks/{en-CHOp_xJv.js → en-BR48D_RH.js} +13 -3
  57. package/dist/_chunks/{en-CHOp_xJv.js.map → en-BR48D_RH.js.map} +1 -1
  58. package/dist/_chunks/{en-D_BMf0hT.mjs → en-D65uIF6Y.mjs} +13 -3
  59. package/dist/_chunks/{en-D_BMf0hT.mjs.map → en-D65uIF6Y.mjs.map} +1 -1
  60. package/dist/_chunks/{fr-B2Kyv8Z9.js → fr-C43IbhA_.js} +4 -1
  61. package/dist/_chunks/{fr-B2Kyv8Z9.js.map → fr-C43IbhA_.js.map} +1 -1
  62. package/dist/_chunks/{fr--pg5jUbt.mjs → fr-DBseuRuB.mjs} +4 -1
  63. package/dist/_chunks/{fr--pg5jUbt.mjs.map → fr-DBseuRuB.mjs.map} +1 -1
  64. package/dist/_chunks/hooks-BAaaKPS_.js.map +1 -1
  65. package/dist/_chunks/{index-tN1hpOMN.js → index-CxLSGwnk.js} +541 -248
  66. package/dist/_chunks/index-CxLSGwnk.js.map +1 -0
  67. package/dist/_chunks/{index-V8MWkDSd.mjs → index-EH8ZtHd5.mjs} +559 -265
  68. package/dist/_chunks/index-EH8ZtHd5.mjs.map +1 -0
  69. package/dist/_chunks/{layout-Bue_C6ui.mjs → layout-CxDMdJ13.mjs} +4 -4
  70. package/dist/_chunks/{layout-Bue_C6ui.mjs.map → layout-CxDMdJ13.mjs.map} +1 -1
  71. package/dist/_chunks/{layout-BzX903CL.js → layout-DSeUTfMv.js} +5 -6
  72. package/dist/_chunks/{layout-BzX903CL.js.map → layout-DSeUTfMv.js.map} +1 -1
  73. package/dist/_chunks/objects-BcXOv6_9.js.map +1 -1
  74. package/dist/_chunks/objects-D6yBsdmx.mjs.map +1 -1
  75. package/dist/_chunks/{relations-C8eyDiIO.mjs → relations-B8_Uu38Q.mjs} +17 -3
  76. package/dist/_chunks/relations-B8_Uu38Q.mjs.map +1 -0
  77. package/dist/_chunks/{relations-C4HcWYYJ.js → relations-S5nNKdN3.js} +16 -2
  78. package/dist/_chunks/relations-S5nNKdN3.js.map +1 -0
  79. package/dist/_chunks/{useDragAndDrop-J0TUUbR6.js → useDragAndDrop-BMtgCYzL.js} +5 -9
  80. package/dist/_chunks/{useDragAndDrop-J0TUUbR6.js.map → useDragAndDrop-BMtgCYzL.js.map} +1 -1
  81. package/dist/_chunks/{useDragAndDrop-DdHgKsqq.mjs → useDragAndDrop-DJ6jqvZN.mjs} +4 -7
  82. package/dist/_chunks/{useDragAndDrop-DdHgKsqq.mjs.map → useDragAndDrop-DJ6jqvZN.mjs.map} +1 -1
  83. package/dist/_chunks/{useDebounce-CtcjDB3L.js → usePrev-B9w_-eYc.js} +1 -14
  84. package/dist/_chunks/usePrev-B9w_-eYc.js.map +1 -0
  85. package/dist/_chunks/usePrev-DH6iah0A.mjs +16 -0
  86. package/dist/_chunks/usePrev-DH6iah0A.mjs.map +1 -0
  87. package/dist/admin/index.js +2 -1
  88. package/dist/admin/index.js.map +1 -1
  89. package/dist/admin/index.mjs +6 -5
  90. package/dist/admin/src/content-manager.d.ts +3 -2
  91. package/dist/admin/src/exports.d.ts +1 -0
  92. package/dist/admin/src/history/services/historyVersion.d.ts +1 -1
  93. package/dist/admin/src/hooks/useDocument.d.ts +19 -2
  94. package/dist/admin/src/pages/EditView/components/DocumentActions.d.ts +1 -1
  95. package/dist/admin/src/pages/EditView/components/DocumentStatus.d.ts +3 -3
  96. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.d.ts +7 -0
  97. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/utils/prismLanguages.d.ts +49 -0
  98. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/utils/constants.d.ts +1 -0
  99. package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.d.ts +4 -1
  100. package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/Field.d.ts +4 -1
  101. package/dist/admin/src/pages/EditView/components/FormLayout.d.ts +27 -0
  102. package/dist/admin/src/pages/EditView/utils/data.d.ts +1 -0
  103. package/dist/admin/src/preview/components/PreviewContent.d.ts +2 -0
  104. package/dist/admin/src/preview/pages/Preview.d.ts +1 -1
  105. package/dist/admin/src/preview/services/preview.d.ts +1 -1
  106. package/dist/admin/src/router.d.ts +1 -1
  107. package/dist/admin/src/services/api.d.ts +1 -1
  108. package/dist/admin/src/services/components.d.ts +2 -2
  109. package/dist/admin/src/services/contentTypes.d.ts +3 -3
  110. package/dist/admin/src/services/documents.d.ts +16 -19
  111. package/dist/admin/src/services/init.d.ts +1 -1
  112. package/dist/admin/src/services/relations.d.ts +2 -2
  113. package/dist/admin/src/services/uid.d.ts +3 -3
  114. package/dist/server/index.js +230 -187
  115. package/dist/server/index.js.map +1 -1
  116. package/dist/server/index.mjs +231 -187
  117. package/dist/server/index.mjs.map +1 -1
  118. package/dist/server/src/controllers/utils/metadata.d.ts +1 -0
  119. package/dist/server/src/controllers/utils/metadata.d.ts.map +1 -1
  120. package/dist/server/src/history/controllers/history-version.d.ts +1 -1
  121. package/dist/server/src/history/controllers/history-version.d.ts.map +1 -1
  122. package/dist/server/src/history/services/history.d.ts +3 -3
  123. package/dist/server/src/history/services/history.d.ts.map +1 -1
  124. package/dist/server/src/history/services/utils.d.ts +6 -10
  125. package/dist/server/src/history/services/utils.d.ts.map +1 -1
  126. package/dist/server/src/index.d.ts +3 -2
  127. package/dist/server/src/index.d.ts.map +1 -1
  128. package/dist/server/src/preview/controllers/validation/preview.d.ts.map +1 -1
  129. package/dist/server/src/preview/index.d.ts.map +1 -1
  130. package/dist/server/src/preview/services/index.d.ts +1 -0
  131. package/dist/server/src/preview/services/index.d.ts.map +1 -1
  132. package/dist/server/src/preview/services/preview-config.d.ts +2 -0
  133. package/dist/server/src/preview/services/preview-config.d.ts.map +1 -1
  134. package/dist/server/src/preview/utils.d.ts +1 -0
  135. package/dist/server/src/preview/utils.d.ts.map +1 -1
  136. package/dist/server/src/register.d.ts.map +1 -1
  137. package/dist/server/src/services/document-manager.d.ts.map +1 -1
  138. package/dist/server/src/services/document-metadata.d.ts +4 -2
  139. package/dist/server/src/services/document-metadata.d.ts.map +1 -1
  140. package/dist/server/src/services/index.d.ts +3 -2
  141. package/dist/server/src/services/index.d.ts.map +1 -1
  142. package/dist/server/src/services/utils/configuration/index.d.ts +2 -2
  143. package/dist/server/src/services/utils/configuration/layouts.d.ts +2 -2
  144. package/dist/server/src/services/utils/populate.d.ts +2 -2
  145. package/dist/server/src/services/utils/populate.d.ts.map +1 -1
  146. package/package.json +12 -11
  147. package/dist/_chunks/EditViewPage-BUtpHsMz.js.map +0 -1
  148. package/dist/_chunks/EditViewPage-hiwZg61J.mjs.map +0 -1
  149. package/dist/_chunks/Field-BQQLwyUs.mjs.map +0 -1
  150. package/dist/_chunks/Field-DEdug-Ll.js.map +0 -1
  151. package/dist/_chunks/History-40apIShV.js.map +0 -1
  152. package/dist/_chunks/History-B9uJsxZl.mjs.map +0 -1
  153. package/dist/_chunks/ListConfigurationPage-CA4oi4Hj.mjs.map +0 -1
  154. package/dist/_chunks/ListConfigurationPage-DAGbWDIL.js.map +0 -1
  155. package/dist/_chunks/ListViewPage-Ca8F1NL-.mjs.map +0 -1
  156. package/dist/_chunks/ListViewPage-CjaHQ2_V.js.map +0 -1
  157. package/dist/_chunks/Preview-DRJhcaIO.mjs.map +0 -1
  158. package/dist/_chunks/Preview-V8XOfrQf.js.map +0 -1
  159. package/dist/_chunks/Relations-CGerEwji.js.map +0 -1
  160. package/dist/_chunks/Relations-DGWa9W2j.mjs.map +0 -1
  161. package/dist/_chunks/index-V8MWkDSd.mjs.map +0 -1
  162. package/dist/_chunks/index-tN1hpOMN.js.map +0 -1
  163. package/dist/_chunks/relations-C4HcWYYJ.js.map +0 -1
  164. package/dist/_chunks/relations-C8eyDiIO.mjs.map +0 -1
  165. package/dist/_chunks/useDebounce-CtcjDB3L.js.map +0 -1
  166. package/dist/_chunks/useDebounce-DmuSJIF3.mjs +0 -29
  167. package/dist/_chunks/useDebounce-DmuSJIF3.mjs.map +0 -1
  168. package/dist/admin/src/preview/constants.d.ts +0 -1
  169. package/dist/server/src/preview/constants.d.ts +0 -2
  170. package/dist/server/src/preview/constants.d.ts.map +0 -1
@@ -3,7 +3,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const jsxRuntime = require("react/jsx-runtime");
4
4
  const strapiAdmin = require("@strapi/admin/strapi-admin");
5
5
  const reactIntl = require("react-intl");
6
- const index = require("./index-tN1hpOMN.js");
6
+ const index = require("./index-CxLSGwnk.js");
7
7
  const NoPermissions = () => {
8
8
  const { formatMessage } = reactIntl.useIntl();
9
9
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
@@ -20,4 +20,4 @@ const NoPermissions = () => {
20
20
  ] });
21
21
  };
22
22
  exports.NoPermissions = NoPermissions;
23
- //# sourceMappingURL=NoPermissionsPage-CY3_QduF.js.map
23
+ //# sourceMappingURL=NoPermissionsPage-vdNpc6jb.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"NoPermissionsPage-CY3_QduF.js","sources":["../../admin/src/pages/NoPermissionsPage.tsx"],"sourcesContent":["import { Page, Layouts } from '@strapi/admin/strapi-admin';\nimport { useIntl } from 'react-intl';\n\nimport { getTranslation } from '../utils/translations';\n\nconst NoPermissions = () => {\n const { formatMessage } = useIntl();\n\n return (\n <>\n <Layouts.Header\n title={formatMessage({\n id: getTranslation('header.name'),\n defaultMessage: 'Content',\n })}\n />\n <Layouts.Content>\n <Page.NoPermissions />\n </Layouts.Content>\n </>\n );\n};\n\nexport { NoPermissions };\n"],"names":["useIntl","jsxs","Fragment","jsx","Layouts","getTranslation","Page"],"mappings":";;;;;;AAKA,MAAM,gBAAgB,MAAM;AACpB,QAAA,EAAE,kBAAkBA,UAAAA;AAE1B,SAEIC,2BAAA,KAAAC,qBAAA,EAAA,UAAA;AAAA,IAAAC,2BAAA;AAAA,MAACC,YAAAA,QAAQ;AAAA,MAAR;AAAA,QACC,OAAO,cAAc;AAAA,UACnB,IAAIC,qBAAe,aAAa;AAAA,UAChC,gBAAgB;AAAA,QAAA,CACjB;AAAA,MAAA;AAAA,IACH;AAAA,IACAF,+BAACC,YAAAA,QAAQ,SAAR,EACC,yCAACE,iBAAK,eAAL,CAAmB,CAAA,GACtB;AAAA,EACF,EAAA,CAAA;AAEJ;;"}
1
+ {"version":3,"file":"NoPermissionsPage-vdNpc6jb.js","sources":["../../admin/src/pages/NoPermissionsPage.tsx"],"sourcesContent":["import { Page, Layouts } from '@strapi/admin/strapi-admin';\nimport { useIntl } from 'react-intl';\n\nimport { getTranslation } from '../utils/translations';\n\nconst NoPermissions = () => {\n const { formatMessage } = useIntl();\n\n return (\n <>\n <Layouts.Header\n title={formatMessage({\n id: getTranslation('header.name'),\n defaultMessage: 'Content',\n })}\n />\n <Layouts.Content>\n <Page.NoPermissions />\n </Layouts.Content>\n </>\n );\n};\n\nexport { NoPermissions };\n"],"names":["useIntl","jsxs","Fragment","jsx","Layouts","getTranslation","Page"],"mappings":";;;;;;AAKA,MAAM,gBAAgB,MAAM;AACpB,QAAA,EAAE,cAAc,IAAIA,kBAAQ;AAElC,SAEIC,2BAAA,KAAAC,qBAAA,EAAA,UAAA;AAAA,IAAAC,2BAAA;AAAA,MAACC,YAAAA,QAAQ;AAAA,MAAR;AAAA,QACC,OAAO,cAAc;AAAA,UACnB,IAAIC,qBAAe,aAAa;AAAA,UAChC,gBAAgB;AAAA,QACjB,CAAA;AAAA,MAAA;AAAA,IACH;AAAA,IACAF,+BAACC,YAAAA,QAAQ,SAAR,EACC,yCAACE,YAAK,KAAA,eAAL,CAAA,CAAmB,EACtB,CAAA;AAAA,EAAA,GACF;AAEJ;;"}
@@ -6,13 +6,13 @@ const strapiAdmin = require("@strapi/admin/strapi-admin");
6
6
  const designSystem = require("@strapi/design-system");
7
7
  const reactIntl = require("react-intl");
8
8
  const reactRouterDom = require("react-router-dom");
9
- const index = require("./index-tN1hpOMN.js");
9
+ const index = require("./index-CxLSGwnk.js");
10
10
  const Icons = require("@strapi/icons");
11
11
  const qs = require("qs");
12
- const EditViewPage = require("./EditViewPage-BUtpHsMz.js");
12
+ const styledComponents = require("styled-components");
13
+ const EditViewPage = require("./EditViewPage-DqelJ9UK.js");
13
14
  function _interopNamespace(e) {
14
- if (e && e.__esModule)
15
- return e;
15
+ if (e && e.__esModule) return e;
16
16
  const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
17
17
  if (e) {
18
18
  for (const k in e) {
@@ -29,30 +29,51 @@ function _interopNamespace(e) {
29
29
  return Object.freeze(n);
30
30
  }
31
31
  const React__namespace = /* @__PURE__ */ _interopNamespace(React);
32
+ const PreviewContent = () => {
33
+ const previewUrl = usePreviewContext("PreviewContent", (state) => state.url);
34
+ const { formatMessage } = reactIntl.useIntl();
35
+ return /* @__PURE__ */ jsxRuntime.jsx(
36
+ designSystem.Box,
37
+ {
38
+ src: previewUrl,
39
+ title: formatMessage({
40
+ id: "content-manager.preview.panel.title",
41
+ defaultMessage: "Preview"
42
+ }),
43
+ width: "100%",
44
+ height: "100%",
45
+ borderWidth: 0,
46
+ tag: "iframe"
47
+ },
48
+ previewUrl
49
+ );
50
+ };
32
51
  const ClosePreviewButton = () => {
33
52
  const [{ query }] = strapiAdmin.useQueryParams();
34
- const navigate = reactRouterDom.useNavigate();
35
53
  const { formatMessage } = reactIntl.useIntl();
36
54
  const canGoBack = strapiAdmin.useHistory("BackButton", (state) => state.canGoBack);
37
55
  const goBack = strapiAdmin.useHistory("BackButton", (state) => state.goBack);
38
56
  const history = strapiAdmin.useHistory("BackButton", (state) => state.history);
39
- const fallbackUrl = {
57
+ const locationIndex = strapiAdmin.useHistory("BackButton", (state) => state.currentLocationIndex);
58
+ const historyTo = canGoBack ? history.at(locationIndex - 2) : void 0;
59
+ const fallback = {
40
60
  pathname: "..",
41
61
  search: qs.stringify(query, { encode: false })
42
62
  };
63
+ const toWithFallback = historyTo ?? fallback;
43
64
  const handleClick = (e) => {
44
- e.preventDefault();
45
65
  if (canGoBack) {
66
+ e.preventDefault();
46
67
  goBack();
47
- } else {
48
- navigate(fallbackUrl);
68
+ return;
49
69
  }
50
70
  };
51
71
  return /* @__PURE__ */ jsxRuntime.jsx(
52
72
  designSystem.IconButton,
53
73
  {
54
74
  tag: reactRouterDom.Link,
55
- to: history.at(-1) ?? fallbackUrl,
75
+ relative: "path",
76
+ to: toWithFallback,
56
77
  onClick: handleClick,
57
78
  label: formatMessage({
58
79
  id: "content-manager.preview.header.close",
@@ -62,72 +83,55 @@ const ClosePreviewButton = () => {
62
83
  }
63
84
  );
64
85
  };
65
- const getStatusData = (status) => {
66
- switch (status) {
67
- case "draft":
68
- return {
69
- background: "secondary100",
70
- border: "secondary200",
71
- text: "secondary700",
72
- message: {
73
- id: "content-manager.containers.List.draft",
74
- defaultMessage: "Draft"
75
- }
76
- };
77
- case "modified":
78
- return {
79
- background: "alternative100",
80
- border: "alternative200",
81
- text: "alternative700",
82
- message: {
83
- id: "content-manager.containers.List.modified",
84
- defaultMessage: "Modified"
85
- }
86
- };
87
- case "published":
88
- default:
89
- return {
90
- background: "success100",
91
- border: "success200",
92
- text: "success700",
93
- message: {
94
- id: "content-manager.containers.List.published",
95
- defaultMessage: "Published"
96
- }
97
- };
86
+ const Status = () => {
87
+ const document = usePreviewContext("PreviewHeader", (state) => state.document);
88
+ const schema = usePreviewContext("PreviewHeader", (state) => state.schema);
89
+ const meta = usePreviewContext("PreviewHeader", (state) => state.meta);
90
+ const hasDraftAndPublished = schema?.options?.draftAndPublish ?? false;
91
+ if (!hasDraftAndPublished) {
92
+ return null;
98
93
  }
94
+ const status = EditViewPage.getDocumentStatus(document, meta);
95
+ return /* @__PURE__ */ jsxRuntime.jsx(index.DocumentStatus, { status, size: "XS" });
99
96
  };
100
- const DocumentStatus = () => {
97
+ const PreviewTabs = () => {
101
98
  const { formatMessage } = reactIntl.useIntl();
99
+ const [{ query }, setQuery] = strapiAdmin.useQueryParams();
102
100
  const document = usePreviewContext("PreviewHeader", (state) => state.document);
103
101
  const schema = usePreviewContext("PreviewHeader", (state) => state.schema);
104
102
  const meta = usePreviewContext("PreviewHeader", (state) => state.meta);
105
- const hasDraftAndPublished = schema?.options?.draftAndPublish ?? false;
106
- const status = EditViewPage.getDocumentStatus(document, meta);
107
- const statusData = getStatusData(status);
108
- if (!hasDraftAndPublished) {
103
+ const hasDraftAndPublish = schema?.options?.draftAndPublish ?? false;
104
+ const documentStatus = EditViewPage.getDocumentStatus(document, meta);
105
+ const handleTabChange = (status) => {
106
+ if (status === "published" || status === "draft") {
107
+ setQuery({ status }, "push", true);
108
+ }
109
+ };
110
+ if (!hasDraftAndPublish) {
109
111
  return null;
110
112
  }
111
- return /* @__PURE__ */ jsxRuntime.jsx(
112
- designSystem.Box,
113
+ return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Tabs.Root, { variant: "simple", value: query.status || "draft", onValueChange: handleTabChange, children: /* @__PURE__ */ jsxRuntime.jsxs(
114
+ designSystem.Tabs.List,
113
115
  {
114
- background: statusData.background,
115
- borderStyle: "solid",
116
- borderWidth: "1px",
117
- borderColor: statusData.border,
118
- hasRadius: true,
119
- paddingLeft: "6px",
120
- paddingRight: "6px",
121
- paddingTop: "2px",
122
- paddingBottom: "2px",
123
- children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "pi", fontWeight: "bold", textColor: statusData.text, children: formatMessage(statusData.message) })
116
+ "aria-label": formatMessage({
117
+ id: "preview.tabs.label",
118
+ defaultMessage: "Document status"
119
+ }),
120
+ children: [
121
+ /* @__PURE__ */ jsxRuntime.jsx(StatusTab, { value: "draft", children: formatMessage({
122
+ id: "content-manager.containers.List.draft",
123
+ defaultMessage: "draft"
124
+ }) }),
125
+ /* @__PURE__ */ jsxRuntime.jsx(StatusTab, { value: "published", disabled: documentStatus === "draft", children: formatMessage({
126
+ id: "content-manager.containers.List.published",
127
+ defaultMessage: "published"
128
+ }) })
129
+ ]
124
130
  }
125
- );
131
+ ) }) });
126
132
  };
127
133
  const PreviewHeader = () => {
128
- const mainField = usePreviewContext("PreviewHeader", (state) => state.mainField);
129
- const document = usePreviewContext("PreviewHeader", (state) => state.document);
130
- const title = document[mainField];
134
+ const title = usePreviewContext("PreviewHeader", (state) => state.title);
131
135
  const { formatMessage } = reactIntl.useIntl();
132
136
  const { toggleNotification } = strapiAdmin.useNotification();
133
137
  const { copy } = strapiAdmin.useClipboard();
@@ -142,20 +146,23 @@ const PreviewHeader = () => {
142
146
  });
143
147
  };
144
148
  return /* @__PURE__ */ jsxRuntime.jsxs(
145
- designSystem.Flex,
149
+ designSystem.Grid.Root,
146
150
  {
147
- justifyContent: "space-between",
151
+ gap: 3,
152
+ gridCols: 3,
153
+ paddingLeft: 2,
154
+ paddingRight: 2,
148
155
  background: "neutral0",
149
- padding: 2,
150
156
  borderColor: "neutral150",
151
157
  tag: "header",
152
158
  children: [
153
- /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 3, children: [
159
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Grid.Item, { xs: 1, paddingTop: 2, paddingBottom: 2, gap: 3, children: [
154
160
  /* @__PURE__ */ jsxRuntime.jsx(ClosePreviewButton, {}),
155
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { tag: "h1", fontWeight: 600, fontSize: 2, children: title }),
156
- /* @__PURE__ */ jsxRuntime.jsx(DocumentStatus, {})
161
+ /* @__PURE__ */ jsxRuntime.jsx(PreviewTitle, { tag: "h1", fontWeight: 600, fontSize: 2, maxWidth: "200px", title, children: title }),
162
+ /* @__PURE__ */ jsxRuntime.jsx(Status, {})
157
163
  ] }),
158
- /* @__PURE__ */ jsxRuntime.jsx(
164
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Item, { xs: 1, marginBottom: "-1px", alignItems: "end", margin: "auto", children: /* @__PURE__ */ jsxRuntime.jsx(PreviewTabs, {}) }),
165
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Item, { xs: 1, justifyContent: "end", paddingTop: 2, paddingBottom: 2, children: /* @__PURE__ */ jsxRuntime.jsx(
159
166
  designSystem.IconButton,
160
167
  {
161
168
  type: "button",
@@ -166,11 +173,19 @@ const PreviewHeader = () => {
166
173
  onClick: handleCopyLink,
167
174
  children: /* @__PURE__ */ jsxRuntime.jsx(Icons.Link, {})
168
175
  }
169
- )
176
+ ) })
170
177
  ]
171
178
  }
172
179
  );
173
180
  };
181
+ const PreviewTitle = styledComponents.styled(designSystem.Typography)`
182
+ overflow: hidden;
183
+ text-overflow: ellipsis;
184
+ white-space: nowrap;
185
+ `;
186
+ const StatusTab = styledComponents.styled(designSystem.Tabs.Trigger)`
187
+ text-transform: uppercase;
188
+ `;
174
189
  const [PreviewProvider, usePreviewContext] = strapiAdmin.createContext("PreviewPage");
175
190
  const PreviewPage = () => {
176
191
  const { formatMessage } = reactIntl.useIntl();
@@ -216,6 +231,7 @@ const PreviewPage = () => {
216
231
  if (!previewUrlResponse.data?.data?.url) {
217
232
  return /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Page.NoData, {});
218
233
  }
234
+ const documentTitle = documentResponse.getTitle(documentLayoutResponse.edit.settings.mainField);
219
235
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
220
236
  /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Page.Title, { children: formatMessage(
221
237
  {
@@ -223,18 +239,21 @@ const PreviewPage = () => {
223
239
  defaultMessage: "{contentType} preview"
224
240
  },
225
241
  {
226
- contentType: documentLayoutResponse.edit.settings.displayName
242
+ contentType: documentTitle
227
243
  }
228
244
  ) }),
229
245
  /* @__PURE__ */ jsxRuntime.jsx(
230
246
  PreviewProvider,
231
247
  {
232
248
  url: previewUrlResponse.data.data.url,
233
- mainField: documentLayoutResponse.edit.settings.mainField,
234
249
  document: documentResponse.document,
250
+ title: documentTitle,
235
251
  meta: documentResponse.meta,
236
252
  schema: documentResponse.schema,
237
- children: /* @__PURE__ */ jsxRuntime.jsx(PreviewHeader, {})
253
+ children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { direction: "column", height: "100%", alignItems: "stretch", children: [
254
+ /* @__PURE__ */ jsxRuntime.jsx(PreviewHeader, {}),
255
+ /* @__PURE__ */ jsxRuntime.jsx(PreviewContent, {})
256
+ ] })
238
257
  }
239
258
  )
240
259
  ] });
@@ -283,4 +302,4 @@ const ProtectedPreviewPage = () => {
283
302
  };
284
303
  exports.ProtectedPreviewPage = ProtectedPreviewPage;
285
304
  exports.usePreviewContext = usePreviewContext;
286
- //# sourceMappingURL=Preview-V8XOfrQf.js.map
305
+ //# sourceMappingURL=Preview-DEHdENT1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Preview-DEHdENT1.js","sources":["../../admin/src/preview/components/PreviewContent.tsx","../../admin/src/preview/components/PreviewHeader.tsx","../../admin/src/preview/pages/Preview.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { usePreviewContext } from '../pages/Preview';\n\nconst PreviewContent = () => {\n const previewUrl = usePreviewContext('PreviewContent', (state) => state.url);\n\n const { formatMessage } = useIntl();\n\n return (\n <Box\n src={previewUrl}\n /**\n * For some reason, changing an iframe's src tag causes the browser to add a new item in the\n * history stack. This is an issue for us as it means clicking the back button will not let us\n * go back to the edit view. To fix it, we need to trick the browser into thinking this is a\n * different iframe when the preview URL changes. So we set a key prop to force React\n * to mount a different node when the src changes.\n */\n key={previewUrl}\n title={formatMessage({\n id: 'content-manager.preview.panel.title',\n defaultMessage: 'Preview',\n })}\n width=\"100%\"\n height=\"100%\"\n borderWidth={0}\n tag=\"iframe\"\n />\n );\n};\n\nexport { PreviewContent };\n","import * as React from 'react';\n\nimport {\n useClipboard,\n useHistory,\n useNotification,\n useQueryParams,\n} from '@strapi/admin/strapi-admin';\nimport { IconButton, Tabs, Typography, Grid } from '@strapi/design-system';\nimport { Cross, Link as LinkIcon } from '@strapi/icons';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { Link, type To } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { DocumentStatus } from '../../pages/EditView/components/DocumentStatus';\nimport { getDocumentStatus } from '../../pages/EditView/EditViewPage';\nimport { usePreviewContext } from '../pages/Preview';\n\n/* -------------------------------------------------------------------------------------------------\n * ClosePreviewButton\n * -----------------------------------------------------------------------------------------------*/\n\nconst ClosePreviewButton = () => {\n const [{ query }] = useQueryParams<{\n plugins?: Record<string, unknown>;\n }>();\n const { formatMessage } = useIntl();\n\n const canGoBack = useHistory('BackButton', (state) => state.canGoBack);\n const goBack = useHistory('BackButton', (state) => state.goBack);\n const history = useHistory('BackButton', (state) => state.history);\n const locationIndex = useHistory('BackButton', (state) => state.currentLocationIndex);\n\n /**\n * Get the link destination from the history.\n * Rely on a fallback (the parent edit view page) if there's no page to go back .\n */\n const historyTo = canGoBack ? history.at(locationIndex - 2) : undefined;\n const fallback = {\n pathname: '..',\n search: stringify(query, { encode: false }),\n } satisfies To;\n const toWithFallback = historyTo ?? fallback;\n\n const handleClick = (e: React.MouseEvent) => {\n if (canGoBack) {\n // Prevent normal link behavior, go back in the history stack instead\n e.preventDefault();\n goBack();\n return;\n }\n\n // Otherwise rely on native link behavior to go back to the edit view. We don't use navigate()\n // here in order to get the relative=\"path\" functionality from the Link component.\n };\n\n return (\n <IconButton\n tag={Link}\n relative=\"path\"\n to={toWithFallback}\n onClick={handleClick}\n label={formatMessage({\n id: 'content-manager.preview.header.close',\n defaultMessage: 'Close preview',\n })}\n >\n <Cross />\n </IconButton>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Status\n * -----------------------------------------------------------------------------------------------*/\n\nconst Status = () => {\n // Get status\n const document = usePreviewContext('PreviewHeader', (state) => state.document);\n const schema = usePreviewContext('PreviewHeader', (state) => state.schema);\n const meta = usePreviewContext('PreviewHeader', (state) => state.meta);\n const hasDraftAndPublished = schema?.options?.draftAndPublish ?? false;\n\n if (!hasDraftAndPublished) {\n return null;\n }\n\n const status = getDocumentStatus(document, meta);\n\n return <DocumentStatus status={status} size=\"XS\" />;\n};\n\nconst PreviewTabs = () => {\n const { formatMessage } = useIntl();\n\n // URL query params\n const [{ query }, setQuery] = useQueryParams<{ status: 'draft' | 'published' }>();\n\n // Get status\n const document = usePreviewContext('PreviewHeader', (state) => state.document);\n const schema = usePreviewContext('PreviewHeader', (state) => state.schema);\n const meta = usePreviewContext('PreviewHeader', (state) => state.meta);\n const hasDraftAndPublish = schema?.options?.draftAndPublish ?? false;\n const documentStatus = getDocumentStatus(document, meta);\n\n const handleTabChange = (status: string) => {\n if (status === 'published' || status === 'draft') {\n setQuery({ status }, 'push', true);\n }\n };\n\n if (!hasDraftAndPublish) {\n return null;\n }\n\n return (\n <>\n <Tabs.Root variant=\"simple\" value={query.status || 'draft'} onValueChange={handleTabChange}>\n <Tabs.List\n aria-label={formatMessage({\n id: 'preview.tabs.label',\n defaultMessage: 'Document status',\n })}\n >\n <StatusTab value=\"draft\">\n {formatMessage({\n id: 'content-manager.containers.List.draft',\n defaultMessage: 'draft',\n })}\n </StatusTab>\n <StatusTab value=\"published\" disabled={documentStatus === 'draft'}>\n {formatMessage({\n id: 'content-manager.containers.List.published',\n defaultMessage: 'published',\n })}\n </StatusTab>\n </Tabs.List>\n </Tabs.Root>\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * PreviewHeader\n * -----------------------------------------------------------------------------------------------*/\n\nconst PreviewHeader = () => {\n // Get the document title\n const title = usePreviewContext('PreviewHeader', (state) => state.title);\n\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { copy } = useClipboard();\n\n const handleCopyLink = () => {\n copy(window.location.href);\n toggleNotification({\n message: formatMessage({\n id: 'content-manager.preview.copy.success',\n defaultMessage: 'Copied preview link',\n }),\n type: 'success',\n });\n };\n\n return (\n <Grid.Root\n gap={3}\n gridCols={3}\n paddingLeft={2}\n paddingRight={2}\n background=\"neutral0\"\n borderColor=\"neutral150\"\n tag=\"header\"\n >\n {/* Title and status */}\n <Grid.Item xs={1} paddingTop={2} paddingBottom={2} gap={3}>\n <ClosePreviewButton />\n <PreviewTitle tag=\"h1\" fontWeight={600} fontSize={2} maxWidth=\"200px\" title={title}>\n {title}\n </PreviewTitle>\n <Status />\n </Grid.Item>\n {/* Tabs */}\n <Grid.Item xs={1} marginBottom=\"-1px\" alignItems=\"end\" margin=\"auto\">\n <PreviewTabs />\n </Grid.Item>\n {/* Copy link */}\n <Grid.Item xs={1} justifyContent=\"end\" paddingTop={2} paddingBottom={2}>\n <IconButton\n type=\"button\"\n label={formatMessage({\n id: 'preview.copy.label',\n defaultMessage: 'Copy preview link',\n })}\n onClick={handleCopyLink}\n >\n <LinkIcon />\n </IconButton>\n </Grid.Item>\n </Grid.Root>\n );\n};\n\nconst PreviewTitle = styled(Typography)`\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\nconst StatusTab = styled(Tabs.Trigger)`\n text-transform: uppercase;\n`;\n\nexport { PreviewHeader };\n","import * as React from 'react';\n\nimport { Page, useQueryParams, useRBAC, createContext } from '@strapi/admin/strapi-admin';\nimport { Box, Flex, FocusTrap, Portal } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { useParams } from 'react-router-dom';\n\nimport { GetPreviewUrl } from '../../../../shared/contracts/preview';\nimport { COLLECTION_TYPES } from '../../constants/collections';\nimport { DocumentRBAC } from '../../features/DocumentRBAC';\nimport { type UseDocument, useDocument } from '../../hooks/useDocument';\nimport { useDocumentLayout } from '../../hooks/useDocumentLayout';\nimport { buildValidParams } from '../../utils/api';\nimport { PreviewContent } from '../components/PreviewContent';\nimport { PreviewHeader } from '../components/PreviewHeader';\nimport { useGetPreviewUrlQuery } from '../services/preview';\n\nimport type { UID } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * PreviewProvider\n * -----------------------------------------------------------------------------------------------*/\n\ninterface PreviewContextValue {\n url: string;\n title: string;\n document: NonNullable<ReturnType<UseDocument>['document']>;\n meta: NonNullable<ReturnType<UseDocument>['meta']>;\n schema: NonNullable<ReturnType<UseDocument>['schema']>;\n}\n\nconst [PreviewProvider, usePreviewContext] = createContext<PreviewContextValue>('PreviewPage');\n\n/* -------------------------------------------------------------------------------------------------\n * PreviewPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst PreviewPage = () => {\n const { formatMessage } = useIntl();\n\n // Read all the necessary data from the URL to find the right preview URL\n const {\n slug: model,\n id: documentId,\n collectionType,\n } = useParams<{\n slug: UID.ContentType;\n id: string;\n collectionType: string;\n }>();\n const [{ query }] = useQueryParams<{\n plugins?: Record<string, unknown>;\n }>();\n\n const params = React.useMemo(() => buildValidParams(query), [query]);\n\n if (!collectionType) {\n throw new Error('Could not find collectionType in url params');\n }\n\n if (!model) {\n throw new Error('Could not find model in url params');\n }\n\n // Only collection types must have a documentId\n if (collectionType === COLLECTION_TYPES && !documentId) {\n throw new Error('Could not find documentId in url params');\n }\n\n const previewUrlResponse = useGetPreviewUrlQuery({\n params: {\n contentType: model,\n },\n query: {\n documentId,\n locale: params.locale,\n status: params.status as GetPreviewUrl.Request['query']['status'],\n },\n });\n\n const documentResponse = useDocument({\n model,\n collectionType,\n documentId,\n params,\n });\n\n const documentLayoutResponse = useDocumentLayout(model);\n\n if (\n documentResponse.isLoading ||\n previewUrlResponse.isLoading ||\n documentLayoutResponse.isLoading\n ) {\n return <Page.Loading />;\n }\n\n if (\n previewUrlResponse.error ||\n documentLayoutResponse.error ||\n !documentResponse.document ||\n !documentResponse.meta ||\n !documentResponse.schema\n ) {\n return <Page.Error />;\n }\n\n if (!previewUrlResponse.data?.data?.url) {\n return <Page.NoData />;\n }\n\n const documentTitle = documentResponse.getTitle(documentLayoutResponse.edit.settings.mainField);\n\n return (\n <>\n <Page.Title>\n {formatMessage(\n {\n id: 'content-manager.preview.page-title',\n defaultMessage: '{contentType} preview',\n },\n {\n contentType: documentTitle,\n }\n )}\n </Page.Title>\n <PreviewProvider\n url={previewUrlResponse.data.data.url}\n document={documentResponse.document}\n title={documentTitle}\n meta={documentResponse.meta}\n schema={documentResponse.schema}\n >\n <Flex direction=\"column\" height=\"100%\" alignItems=\"stretch\">\n <PreviewHeader />\n <PreviewContent />\n </Flex>\n </PreviewProvider>\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedPreviewPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedPreviewPageImpl = () => {\n const { slug: model } = useParams<{\n slug: string;\n }>();\n const {\n permissions = [],\n isLoading,\n error,\n } = useRBAC([{ action: 'plugin::content-manager.explorer.read', subject: model }]);\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n if (error || !model) {\n return (\n <Box\n height=\"100vh\"\n width=\"100vw\"\n position=\"fixed\"\n top={0}\n left={0}\n zIndex={2}\n background=\"neutral0\"\n >\n <Page.Error />\n </Box>\n );\n }\n\n return (\n <Box\n height=\"100vh\"\n width=\"100vw\"\n position=\"fixed\"\n top={0}\n left={0}\n zIndex={2}\n background=\"neutral0\"\n >\n <Page.Protect permissions={permissions}>\n {({ permissions }) => (\n <DocumentRBAC permissions={permissions}>\n <PreviewPage />\n </DocumentRBAC>\n )}\n </Page.Protect>\n </Box>\n );\n};\n\nconst ProtectedPreviewPage = () => {\n return (\n <Portal>\n <FocusTrap>\n <ProtectedPreviewPageImpl />\n </FocusTrap>\n </Portal>\n );\n};\n\nexport { ProtectedPreviewPage, usePreviewContext };\n"],"names":["useIntl","jsx","Box","useQueryParams","useHistory","stringify","IconButton","Link","Cross","getDocumentStatus","DocumentStatus","Fragment","Tabs","jsxs","useNotification","useClipboard","Grid","LinkIcon","styled","Typography","createContext","useParams","React","buildValidParams","COLLECTION_TYPES","useGetPreviewUrlQuery","useDocument","useDocumentLayout","Page","Flex","useRBAC","permissions","DocumentRBAC","Portal","FocusTrap"],"mappings":"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"}
@@ -1,37 +1,59 @@
1
- import { jsxs, jsx, Fragment } from "react/jsx-runtime";
1
+ import { jsx, jsxs, Fragment } from "react/jsx-runtime";
2
2
  import * as React from "react";
3
3
  import { useNotification, useClipboard, useQueryParams, useHistory, createContext, useRBAC, Page } from "@strapi/admin/strapi-admin";
4
- import { Flex, Typography, IconButton, Box, Portal, FocusTrap } from "@strapi/design-system";
4
+ import { Box, Typography, Tabs, Grid, IconButton, Portal, FocusTrap, Flex } from "@strapi/design-system";
5
5
  import { useIntl } from "react-intl";
6
- import { useNavigate, Link as Link$1, useParams } from "react-router-dom";
7
- import { l as DocumentRBAC, d as buildValidParams, C as COLLECTION_TYPES, K as useGetPreviewUrlQuery, J as useDocument, h as useDocumentLayout } from "./index-V8MWkDSd.mjs";
6
+ import { Link as Link$1, useParams } from "react-router-dom";
7
+ import { D as DocumentStatus, l as DocumentRBAC, d as buildValidParams, C as COLLECTION_TYPES, N as useGetPreviewUrlQuery, M as useDocument, h as useDocumentLayout } from "./index-EH8ZtHd5.mjs";
8
8
  import { Link, Cross } from "@strapi/icons";
9
9
  import { stringify } from "qs";
10
- import { getDocumentStatus } from "./EditViewPage-hiwZg61J.mjs";
10
+ import { styled } from "styled-components";
11
+ import { getDocumentStatus } from "./EditViewPage-Bcnff6Vd.mjs";
12
+ const PreviewContent = () => {
13
+ const previewUrl = usePreviewContext("PreviewContent", (state) => state.url);
14
+ const { formatMessage } = useIntl();
15
+ return /* @__PURE__ */ jsx(
16
+ Box,
17
+ {
18
+ src: previewUrl,
19
+ title: formatMessage({
20
+ id: "content-manager.preview.panel.title",
21
+ defaultMessage: "Preview"
22
+ }),
23
+ width: "100%",
24
+ height: "100%",
25
+ borderWidth: 0,
26
+ tag: "iframe"
27
+ },
28
+ previewUrl
29
+ );
30
+ };
11
31
  const ClosePreviewButton = () => {
12
32
  const [{ query }] = useQueryParams();
13
- const navigate = useNavigate();
14
33
  const { formatMessage } = useIntl();
15
34
  const canGoBack = useHistory("BackButton", (state) => state.canGoBack);
16
35
  const goBack = useHistory("BackButton", (state) => state.goBack);
17
36
  const history = useHistory("BackButton", (state) => state.history);
18
- const fallbackUrl = {
37
+ const locationIndex = useHistory("BackButton", (state) => state.currentLocationIndex);
38
+ const historyTo = canGoBack ? history.at(locationIndex - 2) : void 0;
39
+ const fallback = {
19
40
  pathname: "..",
20
41
  search: stringify(query, { encode: false })
21
42
  };
43
+ const toWithFallback = historyTo ?? fallback;
22
44
  const handleClick = (e) => {
23
- e.preventDefault();
24
45
  if (canGoBack) {
46
+ e.preventDefault();
25
47
  goBack();
26
- } else {
27
- navigate(fallbackUrl);
48
+ return;
28
49
  }
29
50
  };
30
51
  return /* @__PURE__ */ jsx(
31
52
  IconButton,
32
53
  {
33
54
  tag: Link$1,
34
- to: history.at(-1) ?? fallbackUrl,
55
+ relative: "path",
56
+ to: toWithFallback,
35
57
  onClick: handleClick,
36
58
  label: formatMessage({
37
59
  id: "content-manager.preview.header.close",
@@ -41,72 +63,55 @@ const ClosePreviewButton = () => {
41
63
  }
42
64
  );
43
65
  };
44
- const getStatusData = (status) => {
45
- switch (status) {
46
- case "draft":
47
- return {
48
- background: "secondary100",
49
- border: "secondary200",
50
- text: "secondary700",
51
- message: {
52
- id: "content-manager.containers.List.draft",
53
- defaultMessage: "Draft"
54
- }
55
- };
56
- case "modified":
57
- return {
58
- background: "alternative100",
59
- border: "alternative200",
60
- text: "alternative700",
61
- message: {
62
- id: "content-manager.containers.List.modified",
63
- defaultMessage: "Modified"
64
- }
65
- };
66
- case "published":
67
- default:
68
- return {
69
- background: "success100",
70
- border: "success200",
71
- text: "success700",
72
- message: {
73
- id: "content-manager.containers.List.published",
74
- defaultMessage: "Published"
75
- }
76
- };
66
+ const Status = () => {
67
+ const document = usePreviewContext("PreviewHeader", (state) => state.document);
68
+ const schema = usePreviewContext("PreviewHeader", (state) => state.schema);
69
+ const meta = usePreviewContext("PreviewHeader", (state) => state.meta);
70
+ const hasDraftAndPublished = schema?.options?.draftAndPublish ?? false;
71
+ if (!hasDraftAndPublished) {
72
+ return null;
77
73
  }
74
+ const status = getDocumentStatus(document, meta);
75
+ return /* @__PURE__ */ jsx(DocumentStatus, { status, size: "XS" });
78
76
  };
79
- const DocumentStatus = () => {
77
+ const PreviewTabs = () => {
80
78
  const { formatMessage } = useIntl();
79
+ const [{ query }, setQuery] = useQueryParams();
81
80
  const document = usePreviewContext("PreviewHeader", (state) => state.document);
82
81
  const schema = usePreviewContext("PreviewHeader", (state) => state.schema);
83
82
  const meta = usePreviewContext("PreviewHeader", (state) => state.meta);
84
- const hasDraftAndPublished = schema?.options?.draftAndPublish ?? false;
85
- const status = getDocumentStatus(document, meta);
86
- const statusData = getStatusData(status);
87
- if (!hasDraftAndPublished) {
83
+ const hasDraftAndPublish = schema?.options?.draftAndPublish ?? false;
84
+ const documentStatus = getDocumentStatus(document, meta);
85
+ const handleTabChange = (status) => {
86
+ if (status === "published" || status === "draft") {
87
+ setQuery({ status }, "push", true);
88
+ }
89
+ };
90
+ if (!hasDraftAndPublish) {
88
91
  return null;
89
92
  }
90
- return /* @__PURE__ */ jsx(
91
- Box,
93
+ return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx(Tabs.Root, { variant: "simple", value: query.status || "draft", onValueChange: handleTabChange, children: /* @__PURE__ */ jsxs(
94
+ Tabs.List,
92
95
  {
93
- background: statusData.background,
94
- borderStyle: "solid",
95
- borderWidth: "1px",
96
- borderColor: statusData.border,
97
- hasRadius: true,
98
- paddingLeft: "6px",
99
- paddingRight: "6px",
100
- paddingTop: "2px",
101
- paddingBottom: "2px",
102
- children: /* @__PURE__ */ jsx(Typography, { variant: "pi", fontWeight: "bold", textColor: statusData.text, children: formatMessage(statusData.message) })
96
+ "aria-label": formatMessage({
97
+ id: "preview.tabs.label",
98
+ defaultMessage: "Document status"
99
+ }),
100
+ children: [
101
+ /* @__PURE__ */ jsx(StatusTab, { value: "draft", children: formatMessage({
102
+ id: "content-manager.containers.List.draft",
103
+ defaultMessage: "draft"
104
+ }) }),
105
+ /* @__PURE__ */ jsx(StatusTab, { value: "published", disabled: documentStatus === "draft", children: formatMessage({
106
+ id: "content-manager.containers.List.published",
107
+ defaultMessage: "published"
108
+ }) })
109
+ ]
103
110
  }
104
- );
111
+ ) }) });
105
112
  };
106
113
  const PreviewHeader = () => {
107
- const mainField = usePreviewContext("PreviewHeader", (state) => state.mainField);
108
- const document = usePreviewContext("PreviewHeader", (state) => state.document);
109
- const title = document[mainField];
114
+ const title = usePreviewContext("PreviewHeader", (state) => state.title);
110
115
  const { formatMessage } = useIntl();
111
116
  const { toggleNotification } = useNotification();
112
117
  const { copy } = useClipboard();
@@ -121,20 +126,23 @@ const PreviewHeader = () => {
121
126
  });
122
127
  };
123
128
  return /* @__PURE__ */ jsxs(
124
- Flex,
129
+ Grid.Root,
125
130
  {
126
- justifyContent: "space-between",
131
+ gap: 3,
132
+ gridCols: 3,
133
+ paddingLeft: 2,
134
+ paddingRight: 2,
127
135
  background: "neutral0",
128
- padding: 2,
129
136
  borderColor: "neutral150",
130
137
  tag: "header",
131
138
  children: [
132
- /* @__PURE__ */ jsxs(Flex, { gap: 3, children: [
139
+ /* @__PURE__ */ jsxs(Grid.Item, { xs: 1, paddingTop: 2, paddingBottom: 2, gap: 3, children: [
133
140
  /* @__PURE__ */ jsx(ClosePreviewButton, {}),
134
- /* @__PURE__ */ jsx(Typography, { tag: "h1", fontWeight: 600, fontSize: 2, children: title }),
135
- /* @__PURE__ */ jsx(DocumentStatus, {})
141
+ /* @__PURE__ */ jsx(PreviewTitle, { tag: "h1", fontWeight: 600, fontSize: 2, maxWidth: "200px", title, children: title }),
142
+ /* @__PURE__ */ jsx(Status, {})
136
143
  ] }),
137
- /* @__PURE__ */ jsx(
144
+ /* @__PURE__ */ jsx(Grid.Item, { xs: 1, marginBottom: "-1px", alignItems: "end", margin: "auto", children: /* @__PURE__ */ jsx(PreviewTabs, {}) }),
145
+ /* @__PURE__ */ jsx(Grid.Item, { xs: 1, justifyContent: "end", paddingTop: 2, paddingBottom: 2, children: /* @__PURE__ */ jsx(
138
146
  IconButton,
139
147
  {
140
148
  type: "button",
@@ -145,11 +153,19 @@ const PreviewHeader = () => {
145
153
  onClick: handleCopyLink,
146
154
  children: /* @__PURE__ */ jsx(Link, {})
147
155
  }
148
- )
156
+ ) })
149
157
  ]
150
158
  }
151
159
  );
152
160
  };
161
+ const PreviewTitle = styled(Typography)`
162
+ overflow: hidden;
163
+ text-overflow: ellipsis;
164
+ white-space: nowrap;
165
+ `;
166
+ const StatusTab = styled(Tabs.Trigger)`
167
+ text-transform: uppercase;
168
+ `;
153
169
  const [PreviewProvider, usePreviewContext] = createContext("PreviewPage");
154
170
  const PreviewPage = () => {
155
171
  const { formatMessage } = useIntl();
@@ -195,6 +211,7 @@ const PreviewPage = () => {
195
211
  if (!previewUrlResponse.data?.data?.url) {
196
212
  return /* @__PURE__ */ jsx(Page.NoData, {});
197
213
  }
214
+ const documentTitle = documentResponse.getTitle(documentLayoutResponse.edit.settings.mainField);
198
215
  return /* @__PURE__ */ jsxs(Fragment, { children: [
199
216
  /* @__PURE__ */ jsx(Page.Title, { children: formatMessage(
200
217
  {
@@ -202,18 +219,21 @@ const PreviewPage = () => {
202
219
  defaultMessage: "{contentType} preview"
203
220
  },
204
221
  {
205
- contentType: documentLayoutResponse.edit.settings.displayName
222
+ contentType: documentTitle
206
223
  }
207
224
  ) }),
208
225
  /* @__PURE__ */ jsx(
209
226
  PreviewProvider,
210
227
  {
211
228
  url: previewUrlResponse.data.data.url,
212
- mainField: documentLayoutResponse.edit.settings.mainField,
213
229
  document: documentResponse.document,
230
+ title: documentTitle,
214
231
  meta: documentResponse.meta,
215
232
  schema: documentResponse.schema,
216
- children: /* @__PURE__ */ jsx(PreviewHeader, {})
233
+ children: /* @__PURE__ */ jsxs(Flex, { direction: "column", height: "100%", alignItems: "stretch", children: [
234
+ /* @__PURE__ */ jsx(PreviewHeader, {}),
235
+ /* @__PURE__ */ jsx(PreviewContent, {})
236
+ ] })
217
237
  }
218
238
  )
219
239
  ] });
@@ -264,4 +284,4 @@ export {
264
284
  ProtectedPreviewPage,
265
285
  usePreviewContext
266
286
  };
267
- //# sourceMappingURL=Preview-DRJhcaIO.mjs.map
287
+ //# sourceMappingURL=Preview-vfWOtPG5.mjs.map