@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
@@ -9,13 +9,13 @@ const isEqual = require("lodash/isEqual");
9
9
  const qs = require("qs");
10
10
  const reactIntl = require("react-intl");
11
11
  const reactRouterDom = require("react-router-dom");
12
- const styled = require("styled-components");
13
- const index = require("./index-C6AH2hEl.js");
12
+ const styledComponents = require("styled-components");
13
+ const index = require("./index-Dd0nXyJF.js");
14
+ const usePrev = require("./usePrev-B9w_-eYc.js");
14
15
  const isEmpty = require("lodash/isEmpty");
15
16
  const parseISO = require("date-fns/parseISO");
16
17
  const toString = require("lodash/toString");
17
- const urls = require("./urls-DzZya_gm.js");
18
- const relations = require("./relations-iBMa_OFG.js");
18
+ const relations = require("./relations-bRxcNv1q.js");
19
19
  const hooks = require("./hooks-BAaaKPS_.js");
20
20
  const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
21
21
  function _interopNamespace(e) {
@@ -38,17 +38,9 @@ function _interopNamespace(e) {
38
38
  }
39
39
  const React__namespace = /* @__PURE__ */ _interopNamespace(React);
40
40
  const isEqual__default = /* @__PURE__ */ _interopDefault(isEqual);
41
- const styled__default = /* @__PURE__ */ _interopDefault(styled);
42
41
  const isEmpty__default = /* @__PURE__ */ _interopDefault(isEmpty);
43
42
  const parseISO__default = /* @__PURE__ */ _interopDefault(parseISO);
44
43
  const toString__default = /* @__PURE__ */ _interopDefault(toString);
45
- const usePrev = (value) => {
46
- const ref = React.useRef();
47
- React.useEffect(() => {
48
- ref.current = value;
49
- }, [value]);
50
- return ref.current;
51
- };
52
44
  const NOT_ALLOWED_FILTERS = [
53
45
  "json",
54
46
  "component",
@@ -155,6 +147,15 @@ const FiltersImpl = ({ disabled, schema }) => {
155
147
  }
156
148
  };
157
149
  }
150
+ if (attribute.type === "enumeration") {
151
+ filter = {
152
+ ...filter,
153
+ options: attribute.enum.map((value) => ({
154
+ label: value,
155
+ value
156
+ }))
157
+ };
158
+ }
158
159
  return filter;
159
160
  }).filter(Boolean).toSorted((a, b) => formatter.compare(a.label, b.label));
160
161
  }, [
@@ -262,11 +263,8 @@ const SingleComponent = ({ content, mainField }) => {
262
263
  if (!mainField) {
263
264
  return null;
264
265
  }
265
- return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Tooltip, { label: content[mainField.name], children: /* @__PURE__ */ jsxRuntime.jsx(SingleComponentTypography, { textColor: "neutral800", ellipsis: true, children: /* @__PURE__ */ jsxRuntime.jsx(CellValue, { type: mainField.type, value: content[mainField.name] }) }) });
266
+ return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Tooltip, { label: content[mainField.name], children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { maxWidth: "25rem", textColor: "neutral800", ellipsis: true, children: /* @__PURE__ */ jsxRuntime.jsx(CellValue, { type: mainField.type, value: content[mainField.name] }) }) });
266
267
  };
267
- const SingleComponentTypography = styled__default.default(designSystem.Typography)`
268
- max-width: 250px;
269
- `;
270
268
  const RepeatableComponent = ({ content, mainField }) => {
271
269
  const { formatMessage } = reactIntl.useIntl();
272
270
  if (!mainField) {
@@ -284,13 +282,10 @@ const RepeatableComponent = ({ content, mainField }) => {
284
282
  { number: content.length }
285
283
  )
286
284
  ] }),
287
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Menu.Content, { children: content.map((item) => /* @__PURE__ */ jsxRuntime.jsx(designSystem.Menu.Item, { disabled: true, children: /* @__PURE__ */ jsxRuntime.jsx(RepeatableComponentTypography, { ellipsis: true, children: /* @__PURE__ */ jsxRuntime.jsx(CellValue, { type: mainField.type, value: item[mainField.name] }) }) }, item.id)) })
285
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Menu.Content, { children: content.map((item) => /* @__PURE__ */ jsxRuntime.jsx(designSystem.Menu.Item, { disabled: true, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { maxWidth: "50rem", ellipsis: true, children: /* @__PURE__ */ jsxRuntime.jsx(CellValue, { type: mainField.type, value: item[mainField.name] }) }) }, item.id)) })
288
286
  ] });
289
287
  };
