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