@strapi/content-manager 0.0.0-experimental.e60ec1829240dae21c1e1d29076681c322288813 → 0.0.0-experimental.f31889311d753b5f7d95198ae84d8fce1d156cd6

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 (175) hide show
  1. package/LICENSE +18 -3
  2. package/dist/_chunks/{CardDragPreview-DSVYodBX.js → CardDragPreview-C0QyJgRA.js} +10 -14
  3. package/dist/_chunks/CardDragPreview-C0QyJgRA.js.map +1 -0
  4. package/dist/_chunks/{CardDragPreview-ikSG4M46.mjs → CardDragPreview-DOxamsuj.mjs} +7 -9
  5. package/dist/_chunks/CardDragPreview-DOxamsuj.mjs.map +1 -0
  6. package/dist/_chunks/{ComponentConfigurationPage-DjWJdz6Y.js → ComponentConfigurationPage-BNxtMIfV.js} +3 -3
  7. package/dist/_chunks/{ComponentConfigurationPage-DjWJdz6Y.js.map → ComponentConfigurationPage-BNxtMIfV.js.map} +1 -1
  8. package/dist/_chunks/{ComponentConfigurationPage-BPvzFjM7.mjs → ComponentConfigurationPage-BWOQWCv2.mjs} +3 -3
  9. package/dist/_chunks/{ComponentConfigurationPage-BPvzFjM7.mjs.map → ComponentConfigurationPage-BWOQWCv2.mjs.map} +1 -1
  10. package/dist/_chunks/{ComponentIcon-BBQsYCVn.js → ComponentIcon-BXdiCGQp.js} +8 -2
  11. package/dist/_chunks/ComponentIcon-BXdiCGQp.js.map +1 -0
  12. package/dist/_chunks/{ComponentIcon-BOFnK76n.mjs → ComponentIcon-u4bIXTFY.mjs} +9 -3
  13. package/dist/_chunks/ComponentIcon-u4bIXTFY.mjs.map +1 -0
  14. package/dist/_chunks/{EditConfigurationPage-Dmv83RlS.js → EditConfigurationPage-D340bYlT.js} +3 -3
  15. package/dist/_chunks/{EditConfigurationPage-Dmv83RlS.js.map → EditConfigurationPage-D340bYlT.js.map} +1 -1
  16. package/dist/_chunks/{EditConfigurationPage-DacbqQ_f.mjs → EditConfigurationPage-GTp-Ucnw.mjs} +3 -3
  17. package/dist/_chunks/{EditConfigurationPage-DacbqQ_f.mjs.map → EditConfigurationPage-GTp-Ucnw.mjs.map} +1 -1
  18. package/dist/_chunks/{EditViewPage-DDS6H9HO.mjs → EditViewPage-BVMS5hT-.mjs} +47 -47
  19. package/dist/_chunks/EditViewPage-BVMS5hT-.mjs.map +1 -0
  20. package/dist/_chunks/{EditViewPage-DvNpQkam.js → EditViewPage-CXkmnAvI.js} +46 -48
  21. package/dist/_chunks/EditViewPage-CXkmnAvI.js.map +1 -0
  22. package/dist/_chunks/{Field-DmVKIAOo.js → Field-Ibi32diw.js} +953 -782
  23. package/dist/_chunks/Field-Ibi32diw.js.map +1 -0
  24. package/dist/_chunks/{Field-6gvGdPBV.mjs → Field-nNgv5bpd.mjs} +901 -729
  25. package/dist/_chunks/Field-nNgv5bpd.mjs.map +1 -0
  26. package/dist/_chunks/{Form-CPZC9vWa.js → Form-Dhnh34ym.js} +39 -38
  27. package/dist/_chunks/Form-Dhnh34ym.js.map +1 -0
  28. package/dist/_chunks/{Form-DW6K1IH-.mjs → Form-DodJsI2A.mjs} +39 -37
  29. package/dist/_chunks/Form-DodJsI2A.mjs.map +1 -0
  30. package/dist/_chunks/{History-DeAPlvtv.js → History-C9auUkDi.js} +149 -56
  31. package/dist/_chunks/History-C9auUkDi.js.map +1 -0
  32. package/dist/_chunks/{History-Dmr9fmUA.mjs → History-CKCSQXz_.mjs} +148 -54
  33. package/dist/_chunks/History-CKCSQXz_.mjs.map +1 -0
  34. package/dist/_chunks/{ListConfigurationPage-DPCwW5Vr.js → ListConfigurationPage-Bg4rWUjX.js} +58 -59
  35. package/dist/_chunks/ListConfigurationPage-Bg4rWUjX.js.map +1 -0
  36. package/dist/_chunks/{ListConfigurationPage-DhwvYcNv.mjs → ListConfigurationPage-CKEC4ttG.mjs} +54 -54
  37. package/dist/_chunks/ListConfigurationPage-CKEC4ttG.mjs.map +1 -0
  38. package/dist/_chunks/{ListViewPage-BtAwuYLE.mjs → ListViewPage-B7_WJUjG.mjs} +93 -104
  39. package/dist/_chunks/ListViewPage-B7_WJUjG.mjs.map +1 -0
  40. package/dist/_chunks/{ListViewPage-5ySZ-VUs.js → ListViewPage-C2gIeYHG.js} +98 -109
  41. package/dist/_chunks/ListViewPage-C2gIeYHG.js.map +1 -0
  42. package/dist/_chunks/{NoContentTypePage-DSPxnxxp.mjs → NoContentTypePage-Ckem6Ll6.mjs} +3 -3
  43. package/dist/_chunks/NoContentTypePage-Ckem6Ll6.mjs.map +1 -0
  44. package/dist/_chunks/{NoContentTypePage-DOC_yWOf.js → NoContentTypePage-DqgdUfyn.js} +3 -3
  45. package/dist/_chunks/NoContentTypePage-DqgdUfyn.js.map +1 -0
  46. package/dist/_chunks/{NoPermissionsPage-UWDC-1Tw.mjs → NoPermissionsPage-BO-GEjA4.mjs} +2 -2
  47. package/dist/_chunks/{NoPermissionsPage-UWDC-1Tw.mjs.map → NoPermissionsPage-BO-GEjA4.mjs.map} +1 -1
  48. package/dist/_chunks/{NoPermissionsPage-Dwu8rRJu.js → NoPermissionsPage-CF29Q-sW.js} +2 -2
  49. package/dist/_chunks/{NoPermissionsPage-Dwu8rRJu.js.map → NoPermissionsPage-CF29Q-sW.js.map} +1 -1
  50. package/dist/_chunks/{Relations-CgWtgnPe.js → Relations-C0uC9J4f.js} +70 -61
  51. package/dist/_chunks/Relations-C0uC9J4f.js.map +1 -0
  52. package/dist/_chunks/{Relations-J8cscLlR.mjs → Relations-DItV5eow.mjs} +66 -56
  53. package/dist/_chunks/Relations-DItV5eow.mjs.map +1 -0
  54. package/dist/_chunks/{en-MBPul9Su.mjs → en-BrCTWlZv.mjs} +11 -4
  55. package/dist/_chunks/{en-MBPul9Su.mjs.map → en-BrCTWlZv.mjs.map} +1 -1
  56. package/dist/_chunks/{en-C-V1_90f.js → en-uOUIxfcQ.js} +11 -4
  57. package/dist/_chunks/{en-C-V1_90f.js.map → en-uOUIxfcQ.js.map} +1 -1
  58. package/dist/_chunks/{index-C6AH2hEl.js → index-Dd0nXyJF.js} +1649 -905
  59. package/dist/_chunks/index-Dd0nXyJF.js.map +1 -0
  60. package/dist/_chunks/{index-CwRRo1V9.mjs → index-DrNe6ctw.mjs} +1671 -926
  61. package/dist/_chunks/index-DrNe6ctw.mjs.map +1 -0
  62. package/dist/_chunks/{layout-jIDzX0Fp.mjs → layout-B3ez7kvr.mjs} +43 -26
  63. package/dist/_chunks/layout-B3ez7kvr.mjs.map +1 -0
  64. package/dist/_chunks/{layout-B_SXLhqf.js → layout-CLLtt_5O.js} +43 -28
  65. package/dist/_chunks/layout-CLLtt_5O.js.map +1 -0
  66. package/dist/_chunks/{relations-CuvIgCqI.mjs → relations-B0hlsUU_.mjs} +2 -2
  67. package/dist/_chunks/{relations-CuvIgCqI.mjs.map → relations-B0hlsUU_.mjs.map} +1 -1
  68. package/dist/_chunks/{relations-iBMa_OFG.js → relations-bRxcNv1q.js} +2 -2
  69. package/dist/_chunks/{relations-iBMa_OFG.js.map → relations-bRxcNv1q.js.map} +1 -1
  70. package/dist/_chunks/useDragAndDrop-DdHgKsqq.mjs.map +1 -1
  71. package/dist/_chunks/useDragAndDrop-J0TUUbR6.js.map +1 -1
  72. package/dist/_chunks/usePrev-B9w_-eYc.js +15 -0
  73. package/dist/_chunks/usePrev-B9w_-eYc.js.map +1 -0
  74. package/dist/_chunks/usePrev-DH6iah0A.mjs +16 -0
  75. package/dist/_chunks/usePrev-DH6iah0A.mjs.map +1 -0
  76. package/dist/admin/index.js +2 -1
  77. package/dist/admin/index.js.map +1 -1
  78. package/dist/admin/index.mjs +5 -4
  79. package/dist/admin/src/components/ComponentIcon.d.ts +6 -3
  80. package/dist/admin/src/content-manager.d.ts +3 -3
  81. package/dist/admin/src/exports.d.ts +1 -0
  82. package/dist/admin/src/history/components/VersionInputRenderer.d.ts +1 -1
  83. package/dist/admin/src/history/index.d.ts +3 -0
  84. package/dist/admin/src/history/services/historyVersion.d.ts +1 -1
  85. package/dist/admin/src/hooks/useDocument.d.ts +5 -8
  86. package/dist/admin/src/hooks/useDocumentActions.d.ts +24 -3
  87. package/dist/admin/src/hooks/useDocumentLayout.d.ts +2 -2
  88. package/dist/admin/src/hooks/useDragAndDrop.d.ts +4 -4
  89. package/dist/admin/src/hooks/useKeyboardDragAndDrop.d.ts +1 -1
  90. package/dist/admin/src/index.d.ts +1 -0
  91. package/dist/admin/src/pages/EditView/components/DocumentActions.d.ts +11 -4
  92. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/BlocksInput.d.ts +3 -3
  93. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/utils/constants.d.ts +4 -0
  94. package/dist/admin/src/pages/EditView/components/FormInputs/Component/Input.d.ts +2 -2
  95. package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.d.ts +3 -5
  96. package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/Field.d.ts +1 -1
  97. package/dist/admin/src/pages/EditView/components/FormInputs/Relations.d.ts +30 -18
  98. package/dist/admin/src/pages/EditView/components/FormInputs/UID.d.ts +2 -2
  99. package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.d.ts +3 -49
  100. package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/Field.d.ts +2 -2
  101. package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/WysiwygStyles.d.ts +59 -52
  102. package/dist/admin/src/pages/EditView/components/InputRenderer.d.ts +2 -10
  103. package/dist/admin/src/pages/ListView/components/BulkActions/Actions.d.ts +3 -30
  104. package/dist/admin/src/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.d.ts +2 -2
  105. package/dist/admin/src/pages/ListView/components/BulkActions/PublishAction.d.ts +9 -26
  106. package/dist/admin/src/services/api.d.ts +2 -3
  107. package/dist/admin/src/services/components.d.ts +2 -2
  108. package/dist/admin/src/services/contentTypes.d.ts +5 -5
  109. package/dist/admin/src/services/documents.d.ts +29 -17
  110. package/dist/admin/src/services/init.d.ts +2 -2
  111. package/dist/admin/src/services/relations.d.ts +3 -3
  112. package/dist/admin/src/services/uid.d.ts +3 -3
  113. package/dist/admin/src/utils/api.d.ts +4 -18
  114. package/dist/admin/src/utils/validation.d.ts +1 -6
  115. package/dist/server/index.js +392 -261
  116. package/dist/server/index.js.map +1 -1
  117. package/dist/server/index.mjs +400 -269
  118. package/dist/server/index.mjs.map +1 -1
  119. package/dist/server/src/controllers/collection-types.d.ts.map +1 -1
  120. package/dist/server/src/controllers/single-types.d.ts.map +1 -1
  121. package/dist/server/src/controllers/uid.d.ts.map +1 -1
  122. package/dist/server/src/controllers/utils/metadata.d.ts +8 -0
  123. package/dist/server/src/controllers/utils/metadata.d.ts.map +1 -0
  124. package/dist/server/src/controllers/validation/dimensions.d.ts +11 -0
  125. package/dist/server/src/controllers/validation/dimensions.d.ts.map +1 -0
  126. package/dist/server/src/controllers/validation/index.d.ts +1 -1
  127. package/dist/server/src/history/services/history.d.ts.map +1 -1
  128. package/dist/server/src/history/services/lifecycles.d.ts.map +1 -1
  129. package/dist/server/src/history/services/utils.d.ts +1 -1
  130. package/dist/server/src/history/services/utils.d.ts.map +1 -1
  131. package/dist/server/src/index.d.ts +18 -39
  132. package/dist/server/src/index.d.ts.map +1 -1
  133. package/dist/server/src/services/document-manager.d.ts +13 -12
  134. package/dist/server/src/services/document-manager.d.ts.map +1 -1
  135. package/dist/server/src/services/document-metadata.d.ts +8 -29
  136. package/dist/server/src/services/document-metadata.d.ts.map +1 -1
  137. package/dist/server/src/services/index.d.ts +18 -39
  138. package/dist/server/src/services/index.d.ts.map +1 -1
  139. package/dist/server/src/services/utils/populate.d.ts +8 -1
  140. package/dist/server/src/services/utils/populate.d.ts.map +1 -1
  141. package/dist/shared/contracts/collection-types.d.ts +14 -6
  142. package/dist/shared/contracts/collection-types.d.ts.map +1 -1
  143. package/dist/shared/contracts/relations.d.ts +2 -2
  144. package/dist/shared/contracts/relations.d.ts.map +1 -1
  145. package/package.json +13 -14
  146. package/dist/_chunks/CardDragPreview-DSVYodBX.js.map +0 -1
  147. package/dist/_chunks/CardDragPreview-ikSG4M46.mjs.map +0 -1
  148. package/dist/_chunks/ComponentIcon-BBQsYCVn.js.map +0 -1
  149. package/dist/_chunks/ComponentIcon-BOFnK76n.mjs.map +0 -1
  150. package/dist/_chunks/EditViewPage-DDS6H9HO.mjs.map +0 -1
  151. package/dist/_chunks/EditViewPage-DvNpQkam.js.map +0 -1
  152. package/dist/_chunks/Field-6gvGdPBV.mjs.map +0 -1
  153. package/dist/_chunks/Field-DmVKIAOo.js.map +0 -1
  154. package/dist/_chunks/Form-CPZC9vWa.js.map +0 -1
  155. package/dist/_chunks/Form-DW6K1IH-.mjs.map +0 -1
  156. package/dist/_chunks/History-DeAPlvtv.js.map +0 -1
  157. package/dist/_chunks/History-Dmr9fmUA.mjs.map +0 -1
  158. package/dist/_chunks/ListConfigurationPage-DPCwW5Vr.js.map +0 -1
  159. package/dist/_chunks/ListConfigurationPage-DhwvYcNv.mjs.map +0 -1
  160. package/dist/_chunks/ListViewPage-5ySZ-VUs.js.map +0 -1
  161. package/dist/_chunks/ListViewPage-BtAwuYLE.mjs.map +0 -1
  162. package/dist/_chunks/NoContentTypePage-DOC_yWOf.js.map +0 -1
  163. package/dist/_chunks/NoContentTypePage-DSPxnxxp.mjs.map +0 -1
  164. package/dist/_chunks/Relations-CgWtgnPe.js.map +0 -1
  165. package/dist/_chunks/Relations-J8cscLlR.mjs.map +0 -1
  166. package/dist/_chunks/index-C6AH2hEl.js.map +0 -1
  167. package/dist/_chunks/index-CwRRo1V9.mjs.map +0 -1
  168. package/dist/_chunks/layout-B_SXLhqf.js.map +0 -1
  169. package/dist/_chunks/layout-jIDzX0Fp.mjs.map +0 -1
  170. package/dist/_chunks/urls-CbOsUOoW.mjs +0 -7
  171. package/dist/_chunks/urls-CbOsUOoW.mjs.map +0 -1
  172. package/dist/_chunks/urls-DzZya_gm.js +0 -6
  173. package/dist/_chunks/urls-DzZya_gm.js.map +0 -1
  174. package/dist/server/src/controllers/utils/dimensions.d.ts +0 -5
  175. package/dist/server/src/controllers/utils/dimensions.d.ts.map +0 -1
