@strapi/content-manager 0.0.0-next.2a1c7a281f8080296033541146ea489dcd441daa → 0.0.0-next.2c83a77afa7fccd559dd22ce09acee5c216d070f

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 (97) hide show
  1. package/dist/admin/chunks/{ComponentConfigurationPage-C5H-5L1u.js → ComponentConfigurationPage-C6-yVoE3.js} +3 -3
  2. package/dist/admin/chunks/{ComponentConfigurationPage-C5H-5L1u.js.map → ComponentConfigurationPage-C6-yVoE3.js.map} +1 -1
  3. package/dist/admin/chunks/{ComponentConfigurationPage-BN2kOtDm.mjs → ComponentConfigurationPage-DuN0XVMW.mjs} +3 -3
  4. package/dist/admin/chunks/{ComponentConfigurationPage-BN2kOtDm.mjs.map → ComponentConfigurationPage-DuN0XVMW.mjs.map} +1 -1
  5. package/dist/admin/chunks/{EditConfigurationPage-BExtZuB7.js → EditConfigurationPage-CGLkm6-l.js} +3 -3
  6. package/dist/admin/chunks/{EditConfigurationPage-BExtZuB7.js.map → EditConfigurationPage-CGLkm6-l.js.map} +1 -1
  7. package/dist/admin/chunks/{EditConfigurationPage-tMgOELQG.mjs → EditConfigurationPage-dMHIBbF1.mjs} +3 -3
  8. package/dist/admin/chunks/{EditConfigurationPage-tMgOELQG.mjs.map → EditConfigurationPage-dMHIBbF1.mjs.map} +1 -1
  9. package/dist/admin/chunks/{EditViewPage-CYe7wAXF.mjs → EditViewPage-C6t9zIMh.mjs} +6 -9
  10. package/dist/admin/chunks/EditViewPage-C6t9zIMh.mjs.map +1 -0
  11. package/dist/admin/chunks/{EditViewPage-DFkloeMZ.js → EditViewPage-DXT_1NHv.js} +6 -9
  12. package/dist/admin/chunks/EditViewPage-DXT_1NHv.js.map +1 -0
  13. package/dist/admin/chunks/{Form-DTO0ZIaB.mjs → Form-CYwwV0U-.mjs} +2 -2
  14. package/dist/admin/chunks/{Form-DTO0ZIaB.mjs.map → Form-CYwwV0U-.mjs.map} +1 -1
  15. package/dist/admin/chunks/{Form-DGUP3zQO.js → Form-D7GCEkaE.js} +2 -2
  16. package/dist/admin/chunks/{Form-DGUP3zQO.js.map → Form-D7GCEkaE.js.map} +1 -1
  17. package/dist/admin/chunks/{History-C333pgXF.mjs → History-CZ9Cnw23.mjs} +5 -5
  18. package/dist/admin/chunks/{History-C333pgXF.mjs.map → History-CZ9Cnw23.mjs.map} +1 -1
  19. package/dist/admin/chunks/{History-CQznK1pG.js → History-CZP7hLUV.js} +5 -5
  20. package/dist/admin/chunks/{History-CQznK1pG.js.map → History-CZP7hLUV.js.map} +1 -1
  21. package/dist/admin/chunks/{Input-BexkC_pp.mjs → Input-BR5JpzSp.mjs} +5 -11
  22. package/dist/admin/chunks/Input-BR5JpzSp.mjs.map +1 -0
  23. package/dist/admin/chunks/{Input-DLJZHw9Y.js → Input-ZnF7wer5.js} +5 -11
  24. package/dist/admin/chunks/Input-ZnF7wer5.js.map +1 -0
  25. package/dist/admin/chunks/{ListConfigurationPage-BX2WR7MI.mjs → ListConfigurationPage-CSHB8jY5.mjs} +2 -2
  26. package/dist/admin/chunks/{ListConfigurationPage-BX2WR7MI.mjs.map → ListConfigurationPage-CSHB8jY5.mjs.map} +1 -1
  27. package/dist/admin/chunks/{ListConfigurationPage-71I_stAM.js → ListConfigurationPage-DqDJ3esz.js} +2 -2
  28. package/dist/admin/chunks/{ListConfigurationPage-71I_stAM.js.map → ListConfigurationPage-DqDJ3esz.js.map} +1 -1
  29. package/dist/admin/chunks/{ListViewPage-BDeT3Dkk.mjs → ListViewPage-o7MuKWe7.mjs} +3 -3
  30. package/dist/admin/chunks/{ListViewPage-BDeT3Dkk.mjs.map → ListViewPage-o7MuKWe7.mjs.map} +1 -1
  31. package/dist/admin/chunks/{ListViewPage-DV3heO4F.js → ListViewPage-uGHyqfkp.js} +3 -3
  32. package/dist/admin/chunks/{ListViewPage-DV3heO4F.js.map → ListViewPage-uGHyqfkp.js.map} +1 -1
  33. package/dist/admin/chunks/{NoContentTypePage-COih9y2J.js → NoContentTypePage-CJTJmAcN.js} +2 -2
  34. package/dist/admin/chunks/{NoContentTypePage-COih9y2J.js.map → NoContentTypePage-CJTJmAcN.js.map} +1 -1
  35. package/dist/admin/chunks/{NoContentTypePage-9JHYpYVX.mjs → NoContentTypePage-Ci7qKVSj.mjs} +2 -2
  36. package/dist/admin/chunks/{NoContentTypePage-9JHYpYVX.mjs.map → NoContentTypePage-Ci7qKVSj.mjs.map} +1 -1
  37. package/dist/admin/chunks/{NoPermissionsPage-DGAwRIlN.js → NoPermissionsPage-C_oTwBmY.js} +2 -2
  38. package/dist/admin/chunks/{NoPermissionsPage-DGAwRIlN.js.map → NoPermissionsPage-C_oTwBmY.js.map} +1 -1
  39. package/dist/admin/chunks/{NoPermissionsPage-DTe9I47q.mjs → NoPermissionsPage-DgYW5cC4.mjs} +2 -2
  40. package/dist/admin/chunks/{NoPermissionsPage-DTe9I47q.mjs.map → NoPermissionsPage-DgYW5cC4.mjs.map} +1 -1
  41. package/dist/admin/chunks/{Preview-BEq0FXda.mjs → Preview-BIEc2-KZ.mjs} +231 -104
  42. package/dist/admin/chunks/Preview-BIEc2-KZ.mjs.map +1 -0
  43. package/dist/admin/chunks/{Preview-CXtc9yEV.js → Preview-DFV3Bgia.js} +227 -100
  44. package/dist/admin/chunks/Preview-DFV3Bgia.js.map +1 -0
  45. package/dist/admin/chunks/{Relations-qeZyLDgQ.mjs → Relations-B6iGFlMU.mjs} +6 -470
  46. package/dist/admin/chunks/Relations-B6iGFlMU.mjs.map +1 -0
  47. package/dist/admin/chunks/{Relations-o7_hVGyK.js → Relations-BhhL2fE7.js} +4 -469
  48. package/dist/admin/chunks/Relations-BhhL2fE7.js.map +1 -0
  49. package/dist/admin/chunks/{en-LfhocNG2.mjs → en-CImiNxXE.mjs} +3 -1
  50. package/dist/admin/chunks/{en-LfhocNG2.mjs.map → en-CImiNxXE.mjs.map} +1 -1
  51. package/dist/admin/chunks/{en-C1CjdAtC.js → en-CLf4SuMQ.js} +3 -1
  52. package/dist/admin/chunks/{en-C1CjdAtC.js.map → en-CLf4SuMQ.js.map} +1 -1
  53. package/dist/admin/chunks/{index-BHimg6jW.js → index-BHsh5hLe.js} +92 -43
  54. package/dist/admin/chunks/index-BHsh5hLe.js.map +1 -0
  55. package/dist/admin/chunks/{index-Cs6qwFQu.mjs → index-D_xHP7Sa.mjs} +92 -44
  56. package/dist/admin/chunks/index-D_xHP7Sa.mjs.map +1 -0
  57. package/dist/admin/chunks/{layout-Dtahn4Ue.js → layout-C3DUumtc.js} +4 -4
  58. package/dist/admin/chunks/{layout-Dtahn4Ue.js.map → layout-C3DUumtc.js.map} +1 -1
  59. package/dist/admin/chunks/{layout-DStNia_P.mjs → layout-Dp806Nqc.mjs} +4 -4
  60. package/dist/admin/chunks/{layout-DStNia_P.mjs.map → layout-Dp806Nqc.mjs.map} +1 -1
  61. package/dist/admin/chunks/{relations-Cq8NRUto.mjs → relations-ksVp_JdY.mjs} +2 -2
  62. package/dist/admin/chunks/{relations-Cq8NRUto.mjs.map → relations-ksVp_JdY.mjs.map} +1 -1
  63. package/dist/admin/chunks/{relations-XOYEEqMz.js → relations-yfvNHWQO.js} +2 -2
  64. package/dist/admin/chunks/{relations-XOYEEqMz.js.map → relations-yfvNHWQO.js.map} +1 -1
  65. package/dist/admin/chunks/uk-BtM6WnaE.mjs +313 -0
  66. package/dist/admin/chunks/uk-BtM6WnaE.mjs.map +1 -0
  67. package/dist/admin/chunks/uk-DB6OgySY.js +318 -0
  68. package/dist/admin/chunks/uk-DB6OgySY.js.map +1 -0
  69. package/dist/admin/index.js +1 -1
  70. package/dist/admin/index.mjs +1 -1
  71. package/dist/admin/src/components/InjectionZone.d.ts +7 -1
  72. package/dist/admin/src/content-manager.d.ts +4 -0
  73. package/dist/admin/src/hooks/useDocument.d.ts +2 -0
  74. package/dist/admin/src/hooks/useDocumentActions.d.ts +1 -0
  75. package/dist/admin/src/pages/EditView/components/DocumentActions.d.ts +2 -1
  76. package/dist/admin/src/pages/EditView/components/FormInputs/Relations.d.ts +1 -2
  77. package/dist/admin/src/preview/components/PreviewContent.d.ts +1 -2
  78. package/dist/admin/src/preview/pages/Preview.d.ts +2 -0
  79. package/dist/server/index.js +1 -1
  80. package/dist/server/index.js.map +1 -1
  81. package/dist/server/index.mjs +1 -1
  82. package/dist/server/index.mjs.map +1 -1
  83. package/package.json +8 -8
  84. package/dist/admin/chunks/EditViewPage-CYe7wAXF.mjs.map +0 -1
  85. package/dist/admin/chunks/EditViewPage-DFkloeMZ.js.map +0 -1
  86. package/dist/admin/chunks/Input-BexkC_pp.mjs.map +0 -1
  87. package/dist/admin/chunks/Input-DLJZHw9Y.js.map +0 -1
  88. package/dist/admin/chunks/Preview-BEq0FXda.mjs.map +0 -1
  89. package/dist/admin/chunks/Preview-CXtc9yEV.js.map +0 -1
  90. package/dist/admin/chunks/Relations-o7_hVGyK.js.map +0 -1
  91. package/dist/admin/chunks/Relations-qeZyLDgQ.mjs.map +0 -1
  92. package/dist/admin/chunks/index-BHimg6jW.js.map +0 -1
  93. package/dist/admin/chunks/index-Cs6qwFQu.mjs.map +0 -1
  94. package/dist/admin/chunks/uk-B24MoTVg.js +0 -145
  95. package/dist/admin/chunks/uk-B24MoTVg.js.map +0 -1
  96. package/dist/admin/chunks/uk-Cpgmm7gE.mjs +0 -140
  97. package/dist/admin/chunks/uk-Cpgmm7gE.mjs.map +0 -1
