@strapi/content-manager 0.0.0-experimental.f6c00790e260ea5a9b6b86abac5fea02b05d569c → 0.0.0-experimental.f6f58027a6338ed795382f2d1c8882158b242361

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 (210) hide show
  1. package/dist/_chunks/CardDragPreview-C0QyJgRA.js.map +1 -1
  2. package/dist/_chunks/CardDragPreview-DOxamsuj.mjs.map +1 -1
  3. package/dist/_chunks/{ComponentConfigurationPage-CnL10QYC.mjs → ComponentConfigurationPage-D4H-v0et.mjs} +4 -4
  4. package/dist/_chunks/{ComponentConfigurationPage-CnL10QYC.mjs.map → ComponentConfigurationPage-D4H-v0et.mjs.map} +1 -1
  5. package/dist/_chunks/{ComponentConfigurationPage-G4EIirP8.js → ComponentConfigurationPage-DdkVGfXC.js} +5 -6
  6. package/dist/_chunks/{ComponentConfigurationPage-G4EIirP8.js.map → ComponentConfigurationPage-DdkVGfXC.js.map} +1 -1
  7. package/dist/_chunks/{ComponentIcon-BXdiCGQp.js → ComponentIcon-CRbtQEUV.js} +2 -3
  8. package/dist/_chunks/{ComponentIcon-BXdiCGQp.js.map → ComponentIcon-CRbtQEUV.js.map} +1 -1
  9. package/dist/_chunks/ComponentIcon-u4bIXTFY.mjs.map +1 -1
  10. package/dist/_chunks/{EditConfigurationPage-I2kKh9dx.mjs → EditConfigurationPage-D1nvB7Br.mjs} +4 -4
  11. package/dist/_chunks/{EditConfigurationPage-I2kKh9dx.mjs.map → EditConfigurationPage-D1nvB7Br.mjs.map} +1 -1
  12. package/dist/_chunks/{EditConfigurationPage-B2AA1kVF.js → EditConfigurationPage-LYEvR4fW.js} +5 -6
  13. package/dist/_chunks/{EditConfigurationPage-B2AA1kVF.js.map → EditConfigurationPage-LYEvR4fW.js.map} +1 -1
  14. package/dist/_chunks/{EditViewPage-zFjJK0s8.mjs → EditViewPage-Bcnff6Vd.mjs} +32 -55
  15. package/dist/_chunks/EditViewPage-Bcnff6Vd.mjs.map +1 -0
  16. package/dist/_chunks/{EditViewPage-CHgoNwlc.js → EditViewPage-DqelJ9UK.js} +34 -58
  17. package/dist/_chunks/EditViewPage-DqelJ9UK.js.map +1 -0
  18. package/dist/_chunks/FieldTypeIcon-CMlNO8PE.mjs.map +1 -1
  19. package/dist/_chunks/FieldTypeIcon-Dnwq_IRF.js.map +1 -1
  20. package/dist/_chunks/{Form-DPm-KZ1A.js → Form-CnHfBeiB.js} +6 -7
  21. package/dist/_chunks/Form-CnHfBeiB.js.map +1 -0
  22. package/dist/_chunks/{Form-CEkENbkF.mjs → Form-CzPCJi3B.mjs} +4 -4
  23. package/dist/_chunks/Form-CzPCJi3B.mjs.map +1 -0
  24. package/dist/_chunks/{History-utls71em.mjs → History-CcmSn3Mj.mjs} +71 -104
  25. package/dist/_chunks/History-CcmSn3Mj.mjs.map +1 -0
  26. package/dist/_chunks/{History-DXSbTWez.js → History-zArjENzj.js} +81 -115
  27. package/dist/_chunks/History-zArjENzj.js.map +1 -0
  28. package/dist/_chunks/{Field-9DePZh-0.js → Input-CDHKQd7o.js} +1304 -1237
  29. package/dist/_chunks/Input-CDHKQd7o.js.map +1 -0
  30. package/dist/_chunks/{Field-DPAzUS1M.mjs → Input-aV8SSoTa.mjs} +1288 -1221
  31. package/dist/_chunks/Input-aV8SSoTa.mjs.map +1 -0
  32. package/dist/_chunks/{ListConfigurationPage-CuMXWWqb.mjs → ListConfigurationPage-BPvzENJJ.mjs} +7 -6
  33. package/dist/_chunks/ListConfigurationPage-BPvzENJJ.mjs.map +1 -0
  34. package/dist/_chunks/{ListConfigurationPage-D5C7ACZ_.js → ListConfigurationPage-ByZAO_9H.js} +7 -7
  35. package/dist/_chunks/ListConfigurationPage-ByZAO_9H.js.map +1 -0
  36. package/dist/_chunks/{ListViewPage-DfuwH1tt.js → ListViewPage-BVKBeQAA.js} +74 -49
  37. package/dist/_chunks/ListViewPage-BVKBeQAA.js.map +1 -0
  38. package/dist/_chunks/{ListViewPage-CdKd-PS_.mjs → ListViewPage-HljQVnFH.mjs} +68 -42
  39. package/dist/_chunks/ListViewPage-HljQVnFH.mjs.map +1 -0
  40. package/dist/_chunks/{NoContentTypePage-BIxlkWWi.js → NoContentTypePage-BV5zfDxr.js} +2 -2
  41. package/dist/_chunks/{NoContentTypePage-BIxlkWWi.js.map → NoContentTypePage-BV5zfDxr.js.map} +1 -1
  42. package/dist/_chunks/{NoContentTypePage-DkToTT7u.mjs → NoContentTypePage-BfHaSM-K.mjs} +2 -2
  43. package/dist/_chunks/{NoContentTypePage-DkToTT7u.mjs.map → NoContentTypePage-BfHaSM-K.mjs.map} +1 -1
  44. package/dist/_chunks/{NoPermissionsPage-DlWi4BAH.mjs → NoPermissionsPage-D6ze2nQL.mjs} +2 -2
  45. package/dist/_chunks/{NoPermissionsPage-DlWi4BAH.mjs.map → NoPermissionsPage-D6ze2nQL.mjs.map} +1 -1
  46. package/dist/_chunks/{NoPermissionsPage-Bu4GWYb-.js → NoPermissionsPage-vdNpc6jb.js} +2 -2
  47. package/dist/_chunks/{NoPermissionsPage-Bu4GWYb-.js.map → NoPermissionsPage-vdNpc6jb.js.map} +1 -1
  48. package/dist/_chunks/Preview-DEHdENT1.js +305 -0
  49. package/dist/_chunks/Preview-DEHdENT1.js.map +1 -0
  50. package/dist/_chunks/Preview-vfWOtPG5.mjs +287 -0
  51. package/dist/_chunks/Preview-vfWOtPG5.mjs.map +1 -0
  52. package/dist/_chunks/{Relations-QP5yn9_z.mjs → Relations-B7_hbF0w.mjs} +78 -43
  53. package/dist/_chunks/Relations-B7_hbF0w.mjs.map +1 -0
  54. package/dist/_chunks/{Relations-CFjTESWQ.js → Relations-DcoOBejP.js} +78 -44
  55. package/dist/_chunks/Relations-DcoOBejP.js.map +1 -0
  56. package/dist/_chunks/{en-BVzUkPxZ.js → en-BR48D_RH.js} +30 -11
  57. package/dist/_chunks/{en-BVzUkPxZ.js.map → en-BR48D_RH.js.map} +1 -1
  58. package/dist/_chunks/{en-CPTj6CjC.mjs → en-D65uIF6Y.mjs} +30 -11
  59. package/dist/_chunks/{en-CPTj6CjC.mjs.map → en-D65uIF6Y.mjs.map} +1 -1
  60. package/dist/_chunks/{es-EUonQTon.js → es-9K52xZIr.js} +2 -2
  61. package/dist/_chunks/{ja-CcFe8diO.js.map → es-9K52xZIr.js.map} +1 -1
  62. package/dist/_chunks/{es-CeXiYflN.mjs → es-D34tqjMw.mjs} +2 -2
  63. package/dist/_chunks/{es-CeXiYflN.mjs.map → es-D34tqjMw.mjs.map} +1 -1
  64. package/dist/_chunks/{fr-B7kGGg3E.js → fr-C43IbhA_.js} +16 -3
  65. package/dist/_chunks/{fr-B7kGGg3E.js.map → fr-C43IbhA_.js.map} +1 -1
  66. package/dist/_chunks/{fr-CD9VFbPM.mjs → fr-DBseuRuB.mjs} +16 -3
  67. package/dist/_chunks/{fr-CD9VFbPM.mjs.map → fr-DBseuRuB.mjs.map} +1 -1
  68. package/dist/_chunks/hooks-BAaaKPS_.js.map +1 -1
  69. package/dist/_chunks/{index-DXiHxy70.js → index-CxLSGwnk.js} +1162 -706
  70. package/dist/_chunks/index-CxLSGwnk.js.map +1 -0
  71. package/dist/_chunks/{index-BHfS6_D5.mjs → index-EH8ZtHd5.mjs} +1178 -722
  72. package/dist/_chunks/index-EH8ZtHd5.mjs.map +1 -0
  73. package/dist/_chunks/{ja-CcFe8diO.js → ja-7sfIbjxE.js} +2 -2
  74. package/dist/_chunks/{es-EUonQTon.js.map → ja-7sfIbjxE.js.map} +1 -1
  75. package/dist/_chunks/{ja-CtsUxOvk.mjs → ja-BHqhDq4V.mjs} +2 -2
  76. package/dist/_chunks/{ja-CtsUxOvk.mjs.map → ja-BHqhDq4V.mjs.map} +1 -1
  77. package/dist/_chunks/{layout-DX_52HSH.mjs → layout-CxDMdJ13.mjs} +4 -4
  78. package/dist/_chunks/{layout-DX_52HSH.mjs.map → layout-CxDMdJ13.mjs.map} +1 -1
  79. package/dist/_chunks/{layout-bE-WUnQ0.js → layout-DSeUTfMv.js} +5 -6
  80. package/dist/_chunks/{layout-bE-WUnQ0.js.map → layout-DSeUTfMv.js.map} +1 -1
  81. package/dist/_chunks/{objects-gigeqt7s.js → objects-BcXOv6_9.js} +2 -4
  82. package/dist/_chunks/{objects-gigeqt7s.js.map → objects-BcXOv6_9.js.map} +1 -1
  83. package/dist/_chunks/{objects-mKMAmfec.mjs → objects-D6yBsdmx.mjs} +2 -4
  84. package/dist/_chunks/{objects-mKMAmfec.mjs.map → objects-D6yBsdmx.mjs.map} +1 -1
  85. package/dist/_chunks/{relations-SCVAL_aJ.mjs → relations-B8_Uu38Q.mjs} +21 -8
  86. package/dist/_chunks/relations-B8_Uu38Q.mjs.map +1 -0
  87. package/dist/_chunks/{relations-D706vblp.js → relations-S5nNKdN3.js} +20 -7
  88. package/dist/_chunks/relations-S5nNKdN3.js.map +1 -0
  89. package/dist/_chunks/{useDragAndDrop-J0TUUbR6.js → useDragAndDrop-BMtgCYzL.js} +5 -9
  90. package/dist/_chunks/{useDragAndDrop-J0TUUbR6.js.map → useDragAndDrop-BMtgCYzL.js.map} +1 -1
  91. package/dist/_chunks/{useDragAndDrop-DdHgKsqq.mjs → useDragAndDrop-DJ6jqvZN.mjs} +4 -7
  92. package/dist/_chunks/{useDragAndDrop-DdHgKsqq.mjs.map → useDragAndDrop-DJ6jqvZN.mjs.map} +1 -1
  93. package/dist/_chunks/{useDebounce-CtcjDB3L.js → usePrev-B9w_-eYc.js} +1 -14
  94. package/dist/_chunks/usePrev-B9w_-eYc.js.map +1 -0
  95. package/dist/_chunks/usePrev-DH6iah0A.mjs +16 -0
  96. package/dist/_chunks/usePrev-DH6iah0A.mjs.map +1 -0
  97. package/dist/admin/index.js +3 -1
  98. package/dist/admin/index.js.map +1 -1
  99. package/dist/admin/index.mjs +6 -4
  100. package/dist/admin/src/content-manager.d.ts +3 -2
  101. package/dist/admin/src/exports.d.ts +2 -1
  102. package/dist/admin/src/history/services/historyVersion.d.ts +1 -1
  103. package/dist/admin/src/hooks/useDocument.d.ts +49 -1
  104. package/dist/admin/src/pages/EditView/EditViewPage.d.ts +9 -1
  105. package/dist/admin/src/pages/EditView/components/DocumentActions.d.ts +1 -1
  106. package/dist/admin/src/pages/EditView/components/DocumentStatus.d.ts +3 -3
  107. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.d.ts +7 -0
  108. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/utils/prismLanguages.d.ts +49 -0
  109. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/utils/constants.d.ts +1 -0
  110. package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.d.ts +4 -1
  111. package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/Field.d.ts +4 -1
  112. package/dist/admin/src/pages/EditView/components/FormLayout.d.ts +27 -0
  113. package/dist/admin/src/pages/EditView/components/Header.d.ts +1 -0
  114. package/dist/admin/src/pages/EditView/utils/data.d.ts +1 -0
  115. package/dist/admin/src/preview/components/PreviewContent.d.ts +2 -0
  116. package/dist/admin/src/preview/components/PreviewHeader.d.ts +2 -0
  117. package/dist/admin/src/preview/components/PreviewSidePanel.d.ts +3 -0
  118. package/dist/admin/src/preview/index.d.ts +4 -0
  119. package/dist/admin/src/preview/pages/Preview.d.ts +11 -0
  120. package/dist/admin/src/preview/routes.d.ts +3 -0
  121. package/dist/admin/src/preview/services/preview.d.ts +3 -0
  122. package/dist/admin/src/router.d.ts +1 -1
  123. package/dist/admin/src/services/api.d.ts +1 -1
  124. package/dist/admin/src/services/components.d.ts +2 -2
  125. package/dist/admin/src/services/contentTypes.d.ts +3 -3
  126. package/dist/admin/src/services/documents.d.ts +16 -19
  127. package/dist/admin/src/services/init.d.ts +1 -1
  128. package/dist/admin/src/services/relations.d.ts +2 -2
  129. package/dist/admin/src/services/uid.d.ts +3 -3
  130. package/dist/server/index.js +590 -333
  131. package/dist/server/index.js.map +1 -1
  132. package/dist/server/index.mjs +591 -333
  133. package/dist/server/index.mjs.map +1 -1
  134. package/dist/server/src/bootstrap.d.ts.map +1 -1
  135. package/dist/server/src/controllers/collection-types.d.ts.map +1 -1
  136. package/dist/server/src/controllers/index.d.ts.map +1 -1
  137. package/dist/server/src/controllers/relations.d.ts.map +1 -1
  138. package/dist/server/src/controllers/utils/metadata.d.ts +16 -1
  139. package/dist/server/src/controllers/utils/metadata.d.ts.map +1 -1
  140. package/dist/server/src/history/controllers/history-version.d.ts +1 -1
  141. package/dist/server/src/history/controllers/history-version.d.ts.map +1 -1
  142. package/dist/server/src/history/services/history.d.ts +3 -3
  143. package/dist/server/src/history/services/history.d.ts.map +1 -1
  144. package/dist/server/src/history/services/lifecycles.d.ts.map +1 -1
  145. package/dist/server/src/history/services/utils.d.ts +6 -11
  146. package/dist/server/src/history/services/utils.d.ts.map +1 -1
  147. package/dist/server/src/index.d.ts +7 -6
  148. package/dist/server/src/index.d.ts.map +1 -1
  149. package/dist/server/src/preview/controllers/index.d.ts +2 -0
  150. package/dist/server/src/preview/controllers/index.d.ts.map +1 -0
  151. package/dist/server/src/preview/controllers/preview.d.ts +13 -0
  152. package/dist/server/src/preview/controllers/preview.d.ts.map +1 -0
  153. package/dist/server/src/preview/controllers/validation/preview.d.ts +6 -0
  154. package/dist/server/src/preview/controllers/validation/preview.d.ts.map +1 -0
  155. package/dist/server/src/preview/index.d.ts +4 -0
  156. package/dist/server/src/preview/index.d.ts.map +1 -0
  157. package/dist/server/src/preview/routes/index.d.ts +8 -0
  158. package/dist/server/src/preview/routes/index.d.ts.map +1 -0
  159. package/dist/server/src/preview/routes/preview.d.ts +4 -0
  160. package/dist/server/src/preview/routes/preview.d.ts.map +1 -0
  161. package/dist/server/src/preview/services/index.d.ts +16 -0
  162. package/dist/server/src/preview/services/index.d.ts.map +1 -0
  163. package/dist/server/src/preview/services/preview-config.d.ts +32 -0
  164. package/dist/server/src/preview/services/preview-config.d.ts.map +1 -0
  165. package/dist/server/src/preview/services/preview.d.ts +12 -0
  166. package/dist/server/src/preview/services/preview.d.ts.map +1 -0
  167. package/dist/server/src/preview/utils.d.ts +19 -0
  168. package/dist/server/src/preview/utils.d.ts.map +1 -0
  169. package/dist/server/src/register.d.ts.map +1 -1
  170. package/dist/server/src/routes/index.d.ts.map +1 -1
  171. package/dist/server/src/services/document-manager.d.ts.map +1 -1
  172. package/dist/server/src/services/document-metadata.d.ts +12 -10
  173. package/dist/server/src/services/document-metadata.d.ts.map +1 -1
  174. package/dist/server/src/services/index.d.ts +7 -6
  175. package/dist/server/src/services/index.d.ts.map +1 -1
  176. package/dist/server/src/services/utils/populate.d.ts +2 -2
  177. package/dist/server/src/services/utils/populate.d.ts.map +1 -1
  178. package/dist/server/src/utils/index.d.ts +2 -0
  179. package/dist/server/src/utils/index.d.ts.map +1 -1
  180. package/dist/shared/contracts/index.d.ts +1 -0
  181. package/dist/shared/contracts/index.d.ts.map +1 -1
  182. package/dist/shared/contracts/preview.d.ts +27 -0
  183. package/dist/shared/contracts/preview.d.ts.map +1 -0
  184. package/dist/shared/index.js +4 -0
  185. package/dist/shared/index.js.map +1 -1
  186. package/dist/shared/index.mjs +4 -0
  187. package/dist/shared/index.mjs.map +1 -1
  188. package/package.json +16 -15
  189. package/dist/_chunks/EditViewPage-CHgoNwlc.js.map +0 -1
  190. package/dist/_chunks/EditViewPage-zFjJK0s8.mjs.map +0 -1
  191. package/dist/_chunks/Field-9DePZh-0.js.map +0 -1
  192. package/dist/_chunks/Field-DPAzUS1M.mjs.map +0 -1
  193. package/dist/_chunks/Form-CEkENbkF.mjs.map +0 -1
  194. package/dist/_chunks/Form-DPm-KZ1A.js.map +0 -1
  195. package/dist/_chunks/History-DXSbTWez.js.map +0 -1
  196. package/dist/_chunks/History-utls71em.mjs.map +0 -1
  197. package/dist/_chunks/ListConfigurationPage-CuMXWWqb.mjs.map +0 -1
  198. package/dist/_chunks/ListConfigurationPage-D5C7ACZ_.js.map +0 -1
  199. package/dist/_chunks/ListViewPage-CdKd-PS_.mjs.map +0 -1
  200. package/dist/_chunks/ListViewPage-DfuwH1tt.js.map +0 -1
  201. package/dist/_chunks/Relations-CFjTESWQ.js.map +0 -1
  202. package/dist/_chunks/Relations-QP5yn9_z.mjs.map +0 -1
  203. package/dist/_chunks/index-BHfS6_D5.mjs.map +0 -1
  204. package/dist/_chunks/index-DXiHxy70.js.map +0 -1
  205. package/dist/_chunks/relations-D706vblp.js.map +0 -1
  206. package/dist/_chunks/relations-SCVAL_aJ.mjs.map +0 -1
  207. package/dist/_chunks/useDebounce-CtcjDB3L.js.map +0 -1
  208. package/dist/_chunks/useDebounce-DmuSJIF3.mjs +0 -29
  209. package/dist/_chunks/useDebounce-DmuSJIF3.mjs.map +0 -1
  210. package/strapi-server.js +0 -3
