@strapi/upload 5.9.0 → 5.10.0

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 (214) hide show
  1. package/dist/admin/chunks/App-BJY37n6T.js +993 -0
  2. package/dist/admin/chunks/App-BJY37n6T.js.map +1 -0
  3. package/dist/admin/chunks/App-DcpAXZuK.mjs +972 -0
  4. package/dist/admin/chunks/App-DcpAXZuK.mjs.map +1 -0
  5. package/dist/admin/chunks/ConfigureTheView-Bwf5I3Vq.mjs +276 -0
  6. package/dist/admin/chunks/ConfigureTheView-Bwf5I3Vq.mjs.map +1 -0
  7. package/dist/admin/chunks/ConfigureTheView-CnUk2xYx.js +297 -0
  8. package/dist/admin/chunks/ConfigureTheView-CnUk2xYx.js.map +1 -0
  9. package/dist/admin/chunks/SettingsPage-7DUsHuJU.js +354 -0
  10. package/dist/admin/chunks/SettingsPage-7DUsHuJU.js.map +1 -0
  11. package/dist/admin/chunks/SettingsPage-DJe31MUj.mjs +332 -0
  12. package/dist/admin/chunks/SettingsPage-DJe31MUj.mjs.map +1 -0
  13. package/dist/admin/chunks/ca-Bi4qskZD.mjs +120 -0
  14. package/dist/{_chunks/es-CuWi2pOn.mjs.map → admin/chunks/ca-Bi4qskZD.mjs.map} +1 -1
  15. package/dist/admin/chunks/ca-pCOhKIn8.js +122 -0
  16. package/dist/{_chunks/es-DWFtw_h4.js.map → admin/chunks/ca-pCOhKIn8.js.map} +1 -1
  17. package/dist/admin/chunks/de-BlbX8Dl_.mjs +106 -0
  18. package/dist/{_chunks/pl-Cj8jChOO.mjs.map → admin/chunks/de-BlbX8Dl_.mjs.map} +1 -1
  19. package/dist/admin/chunks/de-DUjKLmOP.js +108 -0
  20. package/dist/{_chunks/de-uGb_Pkq7.js.map → admin/chunks/de-DUjKLmOP.js.map} +1 -1
  21. package/dist/admin/chunks/dk-C2ydE6A7.mjs +102 -0
  22. package/dist/{_chunks/ko-vJl9kPpn.mjs.map → admin/chunks/dk-C2ydE6A7.mjs.map} +1 -1
  23. package/dist/admin/chunks/dk-DSsspA0e.js +104 -0
  24. package/dist/{_chunks/dk-Cd8oFO-O.js.map → admin/chunks/dk-DSsspA0e.js.map} +1 -1
  25. package/dist/admin/chunks/en-Bw_Cb2IV.mjs +143 -0
  26. package/dist/{_chunks/en-oDx2Gnre.mjs.map → admin/chunks/en-Bw_Cb2IV.mjs.map} +1 -1
  27. package/dist/admin/chunks/en-UjETkewz.js +145 -0
  28. package/dist/{_chunks/en-BcOqhiNe.js.map → admin/chunks/en-UjETkewz.js.map} +1 -1
  29. package/dist/admin/chunks/es-CiEgbw0k.mjs +119 -0
  30. package/dist/{_chunks/ca-B2_I-q1t.mjs.map → admin/chunks/es-CiEgbw0k.mjs.map} +1 -1
  31. package/dist/admin/chunks/es-qAL8YcZz.js +121 -0
  32. package/dist/{_chunks/ca-BUpuZx8N.js.map → admin/chunks/es-qAL8YcZz.js.map} +1 -1
  33. package/dist/admin/chunks/fr-BL0Uyj6j.js +145 -0
  34. package/dist/admin/chunks/fr-BL0Uyj6j.js.map +1 -0
  35. package/dist/admin/chunks/fr-CwRt2FJu.mjs +143 -0
  36. package/dist/admin/chunks/fr-CwRt2FJu.mjs.map +1 -0
  37. package/dist/admin/chunks/he-BAmhVpfZ.js +77 -0
  38. package/dist/admin/chunks/he-BAmhVpfZ.js.map +1 -0
  39. package/dist/admin/chunks/he-DdpYNQdt.mjs +75 -0
  40. package/dist/admin/chunks/he-DdpYNQdt.mjs.map +1 -0
  41. package/dist/admin/chunks/index-DAhjYc5x.mjs +7350 -0
  42. package/dist/admin/chunks/index-DAhjYc5x.mjs.map +1 -0
  43. package/dist/admin/chunks/index-jZnIE90w.js +7407 -0
  44. package/dist/admin/chunks/index-jZnIE90w.js.map +1 -0
  45. package/dist/admin/chunks/it-Be4kgSNB.mjs +75 -0
  46. package/dist/admin/chunks/it-Be4kgSNB.mjs.map +1 -0
  47. package/dist/admin/chunks/it-_NQZYepl.js +77 -0
  48. package/dist/admin/chunks/it-_NQZYepl.js.map +1 -0
  49. package/dist/admin/chunks/ja-B75QiyXf.js +77 -0
  50. package/dist/admin/chunks/ja-B75QiyXf.js.map +1 -0
  51. package/dist/admin/chunks/ja-U1NhT0bU.mjs +75 -0
  52. package/dist/admin/chunks/ja-U1NhT0bU.mjs.map +1 -0
  53. package/dist/admin/chunks/ko-BOvUcJqv.js +107 -0
  54. package/dist/{_chunks/pl-esgZ7ltN.js.map → admin/chunks/ko-BOvUcJqv.js.map} +1 -1
  55. package/dist/admin/chunks/ko-BciqXefq.mjs +105 -0
  56. package/dist/{_chunks/de-A7mEKx6c.mjs.map → admin/chunks/ko-BciqXefq.mjs.map} +1 -1
  57. package/dist/admin/chunks/ms-B7Zl6Lm9.js +69 -0
  58. package/dist/admin/chunks/ms-B7Zl6Lm9.js.map +1 -0
  59. package/dist/admin/chunks/ms-D-8McNeg.mjs +67 -0
  60. package/dist/admin/chunks/ms-D-8McNeg.mjs.map +1 -0
  61. package/dist/admin/chunks/pl-DdUYocl5.mjs +104 -0
  62. package/dist/{_chunks/dk-BPfkJb9q.mjs.map → admin/chunks/pl-DdUYocl5.mjs.map} +1 -1
  63. package/dist/admin/chunks/pl-cYDYHOEf.js +106 -0
  64. package/dist/{_chunks/ko-Pzj-818C.js.map → admin/chunks/pl-cYDYHOEf.js.map} +1 -1
  65. package/dist/admin/chunks/pt-BR-D1u_azCM.js +77 -0
  66. package/dist/admin/chunks/pt-BR-D1u_azCM.js.map +1 -0
  67. package/dist/admin/chunks/pt-BR-Demjoq41.mjs +75 -0
  68. package/dist/admin/chunks/pt-BR-Demjoq41.mjs.map +1 -0
  69. package/dist/admin/chunks/pt-D8is2LpS.mjs +75 -0
  70. package/dist/admin/chunks/pt-D8is2LpS.mjs.map +1 -0
  71. package/dist/admin/chunks/pt-L2DZeTPL.js +77 -0
  72. package/dist/admin/chunks/pt-L2DZeTPL.js.map +1 -0
  73. package/dist/admin/chunks/ru-CGgHRTey.mjs +75 -0
  74. package/dist/admin/chunks/ru-CGgHRTey.mjs.map +1 -0
  75. package/dist/admin/chunks/ru-Uxbk_WWv.js +77 -0
  76. package/dist/admin/chunks/ru-Uxbk_WWv.js.map +1 -0
  77. package/dist/admin/chunks/sk-BlLP5HAX.js +123 -0
  78. package/dist/admin/chunks/sk-BlLP5HAX.js.map +1 -0
  79. package/dist/admin/chunks/sk-xtSwaPXq.mjs +121 -0
  80. package/dist/admin/chunks/sk-xtSwaPXq.mjs.map +1 -0
  81. package/dist/admin/chunks/th-BOpLVfmg.mjs +75 -0
  82. package/dist/admin/chunks/th-BOpLVfmg.mjs.map +1 -0
  83. package/dist/admin/chunks/th-DNxPLegS.js +77 -0
  84. package/dist/admin/chunks/th-DNxPLegS.js.map +1 -0
  85. package/dist/admin/chunks/tr-BmAPh-f1.mjs +121 -0
  86. package/dist/admin/chunks/tr-BmAPh-f1.mjs.map +1 -0
  87. package/dist/admin/chunks/tr-DWgXG75k.js +123 -0
  88. package/dist/admin/chunks/tr-DWgXG75k.js.map +1 -0
  89. package/dist/admin/chunks/uk-CMvuEdG-.mjs +72 -0
  90. package/dist/admin/chunks/uk-CMvuEdG-.mjs.map +1 -0
  91. package/dist/admin/chunks/uk-D1_rBLhp.js +74 -0
  92. package/dist/admin/chunks/uk-D1_rBLhp.js.map +1 -0
  93. package/dist/admin/chunks/zh-BIl0qgBy.mjs +128 -0
  94. package/dist/admin/chunks/zh-BIl0qgBy.mjs.map +1 -0
  95. package/dist/admin/chunks/zh-Hans-B1GabBRx.mjs +151 -0
  96. package/dist/{_chunks/zh-Hans-Cpmhg8uH.mjs.map → admin/chunks/zh-Hans-B1GabBRx.mjs.map} +1 -1
  97. package/dist/admin/chunks/zh-Hans-B8qxMQIl.js +153 -0
  98. package/dist/{_chunks/zh-Hans-k_xAc6nm.js.map → admin/chunks/zh-Hans-B8qxMQIl.js.map} +1 -1
  99. package/dist/admin/chunks/zh-MemsyMV6.js +130 -0
  100. package/dist/admin/chunks/zh-MemsyMV6.js.map +1 -0
  101. package/dist/admin/index.js +29 -6
  102. package/dist/admin/index.js.map +1 -1
  103. package/dist/admin/index.mjs +24 -8
  104. package/dist/admin/index.mjs.map +1 -1
  105. package/dist/admin/src/hooks/useMediaLibraryPermissions.d.ts +2 -5
  106. package/dist/admin/src/hooks/useRemoveAsset.d.ts +6 -64
  107. package/dist/server/chunks/graphql-BTbIs_EU.js +116 -0
  108. package/dist/server/chunks/graphql-BTbIs_EU.js.map +1 -0
  109. package/dist/server/chunks/graphql-CCPJbCFt.mjs +114 -0
  110. package/dist/server/chunks/graphql-CCPJbCFt.mjs.map +1 -0
  111. package/dist/server/chunks/index-BU4qzb-i.mjs +3161 -0
  112. package/dist/server/chunks/index-BU4qzb-i.mjs.map +1 -0
  113. package/dist/server/chunks/index-BkUy20d9.js +3164 -0
  114. package/dist/server/chunks/index-BkUy20d9.js.map +1 -0
  115. package/dist/server/index.js +19 -2
  116. package/dist/server/index.js.map +1 -1
  117. package/dist/server/index.mjs +14 -4
  118. package/dist/server/index.mjs.map +1 -1
  119. package/dist/server/src/controllers/validation/admin/folder-file.d.ts.map +1 -1
  120. package/dist/shared/contracts/configuration.d.ts +1 -1
  121. package/dist/shared/contracts/settings.d.ts +1 -1
  122. package/package.json +13 -9
  123. package/dist/_chunks/App-BLY6RlTm.mjs +0 -844
  124. package/dist/_chunks/App-BLY6RlTm.mjs.map +0 -1
  125. package/dist/_chunks/App-DNScJAhi.js +0 -864
  126. package/dist/_chunks/App-DNScJAhi.js.map +0 -1
  127. package/dist/_chunks/ConfigureTheView-CJbBTq0t.js +0 -252
  128. package/dist/_chunks/ConfigureTheView-CJbBTq0t.js.map +0 -1
  129. package/dist/_chunks/ConfigureTheView-Dk28Sh2k.mjs +0 -230
  130. package/dist/_chunks/ConfigureTheView-Dk28Sh2k.mjs.map +0 -1
  131. package/dist/_chunks/SettingsPage-CrvbJCia.js +0 -285
  132. package/dist/_chunks/SettingsPage-CrvbJCia.js.map +0 -1
  133. package/dist/_chunks/SettingsPage-DjNyJDaf.mjs +0 -264
  134. package/dist/_chunks/SettingsPage-DjNyJDaf.mjs.map +0 -1
  135. package/dist/_chunks/ca-B2_I-q1t.mjs +0 -121
  136. package/dist/_chunks/ca-BUpuZx8N.js +0 -121
  137. package/dist/_chunks/de-A7mEKx6c.mjs +0 -107
  138. package/dist/_chunks/de-uGb_Pkq7.js +0 -107
  139. package/dist/_chunks/dk-BPfkJb9q.mjs +0 -103
  140. package/dist/_chunks/dk-Cd8oFO-O.js +0 -103
  141. package/dist/_chunks/en-BcOqhiNe.js +0 -144
  142. package/dist/_chunks/en-oDx2Gnre.mjs +0 -144
  143. package/dist/_chunks/es-CuWi2pOn.mjs +0 -120
  144. package/dist/_chunks/es-DWFtw_h4.js +0 -120
  145. package/dist/_chunks/fr-BN6ndmWf.mjs +0 -144
  146. package/dist/_chunks/fr-BN6ndmWf.mjs.map +0 -1
  147. package/dist/_chunks/fr-D2bop66d.js +0 -144
  148. package/dist/_chunks/fr-D2bop66d.js.map +0 -1
  149. package/dist/_chunks/graphql-DMPTPlvx.mjs +0 -71
  150. package/dist/_chunks/graphql-DMPTPlvx.mjs.map +0 -1
  151. package/dist/_chunks/graphql-QF5Y36Qj.js +0 -71
  152. package/dist/_chunks/graphql-QF5Y36Qj.js.map +0 -1
  153. package/dist/_chunks/he-BpxHjaZg.js +0 -76
  154. package/dist/_chunks/he-BpxHjaZg.js.map +0 -1
  155. package/dist/_chunks/he-C9ZOXBB-.mjs +0 -76
  156. package/dist/_chunks/he-C9ZOXBB-.mjs.map +0 -1
  157. package/dist/_chunks/index-BfAVIhAL.js +0 -6144
  158. package/dist/_chunks/index-BfAVIhAL.js.map +0 -1
  159. package/dist/_chunks/index-D57iKFts.js +0 -2721
  160. package/dist/_chunks/index-D57iKFts.js.map +0 -1
  161. package/dist/_chunks/index-DH9hUSe3.mjs +0 -6119
  162. package/dist/_chunks/index-DH9hUSe3.mjs.map +0 -1
  163. package/dist/_chunks/index-sOlgMDiZ.mjs +0 -2711
  164. package/dist/_chunks/index-sOlgMDiZ.mjs.map +0 -1
  165. package/dist/_chunks/it-B7rmoZNx.mjs +0 -76
  166. package/dist/_chunks/it-B7rmoZNx.mjs.map +0 -1
  167. package/dist/_chunks/it-BKCWXl8t.js +0 -76
  168. package/dist/_chunks/it-BKCWXl8t.js.map +0 -1
  169. package/dist/_chunks/ja-DlaJTi_3.mjs +0 -76
  170. package/dist/_chunks/ja-DlaJTi_3.mjs.map +0 -1
  171. package/dist/_chunks/ja-ajHzIJz6.js +0 -76
  172. package/dist/_chunks/ja-ajHzIJz6.js.map +0 -1
  173. package/dist/_chunks/ko-Pzj-818C.js +0 -106
  174. package/dist/_chunks/ko-vJl9kPpn.mjs +0 -106
  175. package/dist/_chunks/ms-CqwG8v8l.mjs +0 -68
  176. package/dist/_chunks/ms-CqwG8v8l.mjs.map +0 -1
  177. package/dist/_chunks/ms-h3gjldBy.js +0 -68
  178. package/dist/_chunks/ms-h3gjldBy.js.map +0 -1
  179. package/dist/_chunks/pl-Cj8jChOO.mjs +0 -105
  180. package/dist/_chunks/pl-esgZ7ltN.js +0 -105
  181. package/dist/_chunks/pt-BR-B4LJHJIp.mjs +0 -76
  182. package/dist/_chunks/pt-BR-B4LJHJIp.mjs.map +0 -1
  183. package/dist/_chunks/pt-BR-Cazr7Z5I.js +0 -76
  184. package/dist/_chunks/pt-BR-Cazr7Z5I.js.map +0 -1
  185. package/dist/_chunks/pt-CNOOM_7x.mjs +0 -76
  186. package/dist/_chunks/pt-CNOOM_7x.mjs.map +0 -1
  187. package/dist/_chunks/pt-cbUnkHM5.js +0 -76
  188. package/dist/_chunks/pt-cbUnkHM5.js.map +0 -1
  189. package/dist/_chunks/ru-DqglvSUC.mjs +0 -76
  190. package/dist/_chunks/ru-DqglvSUC.mjs.map +0 -1
  191. package/dist/_chunks/ru-H6MzFUxp.js +0 -76
  192. package/dist/_chunks/ru-H6MzFUxp.js.map +0 -1
  193. package/dist/_chunks/sk-CZxC4dFY.js +0 -122
  194. package/dist/_chunks/sk-CZxC4dFY.js.map +0 -1
  195. package/dist/_chunks/sk-Dgpb3lnz.mjs +0 -122
  196. package/dist/_chunks/sk-Dgpb3lnz.mjs.map +0 -1
  197. package/dist/_chunks/th-C6unJZ8j.js +0 -76
  198. package/dist/_chunks/th-C6unJZ8j.js.map +0 -1
  199. package/dist/_chunks/th-DRfzuiFf.mjs +0 -76
  200. package/dist/_chunks/th-DRfzuiFf.mjs.map +0 -1
  201. package/dist/_chunks/tr--GzWXE_A.mjs +0 -122
  202. package/dist/_chunks/tr--GzWXE_A.mjs.map +0 -1
  203. package/dist/_chunks/tr-CY6AwX50.js +0 -122
  204. package/dist/_chunks/tr-CY6AwX50.js.map +0 -1
  205. package/dist/_chunks/uk-BniyNsD4.js +0 -73
  206. package/dist/_chunks/uk-BniyNsD4.js.map +0 -1
  207. package/dist/_chunks/uk-DVMT2Piq.mjs +0 -73
  208. package/dist/_chunks/uk-DVMT2Piq.mjs.map +0 -1
  209. package/dist/_chunks/zh-CsZw0IpM.js +0 -129
  210. package/dist/_chunks/zh-CsZw0IpM.js.map +0 -1
  211. package/dist/_chunks/zh-HOnih0is.mjs +0 -129
  212. package/dist/_chunks/zh-HOnih0is.mjs.map +0 -1
  213. package/dist/_chunks/zh-Hans-Cpmhg8uH.mjs +0 -152
  214. package/dist/_chunks/zh-Hans-k_xAc6nm.js +0 -152