@@ -4,14 +4,14 @@ var jsxRuntime = require('react/jsx-runtime');
4
4
  var React = require('react');
5
5
  var strapiAdmin = require('@strapi/admin/strapi-admin');
6
6
  var designSystem = require('@strapi/design-system');
7
+ var Icons = require('@strapi/icons');
7
8
  var reactIntl = require('react-intl');
8
9
  var reactRouterDom = require('react-router-dom');
9
- var index = require('./index-BHimg6jW.js');
10
- var Input = require('./Input-DLJZHw9Y.js');
11
- var Icons = require('@strapi/icons');
12
- var qs = require('qs');
13
10
  var styledComponents = require('styled-components');
14
- var EditViewPage = require('./EditViewPage-DFkloeMZ.js');
11
+ var index = require('./index-BHsh5hLe.js');
12
+ var Input = require('./Input-ZnF7wer5.js');
13
+ var qs = require('qs');
14
+ var EditViewPage = require('./EditViewPage-DXT_1NHv.js');
15
15
  require('lodash/fp/mapValues');
16
16
  require('yup');
17
17
  require('fractional-indexing');
@@ -80,9 +80,9 @@ require('react-dnd-html5-backend');
80
80
  require('./objects-C3EebVVe.js');
81
81
  require('lodash/clone');