@@ -3,14 +3,14 @@ import * as React from "react";
3
3
  import { useEffect } from "react";
4
4
  import { useQueryParams, useNotification, useStrapiApp, useAPIErrorHandler, useAuth, useGuidedTour, Page, Layouts } from "@strapi/admin/strapi-admin";
5
5
  import { useIntl } from "react-intl";
6
- import { NavLink, useMatch, useLocation, Navigate, Routes, Route } from "react-router-dom";
7
- import { Box, Flex, Typography, IconButton, useFilter, useCollator, SubNav, SubNavHeader, SubNavSections, SubNavSection, SubNavLink, useNotifyAT } from "@strapi/design-system";
6
+ import { NavLink, useMatch, useLocation, Navigate, Outlet } from "react-router-dom";
7
+ import { Box, Flex, Typography, IconButton, SubNavLink, useFilter, useCollator, SubNav, SubNavHeader, SubNavSections, SubNavSection, useNotifyAT } from "@strapi/design-system";
8
8
  import { useDragLayer } from "react-dnd";
9
- import { C as CardDragPreview } from "./CardDragPreview-ikSG4M46.mjs";
9
+ import { C as CardDragPreview } from "./CardDragPreview-DOxamsuj.mjs";
10
10
  import { CaretDown, Trash, Drag, Cross } from "@strapi/icons";
11
- import styled from "styled-components";
12
- import { D as DocumentStatus, g as getTranslation, u as useGetInitialDataQuery, a as useGetAllContentTypeSettingsQuery, s as setInitialData, C as COLLECTION_TYPES, S as SINGLE_TYPES, H as HOOKS, r as routes } from "./index-CwRRo1V9.mjs";
13
- import { F as FlexWrapper, L as LinkEllipsis, D as DisconnectButton } from "./Relations-J8cscLlR.mjs";
11
+ import { styled } from "styled-components";
12
+ import { D as DocumentStatus, u as useContentTypeSchema, g as getTranslation, a as useGetInitialDataQuery, b as useGetAllContentTypeSettingsQuery, s as setInitialData, C as COLLECTION_TYPES, S as SINGLE_TYPES, H as HOOKS } from "./index-DrNe6ctw.mjs";
13
+ import { F as FlexWrapper, L as LinkEllipsis, D as DisconnectButton } from "./Relations-DItV5eow.mjs";
14
14
  import { stringify, parse } from "qs";
15
15
  import { u as useTypedSelector, a as useTypedDispatch } from "./hooks-E5u1mcgM.mjs";
16
16
  import { I as ItemTypes } from "./useDragAndDrop-DdHgKsqq.mjs";
@@ -77,8 +77,8 @@ const ComponentDragPreview = ({ displayedValue }) => {
77
77
  /* @__PURE__ */ jsx(Flex, { maxWidth: "15rem", children: /* @__PURE__ */ jsx(Typography, { textColor: "neutral700", ellipsis: true, children: displayedValue }) })
78
78
  ] }) }),
79
79
  /* @__PURE__ */ jsxs(Flex, { gap: 2, children: [
80
- /* @__PURE__ */ jsx(IconButton, { "aria-label": "", borderWidth: 0, children: /* @__PURE__ */ jsx(Trash, {}) }),
81
- /* @__PURE__ */ jsx(IconButton, { "aria-label": "", borderWidth: 0, children: /* @__PURE__ */ jsx(Drag, {}) })
80
+ /* @__PURE__ */ jsx(IconButton, { withTooltip: false, label: "", borderWidth: 0, children: /* @__PURE__ */ jsx(Trash, {}) }),
81
+ /* @__PURE__ */ jsx(IconButton, { withTooltip: false, label: "", borderWidth: 0, children: /* @__PURE__ */ jsx(Drag, {}) })
82
82
  ] })
83
83
  ]
84
84
  }