@@ -11,13 +11,12 @@ 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-DXiHxy70.js");
15
- const useDragAndDrop = require("./useDragAndDrop-J0TUUbR6.js");
16
- const relations = require("./relations-D706vblp.js");
14
+ const index = require("./index-CxLSGwnk.js");
15
+ const useDragAndDrop = require("./useDragAndDrop-BMtgCYzL.js");
16
+ const relations = require("./relations-S5nNKdN3.js");
17
17
  const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
18
18
  function _interopNamespace(e) {
19
- if (e && e.__esModule)
20
- return e;
19
+ if (e && e.__esModule) return e;
21
20
  const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
22
21
  if (e) {
23
22
  for (const k in e) {
@@ -41,6 +40,31 @@ const [ComponentProvider, useComponent] = strapiAdmin.createContext("ComponentCo
41
40
  uid: void 0,
42
41
  type: void 0
43
42
  });
43
+ function useHandleDisconnect(fieldName, consumerName) {
44
+ const field = strapiAdmin.useField(fieldName);
45
+ const removeFieldRow = strapiAdmin.useForm(consumerName, (state) => state.removeFieldRow);
46
+ const addFieldRow = strapiAdmin.useForm(consumerName, (state) => state.addFieldRow);
47
+ const handleDisconnect = (relation) => {
48
+ if (field.value && field.value.connect) {
49
+ const indexOfRelationInConnectArray = field.value.connect.findIndex(
50
+ (rel) => rel.id === relation.id
51
+ );
52
+ if (indexOfRelationInConnectArray >= 0) {
53
+ removeFieldRow(`${fieldName}.connect`, indexOfRelationInConnectArray);
54
+ return;
55
+ }
56
+ }
57
+ addFieldRow(`${fieldName}.disconnect`, {
58
+ id: relation.id,
59
+ apiData: {
60
+ id: relation.id,
61
+ documentId: relation.documentId,
62
+ locale: relation.locale
63
+ }
64
+ });
65
+ };
66
+ return handleDisconnect;
67
+ }
44
68
  const RELATIONS_TO_DISPLAY = 5;
45
69
  const ONE_WAY_RELATIONS = ["oneWay", "oneToOne", "manyToOne", "oneToManyMorph", "oneToOneMorph"];
46
70
  const RelationsField = React__namespace.forwardRef(
@@ -53,9 +77,16 @@ const RelationsField = React__namespace.forwardRef(
53
77
  const params = index.buildValidParams(query);
54
78
  const isMorph = props.attribute.relation.toLowerCase().includes("morph");
55
79
  const isDisabled = isMorph || disabled;
56
- const { id: componentId, uid } = useComponent("RelationsField", ({ uid: uid2, id: id2 }) => ({ id: id2, uid: uid2 }));
80
+ const { componentId, componentUID } = useComponent("RelationsField", ({ uid, id: id2 }) => ({
81
+ componentId: id2,
82
+ componentUID: uid
83
+ }));
84
+ const isSubmitting = strapiAdmin.useForm("RelationsList", (state) => state.isSubmitting);
85
+ React__namespace.useEffect(() => {
86
+ setCurrentPage(1);
87
+ }, [isSubmitting]);
57
88
  const id = componentId ? componentId.toString() : documentId;
58
- const model = uid ?? documentModel;
89
+ const model = componentUID ?? documentModel;
59
90
  const [targetField] = props.name.split(".").slice(-1);
60
91
  const { data, isLoading, isFetching } = relations.useGetRelationsQuery(
61
92
  {
@@ -108,10 +139,8 @@ const RelationsField = React__namespace.forwardRef(
108
139
  );
109
140
  const transformedRels = transformations([...data.results]);
110
141
  return [...transformedRels, ...field.value?.connect ?? []].sort((a, b) => {
111
- if (a.__temp_key__ < b.__temp_key__)
112
- return -1;
113
- if (a.__temp_key__ > b.__temp_key__)
114
- return 1;
142
+ if (a.__temp_key__ < b.__temp_key__) return -1;
143
+ if (a.__temp_key__ > b.__temp_key__) return 1;
115
144
  return 0;
116
145
  });
117
146
  }, [
@@ -121,10 +150,16 @@ const RelationsField = React__namespace.forwardRef(
121
150
  props.attribute.targetModel,
122
151
  props.mainField
123
152
  ]);
153
+ const handleDisconnect = useHandleDisconnect(props.name, "RelationsField");
124
154
  const handleConnect = (relation) => {
125
155
  const [lastItemInList] = relations$1.slice(-1);
126
156
  const item = {
127
157
  id: relation.id,
158
+ apiData: {
159
+ id: relation.id,
160
+ documentId: relation.documentId,
161
+ locale: relation.locale
162
+ },
128
163
  status: relation.status,
129
164
  /**
130
165
  * If there's a last item, that's the first key we use to generate out next one.
@@ -134,9 +169,11 @@ const RelationsField = React__namespace.forwardRef(
134
169
  [props.mainField?.name ?? "documentId"]: relation[props.mainField?.name ?? "documentId"],
135
170
  label: relations.getRelationLabel(relation, props.mainField),
136
171
  // @ts-expect-error – targetModel does exist on the attribute, but it's not typed.
137
- href: `../${index.COLLECTION_TYPES}/${props.attribute.targetModel}/${relation.documentId}`
172
+ href: `../${index.COLLECTION_TYPES}/${props.attribute.targetModel}/${relation.documentId}?${relation.locale ? `plugins[i18n][locale]=${relation.locale}` : ""}`
138
173
  };
139
174
  if (ONE_WAY_RELATIONS.includes(props.attribute.relation)) {
175
+ field.value?.connect?.forEach(handleDisconnect);
176
+ relations$1.forEach(handleDisconnect);
140
177
  field.onChange(`${props.name}.connect`, [item]);
141
178
  } else {
142
179
  field.onChange(`${props.name}.connect`, [...field.value?.connect ?? [], item]);
@@ -157,7 +194,7 @@ const RelationsField = React__namespace.forwardRef(
157
194
  RelationsInput,
158
195
  {
159
196
  disabled: isDisabled,
160
- id,
197
+ id: componentUID ? componentId ? `${componentId}` : "" : documentId,
161
198
  label: `${label} ${relationsCount > 0 ? `(${relationsCount})` : ""}`,
162
199
  model,
163
200
  onChange: handleConnect,
@@ -216,7 +253,7 @@ const addLabelAndHref = ({ mainField, href }) => (relations$1) => relations$1.ma
216
253
  // Fallback to `id` if there is no `mainField` value, which will overwrite the above `documentId` property with the exact same data.
217
254
  [mainField?.name ?? "documentId"]: relation[mainField?.name ?? "documentId"],
218
255
  label: relations.getRelationLabel(relation, mainField),
219
- href: `${href}/${relation.documentId}`
256
+ href: `${href}/${relation.documentId}?${relation.locale ? `plugins[i18n][locale]=${relation.locale}` : ""}`
220
257
  };
221
258
  });
222
259
  const RelationsInput = ({
@@ -244,6 +281,7 @@ const RelationsInput = ({
244
281
  const { formatMessage } = reactIntl.useIntl();
245
282
  const fieldRef = strapiAdmin.useFocusInputField(name);
246
283
  const field = strapiAdmin.useField(name);
284
+ const searchParamsDebounced = relations.useDebounce(searchParams, 300);
247
285
  const [searchForTrigger, { data, isLoading }] = relations.useLazySearchRelationsQuery();
248
286
  React__namespace.useEffect(() => {
249
287
  const [targetField] = name.split(".").slice(-1);
@@ -256,7 +294,7 @@ const RelationsInput = ({
256
294
  pageSize: 10,
257
295
  idsToInclude: field.value?.disconnect?.map((rel) => rel.id.toString()) ?? [],
258
296
  idsToOmit: field.value?.connect?.map((rel) => rel.id.toString()) ?? [],
259
- ...searchParams
297
+ ...searchParamsDebounced
260
298
  }
261
299
  });
262
300
  }, [
@@ -267,7 +305,7 @@ const RelationsInput = ({
267
305
  name,
268
306
  query,
269
307
  searchForTrigger,
270
- searchParams
308
+ searchParamsDebounced
271
309
  ]);
272
310
  const handleSearch = async (search) => {
273
311
  setSearchParams((s) => ({ ...s, _q: search, page: 1 }));
@@ -311,7 +349,7 @@ const RelationsInput = ({
311
349
  {
312
350
  ref: fieldRef,
313
351
  name,
314
- autocomplete: "none",
352
+ autocomplete: "list",
315
353
  placeholder: placeholder || formatMessage({
316
354
  id: index.getTranslation("relation.add"),
317
355
  defaultMessage: "Add relation"
@@ -369,8 +407,6 @@ const RelationsList = ({
369
407
  const [overflow, setOverflow] = React__namespace.useState();
370
408
  const [liveText, setLiveText] = React__namespace.useState("");
371
409
  const field = strapiAdmin.useField(name);
372
- const removeFieldRow = strapiAdmin.useForm("RelationsList", (state) => state.removeFieldRow);
373
- const addFieldRow = strapiAdmin.useForm("RelationsList", (state) => state.addFieldRow);
374
410
  React__namespace.useEffect(() => {
375
411
  if (data.length <= RELATIONS_TO_DISPLAY) {
376
412
  return setOverflow(void 0);
@@ -420,17 +456,25 @@ const RelationsList = ({
420
456
  newData.splice(oldIndex, 1);
421
457
  newData.splice(newIndex, 0, { ...currentRow, __temp_key__: newKey });
422
458
  const connectedRelations = newData.reduce((acc, relation, currentIndex, array) => {
423
- const relationOnServer = serverData.find(
424
- (oldRelation) => oldRelation.documentId === relation.documentId
425
- );
459
+ const relationOnServer = serverData.find((oldRelation) => oldRelation.id === relation.id);
426
460
  const relationInFront = array[currentIndex + 1];
427
461
  if (!relationOnServer || relationOnServer.__temp_key__ !== relation.__temp_key__) {
428
462
  const position = relationInFront ? {
429
463
  before: relationInFront.documentId,
430
464
  locale: relationInFront.locale,
431
- status: relationInFront.status
465
+ status: "publishedAt" in relationInFront && relationInFront.publishedAt ? "published" : "draft"
432
466
  } : { end: true };
433
- const relationWithPosition = { ...relation, position };
467
+ const relationWithPosition = {
468
+ ...relation,
469
+ ...{
470
+ apiData: {
471
+ id: relation.id,
472
+ documentId: relation.documentId,
473
+ locale: relation.locale,
474
+ position
475
+ }
476
+ }
477
+ };
434
478
  return [...acc, relationWithPosition];
435
479
  }
436
480
  return acc;
@@ -481,18 +525,7 @@ const RelationsList = ({
481
525
  )
482
526
  );
483
527
  };
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
- };
528
+ const handleDisconnect = useHandleDisconnect(name, "RelationsList");
496
529
  const canReorder = !ONE_WAY_RELATIONS.includes(relationType);
497
530
  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
531
  return /* @__PURE__ */ jsxRuntime.jsxs(ShadowBox, { $overflowDirection: overflow, children: [
@@ -573,7 +606,7 @@ const ListItem = ({ data, index: index$1, style }) => {
573
606
  relations: relations2
574
607
  } = data;
575
608
  const { formatMessage } = reactIntl.useIntl();
576
- const { href, documentId, label, status } = relations2[index$1];
609
+ const { href, id, label, status } = relations2[index$1];
577
610
  const [{ handlerId, isDragging, handleKeyDown }, relationRef, dropRef, dragRef, dragPreviewRef] = useDragAndDrop.useDragAndDrop(
578
611
  canDrag && !disabled,
579
612
  {
@@ -582,7 +615,7 @@ const ListItem = ({ data, index: index$1, style }) => {
582
615
  item: {
583
616
  displayedValue: label,
584
617
  status,
585
- id: documentId,
618
+ id,
586
619
  index: index$1
587
620
  },
588
621
  onMoveItem: handleMoveItem,
@@ -642,16 +675,17 @@ const ListItem = ({ data, index: index$1, style }) => {
642
675
  ] })
643
676
  ] }),
644
677
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { paddingLeft: 4, children: /* @__PURE__ */ jsxRuntime.jsx(
645
- DisconnectButton,
678
+ designSystem.IconButton,
646
679
  {
647
- disabled,
648
- type: "button",
649
680
  onClick: () => handleDisconnect(relations2[index$1]),
650
- "aria-label": formatMessage({
681
+ disabled,
682
+ label: formatMessage({
651
683
  id: index.getTranslation("relation.disconnect"),
652
684
  defaultMessage: "Remove"
653
685
  }),
654
- children: /* @__PURE__ */ jsxRuntime.jsx(Icons.Cross, { width: "12px" })
686
+ variant: "ghost",
687
+ size: "S",
688
+ children: /* @__PURE__ */ jsxRuntime.jsx(Icons.Cross, {})
655
689
  }
656
690
  ) })
657
691
  ]
@@ -711,4 +745,4 @@ exports.FlexWrapper = FlexWrapper;
711
745
  exports.LinkEllipsis = LinkEllipsis;
712
746
  exports.MemoizedRelationsField = MemoizedRelationsField;
713
747
  exports.useComponent = useComponent;
714
- //# sourceMappingURL=Relations-CFjTESWQ.js.map
748
+ //# sourceMappingURL=Relations-DcoOBejP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Relations-DcoOBejP.js","sources":["../../admin/src/pages/EditView/components/FormInputs/ComponentContext.tsx","../../admin/src/pages/EditView/components/FormInputs/Relations.tsx"],"sourcesContent":["import { createContext } from '@strapi/admin/strapi-admin';\n\ninterface ComponentContextValue {\n /**\n * The id of the component. It will be undefined if the component\n * has not been created in the database yet. This could be on a new\n * or existing entry.\n */\n id?: number;\n /**\n * The level of the component. This is used to determine the nesting\n * of the component. The default is set to -1 so that the base level is 0\n * for the top level component, and increases by 1 for each level of nesting.\n */\n level: number;\n /**\n * The uid of the component. This is used to determine the type of the\n * component. Within an attribute, it is normally the `component` value.\n * It will be undefined if the hook is not called within the confines\n * of a provider.\n */\n uid?: string;\n /**\n * The type of component parent. It will be undefined if the hook\n * is not called within the confines of a provider.\n */\n type?: 'dynamiczone' | 'repeatable' | 'component';\n}\n\n/**\n * We use this component to wrap any individual component field in the Edit View,\n * this could be a component field in a dynamic zone, a component within a repeatable space,\n * or even nested components.\n *\n * We primarily need this to provide the component id to the components so that they can\n * correctly fetch their relations.\n */\nconst [ComponentProvider, useComponent] = createContext<ComponentContextValue>('ComponentContext', {\n id: undefined,\n level: -1,\n uid: undefined,\n type: undefined,\n});\n\nexport { ComponentProvider, useComponent };\n","import * as React from 'react';\n\nimport {\n type InputProps,\n useField,\n useForm,\n useNotification,\n useFocusInputField,\n useQueryParams,\n} from '@strapi/admin/strapi-admin';\nimport {\n Box,\n Combobox,\n ComboboxOption,\n Flex,\n IconButton,\n TextButton,\n Tooltip,\n Typography,\n VisuallyHidden,\n useComposedRefs,\n Link,\n Field,\n FlexComponent,\n BoxComponent,\n} from '@strapi/design-system';\nimport { Cross, Drag, ArrowClockwise } from '@strapi/icons';\nimport { generateNKeysBetween } from 'fractional-indexing';\nimport pipe from 'lodash/fp/pipe';\nimport { getEmptyImage } from 'react-dnd-html5-backend';\nimport { useIntl } from 'react-intl';\nimport { NavLink } from 'react-router-dom';\nimport { FixedSizeList, ListChildComponentProps } from 'react-window';\nimport { styled } from 'styled-components';\n\nimport { RelationDragPreviewProps } from '../../../../components/DragPreviews/RelationDragPreview';\nimport { COLLECTION_TYPES } from '../../../../constants/collections';\nimport { ItemTypes } from '../../../../constants/dragAndDrop';\nimport { useDebounce } from '../../../../hooks/useDebounce';\nimport { useDoc } from '../../../../hooks/useDocument';\nimport { type EditFieldLayout } from '../../../../hooks/useDocumentLayout';\nimport {\n DROP_SENSITIVITY,\n UseDragAndDropOptions,\n useDragAndDrop,\n} from '../../../../hooks/useDragAndDrop';\nimport {\n useGetRelationsQuery,\n useLazySearchRelationsQuery,\n RelationResult,\n} from '../../../../services/relations';\nimport { buildValidParams } from '../../../../utils/api';\nimport { getRelationLabel } from '../../../../utils/relations';\nimport { getTranslation } from '../../../../utils/translations';\nimport { DocumentStatus } from '../DocumentStatus';\n\nimport { useComponent } from './ComponentContext';\n\nimport type { Schema } from '@strapi/types';\n\n/**\n * Remove a relation, whether it's been already saved or not.\n * It's used both in RelationsList, where the \"remove relation\" button is, and in the input,\n * because we sometimes need to remove a previous relation when selecting a new one.\n */\nfunction useHandleDisconnect(fieldName: string, consumerName: string) {\n const field = useField(fieldName);\n const removeFieldRow = useForm(consumerName, (state) => state.removeFieldRow);\n const addFieldRow = useForm(consumerName, (state) => state.addFieldRow);\n\n const handleDisconnect: ListItemProps['data']['handleDisconnect'] = (relation) => {\n if (field.value && field.value.connect) {\n /**\n * A relation will exist in the `connect` array _if_ it has\n * been added without saving. In this case, we just remove it\n * from the connect array\n */\n const indexOfRelationInConnectArray = field.value.connect.findIndex(\n (rel: NonNullable<RelationsFormValue['connect']>[number]) => rel.id === relation.id\n );\n\n if (indexOfRelationInConnectArray >= 0) {\n removeFieldRow(`${fieldName}.connect`, indexOfRelationInConnectArray);\n return;\n }\n }\n\n addFieldRow(`${fieldName}.disconnect`, {\n id: relation.id,\n apiData: {\n id: relation.id,\n documentId: relation.documentId,\n locale: relation.locale,\n },\n });\n };\n\n return handleDisconnect;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * RelationsField\n * -----------------------------------------------------------------------------------------------*/\nconst RELATIONS_TO_DISPLAY = 5;\nconst ONE_WAY_RELATIONS = ['oneWay', 'oneToOne', 'manyToOne', 'oneToManyMorph', 'oneToOneMorph'];\n\ntype RelationPosition =\n | (Pick<RelationResult, 'status' | 'locale'> & {\n before: string;\n end?: never;\n })\n | { end: boolean; before?: never; status?: never; locale?: never };\n\ninterface Relation extends Pick<RelationResult, 'documentId' | 'id' | 'locale' | 'status'> {\n href: string;\n label: string;\n position?: RelationPosition;\n __temp_key__: string;\n}\n\ninterface RelationsFieldProps\n extends Omit<Extract<EditFieldLayout, { type: 'relation' }>, 'size' | 'hint'>,\n Pick<InputProps, 'hint'> {}\n\nexport interface RelationsFormValue {\n connect?: Relation[];\n disconnect?: Pick<Relation, 'id'>[];\n}\n\n/**\n * TODO: we get a rather ugly flash when we remove a single relation from the list leaving\n * no other relations when we press save. The initial relation re-renders, probably because\n * of the lag in the Form cleaning it's \"disconnect\" array, whilst our data has not been invalidated.\n *\n * Could we invalidate relation data on the document actions? Should we?\n */\n\n/**\n * @internal\n * @description The relations field holds a lot of domain logic for handling relations which is rather complicated\n * At present we do not expose this to plugin developers, however, they are able to overwrite it themselves should\n * they wish to do so.\n */\nconst RelationsField = React.forwardRef<HTMLDivElement, RelationsFieldProps>(\n ({ disabled, label, ...props }, ref) => {\n const [currentPage, setCurrentPage] = React.useState(1);\n const { document, model: documentModel } = useDoc();\n const documentId = document?.documentId;\n const { formatMessage } = useIntl();\n const [{ query }] = useQueryParams();\n const params = buildValidParams(query);\n\n const isMorph = props.attribute.relation.toLowerCase().includes('morph');\n const isDisabled = isMorph || disabled;\n\n const { componentId, componentUID } = useComponent('RelationsField', ({ uid, id }) => ({\n componentId: id,\n componentUID: uid,\n }));\n\n const isSubmitting = useForm('RelationsList', (state) => state.isSubmitting);\n\n React.useEffect(() => {\n setCurrentPage(1);\n }, [isSubmitting]);\n\n /**\n * We'll always have a documentId in a created entry, so we look for a componentId first.\n * Same with `uid` and `documentModel`.\n */\n const id = componentId ? componentId.toString() : documentId;\n const model = componentUID ?? documentModel;\n\n /**\n * The `name` prop is a complete path to the field, e.g. `field1.field2.field3`.\n * Where the above example would a nested field within two components, however\n * we only require the field on the component not the complete path since we query\n * individual components. Therefore we split the string and take the last item.\n */\n const [targetField] = props.name.split('.').slice(-1);\n\n const { data, isLoading, isFetching } = useGetRelationsQuery(\n {\n model,\n targetField,\n // below we don't run the query if there is no id.\n id: id!,\n params: {\n ...params,\n pageSize: RELATIONS_TO_DISPLAY,\n page: currentPage,\n },\n },\n {\n refetchOnMountOrArgChange: true,\n skip: !id,\n selectFromResult: (result) => {\n return {\n ...result,\n data: {\n ...result.data,\n results: result.data?.results ? result.data.results : [],\n },\n };\n },\n }\n );\n\n const handleLoadMore = () => {\n setCurrentPage((prev) => prev + 1);\n };\n\n const field = useField(props.name);\n\n const isFetchingMoreRelations = isLoading || isFetching;\n\n const realServerRelationsCount =\n 'pagination' in data && data.pagination ? data.pagination.total : 0;\n\n /**\n * Items that are already connected, but reordered would be in\n * this list, so to get an accurate figure, we remove them.\n */\n const relationsConnected =\n (field.value?.connect ?? []).filter(\n (rel: Relation) => data.results.findIndex((relation) => relation.id === rel.id) === -1\n ).length ?? 0;\n const relationsDisconnected = field.value?.disconnect?.length ?? 0;\n\n const relationsCount = realServerRelationsCount + relationsConnected - relationsDisconnected;\n\n /**\n * This is it, the source of truth for reordering in conjunction with partial loading & updating\n * of relations. Relations on load are given __temp_key__ when fetched, because we don't want to\n * create brand new keys everytime the data updates, just keep adding them onto the newly loaded ones.\n */\n const relations = React.useMemo(() => {\n const ctx = {\n field: field.value,\n // @ts-expect-error – targetModel does exist on the attribute. But it's not typed.\n href: `../${COLLECTION_TYPES}/${props.attribute.targetModel}`,\n mainField: props.mainField,\n };\n\n /**\n * Tidy up our data.\n */\n const transformations = pipe(\n removeConnected(ctx),\n removeDisconnected(ctx),\n addLabelAndHref(ctx)\n );\n\n const transformedRels = transformations([...data.results]);\n\n /**\n * THIS IS CRUCIAL. If you don't sort by the __temp_key__ which comes from fractional indexing\n * then the list will be in the wrong order.\n */\n return [...transformedRels, ...(field.value?.connect ?? [])].sort((a, b) => {\n if (a.__temp_key__ < b.__temp_key__) return -1;\n if (a.__temp_key__ > b.__temp_key__) return 1;\n return 0;\n });\n }, [\n data.results,\n field.value,\n // @ts-expect-error – targetModel does exist on the attribute. But it's not typed.\n props.attribute.targetModel,\n props.mainField,\n ]);\n\n const handleDisconnect = useHandleDisconnect(props.name, 'RelationsField');\n\n const handleConnect: RelationsInputProps['onChange'] = (relation) => {\n const [lastItemInList] = relations.slice(-1);\n\n const item = {\n id: relation.id,\n apiData: {\n id: relation.id,\n documentId: relation.documentId,\n locale: relation.locale,\n },\n status: relation.status,\n /**\n * If there's a last item, that's the first key we use to generate out next one.\n */\n __temp_key__: generateNKeysBetween(lastItemInList?.__temp_key__ ?? null, null, 1)[0],\n // Fallback to `id` if there is no `mainField` value, which will overwrite the above `id` property with the exact same data.\n [props.mainField?.name ?? 'documentId']: relation[props.mainField?.name ?? 'documentId'],\n label: getRelationLabel(relation, props.mainField),\n // @ts-expect-error – targetModel does exist on the attribute, but it's not typed.\n href: `../${COLLECTION_TYPES}/${props.attribute.targetModel}/${relation.documentId}?${relation.locale ? `plugins[i18n][locale]=${relation.locale}` : ''}`,\n };\n\n if (ONE_WAY_RELATIONS.includes(props.attribute.relation)) {\n // Remove any existing relation so they can be replaced with the new one\n field.value?.connect?.forEach(handleDisconnect);\n relations.forEach(handleDisconnect);\n\n field.onChange(`${props.name}.connect`, [item]);\n } else {\n field.onChange(`${props.name}.connect`, [...(field.value?.connect ?? []), item]);\n }\n };\n\n return (\n <Flex\n ref={ref}\n direction=\"column\"\n gap={3}\n justifyContent=\"space-between\"\n alignItems=\"stretch\"\n wrap=\"wrap\"\n >\n <StyledFlex direction=\"column\" alignItems=\"start\" gap={2} width=\"100%\">\n <RelationsInput\n disabled={isDisabled}\n // NOTE: we should not default to using the documentId if the component is being created (componentUID is undefined)\n id={componentUID ? (componentId ? `${componentId}` : '') : documentId}\n label={`${label} ${relationsCount > 0 ? `(${relationsCount})` : ''}`}\n model={model}\n onChange={handleConnect}\n {...props}\n />\n {'pagination' in data &&\n data.pagination &&\n data.pagination.pageCount > data.pagination.page ? (\n <TextButton\n disabled={isFetchingMoreRelations}\n onClick={handleLoadMore}\n loading={isFetchingMoreRelations}\n startIcon={<ArrowClockwise />}\n // prevent the label from line-wrapping\n shrink={0}\n >\n {formatMessage({\n id: getTranslation('relation.loadMore'),\n defaultMessage: 'Load More',\n })}\n </TextButton>\n ) : null}\n </StyledFlex>\n <RelationsList\n data={relations}\n serverData={data.results}\n disabled={isDisabled}\n name={props.name}\n isLoading={isFetchingMoreRelations}\n relationType={props.attribute.relation}\n />\n </Flex>\n );\n }\n);\n\n/**\n * TODO: this can be removed once we stop shipping Inputs with\n * labels wrapped round in DS@2.\n */\nconst StyledFlex = styled<FlexComponent>(Flex)`\n & > div {\n width: 100%;\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * Relation Transformations\n * -----------------------------------------------------------------------------------------------*/\n\ninterface TransformationContext extends Pick<RelationsFieldProps, 'mainField'> {\n field?: RelationsFormValue;\n href: string;\n}\n\n/**\n * If it's in the connected array, it can get out of our data array,\n * we'll be putting it back in later and sorting it anyway.\n */\nconst removeConnected =\n ({ field }: TransformationContext) =>\n (relations: RelationResult[]) => {\n return relations.filter((relation) => {\n const connectedRelations = field?.connect ?? [];\n\n return connectedRelations.findIndex((rel) => rel.id === relation.id) === -1;\n });\n };\n\n/**\n * @description Removes relations that are in the `disconnect` array of the field\n */\nconst removeDisconnected =\n ({ field }: TransformationContext) =>\n (relations: RelationResult[]): RelationResult[] =>\n relations.filter((relation) => {\n const disconnectedRelations = field?.disconnect ?? [];\n\n return disconnectedRelations.findIndex((rel) => rel.id === relation.id) === -1;\n });\n\n/**\n * @description Adds a label and href to the relation object we use this to render\n * a better UI where we can link to the relation and display a human-readable label.\n */\nconst addLabelAndHref =\n ({ mainField, href }: TransformationContext) =>\n (relations: RelationResult[]): Relation[] =>\n relations.map((relation) => {\n return {\n ...relation,\n // Fallback to `id` if there is no `mainField` value, which will overwrite the above `documentId` property with the exact same data.\n [mainField?.name ?? 'documentId']: relation[mainField?.name ?? 'documentId'],\n label: getRelationLabel(relation, mainField),\n href: `${href}/${relation.documentId}?${relation.locale ? `plugins[i18n][locale]=${relation.locale}` : ''}`,\n };\n });\n\n/* -------------------------------------------------------------------------------------------------\n * RelationsInput\n * -----------------------------------------------------------------------------------------------*/\n\ninterface RelationsInputProps extends Omit<RelationsFieldProps, 'type'> {\n id?: string;\n model: string;\n onChange: (\n relation: Pick<RelationResult, 'documentId' | 'id' | 'locale' | 'status'> & {\n [key: string]: any;\n }\n ) => void;\n}\n\n/**\n * @description Contains all the logic for the combobox that can search\n * for relations and then add them to the field's connect array.\n */\nconst RelationsInput = ({\n hint,\n id,\n model,\n label,\n labelAction,\n name,\n mainField,\n placeholder,\n required,\n unique: _unique,\n 'aria-label': _ariaLabel,\n onChange,\n ...props\n}: RelationsInputProps) => {\n const [textValue, setTextValue] = React.useState<string | undefined>('');\n const [searchParams, setSearchParams] = React.useState({\n _q: '',\n page: 1,\n });\n const { toggleNotification } = useNotification();\n const [{ query }] = useQueryParams();\n\n const { formatMessage } = useIntl();\n const fieldRef = useFocusInputField<HTMLInputElement>(name);\n const field = useField<RelationsFormValue>(name);\n\n const searchParamsDebounced = useDebounce(searchParams, 300);\n const [searchForTrigger, { data, isLoading }] = useLazySearchRelationsQuery();\n\n /**\n * Because we're using a lazy query, we need to trigger the search\n * when the component mounts and when the search params change.\n * We also need to trigger the search when the field value changes\n * so that we can filter out the relations that are already connected.\n */\n React.useEffect(() => {\n /**\n * The `name` prop is a complete path to the field, e.g. `field1.field2.field3`.\n * Where the above example would a nested field within two components, however\n * we only require the field on the component not the complete path since we query\n * individual components. Therefore we split the string and take the last item.\n */\n const [targetField] = name.split('.').slice(-1);\n\n searchForTrigger({\n model,\n targetField,\n params: {\n ...buildValidParams(query),\n id: id ?? '',\n pageSize: 10,\n idsToInclude: field.value?.disconnect?.map((rel) => rel.id.toString()) ?? [],\n idsToOmit: field.value?.connect?.map((rel) => rel.id.toString()) ?? [],\n ...searchParamsDebounced,\n },\n });\n }, [\n field.value?.connect,\n field.value?.disconnect,\n id,\n model,\n name,\n query,\n searchForTrigger,\n searchParamsDebounced,\n ]);\n\n const handleSearch = async (search: string) => {\n setSearchParams((s) => ({ ...s, _q: search, page: 1 }));\n };\n\n const hasNextPage = data?.pagination ? data.pagination.page < data.pagination.pageCount : false;\n\n const options = data?.results ?? [];\n\n const handleChange = (relationId?: string) => {\n if (!relationId) {\n return;\n }\n\n const relation = options.find((opt) => opt.id.toString() === relationId);\n\n if (!relation) {\n // This is very unlikely to happen, but it ensures we don't have any data for.\n console.error(\n \"You've tried to add a relation with an id that does not exist in the options you can see, this is likely a bug with Strapi. Please open an issue.\"\n );\n\n toggleNotification({\n message: formatMessage({\n id: getTranslation('relation.error-adding-relation'),\n defaultMessage: 'An error occurred while trying to add the relation.',\n }),\n type: 'danger',\n });\n\n return;\n }\n\n /**\n * You need to give this relation a correct _temp_key_ but\n * this component doesn't know about those ones, you can't rely\n * on the connect array because that doesn't hold items that haven't\n * moved. So use a callback to fill in the gaps when connecting.\n *\n */\n onChange(relation);\n };\n\n const handleLoadMore = () => {\n if (!data || !data.pagination) {\n return;\n } else if (data.pagination.page < data.pagination.pageCount) {\n setSearchParams((s) => ({ ...s, page: s.page + 1 }));\n }\n };\n\n React.useLayoutEffect(() => {\n setTextValue('');\n }, [field.value]);\n\n return (\n <Field.Root error={field.error} hint={hint} name={name} required={required}>\n <Field.Label action={labelAction}>{label}</Field.Label>\n <Combobox\n ref={fieldRef}\n name={name}\n autocomplete=\"list\"\n placeholder={\n placeholder ||\n formatMessage({\n id: getTranslation('relation.add'),\n defaultMessage: 'Add relation',\n })\n }\n hasMoreItems={hasNextPage}\n loading={isLoading}\n onOpenChange={() => {\n handleSearch(textValue ?? '');\n }}\n noOptionsMessage={() =>\n formatMessage({\n id: getTranslation('relation.notAvailable'),\n defaultMessage: 'No relations available',\n })\n }\n loadingMessage={formatMessage({\n id: getTranslation('relation.isLoading'),\n defaultMessage: 'Relations are loading',\n })}\n onLoadMore={handleLoadMore}\n textValue={textValue}\n onChange={handleChange}\n onTextValueChange={(text) => {\n setTextValue(text);\n }}\n onInputChange={(event) => {\n handleSearch(event.currentTarget.value);\n }}\n {...props}\n >\n {options.map((opt) => {\n const textValue = getRelationLabel(opt, mainField);\n\n return (\n <ComboboxOption key={opt.id} value={opt.id.toString()} textValue={textValue}>\n <Flex gap={2} justifyContent=\"space-between\">\n <Typography ellipsis>{textValue}</Typography>\n {opt.status ? <DocumentStatus status={opt.status} /> : null}\n </Flex>\n </ComboboxOption>\n );\n })}\n </Combobox>\n <Field.Error />\n <Field.Hint />\n </Field.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * RelationsList\n * -----------------------------------------------------------------------------------------------*/\nconst RELATION_ITEM_HEIGHT = 50;\nconst RELATION_GUTTER = 4;\n\ninterface RelationsListProps extends Pick<RelationsFieldProps, 'disabled' | 'name'> {\n data: Relation[];\n isLoading?: boolean;\n relationType: Schema.Attribute.RelationKind.Any;\n /**\n * The existing relations connected on the server. We need these to diff against.\n */\n serverData: RelationResult[];\n}\n\nconst RelationsList = ({\n data,\n serverData,\n disabled,\n name,\n isLoading,\n relationType,\n}: RelationsListProps) => {\n const ariaDescriptionId = React.useId();\n const { formatMessage } = useIntl();\n const listRef = React.useRef<FixedSizeList>(null);\n const outerListRef = React.useRef<HTMLUListElement>(null);\n const [overflow, setOverflow] = React.useState<'top' | 'bottom' | 'top-bottom'>();\n const [liveText, setLiveText] = React.useState('');\n const field = useField(name);\n\n React.useEffect(() => {\n if (data.length <= RELATIONS_TO_DISPLAY) {\n return setOverflow(undefined);\n }\n\n const handleNativeScroll = (e: Event) => {\n const el = e.target as HTMLUListElement;\n const parentScrollContainerHeight = (el.parentNode as HTMLDivElement).scrollHeight;\n const maxScrollBottom = el.scrollHeight - el.scrollTop;\n\n if (el.scrollTop === 0) {\n return setOverflow('bottom');\n }\n\n if (maxScrollBottom === parentScrollContainerHeight) {\n return setOverflow('top');\n }\n\n return setOverflow('top-bottom');\n };\n\n const outerListRefCurrent = outerListRef?.current;\n\n if (!isLoading && data.length > 0 && outerListRefCurrent) {\n outerListRef.current.addEventListener('scroll', handleNativeScroll);\n }\n\n return () => {\n if (outerListRefCurrent) {\n outerListRefCurrent.removeEventListener('scroll', handleNativeScroll);\n }\n };\n }, [isLoading, data.length]);\n\n const getItemPos = (index: number) => `${index + 1} of ${data.length}`;\n\n const handleMoveItem: UseDragAndDropOptions['onMoveItem'] = (newIndex, oldIndex) => {\n const item = data[oldIndex];\n\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.reorder'),\n defaultMessage: '{item}, moved. New position in list: {position}.',\n },\n {\n item: item.label ?? item.documentId,\n position: getItemPos(newIndex),\n }\n )\n );\n\n /**\n * Splicing mutates the array, so we need to create a new array\n */\n const newData = [...data];\n const currentRow = data[oldIndex];\n\n const startKey =\n oldIndex > newIndex ? newData[newIndex - 1]?.__temp_key__ : newData[newIndex]?.__temp_key__;\n const endKey =\n oldIndex > newIndex ? newData[newIndex]?.__temp_key__ : newData[newIndex + 1]?.__temp_key__;\n\n /**\n * We're moving the relation between two other relations, so\n * we need to generate a new key that keeps the order\n */\n const [newKey] = generateNKeysBetween(startKey, endKey, 1);\n\n newData.splice(oldIndex, 1);\n newData.splice(newIndex, 0, { ...currentRow, __temp_key__: newKey });\n\n /**\n * Now we diff against the server to understand what's different so we\n * can keep the connect array nice and tidy. It also needs reversing because\n * we reverse the relations from the server in the first place.\n */\n const connectedRelations = newData\n .reduce<Relation[]>((acc, relation, currentIndex, array) => {\n const relationOnServer = serverData.find((oldRelation) => oldRelation.id === relation.id);\n\n const relationInFront = array[currentIndex + 1];\n\n if (!relationOnServer || relationOnServer.__temp_key__ !== relation.__temp_key__) {\n const position = relationInFront\n ? {\n before: relationInFront.documentId,\n locale: relationInFront.locale,\n status:\n 'publishedAt' in relationInFront && relationInFront.publishedAt\n ? 'published'\n : 'draft',\n }\n : { end: true };\n\n const relationWithPosition: Relation = {\n ...relation,\n ...{\n apiData: {\n id: relation.id,\n documentId: relation.documentId,\n locale: relation.locale,\n position,\n },\n },\n };\n\n return [...acc, relationWithPosition];\n }\n\n return acc;\n }, [])\n .toReversed();\n\n field.onChange(`${name}.connect`, connectedRelations);\n };\n\n const handleGrabItem: UseDragAndDropOptions['onGrabItem'] = (index) => {\n const item = data[index];\n\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.grab-item'),\n defaultMessage: `{item}, grabbed. Current position in list: {position}. Press up and down arrow to change position, Spacebar to drop, Escape to cancel.`,\n },\n {\n item: item.label ?? item.documentId,\n position: getItemPos(index),\n }\n )\n );\n };\n\n const handleDropItem: UseDragAndDropOptions['onDropItem'] = (index) => {\n const { href: _href, label, ...item } = data[index];\n\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.drop-item'),\n defaultMessage: `{item}, dropped. Final position in list: {position}.`,\n },\n {\n item: label ?? item.documentId,\n position: getItemPos(index),\n }\n )\n );\n };\n\n const handleCancel: UseDragAndDropOptions['onCancel'] = (index) => {\n const item = data[index];\n\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.cancel-item'),\n defaultMessage: '{item}, dropped. Re-order cancelled.',\n },\n {\n item: item.label ?? item.documentId,\n }\n )\n );\n };\n\n const handleDisconnect = useHandleDisconnect(name, 'RelationsList');\n\n /**\n * These relation types will only ever have one item\n * in their list, so you can't reorder a single item!\n */\n const canReorder = !ONE_WAY_RELATIONS.includes(relationType);\n\n const dynamicListHeight =\n data.length > RELATIONS_TO_DISPLAY\n ? Math.min(data.length, RELATIONS_TO_DISPLAY) * (RELATION_ITEM_HEIGHT + RELATION_GUTTER) +\n RELATION_ITEM_HEIGHT / 2\n : Math.min(data.length, RELATIONS_TO_DISPLAY) * (RELATION_ITEM_HEIGHT + RELATION_GUTTER);\n\n return (\n <ShadowBox $overflowDirection={overflow}>\n <VisuallyHidden id={ariaDescriptionId}>\n {formatMessage({\n id: getTranslation('dnd.instructions'),\n defaultMessage: `Press spacebar to grab and re-order`,\n })}\n </VisuallyHidden>\n <VisuallyHidden aria-live=\"assertive\">{liveText}</VisuallyHidden>\n {/* @ts-expect-error – width is expected, but we've not needed to pass it before. */}\n <FixedSizeList\n height={dynamicListHeight}\n ref={listRef}\n outerRef={outerListRef}\n itemCount={data.length}\n itemSize={RELATION_ITEM_HEIGHT + RELATION_GUTTER}\n itemData={{\n ariaDescribedBy: ariaDescriptionId,\n canDrag: canReorder,\n disabled,\n handleCancel,\n handleDropItem,\n handleGrabItem,\n handleMoveItem,\n name,\n handleDisconnect,\n relations: data,\n }}\n itemKey={(index) => data[index].id}\n innerElementType=\"ol\"\n >\n {ListItem}\n </FixedSizeList>\n </ShadowBox>\n );\n};\n\nconst ShadowBox = styled<BoxComponent>(Box)<{\n $overflowDirection?: 'top-bottom' | 'top' | 'bottom';\n}>`\n position: relative;\n overflow: hidden;\n flex: 1;\n\n &:before,\n &:after {\n position: absolute;\n width: 100%;\n height: 4px;\n z-index: 1;\n }\n\n &:before {\n /* TODO: as for DS Table component we would need this to be handled by the DS theme */\n content: '';\n background: linear-gradient(rgba(3, 3, 5, 0.2) 0%, rgba(0, 0, 0, 0) 100%);\n top: 0;\n opacity: ${({ $overflowDirection }) =>\n $overflowDirection === 'top-bottom' || $overflowDirection === 'top' ? 1 : 0};\n transition: opacity 0.2s ease-in-out;\n }\n\n &:after {\n /* TODO: as for DS Table component we would need this to be handled by the DS theme */\n content: '';\n background: linear-gradient(0deg, rgba(3, 3, 5, 0.2) 0%, rgba(0, 0, 0, 0) 100%);\n bottom: 0;\n opacity: ${({ $overflowDirection }) =>\n $overflowDirection === 'top-bottom' || $overflowDirection === 'bottom' ? 1 : 0};\n transition: opacity 0.2s ease-in-out;\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * ListItem\n * -----------------------------------------------------------------------------------------------*/\n\ninterface ListItemProps extends Pick<ListChildComponentProps, 'style' | 'index'> {\n data: {\n ariaDescribedBy: string;\n canDrag?: boolean;\n disabled?: boolean;\n handleCancel: UseDragAndDropOptions['onCancel'];\n handleDropItem: UseDragAndDropOptions['onDropItem'];\n handleGrabItem: UseDragAndDropOptions['onGrabItem'];\n handleMoveItem: UseDragAndDropOptions['onMoveItem'];\n handleDisconnect: (relation: Relation) => void;\n name: string;\n relations: Relation[];\n };\n}\n\nconst ListItem = ({ data, index, style }: ListItemProps) => {\n const {\n ariaDescribedBy,\n canDrag = false,\n disabled = false,\n handleCancel,\n handleDisconnect,\n handleDropItem,\n handleGrabItem,\n handleMoveItem,\n name,\n relations,\n } = data;\n const { formatMessage } = useIntl();\n\n const { href, id, label, status } = relations[index];\n\n const [{ handlerId, isDragging, handleKeyDown }, relationRef, dropRef, dragRef, dragPreviewRef] =\n useDragAndDrop<number, Omit<RelationDragPreviewProps, 'width'>, HTMLDivElement>(\n canDrag && !disabled,\n {\n type: `${ItemTypes.RELATION}_${name}`,\n index,\n item: {\n displayedValue: label,\n status,\n id: id,\n index,\n },\n onMoveItem: handleMoveItem,\n onDropItem: handleDropItem,\n onGrabItem: handleGrabItem,\n onCancel: handleCancel,\n dropSensitivity: DROP_SENSITIVITY.REGULAR,\n }\n );\n\n const composedRefs = useComposedRefs<HTMLDivElement>(relationRef, dragRef);\n\n React.useEffect(() => {\n dragPreviewRef(getEmptyImage());\n }, [dragPreviewRef]);\n\n return (\n <Box\n style={style}\n tag=\"li\"\n ref={dropRef}\n aria-describedby={ariaDescribedBy}\n cursor={canDrag ? 'all-scroll' : 'default'}\n >\n {isDragging ? (\n <RelationItemPlaceholder />\n ) : (\n <Flex\n paddingTop={2}\n paddingBottom={2}\n paddingLeft={canDrag ? 2 : 4}\n paddingRight={4}\n hasRadius\n borderColor=\"neutral200\"\n background={disabled ? 'neutral150' : 'neutral0'}\n justifyContent=\"space-between\"\n ref={composedRefs}\n data-handler-id={handlerId}\n >\n <FlexWrapper gap={1}>\n {canDrag ? (\n <IconButton\n tag=\"div\"\n role=\"button\"\n tabIndex={0}\n withTooltip={false}\n label={formatMessage({\n id: getTranslation('components.RelationInput.icon-button-aria-label'),\n defaultMessage: 'Drag',\n })}\n variant=\"ghost\"\n onKeyDown={handleKeyDown}\n disabled={disabled}\n >\n <Drag />\n </IconButton>\n ) : null}\n <Flex width=\"100%\" minWidth={0} justifyContent=\"space-between\">\n <Box minWidth={0} paddingTop={1} paddingBottom={1} paddingRight={4}>\n <Tooltip description={label}>\n {href ? (\n <LinkEllipsis tag={NavLink} to={href} isExternal={false}>\n {label}\n </LinkEllipsis>\n ) : (\n <Typography textColor={disabled ? 'neutral600' : 'primary600'} ellipsis>\n {label}\n </Typography>\n )}\n </Tooltip>\n </Box>\n {status ? <DocumentStatus status={status} /> : null}\n </Flex>\n </FlexWrapper>\n <Box paddingLeft={4}>\n <IconButton\n onClick={() => handleDisconnect(relations[index])}\n disabled={disabled}\n label={formatMessage({\n id: getTranslation('relation.disconnect'),\n defaultMessage: 'Remove',\n })}\n variant=\"ghost\"\n size=\"S\"\n >\n <Cross />\n </IconButton>\n </Box>\n </Flex>\n )}\n </Box>\n );\n};\n\nconst FlexWrapper = styled<FlexComponent>(Flex)`\n width: 100%;\n /* Used to prevent endAction to be pushed out of container */\n min-width: 0;\n\n & > div[role='button'] {\n cursor: all-scroll;\n }\n`;\n\nconst DisconnectButton = styled.button`\n svg path {\n fill: ${({ theme, disabled }) =>\n disabled ? theme.colors.neutral600 : theme.colors.neutral500};\n }\n\n &:hover svg path,\n &:focus svg path {\n fill: ${({ theme, disabled }) => !disabled && theme.colors.neutral600};\n }\n`;\n\nconst LinkEllipsis = styled(Link)`\n display: block;\n\n & > span {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n display: block;\n }\n`;\n\nconst RelationItemPlaceholder = () => (\n <Box\n paddingTop={2}\n paddingBottom={2}\n paddingLeft={4}\n paddingRight={4}\n hasRadius\n borderStyle=\"dashed\"\n borderColor=\"primary600\"\n borderWidth=\"1px\"\n background=\"primary100\"\n height={`calc(100% - ${RELATION_GUTTER}px)`}\n />\n);\n\nconst MemoizedRelationsField = React.memo(RelationsField);\n\nexport { MemoizedRelationsField as RelationsInput, FlexWrapper, DisconnectButton, LinkEllipsis };\nexport type { RelationsFieldProps };\n"],"names":["createContext","useField","useForm","React","useDoc","useIntl","useQueryParams","buildValidParams","id","useGetRelationsQuery","relations","COLLECTION_TYPES","pipe","generateNKeysBetween","getRelationLabel","jsxs","Flex","jsx","TextButton","ArrowClockwise","getTranslation","styled","useNotification","useFocusInputField","useDebounce","useLazySearchRelationsQuery","Field","Combobox","textValue","ComboboxOption","Typography","DocumentStatus","index","VisuallyHidden","FixedSizeList","Box","useDragAndDrop","ItemTypes","DROP_SENSITIVITY","useComposedRefs","getEmptyImage","IconButton","Drag","Tooltip","NavLink","Cross","Link"],"mappings":"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"}
@@ -9,7 +9,7 @@ const en = {
9
9
  "actions.clone.label": "Duplicate",
10
10
  "actions.delete.dialog.body": "Are you sure you want to delete this document? This action is irreversible.",
11
11
  "actions.delete.error": "An error occurred while trying to delete the document.",
12
- "actions.delete.label": "Delete document",
12
+ "actions.delete.label": "Delete entry{isLocalized, select, true { (all locales)} other {}}",
13
13
  "actions.discard.label": "Discard changes",
14
14
  "actions.discard.dialog.body": "Are you sure you want to discard the changes? This action is irreversible.",
15
15
  "actions.edit.error": "An error occurred while trying to edit the document.",
@@ -70,13 +70,14 @@ const en = {
70
70
  "bulk-publish.already-published": "Already Published",
71
71
  "bulk-unpublish.already-unpublished": "Already Unpublished",
72
72
  "bulk-publish.modified": "Ready to publish changes",
73
+ "bulk-publish.waiting-for-action": "Waiting for action",
73
74
  "components.TableDelete.delete": "Delete all",
74
75
  "components.TableDelete.deleteSelected": "Delete selected",
75
76
  "components.TableDelete.label": "{number, plural, one {# entry} other {# entries}} selected",
76
77
  "components.TableEmpty.withFilters": "There are no {contentType} with the applied filters...",
77
78
  "components.TableEmpty.withSearch": "There are no {contentType} corresponding to the search ({search})...",
78
79
  "components.TableEmpty.withoutFilter": "There are no {contentType}...",
79
- "components.empty-repeatable": "No entry yet. Click on the button below to add one.",
80
+ "components.empty-repeatable": "No entry yet. Click to add one.",
80
81
  "components.notification.info.maximum-requirement": "You have already reached the maximum number of fields",
81
82
  "components.notification.info.minimum-requirement": "A field has been added to match the minimum requirement",
82
83
  "components.repeatable.reorder.error": "An error occurred while reordering your component's field, please try again",
@@ -94,18 +95,21 @@ const en = {
94
95
  "containers.Edit.delete": "Delete",
95
96
  "containers.edit.title.new": "Create an entry",
96
97
  "containers.edit.header.more-actions": "More actions",
97
- "containers.edit.information.last-published.label": "Last published",
98
- "containers.edit.information.last-published.value": "Published {time}{isAnonymous, select, true {} other { by {author}}}",
99
- "containers.edit.information.last-draft.label": "Last draft",
100
- "containers.edit.information.last-draft.value": "Modified {time}{isAnonymous, select, true {} other { by {author}}}",
101
- "containers.edit.information.document.label": "Document",
102
- "containers.edit.information.document.value": "Created {time}{isAnonymous, select, true {} other { by {author}}}",
98
+ "containers.edit.information.last-published.label": "Published",
99
+ "containers.edit.information.last-published.value": "{time}{isAnonymous, select, true {} other { by {author}}}",
100
+ "containers.edit.information.last-draft.label": "Updated",
101
+ "containers.edit.information.last-draft.value": "{time}{isAnonymous, select, true {} other { by {author}}}",
102
+ "containers.edit.information.document.label": "Created",
103
+ "containers.edit.information.document.value": "{time}{isAnonymous, select, true {} other { by {author}}}",
103
104
  "containers.EditSettingsView.modal-form.edit-field": "Edit the field",
104
105
  "containers.EditView.add.new-entry": "Add an entry",
105
106
  "containers.EditView.notification.errors": "The form contains some errors",
106
107
  "containers.Home.introduction": "To edit your entries go to the specific link in the left menu. This plugin doesn't have a proper way to edit settings and it's still under active development.",
107
108
  "containers.Home.pluginHeaderDescription": "Manage your entries through a powerful and beautiful interface.",
108
109
  "containers.Home.pluginHeaderTitle": "Content Manager",
110
+ "containers.List.draft": "Draft",
111
+ "containers.List.published": "Published",
112
+ "containers.List.modified": "Modified",
109
113
  "containers.list.displayedFields": "Displayed Fields",
110
114
  "containers.list.items": "{number} {number, plural, =0 {items} one {item} other {items}}",
111
115
  "containers.list.table.row-actions": "Row actions",
@@ -152,6 +156,7 @@ const en = {
152
156
  "containers.SettingsPage.pluginHeaderDescription": "Configure the settings for all your Collection Types and Groups",
153
157
  "containers.SettingsView.list.subtitle": "Configure the layout and display of your Collection Types and Groups",
154
158
  "containers.SettingsView.list.title": "Display configurations",
159
+ "containers.untitled": "Untitled",
155
160
  "dnd.cancel-item": "{item}, dropped. Re-order cancelled.",
156
161
  "dnd.drop-item": "{item}, dropped. Final position in list: {position}.",
157
162
  "dnd.grab-item": "{item}, grabbed. Current position in list: {position}. Press up and down arrow to change position, Spacebar to drop, Escape to cancel.",
@@ -236,6 +241,14 @@ const en = {
236
241
  "popUpWarning.warning.unpublish-question": "Are you sure you don't want to publish it?",
237
242
  "popUpWarning.warning.updateAllSettings": "This will modify all your settings",
238
243
  "popover.display-relations.label": "Display relations",
244
+ "preview.panel.title": "Preview",
245
+ "preview.panel.button": "Open preview",
246
+ "preview.panel.button-disabled-tooltip": "Please save to open the preview",
247
+ "preview.page-title": "{contentType} preview",
248
+ "preview.header.close": "Close preview",
249
+ "preview.copy.label": "Copy preview link",
250
+ "preview.copy.success": "Copied preview link",
251
+ "preview.tabs.label": "Preview status",
239
252
  "relation.add": "Add relation",
240
253
  "relation.disconnect": "Remove",
241
254
  "relation.error-adding-relation": "An error occurred while trying to add the relation.",
@@ -282,12 +295,18 @@ const en = {
282
295
  "history.restore.confirm.title": "Are you sure you want to restore this version?",
283
296
  "history.restore.confirm.message": "{isDraft, select, true {The restored content will override your draft.} other {The restored content won't be published, it will override the draft and be saved as pending changes. You'll be able to publish the changes at anytime.}}",
284
297
  "history.restore.success.title": "Version restored.",
285
- "history.restore.success.message": "The content of the restored version is not published yet.",
298
+ "history.restore.success.message": "A past version of the content was restored.",
286
299
  "history.restore.error.message": "Could not restore version.",
287
- "validation.error": "There are validation errors in your document. Please fix them before saving."
300
+ "validation.error": "There are validation errors in your document. Please fix them before saving.",
301
+ "bulk-publish.edit": "Edit",
302
+ "widget.last-edited.title": "Last edited entries",
303
+ "widget.last-edited.single-type": "Single-Type",
304
+ "widget.last-edited.no-data": "No edited entries",
305
+ "widget.last-published.title": "Last published entries",
306
+ "widget.last-published.no-data": "No published entries"
288
307
  };
289
308
  exports.default = en;
290
309
  exports.groups = groups;
291
310
  exports.models = models;
292
311
  exports.pageNotFound = pageNotFound;
293
- //# sourceMappingURL=en-BVzUkPxZ.js.map
312
+ //# sourceMappingURL=en-BR48D_RH.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"en-BVzUkPxZ.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"en-BR48D_RH.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -7,7 +7,7 @@ const en = {
7
7
  "actions.clone.label": "Duplicate",
8
8
  "actions.delete.dialog.body": "Are you sure you want to delete this document? This action is irreversible.",
9
9
  "actions.delete.error": "An error occurred while trying to delete the document.",
10
- "actions.delete.label": "Delete document",
10
+ "actions.delete.label": "Delete entry{isLocalized, select, true { (all locales)} other {}}",
11
11
  "actions.discard.label": "Discard changes",
12
12
  "actions.discard.dialog.body": "Are you sure you want to discard the changes? This action is irreversible.",
13
13
  "actions.edit.error": "An error occurred while trying to edit the document.",
@@ -68,13 +68,14 @@ const en = {
68
68
  "bulk-publish.already-published": "Already Published",
69
69
  "bulk-unpublish.already-unpublished": "Already Unpublished",
70
70
  "bulk-publish.modified": "Ready to publish changes",
71
+ "bulk-publish.waiting-for-action": "Waiting for action",
71
72
  "components.TableDelete.delete": "Delete all",
72
73
  "components.TableDelete.deleteSelected": "Delete selected",
73
74
  "components.TableDelete.label": "{number, plural, one {# entry} other {# entries}} selected",
74
75
  "components.TableEmpty.withFilters": "There are no {contentType} with the applied filters...",
75
76
  "components.TableEmpty.withSearch": "There are no {contentType} corresponding to the search ({search})...",
76
77
  "components.TableEmpty.withoutFilter": "There are no {contentType}...",
77
- "components.empty-repeatable": "No entry yet. Click on the button below to add one.",
78
+ "components.empty-repeatable": "No entry yet. Click to add one.",
78
79
  "components.notification.info.maximum-requirement": "You have already reached the maximum number of fields",
79
80
  "components.notification.info.minimum-requirement": "A field has been added to match the minimum requirement",
80
81
  "components.repeatable.reorder.error": "An error occurred while reordering your component's field, please try again",
@@ -92,18 +93,21 @@ const en = {
92
93
  "containers.Edit.delete": "Delete",
93
94
  "containers.edit.title.new": "Create an entry",
94
95
  "containers.edit.header.more-actions": "More actions",
95
- "containers.edit.information.last-published.label": "Last published",
96
- "containers.edit.information.last-published.value": "Published {time}{isAnonymous, select, true {} other { by {author}}}",
97
- "containers.edit.information.last-draft.label": "Last draft",
98
- "containers.edit.information.last-draft.value": "Modified {time}{isAnonymous, select, true {} other { by {author}}}",
99
- "containers.edit.information.document.label": "Document",
100
- "containers.edit.information.document.value": "Created {time}{isAnonymous, select, true {} other { by {author}}}",
96
+ "containers.edit.information.last-published.label": "Published",
97
+ "containers.edit.information.last-published.value": "{time}{isAnonymous, select, true {} other { by {author}}}",
98
+ "containers.edit.information.last-draft.label": "Updated",
99
+ "containers.edit.information.last-draft.value": "{time}{isAnonymous, select, true {} other { by {author}}}",
100
+ "containers.edit.information.document.label": "Created",
101
+ "containers.edit.information.document.value": "{time}{isAnonymous, select, true {} other { by {author}}}",
101
102
  "containers.EditSettingsView.modal-form.edit-field": "Edit the field",
102
103
  "containers.EditView.add.new-entry": "Add an entry",
103
104
  "containers.EditView.notification.errors": "The form contains some errors",
104
105
  "containers.Home.introduction": "To edit your entries go to the specific link in the left menu. This plugin doesn't have a proper way to edit settings and it's still under active development.",
105
106
  "containers.Home.pluginHeaderDescription": "Manage your entries through a powerful and beautiful interface.",
106
107
  "containers.Home.pluginHeaderTitle": "Content Manager",
108
+ "containers.List.draft": "Draft",
109
+ "containers.List.published": "Published",
110
+ "containers.List.modified": "Modified",
107
111
  "containers.list.displayedFields": "Displayed Fields",
108
112
  "containers.list.items": "{number} {number, plural, =0 {items} one {item} other {items}}",
109
113
  "containers.list.table.row-actions": "Row actions",
@@ -150,6 +154,7 @@ const en = {
150
154
  "containers.SettingsPage.pluginHeaderDescription": "Configure the settings for all your Collection Types and Groups",
151
155
  "containers.SettingsView.list.subtitle": "Configure the layout and display of your Collection Types and Groups",
152
156
  "containers.SettingsView.list.title": "Display configurations",
157
+ "containers.untitled": "Untitled",
153
158
  "dnd.cancel-item": "{item}, dropped. Re-order cancelled.",
154
159
  "dnd.drop-item": "{item}, dropped. Final position in list: {position}.",
155
160
  "dnd.grab-item": "{item}, grabbed. Current position in list: {position}. Press up and down arrow to change position, Spacebar to drop, Escape to cancel.",
@@ -234,6 +239,14 @@ const en = {
234
239
  "popUpWarning.warning.unpublish-question": "Are you sure you don't want to publish it?",
235
240
  "popUpWarning.warning.updateAllSettings": "This will modify all your settings",
236
241
  "popover.display-relations.label": "Display relations",
242
+ "preview.panel.title": "Preview",
243
+ "preview.panel.button": "Open preview",
244
+ "preview.panel.button-disabled-tooltip": "Please save to open the preview",
245
+ "preview.page-title": "{contentType} preview",
246
+ "preview.header.close": "Close preview",
247
+ "preview.copy.label": "Copy preview link",
248
+ "preview.copy.success": "Copied preview link",
249
+ "preview.tabs.label": "Preview status",
237
250
  "relation.add": "Add relation",
238
251
  "relation.disconnect": "Remove",
239
252
  "relation.error-adding-relation": "An error occurred while trying to add the relation.",
@@ -280,9 +293,15 @@ const en = {
280
293
  "history.restore.confirm.title": "Are you sure you want to restore this version?",
281
294
  "history.restore.confirm.message": "{isDraft, select, true {The restored content will override your draft.} other {The restored content won't be published, it will override the draft and be saved as pending changes. You'll be able to publish the changes at anytime.}}",
282
295
  "history.restore.success.title": "Version restored.",
283
- "history.restore.success.message": "The content of the restored version is not published yet.",
296
+ "history.restore.success.message": "A past version of the content was restored.",
284
297
  "history.restore.error.message": "Could not restore version.",
285
- "validation.error": "There are validation errors in your document. Please fix them before saving."
298
+ "validation.error": "There are validation errors in your document. Please fix them before saving.",
299
+ "bulk-publish.edit": "Edit",
300
+ "widget.last-edited.title": "Last edited entries",
301
+ "widget.last-edited.single-type": "Single-Type",
302
+ "widget.last-edited.no-data": "No edited entries",
303
+ "widget.last-published.title": "Last published entries",
304
+ "widget.last-published.no-data": "No published entries"
286
305
  };
287
306
  export {
288
307
  en as default,
@@ -290,4 +309,4 @@ export {
290
309
  models,
291
310
  pageNotFound
292
311
  };
293
- //# sourceMappingURL=en-CPTj6CjC.mjs.map
312
+ //# sourceMappingURL=en-D65uIF6Y.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"en-CPTj6CjC.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"en-D65uIF6Y.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -54,7 +54,7 @@ const es = {
54
54
  "components.TableEmpty.withFilters": "No hay {contentType} con los filtros aplicados...",
55
55
  "components.TableEmpty.withSearch": "No hay {contentType} que coincida con la búsqueda ({search})...",
56
56
  "components.TableEmpty.withoutFilter": "No hay {contentType}...",
57
- "components.empty-repeatable": "Aún no hay entrada. Haga clic en el botón de abajo para agregar uno.",
57
+ "components.empty-repeatable": "Aún no hay entrada. Haga clic para agregar una.",
58
58
  "components.notification.info.maximum-requirement": "Ya has alcanzado el número máximo de campos",
59
59
  "components.notification.info.minimum-requirement": "Se ha agregado un campo para cumplir con el requisito mínimo",
60
60
  "components.repeatable.reorder.error": "Se produjo un error al reordenar el campo de su componente. Vuelva a intentarlo.",
@@ -193,4 +193,4 @@ exports.default = es;
193
193
  exports.groups = groups;
194
194
  exports.models = models;
195
195
  exports.pageNotFound = pageNotFound;
196
- //# sourceMappingURL=es-EUonQTon.js.map
196
+ //# sourceMappingURL=es-9K52xZIr.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ja-CcFe8diO.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"es-9K52xZIr.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}