82
82
  require('lodash/toPath');
83
- require('./Relations-o7_hVGyK.js');
83
+ require('./Relations-BhhL2fE7.js');
84
84
  require('react-window');
85
- require('./relations-XOYEEqMz.js');
85
+ require('./relations-yfvNHWQO.js');
86
86
  require('./ComponentIcon-C-EjOUPA.js');
87
87
  require('@strapi/icons/symbols');
88
88
  require('codemirror5');
@@ -120,40 +120,6 @@ function _interopNamespaceDefault(e) {
120
120
 
121
121
  var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
122
122
 
123
- const UnstablePreviewContent = ()=>{
124
- const previewUrl = usePreviewContext('PreviewContent', (state)=>state.url);
125
- const layout = usePreviewContext('PreviewContent', (state)=>state.layout);
126
- const { formatMessage } = reactIntl.useIntl();
127
- return /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
128
- flex: 1,
129
- overflow: "auto",
130
- alignItems: "stretch",
131
- children: [
132
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
133
- overflow: "auto",
134
- flex: 1,
135
- borderWidth: "0 1px 0 0",
136
- borderColor: "neutral150",
137
- padding: 6,
138
- children: /*#__PURE__*/ jsxRuntime.jsx(Input.FormLayout, {
139
- layout: layout.layout,
140
- hasBackground: true
141
- })
142
- }),
143
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
144
- src: previewUrl,
145
- title: formatMessage({
146
- id: 'content-manager.preview.panel.title',
147
- defaultMessage: 'Preview'
148
- }),
149
- flex: 1,
150
- height: "100%",
151
- borderWidth: 0,
152
- tag: "iframe"
153
- }, previewUrl)
154
- ]
155
- });
156
- };
157
123
  const PreviewContent = ()=>{
158
124
  const previewUrl = usePreviewContext('PreviewContent', (state)=>state.url);
159
125
  const { formatMessage } = reactIntl.useIntl();
@@ -250,42 +216,45 @@ const PreviewTabs = ()=>{
250
216
  if (!hasDraftAndPublish) {
251
217
  return null;
252
218
  }
253
- return /*#__PURE__*/ jsxRuntime.jsx(jsxRuntime.Fragment, {
254
- children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Tabs.Root, {
255
- variant: "simple",
256
- value: query.status || 'draft',
257
- onValueChange: handleTabChange,
258
- children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Tabs.List, {
259
- "aria-label": formatMessage({
260
- id: 'preview.tabs.label',
261
- defaultMessage: 'Document status'
219
+ return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Tabs.Root, {
220
+ variant: "simple",
221
+ value: query.status || 'draft',
222
+ onValueChange: handleTabChange,
223
+ children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Tabs.List, {
224
+ "aria-label": formatMessage({
225
+ id: 'preview.tabs.label',
226
+ defaultMessage: 'Document status'
227
+ }),
228
+ children: [
229
+ /*#__PURE__*/ jsxRuntime.jsx(StatusTab, {
230
+ value: "draft",
231
+ children: formatMessage({
232
+ id: 'content-manager.containers.List.draft',
233
+ defaultMessage: 'draft'
234
+ })
262
235
  }),
263
- children: [
264
- /*#__PURE__*/ jsxRuntime.jsx(StatusTab, {
265
- value: "draft",
266
- children: formatMessage({
267
- id: 'content-manager.containers.List.draft',
268
- defaultMessage: 'draft'
269
- })
270
- }),
271
- /*#__PURE__*/ jsxRuntime.jsx(StatusTab, {
272
- value: "published",
273
- disabled: documentStatus === 'draft',
274
- children: formatMessage({
275
- id: 'content-manager.containers.List.published',
276
- defaultMessage: 'published'
277
- })
236
+ /*#__PURE__*/ jsxRuntime.jsx(StatusTab, {
237
+ value: "published",
238
+ disabled: documentStatus === 'draft',
239
+ children: formatMessage({
240
+ id: 'content-manager.containers.List.published',
241
+ defaultMessage: 'published'
278
242
  })
279
- ]
280
- })
243
+ })
244
+ ]
281
245
  })
282
246
  });
283
247
  };
284
248
  /* -------------------------------------------------------------------------------------------------
285
249
  * PreviewHeader
286
250
  * -----------------------------------------------------------------------------------------------*/ const UnstablePreviewHeader = ()=>{
287
- // Get the document title
288
251
  const title = usePreviewContext('PreviewHeader', (state)=>state.title);
252
+ const document = usePreviewContext('PreviewHeader', (state)=>state.document);
253
+ const schema = usePreviewContext('PreviewHeader', (state)=>state.schema);
254
+ const meta = usePreviewContext('PreviewHeader', (state)=>state.meta);
255
+ const plugins = strapiAdmin.useStrapiApp('PreviewHeader', (state)=>state.plugins);
256
+ const iframeRef = usePreviewContext('PreviewHeader', (state)=>state.iframeRef);
257
+ const [{ query }] = strapiAdmin.useQueryParams();
289
258
  const { formatMessage } = reactIntl.useIntl();
290
259
  const { toggleNotification } = strapiAdmin.useNotification();
291
260
  const { copy } = strapiAdmin.useClipboard();
@@ -299,7 +268,23 @@ const PreviewTabs = ()=>{
299
268
  type: 'success'
300
269
  });
301
270
  };
271
+ const hasDraftAndPublish = schema.options?.draftAndPublish ?? false;
272
+ const documentActionProps = {
273
+ activeTab: query.status ?? null,
274
+ collectionType: schema.kind === 'collectionType' ? 'collection-types' : 'single-types',
275
+ model: schema.uid,
276
+ documentId: document.documentId,
277
+ document,
278
+ meta,
279
+ onPreview: ()=>{
280
+ iframeRef?.current?.contentWindow?.postMessage({
281
+ type: 'strapiUpdate'
282
+ }, // The iframe origin is safe to use since it must be provided through the allowedOrigins config
283
+ new URL(iframeRef.current.src).origin);
284
+ }
285
+ };
302
286
  return /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
287
+ height: "48px",
303
288
  gap: 4,
304
289
  background: "neutral0",
305
290
  borderColor: "neutral150",
@@ -327,17 +312,60 @@ const PreviewTabs = ()=>{
327
312
  /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
328
313
  flex: 1,
329
314
  paddingRight: 2,
330
- justifyContent: "space-between",
315
+ gap: 2,
316
+ justifyContent: hasDraftAndPublish ? 'space-between' : 'flex-end',
331
317
  children: [
332
- /*#__PURE__*/ jsxRuntime.jsx(PreviewTabs, {}),
333
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
334
- type: "button",
335
- label: formatMessage({
336
- id: 'preview.copy.label',
337
- defaultMessage: 'Copy preview link'
338
- }),
339
- onClick: handleCopyLink,
340
- children: /*#__PURE__*/ jsxRuntime.jsx(Icons.Link, {})
318
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
319
+ flex: "1 1 70%",
320
+ children: /*#__PURE__*/ jsxRuntime.jsx(PreviewTabs, {})
321
+ }),
322
+ /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
323
+ gap: 2,
324
+ children: [
325
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
326
+ type: "button",
327
+ label: formatMessage({
328
+ id: 'preview.copy.label',
329
+ defaultMessage: 'Copy preview link'
330
+ }),
331
+ onClick: handleCopyLink,
332
+ children: /*#__PURE__*/ jsxRuntime.jsx(Icons.Link, {})
333
+ }),
334
+ /*#__PURE__*/ jsxRuntime.jsx(index.InjectionZone, {
335
+ area: "preview.actions"
336
+ }),
337
+ /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.DescriptionComponentRenderer, {
338
+ props: documentActionProps,
339
+ descriptions: plugins['content-manager'].apis.getDocumentActions('preview'),
340
+ children: (actions)=>{
341
+ const filteredActions = actions.filter((action)=>[
342
+ action.position
343
+ ].flat().includes('preview'));
344
+ const [primaryAction, secondaryAction] = filteredActions;
345
+ if (!primaryAction && !secondaryAction) return null;
346
+ // Both actions are available when draft and publish enabled
347
+ if (primaryAction && secondaryAction) {
348
+ return /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
349
+ children: [
350
+ /*#__PURE__*/ jsxRuntime.jsx(index.DocumentActionButton, {
351
+ ...secondaryAction,
352
+ variant: secondaryAction.variant || 'secondary'
353
+ }),
354
+ /*#__PURE__*/ jsxRuntime.jsx(index.DocumentActionButton, {
355
+ ...primaryAction,
356
+ variant: primaryAction.variant || 'default'
357
+ })
358
+ ]
359
+ });
360
+ }
361
+ // Otherwise we just have the save action
362
+ return /*#__PURE__*/ jsxRuntime.jsx(index.DocumentActionButton, {
363
+ ...primaryAction,
364
+ variant: primaryAction.variant || 'secondary'
365
+ });
366
+ }
367
+ })
368
+ ]
341
369
  })
