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