@strapi/content-manager 0.0.0-experimental.32c4b04580cc12400710050c8198e46b3644cfd4 → 0.0.0-experimental.36632203b17974c18103c138ffbef53a82e448c3

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 (193) hide show
  1. package/dist/_chunks/{ComponentConfigurationPage-5ukroXAh.js → ComponentConfigurationPage-Br8hp2Xt.js} +4 -4
  2. package/dist/_chunks/{ComponentConfigurationPage-5ukroXAh.js.map → ComponentConfigurationPage-Br8hp2Xt.js.map} +1 -1
  3. package/dist/_chunks/{ComponentConfigurationPage-BAgyHiMm.mjs → ComponentConfigurationPage-DhwMhiRn.mjs} +4 -4
  4. package/dist/_chunks/{ComponentConfigurationPage-BAgyHiMm.mjs.map → ComponentConfigurationPage-DhwMhiRn.mjs.map} +1 -1
  5. package/dist/_chunks/{EditConfigurationPage-Xp7lun0f.js → EditConfigurationPage-BG7rpPjL.js} +4 -4
  6. package/dist/_chunks/{EditConfigurationPage-Xp7lun0f.js.map → EditConfigurationPage-BG7rpPjL.js.map} +1 -1
  7. package/dist/_chunks/{EditConfigurationPage-DmoXawIh.mjs → EditConfigurationPage-CWao3CZ3.mjs} +4 -4
  8. package/dist/_chunks/{EditConfigurationPage-DmoXawIh.mjs.map → EditConfigurationPage-CWao3CZ3.mjs.map} +1 -1
  9. package/dist/_chunks/{EditViewPage-C-ukDOB7.js → EditViewPage-BUtpHsMz.js} +38 -11
  10. package/dist/_chunks/EditViewPage-BUtpHsMz.js.map +1 -0
  11. package/dist/_chunks/{EditViewPage-BLsjc5F-.mjs → EditViewPage-hiwZg61J.mjs} +39 -12
  12. package/dist/_chunks/EditViewPage-hiwZg61J.mjs.map +1 -0
  13. package/dist/_chunks/{Field-Cs7duwWd.mjs → Field-BQQLwyUs.mjs} +174 -102
  14. package/dist/_chunks/Field-BQQLwyUs.mjs.map +1 -0
  15. package/dist/_chunks/{Field-Bfph5SOd.js → Field-DEdug-Ll.js} +176 -104
  16. package/dist/_chunks/Field-DEdug-Ll.js.map +1 -0
  17. package/dist/_chunks/{Form-Dg_GS5TQ.mjs → Form-DwJovCha.mjs} +36 -17
  18. package/dist/_chunks/Form-DwJovCha.mjs.map +1 -0
  19. package/dist/_chunks/{Form-CPYqIWDG.js → Form-v5pkY-X_.js} +36 -17
  20. package/dist/_chunks/Form-v5pkY-X_.js.map +1 -0
  21. package/dist/_chunks/{History-DNQkXANT.js → History-40apIShV.js} +37 -47
  22. package/dist/_chunks/History-40apIShV.js.map +1 -0
  23. package/dist/_chunks/{History-wrnHqf09.mjs → History-B9uJsxZl.mjs} +38 -48
  24. package/dist/_chunks/History-B9uJsxZl.mjs.map +1 -0
  25. package/dist/_chunks/{ListConfigurationPage-DScmJVkW.mjs → ListConfigurationPage-CA4oi4Hj.mjs} +15 -5
  26. package/dist/_chunks/ListConfigurationPage-CA4oi4Hj.mjs.map +1 -0
  27. package/dist/_chunks/{ListConfigurationPage-CUQxfpjT.js → ListConfigurationPage-DAGbWDIL.js} +15 -5
  28. package/dist/_chunks/ListConfigurationPage-DAGbWDIL.js.map +1 -0
  29. package/dist/_chunks/{ListViewPage-C4IvrMgY.mjs → ListViewPage-Ca8F1NL-.mjs} +59 -39
  30. package/dist/_chunks/ListViewPage-Ca8F1NL-.mjs.map +1 -0
  31. package/dist/_chunks/{ListViewPage-BsLiH2-2.js → ListViewPage-CjaHQ2_V.js} +61 -41
  32. package/dist/_chunks/ListViewPage-CjaHQ2_V.js.map +1 -0
  33. package/dist/_chunks/{NoContentTypePage-BZ-PnGAf.js → NoContentTypePage-CGxqLI8j.js} +2 -2
  34. package/dist/_chunks/{NoContentTypePage-BZ-PnGAf.js.map → NoContentTypePage-CGxqLI8j.js.map} +1 -1
  35. package/dist/_chunks/{NoContentTypePage-Djg8nPlj.mjs → NoContentTypePage-CwfnU-aN.mjs} +2 -2
  36. package/dist/_chunks/{NoContentTypePage-Djg8nPlj.mjs.map → NoContentTypePage-CwfnU-aN.mjs.map} +1 -1
  37. package/dist/_chunks/{NoPermissionsPage-_lUqjGW3.js → NoPermissionsPage-CY3_QduF.js} +2 -2
  38. package/dist/_chunks/{NoPermissionsPage-_lUqjGW3.js.map → NoPermissionsPage-CY3_QduF.js.map} +1 -1
  39. package/dist/_chunks/{NoPermissionsPage-DSP7R-hv.mjs → NoPermissionsPage-iPk2lFR6.mjs} +2 -2
  40. package/dist/_chunks/{NoPermissionsPage-DSP7R-hv.mjs.map → NoPermissionsPage-iPk2lFR6.mjs.map} +1 -1
  41. package/dist/_chunks/Preview-DRJhcaIO.mjs +267 -0
  42. package/dist/_chunks/Preview-DRJhcaIO.mjs.map +1 -0
  43. package/dist/_chunks/Preview-V8XOfrQf.js +286 -0
  44. package/dist/_chunks/Preview-V8XOfrQf.js.map +1 -0
  45. package/dist/_chunks/{Relations-CtELXYIK.js → Relations-CGerEwji.js} +72 -36
  46. package/dist/_chunks/Relations-CGerEwji.js.map +1 -0
  47. package/dist/_chunks/{Relations-BZr8tL0R.mjs → Relations-DGWa9W2j.mjs} +73 -37
  48. package/dist/_chunks/Relations-DGWa9W2j.mjs.map +1 -0
  49. package/dist/_chunks/{en-uOUIxfcQ.js → en-CHOp_xJv.js} +23 -13
  50. package/dist/_chunks/{en-uOUIxfcQ.js.map → en-CHOp_xJv.js.map} +1 -1
  51. package/dist/_chunks/{en-BrCTWlZv.mjs → en-D_BMf0hT.mjs} +23 -13
  52. package/dist/_chunks/{en-BrCTWlZv.mjs.map → en-D_BMf0hT.mjs.map} +1 -1
  53. package/dist/_chunks/{es-EUonQTon.js → es-9K52xZIr.js} +2 -2
  54. package/dist/_chunks/{ja-CcFe8diO.js.map → es-9K52xZIr.js.map} +1 -1
  55. package/dist/_chunks/{es-CeXiYflN.mjs → es-D34tqjMw.mjs} +2 -2
  56. package/dist/_chunks/{es-CeXiYflN.mjs.map → es-D34tqjMw.mjs.map} +1 -1
  57. package/dist/_chunks/{fr-CD9VFbPM.mjs → fr--pg5jUbt.mjs} +13 -3
  58. package/dist/_chunks/{fr-CD9VFbPM.mjs.map → fr--pg5jUbt.mjs.map} +1 -1
  59. package/dist/_chunks/{fr-B7kGGg3E.js → fr-B2Kyv8Z9.js} +13 -3
  60. package/dist/_chunks/{fr-B7kGGg3E.js.map → fr-B2Kyv8Z9.js.map} +1 -1
  61. package/dist/_chunks/{index-c_5DdJi-.mjs → index-V8MWkDSd.mjs} +987 -727
  62. package/dist/_chunks/index-V8MWkDSd.mjs.map +1 -0
  63. package/dist/_chunks/{index-OerGjbAN.js → index-tN1hpOMN.js} +968 -707
  64. package/dist/_chunks/index-tN1hpOMN.js.map +1 -0
  65. package/dist/_chunks/{ja-CcFe8diO.js → ja-7sfIbjxE.js} +2 -2
  66. package/dist/_chunks/{es-EUonQTon.js.map → ja-7sfIbjxE.js.map} +1 -1
  67. package/dist/_chunks/{ja-CtsUxOvk.mjs → ja-BHqhDq4V.mjs} +2 -2
  68. package/dist/_chunks/{ja-CtsUxOvk.mjs.map → ja-BHqhDq4V.mjs.map} +1 -1
  69. package/dist/_chunks/{layout-oPBiO7RY.mjs → layout-Bue_C6ui.mjs} +22 -9
  70. package/dist/_chunks/layout-Bue_C6ui.mjs.map +1 -0
  71. package/dist/_chunks/{layout-Ci7qHlFb.js → layout-BzX903CL.js} +21 -8
  72. package/dist/_chunks/layout-BzX903CL.js.map +1 -0
  73. package/dist/_chunks/{objects-gigeqt7s.js → objects-BcXOv6_9.js} +2 -4
  74. package/dist/_chunks/{objects-gigeqt7s.js.map → objects-BcXOv6_9.js.map} +1 -1
  75. package/dist/_chunks/{objects-mKMAmfec.mjs → objects-D6yBsdmx.mjs} +2 -4
  76. package/dist/_chunks/{objects-mKMAmfec.mjs.map → objects-D6yBsdmx.mjs.map} +1 -1
  77. package/dist/_chunks/{relations-COBpStiF.js → relations-C4HcWYYJ.js} +6 -7
  78. package/dist/_chunks/relations-C4HcWYYJ.js.map +1 -0
  79. package/dist/_chunks/{relations-BIdWFjdq.mjs → relations-C8eyDiIO.mjs} +6 -7
  80. package/dist/_chunks/relations-C8eyDiIO.mjs.map +1 -0
  81. package/dist/_chunks/{usePrev-B9w_-eYc.js → useDebounce-CtcjDB3L.js} +14 -1
  82. package/dist/_chunks/useDebounce-CtcjDB3L.js.map +1 -0
  83. package/dist/_chunks/useDebounce-DmuSJIF3.mjs +29 -0
  84. package/dist/_chunks/useDebounce-DmuSJIF3.mjs.map +1 -0
  85. package/dist/admin/index.js +2 -1
  86. package/dist/admin/index.js.map +1 -1
  87. package/dist/admin/index.mjs +5 -4
  88. package/dist/admin/src/exports.d.ts +1 -1
  89. package/dist/admin/src/history/services/historyVersion.d.ts +1 -1
  90. package/dist/admin/src/hooks/useDocument.d.ts +32 -1
  91. package/dist/admin/src/pages/EditView/EditViewPage.d.ts +9 -1
  92. package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.d.ts +2 -2
  93. package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/WysiwygFooter.d.ts +2 -2
  94. package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/WysiwygStyles.d.ts +4 -48
  95. package/dist/admin/src/pages/EditView/components/Header.d.ts +11 -11
  96. package/dist/admin/src/preview/components/PreviewHeader.d.ts +2 -0
  97. package/dist/admin/src/preview/components/PreviewSidePanel.d.ts +3 -0
  98. package/dist/admin/src/preview/constants.d.ts +1 -0
  99. package/dist/admin/src/preview/index.d.ts +4 -0
  100. package/dist/admin/src/preview/pages/Preview.d.ts +11 -0
  101. package/dist/admin/src/preview/routes.d.ts +3 -0
  102. package/dist/admin/src/preview/services/preview.d.ts +3 -0
  103. package/dist/admin/src/services/api.d.ts +1 -1
  104. package/dist/admin/src/services/components.d.ts +2 -2
  105. package/dist/admin/src/services/contentTypes.d.ts +3 -3
  106. package/dist/admin/src/services/documents.d.ts +19 -17
  107. package/dist/admin/src/services/init.d.ts +1 -1
  108. package/dist/admin/src/services/relations.d.ts +2 -2
  109. package/dist/admin/src/services/uid.d.ts +3 -3
  110. package/dist/admin/src/utils/validation.d.ts +4 -1
  111. package/dist/server/index.js +513 -235
  112. package/dist/server/index.js.map +1 -1
  113. package/dist/server/index.mjs +514 -236
  114. package/dist/server/index.mjs.map +1 -1
  115. package/dist/server/src/bootstrap.d.ts.map +1 -1
  116. package/dist/server/src/controllers/collection-types.d.ts.map +1 -1
  117. package/dist/server/src/controllers/index.d.ts.map +1 -1
  118. package/dist/server/src/controllers/relations.d.ts.map +1 -1
  119. package/dist/server/src/controllers/utils/metadata.d.ts +15 -1
  120. package/dist/server/src/controllers/utils/metadata.d.ts.map +1 -1
  121. package/dist/server/src/history/services/history.d.ts.map +1 -1
  122. package/dist/server/src/history/services/lifecycles.d.ts.map +1 -1
  123. package/dist/server/src/history/services/utils.d.ts +4 -4
  124. package/dist/server/src/history/services/utils.d.ts.map +1 -1
  125. package/dist/server/src/index.d.ts +4 -4
  126. package/dist/server/src/policies/hasPermissions.d.ts.map +1 -1
  127. package/dist/server/src/preview/constants.d.ts +2 -0
  128. package/dist/server/src/preview/constants.d.ts.map +1 -0
  129. package/dist/server/src/preview/controllers/index.d.ts +2 -0
  130. package/dist/server/src/preview/controllers/index.d.ts.map +1 -0
  131. package/dist/server/src/preview/controllers/preview.d.ts +13 -0
  132. package/dist/server/src/preview/controllers/preview.d.ts.map +1 -0
  133. package/dist/server/src/preview/controllers/validation/preview.d.ts +6 -0
  134. package/dist/server/src/preview/controllers/validation/preview.d.ts.map +1 -0
  135. package/dist/server/src/preview/index.d.ts +4 -0
  136. package/dist/server/src/preview/index.d.ts.map +1 -0
  137. package/dist/server/src/preview/routes/index.d.ts +8 -0
  138. package/dist/server/src/preview/routes/index.d.ts.map +1 -0
  139. package/dist/server/src/preview/routes/preview.d.ts +4 -0
  140. package/dist/server/src/preview/routes/preview.d.ts.map +1 -0
  141. package/dist/server/src/preview/services/index.d.ts +15 -0
  142. package/dist/server/src/preview/services/index.d.ts.map +1 -0
  143. package/dist/server/src/preview/services/preview-config.d.ts +30 -0
  144. package/dist/server/src/preview/services/preview-config.d.ts.map +1 -0
  145. package/dist/server/src/preview/services/preview.d.ts +12 -0
  146. package/dist/server/src/preview/services/preview.d.ts.map +1 -0
  147. package/dist/server/src/preview/utils.d.ts +18 -0
  148. package/dist/server/src/preview/utils.d.ts.map +1 -0
  149. package/dist/server/src/routes/index.d.ts.map +1 -1
  150. package/dist/server/src/services/document-metadata.d.ts +8 -8
  151. package/dist/server/src/services/document-metadata.d.ts.map +1 -1
  152. package/dist/server/src/services/index.d.ts +4 -4
  153. package/dist/server/src/services/index.d.ts.map +1 -1
  154. package/dist/server/src/services/permission-checker.d.ts.map +1 -1
  155. package/dist/server/src/services/utils/configuration/index.d.ts +2 -2
  156. package/dist/server/src/services/utils/configuration/layouts.d.ts +2 -2
  157. package/dist/server/src/utils/index.d.ts +2 -0
  158. package/dist/server/src/utils/index.d.ts.map +1 -1
  159. package/dist/shared/contracts/collection-types.d.ts +3 -1
  160. package/dist/shared/contracts/collection-types.d.ts.map +1 -1
  161. package/dist/shared/contracts/index.d.ts +1 -0
  162. package/dist/shared/contracts/index.d.ts.map +1 -1
  163. package/dist/shared/contracts/preview.d.ts +27 -0
  164. package/dist/shared/contracts/preview.d.ts.map +1 -0
  165. package/dist/shared/index.js +4 -0
  166. package/dist/shared/index.js.map +1 -1
  167. package/dist/shared/index.mjs +4 -0
  168. package/dist/shared/index.mjs.map +1 -1
  169. package/package.json +13 -13
  170. package/dist/_chunks/EditViewPage-BLsjc5F-.mjs.map +0 -1
  171. package/dist/_chunks/EditViewPage-C-ukDOB7.js.map +0 -1
  172. package/dist/_chunks/Field-Bfph5SOd.js.map +0 -1
  173. package/dist/_chunks/Field-Cs7duwWd.mjs.map +0 -1
  174. package/dist/_chunks/Form-CPYqIWDG.js.map +0 -1
  175. package/dist/_chunks/Form-Dg_GS5TQ.mjs.map +0 -1
  176. package/dist/_chunks/History-DNQkXANT.js.map +0 -1
  177. package/dist/_chunks/History-wrnHqf09.mjs.map +0 -1
  178. package/dist/_chunks/ListConfigurationPage-CUQxfpjT.js.map +0 -1
  179. package/dist/_chunks/ListConfigurationPage-DScmJVkW.mjs.map +0 -1
  180. package/dist/_chunks/ListViewPage-BsLiH2-2.js.map +0 -1
  181. package/dist/_chunks/ListViewPage-C4IvrMgY.mjs.map +0 -1
  182. package/dist/_chunks/Relations-BZr8tL0R.mjs.map +0 -1
  183. package/dist/_chunks/Relations-CtELXYIK.js.map +0 -1
  184. package/dist/_chunks/index-OerGjbAN.js.map +0 -1
  185. package/dist/_chunks/index-c_5DdJi-.mjs.map +0 -1
  186. package/dist/_chunks/layout-Ci7qHlFb.js.map +0 -1
  187. package/dist/_chunks/layout-oPBiO7RY.mjs.map +0 -1
  188. package/dist/_chunks/relations-BIdWFjdq.mjs.map +0 -1
  189. package/dist/_chunks/relations-COBpStiF.js.map +0 -1
  190. package/dist/_chunks/usePrev-B9w_-eYc.js.map +0 -1
  191. package/dist/_chunks/usePrev-DH6iah0A.mjs +0 -16
  192. package/dist/_chunks/usePrev-DH6iah0A.mjs.map +0 -1
  193. package/strapi-server.js +0 -3
