@strapi/upload 5.35.0 → 5.36.1
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.
- package/dist/admin/future/App.js +8 -20
- package/dist/admin/future/App.js.map +1 -1
- package/dist/admin/future/App.mjs +8 -20
- package/dist/admin/future/App.mjs.map +1 -1
- package/dist/admin/future/components/UploadProgressDialog.js +494 -0
- package/dist/admin/future/components/UploadProgressDialog.js.map +1 -0
- package/dist/admin/future/components/UploadProgressDialog.mjs +473 -0
- package/dist/admin/future/components/UploadProgressDialog.mjs.map +1 -0
- package/dist/admin/future/enums.js +12 -0
- package/dist/admin/future/enums.js.map +1 -0
- package/dist/admin/future/enums.mjs +10 -0
- package/dist/admin/future/enums.mjs.map +1 -0
- package/dist/admin/future/pages/Assets/AssetsPage.js +311 -0
- package/dist/admin/future/pages/Assets/AssetsPage.js.map +1 -0
- package/dist/admin/future/pages/Assets/AssetsPage.mjs +290 -0
- package/dist/admin/future/pages/Assets/AssetsPage.mjs.map +1 -0
- package/dist/admin/future/pages/Assets/components/AssetsGrid.js +164 -0
- package/dist/admin/future/pages/Assets/components/AssetsGrid.js.map +1 -0
- package/dist/admin/future/pages/Assets/components/AssetsGrid.mjs +162 -0
- package/dist/admin/future/pages/Assets/components/AssetsGrid.mjs.map +1 -0
- package/dist/admin/future/pages/Assets/components/AssetsTable.js +198 -0
- package/dist/admin/future/pages/Assets/components/AssetsTable.js.map +1 -0
- package/dist/admin/future/pages/Assets/components/AssetsTable.mjs +196 -0
- package/dist/admin/future/pages/Assets/components/AssetsTable.mjs.map +1 -0
- package/dist/admin/future/pages/Assets/components/DropZone/UploadDropZone.js +127 -0
- package/dist/admin/future/pages/Assets/components/DropZone/UploadDropZone.js.map +1 -0
- package/dist/admin/future/pages/Assets/components/DropZone/UploadDropZone.mjs +105 -0
- package/dist/admin/future/pages/Assets/components/DropZone/UploadDropZone.mjs.map +1 -0
- package/dist/admin/future/pages/Assets/components/DropZone/UploadDropZoneContext.js +107 -0
- package/dist/admin/future/pages/Assets/components/DropZone/UploadDropZoneContext.js.map +1 -0
- package/dist/admin/future/pages/Assets/components/DropZone/UploadDropZoneContext.mjs +104 -0
- package/dist/admin/future/pages/Assets/components/DropZone/UploadDropZoneContext.mjs.map +1 -0
- package/dist/admin/future/pages/Assets/constants.js +54 -0
- package/dist/admin/future/pages/Assets/constants.js.map +1 -0
- package/dist/admin/future/pages/Assets/constants.mjs +50 -0
- package/dist/admin/future/pages/Assets/constants.mjs.map +1 -0
- package/dist/admin/future/pages/Assets/hooks/useInfiniteAssets.js +77 -0
- package/dist/admin/future/pages/Assets/hooks/useInfiniteAssets.js.map +1 -0
- package/dist/admin/future/pages/Assets/hooks/useInfiniteAssets.mjs +74 -0
- package/dist/admin/future/pages/Assets/hooks/useInfiniteAssets.mjs.map +1 -0
- package/dist/admin/future/services/api.js +419 -9
- package/dist/admin/future/services/api.js.map +1 -1
- package/dist/admin/future/services/api.mjs +417 -9
- package/dist/admin/future/services/api.mjs.map +1 -1
- package/dist/admin/future/services/assets.js +37 -0
- package/dist/admin/future/services/assets.js.map +1 -0
- package/dist/admin/future/services/assets.mjs +35 -0
- package/dist/admin/future/services/assets.mjs.map +1 -0
- package/dist/admin/future/store/hooks.js +10 -0
- package/dist/admin/future/store/hooks.js.map +1 -0
- package/dist/admin/future/store/hooks.mjs +7 -0
- package/dist/admin/future/store/hooks.mjs.map +1 -0
- package/dist/admin/future/store/uploadProgress.js +156 -0
- package/dist/admin/future/store/uploadProgress.js.map +1 -0
- package/dist/admin/future/store/uploadProgress.mjs +143 -0
- package/dist/admin/future/store/uploadProgress.mjs.map +1 -0
- package/dist/admin/future/utils/files.js +23 -0
- package/dist/admin/future/utils/files.js.map +1 -0
- package/dist/admin/future/utils/files.mjs +19 -0
- package/dist/admin/future/utils/files.mjs.map +1 -0
- package/dist/admin/future/utils/getAssetIcon.js +28 -0
- package/dist/admin/future/utils/getAssetIcon.js.map +1 -0
- package/dist/admin/future/utils/getAssetIcon.mjs +26 -0
- package/dist/admin/future/utils/getAssetIcon.mjs.map +1 -0
- package/dist/admin/index.js +11 -0
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +11 -0
- package/dist/admin/index.mjs.map +1 -1
- package/dist/admin/package.json.js +11 -9
- package/dist/admin/package.json.js.map +1 -1
- package/dist/admin/package.json.mjs +11 -9
- package/dist/admin/package.json.mjs.map +1 -1
- package/dist/admin/src/future/components/UploadProgressDialog.d.ts +1 -0
- package/dist/admin/src/future/enums.d.ts +6 -0
- package/dist/admin/src/future/pages/Assets/AssetsPage.d.ts +1 -0
- package/dist/admin/src/future/pages/Assets/components/AssetsGrid.d.ts +6 -0
- package/dist/admin/src/future/pages/Assets/components/AssetsTable.d.ts +6 -0
- package/dist/admin/src/future/pages/Assets/components/DropZone/UploadDropZone.d.ts +9 -0
- package/dist/admin/src/future/pages/Assets/components/DropZone/UploadDropZoneContext.d.ts +11 -0
- package/dist/admin/src/future/pages/Assets/constants.d.ts +17 -0
- package/dist/admin/src/future/pages/Assets/hooks/useInfiniteAssets.d.ts +17 -0
- package/dist/admin/src/future/services/api.d.ts +21 -3
- package/dist/admin/src/future/services/assets.d.ts +13 -0
- package/dist/admin/src/future/store/hooks.d.ts +6 -0
- package/dist/admin/src/future/store/uploadProgress.d.ts +46 -0
- package/dist/admin/src/future/utils/files.d.ts +3 -0
- package/dist/admin/src/future/utils/getAssetIcon.d.ts +12 -0
- package/dist/admin/translations/en.json.js +25 -0
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +25 -0
- package/dist/admin/translations/en.json.mjs.map +1 -1
- package/dist/server/controllers/admin-upload.js +151 -2
- package/dist/server/controllers/admin-upload.js.map +1 -1
- package/dist/server/controllers/admin-upload.mjs +151 -2
- package/dist/server/controllers/admin-upload.mjs.map +1 -1
- package/dist/server/controllers/content-api.js +8 -2
- package/dist/server/controllers/content-api.js.map +1 -1
- package/dist/server/controllers/content-api.mjs +9 -3
- package/dist/server/controllers/content-api.mjs.map +1 -1
- package/dist/server/routes/admin.js +10 -0
- package/dist/server/routes/admin.js.map +1 -1
- package/dist/server/routes/admin.mjs +10 -0
- package/dist/server/routes/admin.mjs.map +1 -1
- package/dist/server/src/controllers/admin-upload.d.ts +12 -0
- package/dist/server/src/controllers/admin-upload.d.ts.map +1 -1
- package/dist/server/src/controllers/content-api.d.ts.map +1 -1
- package/dist/server/src/controllers/index.d.ts +1 -0
- package/dist/server/src/controllers/index.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +1 -0
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/routes/admin.d.ts.map +1 -1
- package/dist/server/src/utils/mime-validation.d.ts +5 -0
- package/dist/server/src/utils/mime-validation.d.ts.map +1 -1
- package/dist/server/utils/mime-validation.js +7 -4
- package/dist/server/utils/mime-validation.js.map +1 -1
- package/dist/server/utils/mime-validation.mjs +7 -4
- package/dist/server/utils/mime-validation.mjs.map +1 -1
- package/dist/shared/contracts/files.d.ts +52 -0
- package/dist/shared/contracts/files.d.ts.map +1 -0
- package/package.json +11 -9
- package/dist/admin/future/pages/AIGenerationPage.js +0 -24
- package/dist/admin/future/pages/AIGenerationPage.js.map +0 -1
- package/dist/admin/future/pages/AIGenerationPage.mjs +0 -22
- package/dist/admin/future/pages/AIGenerationPage.mjs.map +0 -1
- package/dist/admin/future/pages/MediaLibraryPage.js +0 -119
- package/dist/admin/future/pages/MediaLibraryPage.js.map +0 -1
- package/dist/admin/future/pages/MediaLibraryPage.mjs +0 -98
- package/dist/admin/future/pages/MediaLibraryPage.mjs.map +0 -1
- package/dist/admin/src/future/pages/AIGenerationPage.d.ts +0 -1
- package/dist/admin/src/future/pages/MediaLibraryPage.d.ts +0 -1
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
-
import { Layouts } from '@strapi/admin/strapi-admin';
|
|
3
|
-
import { Button } from '@strapi/design-system';
|
|
4
|
-
|
|
5
|
-
const AIGenerationPage = ()=>{
|
|
6
|
-
return /*#__PURE__*/ jsxs(Layouts.Root, {
|
|
7
|
-
children: [
|
|
8
|
-
/*#__PURE__*/ jsx(Layouts.Header, {
|
|
9
|
-
title: "AI Generation",
|
|
10
|
-
primaryAction: /*#__PURE__*/ jsx(Button, {
|
|
11
|
-
children: "TODO: Generate"
|
|
12
|
-
})
|
|
13
|
-
}),
|
|
14
|
-
/*#__PURE__*/ jsx(Layouts.Content, {
|
|
15
|
-
children: "TODO: AI ListView"
|
|
16
|
-
})
|
|
17
|
-
]
|
|
18
|
-
});
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
export { AIGenerationPage };
|
|
22
|
-
//# sourceMappingURL=AIGenerationPage.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"AIGenerationPage.mjs","sources":["../../../../admin/src/future/pages/AIGenerationPage.tsx"],"sourcesContent":["import { Layouts } from '@strapi/admin/strapi-admin';\nimport { Button } from '@strapi/design-system';\n\nexport const AIGenerationPage = () => {\n return (\n <Layouts.Root>\n <Layouts.Header title=\"AI Generation\" primaryAction={<Button>TODO: Generate</Button>} />\n\n <Layouts.Content>TODO: AI ListView</Layouts.Content>\n </Layouts.Root>\n );\n};\n"],"names":["AIGenerationPage","_jsxs","Layouts","Root","_jsx","Header","title","primaryAction","Button","Content"],"mappings":";;;;MAGaA,gBAAmB,GAAA,IAAA;IAC9B,qBACEC,IAAA,CAACC,QAAQC,IAAI,EAAA;;AACX,0BAAAC,GAAA,CAACF,QAAQG,MAAM,EAAA;gBAACC,KAAM,EAAA,eAAA;AAAgBC,gBAAAA,aAAAA,gBAAeH,GAACI,CAAAA,MAAAA,EAAAA;AAAO,oBAAA,QAAA,EAAA;;;AAE7D,0BAAAJ,GAAA,CAACF,QAAQO,OAAO,EAAA;AAAC,gBAAA,QAAA,EAAA;;;;AAGvB;;;;"}
|
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
-
var React = require('react');
|
|
5
|
-
var strapiAdmin = require('@strapi/admin/strapi-admin');
|
|
6
|
-
var designSystem = require('@strapi/design-system');
|
|
7
|
-
var icons = require('@strapi/icons');
|
|
8
|
-
var reactIntl = require('react-intl');
|
|
9
|
-
var api = require('../services/api.js');
|
|
10
|
-
var translations = require('../utils/translations.js');
|
|
11
|
-
|
|
12
|
-
function _interopNamespaceDefault(e) {
|
|
13
|
-
var n = Object.create(null);
|
|
14
|
-
if (e) {
|
|
15
|
-
Object.keys(e).forEach(function (k) {
|
|
16
|
-
if (k !== 'default') {
|
|
17
|
-
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
18
|
-
Object.defineProperty(n, k, d.get ? d : {
|
|
19
|
-
enumerable: true,
|
|
20
|
-
get: function () { return e[k]; }
|
|
21
|
-
});
|
|
22
|
-
}
|
|
23
|
-
});
|
|
24
|
-
}
|
|
25
|
-
n.default = e;
|
|
26
|
-
return Object.freeze(n);
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
|
|
30
|
-
|
|
31
|
-
const MediaLibraryPage = ()=>{
|
|
32
|
-
const { formatMessage } = reactIntl.useIntl();
|
|
33
|
-
const { toggleNotification } = strapiAdmin.useNotification();
|
|
34
|
-
const { _unstableFormatAPIError } = strapiAdmin.useAPIErrorHandler();
|
|
35
|
-
const fileInputRef = React__namespace.useRef(null);
|
|
36
|
-
const [uploadFiles] = api.useUploadFilesMutation();
|
|
37
|
-
const handleFileSelect = ()=>{
|
|
38
|
-
fileInputRef.current?.click();
|
|
39
|
-
};
|
|
40
|
-
const handleFileChange = async (e)=>{
|
|
41
|
-
const files = e.target.files;
|
|
42
|
-
if (files && files.length > 0) {
|
|
43
|
-
const formData = new FormData();
|
|
44
|
-
const filesArray = Array.from(files);
|
|
45
|
-
// Add files and fileInfo to the form data
|
|
46
|
-
filesArray.forEach((file)=>{
|
|
47
|
-
formData.append('files', file);
|
|
48
|
-
formData.append('fileInfo', JSON.stringify({
|
|
49
|
-
name: file.name,
|
|
50
|
-
caption: null,
|
|
51
|
-
alternativeText: null,
|
|
52
|
-
folder: null
|
|
53
|
-
}));
|
|
54
|
-
});
|
|
55
|
-
try {
|
|
56
|
-
// unwrap() is needed to throw errors and trigger the catch block
|
|
57
|
-
// Without it, RTK Query never rejects and catch would never execute
|
|
58
|
-
await uploadFiles(formData).unwrap();
|
|
59
|
-
toggleNotification({
|
|
60
|
-
type: 'success',
|
|
61
|
-
message: formatMessage({
|
|
62
|
-
id: translations.getTranslationKey('assets.uploaded'),
|
|
63
|
-
defaultMessage: '{number, plural, one {# asset} other {# assets}} uploaded successfully'
|
|
64
|
-
}, {
|
|
65
|
-
number: filesArray.length
|
|
66
|
-
})
|
|
67
|
-
});
|
|
68
|
-
} catch (error) {
|
|
69
|
-
// Format the error message using the API error handler to provide
|
|
70
|
-
// context-specific feedback (e.g., file size limits, format restrictions, network errors)
|
|
71
|
-
const errorMessage = _unstableFormatAPIError(error);
|
|
72
|
-
toggleNotification({
|
|
73
|
-
type: 'danger',
|
|
74
|
-
message: errorMessage
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
// Reset input so the same file can be selected again
|
|
79
|
-
e.target.value = '';
|
|
80
|
-
};
|
|
81
|
-
return /*#__PURE__*/ jsxRuntime.jsxs(strapiAdmin.Layouts.Root, {
|
|
82
|
-
children: [
|
|
83
|
-
/*#__PURE__*/ jsxRuntime.jsx(designSystem.VisuallyHidden, {
|
|
84
|
-
children: /*#__PURE__*/ jsxRuntime.jsx("input", {
|
|
85
|
-
type: "file",
|
|
86
|
-
ref: fileInputRef,
|
|
87
|
-
onChange: handleFileChange,
|
|
88
|
-
multiple: true
|
|
89
|
-
})
|
|
90
|
-
}),
|
|
91
|
-
/*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Layouts.Header, {
|
|
92
|
-
title: "TODO: Folder location",
|
|
93
|
-
primaryAction: /*#__PURE__*/ jsxRuntime.jsx(designSystem.SimpleMenu, {
|
|
94
|
-
popoverPlacement: "bottom-end",
|
|
95
|
-
variant: "default",
|
|
96
|
-
endIcon: /*#__PURE__*/ jsxRuntime.jsx(icons.ChevronDown, {}),
|
|
97
|
-
label: formatMessage({
|
|
98
|
-
id: translations.getTranslationKey('new'),
|
|
99
|
-
defaultMessage: 'New'
|
|
100
|
-
}),
|
|
101
|
-
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.MenuItem, {
|
|
102
|
-
onSelect: handleFileSelect,
|
|
103
|
-
startIcon: /*#__PURE__*/ jsxRuntime.jsx(icons.Files, {}),
|
|
104
|
-
children: formatMessage({
|
|
105
|
-
id: translations.getTranslationKey('import-files'),
|
|
106
|
-
defaultMessage: 'Import files'
|
|
107
|
-
})
|
|
108
|
-
})
|
|
109
|
-
})
|
|
110
|
-
}),
|
|
111
|
-
/*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Layouts.Content, {
|
|
112
|
-
children: "TODO: List/Grid views"
|
|
113
|
-
})
|
|
114
|
-
]
|
|
115
|
-
});
|
|
116
|
-
};
|
|
117
|
-
|
|
118
|
-
exports.MediaLibraryPage = MediaLibraryPage;
|
|
119
|
-
//# sourceMappingURL=MediaLibraryPage.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"MediaLibraryPage.js","sources":["../../../../admin/src/future/pages/MediaLibraryPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Layouts, useNotification, useAPIErrorHandler } from '@strapi/admin/strapi-admin';\nimport { MenuItem, SimpleMenu, VisuallyHidden } from '@strapi/design-system';\nimport { ChevronDown, Files } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { useUploadFilesMutation } from '../services/api';\nimport { getTranslationKey } from '../utils/translations';\n\nexport const MediaLibraryPage = () => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError } = useAPIErrorHandler();\n const fileInputRef = React.useRef<HTMLInputElement>(null);\n const [uploadFiles] = useUploadFilesMutation();\n\n const handleFileSelect = () => {\n fileInputRef.current?.click();\n };\n\n const handleFileChange = async (e: React.ChangeEvent<HTMLInputElement>) => {\n const files = e.target.files;\n if (files && files.length > 0) {\n const formData = new FormData();\n const filesArray = Array.from(files);\n\n // Add files and fileInfo to the form data\n filesArray.forEach((file) => {\n formData.append('files', file);\n formData.append(\n 'fileInfo',\n JSON.stringify({\n name: file.name,\n caption: null,\n alternativeText: null,\n folder: null,\n })\n );\n });\n\n try {\n // unwrap() is needed to throw errors and trigger the catch block\n // Without it, RTK Query never rejects and catch would never execute\n await uploadFiles(formData).unwrap();\n toggleNotification({\n type: 'success',\n message: formatMessage(\n {\n id: getTranslationKey('assets.uploaded'),\n defaultMessage:\n '{number, plural, one {# asset} other {# assets}} uploaded successfully',\n },\n { number: filesArray.length }\n ),\n });\n } catch (error) {\n // Format the error message using the API error handler to provide\n // context-specific feedback (e.g., file size limits, format restrictions, network errors)\n const errorMessage = _unstableFormatAPIError(error as Error);\n toggleNotification({\n type: 'danger',\n message: errorMessage,\n });\n }\n }\n // Reset input so the same file can be selected again\n e.target.value = '';\n };\n\n return (\n <Layouts.Root>\n <VisuallyHidden>\n <input type=\"file\" ref={fileInputRef} onChange={handleFileChange} multiple />\n </VisuallyHidden>\n <Layouts.Header\n title=\"TODO: Folder location\"\n primaryAction={\n <SimpleMenu\n popoverPlacement=\"bottom-end\"\n variant=\"default\"\n endIcon={<ChevronDown />}\n label={formatMessage({ id: getTranslationKey('new'), defaultMessage: 'New' })}\n >\n <MenuItem onSelect={handleFileSelect} startIcon={<Files />}>\n {formatMessage({\n id: getTranslationKey('import-files'),\n defaultMessage: 'Import files',\n })}\n </MenuItem>\n </SimpleMenu>\n }\n />\n\n <Layouts.Content>TODO: List/Grid views</Layouts.Content>\n </Layouts.Root>\n );\n};\n"],"names":["MediaLibraryPage","formatMessage","useIntl","toggleNotification","useNotification","_unstableFormatAPIError","useAPIErrorHandler","fileInputRef","React","useRef","uploadFiles","useUploadFilesMutation","handleFileSelect","current","click","handleFileChange","e","files","target","length","formData","FormData","filesArray","Array","from","forEach","file","append","JSON","stringify","name","caption","alternativeText","folder","unwrap","type","message","id","getTranslationKey","defaultMessage","number","error","errorMessage","value","_jsxs","Layouts","Root","_jsx","VisuallyHidden","input","ref","onChange","multiple","Header","title","primaryAction","SimpleMenu","popoverPlacement","variant","endIcon","ChevronDown","label","MenuItem","onSelect","startIcon","Files","Content"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAUaA,gBAAmB,GAAA,IAAA;IAC9B,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;IAC1B,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,2BAAAA,EAAAA;IAC/B,MAAM,EAAEC,uBAAuB,EAAE,GAAGC,8BAAAA,EAAAA;IACpC,MAAMC,YAAAA,GAAeC,gBAAMC,CAAAA,MAAM,CAAmB,IAAA,CAAA;IACpD,MAAM,CAACC,YAAY,GAAGC,0BAAAA,EAAAA;AAEtB,IAAA,MAAMC,gBAAmB,GAAA,IAAA;AACvBL,QAAAA,YAAAA,CAAaM,OAAO,EAAEC,KAAAA,EAAAA;AACxB,KAAA;AAEA,IAAA,MAAMC,mBAAmB,OAAOC,CAAAA,GAAAA;AAC9B,QAAA,MAAMC,KAAQD,GAAAA,CAAAA,CAAEE,MAAM,CAACD,KAAK;AAC5B,QAAA,IAAIA,KAASA,IAAAA,KAAAA,CAAME,MAAM,GAAG,CAAG,EAAA;AAC7B,YAAA,MAAMC,WAAW,IAAIC,QAAAA,EAAAA;YACrB,MAAMC,UAAAA,GAAaC,KAAMC,CAAAA,IAAI,CAACP,KAAAA,CAAAA;;YAG9BK,UAAWG,CAAAA,OAAO,CAAC,CAACC,IAAAA,GAAAA;gBAClBN,QAASO,CAAAA,MAAM,CAAC,OAASD,EAAAA,IAAAA,CAAAA;AACzBN,gBAAAA,QAAAA,CAASO,MAAM,CACb,UACAC,EAAAA,IAAAA,CAAKC,SAAS,CAAC;AACbC,oBAAAA,IAAAA,EAAMJ,KAAKI,IAAI;oBACfC,OAAS,EAAA,IAAA;oBACTC,eAAiB,EAAA,IAAA;oBACjBC,MAAQ,EAAA;AACV,iBAAA,CAAA,CAAA;AAEJ,aAAA,CAAA;YAEA,IAAI;;;gBAGF,MAAMvB,WAAAA,CAAYU,UAAUc,MAAM,EAAA;gBAClC/B,kBAAmB,CAAA;oBACjBgC,IAAM,EAAA,SAAA;AACNC,oBAAAA,OAAAA,EAASnC,aACP,CAAA;AACEoC,wBAAAA,EAAAA,EAAIC,8BAAkB,CAAA,iBAAA,CAAA;wBACtBC,cACE,EAAA;qBAEJ,EAAA;AAAEC,wBAAAA,MAAAA,EAAQlB,WAAWH;AAAO,qBAAA;AAEhC,iBAAA,CAAA;AACF,aAAA,CAAE,OAAOsB,KAAO,EAAA;;;AAGd,gBAAA,MAAMC,eAAerC,uBAAwBoC,CAAAA,KAAAA,CAAAA;gBAC7CtC,kBAAmB,CAAA;oBACjBgC,IAAM,EAAA,QAAA;oBACNC,OAASM,EAAAA;AACX,iBAAA,CAAA;AACF;AACF;;QAEA1B,CAAEE,CAAAA,MAAM,CAACyB,KAAK,GAAG,EAAA;AACnB,KAAA;IAEA,qBACEC,eAAA,CAACC,oBAAQC,IAAI,EAAA;;0BACXC,cAACC,CAAAA,2BAAAA,EAAAA;AACC,gBAAA,QAAA,gBAAAD,cAACE,CAAAA,OAAAA,EAAAA;oBAAMd,IAAK,EAAA,MAAA;oBAAOe,GAAK3C,EAAAA,YAAAA;oBAAc4C,QAAUpC,EAAAA,gBAAAA;oBAAkBqC,QAAQ,EAAA;;;AAE5E,0BAAAL,cAAA,CAACF,oBAAQQ,MAAM,EAAA;gBACbC,KAAM,EAAA,uBAAA;AACNC,gBAAAA,aAAAA,gBACER,cAACS,CAAAA,uBAAAA,EAAAA;oBACCC,gBAAiB,EAAA,YAAA;oBACjBC,OAAQ,EAAA,SAAA;AACRC,oBAAAA,OAAAA,gBAASZ,cAACa,CAAAA,iBAAAA,EAAAA,EAAAA,CAAAA;AACVC,oBAAAA,KAAAA,EAAO5D,aAAc,CAAA;AAAEoC,wBAAAA,EAAAA,EAAIC,8BAAkB,CAAA,KAAA,CAAA;wBAAQC,cAAgB,EAAA;AAAM,qBAAA,CAAA;AAE3E,oBAAA,QAAA,gBAAAQ,cAACe,CAAAA,qBAAAA,EAAAA;wBAASC,QAAUnD,EAAAA,gBAAAA;AAAkBoD,wBAAAA,SAAAA,gBAAWjB,cAACkB,CAAAA,WAAAA,EAAAA,EAAAA,CAAAA;kCAC/ChE,aAAc,CAAA;AACboC,4BAAAA,EAAAA,EAAIC,8BAAkB,CAAA,cAAA,CAAA;4BACtBC,cAAgB,EAAA;AAClB,yBAAA;;;;AAMR,0BAAAQ,cAAA,CAACF,oBAAQqB,OAAO,EAAA;AAAC,gBAAA,QAAA,EAAA;;;;AAGvB;;;;"}
|
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
-
import * as React from 'react';
|
|
3
|
-
import { useNotification, useAPIErrorHandler, Layouts } from '@strapi/admin/strapi-admin';
|
|
4
|
-
import { VisuallyHidden, SimpleMenu, MenuItem } from '@strapi/design-system';
|
|
5
|
-
import { ChevronDown, Files } from '@strapi/icons';
|
|
6
|
-
import { useIntl } from 'react-intl';
|
|
7
|
-
import { useUploadFilesMutation } from '../services/api.mjs';
|
|
8
|
-
import { getTranslationKey } from '../utils/translations.mjs';
|
|
9
|
-
|
|
10
|
-
const MediaLibraryPage = ()=>{
|
|
11
|
-
const { formatMessage } = useIntl();
|
|
12
|
-
const { toggleNotification } = useNotification();
|
|
13
|
-
const { _unstableFormatAPIError } = useAPIErrorHandler();
|
|
14
|
-
const fileInputRef = React.useRef(null);
|
|
15
|
-
const [uploadFiles] = useUploadFilesMutation();
|
|
16
|
-
const handleFileSelect = ()=>{
|
|
17
|
-
fileInputRef.current?.click();
|
|
18
|
-
};
|
|
19
|
-
const handleFileChange = async (e)=>{
|
|
20
|
-
const files = e.target.files;
|
|
21
|
-
if (files && files.length > 0) {
|
|
22
|
-
const formData = new FormData();
|
|
23
|
-
const filesArray = Array.from(files);
|
|
24
|
-
// Add files and fileInfo to the form data
|
|
25
|
-
filesArray.forEach((file)=>{
|
|
26
|
-
formData.append('files', file);
|
|
27
|
-
formData.append('fileInfo', JSON.stringify({
|
|
28
|
-
name: file.name,
|
|
29
|
-
caption: null,
|
|
30
|
-
alternativeText: null,
|
|
31
|
-
folder: null
|
|
32
|
-
}));
|
|
33
|
-
});
|
|
34
|
-
try {
|
|
35
|
-
// unwrap() is needed to throw errors and trigger the catch block
|
|
36
|
-
// Without it, RTK Query never rejects and catch would never execute
|
|
37
|
-
await uploadFiles(formData).unwrap();
|
|
38
|
-
toggleNotification({
|
|
39
|
-
type: 'success',
|
|
40
|
-
message: formatMessage({
|
|
41
|
-
id: getTranslationKey('assets.uploaded'),
|
|
42
|
-
defaultMessage: '{number, plural, one {# asset} other {# assets}} uploaded successfully'
|
|
43
|
-
}, {
|
|
44
|
-
number: filesArray.length
|
|
45
|
-
})
|
|
46
|
-
});
|
|
47
|
-
} catch (error) {
|
|
48
|
-
// Format the error message using the API error handler to provide
|
|
49
|
-
// context-specific feedback (e.g., file size limits, format restrictions, network errors)
|
|
50
|
-
const errorMessage = _unstableFormatAPIError(error);
|
|
51
|
-
toggleNotification({
|
|
52
|
-
type: 'danger',
|
|
53
|
-
message: errorMessage
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
// Reset input so the same file can be selected again
|
|
58
|
-
e.target.value = '';
|
|
59
|
-
};
|
|
60
|
-
return /*#__PURE__*/ jsxs(Layouts.Root, {
|
|
61
|
-
children: [
|
|
62
|
-
/*#__PURE__*/ jsx(VisuallyHidden, {
|
|
63
|
-
children: /*#__PURE__*/ jsx("input", {
|
|
64
|
-
type: "file",
|
|
65
|
-
ref: fileInputRef,
|
|
66
|
-
onChange: handleFileChange,
|
|
67
|
-
multiple: true
|
|
68
|
-
})
|
|
69
|
-
}),
|
|
70
|
-
/*#__PURE__*/ jsx(Layouts.Header, {
|
|
71
|
-
title: "TODO: Folder location",
|
|
72
|
-
primaryAction: /*#__PURE__*/ jsx(SimpleMenu, {
|
|
73
|
-
popoverPlacement: "bottom-end",
|
|
74
|
-
variant: "default",
|
|
75
|
-
endIcon: /*#__PURE__*/ jsx(ChevronDown, {}),
|
|
76
|
-
label: formatMessage({
|
|
77
|
-
id: getTranslationKey('new'),
|
|
78
|
-
defaultMessage: 'New'
|
|
79
|
-
}),
|
|
80
|
-
children: /*#__PURE__*/ jsx(MenuItem, {
|
|
81
|
-
onSelect: handleFileSelect,
|
|
82
|
-
startIcon: /*#__PURE__*/ jsx(Files, {}),
|
|
83
|
-
children: formatMessage({
|
|
84
|
-
id: getTranslationKey('import-files'),
|
|
85
|
-
defaultMessage: 'Import files'
|
|
86
|
-
})
|
|
87
|
-
})
|
|
88
|
-
})
|
|
89
|
-
}),
|
|
90
|
-
/*#__PURE__*/ jsx(Layouts.Content, {
|
|
91
|
-
children: "TODO: List/Grid views"
|
|
92
|
-
})
|
|
93
|
-
]
|
|
94
|
-
});
|
|
95
|
-
};
|
|
96
|
-
|
|
97
|
-
export { MediaLibraryPage };
|
|
98
|
-
//# sourceMappingURL=MediaLibraryPage.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"MediaLibraryPage.mjs","sources":["../../../../admin/src/future/pages/MediaLibraryPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Layouts, useNotification, useAPIErrorHandler } from '@strapi/admin/strapi-admin';\nimport { MenuItem, SimpleMenu, VisuallyHidden } from '@strapi/design-system';\nimport { ChevronDown, Files } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { useUploadFilesMutation } from '../services/api';\nimport { getTranslationKey } from '../utils/translations';\n\nexport const MediaLibraryPage = () => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError } = useAPIErrorHandler();\n const fileInputRef = React.useRef<HTMLInputElement>(null);\n const [uploadFiles] = useUploadFilesMutation();\n\n const handleFileSelect = () => {\n fileInputRef.current?.click();\n };\n\n const handleFileChange = async (e: React.ChangeEvent<HTMLInputElement>) => {\n const files = e.target.files;\n if (files && files.length > 0) {\n const formData = new FormData();\n const filesArray = Array.from(files);\n\n // Add files and fileInfo to the form data\n filesArray.forEach((file) => {\n formData.append('files', file);\n formData.append(\n 'fileInfo',\n JSON.stringify({\n name: file.name,\n caption: null,\n alternativeText: null,\n folder: null,\n })\n );\n });\n\n try {\n // unwrap() is needed to throw errors and trigger the catch block\n // Without it, RTK Query never rejects and catch would never execute\n await uploadFiles(formData).unwrap();\n toggleNotification({\n type: 'success',\n message: formatMessage(\n {\n id: getTranslationKey('assets.uploaded'),\n defaultMessage:\n '{number, plural, one {# asset} other {# assets}} uploaded successfully',\n },\n { number: filesArray.length }\n ),\n });\n } catch (error) {\n // Format the error message using the API error handler to provide\n // context-specific feedback (e.g., file size limits, format restrictions, network errors)\n const errorMessage = _unstableFormatAPIError(error as Error);\n toggleNotification({\n type: 'danger',\n message: errorMessage,\n });\n }\n }\n // Reset input so the same file can be selected again\n e.target.value = '';\n };\n\n return (\n <Layouts.Root>\n <VisuallyHidden>\n <input type=\"file\" ref={fileInputRef} onChange={handleFileChange} multiple />\n </VisuallyHidden>\n <Layouts.Header\n title=\"TODO: Folder location\"\n primaryAction={\n <SimpleMenu\n popoverPlacement=\"bottom-end\"\n variant=\"default\"\n endIcon={<ChevronDown />}\n label={formatMessage({ id: getTranslationKey('new'), defaultMessage: 'New' })}\n >\n <MenuItem onSelect={handleFileSelect} startIcon={<Files />}>\n {formatMessage({\n id: getTranslationKey('import-files'),\n defaultMessage: 'Import files',\n })}\n </MenuItem>\n </SimpleMenu>\n }\n />\n\n <Layouts.Content>TODO: List/Grid views</Layouts.Content>\n </Layouts.Root>\n );\n};\n"],"names":["MediaLibraryPage","formatMessage","useIntl","toggleNotification","useNotification","_unstableFormatAPIError","useAPIErrorHandler","fileInputRef","React","useRef","uploadFiles","useUploadFilesMutation","handleFileSelect","current","click","handleFileChange","e","files","target","length","formData","FormData","filesArray","Array","from","forEach","file","append","JSON","stringify","name","caption","alternativeText","folder","unwrap","type","message","id","getTranslationKey","defaultMessage","number","error","errorMessage","value","_jsxs","Layouts","Root","_jsx","VisuallyHidden","input","ref","onChange","multiple","Header","title","primaryAction","SimpleMenu","popoverPlacement","variant","endIcon","ChevronDown","label","MenuItem","onSelect","startIcon","Files","Content"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const AIGenerationPage: () => import("react/jsx-runtime").JSX.Element;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const MediaLibraryPage: () => import("react/jsx-runtime").JSX.Element;
|