@@ -119,7 +119,7 @@ const RelationDragPreview = ({ status, displayedValue, width }) => {
119
119
  gap: 4,
120
120
  children: [
121
121
  /* @__PURE__ */ jsxs(FlexWrapper, { gap: 1, children: [
122
- /* @__PURE__ */ jsx(IconButton, { "aria-label": "", borderWidth: 0, children: /* @__PURE__ */ jsx(Drag, {}) }),
122
+ /* @__PURE__ */ jsx(IconButton, { withTooltip: false, label: "", borderWidth: 0, children: /* @__PURE__ */ jsx(Drag, {}) }),
123
123
  /* @__PURE__ */ jsxs(Flex, { width: "100%", minWidth: 0, justifyContent: "space-between", children: [
124
124
  /* @__PURE__ */ jsx(Box, { minWidth: 0, paddingTop: 1, paddingBottom: 1, paddingRight: 4, children: /* @__PURE__ */ jsx(LinkEllipsis, { href: "", children: /* @__PURE__ */ jsx(Typography, { textColor: "primary600", ellipsis: true, children: displayedValue }) }) }),
125
125
  status ? /* @__PURE__ */ jsx(DocumentStatus, { status }) : null
@@ -130,6 +130,17 @@ const RelationDragPreview = ({ status, displayedValue, width }) => {
130
130
  }
131
131
  ) });
132
132
  };
133
+ const SubNavLinkCustom = styled(SubNavLink)`
134
+ div {
135
+ width: inherit;
136
+ span:nth-child(2) {
137
+ white-space: nowrap;
138
+ overflow: hidden;
139
+ text-overflow: ellipsis;
140
+ width: inherit;
141
+ }
142
+ }
143
+ `;
133
144
  const LeftMenu = () => {
134
145
  const [search, setSearch] = React.useState("");
135
146
  const [{ query }] = useQueryParams();
@@ -138,6 +149,7 @@ const LeftMenu = () => {
138
149
  (state) => state["content-manager"].app.collectionTypeLinks
139
150
  );
140
151
  const singleTypeLinks = useTypedSelector((state) => state["content-manager"].app.singleTypeLinks);
152
+ const { schemas } = useContentTypeSchema();
141
153
  const { startsWith } = useFilter(locale, {
142
154
  sensitivity: "base"
143
155
  });
@@ -183,9 +195,21 @@ const LeftMenu = () => {
183
195
  };
184
196
  const label = formatMessage({
185
197
  id: getTranslation("header.name"),
186
- defaultMessage: "Content"
198
+ defaultMessage: "Content Manager"
187
199
  });
188
- return /* @__PURE__ */ jsxs(SubNav, { ariaLabel: label, children: [
200
+ const getPluginsParamsForLink = (link) => {
201
+ const schema = schemas.find((schema2) => schema2.uid === link.uid);
202
+ const isI18nEnabled = Boolean(schema?.pluginOptions?.i18n?.localized);
203
+ if (query.plugins && "i18n" in query.plugins) {
204
+ const { i18n, ...restPlugins } = query.plugins;
205
+ if (!isI18nEnabled) {
206
+ return restPlugins;
207
+ }
208
+ return { i18n, ...restPlugins };
209
+ }
210
+ return query.plugins;
211
+ };
212
+ return /* @__PURE__ */ jsxs(SubNav, { "aria-label": label, children: [
189
213
  /* @__PURE__ */ jsx(
190
214
  SubNavHeader,
191
215
  {
@@ -208,24 +232,17 @@ const LeftMenu = () => {
208
232
  badgeLabel: section.links.length.toString(),
209
233
  children: section.links.map((link) => {
210
234
  return /* @__PURE__ */ jsx(
211
- SubNavLink,
235
+ SubNavLinkCustom,
212
236
  {
213
- as: NavLink,
237
+ tag: NavLink,
214
238
  to: {
215
239
  pathname: link.to,
216
- /**
217
- * We re-add the plugins query to the params available in the menu,
218
- * this means once you've changed the locale in the app, you continue
219
- * to see the same locale when changing content-type.
220
- *
221
- * NOTE: if you go to a content-type that does not have i18n enabled,
222
- * we return the default documents anyway.
223
- */
224
240
  search: stringify({
225
241
  ...parse(link.search ?? ""),
226
- plugins: query.plugins
242
+ plugins: getPluginsParamsForLink(link)
227
243
  })
228
244
  },
245
+ width: "100%",
229
246
  children: link.title
230
247
  },
231
248
  link.uid
@@ -305,13 +322,13 @@ const useContentManagerInitData = () => {
305
322
  collectionTypeSectionLinks.map(({ permissions }) => checkUserHasPermissions(permissions))
306
323
  );
307
324
  const authorizedCollectionTypeLinks = collectionTypeSectionLinks.filter(
308
- (_, index) => collectionTypeLinksPermissions[index]
325
+ (_, index) => collectionTypeLinksPermissions[index].length > 0
309
326
  );
310
327
  const singleTypeLinksPermissions = await Promise.all(
311
328
  singleTypeSectionLinks.map(({ permissions }) => checkUserHasPermissions(permissions))
312
329
  );
313
330
  const authorizedSingleTypeLinks = singleTypeSectionLinks.filter(
314
- (_, index) => singleTypeLinksPermissions[index]
331
+ (_, index) => singleTypeLinksPermissions[index].length > 0
315
332
  );
316
333
  const { ctLinks } = runHookWaterfall(MUTATE_COLLECTION_TYPES_LINKS, {
317
334
  ctLinks: authorizedCollectionTypeLinks,
@@ -425,7 +442,7 @@ const Layout = () => {
425
442
  }) }),
426
443
  /* @__PURE__ */ jsxs(Layouts.Root, { sideNav: /* @__PURE__ */ jsx(LeftMenu, {}), children: [
427
444
  /* @__PURE__ */ jsx(DragLayer, { renderItem: renderDraglayerItem }),
428
- /* @__PURE__ */ jsx(Routes, { children: routes.map((route) => /* @__PURE__ */ jsx(Route, { ...route }, route.path)) })
445
+ /* @__PURE__ */ jsx(Outlet, {})
429
446
  ] })
430
447
  ] });
431
448
  };
@@ -450,4 +467,4 @@ function renderDraglayerItem({ type, item }) {
450
467
  export {
451
468
  Layout
452
469
  };
453
- //# sourceMappingURL=layout-jIDzX0Fp.mjs.map
470
+ //# sourceMappingURL=layout-B3ez7kvr.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout-B3ez7kvr.mjs","sources":["../../admin/src/components/DragLayer.tsx","../../admin/src/components/DragPreviews/ComponentDragPreview.tsx","../../admin/src/components/DragPreviews/RelationDragPreview.tsx","../../admin/src/components/LeftMenu.tsx","../../admin/src/hooks/useContentManagerInitData.ts","../../admin/src/layout.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box } from '@strapi/design-system';\nimport { DragLayerMonitor, XYCoord, useDragLayer } from 'react-dnd';\n\nfunction getStyle(\n initialOffset: XYCoord | null,\n currentOffset: XYCoord | null,\n mouseOffset: XYCoord | null\n) {\n if (!initialOffset || !currentOffset || !mouseOffset) {\n return { display: 'none' };\n }\n\n const { x, y } = mouseOffset;\n\n return {\n transform: `translate(${x}px, ${y}px)`,\n };\n}\n\nexport interface DragLayerProps {\n renderItem: (item: {\n /**\n * TODO: it'd be great if we could make this a union where the type infers the item.\n */\n item: any;\n type: ReturnType<DragLayerMonitor['getItemType']>;\n }) => React.ReactNode;\n}\n\nconst DragLayer = ({ renderItem }: DragLayerProps) => {\n const { itemType, isDragging, item, initialOffset, currentOffset, mouseOffset } = useDragLayer(\n (monitor) => ({\n item: monitor.getItem(),\n itemType: monitor.getItemType(),\n initialOffset: monitor.getInitialSourceClientOffset(),\n currentOffset: monitor.getSourceClientOffset(),\n isDragging: monitor.isDragging(),\n mouseOffset: monitor.getClientOffset(),\n })\n );\n\n if (!isDragging) {\n return null;\n }\n\n return (\n <Box\n height=\"100%\"\n left={0}\n position=\"fixed\"\n pointerEvents=\"none\"\n top={0}\n zIndex={100}\n width=\"100%\"\n >\n <Box style={getStyle(initialOffset, currentOffset, mouseOffset)}>\n {renderItem({ type: itemType, item })}\n </Box>\n </Box>\n );\n};\n\nexport { DragLayer };\n","import { Flex, FlexComponent, IconButton, Typography } from '@strapi/design-system';\nimport { CaretDown, Drag, Trash } from '@strapi/icons';\nimport { styled } from 'styled-components';\n\ninterface ComponentDragPreviewProps {\n displayedValue: string;\n}\n\nconst ComponentDragPreview = ({ displayedValue }: ComponentDragPreviewProps) => {\n return (\n <Flex\n background=\"neutral0\"\n borderColor=\"neutral200\"\n justifyContent=\"space-between\"\n gap={3}\n padding={3}\n width=\"30rem\"\n >\n <ToggleButton type=\"button\">\n <Flex gap={6}>\n <DropdownIconWrapper\n alignItems=\"center\"\n justifyContent=\"center\"\n background=\"neutral200\"\n height=\"3.2rem\"\n width=\"3.2rem\"\n >\n <CaretDown />\n </DropdownIconWrapper>\n\n <Flex maxWidth=\"15rem\">\n <Typography textColor=\"neutral700\" ellipsis>\n {displayedValue}\n </Typography>\n </Flex>\n </Flex>\n </ToggleButton>\n\n <Flex gap={2}>\n <IconButton withTooltip={false} label=\"\" borderWidth={0}>\n <Trash />\n </IconButton>\n\n <IconButton withTooltip={false} label=\"\" borderWidth={0}>\n <Drag />\n </IconButton>\n </Flex>\n </Flex>\n );\n};\n\nconst DropdownIconWrapper = styled<FlexComponent>(Flex)`\n border-radius: 50%;\n\n svg {\n height: 0.6rem;\n width: 1.1rem;\n > path {\n fill: ${({ theme }) => theme.colors.neutral600};\n }\n }\n`;\n\n// TODO: we shouldn't have to reset a whole button\nconst ToggleButton = styled.button`\n border: none;\n background: transparent;\n display: block;\n width: 100%;\n text-align: unset;\n padding: 0;\n`;\n\nexport { ComponentDragPreview };\nexport type { ComponentDragPreviewProps };\n","import { Box, Flex, IconButton, Typography } from '@strapi/design-system';\nimport { Cross, Drag } from '@strapi/icons';\n\nimport { DocumentStatus } from '../../pages/EditView/components/DocumentStatus';\nimport {\n DisconnectButton,\n LinkEllipsis,\n FlexWrapper,\n} from '../../pages/EditView/components/FormInputs/Relations';\n\nimport type { Data } from '@strapi/types';\n\ninterface RelationDragPreviewProps {\n status?: string;\n displayedValue: string;\n id: Data.ID;\n index: number;\n width: number;\n}\n\nconst RelationDragPreview = ({ status, displayedValue, width }: RelationDragPreviewProps) => {\n return (\n <Box style={{ width }}>\n <Flex\n paddingTop={2}\n paddingBottom={2}\n paddingLeft={2}\n paddingRight={4}\n hasRadius\n borderWidth={1}\n background=\"neutral0\"\n borderColor=\"neutral200\"\n justifyContent=\"space-between\"\n gap={4}\n >\n <FlexWrapper gap={1}>\n <IconButton withTooltip={false} label=\"\" borderWidth={0}>\n <Drag />\n </IconButton>\n <Flex width=\"100%\" minWidth={0} justifyContent=\"space-between\">\n <Box minWidth={0} paddingTop={1} paddingBottom={1} paddingRight={4}>\n <LinkEllipsis href=\"\">\n <Typography textColor=\"primary600\" ellipsis>\n {displayedValue}\n </Typography>\n </LinkEllipsis>\n </Box>\n {status ? <DocumentStatus status={status} /> : null}\n </Flex>\n </FlexWrapper>\n <DisconnectButton type=\"button\">\n <Cross width=\"12px\" />\n </DisconnectButton>\n </Flex>\n </Box>\n );\n};\n\nexport { RelationDragPreview };\nexport type { RelationDragPreviewProps };\n","import * as React from 'react';\n\nimport { useQueryParams } from '@strapi/admin/strapi-admin';\nimport {\n useCollator,\n useFilter,\n SubNav,\n SubNavHeader,\n SubNavLink,\n SubNavSection,\n SubNavSections,\n} from '@strapi/design-system';\nimport { parse, stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { NavLink } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { useContentTypeSchema } from '../hooks/useContentTypeSchema';\nimport { useTypedSelector } from '../modules/hooks';\nimport { getTranslation } from '../utils/translations';\n\nimport type { ContentManagerLink } from '../hooks/useContentManagerInitData';\n\nconst SubNavLinkCustom = styled(SubNavLink)`\n div {\n width: inherit;\n span:nth-child(2) {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n width: inherit;\n }\n }\n`;\n\nconst LeftMenu = () => {\n const [search, setSearch] = React.useState('');\n const [{ query }] = useQueryParams<{ plugins?: object }>();\n const { formatMessage, locale } = useIntl();\n\n const collectionTypeLinks = useTypedSelector(\n (state) => state['content-manager'].app.collectionTypeLinks\n );\n\n const singleTypeLinks = useTypedSelector((state) => state['content-manager'].app.singleTypeLinks);\n const { schemas } = useContentTypeSchema();\n\n const { startsWith } = useFilter(locale, {\n sensitivity: 'base',\n });\n\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const menu = React.useMemo(\n () =>\n [\n {\n id: 'collectionTypes',\n title: formatMessage({\n id: getTranslation('components.LeftMenu.collection-types'),\n defaultMessage: 'Collection Types',\n }),\n searchable: true,\n links: collectionTypeLinks,\n },\n {\n id: 'singleTypes',\n title: formatMessage({\n id: getTranslation('components.LeftMenu.single-types'),\n defaultMessage: 'Single Types',\n }),\n searchable: true,\n links: singleTypeLinks,\n },\n ].map((section) => ({\n ...section,\n links: section.links\n /**\n * Filter by the search value\n */\n .filter((link) => startsWith(link.title, search))\n /**\n * Sort correctly using the language\n */\n .sort((a, b) => formatter.compare(a.title, b.title))\n /**\n * Apply the formated strings to the links from react-intl\n */\n .map((link) => {\n return {\n ...link,\n title: formatMessage({ id: link.title, defaultMessage: link.title }),\n };\n }),\n })),\n [collectionTypeLinks, search, singleTypeLinks, startsWith, formatMessage, formatter]\n );\n\n const handleClear = () => {\n setSearch('');\n };\n\n const handleChangeSearch = ({ target: { value } }: { target: { value: string } }) => {\n setSearch(value);\n };\n\n const label = formatMessage({\n id: getTranslation('header.name'),\n defaultMessage: 'Content Manager',\n });\n\n const getPluginsParamsForLink = (link: ContentManagerLink) => {\n const schema = schemas.find((schema) => schema.uid === link.uid);\n const isI18nEnabled = Boolean((schema?.pluginOptions?.i18n as any)?.localized);\n\n // The search params have the i18n plugin\n if (query.plugins && 'i18n' in query.plugins) {\n // Prepare removal of i18n from the plugins search params\n const { i18n, ...restPlugins } = query.plugins;\n\n // i18n is not enabled, remove it from the plugins search params\n if (!isI18nEnabled) {\n return restPlugins;\n }\n\n // i18n is enabled, put the plugins search params back together\n return { i18n, ...restPlugins };\n }\n\n return query.plugins;\n };\n\n return (\n <SubNav aria-label={label}>\n <SubNavHeader\n label={label}\n searchable\n value={search}\n onChange={handleChangeSearch}\n onClear={handleClear}\n searchLabel={formatMessage({\n id: 'content-manager.components.LeftMenu.Search.label',\n defaultMessage: 'Search for a content type',\n })}\n />\n <SubNavSections>\n {menu.map((section) => {\n return (\n <SubNavSection\n key={section.id}\n label={section.title}\n badgeLabel={section.links.length.toString()}\n >\n {section.links.map((link) => {\n return (\n <SubNavLinkCustom\n tag={NavLink}\n key={link.uid}\n to={{\n pathname: link.to,\n search: stringify({\n ...parse(link.search ?? ''),\n plugins: getPluginsParamsForLink(link),\n }),\n }}\n width=\"100%\"\n >\n {link.title}\n </SubNavLinkCustom>\n );\n })}\n </SubNavSection>\n );\n })}\n </SubNavSections>\n </SubNav>\n );\n};\n\nexport { LeftMenu };\n","import { useEffect } from 'react';\n\nimport {\n useAuth,\n type Permission,\n useNotification,\n useStrapiApp,\n useAPIErrorHandler,\n} from '@strapi/admin/strapi-admin';\nimport { useNotifyAT } from '@strapi/design-system';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\n\nimport { COLLECTION_TYPES, SINGLE_TYPES } from '../constants/collections';\nimport { HOOKS } from '../constants/hooks';\nimport { AppState, setInitialData } from '../modules/app';\nimport { useTypedDispatch, useTypedSelector } from '../modules/hooks';\nimport { useGetAllContentTypeSettingsQuery } from '../services/contentTypes';\nimport { useGetInitialDataQuery } from '../services/init';\nimport { getTranslation } from '../utils/translations';\n\nimport type { Component } from '../../../shared/contracts/components';\nimport type {\n ContentType,\n FindContentTypesSettings,\n} from '../../../shared/contracts/content-types';\nimport type { GetInitData } from '../../../shared/contracts/init';\n\nconst { MUTATE_COLLECTION_TYPES_LINKS, MUTATE_SINGLE_TYPES_LINKS } = HOOKS;\n\ninterface ContentManagerLink {\n permissions: Permission[];\n search: string | null;\n kind: string;\n title: string;\n to: string;\n uid: string;\n name: string;\n isDisplayed: boolean;\n}\n\nconst useContentManagerInitData = (): AppState => {\n const { toggleNotification } = useNotification();\n const dispatch = useTypedDispatch();\n const runHookWaterfall = useStrapiApp(\n 'useContentManagerInitData',\n (state) => state.runHookWaterfall\n );\n const { notifyStatus } = useNotifyAT();\n const { formatMessage } = useIntl();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler(getTranslation);\n const checkUserHasPermissions = useAuth(\n 'useContentManagerInitData',\n (state) => state.checkUserHasPermissions\n );\n\n const state = useTypedSelector((state) => state['content-manager'].app);\n\n const initialDataQuery = useGetInitialDataQuery(undefined, {\n /**\n * TODO: remove this when the CTB has been refactored to use redux-toolkit-query\n * and it can invalidate the cache on mutation\n */\n refetchOnMountOrArgChange: true,\n });\n\n useEffect(() => {\n if (initialDataQuery.data) {\n notifyStatus(\n formatMessage({\n id: getTranslation('App.schemas.data-loaded'),\n defaultMessage: 'The schemas have been successfully loaded.',\n })\n );\n }\n }, [formatMessage, initialDataQuery.data, notifyStatus]);\n\n useEffect(() => {\n if (initialDataQuery.error) {\n toggleNotification({ type: 'danger', message: formatAPIError(initialDataQuery.error) });\n }\n }, [formatAPIError, initialDataQuery.error, toggleNotification]);\n\n const contentTypeSettingsQuery = useGetAllContentTypeSettingsQuery();\n\n useEffect(() => {\n if (contentTypeSettingsQuery.error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(contentTypeSettingsQuery.error),\n });\n }\n }, [formatAPIError, contentTypeSettingsQuery.error, toggleNotification]);\n\n const formatData = async (\n components: Component[],\n contentTypes: ContentType[],\n fieldSizes: GetInitData.Response['data']['fieldSizes'],\n contentTypeConfigurations: FindContentTypesSettings.Response['data']\n ) => {\n /**\n * We group these by the two types we support. We do with an object because we can use default\n * values of arrays to make sure we always have an array to manipulate further on if, for example,\n * a user has not made any single types.\n *\n * This means we have to manually add new content types to this hook if we add a new type – but\n * the safety is worth it.\n */\n const { collectionType: collectionTypeLinks, singleType: singleTypeLinks } =\n contentTypes.reduce<{\n collectionType: ContentType[];\n singleType: ContentType[];\n }>(\n (acc, model) => {\n acc[model.kind].push(model);\n return acc;\n },\n {\n collectionType: [],\n singleType: [],\n }\n );\n const collectionTypeSectionLinks = generateLinks(\n collectionTypeLinks,\n 'collectionTypes',\n contentTypeConfigurations\n );\n const singleTypeSectionLinks = generateLinks(singleTypeLinks, 'singleTypes');\n\n // Collection Types verifications\n const collectionTypeLinksPermissions = await Promise.all(\n collectionTypeSectionLinks.map(({ permissions }) => checkUserHasPermissions(permissions))\n );\n\n const authorizedCollectionTypeLinks = collectionTypeSectionLinks.filter(\n (_, index) => collectionTypeLinksPermissions[index].length > 0\n );\n\n // Single Types verifications\n const singleTypeLinksPermissions = await Promise.all(\n singleTypeSectionLinks.map(({ permissions }) => checkUserHasPermissions(permissions))\n );\n const authorizedSingleTypeLinks = singleTypeSectionLinks.filter(\n (_, index) => singleTypeLinksPermissions[index].length > 0\n );\n const { ctLinks } = runHookWaterfall(MUTATE_COLLECTION_TYPES_LINKS, {\n ctLinks: authorizedCollectionTypeLinks,\n models: contentTypes,\n });\n const { stLinks } = runHookWaterfall(MUTATE_SINGLE_TYPES_LINKS, {\n stLinks: authorizedSingleTypeLinks,\n models: contentTypes,\n });\n\n dispatch(\n setInitialData({\n authorizedCollectionTypeLinks: ctLinks,\n authorizedSingleTypeLinks: stLinks,\n components,\n contentTypeSchemas: contentTypes,\n fieldSizes,\n })\n );\n };\n\n useEffect(() => {\n if (initialDataQuery.data && contentTypeSettingsQuery.data) {\n formatData(\n initialDataQuery.data.components,\n initialDataQuery.data.contentTypes,\n initialDataQuery.data.fieldSizes,\n contentTypeSettingsQuery.data\n );\n }\n }, [initialDataQuery.data, contentTypeSettingsQuery.data]);\n\n return { ...state };\n};\n\nconst generateLinks = (\n links: ContentType[],\n type: 'collectionTypes' | 'singleTypes',\n configurations: FindContentTypesSettings.Response['data'] = []\n) => {\n return links\n .filter((link) => link.isDisplayed)\n .map((link) => {\n const collectionTypesPermissions = [\n { action: 'plugin::content-manager.explorer.create', subject: link.uid },\n { action: 'plugin::content-manager.explorer.read', subject: link.uid },\n ];\n const singleTypesPermissions = [\n { action: 'plugin::content-manager.explorer.read', subject: link.uid },\n ];\n const permissions =\n type === 'collectionTypes' ? collectionTypesPermissions : singleTypesPermissions;\n\n const currentContentTypeConfig = configurations.find(({ uid }) => uid === link.uid);\n\n let search = null;\n\n if (currentContentTypeConfig) {\n const searchParams = {\n page: 1,\n pageSize: currentContentTypeConfig.settings.pageSize,\n sort: `${currentContentTypeConfig.settings.defaultSortBy}:${currentContentTypeConfig.settings.defaultSortOrder}`,\n };\n\n search = stringify(searchParams, { encode: false });\n }\n\n return {\n permissions,\n search,\n kind: link.kind,\n title: link.info.displayName,\n to: `/content-manager/${link.kind === 'collectionType' ? COLLECTION_TYPES : SINGLE_TYPES}/${\n link.uid\n }`,\n uid: link.uid,\n // Used for the list item key in the helper plugin\n name: link.uid,\n isDisplayed: link.isDisplayed,\n } satisfies ContentManagerLink;\n });\n};\n\nexport { useContentManagerInitData };\nexport type { ContentManagerLink };\n","/* eslint-disable check-file/filename-naming-convention */\nimport * as React from 'react';\n\nimport { Page, useGuidedTour, Layouts } from '@strapi/admin/strapi-admin';\nimport { useIntl } from 'react-intl';\nimport { Navigate, Outlet, useLocation, useMatch } from 'react-router-dom';\n\nimport { DragLayer, DragLayerProps } from './components/DragLayer';\nimport { CardDragPreview } from './components/DragPreviews/CardDragPreview';\nimport { ComponentDragPreview } from './components/DragPreviews/ComponentDragPreview';\nimport { RelationDragPreview } from './components/DragPreviews/RelationDragPreview';\nimport { LeftMenu } from './components/LeftMenu';\nimport { ItemTypes } from './constants/dragAndDrop';\nimport { useContentManagerInitData } from './hooks/useContentManagerInitData';\nimport { getTranslation } from './utils/translations';\n\n/* -------------------------------------------------------------------------------------------------\n * Layout\n * -----------------------------------------------------------------------------------------------*/\n\nconst Layout = () => {\n const contentTypeMatch = useMatch('/content-manager/:kind/:uid/*');\n\n const { isLoading, collectionTypeLinks, models, singleTypeLinks } = useContentManagerInitData();\n const authorisedModels = [...collectionTypeLinks, ...singleTypeLinks].sort((a, b) =>\n a.title.localeCompare(b.title)\n );\n\n const { pathname } = useLocation();\n const { formatMessage } = useIntl();\n const startSection = useGuidedTour('Layout', (state) => state.startSection);\n const startSectionRef = React.useRef(startSection);\n\n React.useEffect(() => {\n if (startSectionRef.current) {\n startSectionRef.current('contentManager');\n }\n }, []);\n\n if (isLoading) {\n return (\n <>\n <Page.Title>\n {formatMessage({\n id: getTranslation('plugin.name'),\n defaultMessage: 'Content Manager',\n })}\n </Page.Title>\n <Page.Loading />\n </>\n );\n }\n\n // Array of models that are displayed in the content manager\n const supportedModelsToDisplay = models.filter(({ isDisplayed }) => isDisplayed);\n\n // Redirect the user to the 403 page\n if (\n authorisedModels.length === 0 &&\n supportedModelsToDisplay.length > 0 &&\n pathname !== '/content-manager/403'\n ) {\n return <Navigate to=\"/403\" />;\n }\n\n // Redirect the user to the create content type page\n if (supportedModelsToDisplay.length === 0 && pathname !== '/no-content-types') {\n return <Navigate to=\"/no-content-types\" />;\n }\n\n if (!contentTypeMatch && authorisedModels.length > 0) {\n return (\n <Navigate\n to={{\n pathname: authorisedModels[0].to,\n search: authorisedModels[0].search ?? '',\n }}\n />\n );\n }\n\n return (\n <>\n <Page.Title>\n {formatMessage({\n id: getTranslation('plugin.name'),\n defaultMessage: 'Content Manager',\n })}\n </Page.Title>\n <Layouts.Root sideNav={<LeftMenu />}>\n <DragLayer renderItem={renderDraglayerItem} />\n <Outlet />\n </Layouts.Root>\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * renderDraglayerItem\n * -----------------------------------------------------------------------------------------------*/\n\nfunction renderDraglayerItem({ type, item }: Parameters<DragLayerProps['renderItem']>[0]) {\n if (!type || (type && typeof type !== 'string')) {\n return null;\n }\n\n /**\n * Because a user may have multiple relations / dynamic zones / repeable fields in the same content type,\n * we append the fieldName for the item type to make them unique, however, we then want to extract that\n * first type to apply the correct preview.\n */\n const [actualType] = type.split('_');\n\n switch (actualType) {\n case ItemTypes.EDIT_FIELD:\n case ItemTypes.FIELD:\n return <CardDragPreview label={item.label} />;\n case ItemTypes.COMPONENT:\n case ItemTypes.DYNAMIC_ZONE:\n return <ComponentDragPreview displayedValue={item.displayedValue} />;\n\n case ItemTypes.RELATION:\n return <RelationDragPreview {...item} />;\n\n default:\n return null;\n }\n}\n\nexport { Layout };\n"],"names":["schema","state"],"mappings":";;;;;;;;;;;;;;;;AAKA,SAAS,SACP,eACA,eACA,aACA;AACA,MAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,aAAa;AAC7C,WAAA,EAAE,SAAS;EACpB;AAEM,QAAA,EAAE,GAAG,EAAM,IAAA;AAEV,SAAA;AAAA,IACL,WAAW,aAAa,CAAC,OAAO,CAAC;AAAA,EAAA;AAErC;AAYA,MAAM,YAAY,CAAC,EAAE,iBAAiC;AACpD,QAAM,EAAE,UAAU,YAAY,MAAM,eAAe,eAAe,gBAAgB;AAAA,IAChF,CAAC,aAAa;AAAA,MACZ,MAAM,QAAQ,QAAQ;AAAA,MACtB,UAAU,QAAQ,YAAY;AAAA,MAC9B,eAAe,QAAQ,6BAA6B;AAAA,MACpD,eAAe,QAAQ,sBAAsB;AAAA,MAC7C,YAAY,QAAQ,WAAW;AAAA,MAC/B,aAAa,QAAQ,gBAAgB;AAAA,IAAA;AAAA,EACvC;AAGF,MAAI,CAAC,YAAY;AACR,WAAA;AAAA,EACT;AAGE,SAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,QAAO;AAAA,MACP,MAAM;AAAA,MACN,UAAS;AAAA,MACT,eAAc;AAAA,MACd,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,OAAM;AAAA,MAEN,UAAC,oBAAA,KAAA,EAAI,OAAO,SAAS,eAAe,eAAe,WAAW,GAC3D,UAAA,WAAW,EAAE,MAAM,UAAU,KAAM,CAAA,GACtC;AAAA,IAAA;AAAA,EAAA;AAGN;ACtDA,MAAM,uBAAuB,CAAC,EAAE,qBAAgD;AAE5E,SAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,YAAW;AAAA,MACX,aAAY;AAAA,MACZ,gBAAe;AAAA,MACf,KAAK;AAAA,MACL,SAAS;AAAA,MACT,OAAM;AAAA,MAEN,UAAA;AAAA,QAAA,oBAAC,gBAAa,MAAK,UACjB,UAAC,qBAAA,MAAA,EAAK,KAAK,GACT,UAAA;AAAA,UAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,YAAW;AAAA,cACX,gBAAe;AAAA,cACf,YAAW;AAAA,cACX,QAAO;AAAA,cACP,OAAM;AAAA,cAEN,8BAAC,WAAU,EAAA;AAAA,YAAA;AAAA,UACb;AAAA,UAEA,oBAAC,MAAK,EAAA,UAAS,SACb,UAAA,oBAAC,YAAW,EAAA,WAAU,cAAa,UAAQ,MACxC,UAAA,eACH,CAAA,GACF;AAAA,QAAA,EAAA,CACF,EACF,CAAA;AAAA,QAEA,qBAAC,MAAK,EAAA,KAAK,GACT,UAAA;AAAA,UAAC,oBAAA,YAAA,EAAW,aAAa,OAAO,OAAM,IAAG,aAAa,GACpD,UAAC,oBAAA,OAAA,CAAA,CAAM,EACT,CAAA;AAAA,UAEA,oBAAC,YAAW,EAAA,aAAa,OAAO,OAAM,IAAG,aAAa,GACpD,UAAC,oBAAA,MAAA,CAAA,CAAK,EACR,CAAA;AAAA,QAAA,GACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;AAEA,MAAM,sBAAsB,OAAsB,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAOxC,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA;AAAA;AAAA;AAMpD,MAAM,eAAe,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AC5C5B,MAAM,sBAAsB,CAAC,EAAE,QAAQ,gBAAgB,YAAsC;AAC3F,SACG,oBAAA,KAAA,EAAI,OAAO,EAAE,SACZ,UAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,YAAY;AAAA,MACZ,eAAe;AAAA,MACf,aAAa;AAAA,MACb,cAAc;AAAA,MACd,WAAS;AAAA,MACT,aAAa;AAAA,MACb,YAAW;AAAA,MACX,aAAY;AAAA,MACZ,gBAAe;AAAA,MACf,KAAK;AAAA,MAEL,UAAA;AAAA,QAAC,qBAAA,aAAA,EAAY,KAAK,GAChB,UAAA;AAAA,UAAC,oBAAA,YAAA,EAAW,aAAa,OAAO,OAAM,IAAG,aAAa,GACpD,UAAC,oBAAA,MAAA,CAAA,CAAK,EACR,CAAA;AAAA,+BACC,MAAK,EAAA,OAAM,QAAO,UAAU,GAAG,gBAAe,iBAC7C,UAAA;AAAA,YAAC,oBAAA,KAAA,EAAI,UAAU,GAAG,YAAY,GAAG,eAAe,GAAG,cAAc,GAC/D,UAAA,oBAAC,gBAAa,MAAK,IACjB,8BAAC,YAAW,EAAA,WAAU,cAAa,UAAQ,MACxC,UACH,eAAA,CAAA,EAAA,CACF,EACF,CAAA;AAAA,YACC,SAAS,oBAAC,gBAAe,EAAA,OAAA,CAAgB,IAAK;AAAA,UAAA,GACjD;AAAA,QAAA,GACF;AAAA,QACA,oBAAC,oBAAiB,MAAK,UACrB,8BAAC,OAAM,EAAA,OAAM,QAAO,EACtB,CAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAEJ,EAAA,CAAA;AAEJ;ACjCA,MAAM,mBAAmB,OAAO,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAY1C,MAAM,WAAW,MAAM;AACrB,QAAM,CAAC,QAAQ,SAAS,IAAI,MAAM,SAAS,EAAE;AAC7C,QAAM,CAAC,EAAE,OAAO,IAAI,eAAqC;AACzD,QAAM,EAAE,eAAe,OAAO,IAAI,QAAQ;AAE1C,QAAM,sBAAsB;AAAA,IAC1B,CAAC,UAAU,MAAM,iBAAiB,EAAE,IAAI;AAAA,EAAA;AAGpC,QAAA,kBAAkB,iBAAiB,CAAC,UAAU,MAAM,iBAAiB,EAAE,IAAI,eAAe;AAC1F,QAAA,EAAE,YAAY;AAEpB,QAAM,EAAE,WAAA,IAAe,UAAU,QAAQ;AAAA,IACvC,aAAa;AAAA,EAAA,CACd;AAEK,QAAA,YAAY,YAAY,QAAQ;AAAA,IACpC,aAAa;AAAA,EAAA,CACd;AAED,QAAM,OAAO,MAAM;AAAA,IACjB,MACE;AAAA,MACE;AAAA,QACE,IAAI;AAAA,QACJ,OAAO,cAAc;AAAA,UACnB,IAAI,eAAe,sCAAsC;AAAA,UACzD,gBAAgB;AAAA,QAAA,CACjB;AAAA,QACD,YAAY;AAAA,QACZ,OAAO;AAAA,MACT;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,OAAO,cAAc;AAAA,UACnB,IAAI,eAAe,kCAAkC;AAAA,UACrD,gBAAgB;AAAA,QAAA,CACjB;AAAA,QACD,YAAY;AAAA,QACZ,OAAO;AAAA,MACT;AAAA,IAAA,EACA,IAAI,CAAC,aAAa;AAAA,MAClB,GAAG;AAAA,MACH,OAAO,QAAQ,MAIZ,OAAO,CAAC,SAAS,WAAW,KAAK,OAAO,MAAM,CAAC,EAI/C,KAAK,CAAC,GAAG,MAAM,UAAU,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,EAIlD,IAAI,CAAC,SAAS;AACN,eAAA;AAAA,UACL,GAAG;AAAA,UACH,OAAO,cAAc,EAAE,IAAI,KAAK,OAAO,gBAAgB,KAAK,OAAO;AAAA,QAAA;AAAA,MACrE,CACD;AAAA,IAAA,EACH;AAAA,IACJ,CAAC,qBAAqB,QAAQ,iBAAiB,YAAY,eAAe,SAAS;AAAA,EAAA;AAGrF,QAAM,cAAc,MAAM;AACxB,cAAU,EAAE;AAAA,EAAA;AAGd,QAAM,qBAAqB,CAAC,EAAE,QAAQ,EAAE,cAA6C;AACnF,cAAU,KAAK;AAAA,EAAA;AAGjB,QAAM,QAAQ,cAAc;AAAA,IAC1B,IAAI,eAAe,aAAa;AAAA,IAChC,gBAAgB;AAAA,EAAA,CACjB;AAEK,QAAA,0BAA0B,CAAC,SAA6B;AACtD,UAAA,SAAS,QAAQ,KAAK,CAACA,YAAWA,QAAO,QAAQ,KAAK,GAAG;AAC/D,UAAM,gBAAgB,QAAS,QAAQ,eAAe,MAAc,SAAS;AAG7E,QAAI,MAAM,WAAW,UAAU,MAAM,SAAS;AAE5C,YAAM,EAAE,MAAM,GAAG,YAAA,IAAgB,MAAM;AAGvC,UAAI,CAAC,eAAe;AACX,eAAA;AAAA,MACT;AAGO,aAAA,EAAE,MAAM,GAAG;IACpB;AAEA,WAAO,MAAM;AAAA,EAAA;AAIb,SAAA,qBAAC,QAAO,EAAA,cAAY,OAClB,UAAA;AAAA,IAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA,YAAU;AAAA,QACV,OAAO;AAAA,QACP,UAAU;AAAA,QACV,SAAS;AAAA,QACT,aAAa,cAAc;AAAA,UACzB,IAAI;AAAA,UACJ,gBAAgB;AAAA,QAAA,CACjB;AAAA,MAAA;AAAA,IACH;AAAA,IACC,oBAAA,gBAAA,EACE,UAAK,KAAA,IAAI,CAAC,YAAY;AAEnB,aAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UAEC,OAAO,QAAQ;AAAA,UACf,YAAY,QAAQ,MAAM,OAAO,SAAS;AAAA,UAEzC,UAAQ,QAAA,MAAM,IAAI,CAAC,SAAS;AAEzB,mBAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,KAAK;AAAA,gBAEL,IAAI;AAAA,kBACF,UAAU,KAAK;AAAA,kBACf,QAAQ,UAAU;AAAA,oBAChB,GAAG,MAAM,KAAK,UAAU,EAAE;AAAA,oBAC1B,SAAS,wBAAwB,IAAI;AAAA,kBAAA,CACtC;AAAA,gBACH;AAAA,gBACA,OAAM;AAAA,gBAEL,UAAK,KAAA;AAAA,cAAA;AAAA,cAVD,KAAK;AAAA,YAAA;AAAA,UAWZ,CAEH;AAAA,QAAA;AAAA,QArBI,QAAQ;AAAA,MAAA;AAAA,IAwBlB,CAAA,GACH;AAAA,EACF,EAAA,CAAA;AAEJ;ACvJA,MAAM,EAAE,+BAA+B,0BAA8B,IAAA;AAarE,MAAM,4BAA4B,MAAgB;AAC1C,QAAA,EAAE,uBAAuB;AAC/B,QAAM,WAAW;AACjB,QAAM,mBAAmB;AAAA,IACvB;AAAA,IACA,CAACC,WAAUA,OAAM;AAAA,EAAA;AAEb,QAAA,EAAE,iBAAiB;AACnB,QAAA,EAAE,kBAAkB;AAC1B,QAAM,EAAE,yBAAyB,eAAe,IAAI,mBAAmB,cAAc;AACrF,QAAM,0BAA0B;AAAA,IAC9B;AAAA,IACA,CAACA,WAAUA,OAAM;AAAA,EAAA;AAGnB,QAAM,QAAQ,iBAAiB,CAACA,WAAUA,OAAM,iBAAiB,EAAE,GAAG;AAEhE,QAAA,mBAAmB,uBAAuB,QAAW;AAAA;AAAA;AAAA;AAAA;AAAA,IAKzD,2BAA2B;AAAA,EAAA,CAC5B;AAED,YAAU,MAAM;AACd,QAAI,iBAAiB,MAAM;AACzB;AAAA,QACE,cAAc;AAAA,UACZ,IAAI,eAAe,yBAAyB;AAAA,UAC5C,gBAAgB;AAAA,QAAA,CACjB;AAAA,MAAA;AAAA,IAEL;AAAA,KACC,CAAC,eAAe,iBAAiB,MAAM,YAAY,CAAC;AAEvD,YAAU,MAAM;AACd,QAAI,iBAAiB,OAAO;AACP,yBAAA,EAAE,MAAM,UAAU,SAAS,eAAe,iBAAiB,KAAK,GAAG;AAAA,IACxF;AAAA,KACC,CAAC,gBAAgB,iBAAiB,OAAO,kBAAkB,CAAC;AAE/D,QAAM,2BAA2B;AAEjC,YAAU,MAAM;AACd,QAAI,yBAAyB,OAAO;AACf,yBAAA;AAAA,QACjB,MAAM;AAAA,QACN,SAAS,eAAe,yBAAyB,KAAK;AAAA,MAAA,CACvD;AAAA,IACH;AAAA,KACC,CAAC,gBAAgB,yBAAyB,OAAO,kBAAkB,CAAC;AAEvE,QAAM,aAAa,OACjB,YACA,cACA,YACA,8BACG;AASH,UAAM,EAAE,gBAAgB,qBAAqB,YAAY,gBAAA,IACvD,aAAa;AAAA,MAIX,CAAC,KAAK,UAAU;AACd,YAAI,MAAM,IAAI,EAAE,KAAK,KAAK;AACnB,eAAA;AAAA,MACT;AAAA,MACA;AAAA,QACE,gBAAgB,CAAC;AAAA,QACjB,YAAY,CAAC;AAAA,MACf;AAAA,IAAA;AAEJ,UAAM,6BAA6B;AAAA,MACjC;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAEI,UAAA,yBAAyB,cAAc,iBAAiB,aAAa;AAGrE,UAAA,iCAAiC,MAAM,QAAQ;AAAA,MACnD,2BAA2B,IAAI,CAAC,EAAE,kBAAkB,wBAAwB,WAAW,CAAC;AAAA,IAAA;AAG1F,UAAM,gCAAgC,2BAA2B;AAAA,MAC/D,CAAC,GAAG,UAAU,+BAA+B,KAAK,EAAE,SAAS;AAAA,IAAA;AAIzD,UAAA,6BAA6B,MAAM,QAAQ;AAAA,MAC/C,uBAAuB,IAAI,CAAC,EAAE,kBAAkB,wBAAwB,WAAW,CAAC;AAAA,IAAA;AAEtF,UAAM,4BAA4B,uBAAuB;AAAA,MACvD,CAAC,GAAG,UAAU,2BAA2B,KAAK,EAAE,SAAS;AAAA,IAAA;AAE3D,UAAM,EAAE,QAAA,IAAY,iBAAiB,+BAA+B;AAAA,MAClE,SAAS;AAAA,MACT,QAAQ;AAAA,IAAA,CACT;AACD,UAAM,EAAE,QAAA,IAAY,iBAAiB,2BAA2B;AAAA,MAC9D,SAAS;AAAA,MACT,QAAQ;AAAA,IAAA,CACT;AAED;AAAA,MACE,eAAe;AAAA,QACb,+BAA+B;AAAA,QAC/B,2BAA2B;AAAA,QAC3B;AAAA,QACA,oBAAoB;AAAA,QACpB;AAAA,MAAA,CACD;AAAA,IAAA;AAAA,EACH;AAGF,YAAU,MAAM;AACV,QAAA,iBAAiB,QAAQ,yBAAyB,MAAM;AAC1D;AAAA,QACE,iBAAiB,KAAK;AAAA,QACtB,iBAAiB,KAAK;AAAA,QACtB,iBAAiB,KAAK;AAAA,QACtB,yBAAyB;AAAA,MAAA;AAAA,IAE7B;AAAA,KACC,CAAC,iBAAiB,MAAM,yBAAyB,IAAI,CAAC;AAElD,SAAA,EAAE,GAAG;AACd;AAEA,MAAM,gBAAgB,CACpB,OACA,MACA,iBAA4D,CAAA,MACzD;AACI,SAAA,MACJ,OAAO,CAAC,SAAS,KAAK,WAAW,EACjC,IAAI,CAAC,SAAS;AACb,UAAM,6BAA6B;AAAA,MACjC,EAAE,QAAQ,2CAA2C,SAAS,KAAK,IAAI;AAAA,MACvE,EAAE,QAAQ,yCAAyC,SAAS,KAAK,IAAI;AAAA,IAAA;AAEvE,UAAM,yBAAyB;AAAA,MAC7B,EAAE,QAAQ,yCAAyC,SAAS,KAAK,IAAI;AAAA,IAAA;AAEjE,UAAA,cACJ,SAAS,oBAAoB,6BAA6B;AAEtD,UAAA,2BAA2B,eAAe,KAAK,CAAC,EAAE,IAAI,MAAM,QAAQ,KAAK,GAAG;AAElF,QAAI,SAAS;AAEb,QAAI,0BAA0B;AAC5B,YAAM,eAAe;AAAA,QACnB,MAAM;AAAA,QACN,UAAU,yBAAyB,SAAS;AAAA,QAC5C,MAAM,GAAG,yBAAyB,SAAS,aAAa,IAAI,yBAAyB,SAAS,gBAAgB;AAAA,MAAA;AAGhH,eAAS,UAAU,cAAc,EAAE,QAAQ,MAAO,CAAA;AAAA,IACpD;AAEO,WAAA;AAAA,MACL;AAAA,MACA;AAAA,MACA,MAAM,KAAK;AAAA,MACX,OAAO,KAAK,KAAK;AAAA,MACjB,IAAI,oBAAoB,KAAK,SAAS,mBAAmB,mBAAmB,YAAY,IACtF,KAAK,GACP;AAAA,MACA,KAAK,KAAK;AAAA;AAAA,MAEV,MAAM,KAAK;AAAA,MACX,aAAa,KAAK;AAAA,IAAA;AAAA,EACpB,CACD;AACL;AC7MA,MAAM,SAAS,MAAM;AACb,QAAA,mBAAmB,SAAS,+BAA+B;AAEjE,QAAM,EAAE,WAAW,qBAAqB,QAAQ,gBAAA,IAAoB;AACpE,QAAM,mBAAmB,CAAC,GAAG,qBAAqB,GAAG,eAAe,EAAE;AAAA,IAAK,CAAC,GAAG,MAC7E,EAAE,MAAM,cAAc,EAAE,KAAK;AAAA,EAAA;AAGzB,QAAA,EAAE,aAAa;AACf,QAAA,EAAE,kBAAkB;AAC1B,QAAM,eAAe,cAAc,UAAU,CAAC,UAAU,MAAM,YAAY;AACpE,QAAA,kBAAkB,MAAM,OAAO,YAAY;AAEjD,QAAM,UAAU,MAAM;AACpB,QAAI,gBAAgB,SAAS;AAC3B,sBAAgB,QAAQ,gBAAgB;AAAA,IAC1C;AAAA,EACF,GAAG,CAAE,CAAA;AAEL,MAAI,WAAW;AACb,WAEI,qBAAA,UAAA,EAAA,UAAA;AAAA,MAAC,oBAAA,KAAK,OAAL,EACE,UAAc,cAAA;AAAA,QACb,IAAI,eAAe,aAAa;AAAA,QAChC,gBAAgB;AAAA,MACjB,CAAA,GACH;AAAA,MACA,oBAAC,KAAK,SAAL,EAAa;AAAA,IAChB,EAAA,CAAA;AAAA,EAEJ;AAGA,QAAM,2BAA2B,OAAO,OAAO,CAAC,EAAE,YAAA,MAAkB,WAAW;AAG/E,MACE,iBAAiB,WAAW,KAC5B,yBAAyB,SAAS,KAClC,aAAa,wBACb;AACO,WAAA,oBAAC,UAAS,EAAA,IAAG,OAAO,CAAA;AAAA,EAC7B;AAGA,MAAI,yBAAyB,WAAW,KAAK,aAAa,qBAAqB;AACtE,WAAA,oBAAC,UAAS,EAAA,IAAG,oBAAoB,CAAA;AAAA,EAC1C;AAEA,MAAI,CAAC,oBAAoB,iBAAiB,SAAS,GAAG;AAElD,WAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,IAAI;AAAA,UACF,UAAU,iBAAiB,CAAC,EAAE;AAAA,UAC9B,QAAQ,iBAAiB,CAAC,EAAE,UAAU;AAAA,QACxC;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AAEA,SAEI,qBAAA,UAAA,EAAA,UAAA;AAAA,IAAC,oBAAA,KAAK,OAAL,EACE,UAAc,cAAA;AAAA,MACb,IAAI,eAAe,aAAa;AAAA,MAChC,gBAAgB;AAAA,IACjB,CAAA,GACH;AAAA,yBACC,QAAQ,MAAR,EAAa,SAAS,oBAAC,YAAS,GAC/B,UAAA;AAAA,MAAC,oBAAA,WAAA,EAAU,YAAY,oBAAqB,CAAA;AAAA,0BAC3C,QAAO,EAAA;AAAA,IAAA,GACV;AAAA,EACF,EAAA,CAAA;AAEJ;AAMA,SAAS,oBAAoB,EAAE,MAAM,QAAqD;AACxF,MAAI,CAAC,QAAS,QAAQ,OAAO,SAAS,UAAW;AACxC,WAAA;AAAA,EACT;AAOA,QAAM,CAAC,UAAU,IAAI,KAAK,MAAM,GAAG;AAEnC,UAAQ,YAAY;AAAA,IAClB,KAAK,UAAU;AAAA,IACf,KAAK,UAAU;AACb,aAAQ,oBAAA,iBAAA,EAAgB,OAAO,KAAK,MAAO,CAAA;AAAA,IAC7C,KAAK,UAAU;AAAA,IACf,KAAK,UAAU;AACb,aAAQ,oBAAA,sBAAA,EAAqB,gBAAgB,KAAK,eAAgB,CAAA;AAAA,IAEpE,KAAK,UAAU;AACN,aAAA,oBAAC,qBAAqB,EAAA,GAAG,KAAM,CAAA;AAAA,IAExC;AACS,aAAA;AAAA,EACX;AACF;"}
@@ -7,15 +7,14 @@ const reactIntl = require("react-intl");
7
7
  const reactRouterDom = require("react-router-dom");
8
8
  const designSystem = require("@strapi/design-system");
9
9
  const reactDnd = require("react-dnd");
10
- const CardDragPreview = require("./CardDragPreview-DSVYodBX.js");
10
+ const CardDragPreview = require("./CardDragPreview-C0QyJgRA.js");
11
11
  const Icons = require("@strapi/icons");
12
- const styled = require("styled-components");
13
- const index = require("./index-C6AH2hEl.js");
14
- const Relations = require("./Relations-CgWtgnPe.js");
12
+ const styledComponents = require("styled-components");
13
+ const index = require("./index-Dd0nXyJF.js");
14
+ const Relations = require("./Relations-C0uC9J4f.js");
15
15
  const qs = require("qs");
16
16
  const hooks = require("./hooks-BAaaKPS_.js");
17
17
  const useDragAndDrop = require("./useDragAndDrop-J0TUUbR6.js");
18
- const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
19
18
  function _interopNamespace(e) {
20
19
  if (e && e.__esModule)
21
20
  return e;
@@ -35,7 +34,6 @@ function _interopNamespace(e) {
35
34
  return Object.freeze(n);
36
35
  }
37
36
  const React__namespace = /* @__PURE__ */ _interopNamespace(React);
38
- const styled__default = /* @__PURE__ */ _interopDefault(styled);
39
37
  function getStyle(initialOffset, currentOffset, mouseOffset) {
40
38
  if (!initialOffset || !currentOffset || !mouseOffset) {
41
39
  return { display: "none" };
@@ -99,14 +97,14 @@ const ComponentDragPreview = ({ displayedValue }) => {
99
97
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { maxWidth: "15rem", children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { textColor: "neutral700", ellipsis: true, children: displayedValue }) })
100
98
  ] }) }),
101
99
  /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 2, children: [
102
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.IconButton, { "aria-label": "", borderWidth: 0, children: /* @__PURE__ */ jsxRuntime.jsx(Icons.Trash, {}) }),
103
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.IconButton, { "aria-label": "", borderWidth: 0, children: /* @__PURE__ */ jsxRuntime.jsx(Icons.Drag, {}) })
100
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.IconButton, { withTooltip: false, label: "", borderWidth: 0, children: /* @__PURE__ */ jsxRuntime.jsx(Icons.Trash, {}) }),
101
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.IconButton, { withTooltip: false, label: "", borderWidth: 0, children: /* @__PURE__ */ jsxRuntime.jsx(Icons.Drag, {}) })
104
102
  ] })
105
103
  ]
106
104
  }
107
105
  );
108
106
  };
