@strapi/upload 5.47.0 → 5.48.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 (126) hide show
  1. package/dist/admin/components/EditAssetDialog/EditAssetContent.js +12 -2
  2. package/dist/admin/components/EditAssetDialog/EditAssetContent.js.map +1 -1
  3. package/dist/admin/components/EditAssetDialog/EditAssetContent.mjs +12 -2
  4. package/dist/admin/components/EditAssetDialog/EditAssetContent.mjs.map +1 -1
  5. package/dist/admin/components/UploadAssetDialog/UploadAssetDialog.js +1 -0
  6. package/dist/admin/components/UploadAssetDialog/UploadAssetDialog.js.map +1 -1
  7. package/dist/admin/components/UploadAssetDialog/UploadAssetDialog.mjs +1 -0
  8. package/dist/admin/components/UploadAssetDialog/UploadAssetDialog.mjs.map +1 -1
  9. package/dist/admin/future/components/Drawer.js +7 -2
  10. package/dist/admin/future/components/Drawer.js.map +1 -1
  11. package/dist/admin/future/components/Drawer.mjs +7 -2
  12. package/dist/admin/future/components/Drawer.mjs.map +1 -1
  13. package/dist/admin/future/components/UploadProgressDialog.js +33 -29
  14. package/dist/admin/future/components/UploadProgressDialog.js.map +1 -1
  15. package/dist/admin/future/components/UploadProgressDialog.mjs +36 -32
  16. package/dist/admin/future/components/UploadProgressDialog.mjs.map +1 -1
  17. package/dist/admin/future/pages/Assets/AssetsPage.js +2 -2
  18. package/dist/admin/future/pages/Assets/AssetsPage.js.map +1 -1
  19. package/dist/admin/future/pages/Assets/AssetsPage.mjs +3 -3
  20. package/dist/admin/future/pages/Assets/AssetsPage.mjs.map +1 -1
  21. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.js +733 -148
  22. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.js.map +1 -1
  23. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.mjs +737 -155
  24. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.mjs.map +1 -1
  25. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetPreview.js +25 -5
  26. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetPreview.js.map +1 -1
  27. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetPreview.mjs +25 -5
  28. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetPreview.mjs.map +1 -1
  29. package/dist/admin/future/services/api.js +124 -200
  30. package/dist/admin/future/services/api.js.map +1 -1
  31. package/dist/admin/future/services/api.mjs +124 -200
  32. package/dist/admin/future/services/api.mjs.map +1 -1
  33. package/dist/admin/future/services/assets.js +88 -1
  34. package/dist/admin/future/services/assets.js.map +1 -1
  35. package/dist/admin/future/services/assets.mjs +86 -2
  36. package/dist/admin/future/services/assets.mjs.map +1 -1
  37. package/dist/admin/future/services/folders.js +33 -1
  38. package/dist/admin/future/services/folders.js.map +1 -1
  39. package/dist/admin/future/services/folders.mjs +33 -2
  40. package/dist/admin/future/services/folders.mjs.map +1 -1
  41. package/dist/admin/future/services/settings.js +18 -0
  42. package/dist/admin/future/services/settings.js.map +1 -0
  43. package/dist/admin/future/services/settings.mjs +16 -0
  44. package/dist/admin/future/services/settings.mjs.map +1 -0
  45. package/dist/admin/future/services/uploadFileViaXHR.js +92 -0
  46. package/dist/admin/future/services/uploadFileViaXHR.js.map +1 -0
  47. package/dist/admin/future/services/uploadFileViaXHR.mjs +88 -0
  48. package/dist/admin/future/services/uploadFileViaXHR.mjs.map +1 -0
  49. package/dist/admin/future/store/uploadProgress.js +32 -26
  50. package/dist/admin/future/store/uploadProgress.js.map +1 -1
  51. package/dist/admin/future/store/uploadProgress.mjs +32 -27
  52. package/dist/admin/future/store/uploadProgress.mjs.map +1 -1
  53. package/dist/admin/future/utils/createRafBatcher.js +42 -0
  54. package/dist/admin/future/utils/createRafBatcher.js.map +1 -0
  55. package/dist/admin/future/utils/createRafBatcher.mjs +40 -0
  56. package/dist/admin/future/utils/createRafBatcher.mjs.map +1 -0
  57. package/dist/admin/future/utils/downloadFile.js +19 -0
  58. package/dist/admin/future/utils/downloadFile.js.map +1 -0
  59. package/dist/admin/future/utils/downloadFile.mjs +17 -0
  60. package/dist/admin/future/utils/downloadFile.mjs.map +1 -0
  61. package/dist/admin/hooks/useAssets.js +5 -3
  62. package/dist/admin/hooks/useAssets.js.map +1 -1
  63. package/dist/admin/hooks/useAssets.mjs +5 -3
  64. package/dist/admin/hooks/useAssets.mjs.map +1 -1
  65. package/dist/admin/index.js +1 -1
  66. package/dist/admin/index.mjs +1 -1
  67. package/dist/admin/src/components/EditAssetDialog/EditAssetContent.d.ts +2 -1
  68. package/dist/admin/src/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.d.ts +22 -0
  69. package/dist/admin/src/future/pages/Assets/components/AssetDetails/AssetPreview.d.ts +4 -1
  70. package/dist/admin/src/future/services/api.d.ts +9 -8
  71. package/dist/admin/src/future/services/assets.d.ts +11 -2
  72. package/dist/admin/src/future/services/folders.d.ts +1 -1
  73. package/dist/admin/src/future/services/uploadFileViaXHR.d.ts +34 -0
  74. package/dist/admin/src/future/store/uploadProgress.d.ts +17 -4
  75. package/dist/admin/src/future/utils/createRafBatcher.d.ts +23 -0
  76. package/dist/admin/src/future/utils/downloadFile.d.ts +6 -0
  77. package/dist/admin/translations/{dk.json.js → da.json.js} +3 -3
  78. package/dist/admin/translations/{dk.json.js.map → da.json.js.map} +1 -1
  79. package/dist/admin/translations/{dk.json.mjs → da.json.mjs} +3 -3
  80. package/dist/admin/translations/{dk.json.mjs.map → da.json.mjs.map} +1 -1
  81. package/dist/admin/translations/en.json.js +26 -1
  82. package/dist/admin/translations/en.json.js.map +1 -1
  83. package/dist/admin/translations/en.json.mjs +26 -1
  84. package/dist/admin/translations/en.json.mjs.map +1 -1
  85. package/dist/server/bootstrap.js +0 -3
  86. package/dist/server/bootstrap.js.map +1 -1
  87. package/dist/server/bootstrap.mjs +0 -3
  88. package/dist/server/bootstrap.mjs.map +1 -1
  89. package/dist/server/controllers/admin-upload.js +69 -118
  90. package/dist/server/controllers/admin-upload.js.map +1 -1
  91. package/dist/server/controllers/admin-upload.mjs +69 -118
  92. package/dist/server/controllers/admin-upload.mjs.map +1 -1
  93. package/dist/server/routes/admin.js +2 -2
  94. package/dist/server/routes/admin.js.map +1 -1
  95. package/dist/server/routes/admin.mjs +2 -2
  96. package/dist/server/routes/admin.mjs.map +1 -1
  97. package/dist/server/services/ai-metadata-jobs.js +0 -23
  98. package/dist/server/services/ai-metadata-jobs.js.map +1 -1
  99. package/dist/server/services/ai-metadata-jobs.mjs +0 -23
  100. package/dist/server/services/ai-metadata-jobs.mjs.map +1 -1
  101. package/dist/server/services/image-manipulation.js +16 -8
  102. package/dist/server/services/image-manipulation.js.map +1 -1
  103. package/dist/server/services/image-manipulation.mjs +16 -8
  104. package/dist/server/services/image-manipulation.mjs.map +1 -1
  105. package/dist/server/services/upload.js +1 -1
  106. package/dist/server/services/upload.js.map +1 -1
  107. package/dist/server/services/upload.mjs +1 -1
  108. package/dist/server/services/upload.mjs.map +1 -1
  109. package/dist/server/src/bootstrap.d.ts.map +1 -1
  110. package/dist/server/src/controllers/admin-upload.d.ts +6 -8
  111. package/dist/server/src/controllers/admin-upload.d.ts.map +1 -1
  112. package/dist/server/src/controllers/index.d.ts +1 -1
  113. package/dist/server/src/index.d.ts +1 -2
  114. package/dist/server/src/index.d.ts.map +1 -1
  115. package/dist/server/src/services/ai-metadata-jobs.d.ts +0 -1
  116. package/dist/server/src/services/ai-metadata-jobs.d.ts.map +1 -1
  117. package/dist/server/src/services/image-manipulation.d.ts +5 -0
  118. package/dist/server/src/services/image-manipulation.d.ts.map +1 -1
  119. package/dist/server/src/services/index.d.ts +0 -1
  120. package/dist/server/src/services/index.d.ts.map +1 -1
  121. package/dist/server/src/services/upload.d.ts.map +1 -1
  122. package/dist/server/src/types.d.ts +2 -2
  123. package/dist/server/src/types.d.ts.map +1 -1
  124. package/dist/shared/contracts/files.d.ts +19 -2
  125. package/dist/shared/contracts/files.d.ts.map +1 -1
  126. package/package.json +8 -8
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Fetch a file at `url` and trigger a browser download with the given filename.
3
+ * Goes via a blob + temporary anchor so we honour the `download` attribute
4
+ * even when the file is served same-origin without `Content-Disposition`.
5
+ */ const downloadFile = async (url, fileName)=>{
6
+ const response = await fetch(url);
7
+ const blob = await response.blob();
8
+ const objectUrl = window.URL.createObjectURL(blob);
9
+ const anchor = document.createElement('a');
10
+ anchor.href = objectUrl;
11
+ anchor.setAttribute('download', fileName);
12
+ anchor.click();
13
+ window.URL.revokeObjectURL(objectUrl);
14
+ };
15
+
16
+ export { downloadFile };
17
+ //# sourceMappingURL=downloadFile.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"downloadFile.mjs","sources":["../../../../admin/src/future/utils/downloadFile.ts"],"sourcesContent":["/**\n * Fetch a file at `url` and trigger a browser download with the given filename.\n * Goes via a blob + temporary anchor so we honour the `download` attribute\n * even when the file is served same-origin without `Content-Disposition`.\n */\nexport const downloadFile = async (url: string, fileName: string) => {\n const response = await fetch(url);\n const blob = await response.blob();\n const objectUrl = window.URL.createObjectURL(blob);\n const anchor = document.createElement('a');\n anchor.href = objectUrl;\n anchor.setAttribute('download', fileName);\n anchor.click();\n window.URL.revokeObjectURL(objectUrl);\n};\n"],"names":["downloadFile","url","fileName","response","fetch","blob","objectUrl","window","URL","createObjectURL","anchor","document","createElement","href","setAttribute","click","revokeObjectURL"],"mappings":"AAAA;;;;AAIC,IACM,MAAMA,YAAAA,GAAe,OAAOC,GAAAA,EAAaC,QAAAA,GAAAA;IAC9C,MAAMC,QAAAA,GAAW,MAAMC,KAAAA,CAAMH,GAAAA,CAAAA;IAC7B,MAAMI,IAAAA,GAAO,MAAMF,QAAAA,CAASE,IAAI,EAAA;AAChC,IAAA,MAAMC,SAAAA,GAAYC,MAAAA,CAAOC,GAAG,CAACC,eAAe,CAACJ,IAAAA,CAAAA;IAC7C,MAAMK,MAAAA,GAASC,QAAAA,CAASC,aAAa,CAAC,GAAA,CAAA;AACtCF,IAAAA,MAAAA,CAAOG,IAAI,GAAGP,SAAAA;IACdI,MAAAA,CAAOI,YAAY,CAAC,UAAA,EAAYZ,QAAAA,CAAAA;AAChCQ,IAAAA,MAAAA,CAAOK,KAAK,EAAA;IACZR,MAAAA,CAAOC,GAAG,CAACQ,eAAe,CAACV,SAAAA,CAAAA;AAC7B;;;;"}
@@ -31,7 +31,7 @@ const useAssets = ({ skipWhen = false, query = {} } = {})=>{
31
31
  const { toggleNotification } = strapiAdmin.useNotification();
32
32
  const { notifyStatus } = designSystem.useNotifyAT();
33
33
  const { get } = strapiAdmin.useFetchClient();
34
- const { folderPath, _q, ...paramsExceptFolderAndQ } = query;
34
+ const { folder, folderPath: _folderPath, _q, ...paramsExceptFolderAndQ } = query;
35
35
  let params;
36
36
  if (_q) {
37
37
  params = {
@@ -45,8 +45,10 @@ const useAssets = ({ skipWhen = false, query = {} } = {})=>{
45
45
  $and: [
46
46
  ...paramsExceptFolderAndQ?.filters?.$and ?? [],
47
47
  {
48
- folderPath: {
49
- $eq: folderPath ?? '/'
48
+ folder: {
49
+ id: folder ?? {
50
+ $null: true
51
+ }
50
52
  }
51
53
  }
52
54
  ]
@@ -1 +1 @@
1
- {"version":3,"file":"useAssets.js","sources":["../../../admin/src/hooks/useAssets.ts"],"sourcesContent":["import * as React from 'react';\n\nimport { useNotification, useFetchClient } from '@strapi/admin/strapi-admin';\nimport { useNotifyAT } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { useQuery } from 'react-query';\n\nimport { Query, GetFiles } from '../../../shared/contracts/files';\nimport { pluginId } from '../pluginId';\n\ninterface UseAssetsOptions {\n skipWhen?: boolean;\n query?: Query;\n}\n\nexport const useAssets = ({ skipWhen = false, query = {} }: UseAssetsOptions = {}) => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { notifyStatus } = useNotifyAT();\n const { get } = useFetchClient();\n const { folderPath, _q, ...paramsExceptFolderAndQ } = query;\n\n let params: Query;\n\n if (_q) {\n params = {\n ...paramsExceptFolderAndQ,\n _q: encodeURIComponent(_q),\n };\n } else {\n params = {\n ...paramsExceptFolderAndQ,\n filters: {\n $and: [\n ...(paramsExceptFolderAndQ?.filters?.$and ?? []),\n {\n folderPath: { $eq: folderPath ?? '/' },\n },\n ],\n },\n };\n }\n\n const { data, error, isLoading } = useQuery<\n GetFiles.Response['data'],\n GetFiles.Response['error']\n >(\n [pluginId, 'assets', params],\n async () => {\n const { data } = await get('/upload/files', { params });\n\n return data;\n },\n {\n enabled: !skipWhen,\n staleTime: 0,\n cacheTime: 0,\n select(data) {\n if (data?.results && Array.isArray(data.results)) {\n return {\n ...data,\n results: data.results\n /**\n * Filter out assets that don't have a name.\n * So we don't try to render them as assets\n * and get errors.\n */\n .filter((asset) => asset.name)\n .map((asset) => ({\n ...asset,\n /**\n * Mime and ext cannot be null in the front-end because\n * we expect them to be strings and use the `includes` method.\n */\n mime: asset.mime ?? '',\n ext: asset.ext ?? '',\n })),\n };\n }\n\n return data;\n },\n }\n );\n\n React.useEffect(() => {\n if (data) {\n notifyStatus(\n formatMessage({\n id: 'list.asset.at.finished',\n defaultMessage: 'The assets have finished loading.',\n })\n );\n }\n }, [data, formatMessage, notifyStatus]);\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error' }),\n });\n }\n }, [error, formatMessage, toggleNotification]);\n\n return { data, error, isLoading };\n};\n"],"names":["useAssets","skipWhen","query","formatMessage","useIntl","toggleNotification","useNotification","notifyStatus","useNotifyAT","get","useFetchClient","folderPath","_q","paramsExceptFolderAndQ","params","encodeURIComponent","filters","$and","$eq","data","error","isLoading","useQuery","pluginId","enabled","staleTime","cacheTime","select","results","Array","isArray","filter","asset","name","map","mime","ext","React","useEffect","id","defaultMessage","type","message"],"mappings":"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"}
1
+ {"version":3,"file":"useAssets.js","sources":["../../../admin/src/hooks/useAssets.ts"],"sourcesContent":["import * as React from 'react';\n\nimport { useNotification, useFetchClient } from '@strapi/admin/strapi-admin';\nimport { useNotifyAT } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { useQuery } from 'react-query';\n\nimport { Query, GetFiles } from '../../../shared/contracts/files';\nimport { pluginId } from '../pluginId';\n\ninterface UseAssetsOptions {\n skipWhen?: boolean;\n query?: Query;\n}\n\nexport const useAssets = ({ skipWhen = false, query = {} }: UseAssetsOptions = {}) => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { notifyStatus } = useNotifyAT();\n const { get } = useFetchClient();\n const { folder, folderPath: _folderPath, _q, ...paramsExceptFolderAndQ } = query;\n\n let params: Query;\n\n if (_q) {\n params = {\n ...paramsExceptFolderAndQ,\n _q: encodeURIComponent(_q),\n };\n } else {\n params = {\n ...paramsExceptFolderAndQ,\n filters: {\n $and: [\n ...(paramsExceptFolderAndQ?.filters?.$and ?? []),\n {\n folder: {\n id: folder ?? {\n $null: true,\n },\n },\n },\n ],\n },\n };\n }\n\n const { data, error, isLoading } = useQuery<\n GetFiles.Response['data'],\n GetFiles.Response['error']\n >(\n [pluginId, 'assets', params],\n async () => {\n const { data } = await get('/upload/files', { params });\n\n return data;\n },\n {\n enabled: !skipWhen,\n staleTime: 0,\n cacheTime: 0,\n select(data) {\n if (data?.results && Array.isArray(data.results)) {\n return {\n ...data,\n results: data.results\n /**\n * Filter out assets that don't have a name.\n * So we don't try to render them as assets\n * and get errors.\n */\n .filter((asset) => asset.name)\n .map((asset) => ({\n ...asset,\n /**\n * Mime and ext cannot be null in the front-end because\n * we expect them to be strings and use the `includes` method.\n */\n mime: asset.mime ?? '',\n ext: asset.ext ?? '',\n })),\n };\n }\n\n return data;\n },\n }\n );\n\n React.useEffect(() => {\n if (data) {\n notifyStatus(\n formatMessage({\n id: 'list.asset.at.finished',\n defaultMessage: 'The assets have finished loading.',\n })\n );\n }\n }, [data, formatMessage, notifyStatus]);\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error' }),\n });\n }\n }, [error, formatMessage, toggleNotification]);\n\n return { data, error, isLoading };\n};\n"],"names":["useAssets","skipWhen","query","formatMessage","useIntl","toggleNotification","useNotification","notifyStatus","useNotifyAT","get","useFetchClient","folder","folderPath","_folderPath","_q","paramsExceptFolderAndQ","params","encodeURIComponent","filters","$and","id","$null","data","error","isLoading","useQuery","pluginId","enabled","staleTime","cacheTime","select","results","Array","isArray","filter","asset","name","map","mime","ext","React","useEffect","defaultMessage","type","message"],"mappings":"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"}
@@ -10,7 +10,7 @@ const useAssets = ({ skipWhen = false, query = {} } = {})=>{
10
10
  const { toggleNotification } = useNotification();
11
11
  const { notifyStatus } = useNotifyAT();
12
12
  const { get } = useFetchClient();
13
- const { folderPath, _q, ...paramsExceptFolderAndQ } = query;
13
+ const { folder, folderPath: _folderPath, _q, ...paramsExceptFolderAndQ } = query;
14
14
  let params;
15
15
  if (_q) {
16
16
  params = {
@@ -24,8 +24,10 @@ const useAssets = ({ skipWhen = false, query = {} } = {})=>{
24
24
  $and: [
25
25
  ...paramsExceptFolderAndQ?.filters?.$and ?? [],
26
26
  {
27
- folderPath: {
28
- $eq: folderPath ?? '/'
27
+ folder: {
28
+ id: folder ?? {
29
+ $null: true
30
+ }
29
31
  }
30
32
  }
31
33
  ]
@@ -1 +1 @@
1
- {"version":3,"file":"useAssets.mjs","sources":["../../../admin/src/hooks/useAssets.ts"],"sourcesContent":["import * as React from 'react';\n\nimport { useNotification, useFetchClient } from '@strapi/admin/strapi-admin';\nimport { useNotifyAT } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { useQuery } from 'react-query';\n\nimport { Query, GetFiles } from '../../../shared/contracts/files';\nimport { pluginId } from '../pluginId';\n\ninterface UseAssetsOptions {\n skipWhen?: boolean;\n query?: Query;\n}\n\nexport const useAssets = ({ skipWhen = false, query = {} }: UseAssetsOptions = {}) => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { notifyStatus } = useNotifyAT();\n const { get } = useFetchClient();\n const { folderPath, _q, ...paramsExceptFolderAndQ } = query;\n\n let params: Query;\n\n if (_q) {\n params = {\n ...paramsExceptFolderAndQ,\n _q: encodeURIComponent(_q),\n };\n } else {\n params = {\n ...paramsExceptFolderAndQ,\n filters: {\n $and: [\n ...(paramsExceptFolderAndQ?.filters?.$and ?? []),\n {\n folderPath: { $eq: folderPath ?? '/' },\n },\n ],\n },\n };\n }\n\n const { data, error, isLoading } = useQuery<\n GetFiles.Response['data'],\n GetFiles.Response['error']\n >(\n [pluginId, 'assets', params],\n async () => {\n const { data } = await get('/upload/files', { params });\n\n return data;\n },\n {\n enabled: !skipWhen,\n staleTime: 0,\n cacheTime: 0,\n select(data) {\n if (data?.results && Array.isArray(data.results)) {\n return {\n ...data,\n results: data.results\n /**\n * Filter out assets that don't have a name.\n * So we don't try to render them as assets\n * and get errors.\n */\n .filter((asset) => asset.name)\n .map((asset) => ({\n ...asset,\n /**\n * Mime and ext cannot be null in the front-end because\n * we expect them to be strings and use the `includes` method.\n */\n mime: asset.mime ?? '',\n ext: asset.ext ?? '',\n })),\n };\n }\n\n return data;\n },\n }\n );\n\n React.useEffect(() => {\n if (data) {\n notifyStatus(\n formatMessage({\n id: 'list.asset.at.finished',\n defaultMessage: 'The assets have finished loading.',\n })\n );\n }\n }, [data, formatMessage, notifyStatus]);\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error' }),\n });\n }\n }, [error, formatMessage, toggleNotification]);\n\n return { data, error, isLoading };\n};\n"],"names":["useAssets","skipWhen","query","formatMessage","useIntl","toggleNotification","useNotification","notifyStatus","useNotifyAT","get","useFetchClient","folderPath","_q","paramsExceptFolderAndQ","params","encodeURIComponent","filters","$and","$eq","data","error","isLoading","useQuery","pluginId","enabled","staleTime","cacheTime","select","results","Array","isArray","filter","asset","name","map","mime","ext","React","useEffect","id","defaultMessage","type","message"],"mappings":"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"}
1
+ {"version":3,"file":"useAssets.mjs","sources":["../../../admin/src/hooks/useAssets.ts"],"sourcesContent":["import * as React from 'react';\n\nimport { useNotification, useFetchClient } from '@strapi/admin/strapi-admin';\nimport { useNotifyAT } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { useQuery } from 'react-query';\n\nimport { Query, GetFiles } from '../../../shared/contracts/files';\nimport { pluginId } from '../pluginId';\n\ninterface UseAssetsOptions {\n skipWhen?: boolean;\n query?: Query;\n}\n\nexport const useAssets = ({ skipWhen = false, query = {} }: UseAssetsOptions = {}) => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { notifyStatus } = useNotifyAT();\n const { get } = useFetchClient();\n const { folder, folderPath: _folderPath, _q, ...paramsExceptFolderAndQ } = query;\n\n let params: Query;\n\n if (_q) {\n params = {\n ...paramsExceptFolderAndQ,\n _q: encodeURIComponent(_q),\n };\n } else {\n params = {\n ...paramsExceptFolderAndQ,\n filters: {\n $and: [\n ...(paramsExceptFolderAndQ?.filters?.$and ?? []),\n {\n folder: {\n id: folder ?? {\n $null: true,\n },\n },\n },\n ],\n },\n };\n }\n\n const { data, error, isLoading } = useQuery<\n GetFiles.Response['data'],\n GetFiles.Response['error']\n >(\n [pluginId, 'assets', params],\n async () => {\n const { data } = await get('/upload/files', { params });\n\n return data;\n },\n {\n enabled: !skipWhen,\n staleTime: 0,\n cacheTime: 0,\n select(data) {\n if (data?.results && Array.isArray(data.results)) {\n return {\n ...data,\n results: data.results\n /**\n * Filter out assets that don't have a name.\n * So we don't try to render them as assets\n * and get errors.\n */\n .filter((asset) => asset.name)\n .map((asset) => ({\n ...asset,\n /**\n * Mime and ext cannot be null in the front-end because\n * we expect them to be strings and use the `includes` method.\n */\n mime: asset.mime ?? '',\n ext: asset.ext ?? '',\n })),\n };\n }\n\n return data;\n },\n }\n );\n\n React.useEffect(() => {\n if (data) {\n notifyStatus(\n formatMessage({\n id: 'list.asset.at.finished',\n defaultMessage: 'The assets have finished loading.',\n })\n );\n }\n }, [data, formatMessage, notifyStatus]);\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error' }),\n });\n }\n }, [error, formatMessage, toggleNotification]);\n\n return { data, error, isLoading };\n};\n"],"names":["useAssets","skipWhen","query","formatMessage","useIntl","toggleNotification","useNotification","notifyStatus","useNotifyAT","get","useFetchClient","folder","folderPath","_folderPath","_q","paramsExceptFolderAndQ","params","encodeURIComponent","filters","$and","id","$null","data","error","isLoading","useQuery","pluginId","enabled","staleTime","cacheTime","select","results","Array","isArray","filter","asset","name","map","mime","ext","React","useEffect","defaultMessage","type","message"],"mappings":"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"}
@@ -21,8 +21,8 @@ function _interopNamespaceDefaultOnly (e) { return Object.freeze({ __proto__: nu
21
21
  function __variableDynamicImportRuntime3__(path) {
22
22
  switch (path) {
23
23
  case './translations/ca.json': return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespaceDefaultOnly(require('./translations/ca.json.js')); });
24
+ case './translations/da.json': return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespaceDefaultOnly(require('./translations/da.json.js')); });
24
25
  case './translations/de.json': return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespaceDefaultOnly(require('./translations/de.json.js')); });
25
- case './translations/dk.json': return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespaceDefaultOnly(require('./translations/dk.json.js')); });
26
26
  case './translations/en.json': return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespaceDefaultOnly(require('./translations/en.json.js')); });
27
27
  case './translations/es.json': return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespaceDefaultOnly(require('./translations/es.json.js')); });
28
28
  case './translations/fr.json': return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespaceDefaultOnly(require('./translations/fr.json.js')); });
@@ -17,8 +17,8 @@ import './utils/urlYupSchema.mjs';
17
17
  function __variableDynamicImportRuntime3__(path) {
18
18
  switch (path) {
19
19
  case './translations/ca.json': return import('./translations/ca.json.mjs');
20
+ case './translations/da.json': return import('./translations/da.json.mjs');
20
21
  case './translations/de.json': return import('./translations/de.json.mjs');
21
- case './translations/dk.json': return import('./translations/dk.json.mjs');
22
22
  case './translations/en.json': return import('./translations/en.json.mjs');
23
23
  case './translations/es.json': return import('./translations/es.json.mjs');
24
24
  case './translations/fr.json': return import('./translations/fr.json.mjs');
@@ -8,6 +8,7 @@ export interface Asset extends Omit<FileDefinition, 'folder'> {
8
8
  }
9
9
  interface EditAssetContentProps {
10
10
  asset?: Asset;
11
+ initialFolderId?: string | number | null;
11
12
  canUpdate?: boolean;
12
13
  canCopyLink?: boolean;
13
14
  canDownload?: boolean;
@@ -16,7 +17,7 @@ interface EditAssetContentProps {
16
17
  omitFields?: ('caption' | 'alternativeText')[];
17
18
  omitActions?: 'replace'[];
18
19
  }
19
- export declare const EditAssetContent: ({ onClose, asset, canUpdate, canCopyLink, canDownload, trackedLocation, omitFields, omitActions, }: EditAssetContentProps) => import("react/jsx-runtime").JSX.Element;
20
+ export declare const EditAssetContent: ({ onClose, asset, initialFolderId, canUpdate, canCopyLink, canDownload, trackedLocation, omitFields, omitActions, }: EditAssetContentProps) => import("react/jsx-runtime").JSX.Element;
20
21
  interface EditAssetDialogProps {
21
22
  asset: Asset;
22
23
  canUpdate?: boolean;
@@ -1,8 +1,30 @@
1
+ import * as React from 'react';
2
+ import type { AssetWithPopulatedCreatedBy } from '../../../../../../../shared/contracts/files';
3
+ interface DrawerToast {
4
+ type: 'success' | 'danger';
5
+ message: string;
6
+ }
7
+ type DrawerNotify = (toast: DrawerToast) => void;
8
+ export declare const DrawerNotifyContext: React.Context<DrawerNotify | null>;
9
+ interface AssetOperations {
10
+ replaceAsset: (file: globalThis.File) => Promise<void>;
11
+ deleteAsset: () => Promise<void>;
12
+ isReplacing: boolean;
13
+ isDeleting: boolean;
14
+ }
15
+ export declare const AssetOperationsContext: React.Context<AssetOperations | null>;
1
16
  export declare const useAssetDetailsParam: () => {
2
17
  assetId: number | null;
3
18
  isVisible: boolean;
4
19
  shouldRenderDrawer: boolean;
20
+ onCloseAnimationEnd: (event: React.AnimationEvent) => void;
5
21
  openDetails: (id: number) => void;
6
22
  closeDetails: () => void;
7
23
  };
24
+ interface AssetDetailsProps {
25
+ asset: AssetWithPopulatedCreatedBy;
26
+ closeDetails: () => void;
27
+ }
28
+ export declare const AssetDetails: ({ asset, closeDetails }: AssetDetailsProps) => import("react/jsx-runtime").JSX.Element;
8
29
  export declare const AssetDetailsDrawer: () => import("react/jsx-runtime").JSX.Element | null;
30
+ export {};
@@ -1,6 +1,9 @@
1
+ import * as React from 'react';
1
2
  import type { File, AssetWithPopulatedCreatedBy } from '../../../../../../../shared/contracts/files';
2
3
  interface AssetPreviewProps {
3
4
  asset: File | AssetWithPopulatedCreatedBy;
5
+ actions?: React.ReactNode;
6
+ isLoading?: boolean;
4
7
  }
5
- export declare const AssetPreview: ({ asset }: AssetPreviewProps) => import("react/jsx-runtime").JSX.Element;
8
+ export declare const AssetPreview: ({ asset, actions, isLoading }: AssetPreviewProps) => import("react/jsx-runtime").JSX.Element;
6
9
  export {};
@@ -1,4 +1,4 @@
1
- import type { CreateFilesStream } from '../../../../shared/contracts/files';
1
+ import type { CreateFilesStream, File as UploadedFile } from '../../../../shared/contracts/files';
2
2
  interface UploadFilesArgs {
3
3
  formData: FormData;
4
4
  totalFiles: number;
@@ -14,20 +14,21 @@ interface UploadFromUrlsArgs {
14
14
  export declare const abortUpload: (uploadId: number) => void;
15
15
  declare const uploadApi: import("@reduxjs/toolkit/query").Api<import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError, {}, {}>, import("@reduxjs/toolkit/dist/query/endpointDefinitions").UpdateDefinitions<{}, "GuidedTourMeta" | "HomepageKeyStatistics" | "AiUsage" | "AiFeatureConfig" | "Asset" | "Folder", never> & {
16
16
  /**
17
- * Stream upload files to the /upload/unstable/stream endpoint.
18
- * Reads SSE stream for per-file progress updates.
17
+ * Upload files sequentially, one request per file, to `/upload/unstable/upload-file`.
18
+ * Real per-file byte progress comes from `XHR.upload.onprogress`.
19
19
  */
20
- uploadFilesStream: import("@reduxjs/toolkit/query").MutationDefinition<UploadFilesArgs, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError, {}, {}>, "GuidedTourMeta" | "HomepageKeyStatistics" | "AiUsage" | "AiFeatureConfig" | "Asset" | "Folder", CreateFilesStream.Response, "adminApi">;
20
+ uploadFiles: import("@reduxjs/toolkit/query").MutationDefinition<UploadFilesArgs, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError, {}, {}>, "GuidedTourMeta" | "HomepageKeyStatistics" | "AiUsage" | "AiFeatureConfig" | "Asset" | "Folder", UploadedFile[], "adminApi">;
21
21
  /**
22
22
  * Retry uploading cancelled files.
23
- * Retrieves original File objects and re-uploads only the cancelled ones.
23
+ * Maps cancelled rows back to their original entries and re-runs only those
24
+ * through the same sequential loop with a fresh AbortController.
24
25
  */
25
- retryCancelledFilesStream: import("@reduxjs/toolkit/query").MutationDefinition<void, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError, {}, {}>, "GuidedTourMeta" | "HomepageKeyStatistics" | "AiUsage" | "AiFeatureConfig" | "Asset" | "Folder", CreateFilesStream.Response, "adminApi">;
26
+ retryCancelledFiles: import("@reduxjs/toolkit/query").MutationDefinition<void, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError, {}, {}>, "GuidedTourMeta" | "HomepageKeyStatistics" | "AiUsage" | "AiFeatureConfig" | "Asset" | "Folder", UploadedFile[], "adminApi">;
26
27
  /**
27
28
  * Upload files from URLs.
28
- * Sends URLs to the server which fetches and uploads them.
29
+ * Sends URLs to the server which fetches and uploads them (SSE flow, unchanged).
29
30
  */
30
31
  uploadFromUrls: import("@reduxjs/toolkit/query").MutationDefinition<UploadFromUrlsArgs, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError, {}, {}>, "GuidedTourMeta" | "HomepageKeyStatistics" | "AiUsage" | "AiFeatureConfig" | "Asset" | "Folder", CreateFilesStream.Response, "adminApi">;
31
32
  }, "adminApi", "GuidedTourMeta" | "HomepageKeyStatistics" | "AiUsage" | "AiFeatureConfig" | "Asset" | "Folder", typeof import("@reduxjs/toolkit/query").coreModuleName | typeof import("@reduxjs/toolkit/dist/query/react").reactHooksModuleName>;
32
- export declare const useUploadFilesStreamMutation: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseMutation<import("@reduxjs/toolkit/query").MutationDefinition<UploadFilesArgs, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError, {}, {}>, "GuidedTourMeta" | "HomepageKeyStatistics" | "AiUsage" | "AiFeatureConfig" | "Asset" | "Folder", CreateFilesStream.Response, "adminApi">>, useRetryCancelledFilesStreamMutation: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseMutation<import("@reduxjs/toolkit/query").MutationDefinition<void, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError, {}, {}>, "GuidedTourMeta" | "HomepageKeyStatistics" | "AiUsage" | "AiFeatureConfig" | "Asset" | "Folder", CreateFilesStream.Response, "adminApi">>, useUploadFromUrlsMutation: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseMutation<import("@reduxjs/toolkit/query").MutationDefinition<UploadFromUrlsArgs, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError, {}, {}>, "GuidedTourMeta" | "HomepageKeyStatistics" | "AiUsage" | "AiFeatureConfig" | "Asset" | "Folder", CreateFilesStream.Response, "adminApi">>;
33
+ export declare const useUploadFilesMutation: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseMutation<import("@reduxjs/toolkit/query").MutationDefinition<UploadFilesArgs, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError, {}, {}>, "GuidedTourMeta" | "HomepageKeyStatistics" | "AiUsage" | "AiFeatureConfig" | "Asset" | "Folder", UploadedFile[], "adminApi">>, useRetryCancelledFilesMutation: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseMutation<import("@reduxjs/toolkit/query").MutationDefinition<void, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError, {}, {}>, "GuidedTourMeta" | "HomepageKeyStatistics" | "AiUsage" | "AiFeatureConfig" | "Asset" | "Folder", UploadedFile[], "adminApi">>, useUploadFromUrlsMutation: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseMutation<import("@reduxjs/toolkit/query").MutationDefinition<UploadFromUrlsArgs, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError, {}, {}>, "GuidedTourMeta" | "HomepageKeyStatistics" | "AiUsage" | "AiFeatureConfig" | "Asset" | "Folder", CreateFilesStream.Response, "adminApi">>;
33
34
  export { uploadApi };
@@ -1,4 +1,4 @@
1
- import type { File, Pagination, AssetWithPopulatedCreatedBy } from '../../../../shared/contracts/files';
1
+ import type { File, Pagination, UploadFileInfo, AssetWithPopulatedCreatedBy } from '../../../../shared/contracts/files';
2
2
  interface GetAssetsParams {
3
3
  page?: number;
4
4
  pageSize?: number;
@@ -9,5 +9,14 @@ interface GetAssetsResponse {
9
9
  results: File[];
10
10
  pagination: Pagination;
11
11
  }
12
- export declare const useGetAssetsQuery: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseQuery<import("@reduxjs/toolkit/query").QueryDefinition<void | GetAssetsParams, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError, {}, {}>, "GuidedTourMeta" | "HomepageKeyStatistics" | "AiUsage" | "AiFeatureConfig" | "Asset" | "Folder", GetAssetsResponse, "adminApi">>, useGetAssetQuery: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseQuery<import("@reduxjs/toolkit/query").QueryDefinition<number, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError, {}, {}>, "GuidedTourMeta" | "HomepageKeyStatistics" | "AiUsage" | "AiFeatureConfig" | "Asset" | "Folder", AssetWithPopulatedCreatedBy, "adminApi">>;
12
+ interface UpdateAssetArgs {
13
+ id: number;
14
+ fileInfo: Partial<UploadFileInfo>;
15
+ }
16
+ interface ReplaceAssetArgs {
17
+ id: number;
18
+ file: globalThis.File;
19
+ fileInfo?: Partial<UploadFileInfo>;
20
+ }
21
+ export declare const useGetAssetsQuery: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseQuery<import("@reduxjs/toolkit/query").QueryDefinition<void | GetAssetsParams, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError, {}, {}>, "GuidedTourMeta" | "HomepageKeyStatistics" | "AiUsage" | "AiFeatureConfig" | "Asset" | "Folder", GetAssetsResponse, "adminApi">>, useGetAssetQuery: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseQuery<import("@reduxjs/toolkit/query").QueryDefinition<number, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError, {}, {}>, "GuidedTourMeta" | "HomepageKeyStatistics" | "AiUsage" | "AiFeatureConfig" | "Asset" | "Folder", AssetWithPopulatedCreatedBy, "adminApi">>, useUpdateAssetMutation: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseMutation<import("@reduxjs/toolkit/query").MutationDefinition<UpdateAssetArgs, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError, {}, {}>, "GuidedTourMeta" | "HomepageKeyStatistics" | "AiUsage" | "AiFeatureConfig" | "Asset" | "Folder", AssetWithPopulatedCreatedBy, "adminApi">>, useReplaceAssetMutation: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseMutation<import("@reduxjs/toolkit/query").MutationDefinition<ReplaceAssetArgs, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError, {}, {}>, "GuidedTourMeta" | "HomepageKeyStatistics" | "AiUsage" | "AiFeatureConfig" | "Asset" | "Folder", AssetWithPopulatedCreatedBy, "adminApi">>, useDeleteAssetMutation: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseMutation<import("@reduxjs/toolkit/query").MutationDefinition<number, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError, {}, {}>, "GuidedTourMeta" | "HomepageKeyStatistics" | "AiUsage" | "AiFeatureConfig" | "Asset" | "Folder", unknown, "adminApi">>;
13
22
  export {};
@@ -12,5 +12,5 @@ interface GetFoldersParams {
12
12
  }
13
13
  export declare const useCreateFolderMutation: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseMutation<import("@reduxjs/toolkit/query").MutationDefinition<Pick<Folder, "name" | "parent">, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError, {}, {}>, "GuidedTourMeta" | "HomepageKeyStatistics" | "AiUsage" | "AiFeatureConfig" | "Asset" | "Folder", Folder, "adminApi">>, useGetFoldersQuery: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseQuery<import("@reduxjs/toolkit/query").QueryDefinition<void | GetFoldersParams, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError, {}, {}>, "GuidedTourMeta" | "HomepageKeyStatistics" | "AiUsage" | "AiFeatureConfig" | "Asset" | "Folder", Folder[], "adminApi">>, useGetFolderQuery: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseQuery<import("@reduxjs/toolkit/query").QueryDefinition<{
14
14
  id: number;
15
- }, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError, {}, {}>, "GuidedTourMeta" | "HomepageKeyStatistics" | "AiUsage" | "AiFeatureConfig" | "Asset" | "Folder", FolderWithCounts, "adminApi">>;
15
+ }, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError, {}, {}>, "GuidedTourMeta" | "HomepageKeyStatistics" | "AiUsage" | "AiFeatureConfig" | "Asset" | "Folder", FolderWithCounts, "adminApi">>, useGetAllFoldersQuery: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseQuery<import("@reduxjs/toolkit/query").QueryDefinition<void, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError, {}, {}>, "GuidedTourMeta" | "HomepageKeyStatistics" | "AiUsage" | "AiFeatureConfig" | "Asset" | "Folder", Folder[], "adminApi">>;
16
16
  export {};
@@ -0,0 +1,34 @@
1
+ import type { File } from '../../../../shared/contracts/files';
2
+ /**
3
+ * Thrown when an upload is aborted via its `AbortSignal`.
4
+ * Distinct from {@link UploadFileError} so callers can tell cancellation apart
5
+ * from a genuine failure.
6
+ */
7
+ export declare class UploadAbortedError extends Error {
8
+ constructor(message?: string);
9
+ }
10
+ /**
11
+ * Thrown when an upload fails (non-2xx response, network error, or unparseable body).
12
+ */
13
+ export declare class UploadFileError extends Error {
14
+ status?: number;
15
+ constructor(message: string, status?: number);
16
+ }
17
+ export type UploadProgressCallback = (bytes: number, total: number) => void;
18
+ /**
19
+ * Uploads a single file via `XMLHttpRequest`, exposing real byte-level upload
20
+ * progress through {@link XMLHttpRequest.upload}'s `progress` event.
21
+ *
22
+ * This is the only place raw XHR lives. `fetch()` is intentionally avoided here
23
+ * because it does not surface upload progress.
24
+ *
25
+ * @param url - The full endpoint URL to POST to.
26
+ * @param token - Admin auth token; the `Authorization` header is only set when present.
27
+ * @param formData - Prebuilt multipart body containing the single file and its `fileInfo`.
28
+ * @param signal - Aborts the in-flight request when triggered.
29
+ * @param onProgress - Called with `(loaded, total)` bytes as the upload progresses.
30
+ * @returns The parsed, signed `File` on a 2xx response.
31
+ * @throws {UploadAbortedError} When the signal aborts.
32
+ * @throws {UploadFileError} On a non-2xx response or network error.
33
+ */
34
+ export declare const uploadFileViaXHR: (url: string, token: string | null | undefined, formData: FormData, signal: AbortSignal, onProgress?: UploadProgressCallback) => Promise<File>;
@@ -9,13 +9,13 @@ export interface FileProgress {
9
9
  index: number;
10
10
  status: FileProgressStatus;
11
11
  size: number;
12
+ uploadedBytes: number;
12
13
  file?: File;
13
14
  error?: string;
14
15
  }
15
16
  export interface UploadProgressState {
16
17
  isVisible: boolean;
17
18
  isMinimized: boolean;
18
- progress: number;
19
19
  totalFiles: number;
20
20
  files: FileProgress[];
21
21
  errors: FileUploadError[];
@@ -24,6 +24,17 @@ export interface UploadProgressState {
24
24
  export interface RootState {
25
25
  uploadProgress: UploadProgressState;
26
26
  }
27
+ /**
28
+ * Byte-weighted aggregate progress across the whole batch: `sum(uploadedBytes) / sum(size)`.
29
+ *
30
+ * Falls back to count-based progress (settled files / total files) when all sizes are
31
+ * zero — e.g. URL-flow rows where the file size is unknown up front.
32
+ */
33
+ export declare const selectAggregateProgress: ((state: RootState) => number) & import("reselect").OutputSelectorFields<(args_0: FileProgress[]) => number, {
34
+ clearCache: () => void;
35
+ }> & {
36
+ clearCache: () => void;
37
+ };
27
38
  export declare const openUploadProgress: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
28
39
  totalFiles: number;
29
40
  fileNames: string[];
@@ -31,16 +42,18 @@ export declare const openUploadProgress: import("@reduxjs/toolkit").ActionCreato
31
42
  }, "uploadProgress/openUploadProgress">, setFileUploading: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
32
43
  name: string;
33
44
  index: number;
34
- total: number;
35
45
  size: number;
36
- }, "uploadProgress/setFileUploading">, setFileComplete: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
46
+ }, "uploadProgress/setFileUploading">, setFileProgress: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
47
+ index: number;
48
+ bytes: number;
49
+ }, "uploadProgress/setFileProgress">, setFileComplete: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
37
50
  index: number;
38
51
  file: File;
39
52
  }, "uploadProgress/setFileComplete">, setFileError: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
40
53
  index: number;
41
54
  name: string;
42
55
  message: string;
43
- }, "uploadProgress/setFileError">, updateProgress: import("@reduxjs/toolkit").ActionCreatorWithPayload<number, "uploadProgress/updateProgress">, addUploadErrors: import("@reduxjs/toolkit").ActionCreatorWithPayload<FileUploadError[], "uploadProgress/addUploadErrors">, closeUploadProgress: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"uploadProgress/closeUploadProgress">, toggleMinimize: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"uploadProgress/toggleMinimize">, cancelUpload: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"uploadProgress/cancelUpload">, setUploadFailed: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
56
+ }, "uploadProgress/setFileError">, addUploadErrors: import("@reduxjs/toolkit").ActionCreatorWithPayload<FileUploadError[], "uploadProgress/addUploadErrors">, closeUploadProgress: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"uploadProgress/closeUploadProgress">, toggleMinimize: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"uploadProgress/toggleMinimize">, cancelUpload: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"uploadProgress/cancelUpload">, setUploadFailed: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
44
57
  message: string;
45
58
  }, "uploadProgress/setUploadFailed">, retryCancelledFiles: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"uploadProgress/retryCancelledFiles">;
46
59
  export declare const uploadProgressReducer: import("redux").Reducer<UploadProgressState>;
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Coalesces high-frequency values into at most one flush per animation frame.
3
+ *
4
+ * `XHR.upload.onprogress` can fire many times per second on a fast connection.
5
+ * Dispatching each one to Redux would flood the store, so the orchestrator routes
6
+ * progress through a batcher: many `schedule(value)` calls within a single frame
7
+ * collapse into one `flush(latestValue)` callback.
8
+ *
9
+ * @param flush - Invoked once per frame with the most recent scheduled value.
10
+ */
11
+ export declare const createRafBatcher: <T>(flush: (value: T) => void) => {
12
+ /**
13
+ * Records the latest value and ensures a flush is scheduled for the next frame.
14
+ * Repeated calls within the same frame overwrite the value without scheduling
15
+ * additional frames.
16
+ */
17
+ schedule(value: T): void;
18
+ /**
19
+ * Cancels any pending flush so a value scheduled this frame will not fire.
20
+ */
21
+ cancel(): void;
22
+ };
23
+ export type RafBatcher<T> = ReturnType<typeof createRafBatcher<T>>;
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Fetch a file at `url` and trigger a browser download with the given filename.
3
+ * Goes via a blob + temporary anchor so we honour the `download` attribute
4
+ * even when the file is served same-origin without `Content-Disposition`.
5
+ */
6
+ export declare const downloadFile: (url: string, fileName: string) => Promise<void>;
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var dk = {
3
+ var da = {
4
4
  "bulk.select.label": "Vælg alle medier",
5
5
  "button.next": "Næste",
6
6
  "checkControl.crop-duplicate": "Duplikér og beskær",
@@ -100,5 +100,5 @@ var dk = {
100
100
  "window.confirm.close-modal.files": "Er du sikker? Du har filer som ikke er blevet uploaded endnu."
101
101
  };
102
102
 
103
- module.exports = dk;
104
- //# sourceMappingURL=dk.json.js.map
103
+ module.exports = da;
104
+ //# sourceMappingURL=da.json.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dk.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"da.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,4 +1,4 @@
1
- var dk = {
1
+ var da = {
2
2
  "bulk.select.label": "Vælg alle medier",
3
3
  "button.next": "Næste",
4
4
  "checkControl.crop-duplicate": "Duplikér og beskær",
@@ -98,5 +98,5 @@ var dk = {
98
98
  "window.confirm.close-modal.files": "Er du sikker? Du har filer som ikke er blevet uploaded endnu."
99
99
  };
100
100
 
101
- export { dk as default };
102
- //# sourceMappingURL=dk.json.mjs.map
101
+ export { da as default };
102
+ //# sourceMappingURL=da.json.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"dk.json.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"da.json.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -10,7 +10,6 @@ var en = {
10
10
  "asset-details.videoNotSupported": "Your browser does not support the video tag.",
11
11
  "asset-details.size": "Size",
12
12
  "asset-details.dimensions": "Dimensions",
13
- "asset-details.duration": "Duration",
14
13
  "asset-details.creationDate": "Creation date",
15
14
  "asset-details.lastUpdated": "Last updated",
16
15
  "asset-details.createdBy": "Created by",
@@ -19,6 +18,32 @@ var en = {
19
18
  "asset-details.fileName": "File name",
20
19
  "asset-details.caption": "Caption",
21
20
  "asset-details.alternativeText": "Alternative text",
21
+ "asset-details.location": "Location",
22
+ "asset-details.save": "Save changes",
23
+ "asset-details.update.success": "File updated",
24
+ "asset-details.update.error": "Failed to update the file.",
25
+ "asset-details.field.empty": "{label} is currently empty.",
26
+ "asset-details.location.root": "Media Library",
27
+ "asset-details.saveChanges": "Save changes",
28
+ "asset-details.delete.trigger": "Delete this file",
29
+ "asset-details.delete.title": "Delete this media file?",
30
+ "asset-details.delete.description": "This file cannot be recovered once deleted. If it is currently in use, linked content will break and image containers will be empty.",
31
+ "asset-details.delete.success": "1 element have been deleted from {folderName}",
32
+ "asset-details.delete.error": "Failed to delete the file.",
33
+ "asset-details.delete.loading": "Deleting the file…",
34
+ "asset-details.replace.trigger": "Replace this file",
35
+ "asset-details.replace.title": "Replace this media file?",
36
+ "asset-details.replace.description": "Current content will be permanently replaced.",
37
+ "asset-details.replace.description.ai": "AI will generate new metadata after upload.",
38
+ "asset-details.replace.continue": "Continue",
39
+ "asset-details.replace.success": "File replaced.",
40
+ "asset-details.replace.error": "Failed to replace the file.",
41
+ "asset-details.replace.loading": "Replacing the file…",
42
+ "asset-details.copy-link.trigger": "Copy link",
43
+ "asset-details.copy-link.success": "Link copied.",
44
+ "asset-details.copy-link.error": "Failed to copy the link.",
45
+ "asset-details.download.trigger": "Download",
46
+ "asset-details.download.error": "Failed to download the file.",
22
47
  "asset-details.noPreview": "No preview available",
23
48
  "upload.generic-error": "An error occurred while uploading the file.",
24
49
  "upload.progress": "Upload progress",
@@ -1 +1 @@
1
- {"version":3,"file":"en.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"en.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -8,7 +8,6 @@ var en = {
8
8
  "asset-details.videoNotSupported": "Your browser does not support the video tag.",
9
9
  "asset-details.size": "Size",
10
10
  "asset-details.dimensions": "Dimensions",
11
- "asset-details.duration": "Duration",
12
11
  "asset-details.creationDate": "Creation date",
13
12
  "asset-details.lastUpdated": "Last updated",
14
13
  "asset-details.createdBy": "Created by",
@@ -17,6 +16,32 @@ var en = {
17
16
  "asset-details.fileName": "File name",
18
17
  "asset-details.caption": "Caption",
19
18
  "asset-details.alternativeText": "Alternative text",
19
+ "asset-details.location": "Location",
20
+ "asset-details.save": "Save changes",
21
+ "asset-details.update.success": "File updated",
22
+ "asset-details.update.error": "Failed to update the file.",
23
+ "asset-details.field.empty": "{label} is currently empty.",
24
+ "asset-details.location.root": "Media Library",
25
+ "asset-details.saveChanges": "Save changes",
26
+ "asset-details.delete.trigger": "Delete this file",
27
+ "asset-details.delete.title": "Delete this media file?",
28
+ "asset-details.delete.description": "This file cannot be recovered once deleted. If it is currently in use, linked content will break and image containers will be empty.",
29
+ "asset-details.delete.success": "1 element have been deleted from {folderName}",
30
+ "asset-details.delete.error": "Failed to delete the file.",
31
+ "asset-details.delete.loading": "Deleting the file…",
32
+ "asset-details.replace.trigger": "Replace this file",
33
+ "asset-details.replace.title": "Replace this media file?",
34
+ "asset-details.replace.description": "Current content will be permanently replaced.",
35
+ "asset-details.replace.description.ai": "AI will generate new metadata after upload.",
36
+ "asset-details.replace.continue": "Continue",
37
+ "asset-details.replace.success": "File replaced.",
38
+ "asset-details.replace.error": "Failed to replace the file.",
39
+ "asset-details.replace.loading": "Replacing the file…",
40
+ "asset-details.copy-link.trigger": "Copy link",
41
+ "asset-details.copy-link.success": "Link copied.",
42
+ "asset-details.copy-link.error": "Failed to copy the link.",
43
+ "asset-details.download.trigger": "Download",
44
+ "asset-details.download.error": "Failed to download the file.",
20
45
  "asset-details.noPreview": "No preview available",
21
46
  "upload.generic-error": "An error occurred while uploading the file.",
22
47
  "upload.progress": "Upload progress",
@@ -1 +1 @@
1
- {"version":3,"file":"en.json.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"en.json.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -36,9 +36,6 @@ async function bootstrap({ strapi: strapi1 }) {
36
36
  await registerPermissionActions();
37
37
  await registerWebhookEvents();
38
38
  await index.getService('weeklyMetrics').registerCron();
39
- if (strapi1.ai.admin.isEnabled() === true) {
40
- await index.getService('aiMetadataJobs').registerCron();
41
- }
42
39
  index.getService('metrics').sendUploadPluginMetrics();
43
40
  index.getService('extensions').signFileUrlsOnDocumentService();
44
41
  }