342
370
  ]
343
371
  })
@@ -427,8 +455,16 @@ const TitleContainer = styledComponents.styled(designSystem.Flex)`
427
455
  const [PreviewProvider, usePreviewContext] = strapiAdmin.createContext('PreviewPage');
428
456
  /* -------------------------------------------------------------------------------------------------
429
457
  * PreviewPage
430
- * -----------------------------------------------------------------------------------------------*/ const PreviewPage = ()=>{
458
+ * -----------------------------------------------------------------------------------------------*/ const AnimatedArrow = styledComponents.styled(Icons.ArrowLineLeft)`
459
+ will-change: transform;
460
+ rotate: ${(props)=>props.isSideEditorOpen ? '0deg' : '180deg'};
461
+ transition: rotate 0.2s ease-in-out;
462
+ `;
463
+ const PreviewPage = ()=>{
464
+ const location = reactRouterDom.useLocation();
431
465
  const { formatMessage } = reactIntl.useIntl();
466
+ const iframeRef = React__namespace.useRef(null);
467
+ const [isSideEditorOpen, setIsSideEditorOpen] = React__namespace.useState(true);
432
468
  // Read all the necessary data from the URL to find the right preview URL
433
469
  const { slug: model, id: documentId, collectionType } = reactRouterDom.useParams();
434
470
  const [{ query }] = strapiAdmin.useQueryParams();
@@ -462,16 +498,28 @@ const [PreviewProvider, usePreviewContext] = strapiAdmin.createContext('PreviewP
462
498
  params
463
499
  });
464
500
  const documentLayoutResponse = index.useDocumentLayout(model);
465
- if (documentResponse.isLoading || previewUrlResponse.isLoading || documentLayoutResponse.isLoading) {
501
+ const isLoading = previewUrlResponse.isLoading || documentLayoutResponse.isLoading || documentResponse.isLoading;
502
+ if (isLoading && !documentResponse.document?.documentId) {
466
503
  return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Page.Loading, {});
467
504
  }
468
- if (previewUrlResponse.error || documentLayoutResponse.error || !documentResponse.document || !documentResponse.meta || !documentResponse.schema) {
505
+ const initialValues = documentResponse.getInitialFormValues();
506
+ if (previewUrlResponse.error || documentLayoutResponse.error || !documentResponse.document || !documentResponse.meta || !documentResponse.schema || !initialValues) {
469
507
  return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Page.Error, {});
470
508
  }
471
509
  if (!previewUrlResponse.data?.data?.url) {
472
510
  return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Page.NoData, {});
473
511
  }
474
512
  const documentTitle = documentResponse.getTitle(documentLayoutResponse.edit.settings.mainField);
513
+ const validateSync = (values, options)=>{
514
+ const yupSchema = index.createYupSchema(documentResponse.schema?.attributes, documentResponse.components, {
515
+ status: documentResponse.document?.status,
516
+ ...options
517
+ });
518
+ return yupSchema.validateSync(values, {
519
+ abortEarly: false
520
+ });
521
+ };
522
+ const previewUrl = previewUrlResponse.data.data.url;
475
523
  return /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
476
524
  children: [
477
525
  /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Page.Title, {
@@ -483,32 +531,107 @@ const [PreviewProvider, usePreviewContext] = strapiAdmin.createContext('PreviewP
483
531
  })
484
532
  }),
485
533
  /*#__PURE__*/ jsxRuntime.jsx(PreviewProvider, {
486
- url: previewUrlResponse.data.data.url,
534
+ url: previewUrl,
487
535
  document: documentResponse.document,
488
536
  title: documentTitle,
489
537
  meta: documentResponse.meta,
490
538
  schema: documentResponse.schema,
491
539
  layout: documentLayoutResponse.edit,
540
+ iframeRef: iframeRef,
492
541
  children: /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Form, {
493
- method: "POST",
494
- initialValues: documentResponse.document,
542
+ method: "PUT",
543
+ disabled: query.status === 'published' && documentResponse && documentResponse.document.status !== 'draft',
544
+ initialValues: documentResponse.getInitialFormValues(),
545
+ initialErrors: location?.state?.forceValidation ? validateSync(initialValues, {}) : {},
495
546
  height: "100%",
496
- children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
497
- direction: "column",
498
- height: "100%",
499
- alignItems: "stretch",
500
- children: window.strapi.future.isEnabled('unstablePreviewSideEditor') ? /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
501
- children: [
502
- /*#__PURE__*/ jsxRuntime.jsx(UnstablePreviewHeader, {}),
503
- /*#__PURE__*/ jsxRuntime.jsx(UnstablePreviewContent, {})
504
- ]
505
- }) : /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
506
- children: [
507
- /*#__PURE__*/ jsxRuntime.jsx(PreviewHeader, {}),
508
- /*#__PURE__*/ jsxRuntime.jsx(PreviewContent, {})
509
- ]
547
+ validate: (values, options)=>{
548
+ const yupSchema = index.createYupSchema(documentResponse.schema?.attributes, documentResponse.components, {
549
+ status: documentResponse.document?.status,
550
+ ...options
551
+ });
552
+ return yupSchema.validate(values, {
553
+ abortEarly: false
554
+ });
555
+ },
556
+ children: ({ resetForm })=>/*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
557
+ direction: "column",
558
+ height: "100%",
559
+ alignItems: "stretch",
560
+ children: window.strapi.future.isEnabled('unstablePreviewSideEditor') ? /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
561
+ children: [
562
+ /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Blocker, {
563
+ onProceed: resetForm
564
+ }),
565
+ /*#__PURE__*/ jsxRuntime.jsx(UnstablePreviewHeader, {}),
566
+ /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
567
+ flex: 1,
568
+ overflow: "auto",
569
+ alignItems: "stretch",
570
+ children: [
571
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
572
+ overflow: "auto",
573
+ width: isSideEditorOpen ? '50%' : 0,
574
+ borderWidth: "0 1px 0 0",
575
+ borderColor: "neutral150",
576
+ paddingTop: 6,
577
+ paddingBottom: 6,
578
+ // Remove horizontal padding when the editor is closed or it won't fully disappear
579
+ paddingLeft: isSideEditorOpen ? 6 : 0,
580
+ paddingRight: isSideEditorOpen ? 6 : 0,
581
+ transition: "all 0.2s ease-in-out",
582
+ children: /*#__PURE__*/ jsxRuntime.jsx(Input.FormLayout, {
583
+ layout: documentLayoutResponse.edit.layout,
584
+ hasBackground: true
585
+ })
586
+ }),
587
+ /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Box, {
588
+ position: "relative",
589
+ flex: 1,
590
+ height: "100%",
591
+ overflow: "hidden",
592
+ children: [
593
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
594
+ "data-testid": "preview-iframe",
595
+ ref: iframeRef,
596
+ src: previewUrl,
597
+ title: formatMessage({
598
+ id: 'content-manager.preview.panel.title',
599
+ defaultMessage: 'Preview'
600
+ }),
601
+ width: "100%",
602
+ height: "100%",
603
+ borderWidth: 0,
604
+ tag: "iframe"
605
+ }, previewUrl),
606
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
607
+ variant: "tertiary",
608
+ label: formatMessage(isSideEditorOpen ? {
609
+ id: 'content-manager.preview.content.close-editor',
610
+ defaultMessage: 'Close editor'
611
+ } : {
612
+ id: 'content-manager.preview.content.open-editor',
613
+ defaultMessage: 'Open editor'
614
+ }),
615
+ onClick: ()=>setIsSideEditorOpen((prev)=>!prev),
616
+ position: "absolute",
617
+ top: 2,
618
+ left: 2,
619
+ children: /*#__PURE__*/ jsxRuntime.jsx(AnimatedArrow, {
620
+ isSideEditorOpen: isSideEditorOpen
621
+ })
622
+ })
623
+ ]
624
+ })
625
+ ]
626
+ })
627
+ ]
628
+ }) : /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
629
+ children: [
630
+ /*#__PURE__*/ jsxRuntime.jsx(PreviewHeader, {}),
631
+ /*#__PURE__*/ jsxRuntime.jsx(PreviewContent, {})
632
+ ]
633
+ })
510
634
  })
511
- })
512
635
  })
513
636
  })
514
637
  ]
@@ -526,6 +649,10 @@ const [PreviewProvider, usePreviewContext] = strapiAdmin.createContext('PreviewP
526
649
  {
527
650
  action: 'plugin::content-manager.explorer.update',
528
651
  subject: model
652
+ },
653
+ {
654
+ action: 'plugin::content-manager.explorer.publish',
655
+ subject: model
529
656
  }
530
657
  ]);
531
658
  if (isLoading) {
@@ -570,4 +697,4 @@ const ProtectedPreviewPage = ()=>{
570
697
 
571
698
  exports.ProtectedPreviewPage = ProtectedPreviewPage;
572
699
  exports.usePreviewContext = usePreviewContext;
573
- //# sourceMappingURL=Preview-CXtc9yEV.js.map
700
+ //# sourceMappingURL=Preview-DFV3Bgia.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Preview-DFV3Bgia.js","sources":["../../../admin/src/preview/components/PreviewContent.tsx","../../../admin/src/preview/components/PreviewHeader.tsx","../../../admin/src/preview/pages/Preview.tsx"],"sourcesContent":["import { 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 DescriptionComponentRenderer,\n useClipboard,\n useHistory,\n useNotification,\n useQueryParams,\n useStrapiApp,\n} from '@strapi/admin/strapi-admin';\nimport { IconButton, Tabs, Typography, Grid, Flex } 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 { InjectionZone } from '../../components/InjectionZone';\nimport { DocumentActionButton } from '../../pages/EditView/components/DocumentActions';\nimport { DocumentStatus } from '../../pages/EditView/components/DocumentStatus';\nimport { getDocumentStatus } from '../../pages/EditView/EditViewPage';\nimport { usePreviewContext } from '../pages/Preview';\n\nimport type { ContentManagerPlugin, DocumentActionProps } from '../../content-manager';\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 variant=\"ghost\"\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 <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 * PreviewHeader\n * -----------------------------------------------------------------------------------------------*/\n\nconst UnstablePreviewHeader = () => {\n const title = usePreviewContext('PreviewHeader', (state) => state.title);\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 plugins = useStrapiApp('PreviewHeader', (state) => state.plugins);\n const iframeRef = usePreviewContext('PreviewHeader', (state) => state.iframeRef);\n\n const [{ query }] = useQueryParams<{\n status?: 'draft' | 'published';\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 const hasDraftAndPublish = schema.options?.draftAndPublish ?? false;\n const documentActionProps = {\n activeTab: query.status ?? null,\n collectionType: schema.kind === 'collectionType' ? 'collection-types' : 'single-types',\n model: schema.uid,\n documentId: document.documentId,\n document,\n meta,\n onPreview: () => {\n iframeRef?.current?.contentWindow?.postMessage(\n { type: 'strapiUpdate' },\n // The iframe origin is safe to use since it must be provided through the allowedOrigins config\n new URL(iframeRef.current.src).origin\n );\n },\n } satisfies DocumentActionProps;\n\n return (\n <Flex height=\"48px\" gap={4} background=\"neutral0\" borderColor=\"neutral150\" tag=\"header\">\n {/* Title and status */}\n <TitleContainer height=\"100%\" paddingLeft={2} paddingRight={4}>\n <ClosePreviewButton />\n <PreviewTitle\n tag=\"h1\"\n title={title}\n maxWidth=\"200px\"\n fontSize={2}\n paddingLeft={2}\n paddingRight={3}\n fontWeight={600}\n >\n {title}\n </PreviewTitle>\n <Status />\n </TitleContainer>\n\n {/* Tabs and actions */}\n <Flex\n flex={1}\n paddingRight={2}\n gap={2}\n justifyContent={hasDraftAndPublish ? 'space-between' : 'flex-end'}\n >\n <Flex flex=\"1 1 70%\">\n <PreviewTabs />\n </Flex>\n <Flex gap={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 <InjectionZone area=\"preview.actions\" />\n <DescriptionComponentRenderer\n props={documentActionProps}\n descriptions={(\n plugins['content-manager'].apis as ContentManagerPlugin['config']['apis']\n ).getDocumentActions('preview')}\n >\n {(actions) => {\n const filteredActions = actions.filter((action) =>\n [action.position].flat().includes('preview')\n );\n const [primaryAction, secondaryAction] = filteredActions;\n\n if (!primaryAction && !secondaryAction) return null;\n\n // Both actions are available when draft and publish enabled\n if (primaryAction && secondaryAction) {\n return (\n <>\n {/* Save */}\n <DocumentActionButton\n {...secondaryAction}\n variant={secondaryAction.variant || 'secondary'}\n />\n {/* Publish */}\n <DocumentActionButton\n {...primaryAction}\n variant={primaryAction.variant || 'default'}\n />\n </>\n );\n }\n\n // Otherwise we just have the save action\n return (\n <DocumentActionButton\n {...primaryAction}\n variant={primaryAction.variant || 'secondary'}\n />\n );\n }}\n </DescriptionComponentRenderer>\n </Flex>\n </Flex>\n </Flex>\n );\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\nconst TitleContainer = styled(Flex)`\n border-right: 1px solid ${({ theme }) => theme.colors.neutral150};\n`;\n\nexport { PreviewHeader, UnstablePreviewHeader };\n","import * as React from 'react';\n\nimport {\n Page,\n useQueryParams,\n useRBAC,\n createContext,\n Form as FormContext,\n Blocker,\n} from '@strapi/admin/strapi-admin';\nimport { Box, Flex, FocusTrap, IconButton, Portal } from '@strapi/design-system';\nimport { ArrowLineLeft } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useLocation, useParams } from 'react-router-dom';\nimport { styled } from 'styled-components';\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 { type EditLayout, useDocumentLayout } from '../../hooks/useDocumentLayout';\nimport { FormLayout } from '../../pages/EditView/components/FormLayout';\nimport { buildValidParams } from '../../utils/api';\nimport { createYupSchema } from '../../utils/validation';\nimport { PreviewContent } from '../components/PreviewContent';\nimport { PreviewHeader, UnstablePreviewHeader } 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 layout: EditLayout;\n iframeRef?: React.RefObject<HTMLIFrameElement>;\n}\n\nconst [PreviewProvider, usePreviewContext] = createContext<PreviewContextValue>('PreviewPage');\n\n/* -------------------------------------------------------------------------------------------------\n * PreviewPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst AnimatedArrow = styled(ArrowLineLeft)<{ isSideEditorOpen: boolean }>`\n will-change: transform;\n rotate: ${(props) => (props.isSideEditorOpen ? '0deg' : '180deg')};\n transition: rotate 0.2s ease-in-out;\n`;\n\nconst PreviewPage = () => {\n const location = useLocation();\n const { formatMessage } = useIntl();\n\n const iframeRef = React.useRef<HTMLIFrameElement>(null);\n const [isSideEditorOpen, setIsSideEditorOpen] = React.useState(true);\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 status?: string;\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 const documentResponse = useDocument({\n model,\n collectionType,\n documentId,\n params,\n });\n const documentLayoutResponse = useDocumentLayout(model);\n\n const isLoading =\n previewUrlResponse.isLoading || documentLayoutResponse.isLoading || documentResponse.isLoading;\n if (isLoading && !documentResponse.document?.documentId) {\n return <Page.Loading />;\n }\n\n const initialValues = documentResponse.getInitialFormValues();\n\n if (\n previewUrlResponse.error ||\n documentLayoutResponse.error ||\n !documentResponse.document ||\n !documentResponse.meta ||\n !documentResponse.schema ||\n !initialValues\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 const validateSync = (values: Record<string, unknown>, options: Record<string, string>) => {\n const yupSchema = createYupSchema(\n documentResponse.schema?.attributes,\n documentResponse.components,\n {\n status: documentResponse.document?.status,\n ...options,\n }\n );\n\n return yupSchema.validateSync(values, { abortEarly: false });\n };\n\n const previewUrl = previewUrlResponse.data.data.url;\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={previewUrl}\n document={documentResponse.document}\n title={documentTitle}\n meta={documentResponse.meta}\n schema={documentResponse.schema}\n layout={documentLayoutResponse.edit}\n iframeRef={iframeRef}\n >\n <FormContext\n method=\"PUT\"\n disabled={\n query.status === 'published' &&\n documentResponse &&\n documentResponse.document.status !== 'draft'\n }\n initialValues={documentResponse.getInitialFormValues()}\n initialErrors={location?.state?.forceValidation ? validateSync(initialValues, {}) : {}}\n height=\"100%\"\n validate={(values: Record<string, unknown>, options: Record<string, string>) => {\n const yupSchema = createYupSchema(\n documentResponse.schema?.attributes,\n documentResponse.components,\n {\n status: documentResponse.document?.status,\n ...options,\n }\n );\n\n return yupSchema.validate(values, { abortEarly: false });\n }}\n >\n {({ resetForm }) => (\n <Flex direction=\"column\" height=\"100%\" alignItems=\"stretch\">\n {window.strapi.future.isEnabled('unstablePreviewSideEditor') ? (\n <>\n <Blocker onProceed={resetForm} />\n <UnstablePreviewHeader />\n <Flex flex={1} overflow=\"auto\" alignItems=\"stretch\">\n <Box\n overflow=\"auto\"\n width={isSideEditorOpen ? '50%' : 0}\n borderWidth=\"0 1px 0 0\"\n borderColor=\"neutral150\"\n paddingTop={6}\n paddingBottom={6}\n // Remove horizontal padding when the editor is closed or it won't fully disappear\n paddingLeft={isSideEditorOpen ? 6 : 0}\n paddingRight={isSideEditorOpen ? 6 : 0}\n transition=\"all 0.2s ease-in-out\"\n >\n <FormLayout layout={documentLayoutResponse.edit.layout} hasBackground />\n </Box>\n <Box position=\"relative\" flex={1} height=\"100%\" overflow=\"hidden\">\n <Box\n data-testid=\"preview-iframe\"\n ref={iframeRef}\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 <IconButton\n variant=\"tertiary\"\n label={formatMessage(\n isSideEditorOpen\n ? {\n id: 'content-manager.preview.content.close-editor',\n defaultMessage: 'Close editor',\n }\n : {\n id: 'content-manager.preview.content.open-editor',\n defaultMessage: 'Open editor',\n }\n )}\n onClick={() => setIsSideEditorOpen((prev) => !prev)}\n position=\"absolute\"\n top={2}\n left={2}\n >\n <AnimatedArrow isSideEditorOpen={isSideEditorOpen} />\n </IconButton>\n </Box>\n </Flex>\n </>\n ) : (\n <>\n <PreviewHeader />\n <PreviewContent />\n </>\n )}\n </Flex>\n )}\n </FormContext>\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([\n { action: 'plugin::content-manager.explorer.read', subject: model },\n { action: 'plugin::content-manager.explorer.update', subject: model },\n { action: 'plugin::content-manager.explorer.publish', subject: model },\n ]);\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\n permissions={permissions.filter((permission) =>\n permission.action.includes('explorer.read')\n )}\n >\n <DocumentRBAC permissions={permissions}>\n <PreviewPage />\n </DocumentRBAC>\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":["PreviewContent","previewUrl","usePreviewContext","state","url","formatMessage","useIntl","_jsx","Box","src","title","id","defaultMessage","width","height","borderWidth","tag","ClosePreviewButton","query","useQueryParams","canGoBack","useHistory","goBack","history","locationIndex","currentLocationIndex","historyTo","at","undefined","fallback","pathname","search","stringify","encode","toWithFallback","handleClick","e","preventDefault","IconButton","variant","Link","relative","to","onClick","label","Cross","Status","document","schema","meta","hasDraftAndPublished","options","draftAndPublish","status","getDocumentStatus","DocumentStatus","size","PreviewTabs","setQuery","hasDraftAndPublish","documentStatus","handleTabChange","Tabs","Root","value","onValueChange","_jsxs","List","aria-label","StatusTab","disabled","UnstablePreviewHeader","plugins","useStrapiApp","iframeRef","toggleNotification","useNotification","copy","useClipboard","handleCopyLink","window","location","href","message","type","documentActionProps","activeTab","collectionType","kind","model","uid","documentId","onPreview","current","contentWindow","postMessage","URL","origin","Flex","gap","background","borderColor","TitleContainer","paddingLeft","paddingRight","PreviewTitle","maxWidth","fontSize","fontWeight","flex","justifyContent","LinkIcon","InjectionZone","area","DescriptionComponentRenderer","props","descriptions","apis","getDocumentActions","actions","filteredActions","filter","action","position","flat","includes","primaryAction","secondaryAction","_Fragment","DocumentActionButton","PreviewHeader","Grid","gridCols","Item","xs","paddingTop","paddingBottom","marginBottom","alignItems","margin","styled","Typography","Trigger","theme","colors","neutral150","PreviewProvider","createContext","AnimatedArrow","ArrowLineLeft","isSideEditorOpen","PreviewPage","useLocation","React","useRef","setIsSideEditorOpen","useState","slug","useParams","params","useMemo","buildValidParams","Error","COLLECTION_TYPES","previewUrlResponse","useGetPreviewUrlQuery","contentType","locale","documentResponse","useDocument","documentLayoutResponse","useDocumentLayout","isLoading","Page","Loading","initialValues","getInitialFormValues","error","data","NoData","documentTitle","getTitle","edit","settings","mainField","validateSync","values","yupSchema","createYupSchema","attributes","components","abortEarly","Title","layout","FormContext","method","initialErrors","forceValidation","validate","resetForm","direction","strapi","future","isEnabled","Blocker","onProceed","overflow","transition","FormLayout","hasBackground","data-testid","ref","prev","top","left","ProtectedPreviewPageImpl","permissions","useRBAC","subject","zIndex","Protect","permission","DocumentRBAC","ProtectedPreviewPage","Portal","FocusTrap"],"mappings":"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"}