109
- const DropdownIconWrapper = styled__default.default(designSystem.Flex)`
107
+ const DropdownIconWrapper = styledComponents.styled(designSystem.Flex)`
110
108
  border-radius: 50%;
111
109
 
112
110
  svg {
@@ -117,7 +115,7 @@ const DropdownIconWrapper = styled__default.default(designSystem.Flex)`
117
115
  }
118
116
  }
119
117
  `;
120
- const ToggleButton = styled__default.default.button`
118
+ const ToggleButton = styledComponents.styled.button`
121
119
  border: none;
122
120
  background: transparent;
123
121
  display: block;
@@ -141,7 +139,7 @@ const RelationDragPreview = ({ status, displayedValue, width }) => {
141
139
  gap: 4,
142
140
  children: [
143
141
  /* @__PURE__ */ jsxRuntime.jsxs(Relations.FlexWrapper, { gap: 1, children: [
144
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.IconButton, { "aria-label": "", borderWidth: 0, children: /* @__PURE__ */ jsxRuntime.jsx(Icons.Drag, {}) }),
142
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.IconButton, { withTooltip: false, label: "", borderWidth: 0, children: /* @__PURE__ */ jsxRuntime.jsx(Icons.Drag, {}) }),
145
143
  /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { width: "100%", minWidth: 0, justifyContent: "space-between", children: [
146
144
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { minWidth: 0, paddingTop: 1, paddingBottom: 1, paddingRight: 4, children: /* @__PURE__ */ jsxRuntime.jsx(Relations.LinkEllipsis, { href: "", children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { textColor: "primary600", ellipsis: true, children: displayedValue }) }) }),
147
145
  status ? /* @__PURE__ */ jsxRuntime.jsx(index.DocumentStatus, { status }) : null
@@ -152,6 +150,17 @@ const RelationDragPreview = ({ status, displayedValue, width }) => {
152
150
  }
153
151
  ) });
154
152
  };