@@ -0,0 +1,286 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("react/jsx-runtime");
4
+ const React = require("react");
5
+ const strapiAdmin = require("@strapi/admin/strapi-admin");
6
+ const designSystem = require("@strapi/design-system");
7
+ const reactIntl = require("react-intl");
8
+ const reactRouterDom = require("react-router-dom");
9
+ const index = require("./index-tN1hpOMN.js");
10
+ const Icons = require("@strapi/icons");
11
+ const qs = require("qs");
12
+ const EditViewPage = require("./EditViewPage-BUtpHsMz.js");
13
+ function _interopNamespace(e) {
14
+ if (e && e.__esModule)
15
+ return e;
16
+ const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
17
+ if (e) {
18
+ for (const k in e) {
19
+ if (k !== "default") {
20
+ const d = Object.getOwnPropertyDescriptor(e, k);
21
+ Object.defineProperty(n, k, d.get ? d : {
22
+ enumerable: true,
23
+ get: () => e[k]
24
+ });
25
+ }
26
+ }
27
+ }
28
+ n.default = e;
29
+ return Object.freeze(n);
30
+ }
31
+ const React__namespace = /* @__PURE__ */ _interopNamespace(React);
32
+ const ClosePreviewButton = () => {
33
+ const [{ query }] = strapiAdmin.useQueryParams();
34
+ const navigate = reactRouterDom.useNavigate();
35
+ const { formatMessage } = reactIntl.useIntl();
36
+ const canGoBack = strapiAdmin.useHistory("BackButton", (state) => state.canGoBack);
37
+ const goBack = strapiAdmin.useHistory("BackButton", (state) => state.goBack);
38
+ const history = strapiAdmin.useHistory("BackButton", (state) => state.history);
39
+ const fallbackUrl = {
40
+ pathname: "..",
41
+ search: qs.stringify(query, { encode: false })
42
+ };
43
+ const handleClick = (e) => {
44
+ e.preventDefault();
45
+ if (canGoBack) {
46
+ goBack();
47
+ } else {
48
+ navigate(fallbackUrl);
49
+ }
50
+ };
51
+ return /* @__PURE__ */ jsxRuntime.jsx(
52
+ designSystem.IconButton,
53
+ {
54
+ tag: reactRouterDom.Link,
55
+ to: history.at(-1) ?? fallbackUrl,
56
+ onClick: handleClick,
57
+ label: formatMessage({
58
+ id: "content-manager.preview.header.close",
59
+ defaultMessage: "Close preview"
60
+ }),
61
+ children: /* @__PURE__ */ jsxRuntime.jsx(Icons.Cross, {})
62
+ }
63
+ );
64
+ };
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
+ };
98
+ }
99
+ };
100
+ const DocumentStatus = () => {
101
+ const { formatMessage } = reactIntl.useIntl();
102
+ const document = usePreviewContext("PreviewHeader", (state) => state.document);
103
+ const schema = usePreviewContext("PreviewHeader", (state) => state.schema);
104
+ 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) {
109
+ return null;
110
+ }
111
+ return /* @__PURE__ */ jsxRuntime.jsx(
112
+ designSystem.Box,
113
+ {
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) })
124
+ }
125
+ );
126
+ };
127
+ const PreviewHeader = () => {
128
+ const mainField = usePreviewContext("PreviewHeader", (state) => state.mainField);
129
+ const document = usePreviewContext("PreviewHeader", (state) => state.document);
130
+ const title = document[mainField];
131
+ const { formatMessage } = reactIntl.useIntl();
132
+ const { toggleNotification } = strapiAdmin.useNotification();
133
+ const { copy } = strapiAdmin.useClipboard();
134
+ const handleCopyLink = () => {
135
+ copy(window.location.href);
136
+ toggleNotification({
137
+ message: formatMessage({
138
+ id: "content-manager.preview.copy.success",
139
+ defaultMessage: "Copied preview link"
140
+ }),
141
+ type: "success"
142
+ });
143
+ };
144
+ return /* @__PURE__ */ jsxRuntime.jsxs(
145
+ designSystem.Flex,
146
+ {
147
+ justifyContent: "space-between",
148
+ background: "neutral0",
149
+ padding: 2,
150
+ borderColor: "neutral150",
151
+ tag: "header",
152
+ children: [
153
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 3, children: [
154
+ /* @__PURE__ */ jsxRuntime.jsx(ClosePreviewButton, {}),
155
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { tag: "h1", fontWeight: 600, fontSize: 2, children: title }),
156
+ /* @__PURE__ */ jsxRuntime.jsx(DocumentStatus, {})
157
+ ] }),
158
+ /* @__PURE__ */ jsxRuntime.jsx(
159
+ designSystem.IconButton,
160
+ {
161
+ type: "button",
162
+ label: formatMessage({
163
+ id: "preview.copy.label",
164
+ defaultMessage: "Copy preview link"
165
+ }),
166
+ onClick: handleCopyLink,
167
+ children: /* @__PURE__ */ jsxRuntime.jsx(Icons.Link, {})
168
+ }
169
+ )
170
+ ]
171
+ }
172
+ );
173
+ };
174
+ const [PreviewProvider, usePreviewContext] = strapiAdmin.createContext("PreviewPage");
175
+ const PreviewPage = () => {
176
+ const { formatMessage } = reactIntl.useIntl();
177
+ const {
178
+ slug: model,
179
+ id: documentId,
180
+ collectionType
181
+ } = reactRouterDom.useParams();
182
+ const [{ query }] = strapiAdmin.useQueryParams();
183
+ const params = React__namespace.useMemo(() => index.buildValidParams(query), [query]);
184
+ if (!collectionType) {
185
+ throw new Error("Could not find collectionType in url params");
186
+ }
187
+ if (!model) {
188
+ throw new Error("Could not find model in url params");
189
+ }
190
+ if (collectionType === index.COLLECTION_TYPES && !documentId) {
191
+ throw new Error("Could not find documentId in url params");
192
+ }
193
+ const previewUrlResponse = index.useGetPreviewUrlQuery({
194
+ params: {
195
+ contentType: model
196
+ },
197
+ query: {
198
+ documentId,
199
+ locale: params.locale,
200
+ status: params.status
201
+ }
202
+ });
203
+ const documentResponse = index.useDocument({
204
+ model,
205
+ collectionType,
206
+ documentId,
207
+ params
208
+ });
209
+ const documentLayoutResponse = index.useDocumentLayout(model);
210
+ if (documentResponse.isLoading || previewUrlResponse.isLoading || documentLayoutResponse.isLoading) {
211
+ return /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Page.Loading, {});
212
+ }
213
+ if (previewUrlResponse.error || documentLayoutResponse.error || !documentResponse.document || !documentResponse.meta || !documentResponse.schema) {
214
+ return /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Page.Error, {});
215
+ }
216
+ if (!previewUrlResponse.data?.data?.url) {
217
+ return /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Page.NoData, {});
218
+ }
219
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
220
+ /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Page.Title, { children: formatMessage(
221
+ {
222
+ id: "content-manager.preview.page-title",
223
+ defaultMessage: "{contentType} preview"
224
+ },
225
+ {
226
+ contentType: documentLayoutResponse.edit.settings.displayName
227
+ }
228
+ ) }),
229
+ /* @__PURE__ */ jsxRuntime.jsx(
230
+ PreviewProvider,
231
+ {
232
+ url: previewUrlResponse.data.data.url,
233
+ mainField: documentLayoutResponse.edit.settings.mainField,
234
+ document: documentResponse.document,
235
+ meta: documentResponse.meta,
236
+ schema: documentResponse.schema,
237
+ children: /* @__PURE__ */ jsxRuntime.jsx(PreviewHeader, {})
238
+ }
239
+ )
240
+ ] });
241
+ };
242
+ const ProtectedPreviewPageImpl = () => {
243
+ const { slug: model } = reactRouterDom.useParams();
244
+ const {
245
+ permissions = [],
246
+ isLoading,
247
+ error
248
+ } = strapiAdmin.useRBAC([{ action: "plugin::content-manager.explorer.read", subject: model }]);
249
+ if (isLoading) {
250
+ return /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Page.Loading, {});
251
+ }
252
+ if (error || !model) {
253
+ return /* @__PURE__ */ jsxRuntime.jsx(
254
+ designSystem.Box,
255
+ {
256
+ height: "100vh",
257
+ width: "100vw",
258
+ position: "fixed",
259
+ top: 0,
260
+ left: 0,
261
+ zIndex: 2,
262
+ background: "neutral0",
263
+ children: /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Page.Error, {})
264
+ }
265
+ );
266
+ }
267
+ return /* @__PURE__ */ jsxRuntime.jsx(
268
+ designSystem.Box,
269
+ {
270
+ height: "100vh",
271
+ width: "100vw",
272
+ position: "fixed",
273
+ top: 0,
274
+ left: 0,
275
+ zIndex: 2,
276
+ background: "neutral0",
277
+ children: /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Page.Protect, { permissions, children: ({ permissions: permissions2 }) => /* @__PURE__ */ jsxRuntime.jsx(index.DocumentRBAC, { permissions: permissions2, children: /* @__PURE__ */ jsxRuntime.jsx(PreviewPage, {}) }) })
278
+ }
279
+ );
280
+ };
281
+ const ProtectedPreviewPage = () => {
282
+ return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Portal, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.FocusTrap, { children: /* @__PURE__ */ jsxRuntime.jsx(ProtectedPreviewPageImpl, {}) }) });
283
+ };
284
+ exports.ProtectedPreviewPage = ProtectedPreviewPage;
285
+ exports.usePreviewContext = usePreviewContext;
286
+ //# sourceMappingURL=Preview-V8XOfrQf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Preview-V8XOfrQf.js","sources":["../../admin/src/preview/components/PreviewHeader.tsx","../../admin/src/preview/pages/Preview.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useClipboard,\n useHistory,\n useNotification,\n useQueryParams,\n} from '@strapi/admin/strapi-admin';\nimport { Box, type BoxProps, Flex, IconButton, Typography } from '@strapi/design-system';\nimport { Cross, Link as LinkIcon } from '@strapi/icons';\nimport { stringify } from 'qs';\nimport { type MessageDescriptor, useIntl } from 'react-intl';\nimport { Link, type To, useNavigate } from 'react-router-dom';\n\nimport { getDocumentStatus } from '../../pages/EditView/EditViewPage';\nimport { usePreviewContext } from '../pages/Preview';\n\n/* -------------------------------------------------------------------------------------------------\n * ClosePreviewButton\n * -----------------------------------------------------------------------------------------------*/\n\nconst ClosePreviewButton = () => {\n const [{ query }] = useQueryParams();\n const navigate = useNavigate();\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\n const fallbackUrl: To = {\n pathname: '..',\n search: stringify(query, { encode: false }),\n };\n\n const handleClick = (e: React.MouseEvent) => {\n /**\n * Prevent normal link behavior. We only make it an achor for accessibility reasons.\n * The point of this logic is to act as the browser's back button when possible, and to fallback\n * to a link behavior to the edit view when no history is available.\n * */\n e.preventDefault();\n\n if (canGoBack) {\n goBack();\n } else {\n navigate(fallbackUrl);\n }\n };\n\n return (\n <IconButton\n tag={Link}\n to={history.at(-1) ?? fallbackUrl}\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 * DocumentStatus\n * -----------------------------------------------------------------------------------------------*/\n\ninterface StatusData {\n background: BoxProps['background'];\n border: BoxProps['borderColor'];\n text: BoxProps['color'];\n message: MessageDescriptor;\n}\n\nconst getStatusData = (status: ReturnType<typeof getDocumentStatus>): StatusData => {\n switch (status) {\n case 'draft':\n return {\n background: 'secondary100',\n border: 'secondary200',\n text: 'secondary700',\n message: {\n id: 'content-manager.containers.List.draft',\n defaultMessage: 'Draft',\n },\n };\n case 'modified':\n return {\n background: 'alternative100',\n border: 'alternative200',\n text: 'alternative700',\n message: {\n id: 'content-manager.containers.List.modified',\n defaultMessage: 'Modified',\n },\n };\n case 'published':\n default:\n return {\n background: 'success100',\n border: 'success200',\n text: 'success700',\n message: {\n id: 'content-manager.containers.List.published',\n defaultMessage: 'Published',\n },\n };\n }\n};\n\nconst DocumentStatus = () => {\n const { formatMessage } = useIntl();\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 hasDraftAndPublished = schema?.options?.draftAndPublish ?? false;\n const status = getDocumentStatus(document, meta);\n\n const statusData = getStatusData(status);\n\n if (!hasDraftAndPublished) {\n return null;\n }\n\n /**\n * TODO: Add an XS size to the Status component from the design system so that we can add\n * a variant to the VersionsList component.\n * Then we could reuse it both here and in history's VersionCard component.\n */\n\n return (\n <Box\n background={statusData.background}\n borderStyle=\"solid\"\n borderWidth=\"1px\"\n borderColor={statusData.border}\n hasRadius\n paddingLeft=\"6px\"\n paddingRight=\"6px\"\n paddingTop=\"2px\"\n paddingBottom=\"2px\"\n >\n <Typography variant=\"pi\" fontWeight=\"bold\" textColor={statusData.text}>\n {formatMessage(statusData.message)}\n </Typography>\n </Box>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * PreviewHeader\n * -----------------------------------------------------------------------------------------------*/\n\nconst PreviewHeader = () => {\n // Get main field\n const mainField = usePreviewContext('PreviewHeader', (state) => state.mainField);\n const document = usePreviewContext('PreviewHeader', (state) => state.document);\n const title = document[mainField];\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 <Flex\n justifyContent=\"space-between\"\n background=\"neutral0\"\n padding={2}\n borderColor=\"neutral150\"\n tag=\"header\"\n >\n <Flex gap={3}>\n <ClosePreviewButton />\n <Typography tag=\"h1\" fontWeight={600} fontSize={2}>\n {title}\n </Typography>\n <DocumentStatus />\n </Flex>\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 </Flex>\n );\n};\n\nexport { PreviewHeader };\n","import * as React from 'react';\n\nimport { Page, useQueryParams, useRBAC, createContext } from '@strapi/admin/strapi-admin';\nimport { Box, 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 { 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 mainField: 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 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 return (\n <>\n <Page.Title>\n {formatMessage(\n {\n id: 'content-manager.preview.page-title',\n defaultMessage: '{contentType} preview',\n },\n {\n contentType: documentLayoutResponse.edit.settings.displayName,\n }\n )}\n </Page.Title>\n <PreviewProvider\n url={previewUrlResponse.data.data.url}\n mainField={documentLayoutResponse.edit.settings.mainField}\n document={documentResponse.document}\n meta={documentResponse.meta}\n schema={documentResponse.schema}\n >\n <PreviewHeader />\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":["useQueryParams","useNavigate","useIntl","useHistory","stringify","jsx","IconButton","Link","Cross","getDocumentStatus","Box","Typography","useNotification","useClipboard","jsxs","Flex","LinkIcon","createContext","useParams","React","buildValidParams","COLLECTION_TYPES","useGetPreviewUrlQuery","useDocument","useDocumentLayout","Page","Fragment","useRBAC","permissions","DocumentRBAC","Portal","FocusTrap"],"mappings":"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"}
@@ -11,9 +11,9 @@ const reactIntl = require("react-intl");
11
11
  const reactRouterDom = require("react-router-dom");