@@ -1,864 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const jsxRuntime = require("react/jsx-runtime");
4
- const React = require("react");
5
- const strapiAdmin = require("@strapi/admin/strapi-admin");
6
- const reactIntl = require("react-intl");
7
- const reactRouterDom = require("react-router-dom");
8
- const index = require("./index-BfAVIhAL.js");
9
- require("byte-size");
10
- require("date-fns");
11
- const qs = require("qs");
12
- const designSystem = require("@strapi/design-system");
13
- const icons = require("@strapi/icons");
14
- const styledComponents = require("styled-components");
15
- const formik = require("formik");
16
- const isEmpty = require("lodash/isEmpty");
17
- const reactQuery = require("react-query");
18
- const symbols = require("@strapi/icons/symbols");
19
- const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
20
- function _interopNamespace(e) {
21
- if (e && e.__esModule) return e;
22
- const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
23
- if (e) {
24
- for (const k in e) {
25
- if (k !== "default") {
26
- const d = Object.getOwnPropertyDescriptor(e, k);
27
- Object.defineProperty(n, k, d.get ? d : {
28
- enumerable: true,
29
- get: () => e[k]
30
- });
31
- }
32
- }
33
- }
34
- n.default = e;
35
- return Object.freeze(n);
36
- }
37
- const React__namespace = /* @__PURE__ */ _interopNamespace(React);
38
- const isEmpty__default = /* @__PURE__ */ _interopDefault(isEmpty);
39
- const getBreadcrumbDataML = (folder, { pathname, query }) => {
40
- const data = [
41
- {
42
- id: null,
43
- label: { id: index.getTrad("plugin.name"), defaultMessage: "Media Library" },
44
- href: folder ? index.getFolderURL(pathname, query || {}) : void 0
45
- }
46
- ];
47
- if (folder?.parent && typeof folder?.parent !== "number" && folder?.parent?.parent) {
48
- data.push([]);
49
- }
50
- if (folder?.parent && typeof folder.parent !== "number") {
51
- data.push({
52
- id: folder.parent.id,
53
- label: folder.parent.name,
54
- href: index.getFolderURL(pathname, query || {}, {
55
- folder: folder.parent.id?.toString(),
56
- folderPath: folder.parent.path
57
- })
58
- });
59
- }
60
- if (folder) {
61
- data.push({
62
- id: folder.id,
63
- label: folder.name
64
- });
65
- }
66
- return data;
67
- };
68
- const FolderCardCheckbox = (props) => {
69
- const { id } = index.useFolderCard();
70
- return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { position: "relative", zIndex: 2, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Checkbox, { "aria-labelledby": `${id}-title`, ...props }) });
71
- };
72
- const BulkDeleteButton = ({ selected, onSuccess }) => {
73
- const { formatMessage } = reactIntl.useIntl();
74
- const { remove } = index.useBulkRemove();
75
- const handleConfirmRemove = async () => {
76
- await remove(selected);
77
- onSuccess();
78
- };
79
- return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Dialog.Root, { children: [
80
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Dialog.Trigger, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Button, { variant: "danger-light", size: "S", startIcon: /* @__PURE__ */ jsxRuntime.jsx(icons.Trash, {}), children: formatMessage({ id: "global.delete", defaultMessage: "Delete" }) }) }),
81
- /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.ConfirmDialog, { onConfirm: handleConfirmRemove })
82
- ] });
83
- };
84
- const useBulkMove = () => {
85
- const { formatMessage } = reactIntl.useIntl();
86
- const { toggleNotification } = strapiAdmin.useNotification();
87
- const queryClient = reactQuery.useQueryClient();
88
- const { post } = strapiAdmin.useFetchClient();
89
- const bulkMoveQuery = ({ destinationFolderId, filesAndFolders }) => {
90
- const payload = filesAndFolders.reduce((acc, selected) => {
91
- const { id, type } = selected;
92
- const key = type === "asset" ? "fileIds" : "folderIds";
93
- if (!acc[key]) {
94
- acc[key] = [];
95
- }
96
- acc[key].push(id);
97
- return acc;
98
- }, {});
99
- return post("/upload/actions/bulk-move", { ...payload, destinationFolderId });
100
- };
101
- const mutation = reactQuery.useMutation(bulkMoveQuery, {
102
- onSuccess(res) {
103
- const {
104
- data: { data }
105
- } = res;
106
- if (data?.files?.length > 0) {
107
- queryClient.refetchQueries([index.pluginId, "assets"], { active: true });
108
- queryClient.refetchQueries([index.pluginId, "asset-count"], { active: true });
109
- }
110
- queryClient.refetchQueries([index.pluginId, "folders"], { active: true });
111
- toggleNotification({
112
- type: "success",
113
- message: formatMessage({
114
- id: index.getTrad("modal.move.success-label"),
115
- defaultMessage: "Elements have been moved successfully."
116
- })
117
- });
118
- }
119
- });
120
- const move = (destinationFolderId, filesAndFolders) => mutation.mutateAsync({ destinationFolderId, filesAndFolders });
121
- return { ...mutation, move };
122
- };
123
- const BulkMoveDialog = ({ onClose, selected = [], currentFolder }) => {
124
- const { formatMessage } = reactIntl.useIntl();
125
- const { data: folderStructure, isLoading } = index.useFolderStructure();
126
- const { move } = useBulkMove();
127
- if (!folderStructure) {
128
- return null;
129
- }
130
- const handleSubmit = async (values, { setErrors }) => {
131
- try {
132
- if (typeof values.destination !== "string") {
133
- const destinationValue = values.destination.value;
134
- await move(destinationValue, selected);
135
- onClose();
136
- }
137
- } catch (error) {
138
- const normalizedError = index.normalizeAPIError(error);
139
- if (normalizedError && "errors" in normalizedError) {
140
- const formikErrors = normalizedError.errors?.reduce(
141
- (acc, error2) => {
142
- acc[error2.values?.path?.length || "destination"] = error2.defaultMessage;
143
- return acc;
144
- },
145
- {}
146
- );
147
- if (!isEmpty__default.default(formikErrors)) {
148
- setErrors(formikErrors);
149
- }
150
- }
151
- }
152
- };
153
- if (isLoading) {
154
- return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Modal.Content, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Modal.Body, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { justifyContent: "center", paddingTop: 4, paddingBottom: 4, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Loader, { children: formatMessage({
155
- id: index.getTrad("content.isLoading"),
156
- defaultMessage: "Content is loading."
157
- }) }) }) }) });
158
- }
159
- const initialFormData = {
160
- destination: {
161
- value: currentFolder?.id || "",
162
- label: currentFolder?.name || folderStructure[0].label
163
- }
164
- };
165
- return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Modal.Content, { children: /* @__PURE__ */ jsxRuntime.jsx(formik.Formik, { validateOnChange: false, onSubmit: handleSubmit, initialValues: initialFormData, children: ({ values, errors, setFieldValue }) => /* @__PURE__ */ jsxRuntime.jsxs(formik.Form, { noValidate: true, children: [
166
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Modal.Header, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Modal.Title, { children: formatMessage({
167
- id: index.getTrad("modal.folder.move.title"),
168
- defaultMessage: "Move elements to"
169
- }) }) }),
170
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Modal.Body, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Root, { gap: 4, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Item, { xs: 12, col: 12, direction: "column", alignItems: "stretch", children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Field.Root, { id: "folder-destination", children: [
171
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Label, { children: formatMessage({
172
- id: index.getTrad("form.input.label.folder-location"),
173
- defaultMessage: "Location"
174
- }) }),
175
- /* @__PURE__ */ jsxRuntime.jsx(
176
- index.SelectTree,
177
- {
178
- options: folderStructure,
179
- onChange: (value) => {
180
- setFieldValue("destination", value);
181
- },
182
- defaultValue: typeof values.destination !== "string" ? values.destination : void 0,
183
- name: "destination",
184
- menuPortalTarget: document.querySelector("body"),
185
- inputId: "folder-destination",
186
- error: errors?.destination,
187
- ariaErrorMessage: "destination-error"
188
- }
189
- ),
190
- errors.destination && /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "pi", tag: "p", textColor: "danger600", children: errors.destination })
191
- ] }) }) }) }),
192
- /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Modal.Footer, { children: [
193
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Modal.Close, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Button, { variant: "tertiary", name: "cancel", children: formatMessage({ id: "cancel", defaultMessage: "Cancel" }) }) }),
194
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Button, { type: "submit", loading: isLoading, children: formatMessage({ id: "modal.folder.move.submit", defaultMessage: "Move" }) })
195
- ] })
196
- ] }) }) });
197
- };
198
- const BulkMoveButton = ({
199
- selected = [],
200
- onSuccess,
201
- currentFolder
202
- }) => {
203
- const { formatMessage } = reactIntl.useIntl();
204
- const [showConfirmDialog, setShowConfirmDialog] = React__namespace.useState(false);
205
- const handleConfirmMove = () => {
206
- setShowConfirmDialog(false);
207
- onSuccess();
208
- };
209
- return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Modal.Root, { open: showConfirmDialog, onOpenChange: setShowConfirmDialog, children: [
210
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Modal.Trigger, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Button, { variant: "secondary", size: "S", startIcon: /* @__PURE__ */ jsxRuntime.jsx(icons.Folder, {}), children: formatMessage({ id: "global.move", defaultMessage: "Move" }) }) }),
211
- /* @__PURE__ */ jsxRuntime.jsx(
212
- BulkMoveDialog,
213
- {
214
- currentFolder,
215
- onClose: handleConfirmMove,
216
- selected
217
- }
218
- )
219
- ] });
220
- };
221
- const BulkActions = ({ selected = [], onSuccess, currentFolder }) => {
222
- const { formatMessage } = reactIntl.useIntl();
223
- const numberAssets = selected?.reduce(function(_this, val) {
224
- return val?.type === "folder" && "files" in val && val?.files && "count" in val.files ? _this + val?.files?.count : _this + 1;
225
- }, 0);
226
- return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 2, paddingBottom: 5, children: [
227
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "epsilon", textColor: "neutral600", children: formatMessage(
228
- {
229
- id: index.getTrad("list.assets.selected"),
230
- defaultMessage: "{numberFolders, plural, one {1 folder} other {# folders}} - {numberAssets, plural, one {1 asset} other {# assets}} selected"
231
- },
232
- {
233
- numberFolders: selected?.filter(({ type }) => type === "folder").length,
234
- numberAssets
235
- }
236
- ) }),
237
- /* @__PURE__ */ jsxRuntime.jsx(
238
- BulkDeleteButton,
239
- {
240
- selected,
241
- onSuccess
242
- }
243
- ),
244
- /* @__PURE__ */ jsxRuntime.jsx(
245
- BulkMoveButton,
246
- {
247
- currentFolder,
248
- selected,
249
- onSuccess
250
- }
251
- )
252
- ] });
253
- };
254
- const getContentIntlMessage = ({
255
- isFiltering,
256
- canCreate,
257
- canRead
258
- }) => {
259
- if (isFiltering) {
260
- return {
261
- id: "list.assets-empty.title-withSearch",
262
- defaultMessage: "There are no elements with the applied filters"
263
- };
264
- }
265
- if (canRead) {
266
- if (canCreate) {
267
- return {
268
- id: "list.assets.empty-upload",
269
- defaultMessage: "Upload your first assets..."
270
- };
271
- }
272
- return {
273
- id: "list.assets.empty",
274
- defaultMessage: "Media Library is empty"
275
- };
276
- }
277
- return {
278
- id: "header.actions.no-permissions",
279
- defaultMessage: "No permissions to view"
280
- };
281
- };
282
- const EmptyOrNoPermissions = ({
283
- canCreate,
284
- isFiltering,
285
- canRead,
286
- onActionClick
287
- }) => {
288
- const { formatMessage } = reactIntl.useIntl();
289
- const content = getContentIntlMessage({ isFiltering, canCreate, canRead });
290
- return /* @__PURE__ */ jsxRuntime.jsx(
291
- index.EmptyAssets,
292
- {
293
- icon: !canRead ? symbols.EmptyPermissions : void 0,
294
- action: canCreate && !isFiltering && /* @__PURE__ */ jsxRuntime.jsx(designSystem.Button, { variant: "secondary", startIcon: /* @__PURE__ */ jsxRuntime.jsx(icons.Plus, {}), onClick: onActionClick, children: formatMessage({
295
- id: index.getTrad("header.actions.add-assets"),
296
- defaultMessage: "Add new assets"
297
- }) }),
298
- content: formatMessage({
299
- ...content,
300
- id: index.getTrad(content.id)
301
- })
302
- }
303
- );
304
- };
305
- const Filters = () => {
306
- const [open, setOpen] = React__namespace.useState(false);
307
- const { formatMessage } = reactIntl.useIntl();
308
- const { trackUsage } = strapiAdmin.useTracking();
309
- const [{ query }, setQuery] = strapiAdmin.useQueryParams();
310
- const filters = query?.filters?.$and || [];
311
- const handleRemoveFilter = (nextFilters) => {
312
- setQuery({ filters: { $and: nextFilters }, page: 1 });
313
- };
314
- const handleSubmit = (filters2) => {
315
- trackUsage("didFilterMediaLibraryElements", {
316
- location: "content-manager",
317
- filter: Object.keys(filters2[filters2.length - 1])[0]
318
- });
319
- setQuery({ filters: { $and: filters2 }, page: 1 });
320
- };
321
- return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Popover.Root, { open, onOpenChange: setOpen, children: [
322
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Popover.Trigger, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Button, { variant: "tertiary", startIcon: /* @__PURE__ */ jsxRuntime.jsx(icons.Filter, {}), size: "S", children: formatMessage({ id: "app.utils.filters", defaultMessage: "Filters" }) }) }),
323
- /* @__PURE__ */ jsxRuntime.jsx(
324
- index.FilterPopover,
325
- {
326
- displayedFilters: index.displayedFilters,
327
- filters,
328
- onSubmit: handleSubmit,
329
- onToggle: setOpen
330
- }
331
- ),
332
- /* @__PURE__ */ jsxRuntime.jsx(
333
- index.FilterList,
334
- {
335
- appliedFilters: filters,
336
- filtersSchema: index.displayedFilters,
337
- onRemoveFilter: handleRemoveFilter
338
- }
339
- )
340
- ] });
341
- };
342
- const Header = ({
343
- breadcrumbs = null,
344
- canCreate,
345
- folder = null,
346
- onToggleEditFolderDialog,
347
- onToggleUploadAssetDialog
348
- }) => {
349
- const { formatMessage } = reactIntl.useIntl();
350
- const { pathname } = reactRouterDom.useLocation();
351
- const [{ query }] = strapiAdmin.useQueryParams();
352
- const backQuery = {
353
- ...query,
354
- folder: folder?.parent && typeof folder.parent !== "number" && folder.parent.id ? folder.parent.id : void 0,
355
- folderPath: folder?.parent && typeof folder.parent !== "number" && folder.parent.path ? folder.parent.path : void 0
356
- };
357
- return /* @__PURE__ */ jsxRuntime.jsx(
358
- strapiAdmin.Layouts.Header,
359
- {
360
- title: formatMessage({
361
- id: index.getTrad("plugin.name"),
362
- defaultMessage: `Media Library`
363
- }),
364
- subtitle: breadcrumbs && typeof breadcrumbs !== "boolean" && folder && /* @__PURE__ */ jsxRuntime.jsx(
365
- index.Breadcrumbs,
366
- {
367
- label: formatMessage({
368
- id: index.getTrad("header.breadcrumbs.nav.label"),
369
- defaultMessage: "Folders navigation"
370
- }),
371
- breadcrumbs,
372
- currentFolderId: folder?.id
373
- }
374
- ),
375
- navigationAction: folder && /* @__PURE__ */ jsxRuntime.jsx(
376
- designSystem.Link,
377
- {
378
- tag: reactRouterDom.NavLink,
379
- startIcon: /* @__PURE__ */ jsxRuntime.jsx(icons.ArrowLeft, {}),
380
- to: `${pathname}?${qs.stringify(backQuery, { encode: false })}`,
381
- children: formatMessage({
382
- id: index.getTrad("header.actions.folder-level-up"),
383
- defaultMessage: "Back"
384
- })
385
- }
386
- ),
387
- primaryAction: canCreate && /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 2, children: [
388
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Button, { startIcon: /* @__PURE__ */ jsxRuntime.jsx(icons.Plus, {}), variant: "secondary", onClick: onToggleEditFolderDialog, children: formatMessage({
389
- id: index.getTrad("header.actions.add-folder"),
390
- defaultMessage: "Add new folder"
391
- }) }),
392
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Button, { startIcon: /* @__PURE__ */ jsxRuntime.jsx(icons.Plus, {}), onClick: onToggleUploadAssetDialog, children: formatMessage({
393
- id: index.getTrad("header.actions.add-assets"),
394
- defaultMessage: "Add new assets"
395
- }) })
396
- ] })
397
- }
398
- );
399
- };
400
- const BoxWithHeight = styledComponents.styled(designSystem.Box)`
401
- height: 3.2rem;
402
- display: flex;
403
- align-items: center;
404
- `;
405
- const TypographyMaxWidth = styledComponents.styled(designSystem.Typography)`
406
- max-width: 100%;
407
- `;
408
- const ActionContainer = styledComponents.styled(designSystem.Box)`
409
- svg {
410
- path {
411
- fill: ${({ theme }) => theme.colors.neutral500};
412
- }
413
- }
414
- `;
415
- const MediaLibrary = () => {
416
- const navigate = reactRouterDom.useNavigate();
417
- const {
418
- canRead,
419
- canCreate,
420
- canUpdate,
421
- canCopyLink,
422
- canDownload,
423
- canConfigureView,
424
- isLoading: permissionsLoading
425
- } = index.useMediaLibraryPermissions();
426
- const currentFolderToEditRef = React__namespace.useRef();
427
- const { formatMessage } = reactIntl.useIntl();
428
- const { pathname } = reactRouterDom.useLocation();
429
- const { trackUsage } = strapiAdmin.useTracking();
430
- const [{ query }, setQuery] = strapiAdmin.useQueryParams();
431
- const isFiltering = Boolean(query._q || query.filters);
432
- const [view, setView] = index.usePersistentState(index.localStorageKeys.view, index.viewOptions.GRID);
433
- const isGridView = view === index.viewOptions.GRID;
434
- const {
435
- data: assetsData,
436
- isLoading: assetsLoading,
437
- error: assetsError
438
- } = index.useAssets({
439
- skipWhen: !canRead,
440
- query
441
- });
442
- const {
443
- data: foldersData,
444
- isLoading: foldersLoading,
445
- error: foldersError
446
- } = index.useFolders({
447
- enabled: canRead && assetsData?.pagination?.page === 1 && !index.containsAssetFilter(query),
448
- query
449
- });
450
- const {
451
- data: currentFolder,
452
- isLoading: isCurrentFolderLoading,
453
- error: currentFolderError
454
- } = index.useFolder(query?.folder, {
455
- enabled: canRead && !!query?.folder
456
- });
457
- if (currentFolderError?.name === "NotFoundError") {
458
- navigate(pathname);
459
- }
460
- const folders = foldersData?.map((folder) => ({
461
- ...folder,
462
- type: "folder",
463
- folderURL: index.getFolderURL(pathname, query, {
464
- folder: folder.id.toString(),
465
- folderPath: folder.path
466
- }),
467
- isSelectable: canUpdate
468
- })) ?? [];
469
- const folderCount = folders?.length || 0;
470
- const assets = assetsData?.results?.map((asset) => ({ ...asset, type: "asset", isSelectable: canUpdate })) || [];
471
- const assetCount = assets?.length ?? 0;
472
- const totalAssetCount = assetsData?.pagination?.total;
473
- const isLoading = isCurrentFolderLoading || foldersLoading || permissionsLoading || assetsLoading;
474
- const [showUploadAssetDialog, setShowUploadAssetDialog] = React__namespace.useState(false);
475
- const [showEditFolderDialog, setShowEditFolderDialog] = React__namespace.useState(false);
476
- const [assetToEdit, setAssetToEdit] = React__namespace.useState(void 0);
477
- const [folderToEdit, setFolderToEdit] = React__namespace.useState(void 0);
478
- const [selected, { selectOne, selectAll }] = index.useSelectionState(
479
- ["type", "id"],
480
- []
481
- );
482
- const indeterminateBulkSelect = selected?.length > 0 && selected?.length !== assetCount + folderCount;
483
- const toggleUploadAssetDialog = () => setShowUploadAssetDialog((prev) => !prev);
484
- const toggleEditFolderDialog = ({ created = false } = {}) => {
485
- if (created && query?.page !== "1") {
486
- setQuery({
487
- ...query,
488
- page: 1
489
- });
490
- }
491
- setShowEditFolderDialog((prev) => !prev);
492
- };
493
- const handleBulkSelect = (checked, elements) => {
494
- if (checked) {
495
- trackUsage("didSelectAllMediaLibraryElements");
496
- }
497
- selectAll(elements);
498
- };
499
- const handleChangeSort = (value) => {
500
- trackUsage("didSortMediaLibraryElements", {
501
- location: "upload",
502
- sort: value
503
- });
504
- setQuery({ sort: value });
505
- };
506
- const handleEditFolder = (folder) => {
507
- setFolderToEdit(folder);
508
- setShowEditFolderDialog(true);
509
- };
510
- const handleEditFolderClose = (payload) => {
511
- setFolderToEdit(null);
512
- toggleEditFolderDialog(payload);
513
- if (currentFolderToEditRef.current) {
514
- currentFolderToEditRef.current.focus();
515
- }
516
- };
517
- const handleAssetDeleted = (numberOfAssets) => {
518
- if (numberOfAssets === assetCount && assetsData?.pagination?.page === assetsData?.pagination?.pageCount && assetsData?.pagination?.page && assetsData.pagination.page > 1) {
519
- setQuery({
520
- ...query,
521
- page: assetsData.pagination.page - 1
522
- });
523
- }
524
- };
525
- const handleBulkActionSuccess = () => {
526
- selectAll();
527
- handleAssetDeleted(selected.length);
528
- };
529
- if (isLoading) {
530
- return /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Page.Loading, {});
531
- }
532
- if (assetsError || foldersError) {
533
- return /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Page.Error, {});
534
- }
535
- return /* @__PURE__ */ jsxRuntime.jsxs(strapiAdmin.Layouts.Root, { children: [
536
- /* @__PURE__ */ jsxRuntime.jsxs(strapiAdmin.Page.Main, { children: [
537
- /* @__PURE__ */ jsxRuntime.jsx(
538
- Header,
539
- {
540
- breadcrumbs: !isCurrentFolderLoading ? getBreadcrumbDataML(currentFolder, {
541
- pathname,
542
- query
543
- }) : null,
544
- canCreate,
545
- onToggleEditFolderDialog: toggleEditFolderDialog,
546
- onToggleUploadAssetDialog: toggleUploadAssetDialog,
547
- folder: currentFolder
548
- }
549
- ),
550
- /* @__PURE__ */ jsxRuntime.jsx(
551
- strapiAdmin.Layouts.Action,
552
- {
553
- startActions: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
554
- canUpdate && isGridView && (assetCount > 0 || folderCount > 0) && /* @__PURE__ */ jsxRuntime.jsx(
555
- BoxWithHeight,
556
- {
557
- paddingLeft: 2,
558
- paddingRight: 2,
559
- background: "neutral0",
560
- hasRadius: true,
561
- borderColor: "neutral200",
562
- children: /* @__PURE__ */ jsxRuntime.jsx(
563
- designSystem.Checkbox,
564
- {
565
- "aria-label": formatMessage({
566
- id: index.getTrad("bulk.select.label"),
567
- defaultMessage: "Select all folders & assets"
568
- }),
569
- checked: indeterminateBulkSelect ? "indeterminate" : (assetCount > 0 || folderCount > 0) && selected.length === assetCount + folderCount,
570
- onCheckedChange: (e) => handleBulkSelect(e, [...assets, ...folders])
571
- }
572
- )
573
- }
574
- ),
575
- canRead && isGridView && /* @__PURE__ */ jsxRuntime.jsx(index.SortPicker, { value: query?.sort, onChangeSort: handleChangeSort }),
576
- canRead && /* @__PURE__ */ jsxRuntime.jsx(Filters, {})
577
- ] }),
578
- endActions: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
579
- canConfigureView ? /* @__PURE__ */ jsxRuntime.jsx(ActionContainer, { paddingTop: 1, paddingBottom: 1, children: /* @__PURE__ */ jsxRuntime.jsx(
580
- designSystem.IconButton,
581
- {
582
- tag: reactRouterDom.Link,
583
- to: {
584
- pathname: `${pathname}/configuration`,
585
- search: qs.stringify(query, { encode: false })
586
- },
587
- label: formatMessage({
588
- id: "app.links.configure-view",
589
- defaultMessage: "Configure the view"
590
- }),
591
- children: /* @__PURE__ */ jsxRuntime.jsx(icons.Cog, {})
592
- }
593
- ) }) : null,
594
- /* @__PURE__ */ jsxRuntime.jsx(ActionContainer, { paddingTop: 1, paddingBottom: 1, children: /* @__PURE__ */ jsxRuntime.jsx(
595
- designSystem.IconButton,
596
- {
597
- label: isGridView ? formatMessage({
598
- id: index.getTrad("view-switch.list"),
599
- defaultMessage: "List View"
600
- }) : formatMessage({
601
- id: index.getTrad("view-switch.grid"),
602
- defaultMessage: "Grid View"
603
- }),
604
- onClick: () => setView(isGridView ? index.viewOptions.LIST : index.viewOptions.GRID),
605
- children: isGridView ? /* @__PURE__ */ jsxRuntime.jsx(icons.List, {}) : /* @__PURE__ */ jsxRuntime.jsx(icons.GridFour, {})
606
- }
607
- ) }),
608
- /* @__PURE__ */ jsxRuntime.jsx(
609
- strapiAdmin.SearchInput,
610
- {
611
- label: formatMessage({
612
- id: index.getTrad("search.label"),
613
- defaultMessage: "Search for an asset"
614
- }),
615
- trackedEvent: "didSearchMediaLibraryElements",
616
- trackedEventDetails: { location: "upload" }
617
- }
618
- )
619
- ] })
620
- }
621
- ),
622
- /* @__PURE__ */ jsxRuntime.jsxs(strapiAdmin.Layouts.Content, { children: [
623
- selected.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
624
- BulkActions,
625
- {
626
- currentFolder,
627
- selected,
628
- onSuccess: handleBulkActionSuccess
629
- }
630
- ),
631
- folderCount === 0 && assetCount === 0 && /* @__PURE__ */ jsxRuntime.jsx(
632
- EmptyOrNoPermissions,
633
- {
634
- canCreate,
635
- canRead,
636
- isFiltering,
637
- onActionClick: toggleUploadAssetDialog
638
- }
639
- ),
640
- canRead && !isGridView && (assetCount > 0 || folderCount > 0) && /* @__PURE__ */ jsxRuntime.jsx(
641
- index.TableList,
642
- {
643
- assetCount,
644
- folderCount,
645
- indeterminate: indeterminateBulkSelect,
646
- onChangeSort: handleChangeSort,
647
- onChangeFolder: (folderID, folderPath) => navigate(index.getFolderURL(pathname, query, { folder: folderID.toString(), folderPath })),
648
- onEditAsset: setAssetToEdit,
649
- onEditFolder: handleEditFolder,
650
- onSelectOne: selectOne,
651
- onSelectAll: handleBulkSelect,
652
- rows: [...folders, ...assets],
653
- selected,
654
- shouldDisableBulkSelect: !canUpdate,
655
- sortQuery: query?.sort ?? ""
656
- }
657
- ),
658
- canRead && isGridView && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
659
- folderCount > 0 && /* @__PURE__ */ jsxRuntime.jsx(
660
- index.FolderGridList,
661
- {
662
- title: (
663
- // Folders title should only appear if:
664
- // user is filtering and there are assets to display, to divide both type of elements
665
- // user is not filtering
666
- (isFiltering && assetCount > 0 || !isFiltering) && formatMessage(
667
- {
668
- id: index.getTrad("list.folders.title"),
669
- defaultMessage: "Folders ({count})"
670
- },
671
- { count: folderCount }
672
- ) || ""
673
- ),
674
- children: folders.map((folder) => {
675
- const selectedFolders = selected.filter(({ type }) => type === "folder");
676
- const isSelected = !!selectedFolders.find(
677
- (currentFolder2) => currentFolder2.id === folder.id
678
- );
679
- const url = index.getFolderURL(pathname, query, {
680
- folder: folder?.id.toString(),
681
- folderPath: folder?.path
682
- });
683
- return /* @__PURE__ */ jsxRuntime.jsx(
684
- designSystem.Grid.Item,
685
- {
686
- col: 3,
687
- direction: "column",
688
- alignItems: "stretch",
689
- children: /* @__PURE__ */ jsxRuntime.jsx(
690
- index.FolderCard,
691
- {
692
- ref: folderToEdit && folder.id === folderToEdit.id ? currentFolderToEditRef : void 0,
693
- ariaLabel: folder.name,
694
- id: `folder-${folder.id}`,
695
- to: url,
696
- startAction: folder.isSelectable ? /* @__PURE__ */ jsxRuntime.jsx(
697
- FolderCardCheckbox,
698
- {
699
- "data-testid": `folder-checkbox-${folder.id}`,
700
- checked: isSelected,
701
- onCheckedChange: () => selectOne(folder)
702
- }
703
- ) : null,
704
- cardActions: /* @__PURE__ */ jsxRuntime.jsx(
705
- designSystem.IconButton,
706
- {
707
- label: formatMessage({
708
- id: index.getTrad("list.folder.edit"),
709
- defaultMessage: "Edit folder"
710
- }),
711
- onClick: () => handleEditFolder(folder),
712
- children: /* @__PURE__ */ jsxRuntime.jsx(icons.Pencil, {})
713
- }
714
- ),
715
- children: /* @__PURE__ */ jsxRuntime.jsx(index.FolderCardBody, { children: /* @__PURE__ */ jsxRuntime.jsx(index.FolderCardBodyAction, { to: url, children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { tag: "h2", direction: "column", alignItems: "start", maxWidth: "100%", children: [
716
- /* @__PURE__ */ jsxRuntime.jsxs(
717
- TypographyMaxWidth,
718
- {
719
- fontWeight: "semiBold",
720
- textColor: "neutral800",
721
- ellipsis: true,
722
- children: [
723
- folder.name,
724
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.VisuallyHidden, { children: ":" })
725
- ]
726
- }
727
- ),
728
- /* @__PURE__ */ jsxRuntime.jsx(
729
- TypographyMaxWidth,
730
- {
731
- tag: "span",
732
- textColor: "neutral600",
733
- variant: "pi",
734
- ellipsis: true,
735
- children: formatMessage(
736
- {
737
- id: index.getTrad("list.folder.subtitle"),
738
- defaultMessage: "{folderCount, plural, =0 {# folder} one {# folder} other {# folders}}, {filesCount, plural, =0 {# asset} one {# asset} other {# assets}}"
739
- },
740
- {
741
- folderCount: folder.children?.count,
742
- filesCount: folder.files?.count
743
- }
744
- )
745
- }
746
- )
747
- ] }) }) })
748
- }
749
- )
750
- },
751
- `folder-${folder.id}`
752
- );
753
- })
754
- }
755
- ),
756
- assetCount > 0 && folderCount > 0 && /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { paddingTop: 6, paddingBottom: 4, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Divider, {}) }),
757
- assetCount > 0 && /* @__PURE__ */ jsxRuntime.jsx(
758
- index.AssetGridList,
759
- {
760
- assets,
761
- onEditAsset: setAssetToEdit,
762
- onSelectAsset: selectOne,
763
- selectedAssets: selected.filter(
764
- ({ type }) => type === "asset"
765
- ),
766
- title: (
767
- // Assets title should only appear if:
768
- // - user is not filtering
769
- // - user is filtering and there are folders to display, to separate them
770
- // - user is on page 1 since folders won't appear on any other page than the first one (no need to visually separate them)
771
- (!isFiltering || isFiltering && folderCount > 0) && assetsData?.pagination?.page === 1 && formatMessage(
772
- {
773
- id: index.getTrad("list.assets.title"),
774
- defaultMessage: "Assets ({count})"
775
- },
776
- { count: totalAssetCount }
777
- ) || ""
778
- )
779
- }
780
- )
781
- ] }),
782
- /* @__PURE__ */ jsxRuntime.jsxs(strapiAdmin.Pagination.Root, { ...assetsData?.pagination, children: [
783
- /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Pagination.PageSize, {}),
784
- /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Pagination.Links, {})
785
- ] })
786
- ] })
787
- ] }),
788
- showUploadAssetDialog && /* @__PURE__ */ jsxRuntime.jsx(
789
- index.UploadAssetDialog,
790
- {
791
- open: showUploadAssetDialog,
792
- onClose: toggleUploadAssetDialog,
793
- trackedLocation: "upload",
794
- folderId: query?.folder
795
- }
796
- ),
797
- showEditFolderDialog && /* @__PURE__ */ jsxRuntime.jsx(
798
- index.EditFolderDialog,
799
- {
800
- open: showEditFolderDialog,
801
- onClose: () => handleEditFolderClose(),
802
- folder: folderToEdit,
803
- parentFolderId: query?.folder,
804
- location: "upload"
805
- }
806
- ),
807
- assetToEdit && /* @__PURE__ */ jsxRuntime.jsx(
808
- index.EditAssetDialog,
809
- {
810
- onClose: (editedAsset) => {
811
- if (editedAsset === null) {
812
- handleAssetDeleted(1);
813
- }
814
- setAssetToEdit(void 0);
815
- },
816
- open: !!assetToEdit,
817
- asset: assetToEdit,
818
- canUpdate,
819
- canCopyLink,
820
- canDownload,
821
- trackedLocation: "upload"
822
- }
823
- )
824
- ] });
825
- };
826
- const ConfigureTheView = React__namespace.lazy(
827
- async () => Promise.resolve().then(() => require("./ConfigureTheView-CJbBTq0t.js")).then((mod) => ({ default: mod.ConfigureTheView }))
828
- );
829
- const Upload = () => {
830
- const {
831
- config: { isLoading, isError, data: config }
832
- } = index.useConfig();
833
- const [{ rawQuery }, setQuery] = strapiAdmin.useQueryParams();
834
- const { formatMessage } = reactIntl.useIntl();
835
- const title = formatMessage({ id: index.getTrad("plugin.name"), defaultMessage: "Media Library" });
836
- React__namespace.useEffect(() => {
837
- if (isLoading || isError || rawQuery) {
838
- return;
839
- }
840
- setQuery({
841
- sort: config.sort,
842
- page: 1,
843
- pageSize: config.pageSize
844
- });
845
- }, [isLoading, isError, config, rawQuery, setQuery]);
846
- if (isLoading) {
847
- return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
848
- /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Page.Title, { children: title }),
849
- /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Page.Loading, {})
850
- ] });
851
- }
852
- return /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Page.Main, { children: rawQuery ? /* @__PURE__ */ jsxRuntime.jsx(React__namespace.Suspense, { fallback: /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Page.Loading, {}), children: /* @__PURE__ */ jsxRuntime.jsxs(reactRouterDom.Routes, { children: [
853
- /* @__PURE__ */ jsxRuntime.jsx(reactRouterDom.Route, { index: true, element: /* @__PURE__ */ jsxRuntime.jsx(MediaLibrary, {}) }),
854
- /* @__PURE__ */ jsxRuntime.jsx(
855
- reactRouterDom.Route,
856
- {
857
- path: "configuration",
858
- element: /* @__PURE__ */ jsxRuntime.jsx(ConfigureTheView, { config })
859
- }
860
- )
861
- ] }) }) : null });
862
- };
863
- exports.Upload = Upload;
864
- //# sourceMappingURL=App-DNScJAhi.js.map