153
+ const SubNavLinkCustom = styledComponents.styled(designSystem.SubNavLink)`
154
+ div {
155
+ width: inherit;
156
+ span:nth-child(2) {
157
+ white-space: nowrap;
158
+ overflow: hidden;
159
+ text-overflow: ellipsis;
160
+ width: inherit;
161
+ }
162
+ }
163
+ `;
155
164
  const LeftMenu = () => {
156
165
  const [search, setSearch] = React__namespace.useState("");
157
166
  const [{ query }] = strapiAdmin.useQueryParams();
@@ -160,6 +169,7 @@ const LeftMenu = () => {
160
169
  (state) => state["content-manager"].app.collectionTypeLinks
161
170
  );
162
171
  const singleTypeLinks = hooks.useTypedSelector((state) => state["content-manager"].app.singleTypeLinks);
172
+ const { schemas } = index.useContentTypeSchema();
163
173
  const { startsWith } = designSystem.useFilter(locale, {
164
174
  sensitivity: "base"
165
175
  });
@@ -205,9 +215,21 @@ const LeftMenu = () => {
205
215
  };
206
216
  const label = formatMessage({
207
217
  id: index.getTranslation("header.name"),
208
- defaultMessage: "Content"
218
+ defaultMessage: "Content Manager"
209
219
  });
210
- return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.SubNav, { ariaLabel: label, children: [
220
+ const getPluginsParamsForLink = (link) => {
221
+ const schema = schemas.find((schema2) => schema2.uid === link.uid);
222
+ const isI18nEnabled = Boolean(schema?.pluginOptions?.i18n?.localized);
223
+ if (query.plugins && "i18n" in query.plugins) {
224
+ const { i18n, ...restPlugins } = query.plugins;
225
+ if (!isI18nEnabled) {
226
+ return restPlugins;
227
+ }
228
+ return { i18n, ...restPlugins };
229
+ }
230
+ return query.plugins;
231
+ };
232
+ return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.SubNav, { "aria-label": label, children: [
211
233
  /* @__PURE__ */ jsxRuntime.jsx(
212
234
  designSystem.SubNavHeader,
213
235
  {
@@ -230,24 +252,17 @@ const LeftMenu = () => {
230
252
  badgeLabel: section.links.length.toString(),
231
253
  children: section.links.map((link) => {
232
254
  return /* @__PURE__ */ jsxRuntime.jsx(
233
- designSystem.SubNavLink,
255
+ SubNavLinkCustom,
234
256
  {
235
- as: reactRouterDom.NavLink,
257
+ tag: reactRouterDom.NavLink,
236
258
  to: {
237
259
  pathname: link.to,
238
- /**
239
- * We re-add the plugins query to the params available in the menu,
240
- * this means once you've changed the locale in the app, you continue
241
- * to see the same locale when changing content-type.
242
- *
243
- * NOTE: if you go to a content-type that does not have i18n enabled,
244
- * we return the default documents anyway.
245
- */
246
260
  search: qs.stringify({
247
261
  ...qs.parse(link.search ?? ""),
248
- plugins: query.plugins
262
+ plugins: getPluginsParamsForLink(link)
249
263
  })
250
264
  },
265
+ width: "100%",
251
266
  children: link.title
252
267
  },
253
268
  link.uid
@@ -327,13 +342,13 @@ const useContentManagerInitData = () => {
327
342
  collectionTypeSectionLinks.map(({ permissions }) => checkUserHasPermissions(permissions))
328
343
  );
329
344
  const authorizedCollectionTypeLinks = collectionTypeSectionLinks.filter(
330
- (_, index2) => collectionTypeLinksPermissions[index2]
345
+ (_, index2) => collectionTypeLinksPermissions[index2].length > 0
331
346
  );
332
347
  const singleTypeLinksPermissions = await Promise.all(
333
348
  singleTypeSectionLinks.map(({ permissions }) => checkUserHasPermissions(permissions))
334
349
  );
335
350
  const authorizedSingleTypeLinks = singleTypeSectionLinks.filter(
336
- (_, index2) => singleTypeLinksPermissions[index2]
351
+ (_, index2) => singleTypeLinksPermissions[index2].length > 0
337
352
  );
338
353
  const { ctLinks } = runHookWaterfall(MUTATE_COLLECTION_TYPES_LINKS, {
339
354
  ctLinks: authorizedCollectionTypeLinks,
@@ -447,7 +462,7 @@ const Layout = () => {
447
462
  }) }),
448
463
  /* @__PURE__ */ jsxRuntime.jsxs(strapiAdmin.Layouts.Root, { sideNav: /* @__PURE__ */ jsxRuntime.jsx(LeftMenu, {}), children: [
449
464
  /* @__PURE__ */ jsxRuntime.jsx(DragLayer, { renderItem: renderDraglayerItem }),
450
- /* @__PURE__ */ jsxRuntime.jsx(reactRouterDom.Routes, { children: index.routes.map((route) => /* @__PURE__ */ jsxRuntime.jsx(reactRouterDom.Route, { ...route }, route.path)) })
465
+ /* @__PURE__ */ jsxRuntime.jsx(reactRouterDom.Outlet, {})
451
466
  ] })
452
467
  ] });
453
468
  };
@@ -470,4 +485,4 @@ function renderDraglayerItem({ type, item }) {
470
485
  }
471
486
  }
472
487
  exports.Layout = Layout;
473
- //# sourceMappingURL=layout-B_SXLhqf.js.map
488
+ //# sourceMappingURL=layout-CLLtt_5O.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout-CLLtt_5O.js","sources":["../../admin/src/components/DragLayer.tsx","../../admin/src/components/DragPreviews/ComponentDragPreview.tsx","../../admin/src/components/DragPreviews/RelationDragPreview.tsx","../../admin/src/components/LeftMenu.tsx","../../admin/src/hooks/useContentManagerInitData.ts","../../admin/src/layout.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box } from '@strapi/design-system';\nimport { DragLayerMonitor, XYCoord, useDragLayer } from 'react-dnd';\n\nfunction getStyle(\n initialOffset: XYCoord | null,\n currentOffset: XYCoord | null,\n mouseOffset: XYCoord | null\n) {\n if (!initialOffset || !currentOffset || !mouseOffset) {\n return { display: 'none' };\n }\n\n const { x, y } = mouseOffset;\n\n return {\n transform: `translate(${x}px, ${y}px)`,\n };\n}\n\nexport interface DragLayerProps {\n renderItem: (item: {\n /**\n * TODO: it'd be great if we could make this a union where the type infers the item.\n */\n item: any;\n type: ReturnType<DragLayerMonitor['getItemType']>;\n }) => React.ReactNode;\n}\n\nconst DragLayer = ({ renderItem }: DragLayerProps) => {\n const { itemType, isDragging, item, initialOffset, currentOffset, mouseOffset } = useDragLayer(\n (monitor) => ({\n item: monitor.getItem(),\n itemType: monitor.getItemType(),\n initialOffset: monitor.getInitialSourceClientOffset(),\n currentOffset: monitor.getSourceClientOffset(),\n isDragging: monitor.isDragging(),\n mouseOffset: monitor.getClientOffset(),\n })\n );\n\n if (!isDragging) {\n return null;\n }\n\n return (\n <Box\n height=\"100%\"\n left={0}\n position=\"fixed\"\n pointerEvents=\"none\"\n top={0}\n zIndex={100}\n width=\"100%\"\n >\n <Box style={getStyle(initialOffset, currentOffset, mouseOffset)}>\n {renderItem({ type: itemType, item })}\n </Box>\n </Box>\n );\n};\n\nexport { DragLayer };\n","import { Flex, FlexComponent, IconButton, Typography } from '@strapi/design-system';\nimport { CaretDown, Drag, Trash } from '@strapi/icons';\nimport { styled } from 'styled-components';\n\ninterface ComponentDragPreviewProps {\n displayedValue: string;\n}\n\nconst ComponentDragPreview = ({ displayedValue }: ComponentDragPreviewProps) => {\n return (\n <Flex\n background=\"neutral0\"\n borderColor=\"neutral200\"\n justifyContent=\"space-between\"\n gap={3}\n padding={3}\n width=\"30rem\"\n >\n <ToggleButton type=\"button\">\n <Flex gap={6}>\n <DropdownIconWrapper\n alignItems=\"center\"\n justifyContent=\"center\"\n background=\"neutral200\"\n height=\"3.2rem\"\n width=\"3.2rem\"\n >\n <CaretDown />\n </DropdownIconWrapper>\n\n <Flex maxWidth=\"15rem\">\n <Typography textColor=\"neutral700\" ellipsis>\n {displayedValue}\n </Typography>\n </Flex>\n </Flex>\n </ToggleButton>\n\n <Flex gap={2}>\n <IconButton withTooltip={false} label=\"\" borderWidth={0}>\n <Trash />\n </IconButton>\n\n <IconButton withTooltip={false} label=\"\" borderWidth={0}>\n <Drag />\n </IconButton>\n </Flex>\n </Flex>\n );\n};\n\nconst DropdownIconWrapper = styled<FlexComponent>(Flex)`\n border-radius: 50%;\n\n svg {\n height: 0.6rem;\n width: 1.1rem;\n > path {\n fill: ${({ theme }) => theme.colors.neutral600};\n }\n }\n`;\n\n// TODO: we shouldn't have to reset a whole button\nconst ToggleButton = styled.button`\n border: none;\n background: transparent;\n display: block;\n width: 100%;\n text-align: unset;\n padding: 0;\n`;\n\nexport { ComponentDragPreview };\nexport type { ComponentDragPreviewProps };\n","import { Box, Flex, IconButton, Typography } from '@strapi/design-system';\nimport { Cross, Drag } from '@strapi/icons';\n\nimport { DocumentStatus } from '../../pages/EditView/components/DocumentStatus';\nimport {\n DisconnectButton,\n LinkEllipsis,\n FlexWrapper,\n} from '../../pages/EditView/components/FormInputs/Relations';\n\nimport type { Data } from '@strapi/types';\n\ninterface RelationDragPreviewProps {\n status?: string;\n displayedValue: string;\n id: Data.ID;\n index: number;\n width: number;\n}\n\nconst RelationDragPreview = ({ status, displayedValue, width }: RelationDragPreviewProps) => {\n return (\n <Box style={{ width }}>\n <Flex\n paddingTop={2}\n paddingBottom={2}\n paddingLeft={2}\n paddingRight={4}\n hasRadius\n borderWidth={1}\n background=\"neutral0\"\n borderColor=\"neutral200\"\n justifyContent=\"space-between\"\n gap={4}\n >\n <FlexWrapper gap={1}>\n <IconButton withTooltip={false} label=\"\" borderWidth={0}>\n <Drag />\n </IconButton>\n <Flex width=\"100%\" minWidth={0} justifyContent=\"space-between\">\n <Box minWidth={0} paddingTop={1} paddingBottom={1} paddingRight={4}>\n <LinkEllipsis href=\"\">\n <Typography textColor=\"primary600\" ellipsis>\n {displayedValue}\n </Typography>\n </LinkEllipsis>\n </Box>\n {status ? <DocumentStatus status={status} /> : null}\n </Flex>\n </FlexWrapper>\n <DisconnectButton type=\"button\">\n <Cross width=\"12px\" />\n </DisconnectButton>\n </Flex>\n </Box>\n );\n};\n\nexport { RelationDragPreview };\nexport type { RelationDragPreviewProps };\n","import * as React from 'react';\n\nimport { useQueryParams } from '@strapi/admin/strapi-admin';\nimport {\n useCollator,\n useFilter,\n SubNav,\n SubNavHeader,\n SubNavLink,\n SubNavSection,\n SubNavSections,\n} from '@strapi/design-system';\nimport { parse, stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { NavLink } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { useContentTypeSchema } from '../hooks/useContentTypeSchema';\nimport { useTypedSelector } from '../modules/hooks';\nimport { getTranslation } from '../utils/translations';\n\nimport type { ContentManagerLink } from '../hooks/useContentManagerInitData';\n\nconst SubNavLinkCustom = styled(SubNavLink)`\n div {\n width: inherit;\n span:nth-child(2) {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n width: inherit;\n }\n }\n`;\n\nconst LeftMenu = () => {\n const [search, setSearch] = React.useState('');\n const [{ query }] = useQueryParams<{ plugins?: object }>();\n const { formatMessage, locale } = useIntl();\n\n const collectionTypeLinks = useTypedSelector(\n (state) => state['content-manager'].app.collectionTypeLinks\n );\n\n const singleTypeLinks = useTypedSelector((state) => state['content-manager'].app.singleTypeLinks);\n const { schemas } = useContentTypeSchema();\n\n const { startsWith } = useFilter(locale, {\n sensitivity: 'base',\n });\n\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const menu = React.useMemo(\n () =>\n [\n {\n id: 'collectionTypes',\n title: formatMessage({\n id: getTranslation('components.LeftMenu.collection-types'),\n defaultMessage: 'Collection Types',\n }),\n searchable: true,\n links: collectionTypeLinks,\n },\n {\n id: 'singleTypes',\n title: formatMessage({\n id: getTranslation('components.LeftMenu.single-types'),\n defaultMessage: 'Single Types',\n }),\n searchable: true,\n links: singleTypeLinks,\n },\n ].map((section) => ({\n ...section,\n links: section.links\n /**\n * Filter by the search value\n */\n .filter((link) => startsWith(link.title, search))\n /**\n * Sort correctly using the language\n */\n .sort((a, b) => formatter.compare(a.title, b.title))\n /**\n * Apply the formated strings to the links from react-intl\n */\n .map((link) => {\n return {\n ...link,\n title: formatMessage({ id: link.title, defaultMessage: link.title }),\n };\n }),\n })),\n [collectionTypeLinks, search, singleTypeLinks, startsWith, formatMessage, formatter]\n );\n\n const handleClear = () => {\n setSearch('');\n };\n\n const handleChangeSearch = ({ target: { value } }: { target: { value: string } }) => {\n setSearch(value);\n };\n\n const label = formatMessage({\n id: getTranslation('header.name'),\n defaultMessage: 'Content Manager',\n });\n\n const getPluginsParamsForLink = (link: ContentManagerLink) => {\n const schema = schemas.find((schema) => schema.uid === link.uid);\n const isI18nEnabled = Boolean((schema?.pluginOptions?.i18n as any)?.localized);\n\n // The search params have the i18n plugin\n if (query.plugins && 'i18n' in query.plugins) {\n // Prepare removal of i18n from the plugins search params\n const { i18n, ...restPlugins } = query.plugins;\n\n // i18n is not enabled, remove it from the plugins search params\n if (!isI18nEnabled) {\n return restPlugins;\n }\n\n // i18n is enabled, put the plugins search params back together\n return { i18n, ...restPlugins };\n }\n\n return query.plugins;\n };\n\n return (\n <SubNav aria-label={label}>\n <SubNavHeader\n label={label}\n searchable\n value={search}\n onChange={handleChangeSearch}\n onClear={handleClear}\n searchLabel={formatMessage({\n id: 'content-manager.components.LeftMenu.Search.label',\n defaultMessage: 'Search for a content type',\n })}\n />\n <SubNavSections>\n {menu.map((section) => {\n return (\n <SubNavSection\n key={section.id}\n label={section.title}\n badgeLabel={section.links.length.toString()}\n >\n {section.links.map((link) => {\n return (\n <SubNavLinkCustom\n tag={NavLink}\n key={link.uid}\n to={{\n pathname: link.to,\n search: stringify({\n ...parse(link.search ?? ''),\n plugins: getPluginsParamsForLink(link),\n }),\n }}\n width=\"100%\"\n >\n {link.title}\n </SubNavLinkCustom>\n );\n })}\n </SubNavSection>\n );\n })}\n </SubNavSections>\n </SubNav>\n );\n};\n\nexport { LeftMenu };\n","import { useEffect } from 'react';\n\nimport {\n useAuth,\n type Permission,\n useNotification,\n useStrapiApp,\n useAPIErrorHandler,\n} from '@strapi/admin/strapi-admin';\nimport { useNotifyAT } from '@strapi/design-system';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\n\nimport { COLLECTION_TYPES, SINGLE_TYPES } from '../constants/collections';\nimport { HOOKS } from '../constants/hooks';\nimport { AppState, setInitialData } from '../modules/app';\nimport { useTypedDispatch, useTypedSelector } from '../modules/hooks';\nimport { useGetAllContentTypeSettingsQuery } from '../services/contentTypes';\nimport { useGetInitialDataQuery } from '../services/init';\nimport { getTranslation } from '../utils/translations';\n\nimport type { Component } from '../../../shared/contracts/components';\nimport type {\n ContentType,\n FindContentTypesSettings,\n} from '../../../shared/contracts/content-types';\nimport type { GetInitData } from '../../../shared/contracts/init';\n\nconst { MUTATE_COLLECTION_TYPES_LINKS, MUTATE_SINGLE_TYPES_LINKS } = HOOKS;\n\ninterface ContentManagerLink {\n permissions: Permission[];\n search: string | null;\n kind: string;\n title: string;\n to: string;\n uid: string;\n name: string;\n isDisplayed: boolean;\n}\n\nconst useContentManagerInitData = (): AppState => {\n const { toggleNotification } = useNotification();\n const dispatch = useTypedDispatch();\n const runHookWaterfall = useStrapiApp(\n 'useContentManagerInitData',\n (state) => state.runHookWaterfall\n );\n const { notifyStatus } = useNotifyAT();\n const { formatMessage } = useIntl();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler(getTranslation);\n const checkUserHasPermissions = useAuth(\n 'useContentManagerInitData',\n (state) => state.checkUserHasPermissions\n );\n\n const state = useTypedSelector((state) => state['content-manager'].app);\n\n const initialDataQuery = useGetInitialDataQuery(undefined, {\n /**\n * TODO: remove this when the CTB has been refactored to use redux-toolkit-query\n * and it can invalidate the cache on mutation\n */\n refetchOnMountOrArgChange: true,\n });\n\n useEffect(() => {\n if (initialDataQuery.data) {\n notifyStatus(\n formatMessage({\n id: getTranslation('App.schemas.data-loaded'),\n defaultMessage: 'The schemas have been successfully loaded.',\n })\n );\n }\n }, [formatMessage, initialDataQuery.data, notifyStatus]);\n\n useEffect(() => {\n if (initialDataQuery.error) {\n toggleNotification({ type: 'danger', message: formatAPIError(initialDataQuery.error) });\n }\n }, [formatAPIError, initialDataQuery.error, toggleNotification]);\n\n const contentTypeSettingsQuery = useGetAllContentTypeSettingsQuery();\n\n useEffect(() => {\n if (contentTypeSettingsQuery.error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(contentTypeSettingsQuery.error),\n });\n }\n }, [formatAPIError, contentTypeSettingsQuery.error, toggleNotification]);\n\n const formatData = async (\n components: Component[],\n contentTypes: ContentType[],\n fieldSizes: GetInitData.Response['data']['fieldSizes'],\n contentTypeConfigurations: FindContentTypesSettings.Response['data']\n ) => {\n /**\n * We group these by the two types we support. We do with an object because we can use default\n * values of arrays to make sure we always have an array to manipulate further on if, for example,\n * a user has not made any single types.\n *\n * This means we have to manually add new content types to this hook if we add a new type – but\n * the safety is worth it.\n */\n const { collectionType: collectionTypeLinks, singleType: singleTypeLinks } =\n contentTypes.reduce<{\n collectionType: ContentType[];\n singleType: ContentType[];\n }>(\n (acc, model) => {\n acc[model.kind].push(model);\n return acc;\n },\n {\n collectionType: [],\n singleType: [],\n }\n );\n const collectionTypeSectionLinks = generateLinks(\n collectionTypeLinks,\n 'collectionTypes',\n contentTypeConfigurations\n );\n const singleTypeSectionLinks = generateLinks(singleTypeLinks, 'singleTypes');\n\n // Collection Types verifications\n const collectionTypeLinksPermissions = await Promise.all(\n collectionTypeSectionLinks.map(({ permissions }) => checkUserHasPermissions(permissions))\n );\n\n const authorizedCollectionTypeLinks = collectionTypeSectionLinks.filter(\n (_, index) => collectionTypeLinksPermissions[index].length > 0\n );\n\n // Single Types verifications\n const singleTypeLinksPermissions = await Promise.all(\n singleTypeSectionLinks.map(({ permissions }) => checkUserHasPermissions(permissions))\n );\n const authorizedSingleTypeLinks = singleTypeSectionLinks.filter(\n (_, index) => singleTypeLinksPermissions[index].length > 0\n );\n const { ctLinks } = runHookWaterfall(MUTATE_COLLECTION_TYPES_LINKS, {\n ctLinks: authorizedCollectionTypeLinks,\n models: contentTypes,\n });\n const { stLinks } = runHookWaterfall(MUTATE_SINGLE_TYPES_LINKS, {\n stLinks: authorizedSingleTypeLinks,\n models: contentTypes,\n });\n\n dispatch(\n setInitialData({\n authorizedCollectionTypeLinks: ctLinks,\n authorizedSingleTypeLinks: stLinks,\n components,\n contentTypeSchemas: contentTypes,\n fieldSizes,\n })\n );\n };\n\n useEffect(() => {\n if (initialDataQuery.data && contentTypeSettingsQuery.data) {\n formatData(\n initialDataQuery.data.components,\n initialDataQuery.data.contentTypes,\n initialDataQuery.data.fieldSizes,\n contentTypeSettingsQuery.data\n );\n }\n }, [initialDataQuery.data, contentTypeSettingsQuery.data]);\n\n return { ...state };\n};\n\nconst generateLinks = (\n links: ContentType[],\n type: 'collectionTypes' | 'singleTypes',\n configurations: FindContentTypesSettings.Response['data'] = []\n) => {\n return links\n .filter((link) => link.isDisplayed)\n .map((link) => {\n const collectionTypesPermissions = [\n { action: 'plugin::content-manager.explorer.create', subject: link.uid },\n { action: 'plugin::content-manager.explorer.read', subject: link.uid },\n ];\n const singleTypesPermissions = [\n { action: 'plugin::content-manager.explorer.read', subject: link.uid },\n ];\n const permissions =\n type === 'collectionTypes' ? collectionTypesPermissions : singleTypesPermissions;\n\n const currentContentTypeConfig = configurations.find(({ uid }) => uid === link.uid);\n\n let search = null;\n\n if (currentContentTypeConfig) {\n const searchParams = {\n page: 1,\n pageSize: currentContentTypeConfig.settings.pageSize,\n sort: `${currentContentTypeConfig.settings.defaultSortBy}:${currentContentTypeConfig.settings.defaultSortOrder}`,\n };\n\n search = stringify(searchParams, { encode: false });\n }\n\n return {\n permissions,\n search,\n kind: link.kind,\n title: link.info.displayName,\n to: `/content-manager/${link.kind === 'collectionType' ? COLLECTION_TYPES : SINGLE_TYPES}/${\n link.uid\n }`,\n uid: link.uid,\n // Used for the list item key in the helper plugin\n name: link.uid,\n isDisplayed: link.isDisplayed,\n } satisfies ContentManagerLink;\n });\n};\n\nexport { useContentManagerInitData };\nexport type { ContentManagerLink };\n","/* eslint-disable check-file/filename-naming-convention */\nimport * as React from 'react';\n\nimport { Page, useGuidedTour, Layouts } from '@strapi/admin/strapi-admin';\nimport { useIntl } from 'react-intl';\nimport { Navigate, Outlet, useLocation, useMatch } from 'react-router-dom';\n\nimport { DragLayer, DragLayerProps } from './components/DragLayer';\nimport { CardDragPreview } from './components/DragPreviews/CardDragPreview';\nimport { ComponentDragPreview } from './components/DragPreviews/ComponentDragPreview';\nimport { RelationDragPreview } from './components/DragPreviews/RelationDragPreview';\nimport { LeftMenu } from './components/LeftMenu';\nimport { ItemTypes } from './constants/dragAndDrop';\nimport { useContentManagerInitData } from './hooks/useContentManagerInitData';\nimport { getTranslation } from './utils/translations';\n\n/* -------------------------------------------------------------------------------------------------\n * Layout\n * -----------------------------------------------------------------------------------------------*/\n\nconst Layout = () => {\n const contentTypeMatch = useMatch('/content-manager/:kind/:uid/*');\n\n const { isLoading, collectionTypeLinks, models, singleTypeLinks } = useContentManagerInitData();\n const authorisedModels = [...collectionTypeLinks, ...singleTypeLinks].sort((a, b) =>\n a.title.localeCompare(b.title)\n );\n\n const { pathname } = useLocation();\n const { formatMessage } = useIntl();\n const startSection = useGuidedTour('Layout', (state) => state.startSection);\n const startSectionRef = React.useRef(startSection);\n\n React.useEffect(() => {\n if (startSectionRef.current) {\n startSectionRef.current('contentManager');\n }\n }, []);\n\n if (isLoading) {\n return (\n <>\n <Page.Title>\n {formatMessage({\n id: getTranslation('plugin.name'),\n defaultMessage: 'Content Manager',\n })}\n </Page.Title>\n <Page.Loading />\n </>\n );\n }\n\n // Array of models that are displayed in the content manager\n const supportedModelsToDisplay = models.filter(({ isDisplayed }) => isDisplayed);\n\n // Redirect the user to the 403 page\n if (\n authorisedModels.length === 0 &&\n supportedModelsToDisplay.length > 0 &&\n pathname !== '/content-manager/403'\n ) {\n return <Navigate to=\"/403\" />;\n }\n\n // Redirect the user to the create content type page\n if (supportedModelsToDisplay.length === 0 && pathname !== '/no-content-types') {\n return <Navigate to=\"/no-content-types\" />;\n }\n\n if (!contentTypeMatch && authorisedModels.length > 0) {\n return (\n <Navigate\n to={{\n pathname: authorisedModels[0].to,\n search: authorisedModels[0].search ?? '',\n }}\n />\n );\n }\n\n return (\n <>\n <Page.Title>\n {formatMessage({\n id: getTranslation('plugin.name'),\n defaultMessage: 'Content Manager',\n })}\n </Page.Title>\n <Layouts.Root sideNav={<LeftMenu />}>\n <DragLayer renderItem={renderDraglayerItem} />\n <Outlet />\n </Layouts.Root>\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * renderDraglayerItem\n * -----------------------------------------------------------------------------------------------*/\n\nfunction renderDraglayerItem({ type, item }: Parameters<DragLayerProps['renderItem']>[0]) {\n if (!type || (type && typeof type !== 'string')) {\n return null;\n }\n\n /**\n * Because a user may have multiple relations / dynamic zones / repeable fields in the same content type,\n * we append the fieldName for the item type to make them unique, however, we then want to extract that\n * first type to apply the correct preview.\n */\n const [actualType] = type.split('_');\n\n switch (actualType) {\n case ItemTypes.EDIT_FIELD:\n case ItemTypes.FIELD:\n return <CardDragPreview label={item.label} />;\n case ItemTypes.COMPONENT:\n case ItemTypes.DYNAMIC_ZONE:\n return <ComponentDragPreview displayedValue={item.displayedValue} />;\n\n case ItemTypes.RELATION:\n return <RelationDragPreview {...item} />;\n\n default:\n return null;\n }\n}\n\nexport { Layout };\n"],"names":["useDragLayer","jsx","Box","jsxs","Flex","CaretDown","Typography","IconButton","Trash","Drag","styled","FlexWrapper","LinkEllipsis","DocumentStatus","DisconnectButton","Cross","SubNavLink","React","useQueryParams","useIntl","useTypedSelector","useContentTypeSchema","useFilter","useCollator","getTranslation","schema","SubNav","SubNavHeader","SubNavSections","SubNavSection","NavLink","stringify","parse","HOOKS","useNotification","useTypedDispatch","useStrapiApp","state","useNotifyAT","useAPIErrorHandler","useAuth","useGetInitialDataQuery","useEffect","useGetAllContentTypeSettingsQuery","index","setInitialData","COLLECTION_TYPES","SINGLE_TYPES","useMatch","useLocation","useGuidedTour","Fragment","Page","Navigate","Layouts","Outlet","ItemTypes","CardDragPreview"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { generateNKeysBetween } from "fractional-indexing";
2
- import { d as contentManagerApi } from "./index-CwRRo1V9.mjs";
2
+ import { e as contentManagerApi } from "./index-DrNe6ctw.mjs";
3
3
  const relationsApi = contentManagerApi.injectEndpoints({
4
4
  endpoints: (build) => ({
5
5
  getRelations: build.query({
@@ -132,4 +132,4 @@ export {
132
132
  getRelationLabel as g,
133
133
  useGetRelationsQuery as u
134
134
  };
135
- //# sourceMappingURL=relations-CuvIgCqI.mjs.map
135
+ //# sourceMappingURL=relations-B0hlsUU_.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"relations-CuvIgCqI.mjs","sources":["../../admin/src/services/relations.ts","../../admin/src/utils/relations.ts"],"sourcesContent":["import { generateNKeysBetween } from 'fractional-indexing';\n\nimport {\n RelationResult as RelResult,\n FindAvailable,\n FindExisting,\n} from '../../../shared/contracts/relations';\n\nimport { contentManagerApi } from './api';\n\nimport type { Modules } from '@strapi/types';\nimport type { errors } from '@strapi/utils';\n\ninterface RelationResult extends RelResult {\n __temp_key__: string;\n}\n\ntype GetRelationsResponse =\n | {\n results: Array<RelationResult>;\n pagination: {\n page: NonNullable<Modules.EntityService.Params.Pagination.PageNotation['page']>;\n pageSize: NonNullable<Modules.EntityService.Params.Pagination.PageNotation['pageSize']>;\n pageCount: number;\n total: number;\n } | null;\n error?: never;\n }\n | {\n results?: never;\n pagination?: never;\n error: errors.ApplicationError | errors.YupValidationError;\n };\n\nconst relationsApi = contentManagerApi.injectEndpoints({\n endpoints: (build) => ({\n getRelations: build.query<\n GetRelationsResponse,\n FindExisting.Params & {\n params?: FindExisting.Request['query'];\n }\n >({\n query: ({ model, id, targetField, params }) => {\n return {\n url: `/content-manager/relations/${model}/${id}/${targetField}`,\n method: 'GET',\n config: {\n params,\n },\n };\n },\n serializeQueryArgs: (args) => {\n const { endpointName, queryArgs } = args;\n return {\n endpointName,\n model: queryArgs.model,\n id: queryArgs.id,\n targetField: queryArgs.targetField,\n locale: queryArgs.params?.locale,\n status: queryArgs.params?.status,\n };\n },\n merge: (currentCache, newItems) => {\n if (currentCache.pagination && newItems.pagination) {\n if (currentCache.pagination.page < newItems.pagination.page) {\n /**\n * Relations will always have unique IDs, so we can therefore assume\n * that we only need to push the new items to the cache.\n */\n const existingIds = currentCache.results.map((item) => item.documentId);\n const uniqueNewItems = newItems.results.filter(\n (item) => !existingIds.includes(item.documentId)\n );\n currentCache.results.push(...prepareTempKeys(uniqueNewItems, currentCache.results));\n currentCache.pagination = newItems.pagination;\n } else if (newItems.pagination.page === 1) {\n /**\n * We're resetting the relations\n */\n currentCache.results = prepareTempKeys(newItems.results);\n currentCache.pagination = newItems.pagination;\n }\n }\n },\n forceRefetch({ currentArg, previousArg }) {\n if (!currentArg?.params && !previousArg?.params) {\n return false;\n }\n\n return (\n currentArg?.params?.page !== previousArg?.params?.page ||\n currentArg?.params?.pageSize !== previousArg?.params?.pageSize\n );\n },\n transformResponse: (response: FindExisting.Response) => {\n if ('results' in response && response.results) {\n return {\n ...response,\n results: prepareTempKeys(response.results.toReversed()),\n };\n } else {\n return response;\n }\n },\n providesTags: ['Relations'],\n }),\n searchRelations: build.query<\n FindAvailable.Response,\n FindAvailable.Params & {\n params?: FindAvailable.Request['query'];\n }\n >({\n query: ({ model, targetField, params }) => {\n return {\n url: `/content-manager/relations/${model}/${targetField}`,\n method: 'GET',\n config: {\n params,\n },\n };\n },\n serializeQueryArgs: (args) => {\n const { endpointName, queryArgs } = args;\n return {\n endpointName,\n model: queryArgs.model,\n targetField: queryArgs.targetField,\n _q: queryArgs.params?._q,\n idsToOmit: queryArgs.params?.idsToOmit,\n idsToInclude: queryArgs.params?.idsToInclude,\n };\n },\n merge: (currentCache, newItems) => {\n if (currentCache.pagination && newItems.pagination) {\n if (currentCache.pagination.page < newItems.pagination.page) {\n /**\n * Relations will always have unique IDs, so we can therefore assume\n * that we only need to push the new items to the cache.\n */\n const existingIds = currentCache.results.map((item) => item.documentId);\n const uniqueNewItems = newItems.results.filter(\n (item) => !existingIds.includes(item.documentId)\n );\n currentCache.results.push(...uniqueNewItems);\n currentCache.pagination = newItems.pagination;\n } else if (newItems.pagination.page === 1) {\n /**\n * We're resetting the relations\n */\n currentCache.results = newItems.results;\n currentCache.pagination = newItems.pagination;\n }\n }\n },\n forceRefetch({ currentArg, previousArg }) {\n if (!currentArg?.params && !previousArg?.params) {\n return false;\n }\n\n return (\n currentArg?.params?.page !== previousArg?.params?.page ||\n currentArg?.params?.pageSize !== previousArg?.params?.pageSize\n );\n },\n transformResponse: (response: FindAvailable.Response) => {\n if (response.results) {\n return {\n ...response,\n results: response.results,\n };\n } else {\n return response;\n }\n },\n }),\n }),\n});\n\n/**\n * @internal\n * @description Adds a `__temp_key__` to each relation item. This gives us\n * a stable identifier regardless of it's ids etc. that we can then use for drag and drop.\n */\nconst prepareTempKeys = (relations: RelResult[], existingRelations: RelationResult[] = []) => {\n const [firstItem] = existingRelations.slice(0);\n\n const keys = generateNKeysBetween(null, firstItem?.__temp_key__ ?? null, relations.length);\n\n return relations.map((datum, index) => ({\n ...datum,\n __temp_key__: keys[index],\n }));\n};\n\nconst { useGetRelationsQuery, useLazySearchRelationsQuery } = relationsApi;\n\nexport { useGetRelationsQuery, useLazySearchRelationsQuery };\nexport type { RelationResult };\n","import type { MainField } from './attributes';\nimport type { RelationResult } from '../../../shared/contracts/relations';\n\n/**\n * @internal\n * @description Get the label of a relation, the contract has [key: string]: unknown,\n * so we need to check if the mainFieldKey is defined and if the relation has a value\n * under that property. If it does, we then verify it's type of string and return it.\n *\n * We fallback to the documentId.\n */\nconst getRelationLabel = (relation: RelationResult, mainField?: MainField): string => {\n const label = mainField && relation[mainField.name] ? relation[mainField.name] : null;\n\n if (typeof label === 'string') {\n return label;\n }\n\n return relation.documentId;\n};\n\nexport { getRelationLabel };\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"relations-B0hlsUU_.mjs","sources":["../../admin/src/services/relations.ts","../../admin/src/utils/relations.ts"],"sourcesContent":["import { generateNKeysBetween } from 'fractional-indexing';\n\nimport {\n RelationResult as RelResult,\n FindAvailable,\n FindExisting,\n} from '../../../shared/contracts/relations';\n\nimport { contentManagerApi } from './api';\n\nimport type { Modules } from '@strapi/types';\nimport type { errors } from '@strapi/utils';\n\ninterface RelationResult extends RelResult {\n __temp_key__: string;\n}\n\ntype GetRelationsResponse =\n | {\n results: Array<RelationResult>;\n pagination: {\n page: NonNullable<Modules.EntityService.Params.Pagination.PageNotation['page']>;\n pageSize: NonNullable<Modules.EntityService.Params.Pagination.PageNotation['pageSize']>;\n pageCount: number;\n total: number;\n } | null;\n error?: never;\n }\n | {\n results?: never;\n pagination?: never;\n error: errors.ApplicationError | errors.YupValidationError;\n };\n\nconst relationsApi = contentManagerApi.injectEndpoints({\n endpoints: (build) => ({\n getRelations: build.query<\n GetRelationsResponse,\n FindExisting.Params & {\n params?: FindExisting.Request['query'];\n }\n >({\n query: ({ model, id, targetField, params }) => {\n return {\n url: `/content-manager/relations/${model}/${id}/${targetField}`,\n method: 'GET',\n config: {\n params,\n },\n };\n },\n serializeQueryArgs: (args) => {\n const { endpointName, queryArgs } = args;\n return {\n endpointName,\n model: queryArgs.model,\n id: queryArgs.id,\n targetField: queryArgs.targetField,\n locale: queryArgs.params?.locale,\n status: queryArgs.params?.status,\n };\n },\n merge: (currentCache, newItems) => {\n if (currentCache.pagination && newItems.pagination) {\n if (currentCache.pagination.page < newItems.pagination.page) {\n /**\n * Relations will always have unique IDs, so we can therefore assume\n * that we only need to push the new items to the cache.\n */\n const existingIds = currentCache.results.map((item) => item.documentId);\n const uniqueNewItems = newItems.results.filter(\n (item) => !existingIds.includes(item.documentId)\n );\n currentCache.results.push(...prepareTempKeys(uniqueNewItems, currentCache.results));\n currentCache.pagination = newItems.pagination;\n } else if (newItems.pagination.page === 1) {\n /**\n * We're resetting the relations\n */\n currentCache.results = prepareTempKeys(newItems.results);\n currentCache.pagination = newItems.pagination;\n }\n }\n },\n forceRefetch({ currentArg, previousArg }) {\n if (!currentArg?.params && !previousArg?.params) {\n return false;\n }\n\n return (\n currentArg?.params?.page !== previousArg?.params?.page ||\n currentArg?.params?.pageSize !== previousArg?.params?.pageSize\n );\n },\n transformResponse: (response: FindExisting.Response) => {\n if ('results' in response && response.results) {\n return {\n ...response,\n results: prepareTempKeys(response.results.toReversed()),\n };\n } else {\n return response;\n }\n },\n providesTags: ['Relations'],\n }),\n searchRelations: build.query<\n FindAvailable.Response,\n FindAvailable.Params & {\n params?: FindAvailable.Request['query'];\n }\n >({\n query: ({ model, targetField, params }) => {\n return {\n url: `/content-manager/relations/${model}/${targetField}`,\n method: 'GET',\n config: {\n params,\n },\n };\n },\n serializeQueryArgs: (args) => {\n const { endpointName, queryArgs } = args;\n return {\n endpointName,\n model: queryArgs.model,\n targetField: queryArgs.targetField,\n _q: queryArgs.params?._q,\n idsToOmit: queryArgs.params?.idsToOmit,\n idsToInclude: queryArgs.params?.idsToInclude,\n };\n },\n merge: (currentCache, newItems) => {\n if (currentCache.pagination && newItems.pagination) {\n if (currentCache.pagination.page < newItems.pagination.page) {\n /**\n * Relations will always have unique IDs, so we can therefore assume\n * that we only need to push the new items to the cache.\n */\n const existingIds = currentCache.results.map((item) => item.documentId);\n const uniqueNewItems = newItems.results.filter(\n (item) => !existingIds.includes(item.documentId)\n );\n currentCache.results.push(...uniqueNewItems);\n currentCache.pagination = newItems.pagination;\n } else if (newItems.pagination.page === 1) {\n /**\n * We're resetting the relations\n */\n currentCache.results = newItems.results;\n currentCache.pagination = newItems.pagination;\n }\n }\n },\n forceRefetch({ currentArg, previousArg }) {\n if (!currentArg?.params && !previousArg?.params) {\n return false;\n }\n\n return (\n currentArg?.params?.page !== previousArg?.params?.page ||\n currentArg?.params?.pageSize !== previousArg?.params?.pageSize\n );\n },\n transformResponse: (response: FindAvailable.Response) => {\n if (response.results) {\n return {\n ...response,\n results: response.results,\n };\n } else {\n return response;\n }\n },\n }),\n }),\n});\n\n/**\n * @internal\n * @description Adds a `__temp_key__` to each relation item. This gives us\n * a stable identifier regardless of it's ids etc. that we can then use for drag and drop.\n */\nconst prepareTempKeys = (relations: RelResult[], existingRelations: RelationResult[] = []) => {\n const [firstItem] = existingRelations.slice(0);\n\n const keys = generateNKeysBetween(null, firstItem?.__temp_key__ ?? null, relations.length);\n\n return relations.map((datum, index) => ({\n ...datum,\n __temp_key__: keys[index],\n }));\n};\n\nconst { useGetRelationsQuery, useLazySearchRelationsQuery } = relationsApi;\n\nexport { useGetRelationsQuery, useLazySearchRelationsQuery };\nexport type { RelationResult };\n","import type { MainField } from './attributes';\nimport type { RelationResult } from '../../../shared/contracts/relations';\n\n/**\n * @internal\n * @description Get the label of a relation, the contract has [key: string]: unknown,\n * so we need to check if the mainFieldKey is defined and if the relation has a value\n * under that property. If it does, we then verify it's type of string and return it.\n *\n * We fallback to the documentId.\n */\nconst getRelationLabel = (relation: RelationResult, mainField?: MainField): string => {\n const label = mainField && relation[mainField.name] ? relation[mainField.name] : null;\n\n if (typeof label === 'string') {\n return label;\n }\n\n return relation.documentId;\n};\n\nexport { getRelationLabel };\n"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  const fractionalIndexing = require("fractional-indexing");
3
- const index = require("./index-C6AH2hEl.js");
3
+ const index = require("./index-Dd0nXyJF.js");
4
4
  const relationsApi = index.contentManagerApi.injectEndpoints({
5
5
  endpoints: (build) => ({
6
6
  getRelations: build.query({
@@ -131,4 +131,4 @@ const getRelationLabel = (relation, mainField) => {
131
131
  exports.getRelationLabel = getRelationLabel;
132
132
  exports.useGetRelationsQuery = useGetRelationsQuery;
133
133
  exports.useLazySearchRelationsQuery = useLazySearchRelationsQuery;
134
- //# sourceMappingURL=relations-iBMa_OFG.js.map
134
+ //# sourceMappingURL=relations-bRxcNv1q.js.map