290
- const RepeatableComponentTypography = styled__default.default(designSystem.Typography)`
291
- max-width: 500px;
292
- `;
293
- const MenuTrigger$1 = styled__default.default(designSystem.Menu.Trigger)`
288
+ const MenuTrigger$1 = styledComponents.styled(designSystem.Menu.Trigger)`
294
289
  svg {
295
290
  width: 0.6rem;
296
291
  height: 0.4rem;
@@ -298,11 +293,19 @@ const MenuTrigger$1 = styled__default.default(designSystem.Menu.Trigger)`
298
293
  `;
299
294
  const getFileExtension = (ext) => ext && ext[0] === "." ? ext.substring(1) : ext;
300
295
  const MediaSingle = ({ url, mime, alternativeText, name, ext, formats }) => {
301
- const fileURL = urls.prefixFileUrlWithBackendUrl(url);
296
+ const fileURL = usePrev.prefixFileUrlWithBackendUrl(url);
302
297
  if (mime.includes("image")) {
303
298
  const thumbnail = formats?.thumbnail?.url;
304
- const mediaURL = urls.prefixFileUrlWithBackendUrl(thumbnail) || fileURL;
305
- return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Avatar, { src: mediaURL, alt: alternativeText || name, preview: true });
299
+ const mediaURL = usePrev.prefixFileUrlWithBackendUrl(thumbnail) || fileURL;
300
+ return /* @__PURE__ */ jsxRuntime.jsx(
301
+ designSystem.Avatar.Item,
302
+ {
303
+ src: mediaURL,
304
+ alt: alternativeText || name,
305
+ fallback: alternativeText || name,
306
+ preview: true
307
+ }
308
+ );
306
309
  }
307
310
  const fileExtension = getFileExtension(ext);
308
311
  const fileName = name.length > 100 ? `${name.substring(0, 100)}...` : name;
@@ -312,7 +315,7 @@ const FileWrapper = ({ children }) => {
312
315
  return /* @__PURE__ */ jsxRuntime.jsx(
313
316
  designSystem.Flex,
314
317
  {
315
- as: "span",
318
+ tag: "span",
316
319
  position: "relative",
317
320
  borderRadius: "50%",
318
321
  width: "26px",
@@ -326,12 +329,12 @@ const FileWrapper = ({ children }) => {
326
329
  }
327
330
  );
328
331
  };
329
- const FileTypography = styled__default.default(designSystem.Typography)`
332
+ const FileTypography = styledComponents.styled(designSystem.Typography)`
330
333
  font-size: 0.9rem;
331
334
  line-height: 0.9rem;
332
335
  `;
333
336
  const MediaMultiple = ({ content }) => {
334
- return /* @__PURE__ */ jsxRuntime.jsx(designSystem.AvatarGroup, { children: content.map((file, index2) => {
337
+ return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Avatar.Group, { children: content.map((file, index2) => {
335
338
  const key = `${file.id}${index2}`;
336
339
  if (index2 === 3) {
337
340
  const remainingFiles = `+${content.length - 3}`;
@@ -344,11 +347,8 @@ const MediaMultiple = ({ content }) => {
344
347
  }) });
345
348
  };
346
349
  const RelationSingle = ({ mainField, content }) => {
347
- return /* @__PURE__ */ jsxRuntime.jsx(TypographyMaxWidth$1, { textColor: "neutral800", ellipsis: true, children: relations.getRelationLabel(content, mainField) });
350
+ return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { maxWidth: "50rem", textColor: "neutral800", ellipsis: true, children: relations.getRelationLabel(content, mainField) });
348
351
  };
349
- const TypographyMaxWidth$1 = styled__default.default(designSystem.Typography)`
350
- max-width: 500px;
351
- `;
352
352
  const RelationMultiple = ({ mainField, content, rowId, name }) => {
353
353
  const { model } = index.useDoc();
354
354
  const { formatMessage } = reactIntl.useIntl();
@@ -393,7 +393,7 @@ const RelationMultiple = ({ mainField, content, rowId, name }) => {
393
393
  defaultMessage: "Relations are loading"
394
394
  }) }) }),
395
395
  data?.results && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
396
- data.results.map((entry) => /* @__PURE__ */ jsxRuntime.jsx(designSystem.Menu.Item, { disabled: true, children: /* @__PURE__ */ jsxRuntime.jsx(TypographyMaxWidth$1, { ellipsis: true, children: relations.getRelationLabel(entry, mainField) }) }, entry.documentId)),
396
+ data.results.map((entry) => /* @__PURE__ */ jsxRuntime.jsx(designSystem.Menu.Item, { disabled: true, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { maxWidth: "50rem", ellipsis: true, children: relations.getRelationLabel(entry, mainField) }) }, entry.documentId)),
397
397
  data?.pagination && data?.pagination.total > 10 && /* @__PURE__ */ jsxRuntime.jsx(
398
398
  designSystem.Menu.Item,
399
399
  {
@@ -409,7 +409,7 @@ const RelationMultiple = ({ mainField, content, rowId, name }) => {
409
409
  ] })
410
410
  ] });
411
411
  };
412
- const MenuTrigger = styled__default.default(designSystem.Menu.Trigger)`
412
+ const MenuTrigger = styledComponents.styled(designSystem.Menu.Trigger)`
413
413
  svg {
414
414
  width: 0.6rem;
415
415
  height: 0.4rem;
@@ -437,14 +437,11 @@ const CellContent = ({ content, mainField, attribute, rowId, name }) => {
437
437
  }
438
438
  return /* @__PURE__ */ jsxRuntime.jsx(SingleComponent, { mainField, content });
439
439
  case "string":
440
- return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Tooltip, { description: content, children: /* @__PURE__ */ jsxRuntime.jsx(TypographyMaxWidth, { ellipsis: true, textColor: "neutral800", children: /* @__PURE__ */ jsxRuntime.jsx(CellValue, { type: attribute.type, value: content }) }) });
440
+ return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Tooltip, { description: content, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { maxWidth: "30rem", ellipsis: true, textColor: "neutral800", children: /* @__PURE__ */ jsxRuntime.jsx(CellValue, { type: attribute.type, value: content }) }) });
441
441
  default:
442
- return /* @__PURE__ */ jsxRuntime.jsx(TypographyMaxWidth, { ellipsis: true, textColor: "neutral800", children: /* @__PURE__ */ jsxRuntime.jsx(CellValue, { type: attribute.type, value: content }) });
442
+ return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { maxWidth: "30rem", ellipsis: true, textColor: "neutral800", children: /* @__PURE__ */ jsxRuntime.jsx(CellValue, { type: attribute.type, value: content }) });
443
443
  }
444
444
  };
445
- const TypographyMaxWidth = styled__default.default(designSystem.Typography)`
446
- max-width: 300px;
447
- `;
448
445
  const hasContent = (content, mainField, attribute) => {
449
446
  if (attribute.type === "component") {
450
447
  if (attribute.repeatable || !mainField) {
@@ -472,8 +469,6 @@ const hasContent = (content, mainField, attribute) => {
472
469
  };
473
470
  const isSingleRelation = (type) => ["oneToOne", "manyToOne", "oneToOneMorph"].includes(type);
474
471
  const ViewSettingsMenu = (props) => {
475
- const [isVisible, setIsVisible] = React__namespace.useState(false);
476
- const cogButtonRef = React__namespace.useRef(null);
477
472
  const permissions = hooks.useTypedSelector(
478
473
  (state) => state.admin_app.permissions.contentManager?.collectionTypesConfigurations ?? []
479
474
  );
@@ -482,52 +477,37 @@ const ViewSettingsMenu = (props) => {
482
477
  const {
483
478
  allowedActions: { canConfigureView }
484
479
  } = strapiAdmin.useRBAC(permissions);
485
- const handleToggle = () => {
486
- setIsVisible((prev) => !prev);
487
- };
488
- return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
489
- /* @__PURE__ */ jsxRuntime.jsx(
480
+ return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Popover.Root, { children: [
481
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Popover.Trigger, { children: /* @__PURE__ */ jsxRuntime.jsx(
490
482
  designSystem.IconButton,
491
483
  {
492
- icon: /* @__PURE__ */ jsxRuntime.jsx(Icons.Cog, {}),
493
484
  label: formatMessage({
494
485
  id: "components.ViewSettings.tooltip",
495
486
  defaultMessage: "View Settings"
496
487
  }),
497
- ref: cogButtonRef,
498
- onClick: handleToggle
499
- }
500
- ),
501
- isVisible && /* @__PURE__ */ jsxRuntime.jsx(
502
- designSystem.Popover,
503
- {
504
- placement: "bottom-end",
505
- source: cogButtonRef,
506
- onDismiss: handleToggle,
507
- spacing: 4,
508
- padding: 3,
509
- children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { alignItems: "stretch", direction: "column", gap: 3, children: [
510
- canConfigureView ? /* @__PURE__ */ jsxRuntime.jsx(
511
- designSystem.LinkButton,
512
- {
513
- size: "S",
514
- startIcon: /* @__PURE__ */ jsxRuntime.jsx(Icons.ListPlus, {}),
515
- variant: "secondary",
516
- as: reactRouterDom.NavLink,
517
- to: {
518
- pathname: "configurations/list",
519
- search: query.plugins ? qs.stringify({ plugins: query.plugins }, { encode: false }) : ""
520
- },
521
- children: formatMessage({
522
- id: "app.links.configure-view",
523
- defaultMessage: "Configure the view"
524
- })
525
- }
526
- ) : null,
527
- /* @__PURE__ */ jsxRuntime.jsx(FieldPicker, { ...props })
528
- ] })
488
+ children: /* @__PURE__ */ jsxRuntime.jsx(Icons.Cog, {})
529
489
  }
530
- )
490
+ ) }),
491
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Popover.Content, { side: "bottom", align: "end", sideOffset: 4, children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { alignItems: "stretch", direction: "column", padding: 3, gap: 3, children: [
492
+ canConfigureView ? /* @__PURE__ */ jsxRuntime.jsx(
493
+ designSystem.LinkButton,
494
+ {
495
+ size: "S",
496
+ startIcon: /* @__PURE__ */ jsxRuntime.jsx(Icons.ListPlus, {}),
497
+ variant: "secondary",
498
+ tag: reactRouterDom.NavLink,
499
+ to: {
500
+ pathname: "configurations/list",
501
+ search: query.plugins ? qs.stringify({ plugins: query.plugins }, { encode: false }) : ""
502
+ },
503
+ children: formatMessage({
504
+ id: "app.links.configure-view",
505
+ defaultMessage: "Configure the view"
506
+ })
507
+ }
508
+ ) : null,
509
+ /* @__PURE__ */ jsxRuntime.jsx(FieldPicker, { ...props })
510
+ ] }) })
531
511
  ] });
532
512
  };
533
513
  const FieldPicker = ({ headers = [], resetHeaders, setHeaders }) => {
@@ -551,9 +531,9 @@ const FieldPicker = ({ headers = [], resetHeaders, setHeaders }) => {
551
531
  const handleReset = () => {
552
532
  resetHeaders();
553
533
  };
554
- return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { as: "fieldset", direction: "column", alignItems: "stretch", gap: 3, children: [
534
+ return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { tag: "fieldset", direction: "column", alignItems: "stretch", gap: 3, borderWidth: 0, children: [
555
535
  /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { justifyContent: "space-between", children: [
556
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { as: "legend", variant: "pi", fontWeight: "bold", children: formatMessage({
536
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { tag: "legend", variant: "pi", fontWeight: "bold", children: formatMessage({
557
537
  id: "containers.list.displayedFields",
558
538
  defaultMessage: "Displayed fields"
559
539
  }) }),
@@ -564,38 +544,33 @@ const FieldPicker = ({ headers = [], resetHeaders, setHeaders }) => {
564
544
  ] }),
565
545
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { direction: "column", alignItems: "stretch", children: columns.map((header) => {
566
546
  const isActive = headers.includes(header.name);
567
- return /* @__PURE__ */ jsxRuntime.jsxs(
568
- ChackboxWrapper,
547
+ return /* @__PURE__ */ jsxRuntime.jsx(
548
+ designSystem.Flex,
569
549
  {
570
550
  wrap: "wrap",
571
551
  gap: 2,
572
- as: "label",
573
552
  background: isActive ? "primary100" : "transparent",
574
553
  hasRadius: true,
575
554
  padding: 2,
576
- children: [
577
- /* @__PURE__ */ jsxRuntime.jsx(
578
- designSystem.BaseCheckbox,
579
- {
580
- onChange: () => handleChange(header.name),
581
- value: isActive,
582
- name: header.name
583
- }
584
- ),
585
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { fontSize: 1, children: header.label })
586
- ]
555
+ children: /* @__PURE__ */ jsxRuntime.jsx(
556
+ designSystem.Checkbox,
557
+ {
558
+ onCheckedChange: () => handleChange(header.name),
559
+ checked: isActive,
560
+ name: header.name,
561
+ children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { fontSize: 1, children: header.label })
562
+ }
563
+ )
587
564
  },
588
565
  header.name
589
566
  );
590
567
  }) })
591
568
  ] });
592
569
  };
593
- const ChackboxWrapper = styled__default.default(designSystem.Flex)`
594
- :hover {
595
- background-color: ${(props) => props.theme.colors.primary100};
596
- }
597
- `;
598
570
  const { INJECT_COLUMN_IN_TABLE } = index.HOOKS;
571
+ const LayoutsHeaderCustom = styledComponents.styled(strapiAdmin.Layouts.Header)`
572
+ overflow-wrap: anywhere;
573
+ `;
599
574
  const ListViewPage = () => {
600
575
  const { trackUsage } = strapiAdmin.useTracking();
601
576
  const navigate = reactRouterDom.useNavigate();
@@ -605,7 +580,7 @@ const ListViewPage = () => {
605
580
  const { collectionType, model, schema } = index.useDoc();
606
581
  const { list } = index.useDocumentLayout(model);
607
582
  const [displayedHeaders, setDisplayedHeaders] = React__namespace.useState([]);
608
- const listLayout = usePrev(list.layout);
583
+ const listLayout = usePrev.usePrev(list.layout);
609
584
  React__namespace.useEffect(() => {
610
585
  if (!isEqual__default.default(listLayout, list.layout)) {
611
586
  setDisplayedHeaders(list.layout);
@@ -622,7 +597,7 @@ const ListViewPage = () => {
622
597
  sort: list.settings.defaultSortBy ? `${list.settings.defaultSortBy}:${list.settings.defaultSortOrder}` : ""
623
598
  });
624
599
  const params = React__namespace.useMemo(() => index.buildValidParams(query), [query]);
625
- const { data, error, isLoading } = index.useGetAllDocumentsQuery({
600
+ const { data, error, isFetching } = index.useGetAllDocumentsQuery({
626
601
  model,
627
602
  params
628
603
  });
@@ -680,7 +655,7 @@ const ListViewPage = () => {
680
655
  }
681
656
  return formattedHeaders;
682
657
  }, [displayedHeaders, formatMessage, list, runHookWaterfall, schema?.options?.draftAndPublish]);
683
- if (isLoading) {
658
+ if (isFetching) {
684
659
  return /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Page.Loading, {});
685
660
  }
686
661
  if (error) {
@@ -697,7 +672,7 @@ const ListViewPage = () => {
697
672
  return /* @__PURE__ */ jsxRuntime.jsxs(strapiAdmin.Page.Main, { children: [
698
673
  /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Page.Title, { children: `${contentTypeTitle}` }),
699
674
  /* @__PURE__ */ jsxRuntime.jsx(
700
- strapiAdmin.Layouts.Header,
675
+ LayoutsHeaderCustom,
701
676
  {
702
677
  primaryAction: canCreate ? /* @__PURE__ */ jsxRuntime.jsx(CreateButton, {}) : null,
703
678
  subtitle: formatMessage(
@@ -746,8 +721,8 @@ const ListViewPage = () => {
746
721
  }
747
722
  ),
748
723
  /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Layouts.Content, { children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 4, direction: "column", alignItems: "stretch", children: [
749
- /* @__PURE__ */ jsxRuntime.jsxs(strapiAdmin.Table.Root, { rows: results, headers: tableHeaders, isLoading, children: [
750
- /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Table.ActionBar, {}),
724
+ /* @__PURE__ */ jsxRuntime.jsxs(strapiAdmin.Table.Root, { rows: results, headers: tableHeaders, isLoading: isFetching, children: [
725
+ /* @__PURE__ */ jsxRuntime.jsx(TableActionsBar, {}),
751
726
  /* @__PURE__ */ jsxRuntime.jsxs(strapiAdmin.Table.Content, { children: [
752
727
  /* @__PURE__ */ jsxRuntime.jsxs(strapiAdmin.Table.Head, { children: [
753
728
  /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Table.HeaderCheckboxCell, {}),
@@ -805,10 +780,22 @@ const ListViewPage = () => {
805
780
  ] }) })
806
781
  ] });
807
782
  };
808
- const ActionsCell = styled__default.default(strapiAdmin.Table.Cell)`
783
+ const ActionsCell = styledComponents.styled(strapiAdmin.Table.Cell)`
809
784
  display: flex;
810
785
  justify-content: flex-end;
811
786
  `;
787
+ const TableActionsBar = () => {
788
+ const selectRow = strapiAdmin.useTable("TableActionsBar", (state) => state.selectRow);
789
+ const [{ query }] = strapiAdmin.useQueryParams();
790
+ const locale = query?.plugins?.i18n?.locale;
791
+ const prevLocale = usePrev.usePrev(locale);
792
+ React__namespace.useEffect(() => {
793
+ if (prevLocale !== locale) {
794
+ selectRow([]);
795
+ }
796
+ }, [selectRow, prevLocale, locale]);
797
+ return /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Table.ActionBar, { children: /* @__PURE__ */ jsxRuntime.jsx(index.BulkActionsRenderer, {}) });
798
+ };
812
799
  const CreateButton = ({ variant }) => {
813
800
  const { formatMessage } = reactIntl.useIntl();
814
801
  const { trackUsage } = strapiAdmin.useTracking();
@@ -817,7 +804,7 @@ const CreateButton = ({ variant }) => {
817
804
  designSystem.Button,
818
805
  {
819
806
  variant,
820
- forwardedAs: reactRouterDom.Link,
807
+ tag: reactRouterDom.Link,
821
808
  onClick: () => {
822
809
  trackUsage("willCreateEntry", { status: "draft" });
823
810
  },
@@ -827,6 +814,8 @@ const CreateButton = ({ variant }) => {
827
814
  pathname: "create",
828
815
  search: qs.stringify({ plugins: query.plugins })
829
816
  },
817
+ minWidth: "max-content",
818
+ marginLeft: 2,
830
819
  children: formatMessage({
831
820
  id: index.getTranslation("HeaderLayout.button.label-add-entry"),
832
821
  defaultMessage: "Create new entry"
@@ -856,4 +845,4 @@ const ProtectedListViewPage = () => {
856
845
  };
857
846
  exports.ListViewPage = ListViewPage;
858
847
  exports.ProtectedListViewPage = ProtectedListViewPage;
859
- //# sourceMappingURL=ListViewPage-5ySZ-VUs.js.map
848
+ //# sourceMappingURL=ListViewPage-C2gIeYHG.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ListViewPage-C2gIeYHG.js","sources":["../../admin/src/pages/ListView/components/Filters.tsx","../../admin/src/pages/ListView/components/TableCells/CellValue.tsx","../../admin/src/pages/ListView/components/TableCells/Components.tsx","../../admin/src/pages/ListView/components/TableCells/Media.tsx","../../admin/src/pages/ListView/components/TableCells/Relations.tsx","../../admin/src/pages/ListView/components/TableCells/CellContent.tsx","../../admin/src/pages/ListView/components/ViewSettingsMenu.tsx","../../admin/src/pages/ListView/ListViewPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Filters,\n useField,\n useAuth,\n useTracking,\n useQueryParams,\n useAdminUsers,\n} from '@strapi/admin/strapi-admin';\nimport { Combobox, ComboboxOption, useCollator } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { CREATOR_FIELDS } from '../../../constants/attributes';\nimport { useContentTypeSchema } from '../../../hooks/useContentTypeSchema';\nimport { Schema } from '../../../hooks/useDocument';\nimport { useGetContentTypeConfigurationQuery } from '../../../services/contentTypes';\nimport { getMainField } from '../../../utils/attributes';\nimport { getDisplayName } from '../../../utils/users';\n\n/**\n * If new attributes are added, this list needs to be updated.\n */\nconst NOT_ALLOWED_FILTERS = [\n 'json',\n 'component',\n 'media',\n 'richtext',\n 'dynamiczone',\n 'password',\n 'blocks',\n];\nconst DEFAULT_ALLOWED_FILTERS = ['createdAt', 'updatedAt'];\nconst USER_FILTER_ATTRIBUTES = [...CREATOR_FIELDS, 'strapi_assignee'];\n\n/* -------------------------------------------------------------------------------------------------\n * Filters\n * -----------------------------------------------------------------------------------------------*/\ninterface FiltersProps {\n disabled?: boolean;\n schema: Schema;\n}\n\nconst FiltersImpl = ({ disabled, schema }: FiltersProps) => {\n const { attributes, uid: model, options } = schema;\n const { formatMessage, locale } = useIntl();\n const { trackUsage } = useTracking();\n const allPermissions = useAuth('FiltersImpl', (state) => state.permissions);\n const [{ query }] = useQueryParams<Filters.Query>();\n const { schemas } = useContentTypeSchema();\n\n const canReadAdminUsers = React.useMemo(\n () =>\n allPermissions.filter(\n (permission) => permission.action === 'admin::users.read' && permission.subject === null\n ).length > 0,\n [allPermissions]\n );\n\n const selectedUserIds = (query?.filters?.$and ?? []).reduce<string[]>((acc, filter) => {\n const [key, value] = Object.entries(filter)[0];\n if (typeof value.id !== 'object') {\n return acc;\n }\n\n const id = value.id.$eq || value.id.$ne;\n\n if (id && USER_FILTER_ATTRIBUTES.includes(key) && !acc.includes(id)) {\n acc.push(id);\n }\n\n return acc;\n }, []);\n\n const { data: userData, isLoading: isLoadingAdminUsers } = useAdminUsers(\n { filters: { id: { $in: selectedUserIds } } },\n {\n // fetch the list of admin users only if the filter contains users and the\n // current user has permissions to display users\n skip: selectedUserIds.length === 0 || !canReadAdminUsers,\n }\n );\n\n const { users = [] } = userData ?? {};\n\n const { metadata } = useGetContentTypeConfigurationQuery(model, {\n selectFromResult: ({ data }) => ({ metadata: data?.contentType.metadatas ?? {} }),\n });\n\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const displayedFilters = React.useMemo(() => {\n const [{ properties: { fields = [] } = { fields: [] } }] = allPermissions.filter(\n (permission) =>\n permission.action === 'plugin::content-manager.explorer.read' &&\n permission.subject === model\n );\n\n const allowedFields = fields.filter((field) => {\n const attribute = attributes[field] ?? {};\n\n return attribute.type && !NOT_ALLOWED_FILTERS.includes(attribute.type);\n });\n\n return (\n [\n 'id',\n ...allowedFields,\n ...DEFAULT_ALLOWED_FILTERS,\n ...(canReadAdminUsers ? CREATOR_FIELDS : []),\n ]\n .map((name) => {\n const attribute = attributes[name];\n\n if (NOT_ALLOWED_FILTERS.includes(attribute.type)) {\n return null;\n }\n\n const { mainField: mainFieldName = '', label } = metadata[name].list;\n\n let filter: Filters.Filter = {\n name,\n label: label ?? '',\n mainField: getMainField(attribute, mainFieldName, { schemas, components: {} }),\n // @ts-expect-error – TODO: this is filtered out above in the `allowedFields` call but TS complains, is there a better way to solve this?\n type: attribute.type,\n };\n\n if (\n attribute.type === 'relation' &&\n 'target' in attribute &&\n attribute.target === 'admin::user'\n ) {\n filter = {\n ...filter,\n input: AdminUsersFilter,\n options: users.map((user) => ({\n label: getDisplayName(user),\n value: user.id.toString(),\n })),\n operators: [\n {\n label: formatMessage({\n id: 'components.FilterOptions.FILTER_TYPES.$eq',\n defaultMessage: 'is',\n }),\n value: '$eq',\n },\n {\n label: formatMessage({\n id: 'components.FilterOptions.FILTER_TYPES.$ne',\n defaultMessage: 'is not',\n }),\n value: '$ne',\n },\n ],\n mainField: {\n name: 'id',\n type: 'integer',\n },\n };\n }\n\n if (attribute.type === 'enumeration') {\n filter = {\n ...filter,\n options: attribute.enum.map((value) => ({\n label: value,\n value,\n })),\n };\n }\n\n return filter;\n })\n .filter(Boolean) as Filters.Filter[]\n ).toSorted((a, b) => formatter.compare(a.label, b.label));\n }, [\n allPermissions,\n canReadAdminUsers,\n model,\n attributes,\n metadata,\n schemas,\n users,\n formatMessage,\n formatter,\n ]);\n\n const onOpenChange = (isOpen: boolean) => {\n if (isOpen) {\n trackUsage('willFilterEntries');\n }\n };\n\n const handleFilterChange: Filters.Props['onChange'] = (data) => {\n const attribute = attributes[data.name];\n\n if (attribute) {\n trackUsage('didFilterEntries', {\n useRelation: attribute.type === 'relation',\n });\n }\n };\n\n return (\n <Filters.Root\n disabled={disabled}\n options={displayedFilters}\n onOpenChange={onOpenChange}\n onChange={handleFilterChange}\n >\n <Filters.Trigger />\n <Filters.Popover />\n <Filters.List />\n </Filters.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * AdminUsersFilter\n * -----------------------------------------------------------------------------------------------*/\n\nconst AdminUsersFilter = ({ name }: Filters.ValueInputProps) => {\n const [page, setPage] = React.useState(1);\n const { formatMessage } = useIntl();\n const { data, isLoading } = useAdminUsers({\n page,\n });\n const field = useField(name);\n\n const handleOpenChange = (isOpen?: boolean) => {\n if (!isOpen) {\n setPage(1);\n }\n };\n\n const users = data?.users || [];\n\n return (\n <Combobox\n value={field.value}\n aria-label={formatMessage({\n id: 'content-manager.components.Filters.usersSelect.label',\n defaultMessage: 'Search and select a user to filter',\n })}\n onOpenChange={handleOpenChange}\n onChange={(value) => field.onChange(name, value)}\n loading={isLoading}\n onLoadMore={() => setPage((prev) => prev + 1)}\n >\n {users.map((user) => {\n return (\n <ComboboxOption key={user.id} value={user.id.toString()}>\n {getDisplayName(user)}\n </ComboboxOption>\n );\n })}\n </Combobox>\n );\n};\n\nexport { FiltersImpl as Filters };\nexport type { FiltersProps };\n","import parseISO from 'date-fns/parseISO';\nimport toString from 'lodash/toString';\nimport { useIntl } from 'react-intl';\n\nimport type { Schema } from '@strapi/types';\n\ninterface CellValueProps {\n type: Schema.Attribute.Kind | 'custom';\n value: any;\n}\n\nconst CellValue = ({ type, value }: CellValueProps) => {\n const { formatDate, formatTime, formatNumber } = useIntl();\n let formattedValue = value;\n\n if (type === 'date') {\n formattedValue = formatDate(parseISO(value), { dateStyle: 'full' });\n }\n\n if (type === 'datetime') {\n formattedValue = formatDate(value, { dateStyle: 'full', timeStyle: 'short' });\n }\n\n if (type === 'time') {\n const [hour, minute, second] = value.split(':');\n const date = new Date();\n date.setHours(hour);\n date.setMinutes(minute);\n date.setSeconds(second);\n\n formattedValue = formatTime(date, {\n timeStyle: 'short',\n });\n }\n\n if (['float', 'decimal'].includes(type)) {\n formattedValue = formatNumber(value, {\n // Should be kept in sync with the corresponding value\n // in the design-system/NumberInput: https://github.com/strapi/design-system/blob/main/packages/strapi-design-system/src/NumberInput/NumberInput.js#L53\n maximumFractionDigits: 20,\n });\n }\n\n if (['integer', 'biginteger'].includes(type)) {\n formattedValue = formatNumber(value, { maximumFractionDigits: 0 });\n }\n\n return toString(formattedValue);\n};\n\nexport { CellValue };\nexport type { CellValueProps };\n","import { Badge, Tooltip, Typography, Menu } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { CellContentProps } from './CellContent';\nimport { CellValue } from './CellValue';\n\nimport type { Schema } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * SingleComponent\n * -----------------------------------------------------------------------------------------------*/\n\ninterface SingleComponentProps extends Pick<CellContentProps, 'mainField'> {\n content: Schema.Attribute.Value<Schema.Attribute.Component<`${string}.${string}`, false>>;\n}\n\nconst SingleComponent = ({ content, mainField }: SingleComponentProps) => {\n if (!mainField) {\n return null;\n }\n\n return (\n <Tooltip label={content[mainField.name]}>\n <Typography maxWidth=\"25rem\" textColor=\"neutral800\" ellipsis>\n <CellValue type={mainField.type} value={content[mainField.name]} />\n </Typography>\n </Tooltip>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * RepeatableComponent\n * -----------------------------------------------------------------------------------------------*/\n\ninterface RepeatableComponentProps extends Pick<CellContentProps, 'mainField'> {\n content: Schema.Attribute.Value<Schema.Attribute.Component<`${string}.${string}`, true>>;\n}\n\nconst RepeatableComponent = ({ content, mainField }: RepeatableComponentProps) => {\n const { formatMessage } = useIntl();\n\n if (!mainField) {\n return null;\n }\n\n return (\n <Menu.Root>\n <MenuTrigger onClick={(e) => e.stopPropagation()}>\n <Badge>{content.length}</Badge>{' '}\n {formatMessage(\n {\n id: 'content-manager.containers.list.items',\n defaultMessage: '{number, plural, =0 {items} one {item} other {items}}',\n },\n { number: content.length }\n )}\n </MenuTrigger>\n <Menu.Content>\n {content.map((item) => (\n <Menu.Item key={item.id} disabled>\n <Typography maxWidth=\"50rem\" ellipsis>\n <CellValue type={mainField.type} value={item[mainField.name]} />\n </Typography>\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Root>\n );\n};\n\n/**\n * TODO: this needs to be solved in the Design-System\n */\nconst MenuTrigger = styled(Menu.Trigger)`\n svg {\n width: 0.6rem;\n height: 0.4rem;\n }\n`;\n\nexport { SingleComponent, RepeatableComponent };\nexport type { SingleComponentProps, RepeatableComponentProps };\n","import * as React from 'react';\n\nimport { Avatar, Flex, Tooltip, Typography, TypographyComponent } from '@strapi/design-system';\nimport { styled } from 'styled-components';\n\nimport { prefixFileUrlWithBackendUrl } from '../../../../utils/urls';\n\nimport type { Data } from '@strapi/types';\n\ninterface MediaFile {\n id?: Data.ID;\n alternativeText?: string;\n ext: string;\n formats: {\n thumbnail?: {\n url?: string;\n };\n };\n mime: string;\n name: string;\n url: string;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Media\n * -----------------------------------------------------------------------------------------------*/\n\ninterface MediaSingleProps extends MediaFile {}\n\nconst getFileExtension = (ext: string) => (ext && ext[0] === '.' ? ext.substring(1) : ext);\n\nconst MediaSingle = ({ url, mime, alternativeText, name, ext, formats }: MediaSingleProps) => {\n const fileURL = prefixFileUrlWithBackendUrl(url)!;\n\n if (mime.includes('image')) {\n const thumbnail = formats?.thumbnail?.url;\n const mediaURL = prefixFileUrlWithBackendUrl(thumbnail) || fileURL;\n\n return (\n <Avatar.Item\n src={mediaURL}\n alt={alternativeText || name}\n fallback={alternativeText || name}\n preview\n />\n );\n }\n\n const fileExtension = getFileExtension(ext);\n const fileName = name.length > 100 ? `${name.substring(0, 100)}...` : name;\n\n return (\n <Tooltip description={fileName}>\n <FileWrapper>{fileExtension}</FileWrapper>\n </Tooltip>\n );\n};\n\nconst FileWrapper = ({ children }: { children: React.ReactNode }) => {\n return (\n <Flex\n tag=\"span\"\n position=\"relative\"\n borderRadius=\"50%\"\n width=\"26px\"\n height=\"26px\"\n borderColor=\"neutral200\"\n background=\"neutral150\"\n paddingLeft=\"1px\"\n justifyContent=\"center\"\n alignItems=\"center\"\n >\n <FileTypography variant=\"sigma\" textColor=\"neutral600\">\n {children}\n </FileTypography>\n </Flex>\n );\n};\n\nconst FileTypography = styled<TypographyComponent>(Typography)`\n font-size: 0.9rem;\n line-height: 0.9rem;\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * MediaMultiple\n * -----------------------------------------------------------------------------------------------*/\n\ninterface MediaMultipleProps {\n content: MediaFile[];\n}\n\nconst MediaMultiple = ({ content }: MediaMultipleProps) => {\n return (\n <Avatar.Group>\n {content.map((file, index) => {\n const key = `${file.id}${index}`;\n\n if (index === 3) {\n const remainingFiles = `+${content.length - 3}`;\n\n return <FileWrapper key={key}>{remainingFiles}</FileWrapper>;\n }\n\n if (index > 3) {\n return null;\n }\n\n return <MediaSingle key={key} {...file} />;\n })}\n </Avatar.Group>\n );\n};\n\nexport { MediaMultiple, MediaSingle };\nexport type { MediaMultipleProps, MediaSingleProps };\n","import * as React from 'react';\n\nimport { Typography, Badge, Flex, Loader, useNotifyAT, Menu } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { useDoc } from '../../../../hooks/useDocument';\nimport { useGetRelationsQuery } from '../../../../services/relations';\nimport { getRelationLabel } from '../../../../utils/relations';\nimport { getTranslation } from '../../../../utils/translations';\n\nimport type { CellContentProps } from './CellContent';\n\n/* -------------------------------------------------------------------------------------------------\n * RelationSingle\n * -----------------------------------------------------------------------------------------------*/\n\ninterface RelationSingleProps extends Pick<CellContentProps, 'mainField' | 'content'> {}\n\nconst RelationSingle = ({ mainField, content }: RelationSingleProps) => {\n return (\n <Typography maxWidth=\"50rem\" textColor=\"neutral800\" ellipsis>\n {getRelationLabel(content, mainField)}\n </Typography>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * RelationMultiple\n * -----------------------------------------------------------------------------------------------*/\n\ninterface RelationMultipleProps\n extends Pick<CellContentProps, 'mainField' | 'content' | 'name' | 'rowId'> {}\n\n/**\n * TODO: fix this component – tracking issue https://strapi-inc.atlassian.net/browse/CONTENT-2184\n */\nconst RelationMultiple = ({ mainField, content, rowId, name }: RelationMultipleProps) => {\n const { model } = useDoc();\n const { formatMessage } = useIntl();\n const { notifyStatus } = useNotifyAT();\n const [isOpen, setIsOpen] = React.useState(false);\n\n const [targetField] = name.split('.');\n\n const { data, isLoading } = useGetRelationsQuery(\n {\n model,\n id: rowId,\n targetField,\n },\n {\n skip: !isOpen,\n refetchOnMountOrArgChange: true,\n }\n );\n\n React.useEffect(() => {\n if (data) {\n notifyStatus(\n formatMessage({\n id: getTranslation('DynamicTable.relation-loaded'),\n defaultMessage: 'Relations have been loaded',\n })\n );\n }\n }, [data, formatMessage, notifyStatus]);\n\n return (\n <Menu.Root onOpenChange={(isOpen) => setIsOpen(isOpen)}>\n <MenuTrigger onClick={(e) => e.stopPropagation()}>\n <Flex gap={1} wrap=\"nowrap\">\n <Badge>{content.count}</Badge>\n {formatMessage(\n {\n id: 'content-manager.containers.list.items',\n defaultMessage: '{number, plural, =0 {items} one {item} other {items}}',\n },\n { number: content.count }\n )}\n </Flex>\n </MenuTrigger>\n <Menu.Content>\n {isLoading && (\n <Menu.Item disabled>\n <Loader small>\n {formatMessage({\n id: getTranslation('ListViewTable.relation-loading'),\n defaultMessage: 'Relations are loading',\n })}\n </Loader>\n </Menu.Item>\n )}\n {data?.results && (\n <>\n {data.results.map((entry) => (\n <Menu.Item key={entry.documentId} disabled>\n <Typography maxWidth=\"50rem\" ellipsis>\n {getRelationLabel(entry, mainField)}\n </Typography>\n </Menu.Item>\n ))}\n\n {data?.pagination && data?.pagination.total > 10 && (\n <Menu.Item\n aria-disabled\n aria-label={formatMessage({\n id: getTranslation('ListViewTable.relation-more'),\n defaultMessage: 'This relation contains more entities than displayed',\n })}\n >\n <Typography>…</Typography>\n </Menu.Item>\n )}\n </>\n )}\n </Menu.Content>\n </Menu.Root>\n );\n};\n\n/**\n * TODO: this needs to be solved in the Design-System\n */\nconst MenuTrigger = styled(Menu.Trigger)`\n svg {\n width: 0.6rem;\n height: 0.4rem;\n }\n`;\n\nexport { RelationSingle, RelationMultiple };\nexport type { RelationSingleProps, RelationMultipleProps };\n","import { Tooltip, Typography } from '@strapi/design-system';\nimport isEmpty from 'lodash/isEmpty';\n\nimport { CellValue } from './CellValue';\nimport { SingleComponent, RepeatableComponent } from './Components';\nimport { MediaSingle, MediaMultiple } from './Media';\nimport { RelationMultiple, RelationSingle } from './Relations';\n\nimport type { ListFieldLayout } from '../../../../hooks/useDocumentLayout';\nimport type { Schema, Data } from '@strapi/types';\n\ninterface CellContentProps extends Omit<ListFieldLayout, 'cellFormatter'> {\n content: Schema.Attribute.Value<Schema.Attribute.AnyAttribute>;\n rowId: Data.ID;\n}\n\nconst CellContent = ({ content, mainField, attribute, rowId, name }: CellContentProps) => {\n if (!hasContent(content, mainField, attribute)) {\n return <Typography textColor=\"neutral800\">-</Typography>;\n }\n\n switch (attribute.type) {\n case 'media':\n if (!attribute.multiple) {\n return <MediaSingle {...content} />;\n }\n\n return <MediaMultiple content={content} />;\n\n case 'relation': {\n if (isSingleRelation(attribute.relation)) {\n return <RelationSingle mainField={mainField} content={content} />;\n }\n\n return <RelationMultiple rowId={rowId} mainField={mainField} content={content} name={name} />;\n }\n\n case 'component':\n if (attribute.repeatable) {\n return <RepeatableComponent mainField={mainField} content={content} />;\n }\n\n return <SingleComponent mainField={mainField} content={content} />;\n\n case 'string':\n return (\n <Tooltip description={content}>\n <Typography maxWidth=\"30rem\" ellipsis textColor=\"neutral800\">\n <CellValue type={attribute.type} value={content} />\n </Typography>\n </Tooltip>\n );\n\n default:\n return (\n <Typography maxWidth=\"30rem\" ellipsis textColor=\"neutral800\">\n <CellValue type={attribute.type} value={content} />\n </Typography>\n );\n }\n};\n\nconst hasContent = (\n content: CellContentProps['content'],\n mainField: CellContentProps['mainField'],\n attribute: CellContentProps['attribute']\n) => {\n if (attribute.type === 'component') {\n // Repeatable fields show the ID as fallback, in case the mainField\n // doesn't have any content\n if (attribute.repeatable || !mainField) {\n return content?.length > 0;\n }\n\n const value = content?.[mainField.name];\n\n // relations, media ... show the id as fallback\n if (mainField.name === 'id' && ![undefined, null].includes(value)) {\n return true;\n }\n\n return !isEmpty(value);\n }\n\n if (attribute.type === 'relation') {\n if (isSingleRelation(attribute.relation)) {\n return !isEmpty(content);\n }\n\n return content?.count > 0;\n }\n\n /*\n Biginteger fields need to be treated as strings, as `isNumber`\n doesn't deal with them.\n */\n if (['integer', 'decimal', 'float', 'number'].includes(attribute.type)) {\n return typeof content === 'number';\n }\n\n if (attribute.type === 'boolean') {\n return content !== null;\n }\n\n return !isEmpty(content);\n};\n\nconst isSingleRelation = (\n type: Extract<CellContentProps['attribute'], { type: 'relation' }>['relation']\n) => ['oneToOne', 'manyToOne', 'oneToOneMorph'].includes(type);\n\nexport { CellContent };\nexport type { CellContentProps };\n","import * as React from 'react';\n\nimport { useTracking, useRBAC, useQueryParams } from '@strapi/admin/strapi-admin';\nimport {\n Flex,\n IconButton,\n Popover,\n Checkbox,\n TextButton,\n Typography,\n useCollator,\n LinkButton,\n} from '@strapi/design-system';\nimport { Cog, ListPlus } from '@strapi/icons';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { NavLink } from 'react-router-dom';\n\nimport { useDoc } from '../../../hooks/useDocument';\nimport { useDocumentLayout } from '../../../hooks/useDocumentLayout';\nimport { useTypedSelector } from '../../../modules/hooks';\nimport { checkIfAttributeIsDisplayable } from '../../../utils/attributes';\n\ninterface ViewSettingsMenuProps extends FieldPickerProps {}\n\nconst ViewSettingsMenu = (props: ViewSettingsMenuProps) => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.contentManager?.collectionTypesConfigurations ?? []\n );\n const [{ query }] = useQueryParams<{ plugins?: Record<string, unknown> }>();\n const { formatMessage } = useIntl();\n const {\n allowedActions: { canConfigureView },\n } = useRBAC(permissions);\n\n return (\n <Popover.Root>\n <Popover.Trigger>\n <IconButton\n label={formatMessage({\n id: 'components.ViewSettings.tooltip',\n defaultMessage: 'View Settings',\n })}\n >\n <Cog />\n </IconButton>\n </Popover.Trigger>\n <Popover.Content side=\"bottom\" align=\"end\" sideOffset={4}>\n <Flex alignItems=\"stretch\" direction=\"column\" padding={3} gap={3}>\n {canConfigureView ? (\n <LinkButton\n size=\"S\"\n startIcon={<ListPlus />}\n variant=\"secondary\"\n tag={NavLink}\n to={{\n pathname: 'configurations/list',\n search: query.plugins\n ? stringify({ plugins: query.plugins }, { encode: false })\n : '',\n }}\n >\n {formatMessage({\n id: 'app.links.configure-view',\n defaultMessage: 'Configure the view',\n })}\n </LinkButton>\n ) : null}\n <FieldPicker {...props} />\n </Flex>\n </Popover.Content>\n </Popover.Root>\n );\n};\n\ninterface FieldPickerProps {\n headers?: string[];\n setHeaders: (headers: string[]) => void;\n resetHeaders: () => void;\n}\n\nconst FieldPicker = ({ headers = [], resetHeaders, setHeaders }: FieldPickerProps) => {\n const { trackUsage } = useTracking();\n const { formatMessage, locale } = useIntl();\n\n const { schema, model } = useDoc();\n const { list } = useDocumentLayout(model);\n\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const attributes = schema?.attributes ?? {};\n\n const columns = Object.keys(attributes)\n .filter((name) => checkIfAttributeIsDisplayable(attributes[name]))\n .map((name) => ({\n name,\n label: list.metadatas[name]?.label ?? '',\n }))\n .sort((a, b) => formatter.compare(a.label, b.label));\n\n const handleChange = (name: string) => {\n trackUsage('didChangeDisplayedFields');\n\n /**\n * create an array of the new headers, if the new name exists it should be removed,\n * otherwise it should be added\n */\n const newHeaders = headers.includes(name)\n ? headers.filter((header) => header !== name)\n : [...headers, name];\n\n setHeaders(newHeaders);\n };\n\n const handleReset = () => {\n resetHeaders();\n };\n\n return (\n <Flex tag=\"fieldset\" direction=\"column\" alignItems=\"stretch\" gap={3} borderWidth={0}>\n <Flex justifyContent=\"space-between\">\n <Typography tag=\"legend\" variant=\"pi\" fontWeight=\"bold\">\n {formatMessage({\n id: 'containers.list.displayedFields',\n defaultMessage: 'Displayed fields',\n })}\n </Typography>\n\n <TextButton onClick={handleReset}>\n {formatMessage({\n id: 'app.components.Button.reset',\n defaultMessage: 'Reset',\n })}\n </TextButton>\n </Flex>\n\n <Flex direction=\"column\" alignItems=\"stretch\">\n {columns.map((header) => {\n const isActive = headers.includes(header.name);\n\n return (\n <Flex\n wrap=\"wrap\"\n gap={2}\n background={isActive ? 'primary100' : 'transparent'}\n hasRadius\n padding={2}\n key={header.name}\n >\n <Checkbox\n onCheckedChange={() => handleChange(header.name)}\n checked={isActive}\n name={header.name}\n >\n <Typography fontSize={1}>{header.label}</Typography>\n </Checkbox>\n </Flex>\n );\n })}\n </Flex>\n </Flex>\n );\n};\n\nexport { ViewSettingsMenu };\nexport type { ViewSettingsMenuProps, FieldPickerProps };\n","import * as React from 'react';\n\nimport {\n Page,\n Pagination,\n SearchInput,\n Table,\n BackButton,\n useNotification,\n useStrapiApp,\n useTracking,\n useAPIErrorHandler,\n useQueryParams,\n useRBAC,\n Layouts,\n useTable,\n} from '@strapi/admin/strapi-admin';\nimport { Button, Flex, Typography, ButtonProps } from '@strapi/design-system';\nimport { Plus } from '@strapi/icons';\nimport isEqual from 'lodash/isEqual';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { useNavigate, Link as ReactRouterLink, useParams } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { InjectionZone } from '../../components/InjectionZone';\nimport { HOOKS } from '../../constants/hooks';\nimport { PERMISSIONS } from '../../constants/plugin';\nimport { DocumentRBAC, useDocumentRBAC } from '../../features/DocumentRBAC';\nimport { useDoc } from '../../hooks/useDocument';\nimport {\n ListFieldLayout,\n convertListLayoutToFieldLayouts,\n useDocumentLayout,\n} from '../../hooks/useDocumentLayout';\nimport { usePrev } from '../../hooks/usePrev';\nimport { useGetAllDocumentsQuery } from '../../services/documents';\nimport { buildValidParams } from '../../utils/api';\nimport { getTranslation } from '../../utils/translations';\nimport { getDisplayName } from '../../utils/users';\nimport { DocumentStatus } from '../EditView/components/DocumentStatus';\n\nimport { BulkActionsRenderer } from './components/BulkActions/Actions';\nimport { Filters } from './components/Filters';\nimport { TableActions } from './components/TableActions';\nimport { CellContent } from './components/TableCells/CellContent';\nimport { ViewSettingsMenu } from './components/ViewSettingsMenu';\n\nimport type { Modules } from '@strapi/types';\n\nconst { INJECT_COLUMN_IN_TABLE } = HOOKS;\n\n/* -------------------------------------------------------------------------------------------------\n * ListViewPage\n * -----------------------------------------------------------------------------------------------*/\nconst LayoutsHeaderCustom = styled(Layouts.Header)`\n overflow-wrap: anywhere;\n`;\n\nconst ListViewPage = () => {\n const { trackUsage } = useTracking();\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler(getTranslation);\n\n const { collectionType, model, schema } = useDoc();\n const { list } = useDocumentLayout(model);\n\n const [displayedHeaders, setDisplayedHeaders] = React.useState<ListFieldLayout[]>([]);\n\n const listLayout = usePrev(list.layout);\n React.useEffect(() => {\n /**\n * ONLY update the displayedHeaders if the document\n * layout has actually changed in value.\n */\n if (!isEqual(listLayout, list.layout)) {\n setDisplayedHeaders(list.layout);\n }\n }, [list.layout, listLayout]);\n\n const handleSetHeaders = (headers: string[]) => {\n setDisplayedHeaders(\n convertListLayoutToFieldLayouts(headers, schema!.attributes, list.metadatas)\n );\n };\n\n const [{ query }] = useQueryParams<{\n plugins?: Record<string, unknown>;\n page?: string;\n pageSize?: string;\n sort?: string;\n }>({\n page: '1',\n pageSize: list.settings.pageSize.toString(),\n sort: list.settings.defaultSortBy\n ? `${list.settings.defaultSortBy}:${list.settings.defaultSortOrder}`\n : '',\n });\n\n const params = React.useMemo(() => buildValidParams(query), [query]);\n const { data, error, isFetching } = useGetAllDocumentsQuery({\n model,\n params,\n });\n\n /**\n * If the API returns an error, display a notification\n */\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n }\n }, [error, formatAPIError, toggleNotification]);\n\n const { results = [], pagination } = data ?? {};\n\n React.useEffect(() => {\n if (pagination && pagination.pageCount > 0 && pagination.page > pagination.pageCount) {\n navigate(\n {\n search: stringify({\n ...query,\n page: pagination.pageCount,\n }),\n },\n { replace: true }\n );\n }\n }, [pagination, formatMessage, query, navigate]);\n\n const { canCreate } = useDocumentRBAC('ListViewPage', ({ canCreate }) => ({\n canCreate,\n }));\n\n const runHookWaterfall = useStrapiApp('ListViewPage', ({ runHookWaterfall }) => runHookWaterfall);\n /**\n * Run the waterfall and then inject our additional table headers.\n */\n const tableHeaders = React.useMemo(() => {\n const headers = runHookWaterfall(INJECT_COLUMN_IN_TABLE, {\n displayedHeaders,\n layout: list,\n });\n\n const formattedHeaders = headers.displayedHeaders.map<ListFieldLayout>((header) => {\n return {\n ...header,\n label: typeof header.label === 'string' ? header.label : formatMessage(header.label),\n name: `${header.name}${header.mainField ? `.${header.mainField}` : ''}`,\n };\n });\n\n if (schema?.options?.draftAndPublish) {\n formattedHeaders.push({\n attribute: {\n type: 'custom',\n },\n name: 'status',\n label: formatMessage({\n id: getTranslation(`containers.list.table-headers.status`),\n defaultMessage: 'status',\n }),\n searchable: false,\n sortable: false,\n } satisfies ListFieldLayout);\n }\n\n return formattedHeaders;\n }, [displayedHeaders, formatMessage, list, runHookWaterfall, schema?.options?.draftAndPublish]);\n\n if (isFetching) {\n return <Page.Loading />;\n }\n\n if (error) {\n return <Page.Error />;\n }\n\n const contentTypeTitle = schema?.info.displayName ?? 'Untitled';\n\n const handleRowClick = (id: Modules.Documents.ID) => () => {\n trackUsage('willEditEntryFromList');\n navigate({\n pathname: id.toString(),\n search: stringify({ plugins: query.plugins }),\n });\n };\n\n return (\n <Page.Main>\n <Page.Title>{`${contentTypeTitle}`}</Page.Title>\n <LayoutsHeaderCustom\n primaryAction={canCreate ? <CreateButton /> : null}\n subtitle={formatMessage(\n {\n id: getTranslation('pages.ListView.header-subtitle'),\n defaultMessage:\n '{number, plural, =0 {# entries} one {# entry} other {# entries}} found',\n },\n { number: pagination?.total }\n )}\n title={contentTypeTitle}\n navigationAction={<BackButton />}\n />\n <Layouts.Action\n endActions={\n <>\n <InjectionZone area=\"listView.actions\" />\n <ViewSettingsMenu\n setHeaders={handleSetHeaders}\n resetHeaders={() => setDisplayedHeaders(list.layout)}\n headers={displayedHeaders.map((header) => header.name)}\n />\n </>\n }\n startActions={\n <>\n {list.settings.searchable && (\n <SearchInput\n disabled={results.length === 0}\n label={formatMessage(\n { id: 'app.component.search.label', defaultMessage: 'Search for {target}' },\n { target: contentTypeTitle }\n )}\n placeholder={formatMessage({\n id: 'global.search',\n defaultMessage: 'Search',\n })}\n trackedEvent=\"didSearch\"\n />\n )}\n {list.settings.filterable && schema ? (\n <Filters disabled={results.length === 0} schema={schema} />\n ) : null}\n </>\n }\n />\n <Layouts.Content>\n <Flex gap={4} direction=\"column\" alignItems=\"stretch\">\n <Table.Root rows={results} headers={tableHeaders} isLoading={isFetching}>\n <TableActionsBar />\n <Table.Content>\n <Table.Head>\n <Table.HeaderCheckboxCell />\n {tableHeaders.map((header: ListFieldLayout) => (\n <Table.HeaderCell key={header.name} {...header} />\n ))}\n </Table.Head>\n <Table.Loading />\n <Table.Empty action={canCreate ? <CreateButton variant=\"secondary\" /> : null} />\n <Table.Body>\n {results.map((row) => {\n return (\n <Table.Row\n cursor=\"pointer\"\n key={row.id}\n onClick={handleRowClick(row.documentId)}\n >\n <Table.CheckboxCell id={row.id} />\n {tableHeaders.map(({ cellFormatter, ...header }) => {\n if (header.name === 'status') {\n const { status } = row;\n\n return (\n <Table.Cell key={header.name}>\n <DocumentStatus status={status} maxWidth={'min-content'} />\n </Table.Cell>\n );\n }\n if (['createdBy', 'updatedBy'].includes(header.name.split('.')[0])) {\n // Display the users full name\n // Some entries doesn't have a user assigned as creator/updater (ex: entries created through content API)\n // In this case, we display a dash\n return (\n <Table.Cell key={header.name}>\n <Typography textColor=\"neutral800\">\n {row[header.name.split('.')[0]]\n ? getDisplayName(row[header.name.split('.')[0]])\n : '-'}\n </Typography>\n </Table.Cell>\n );\n }\n if (typeof cellFormatter === 'function') {\n return (\n <Table.Cell key={header.name}>\n {/* @ts-expect-error – TODO: fix this TS error */}\n {cellFormatter(row, header, { collectionType, model })}\n </Table.Cell>\n );\n }\n return (\n <Table.Cell key={header.name}>\n <CellContent\n content={row[header.name.split('.')[0]]}\n rowId={row.documentId}\n {...header}\n />\n </Table.Cell>\n );\n })}\n {/* we stop propogation here to allow the menu to trigger it's events without triggering the row redirect */}\n <ActionsCell onClick={(e) => e.stopPropagation()}>\n <TableActions document={row} />\n </ActionsCell>\n </Table.Row>\n );\n })}\n </Table.Body>\n </Table.Content>\n </Table.Root>\n <Pagination.Root\n {...pagination}\n onPageSizeChange={() => trackUsage('willChangeNumberOfEntriesPerPage')}\n >\n <Pagination.PageSize />\n <Pagination.Links />\n </Pagination.Root>\n </Flex>\n </Layouts.Content>\n </Page.Main>\n );\n};\n\nconst ActionsCell = styled(Table.Cell)`\n display: flex;\n justify-content: flex-end;\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * TableActionsBar\n * -----------------------------------------------------------------------------------------------*/\n\nconst TableActionsBar = () => {\n const selectRow = useTable('TableActionsBar', (state) => state.selectRow);\n const [{ query }] = useQueryParams<{ plugins: { i18n: { locale: string } } }>();\n const locale = query?.plugins?.i18n?.locale;\n const prevLocale = usePrev(locale);\n\n // TODO: find a better way to reset the selected rows when the locale changes across all the app\n React.useEffect(() => {\n if (prevLocale !== locale) {\n selectRow([]);\n }\n }, [selectRow, prevLocale, locale]);\n\n return (\n <Table.ActionBar>\n <BulkActionsRenderer />\n </Table.ActionBar>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * CreateButton\n * -----------------------------------------------------------------------------------------------*/\n\ninterface CreateButtonProps extends Pick<ButtonProps, 'variant'> {}\n\nconst CreateButton = ({ variant }: CreateButtonProps) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const [{ query }] = useQueryParams<{ plugins: object }>();\n\n return (\n <Button\n variant={variant}\n tag={ReactRouterLink}\n onClick={() => {\n trackUsage('willCreateEntry', { status: 'draft' });\n }}\n startIcon={<Plus />}\n style={{ textDecoration: 'none' }}\n to={{\n pathname: 'create',\n search: stringify({ plugins: query.plugins }),\n }}\n minWidth=\"max-content\"\n marginLeft={2}\n >\n {formatMessage({\n id: getTranslation('HeaderLayout.button.label-add-entry'),\n defaultMessage: 'Create new entry',\n })}\n </Button>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedListViewPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedListViewPage = () => {\n const { slug = '' } = useParams<{\n slug: string;\n }>();\n const {\n permissions = [],\n isLoading,\n error,\n } = useRBAC(\n PERMISSIONS.map((action) => ({\n action,\n subject: slug,\n }))\n );\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n if (error || !slug) {\n return <Page.Error />;\n }\n\n return (\n <Page.Protect permissions={permissions}>\n {({ permissions }) => (\n <DocumentRBAC permissions={permissions}>\n <ListViewPage />\n </DocumentRBAC>\n )}\n </Page.Protect>\n );\n};\n\nexport { ListViewPage, ProtectedListViewPage };\n"],"names":["CREATOR_FIELDS","useIntl","useTracking","useAuth","useQueryParams","useContentTypeSchema","React","useAdminUsers","useGetContentTypeConfigurationQuery","useCollator","getMainField","getDisplayName","jsxs","Filters","jsx","useField","Combobox","ComboboxOption","parseISO","toString","Tooltip","Typography","Menu","MenuTrigger","Badge","styled","prefixFileUrlWithBackendUrl","Avatar","Flex","index","getRelationLabel","useDoc","useNotifyAT","useGetRelationsQuery","getTranslation","isOpen","Loader","Fragment","isEmpty","useTypedSelector","useRBAC","Popover","IconButton","Cog","LinkButton","ListPlus","NavLink","stringify","useDocumentLayout","checkIfAttributeIsDisplayable","TextButton","Checkbox","HOOKS","Layouts","useNavigate","useNotification","useAPIErrorHandler","usePrev","isEqual","convertListLayoutToFieldLayouts","buildValidParams","useGetAllDocumentsQuery","useDocumentRBAC","canCreate","useStrapiApp","runHookWaterfall","Page","BackButton","InjectionZone","SearchInput","Table","DocumentStatus","TableActions","Pagination","useTable","BulkActionsRenderer","Button","ReactRouterLink","Plus","useParams","PERMISSIONS","permissions","DocumentRBAC"],"mappings":"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"}
@@ -5,7 +5,7 @@ import { Plus } from "@strapi/icons";
5
5
  import { EmptyDocuments } from "@strapi/icons/symbols";
6
6
  import { useIntl } from "react-intl";
7
7
  import { NavLink } from "react-router-dom";
8
- import { g as getTranslation } from "./index-CwRRo1V9.mjs";
8
+ import { g as getTranslation } from "./index-DrNe6ctw.mjs";
9
9
  const NoContentType = () => {
10
10
  const { formatMessage } = useIntl();
11
11
  return /* @__PURE__ */ jsxs(Page.Main, { children: [
@@ -24,7 +24,7 @@ const NoContentType = () => {
24
24
  action: /* @__PURE__ */ jsx(
25
25
  LinkButton,
26
26
  {
27
- as: NavLink,
27
+ tag: NavLink,
28
28
  variant: "secondary",
29
29
  startIcon: /* @__PURE__ */ jsx(Plus, {}),
30
30
  to: "/plugins/content-type-builder/content-types/create-content-type",
@@ -48,4 +48,4 @@ const NoContentType = () => {
48
48
  export {
49
49
  NoContentType
50
50
  };
51
- //# sourceMappingURL=NoContentTypePage-DSPxnxxp.mjs.map
51
+ //# sourceMappingURL=NoContentTypePage-Ckem6Ll6.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NoContentTypePage-Ckem6Ll6.mjs","sources":["../../admin/src/pages/NoContentTypePage.tsx"],"sourcesContent":["import { Page, Layouts } from '@strapi/admin/strapi-admin';\nimport { EmptyStateLayout, LinkButton } from '@strapi/design-system';\nimport { Plus } from '@strapi/icons';\nimport { EmptyDocuments } from '@strapi/icons/symbols';\nimport { useIntl } from 'react-intl';\nimport { NavLink } from 'react-router-dom';\n\nimport { getTranslation } from '../utils/translations';\n\nconst NoContentType = () => {\n const { formatMessage } = useIntl();\n\n return (\n <Page.Main>\n <Layouts.Header\n title={formatMessage({\n id: getTranslation('header.name'),\n defaultMessage: 'Content',\n })}\n />\n <Layouts.Content>\n <EmptyStateLayout\n action={\n <LinkButton\n tag={NavLink}\n variant=\"secondary\"\n startIcon={<Plus />}\n to=\"/plugins/content-type-builder/content-types/create-content-type\"\n >\n {formatMessage({\n id: 'app.components.HomePage.create',\n defaultMessage: 'Create your first Content-type',\n })}\n </LinkButton>\n }\n content={formatMessage({\n id: 'content-manager.pages.NoContentType.text',\n defaultMessage:\n \"You don't have any content yet, we recommend you to create your first Content-Type.\",\n })}\n hasRadius\n icon={<EmptyDocuments width=\"16rem\" />}\n shadow=\"tableShadow\"\n />\n </Layouts.Content>\n </Page.Main>\n );\n};\n\nexport { NoContentType };\n"],"names":[],"mappings":";;;;;;;;AASA,MAAM,gBAAgB,MAAM;AACpB,QAAA,EAAE,kBAAkB;AAGxB,SAAA,qBAAC,KAAK,MAAL,EACC,UAAA;AAAA,IAAA;AAAA,MAAC,QAAQ;AAAA,MAAR;AAAA,QACC,OAAO,cAAc;AAAA,UACnB,IAAI,eAAe,aAAa;AAAA,UAChC,gBAAgB;AAAA,QAAA,CACjB;AAAA,MAAA;AAAA,IACH;AAAA,IACA,oBAAC,QAAQ,SAAR,EACC,UAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,QACE;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,KAAK;AAAA,YACL,SAAQ;AAAA,YACR,+BAAY,MAAK,EAAA;AAAA,YACjB,IAAG;AAAA,YAEF,UAAc,cAAA;AAAA,cACb,IAAI;AAAA,cACJ,gBAAgB;AAAA,YAAA,CACjB;AAAA,UAAA;AAAA,QACH;AAAA,QAEF,SAAS,cAAc;AAAA,UACrB,IAAI;AAAA,UACJ,gBACE;AAAA,QAAA,CACH;AAAA,QACD,WAAS;AAAA,QACT,MAAM,oBAAC,gBAAe,EAAA,OAAM,QAAQ,CAAA;AAAA,QACpC,QAAO;AAAA,MAAA;AAAA,IAAA,GAEX;AAAA,EACF,EAAA,CAAA;AAEJ;"}
@@ -7,7 +7,7 @@ const Icons = require("@strapi/icons");
7
7
  const Symbols = require("@strapi/icons/symbols");
8
8
  const reactIntl = require("react-intl");
9
9
  const reactRouterDom = require("react-router-dom");
10
- const index = require("./index-C6AH2hEl.js");
10
+ const index = require("./index-Dd0nXyJF.js");
11
11
  const NoContentType = () => {
12
12
  const { formatMessage } = reactIntl.useIntl();
13
13
  return /* @__PURE__ */ jsxRuntime.jsxs(strapiAdmin.Page.Main, { children: [
@@ -26,7 +26,7 @@ const NoContentType = () => {
26
26
  action: /* @__PURE__ */ jsxRuntime.jsx(
27
27
  designSystem.LinkButton,
28
28
  {
29
- as: reactRouterDom.NavLink,
29
+ tag: reactRouterDom.NavLink,
30
30
  variant: "secondary",
31
31
  startIcon: /* @__PURE__ */ jsxRuntime.jsx(Icons.Plus, {}),
32
32
  to: "/plugins/content-type-builder/content-types/create-content-type",
@@ -48,4 +48,4 @@ const NoContentType = () => {
48
48
  ] });
49
49
  };
50
50
  exports.NoContentType = NoContentType;
51
- //# sourceMappingURL=NoContentTypePage-DOC_yWOf.js.map
51
+ //# sourceMappingURL=NoContentTypePage-DqgdUfyn.js.map