12
12
  const reactWindow = require("react-window");
13
13
  const styledComponents = require("styled-components");
14
- const index = require("./index-OerGjbAN.js");
14
+ const index = require("./index-tN1hpOMN.js");
15
15
  const useDragAndDrop = require("./useDragAndDrop-J0TUUbR6.js");
16
- const relations = require("./relations-COBpStiF.js");
16
+ const relations = require("./relations-C4HcWYYJ.js");
17
17
  const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
18
18
  function _interopNamespace(e) {
19
19
  if (e && e.__esModule)
@@ -41,6 +41,31 @@ const [ComponentProvider, useComponent] = strapiAdmin.createContext("ComponentCo
41
41
  uid: void 0,
42
42
  type: void 0
43
43
  });
44
+ function useHandleDisconnect(fieldName, consumerName) {
45
+ const field = strapiAdmin.useField(fieldName);
46
+ const removeFieldRow = strapiAdmin.useForm(consumerName, (state) => state.removeFieldRow);
47
+ const addFieldRow = strapiAdmin.useForm(consumerName, (state) => state.addFieldRow);
48
+ const handleDisconnect = (relation) => {
49
+ if (field.value && field.value.connect) {
50
+ const indexOfRelationInConnectArray = field.value.connect.findIndex(
51
+ (rel) => rel.id === relation.id
52
+ );
53
+ if (indexOfRelationInConnectArray >= 0) {
54
+ removeFieldRow(`${fieldName}.connect`, indexOfRelationInConnectArray);
55
+ return;
56
+ }
57
+ }
58
+ addFieldRow(`${fieldName}.disconnect`, {
59
+ id: relation.id,
60
+ apiData: {
61
+ id: relation.id,
62
+ documentId: relation.documentId,
63
+ locale: relation.locale
64
+ }
65
+ });
66
+ };
67
+ return handleDisconnect;
68
+ }
44
69
  const RELATIONS_TO_DISPLAY = 5;
45
70
  const ONE_WAY_RELATIONS = ["oneWay", "oneToOne", "manyToOne", "oneToManyMorph", "oneToOneMorph"];
46
71
  const RelationsField = React__namespace.forwardRef(
@@ -53,9 +78,16 @@ const RelationsField = React__namespace.forwardRef(
53
78
  const params = index.buildValidParams(query);
54
79
  const isMorph = props.attribute.relation.toLowerCase().includes("morph");
55
80
  const isDisabled = isMorph || disabled;
56
- const { id: componentId, uid } = useComponent("RelationsField", ({ uid: uid2, id: id2 }) => ({ id: id2, uid: uid2 }));
81
+ const { componentId, componentUID } = useComponent("RelationsField", ({ uid, id: id2 }) => ({
82
+ componentId: id2,
83
+ componentUID: uid
84
+ }));
85
+ const isSubmitting = strapiAdmin.useForm("RelationsList", (state) => state.isSubmitting);
86
+ React__namespace.useEffect(() => {
87
+ setCurrentPage(1);
88
+ }, [isSubmitting]);
57
89
  const id = componentId ? componentId.toString() : documentId;
58
- const model = uid ?? documentModel;
90
+ const model = componentUID ?? documentModel;
59
91
  const [targetField] = props.name.split(".").slice(-1);
60
92
  const { data, isLoading, isFetching } = relations.useGetRelationsQuery(
61
93
  {
@@ -121,10 +153,16 @@ const RelationsField = React__namespace.forwardRef(
121
153
  props.attribute.targetModel,
122
154
  props.mainField
123
155
  ]);
156
+ const handleDisconnect = useHandleDisconnect(props.name, "RelationsField");
124
157
  const handleConnect = (relation) => {
125
158
  const [lastItemInList] = relations$1.slice(-1);
126
159
  const item = {
127
160
  id: relation.id,
161
+ apiData: {
162
+ id: relation.id,
163
+ documentId: relation.documentId,
164
+ locale: relation.locale
165
+ },
128
166
  status: relation.status,
129
167
  /**
130
168
  * If there's a last item, that's the first key we use to generate out next one.
@@ -134,9 +172,11 @@ const RelationsField = React__namespace.forwardRef(
134
172
  [props.mainField?.name ?? "documentId"]: relation[props.mainField?.name ?? "documentId"],
135
173
  label: relations.getRelationLabel(relation, props.mainField),
136
174
  // @ts-expect-error – targetModel does exist on the attribute, but it's not typed.
137
- href: `../${index.COLLECTION_TYPES}/${props.attribute.targetModel}/${relation.documentId}`
175
+ href: `../${index.COLLECTION_TYPES}/${props.attribute.targetModel}/${relation.documentId}?${relation.locale ? `plugins[i18n][locale]=${relation.locale}` : ""}`
138
176
  };
139
177
  if (ONE_WAY_RELATIONS.includes(props.attribute.relation)) {
178
+ field.value?.connect?.forEach(handleDisconnect);
179
+ relations$1.forEach(handleDisconnect);
140
180
  field.onChange(`${props.name}.connect`, [item]);
141
181
  } else {
142
182
  field.onChange(`${props.name}.connect`, [...field.value?.connect ?? [], item]);
@@ -157,7 +197,7 @@ const RelationsField = React__namespace.forwardRef(
157
197
  RelationsInput,
158
198
  {
159
199
  disabled: isDisabled,
160
- id,
200
+ id: componentUID ? componentId ? `${componentId}` : "" : documentId,
161
201
  label: `${label} ${relationsCount > 0 ? `(${relationsCount})` : ""}`,
162
202
  model,
163
203
  onChange: handleConnect,
@@ -216,7 +256,7 @@ const addLabelAndHref = ({ mainField, href }) => (relations$1) => relations$1.ma
216
256
  // Fallback to `id` if there is no `mainField` value, which will overwrite the above `documentId` property with the exact same data.
217
257
  [mainField?.name ?? "documentId"]: relation[mainField?.name ?? "documentId"],
218
258
  label: relations.getRelationLabel(relation, mainField),
219
- href: `${href}/${relation.documentId}`
259
+ href: `${href}/${relation.documentId}?${relation.locale ? `plugins[i18n][locale]=${relation.locale}` : ""}`
220
260
  };
221
261
  });
222
262
  const RelationsInput = ({
@@ -311,7 +351,7 @@ const RelationsInput = ({
311
351
  {
312
352
  ref: fieldRef,
313
353
  name,
314
- autocomplete: "none",
354
+ autocomplete: "list",
315
355
  placeholder: placeholder || formatMessage({
316
356
  id: index.getTranslation("relation.add"),
317
357
  defaultMessage: "Add relation"
@@ -369,8 +409,6 @@ const RelationsList = ({
369
409
  const [overflow, setOverflow] = React__namespace.useState();
370
410
  const [liveText, setLiveText] = React__namespace.useState("");
371
411
  const field = strapiAdmin.useField(name);
372
- const removeFieldRow = strapiAdmin.useForm("RelationsList", (state) => state.removeFieldRow);
373
- const addFieldRow = strapiAdmin.useForm("RelationsList", (state) => state.addFieldRow);
374
412
  React__namespace.useEffect(() => {
375
413
  if (data.length <= RELATIONS_TO_DISPLAY) {
376
414
  return setOverflow(void 0);
@@ -420,17 +458,25 @@ const RelationsList = ({
420
458
  newData.splice(oldIndex, 1);
421
459
  newData.splice(newIndex, 0, { ...currentRow, __temp_key__: newKey });
422
460
  const connectedRelations = newData.reduce((acc, relation, currentIndex, array) => {
423
- const relationOnServer = serverData.find(
424
- (oldRelation) => oldRelation.documentId === relation.documentId
425
- );
461
+ const relationOnServer = serverData.find((oldRelation) => oldRelation.id === relation.id);
426
462
  const relationInFront = array[currentIndex + 1];
427
463
  if (!relationOnServer || relationOnServer.__temp_key__ !== relation.__temp_key__) {
428
464
  const position = relationInFront ? {
429
465
  before: relationInFront.documentId,
430
466
  locale: relationInFront.locale,
431
- status: relationInFront.status
467
+ status: "publishedAt" in relationInFront && relationInFront.publishedAt ? "published" : "draft"
432
468
  } : { end: true };
433
- const relationWithPosition = { ...relation, position };
469
+ const relationWithPosition = {
470
+ ...relation,
471
+ ...{
472
+ apiData: {
473
+ id: relation.id,
474
+ documentId: relation.documentId,
475
+ locale: relation.locale,
476
+ position
477
+ }
478
+ }
479
+ };
434
480
  return [...acc, relationWithPosition];
435
481
  }
436
482
  return acc;
@@ -481,18 +527,7 @@ const RelationsList = ({
481
527
  )
482
528
  );
483
529
  };
484
- const handleDisconnect = (relation) => {
485
- if (field.value && field.value.connect) {
486
- const indexOfRelationInConnectArray = field.value.connect.findIndex(
487
- (rel) => rel.id === relation.id
488
- );
489
- if (indexOfRelationInConnectArray >= 0) {
490
- removeFieldRow(`${name}.connect`, indexOfRelationInConnectArray);
491
- return;
492
- }
493
- }
494
- addFieldRow(`${name}.disconnect`, { id: relation.id });
495
- };
530
+ const handleDisconnect = useHandleDisconnect(name, "RelationsList");
496
531
  const canReorder = !ONE_WAY_RELATIONS.includes(relationType);
497
532
  const dynamicListHeight = data.length > RELATIONS_TO_DISPLAY ? Math.min(data.length, RELATIONS_TO_DISPLAY) * (RELATION_ITEM_HEIGHT + RELATION_GUTTER) + RELATION_ITEM_HEIGHT / 2 : Math.min(data.length, RELATIONS_TO_DISPLAY) * (RELATION_ITEM_HEIGHT + RELATION_GUTTER);
498
533
  return /* @__PURE__ */ jsxRuntime.jsxs(ShadowBox, { $overflowDirection: overflow, children: [
@@ -573,7 +608,7 @@ const ListItem = ({ data, index: index$1, style }) => {
573
608
  relations: relations2
574
609
  } = data;
575
610
  const { formatMessage } = reactIntl.useIntl();
576
- const { href, documentId, label, status } = relations2[index$1];
611
+ const { href, id, label, status } = relations2[index$1];
577
612
  const [{ handlerId, isDragging, handleKeyDown }, relationRef, dropRef, dragRef, dragPreviewRef] = useDragAndDrop.useDragAndDrop(
578
613
  canDrag && !disabled,
579
614
  {
@@ -582,7 +617,7 @@ const ListItem = ({ data, index: index$1, style }) => {
582
617
  item: {
583
618
  displayedValue: label,
584
619
  status,
585
- id: documentId,
620
+ id,
586
621
  index: index$1
587
622
  },
588
623
  onMoveItem: handleMoveItem,
@@ -630,7 +665,7 @@ const ListItem = ({ data, index: index$1, style }) => {
630
665
  id: index.getTranslation("components.RelationInput.icon-button-aria-label"),
631
666
  defaultMessage: "Drag"
632
667
  }),
633
- borderWidth: 0,
668
+ variant: "ghost",
634
669
  onKeyDown: handleKeyDown,
635
670
  disabled,
636
671
  children: /* @__PURE__ */ jsxRuntime.jsx(Icons.Drag, {})
@@ -642,16 +677,17 @@ const ListItem = ({ data, index: index$1, style }) => {
642
677
  ] })
643
678
  ] }),
644
679
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { paddingLeft: 4, children: /* @__PURE__ */ jsxRuntime.jsx(
645
- DisconnectButton,
680
+ designSystem.IconButton,
646
681
  {
647
- disabled,
648
- type: "button",
649
682
  onClick: () => handleDisconnect(relations2[index$1]),
650
- "aria-label": formatMessage({
683
+ disabled,
684
+ label: formatMessage({
651
685
  id: index.getTranslation("relation.disconnect"),
652
686
  defaultMessage: "Remove"
653
687
  }),
654
- children: /* @__PURE__ */ jsxRuntime.jsx(Icons.Cross, { width: "12px" })
688
+ variant: "ghost",
689
+ size: "S",
690
+ children: /* @__PURE__ */ jsxRuntime.jsx(Icons.Cross, {})
655
691
  }
656
692
  ) })
657
693
  ]
@@ -711,4 +747,4 @@ exports.FlexWrapper = FlexWrapper;
711
747
  exports.LinkEllipsis = LinkEllipsis;
712
748
  exports.MemoizedRelationsField = MemoizedRelationsField;
713
749
  exports.useComponent = useComponent;
714
- //# sourceMappingURL=Relations-CtELXYIK.js.map
750
+ //# sourceMappingURL=Relations-CGerEwji.js.map