@strapi/upload 5.26.0 → 5.27.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 (119) hide show
  1. package/dist/admin/ai/components/AIAssetCard.js +589 -0
  2. package/dist/admin/ai/components/AIAssetCard.js.map +1 -0
  3. package/dist/admin/ai/components/AIAssetCard.mjs +567 -0
  4. package/dist/admin/ai/components/AIAssetCard.mjs.map +1 -0
  5. package/dist/admin/ai/components/AIUploadModal.js +355 -0
  6. package/dist/admin/ai/components/AIUploadModal.js.map +1 -0
  7. package/dist/admin/ai/components/AIUploadModal.mjs +333 -0
  8. package/dist/admin/ai/components/AIUploadModal.mjs.map +1 -0
  9. package/dist/admin/components/AssetDialog/AssetDialog.js +1 -1
  10. package/dist/admin/components/AssetDialog/AssetDialog.js.map +1 -1
  11. package/dist/admin/components/AssetDialog/AssetDialog.mjs +1 -1
  12. package/dist/admin/components/AssetDialog/AssetDialog.mjs.map +1 -1
  13. package/dist/admin/components/EditAssetDialog/EditAssetContent.js +5 -5
  14. package/dist/admin/components/EditAssetDialog/EditAssetContent.js.map +1 -1
  15. package/dist/admin/components/EditAssetDialog/EditAssetContent.mjs +5 -5
  16. package/dist/admin/components/EditAssetDialog/EditAssetContent.mjs.map +1 -1
  17. package/dist/admin/hooks/useAiAvailability.js +22 -0
  18. package/dist/admin/hooks/useAiAvailability.js.map +1 -0
  19. package/dist/admin/hooks/useAiAvailability.mjs +20 -0
  20. package/dist/admin/hooks/useAiAvailability.mjs.map +1 -0
  21. package/dist/admin/hooks/useBulkEdit.js +66 -0
  22. package/dist/admin/hooks/useBulkEdit.js.map +1 -0
  23. package/dist/admin/hooks/useBulkEdit.mjs +64 -0
  24. package/dist/admin/hooks/useBulkEdit.mjs.map +1 -0
  25. package/dist/admin/hooks/useSettings.js +22 -0
  26. package/dist/admin/hooks/useSettings.js.map +1 -0
  27. package/dist/admin/hooks/useSettings.mjs +20 -0
  28. package/dist/admin/hooks/useSettings.mjs.map +1 -0
  29. package/dist/admin/hooks/useUpload.js +25 -14
  30. package/dist/admin/hooks/useUpload.js.map +1 -1
  31. package/dist/admin/hooks/useUpload.mjs +25 -14
  32. package/dist/admin/hooks/useUpload.mjs.map +1 -1
  33. package/dist/admin/package.json.js +5 -5
  34. package/dist/admin/package.json.mjs +5 -5
  35. package/dist/admin/pages/App/MediaLibrary/MediaLibrary.js +11 -4
  36. package/dist/admin/pages/App/MediaLibrary/MediaLibrary.js.map +1 -1
  37. package/dist/admin/pages/App/MediaLibrary/MediaLibrary.mjs +11 -4
  38. package/dist/admin/pages/App/MediaLibrary/MediaLibrary.mjs.map +1 -1
  39. package/dist/admin/pages/SettingsPage/SettingsPage.js +222 -144
  40. package/dist/admin/pages/SettingsPage/SettingsPage.js.map +1 -1
  41. package/dist/admin/pages/SettingsPage/SettingsPage.mjs +225 -147
  42. package/dist/admin/pages/SettingsPage/SettingsPage.mjs.map +1 -1
  43. package/dist/admin/pages/SettingsPage/reducer.js +9 -10
  44. package/dist/admin/pages/SettingsPage/reducer.js.map +1 -1
  45. package/dist/admin/pages/SettingsPage/reducer.mjs +9 -10
  46. package/dist/admin/pages/SettingsPage/reducer.mjs.map +1 -1
  47. package/dist/admin/src/ai/components/AIAssetCard.d.ts +13 -0
  48. package/dist/admin/src/ai/components/AIUploadModal.d.ts +55 -0
  49. package/dist/admin/src/components/EditAssetDialog/EditAssetContent.d.ts +3 -1
  50. package/dist/admin/src/hooks/useAiAvailability.d.ts +4 -0
  51. package/dist/admin/src/hooks/useBulkEdit.d.ts +91 -0
  52. package/dist/admin/src/hooks/useSettings.d.ts +7 -0
  53. package/dist/admin/src/hooks/useUpload.d.ts +1 -1
  54. package/dist/admin/src/pages/SettingsPage/reducer.d.ts +3 -12
  55. package/dist/admin/translations/en.json.js +7 -1
  56. package/dist/admin/translations/en.json.js.map +1 -1
  57. package/dist/admin/translations/en.json.mjs +7 -1
  58. package/dist/admin/translations/en.json.mjs.map +1 -1
  59. package/dist/server/bootstrap.js +2 -1
  60. package/dist/server/bootstrap.js.map +1 -1
  61. package/dist/server/bootstrap.mjs +2 -1
  62. package/dist/server/bootstrap.mjs.map +1 -1
  63. package/dist/server/controllers/admin-upload.js +54 -2
  64. package/dist/server/controllers/admin-upload.js.map +1 -1
  65. package/dist/server/controllers/admin-upload.mjs +56 -4
  66. package/dist/server/controllers/admin-upload.mjs.map +1 -1
  67. package/dist/server/controllers/content-api.js +3 -1
  68. package/dist/server/controllers/content-api.js.map +1 -1
  69. package/dist/server/controllers/content-api.mjs +3 -1
  70. package/dist/server/controllers/content-api.mjs.map +1 -1
  71. package/dist/server/controllers/validation/admin/settings.js +2 -1
  72. package/dist/server/controllers/validation/admin/settings.js.map +1 -1
  73. package/dist/server/controllers/validation/admin/settings.mjs +2 -1
  74. package/dist/server/controllers/validation/admin/settings.mjs.map +1 -1
  75. package/dist/server/controllers/validation/admin/upload.js +8 -0
  76. package/dist/server/controllers/validation/admin/upload.js.map +1 -1
  77. package/dist/server/controllers/validation/admin/upload.mjs +8 -1
  78. package/dist/server/controllers/validation/admin/upload.mjs.map +1 -1
  79. package/dist/server/routes/admin.js +18 -0
  80. package/dist/server/routes/admin.js.map +1 -1
  81. package/dist/server/routes/admin.mjs +18 -0
  82. package/dist/server/routes/admin.mjs.map +1 -1
  83. package/dist/server/services/ai-metadata.js +97 -0
  84. package/dist/server/services/ai-metadata.js.map +1 -0
  85. package/dist/server/services/ai-metadata.mjs +95 -0
  86. package/dist/server/services/ai-metadata.mjs.map +1 -0
  87. package/dist/server/services/index.js +3 -1
  88. package/dist/server/services/index.js.map +1 -1
  89. package/dist/server/services/index.mjs +3 -1
  90. package/dist/server/services/index.mjs.map +1 -1
  91. package/dist/server/services/upload.js.map +1 -1
  92. package/dist/server/services/upload.mjs.map +1 -1
  93. package/dist/server/src/bootstrap.d.ts.map +1 -1
  94. package/dist/server/src/controllers/admin-upload.d.ts +1 -0
  95. package/dist/server/src/controllers/admin-upload.d.ts.map +1 -1
  96. package/dist/server/src/controllers/index.d.ts +1 -0
  97. package/dist/server/src/controllers/index.d.ts.map +1 -1
  98. package/dist/server/src/controllers/validation/admin/settings.d.ts +3 -0
  99. package/dist/server/src/controllers/validation/admin/settings.d.ts.map +1 -1
  100. package/dist/server/src/controllers/validation/admin/upload.d.ts +42 -0
  101. package/dist/server/src/controllers/validation/admin/upload.d.ts.map +1 -1
  102. package/dist/server/src/index.d.ts +13 -1
  103. package/dist/server/src/index.d.ts.map +1 -1
  104. package/dist/server/src/routes/admin.d.ts.map +1 -1
  105. package/dist/server/src/services/ai-metadata.d.ts +13 -0
  106. package/dist/server/src/services/ai-metadata.d.ts.map +1 -0
  107. package/dist/server/src/services/index.d.ts +12 -1
  108. package/dist/server/src/services/index.d.ts.map +1 -1
  109. package/dist/server/src/services/upload.d.ts +2 -1
  110. package/dist/server/src/services/upload.d.ts.map +1 -1
  111. package/dist/server/src/types.d.ts +1 -0
  112. package/dist/server/src/types.d.ts.map +1 -1
  113. package/dist/server/src/utils/index.d.ts +2 -0
  114. package/dist/server/src/utils/index.d.ts.map +1 -1
  115. package/dist/server/utils/index.js.map +1 -1
  116. package/dist/server/utils/index.mjs.map +1 -1
  117. package/dist/shared/contracts/files.d.ts +22 -0
  118. package/dist/shared/contracts/settings.d.ts +2 -0
  119. package/package.json +5 -5
@@ -0,0 +1,333 @@
1
+ import { jsx, jsxs } from 'react/jsx-runtime';
2
+ import * as React from 'react';
3
+ import { createContext } from '@strapi/admin/strapi-admin';
4
+ import { Modal, Alert, Button, Flex } from '@strapi/design-system';
5
+ import { produce } from 'immer';
6
+ import { useIntl } from 'react-intl';
7
+ import { styled } from 'styled-components';
8
+ import { AddAssetStep } from '../../components/UploadAssetDialog/AddAssetStep/AddAssetStep.mjs';
9
+ import { useBulkEdit } from '../../hooks/useBulkEdit.mjs';
10
+ import { useUpload } from '../../hooks/useUpload.mjs';
11
+ import 'byte-size';
12
+ import 'date-fns';
13
+ import { getTrad } from '../../utils/getTrad.mjs';
14
+ import 'qs';
15
+ import '../../constants.mjs';
16
+ import '../../utils/urlYupSchema.mjs';
17
+ import { AIAssetCardSkeletons, AIAssetCard } from './AIAssetCard.mjs';
18
+
19
+ /* -------------------------------------------------------------------------------------------------
20
+ * ModalBody
21
+ * -----------------------------------------------------------------------------------------------*/ const StyledModalBody = styled(Modal.Body)`
22
+ padding: 0;
23
+ display: flex;
24
+ justify-content: center;
25
+
26
+ [data-radix-scroll-area-viewport] {
27
+ padding-top: ${({ theme })=>theme.spaces[6]};
28
+ padding-bottom: ${({ theme })=>theme.spaces[6]};
29
+ padding-left: ${({ theme })=>theme.spaces[7]};
30
+ padding-right: ${({ theme })=>theme.spaces[7]};
31
+ }
32
+ `;
33
+ const StyledAlert = styled(Alert)`
34
+ & > button {
35
+ display: none;
36
+ }
37
+ `;
38
+ const ModalContent = ({ onClose })=>{
39
+ const { formatMessage } = useIntl();
40
+ const state = useAIUploadModalContext('ModalContent', (s)=>s.state);
41
+ const dispatch = useAIUploadModalContext('ModalContent', (s)=>s.dispatch);
42
+ const folderId = useAIUploadModalContext('ModalContent', (s)=>s.folderId);
43
+ const { upload } = useUpload();
44
+ const { edit, isLoading: isSaving } = useBulkEdit();
45
+ const [isUploading, setIsUploading] = React.useState(false);
46
+ const [uploadError, setUploadError] = React.useState(null);
47
+ const handleCaptionChange = (assetId, caption)=>{
48
+ dispatch({
49
+ type: 'set_uploaded_asset_caption',
50
+ payload: {
51
+ id: assetId,
52
+ caption
53
+ }
54
+ });
55
+ };
56
+ const handleAltTextChange = (assetId, altText)=>{
57
+ dispatch({
58
+ type: 'set_uploaded_asset_alt_text',
59
+ payload: {
60
+ id: assetId,
61
+ altText
62
+ }
63
+ });
64
+ };
65
+ const resetState = ()=>{
66
+ dispatch({
67
+ type: 'set_uploaded_assets',
68
+ payload: []
69
+ });
70
+ };
71
+ const handleFinish = async ()=>{
72
+ if (state.hasUnsavedChanges) {
73
+ const assetsToUpdate = state.uploadedAssets.filter((asset)=>(asset.wasCaptionChanged || asset.wasAltTextChanged) && asset.file.id);
74
+ if (assetsToUpdate.length > 0) {
75
+ const updates = assetsToUpdate.map((asset)=>({
76
+ id: asset.file.id,
77
+ fileInfo: {
78
+ name: asset.file.name,
79
+ alternativeText: asset.file.alternativeText ?? null,
80
+ caption: asset.file.caption ?? null,
81
+ folder: typeof asset.file.folder === 'object' && asset.file.folder !== null ? asset.file.folder.id : asset.file.folder
82
+ }
83
+ }));
84
+ try {
85
+ await edit(updates);
86
+ dispatch({
87
+ type: 'clear_unsaved_changes'
88
+ });
89
+ } catch (err) {
90
+ console.error('Failed to save asset changes:', err);
91
+ return; // Don't close modal on error
92
+ }
93
+ }
94
+ }
95
+ resetState();
96
+ onClose();
97
+ };
98
+ const handleCancel = ()=>{
99
+ resetState();
100
+ onClose();
101
+ };
102
+ const handleUpload = async (assets)=>{
103
+ dispatch({
104
+ type: 'set_assets_to_upload_length',
105
+ payload: assets.length
106
+ });
107
+ setUploadError(null);
108
+ setIsUploading(true);
109
+ try {
110
+ const assetsForUpload = assets.map((asset)=>({
111
+ ...asset,
112
+ id: asset.id ? Number(asset.id) : undefined
113
+ }));
114
+ const uploadedFiles = await upload(assetsForUpload, folderId);
115
+ const filesWithFolder = uploadedFiles.map((file)=>({
116
+ ...file,
117
+ // The upload API doesn't populate the folder relation, so we add it manually
118
+ folder: folderId || file.folder
119
+ }));
120
+ dispatch({
121
+ type: 'set_uploaded_assets',
122
+ payload: filesWithFolder
123
+ });
124
+ } catch (error) {
125
+ console.error('Upload failed:', error);
126
+ setUploadError(error instanceof Error ? error : new Error('Upload failed'));
127
+ } finally{
128
+ setIsUploading(false);
129
+ }
130
+ };
131
+ if (state.assetsToUploadLength === 0) {
132
+ return /*#__PURE__*/ jsx(Modal.Content, {
133
+ children: /*#__PURE__*/ jsx(AddAssetStep, {
134
+ onClose: onClose,
135
+ onAddAsset: handleUpload
136
+ })
137
+ });
138
+ }
139
+ if (isUploading || state.assetsToUploadLength > 0 && state.uploadedAssets.length === 0 && !uploadError) {
140
+ return /*#__PURE__*/ jsxs(Modal.Content, {
141
+ children: [
142
+ /*#__PURE__*/ jsx(Modal.Header, {
143
+ children: /*#__PURE__*/ jsx(Modal.Title, {
144
+ children: formatMessage({
145
+ id: getTrad('ai.modal.uploading.title'),
146
+ defaultMessage: 'Uploading and processing with AI...'
147
+ })
148
+ })
149
+ }),
150
+ /*#__PURE__*/ jsx(StyledModalBody, {
151
+ children: /*#__PURE__*/ jsx(AIAssetCardSkeletons, {
152
+ count: state.assetsToUploadLength
153
+ })
154
+ })
155
+ ]
156
+ });
157
+ }
158
+ const title = formatMessage({
159
+ id: getTrad('ai.modal.title'),
160
+ defaultMessage: '{count, plural, one {# asset uploaded} other {# assets uploaded}}, review AI generated metadata'
161
+ }, {
162
+ count: state.uploadedAssets.length
163
+ });
164
+ if (uploadError) {
165
+ return /*#__PURE__*/ jsxs(Modal.Content, {
166
+ children: [
167
+ /*#__PURE__*/ jsx(Modal.Header, {
168
+ children: /*#__PURE__*/ jsx(Modal.Title, {
169
+ children: title
170
+ })
171
+ }),
172
+ /*#__PURE__*/ jsx(Modal.Body, {
173
+ children: /*#__PURE__*/ jsx(StyledAlert, {
174
+ closeLabel: "",
175
+ variant: "danger",
176
+ children: formatMessage({
177
+ id: getTrad('ai.modal.error'),
178
+ defaultMessage: 'Could not generate AI metadata for the uploaded files.'
179
+ })
180
+ })
181
+ }),
182
+ /*#__PURE__*/ jsxs(Modal.Footer, {
183
+ children: [
184
+ /*#__PURE__*/ jsx(Button, {
185
+ onClick: handleCancel,
186
+ variant: "tertiary",
187
+ children: formatMessage({
188
+ id: 'cancel',
189
+ defaultMessage: 'Cancel'
190
+ })
191
+ }),
192
+ /*#__PURE__*/ jsx(Button, {
193
+ onClick: handleFinish,
194
+ loading: isSaving,
195
+ children: formatMessage({
196
+ id: 'global.finish',
197
+ defaultMessage: 'Finish'
198
+ })
199
+ })
200
+ ]
201
+ })
202
+ ]
203
+ });
204
+ }
205
+ return /*#__PURE__*/ jsxs(Modal.Content, {
206
+ children: [
207
+ /*#__PURE__*/ jsx(Modal.Header, {
208
+ children: /*#__PURE__*/ jsx(Modal.Title, {
209
+ children: title
210
+ })
211
+ }),
212
+ /*#__PURE__*/ jsx(StyledModalBody, {
213
+ children: /*#__PURE__*/ jsx(Flex, {
214
+ gap: 6,
215
+ direction: "column",
216
+ alignItems: "stretch",
217
+ children: state.uploadedAssets.map(({ file: asset, wasCaptionChanged, wasAltTextChanged })=>/*#__PURE__*/ jsx(AIAssetCard, {
218
+ asset: asset,
219
+ onCaptionChange: (caption)=>asset.id && handleCaptionChange(asset.id, caption),
220
+ onAltTextChange: (altText)=>asset.id && handleAltTextChange(asset.id, altText),
221
+ wasCaptionChanged: wasCaptionChanged,
222
+ wasAltTextChanged: wasAltTextChanged
223
+ }, asset.id))
224
+ })
225
+ }),
226
+ /*#__PURE__*/ jsxs(Modal.Footer, {
227
+ children: [
228
+ /*#__PURE__*/ jsx(Button, {
229
+ onClick: handleCancel,
230
+ variant: "tertiary",
231
+ children: formatMessage({
232
+ id: 'cancel',
233
+ defaultMessage: 'Cancel'
234
+ })
235
+ }),
236
+ /*#__PURE__*/ jsx(Button, {
237
+ onClick: handleFinish,
238
+ loading: isSaving,
239
+ children: formatMessage({
240
+ id: 'global.finish',
241
+ defaultMessage: 'Finish'
242
+ })
243
+ })
244
+ ]
245
+ })
246
+ ]
247
+ });
248
+ };
249
+ const [AIUploadModalContext, useAIUploadModalContext] = createContext('AIUploadModalContext');
250
+ const reducer = (state, action)=>{
251
+ return produce(state, (draft)=>{
252
+ if (action.type === 'set_uploaded_assets') {
253
+ draft.uploadedAssets = action.payload.map((file)=>({
254
+ file,
255
+ wasCaptionChanged: false,
256
+ wasAltTextChanged: false
257
+ }));
258
+ draft.hasUnsavedChanges = false;
259
+ }
260
+ if (action.type === 'set_assets_to_upload_length') {
261
+ draft.assetsToUploadLength = action.payload;
262
+ }
263
+ if (action.type === 'set_uploaded_asset_caption') {
264
+ const asset = draft.uploadedAssets.find((a)=>a.file.id === action.payload.id);
265
+ if (asset && asset.file.caption !== action.payload.caption) {
266
+ asset.file.caption = action.payload.caption;
267
+ asset.wasCaptionChanged = true;
268
+ draft.hasUnsavedChanges = true;
269
+ }
270
+ }
271
+ if (action.type === 'set_uploaded_asset_alt_text') {
272
+ const asset = draft.uploadedAssets.find((a)=>a.file.id === action.payload.id);
273
+ if (asset && asset.file.alternativeText !== action.payload.altText) {
274
+ asset.file.alternativeText = action.payload.altText;
275
+ asset.wasAltTextChanged = true;
276
+ draft.hasUnsavedChanges = true;
277
+ }
278
+ }
279
+ if (action.type === 'remove_uploaded_asset') {
280
+ draft.uploadedAssets = draft.uploadedAssets.filter((a)=>a.file.id !== action.payload.id);
281
+ }
282
+ if (action.type === 'edit_uploaded_asset') {
283
+ const assetIndex = draft.uploadedAssets.findIndex((a)=>a.file.id === action.payload.editedAsset.id);
284
+ if (assetIndex !== -1) {
285
+ draft.uploadedAssets[assetIndex] = {
286
+ file: action.payload.editedAsset,
287
+ wasCaptionChanged: draft.uploadedAssets[assetIndex].wasCaptionChanged,
288
+ wasAltTextChanged: draft.uploadedAssets[assetIndex].wasAltTextChanged
289
+ };
290
+ }
291
+ }
292
+ if (action.type === 'clear_unsaved_changes') {
293
+ draft.hasUnsavedChanges = false;
294
+ draft.uploadedAssets.forEach((asset)=>{
295
+ asset.wasCaptionChanged = false;
296
+ asset.wasAltTextChanged = false;
297
+ });
298
+ }
299
+ });
300
+ };
301
+ const AIUploadModal = ({ open, onClose, folderId = null })=>{
302
+ const [state, dispatch] = React.useReducer(reducer, {
303
+ uploadedAssets: [],
304
+ assetsToUploadLength: 0,
305
+ hasUnsavedChanges: false
306
+ });
307
+ const handleClose = React.useCallback(()=>{
308
+ // Reset state when modal closes
309
+ dispatch({
310
+ type: 'set_uploaded_assets',
311
+ payload: []
312
+ });
313
+ onClose();
314
+ }, [
315
+ onClose
316
+ ]);
317
+ return /*#__PURE__*/ jsx(AIUploadModalContext, {
318
+ state: state,
319
+ dispatch: dispatch,
320
+ folderId: folderId,
321
+ onClose: handleClose,
322
+ children: /*#__PURE__*/ jsx(Modal.Root, {
323
+ open: open,
324
+ onOpenChange: handleClose,
325
+ children: /*#__PURE__*/ jsx(ModalContent, {
326
+ onClose: handleClose
327
+ })
328
+ })
329
+ });
330
+ };
331
+
332
+ export { AIUploadModal, useAIUploadModalContext };
333
+ //# sourceMappingURL=AIUploadModal.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AIUploadModal.mjs","sources":["../../../../admin/src/ai/components/AIUploadModal.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { createContext } from '@strapi/admin/strapi-admin';\nimport { Alert, Button, Flex, Modal } from '@strapi/design-system';\nimport { produce } from 'immer';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport {\n AddAssetStep,\n FileWithRawFile,\n} from '../../components/UploadAssetDialog/AddAssetStep/AddAssetStep';\nimport { useBulkEdit } from '../../hooks/useBulkEdit';\nimport { useUpload } from '../../hooks/useUpload';\nimport { getTrad } from '../../utils';\n\nimport { AIAssetCard, AIAssetCardSkeletons } from './AIAssetCard';\n\nimport type { File } from '../../../../shared/contracts/files';\n\n/* -------------------------------------------------------------------------------------------------\n * ModalBody\n * -----------------------------------------------------------------------------------------------*/\n\nconst StyledModalBody = styled(Modal.Body)`\n padding: 0;\n display: flex;\n justify-content: center;\n\n [data-radix-scroll-area-viewport] {\n padding-top: ${({ theme }) => theme.spaces[6]};\n padding-bottom: ${({ theme }) => theme.spaces[6]};\n padding-left: ${({ theme }) => theme.spaces[7]};\n padding-right: ${({ theme }) => theme.spaces[7]};\n }\n`;\n\nconst StyledAlert = styled(Alert)`\n & > button {\n display: none;\n }\n`;\n\nconst ModalContent = ({ onClose }: Pick<AIUploadModalProps, 'onClose'>) => {\n const { formatMessage } = useIntl();\n const state = useAIUploadModalContext('ModalContent', (s) => s.state);\n const dispatch = useAIUploadModalContext('ModalContent', (s) => s.dispatch);\n const folderId = useAIUploadModalContext('ModalContent', (s) => s.folderId);\n const { upload } = useUpload();\n const { edit, isLoading: isSaving } = useBulkEdit();\n const [isUploading, setIsUploading] = React.useState(false);\n const [uploadError, setUploadError] = React.useState<Error | null>(null);\n\n const handleCaptionChange = (assetId: number, caption: string) => {\n dispatch({\n type: 'set_uploaded_asset_caption',\n payload: { id: assetId, caption },\n });\n };\n\n const handleAltTextChange = (assetId: number, altText: string) => {\n dispatch({\n type: 'set_uploaded_asset_alt_text',\n payload: { id: assetId, altText },\n });\n };\n\n const resetState = () => {\n dispatch({ type: 'set_uploaded_assets', payload: [] });\n };\n\n const handleFinish = async () => {\n if (state.hasUnsavedChanges) {\n const assetsToUpdate = state.uploadedAssets.filter(\n (asset) => (asset.wasCaptionChanged || asset.wasAltTextChanged) && asset.file.id\n );\n\n if (assetsToUpdate.length > 0) {\n const updates = assetsToUpdate.map((asset) => ({\n id: asset.file.id!,\n fileInfo: {\n name: asset.file.name,\n alternativeText: asset.file.alternativeText ?? null,\n caption: asset.file.caption ?? null,\n folder:\n typeof asset.file.folder === 'object' && asset.file.folder !== null\n ? // @ts-expect-error types are wrong\n asset.file.folder.id\n : asset.file.folder,\n },\n }));\n\n try {\n await edit(updates);\n dispatch({ type: 'clear_unsaved_changes' });\n } catch (err) {\n console.error('Failed to save asset changes:', err);\n return; // Don't close modal on error\n }\n }\n }\n\n resetState();\n onClose();\n };\n\n const handleCancel = () => {\n resetState();\n onClose();\n };\n\n const handleUpload = async (assets: FileWithRawFile[]) => {\n dispatch({ type: 'set_assets_to_upload_length', payload: assets.length });\n setUploadError(null);\n setIsUploading(true);\n\n try {\n const assetsForUpload = assets.map((asset) => ({\n ...asset,\n id: asset.id ? Number(asset.id) : undefined,\n }));\n\n const uploadedFiles = await upload(assetsForUpload, folderId);\n const filesWithFolder = uploadedFiles.map((file: File) => ({\n ...file,\n // The upload API doesn't populate the folder relation, so we add it manually\n folder: folderId || file.folder,\n }));\n dispatch({ type: 'set_uploaded_assets', payload: filesWithFolder });\n } catch (error) {\n console.error('Upload failed:', error);\n setUploadError(error instanceof Error ? error : new Error('Upload failed'));\n } finally {\n setIsUploading(false);\n }\n };\n\n if (state.assetsToUploadLength === 0) {\n return (\n <Modal.Content>\n <AddAssetStep onClose={onClose} onAddAsset={handleUpload} />\n </Modal.Content>\n );\n }\n\n if (\n isUploading ||\n (state.assetsToUploadLength > 0 && state.uploadedAssets.length === 0 && !uploadError)\n ) {\n return (\n <Modal.Content>\n <Modal.Header>\n <Modal.Title>\n {formatMessage({\n id: getTrad('ai.modal.uploading.title'),\n defaultMessage: 'Uploading and processing with AI...',\n })}\n </Modal.Title>\n </Modal.Header>\n <StyledModalBody>\n <AIAssetCardSkeletons count={state.assetsToUploadLength} />\n </StyledModalBody>\n </Modal.Content>\n );\n }\n\n const title = formatMessage(\n {\n id: getTrad('ai.modal.title'),\n defaultMessage:\n '{count, plural, one {# asset uploaded} other {# assets uploaded}}, review AI generated metadata',\n },\n { count: state.uploadedAssets.length }\n );\n\n if (uploadError) {\n return (\n <Modal.Content>\n <Modal.Header>\n <Modal.Title>{title}</Modal.Title>\n </Modal.Header>\n <Modal.Body>\n <StyledAlert closeLabel=\"\" variant=\"danger\">\n {formatMessage({\n id: getTrad('ai.modal.error'),\n defaultMessage: 'Could not generate AI metadata for the uploaded files.',\n })}\n </StyledAlert>\n </Modal.Body>\n <Modal.Footer>\n <Button onClick={handleCancel} variant=\"tertiary\">\n {formatMessage({ id: 'cancel', defaultMessage: 'Cancel' })}\n </Button>\n <Button onClick={handleFinish} loading={isSaving}>\n {formatMessage({ id: 'global.finish', defaultMessage: 'Finish' })}\n </Button>\n </Modal.Footer>\n </Modal.Content>\n );\n }\n\n return (\n <Modal.Content>\n <Modal.Header>\n <Modal.Title>{title}</Modal.Title>\n </Modal.Header>\n\n <StyledModalBody>\n <Flex gap={6} direction=\"column\" alignItems=\"stretch\">\n {state.uploadedAssets.map(({ file: asset, wasCaptionChanged, wasAltTextChanged }) => (\n <AIAssetCard\n key={asset.id}\n asset={asset}\n onCaptionChange={(caption: string) =>\n asset.id && handleCaptionChange(asset.id, caption)\n }\n onAltTextChange={(altText: string) =>\n asset.id && handleAltTextChange(asset.id, altText)\n }\n wasCaptionChanged={wasCaptionChanged}\n wasAltTextChanged={wasAltTextChanged}\n />\n ))}\n </Flex>\n </StyledModalBody>\n\n <Modal.Footer>\n <Button onClick={handleCancel} variant=\"tertiary\">\n {formatMessage({ id: 'cancel', defaultMessage: 'Cancel' })}\n </Button>\n <Button onClick={handleFinish} loading={isSaving}>\n {formatMessage({ id: 'global.finish', defaultMessage: 'Finish' })}\n </Button>\n </Modal.Footer>\n </Modal.Content>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * UploadModal\n * -----------------------------------------------------------------------------------------------*/\n\ninterface AIUploadModalProps {\n open: boolean;\n onClose: () => void;\n folderId?: number | null;\n}\n\ntype State = {\n uploadedAssets: Array<{ file: File; wasCaptionChanged: boolean; wasAltTextChanged: boolean }>;\n assetsToUploadLength: number;\n hasUnsavedChanges: boolean;\n};\n\ntype Action =\n | {\n type: 'set_uploaded_assets';\n payload: File[];\n }\n | {\n type: 'set_assets_to_upload_length';\n payload: number;\n }\n | {\n type: 'set_uploaded_asset_caption';\n payload: { id: number; caption: string };\n }\n | {\n type: 'set_uploaded_asset_alt_text';\n payload: { id: number; altText: string };\n }\n | {\n type: 'remove_uploaded_asset';\n payload: { id: number };\n }\n | {\n type: 'edit_uploaded_asset';\n payload: { editedAsset: File };\n }\n | {\n type: 'clear_unsaved_changes';\n };\n\nconst [AIUploadModalContext, useAIUploadModalContext] = createContext<{\n state: State;\n dispatch: React.Dispatch<Action>;\n folderId: number | null;\n onClose: () => void;\n}>('AIUploadModalContext');\n\nconst reducer = (state: State, action: Action): State => {\n return produce(state, (draft: State) => {\n if (action.type === 'set_uploaded_assets') {\n draft.uploadedAssets = action.payload.map((file) => ({\n file,\n wasCaptionChanged: false,\n wasAltTextChanged: false,\n }));\n draft.hasUnsavedChanges = false;\n }\n\n if (action.type === 'set_assets_to_upload_length') {\n draft.assetsToUploadLength = action.payload;\n }\n\n if (action.type === 'set_uploaded_asset_caption') {\n const asset = draft.uploadedAssets.find((a) => a.file.id === action.payload.id);\n if (asset && asset.file.caption !== action.payload.caption) {\n asset.file.caption = action.payload.caption;\n asset.wasCaptionChanged = true;\n draft.hasUnsavedChanges = true;\n }\n }\n\n if (action.type === 'set_uploaded_asset_alt_text') {\n const asset = draft.uploadedAssets.find((a) => a.file.id === action.payload.id);\n if (asset && asset.file.alternativeText !== action.payload.altText) {\n asset.file.alternativeText = action.payload.altText;\n asset.wasAltTextChanged = true;\n draft.hasUnsavedChanges = true;\n }\n }\n\n if (action.type === 'remove_uploaded_asset') {\n draft.uploadedAssets = draft.uploadedAssets.filter((a) => a.file.id !== action.payload.id);\n }\n\n if (action.type === 'edit_uploaded_asset') {\n const assetIndex = draft.uploadedAssets.findIndex(\n (a) => a.file.id === action.payload.editedAsset.id\n );\n if (assetIndex !== -1) {\n draft.uploadedAssets[assetIndex] = {\n file: action.payload.editedAsset,\n wasCaptionChanged: draft.uploadedAssets[assetIndex].wasCaptionChanged,\n wasAltTextChanged: draft.uploadedAssets[assetIndex].wasAltTextChanged,\n };\n }\n }\n\n if (action.type === 'clear_unsaved_changes') {\n draft.hasUnsavedChanges = false;\n draft.uploadedAssets.forEach((asset) => {\n asset.wasCaptionChanged = false;\n asset.wasAltTextChanged = false;\n });\n }\n });\n};\n\nexport const AIUploadModal = ({ open, onClose, folderId = null }: AIUploadModalProps) => {\n const [state, dispatch] = React.useReducer(reducer, {\n uploadedAssets: [],\n assetsToUploadLength: 0,\n hasUnsavedChanges: false,\n });\n\n const handleClose = React.useCallback(() => {\n // Reset state when modal closes\n dispatch({ type: 'set_uploaded_assets', payload: [] });\n onClose();\n }, [onClose]);\n\n return (\n <AIUploadModalContext\n state={state}\n dispatch={dispatch}\n folderId={folderId}\n onClose={handleClose}\n >\n <Modal.Root open={open} onOpenChange={handleClose}>\n <ModalContent onClose={handleClose} />\n </Modal.Root>\n </AIUploadModalContext>\n );\n};\n\nexport { useAIUploadModalContext };\n"],"names":["StyledModalBody","styled","Modal","Body","theme","spaces","StyledAlert","Alert","ModalContent","onClose","formatMessage","useIntl","state","useAIUploadModalContext","s","dispatch","folderId","upload","useUpload","edit","isLoading","isSaving","useBulkEdit","isUploading","setIsUploading","React","useState","uploadError","setUploadError","handleCaptionChange","assetId","caption","type","payload","id","handleAltTextChange","altText","resetState","handleFinish","hasUnsavedChanges","assetsToUpdate","uploadedAssets","filter","asset","wasCaptionChanged","wasAltTextChanged","file","length","updates","map","fileInfo","name","alternativeText","folder","err","console","error","handleCancel","handleUpload","assets","assetsForUpload","Number","undefined","uploadedFiles","filesWithFolder","Error","assetsToUploadLength","_jsx","Content","AddAssetStep","onAddAsset","_jsxs","Header","Title","getTrad","defaultMessage","AIAssetCardSkeletons","count","title","closeLabel","variant","Footer","Button","onClick","loading","Flex","gap","direction","alignItems","AIAssetCard","onCaptionChange","onAltTextChange","AIUploadModalContext","createContext","reducer","action","produce","draft","find","a","assetIndex","findIndex","editedAsset","forEach","AIUploadModal","open","useReducer","handleClose","useCallback","Root","onOpenChange"],"mappings":"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"}
@@ -48,7 +48,7 @@ var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
48
48
  // TODO: find a better naming convention for the file that was an index file before
49
49
  const LoadingBody = styledComponents.styled(designSystem.Flex)`
50
50
  /* 80px are coming from the Tabs component that is not included in the ModalBody */
51
- min-height: ${()=>`calc(60vh + 8rem)`};
51
+ min-height: ${()=>`calc(60dvh + 8rem)`};
52
52
  `;
53
53
  const AssetContent = ({ allowedTypes = [], folderId = null, onClose, onAddAsset, onAddFolder, onChangeFolder, onValidate, multiple = false, initiallySelectedAssets = [], trackedLocation })=>{
54
54
  const [assetToEdit, setAssetToEdit] = React__namespace.useState(undefined);
@@ -1 +1 @@
1
- {"version":3,"file":"AssetDialog.js","sources":["../../../../admin/src/components/AssetDialog/AssetDialog.tsx"],"sourcesContent":["// TODO: find a better naming convention for the file that was an index file before\nimport * as React from 'react';\n\nimport { Page } from '@strapi/admin/strapi-admin';\nimport { Badge, Button, Divider, Flex, Loader, Modal, Tabs } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { useAssets } from '../../hooks/useAssets';\nimport { useFolders } from '../../hooks/useFolders';\nimport { useMediaLibraryPermissions } from '../../hooks/useMediaLibraryPermissions';\nimport { useModalQueryParams } from '../../hooks/useModalQueryParams';\nimport { useSelectionState } from '../../hooks/useSelectionState';\nimport {\n containsAssetFilter,\n getTrad,\n getAllowedFiles,\n moveElement,\n AllowedFiles,\n} from '../../utils';\nimport { EditAssetContent, Asset as EditAsset } from '../EditAssetDialog/EditAssetContent';\nimport { EditFolderContent } from '../EditFolderDialog/EditFolderDialog';\n\nimport {\n BrowseStep,\n FolderWithType,\n FileWithType,\n Filter as BrowseFilter,\n} from './BrowseStep/BrowseStep';\nimport { DialogFooter } from './DialogFooter';\nimport { SelectedStep } from './SelectedStep/SelectedStep';\n\nimport type { File as Asset, FilterCondition, Query } from '../../../../shared/contracts/files';\nimport type { Folder, FolderDefinition } from '../../../../shared/contracts/folders';\nimport type { AllowedTypes } from '../AssetCard/AssetCard';\n\nconst LoadingBody = styled(Flex)`\n /* 80px are coming from the Tabs component that is not included in the ModalBody */\n min-height: ${() => `calc(60vh + 8rem)`};\n`;\n\nexport interface FileRow extends Asset {\n folderURL?: string;\n isSelectable?: boolean;\n type?: string;\n}\n\nexport interface FolderRow extends Folder {\n folderURL?: string;\n isSelectable?: boolean;\n type?: string;\n}\n\ninterface AssetContentProps {\n allowedTypes?: AllowedTypes[];\n folderId?: number | null;\n onClose: () => void;\n onAddAsset: (arg?: { folderId: number | { id: number } | null | undefined }) => void;\n onAddFolder: ({ folderId }: { folderId: number | { id: number } | null | undefined }) => void;\n onChangeFolder: (folderId: number | null) => void;\n onValidate: (selectedAssets: Asset[]) => void;\n multiple?: boolean;\n trackedLocation?: string;\n initiallySelectedAssets?: Asset[];\n}\n\nexport const AssetContent = ({\n allowedTypes = [],\n folderId = null,\n onClose,\n onAddAsset,\n onAddFolder,\n onChangeFolder,\n onValidate,\n multiple = false,\n initiallySelectedAssets = [],\n trackedLocation,\n}: AssetContentProps) => {\n const [assetToEdit, setAssetToEdit] = React.useState<FileWithType | undefined>(undefined);\n const [folderToEdit, setFolderToEdit] = React.useState<FolderRow | undefined>(undefined);\n const { formatMessage } = useIntl();\n const {\n canRead,\n canCreate,\n isLoading: isLoadingPermissions,\n canUpdate,\n canCopyLink,\n canDownload,\n } = useMediaLibraryPermissions();\n\n const [\n { queryObject },\n {\n onChangeFilters,\n onChangePage,\n onChangePageSize,\n onChangeSort,\n onChangeSearch,\n onChangeFolder: onChangeFolderParam,\n },\n ] = useModalQueryParams({ folder: folderId });\n\n const {\n data: { pagination, results: assets } = {},\n isLoading: isLoadingAssets,\n error: errorAssets,\n } = useAssets({ skipWhen: !canRead, query: queryObject });\n\n const {\n data: folders,\n isLoading: isLoadingFolders,\n error: errorFolders,\n } = useFolders({\n enabled: canRead && !containsAssetFilter(queryObject!) && pagination?.page === 1,\n query: queryObject,\n });\n\n const [\n selectedAssets,\n { selectOne, selectOnly, setSelections, selectMultiple, deselectMultiple },\n ] = useSelectionState(['id'], initiallySelectedAssets);\n\n const handleSelectAllAssets = () => {\n const allowedAssets = getAllowedFiles(allowedTypes, assets as AllowedFiles[]);\n\n if (!multiple) {\n return undefined;\n }\n\n // selected files in current folder\n const alreadySelected = allowedAssets.filter(\n (asset) => selectedAssets.findIndex((selectedAsset) => selectedAsset.id === asset.id) !== -1\n );\n\n if (alreadySelected.length > 0) {\n deselectMultiple(alreadySelected);\n } else {\n selectMultiple(allowedAssets);\n }\n };\n\n const handleSelectAsset = (asset: Asset | FileRow | FolderRow) => {\n return multiple ? selectOne(asset as Asset) : selectOnly(asset as Asset);\n };\n\n const isLoading = isLoadingPermissions || isLoadingAssets || isLoadingFolders;\n const hasError = errorAssets || errorFolders;\n\n const [activeTab, setActiveTab] = React.useState(\n selectedAssets.length > 0 ? 'selected' : 'browse'\n );\n\n if (isLoading) {\n return (\n <>\n <Modal.Header>\n <Modal.Title>\n {formatMessage({\n id: getTrad('header.actions.add-assets'),\n defaultMessage: 'Add new assets',\n })}\n </Modal.Title>\n </Modal.Header>\n <LoadingBody justifyContent=\"center\" paddingTop={4} paddingBottom={4}>\n <Loader>\n {formatMessage({\n id: getTrad('content.isLoading'),\n defaultMessage: 'Content is loading.',\n })}\n </Loader>\n </LoadingBody>\n <DialogFooter onClose={onClose} />\n </>\n );\n }\n\n if (hasError) {\n return (\n <>\n <Modal.Header>\n <Modal.Title>\n {formatMessage({\n id: getTrad('header.actions.add-assets'),\n defaultMessage: 'Add new assets',\n })}\n </Modal.Title>\n </Modal.Header>\n <Page.Error />\n <DialogFooter onClose={onClose} />\n </>\n );\n }\n\n if (!canRead) {\n return (\n <>\n <Modal.Header>\n <Modal.Title>\n {formatMessage({\n id: getTrad('header.actions.add-assets'),\n defaultMessage: 'Add new assets',\n })}\n </Modal.Title>\n </Modal.Header>\n <Page.NoPermissions />\n <DialogFooter onClose={onClose} />\n </>\n );\n }\n\n if (assetToEdit) {\n return (\n <EditAssetContent\n onClose={() => setAssetToEdit(undefined)}\n asset={assetToEdit as EditAsset}\n canUpdate={canUpdate}\n canCopyLink={canCopyLink}\n canDownload={canDownload}\n trackedLocation={trackedLocation}\n />\n );\n }\n\n if (folderToEdit) {\n return (\n <EditFolderContent\n folder={folderToEdit as FolderDefinition}\n onClose={() => setFolderToEdit(undefined)}\n location=\"content-manager\"\n parentFolderId={queryObject?.folder as string | number | null | undefined}\n />\n );\n }\n\n const handleMoveItem = (hoverIndex: number, destIndex: number) => {\n const offset = destIndex - hoverIndex;\n const orderedAssetsClone = selectedAssets.slice();\n const nextAssets = moveElement<Asset>(orderedAssetsClone, hoverIndex, offset);\n setSelections(nextAssets);\n };\n\n const handleFolderChange = (folderId: number, folderPath?: string) => {\n onChangeFolder(folderId);\n if (onChangeFolderParam) {\n onChangeFolderParam(folderId, folderPath);\n }\n };\n\n return (\n <>\n <Modal.Header>\n <Modal.Title>\n {formatMessage({\n id: getTrad('header.actions.add-assets'),\n defaultMessage: 'Add new assets',\n })}\n </Modal.Title>\n </Modal.Header>\n\n <TabsRoot variant=\"simple\" value={activeTab} onValueChange={setActiveTab}>\n <Flex paddingLeft={8} paddingRight={8} paddingTop={6} justifyContent=\"space-between\">\n <Tabs.List>\n <Tabs.Trigger value=\"browse\">\n {formatMessage({\n id: getTrad('modal.nav.browse'),\n defaultMessage: 'Browse',\n })}\n </Tabs.Trigger>\n <Tabs.Trigger value=\"selected\">\n {formatMessage({\n id: getTrad('modal.header.select-files'),\n defaultMessage: 'Selected files',\n })}\n <Badge marginLeft={2}>{selectedAssets.length}</Badge>\n </Tabs.Trigger>\n </Tabs.List>\n <Flex gap={2}>\n <Button\n variant=\"secondary\"\n onClick={() => onAddFolder({ folderId: queryObject?.folder })}\n >\n {formatMessage({\n id: getTrad('modal.upload-list.sub-header.add-folder'),\n defaultMessage: 'Add folder',\n })}\n </Button>\n <Button onClick={() => onAddAsset({ folderId: queryObject?.folder })}>\n {formatMessage({\n id: getTrad('modal.upload-list.sub-header.button'),\n defaultMessage: 'Add more assets',\n })}\n </Button>\n </Flex>\n </Flex>\n <Divider />\n <Modal.Body>\n <Tabs.Content value=\"browse\">\n <BrowseStep\n allowedTypes={allowedTypes}\n assets={assets!}\n canCreate={canCreate}\n canRead={canRead}\n folders={folders as FolderWithType[]}\n onSelectAsset={handleSelectAsset}\n selectedAssets={selectedAssets}\n multiple={multiple}\n onSelectAllAsset={handleSelectAllAssets}\n onEditAsset={setAssetToEdit}\n onEditFolder={setFolderToEdit}\n pagination={pagination!}\n queryObject={queryObject!}\n onAddAsset={onAddAsset}\n onChangeFilters={(filters: FilterCondition<string>[] | BrowseFilter[]) =>\n onChangeFilters!(filters as FilterCondition<string>[])\n }\n onChangeFolder={handleFolderChange}\n onChangePage={onChangePage!}\n onChangePageSize={onChangePageSize!}\n onChangeSort={(sort: string | undefined) => onChangeSort!(sort as Query['sort'])}\n onChangeSearch={onChangeSearch!}\n />\n </Tabs.Content>\n <Tabs.Content value=\"selected\">\n <SelectedStep\n selectedAssets={selectedAssets}\n onSelectAsset={handleSelectAsset}\n onReorderAsset={handleMoveItem}\n />\n </Tabs.Content>\n </Modal.Body>\n </TabsRoot>\n <DialogFooter onClose={onClose} onValidate={() => onValidate(selectedAssets)} />\n </>\n );\n};\n\ninterface AssetDialogProps extends AssetContentProps {\n open?: boolean;\n}\n\nexport const AssetDialog = ({ open = false, onClose, ...restProps }: AssetDialogProps) => {\n return (\n <Modal.Root open={open} onOpenChange={onClose}>\n <Modal.Content>\n <AssetContent onClose={onClose} {...restProps} />\n </Modal.Content>\n </Modal.Root>\n );\n};\n\nconst TabsRoot = styled(Tabs.Root)`\n display: flex;\n flex-direction: column;\n overflow: hidden;\n`;\n"],"names":["LoadingBody","styled","Flex","AssetContent","allowedTypes","folderId","onClose","onAddAsset","onAddFolder","onChangeFolder","onValidate","multiple","initiallySelectedAssets","trackedLocation","assetToEdit","setAssetToEdit","React","useState","undefined","folderToEdit","setFolderToEdit","formatMessage","useIntl","canRead","canCreate","isLoading","isLoadingPermissions","canUpdate","canCopyLink","canDownload","useMediaLibraryPermissions","queryObject","onChangeFilters","onChangePage","onChangePageSize","onChangeSort","onChangeSearch","onChangeFolderParam","useModalQueryParams","folder","data","pagination","results","assets","isLoadingAssets","error","errorAssets","useAssets","skipWhen","query","folders","isLoadingFolders","errorFolders","useFolders","enabled","containsAssetFilter","page","selectedAssets","selectOne","selectOnly","setSelections","selectMultiple","deselectMultiple","useSelectionState","handleSelectAllAssets","allowedAssets","getAllowedFiles","alreadySelected","filter","asset","findIndex","selectedAsset","id","length","handleSelectAsset","hasError","activeTab","setActiveTab","_jsxs","_Fragment","_jsx","Modal","Header","Title","getTrad","defaultMessage","justifyContent","paddingTop","paddingBottom","Loader","DialogFooter","Page","Error","NoPermissions","EditAssetContent","EditFolderContent","location","parentFolderId","handleMoveItem","hoverIndex","destIndex","offset","orderedAssetsClone","slice","nextAssets","moveElement","handleFolderChange","folderPath","TabsRoot","variant","value","onValueChange","paddingLeft","paddingRight","Tabs","List","Trigger","Badge","marginLeft","gap","Button","onClick","Divider","Body","Content","BrowseStep","onSelectAsset","onSelectAllAsset","onEditAsset","onEditFolder","filters","sort","SelectedStep","onReorderAsset","AssetDialog","open","restProps","Root","onOpenChange"],"mappings":"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"}
1
+ {"version":3,"file":"AssetDialog.js","sources":["../../../../admin/src/components/AssetDialog/AssetDialog.tsx"],"sourcesContent":["// TODO: find a better naming convention for the file that was an index file before\nimport * as React from 'react';\n\nimport { Page } from '@strapi/admin/strapi-admin';\nimport { Badge, Button, Divider, Flex, Loader, Modal, Tabs } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { useAssets } from '../../hooks/useAssets';\nimport { useFolders } from '../../hooks/useFolders';\nimport { useMediaLibraryPermissions } from '../../hooks/useMediaLibraryPermissions';\nimport { useModalQueryParams } from '../../hooks/useModalQueryParams';\nimport { useSelectionState } from '../../hooks/useSelectionState';\nimport {\n containsAssetFilter,\n getTrad,\n getAllowedFiles,\n moveElement,\n AllowedFiles,\n} from '../../utils';\nimport { EditAssetContent, Asset as EditAsset } from '../EditAssetDialog/EditAssetContent';\nimport { EditFolderContent } from '../EditFolderDialog/EditFolderDialog';\n\nimport {\n BrowseStep,\n FolderWithType,\n FileWithType,\n Filter as BrowseFilter,\n} from './BrowseStep/BrowseStep';\nimport { DialogFooter } from './DialogFooter';\nimport { SelectedStep } from './SelectedStep/SelectedStep';\n\nimport type { File as Asset, FilterCondition, Query } from '../../../../shared/contracts/files';\nimport type { Folder, FolderDefinition } from '../../../../shared/contracts/folders';\nimport type { AllowedTypes } from '../AssetCard/AssetCard';\n\nconst LoadingBody = styled(Flex)`\n /* 80px are coming from the Tabs component that is not included in the ModalBody */\n min-height: ${() => `calc(60dvh + 8rem)`};\n`;\n\nexport interface FileRow extends Asset {\n folderURL?: string;\n isSelectable?: boolean;\n type?: string;\n}\n\nexport interface FolderRow extends Folder {\n folderURL?: string;\n isSelectable?: boolean;\n type?: string;\n}\n\ninterface AssetContentProps {\n allowedTypes?: AllowedTypes[];\n folderId?: number | null;\n onClose: () => void;\n onAddAsset: (arg?: { folderId: number | { id: number } | null | undefined }) => void;\n onAddFolder: ({ folderId }: { folderId: number | { id: number } | null | undefined }) => void;\n onChangeFolder: (folderId: number | null) => void;\n onValidate: (selectedAssets: Asset[]) => void;\n multiple?: boolean;\n trackedLocation?: string;\n initiallySelectedAssets?: Asset[];\n}\n\nexport const AssetContent = ({\n allowedTypes = [],\n folderId = null,\n onClose,\n onAddAsset,\n onAddFolder,\n onChangeFolder,\n onValidate,\n multiple = false,\n initiallySelectedAssets = [],\n trackedLocation,\n}: AssetContentProps) => {\n const [assetToEdit, setAssetToEdit] = React.useState<FileWithType | undefined>(undefined);\n const [folderToEdit, setFolderToEdit] = React.useState<FolderRow | undefined>(undefined);\n const { formatMessage } = useIntl();\n const {\n canRead,\n canCreate,\n isLoading: isLoadingPermissions,\n canUpdate,\n canCopyLink,\n canDownload,\n } = useMediaLibraryPermissions();\n\n const [\n { queryObject },\n {\n onChangeFilters,\n onChangePage,\n onChangePageSize,\n onChangeSort,\n onChangeSearch,\n onChangeFolder: onChangeFolderParam,\n },\n ] = useModalQueryParams({ folder: folderId });\n\n const {\n data: { pagination, results: assets } = {},\n isLoading: isLoadingAssets,\n error: errorAssets,\n } = useAssets({ skipWhen: !canRead, query: queryObject });\n\n const {\n data: folders,\n isLoading: isLoadingFolders,\n error: errorFolders,\n } = useFolders({\n enabled: canRead && !containsAssetFilter(queryObject!) && pagination?.page === 1,\n query: queryObject,\n });\n\n const [\n selectedAssets,\n { selectOne, selectOnly, setSelections, selectMultiple, deselectMultiple },\n ] = useSelectionState(['id'], initiallySelectedAssets);\n\n const handleSelectAllAssets = () => {\n const allowedAssets = getAllowedFiles(allowedTypes, assets as AllowedFiles[]);\n\n if (!multiple) {\n return undefined;\n }\n\n // selected files in current folder\n const alreadySelected = allowedAssets.filter(\n (asset) => selectedAssets.findIndex((selectedAsset) => selectedAsset.id === asset.id) !== -1\n );\n\n if (alreadySelected.length > 0) {\n deselectMultiple(alreadySelected);\n } else {\n selectMultiple(allowedAssets);\n }\n };\n\n const handleSelectAsset = (asset: Asset | FileRow | FolderRow) => {\n return multiple ? selectOne(asset as Asset) : selectOnly(asset as Asset);\n };\n\n const isLoading = isLoadingPermissions || isLoadingAssets || isLoadingFolders;\n const hasError = errorAssets || errorFolders;\n\n const [activeTab, setActiveTab] = React.useState(\n selectedAssets.length > 0 ? 'selected' : 'browse'\n );\n\n if (isLoading) {\n return (\n <>\n <Modal.Header>\n <Modal.Title>\n {formatMessage({\n id: getTrad('header.actions.add-assets'),\n defaultMessage: 'Add new assets',\n })}\n </Modal.Title>\n </Modal.Header>\n <LoadingBody justifyContent=\"center\" paddingTop={4} paddingBottom={4}>\n <Loader>\n {formatMessage({\n id: getTrad('content.isLoading'),\n defaultMessage: 'Content is loading.',\n })}\n </Loader>\n </LoadingBody>\n <DialogFooter onClose={onClose} />\n </>\n );\n }\n\n if (hasError) {\n return (\n <>\n <Modal.Header>\n <Modal.Title>\n {formatMessage({\n id: getTrad('header.actions.add-assets'),\n defaultMessage: 'Add new assets',\n })}\n </Modal.Title>\n </Modal.Header>\n <Page.Error />\n <DialogFooter onClose={onClose} />\n </>\n );\n }\n\n if (!canRead) {\n return (\n <>\n <Modal.Header>\n <Modal.Title>\n {formatMessage({\n id: getTrad('header.actions.add-assets'),\n defaultMessage: 'Add new assets',\n })}\n </Modal.Title>\n </Modal.Header>\n <Page.NoPermissions />\n <DialogFooter onClose={onClose} />\n </>\n );\n }\n\n if (assetToEdit) {\n return (\n <EditAssetContent\n onClose={() => setAssetToEdit(undefined)}\n asset={assetToEdit as EditAsset}\n canUpdate={canUpdate}\n canCopyLink={canCopyLink}\n canDownload={canDownload}\n trackedLocation={trackedLocation}\n />\n );\n }\n\n if (folderToEdit) {\n return (\n <EditFolderContent\n folder={folderToEdit as FolderDefinition}\n onClose={() => setFolderToEdit(undefined)}\n location=\"content-manager\"\n parentFolderId={queryObject?.folder as string | number | null | undefined}\n />\n );\n }\n\n const handleMoveItem = (hoverIndex: number, destIndex: number) => {\n const offset = destIndex - hoverIndex;\n const orderedAssetsClone = selectedAssets.slice();\n const nextAssets = moveElement<Asset>(orderedAssetsClone, hoverIndex, offset);\n setSelections(nextAssets);\n };\n\n const handleFolderChange = (folderId: number, folderPath?: string) => {\n onChangeFolder(folderId);\n if (onChangeFolderParam) {\n onChangeFolderParam(folderId, folderPath);\n }\n };\n\n return (\n <>\n <Modal.Header>\n <Modal.Title>\n {formatMessage({\n id: getTrad('header.actions.add-assets'),\n defaultMessage: 'Add new assets',\n })}\n </Modal.Title>\n </Modal.Header>\n\n <TabsRoot variant=\"simple\" value={activeTab} onValueChange={setActiveTab}>\n <Flex paddingLeft={8} paddingRight={8} paddingTop={6} justifyContent=\"space-between\">\n <Tabs.List>\n <Tabs.Trigger value=\"browse\">\n {formatMessage({\n id: getTrad('modal.nav.browse'),\n defaultMessage: 'Browse',\n })}\n </Tabs.Trigger>\n <Tabs.Trigger value=\"selected\">\n {formatMessage({\n id: getTrad('modal.header.select-files'),\n defaultMessage: 'Selected files',\n })}\n <Badge marginLeft={2}>{selectedAssets.length}</Badge>\n </Tabs.Trigger>\n </Tabs.List>\n <Flex gap={2}>\n <Button\n variant=\"secondary\"\n onClick={() => onAddFolder({ folderId: queryObject?.folder })}\n >\n {formatMessage({\n id: getTrad('modal.upload-list.sub-header.add-folder'),\n defaultMessage: 'Add folder',\n })}\n </Button>\n <Button onClick={() => onAddAsset({ folderId: queryObject?.folder })}>\n {formatMessage({\n id: getTrad('modal.upload-list.sub-header.button'),\n defaultMessage: 'Add more assets',\n })}\n </Button>\n </Flex>\n </Flex>\n <Divider />\n <Modal.Body>\n <Tabs.Content value=\"browse\">\n <BrowseStep\n allowedTypes={allowedTypes}\n assets={assets!}\n canCreate={canCreate}\n canRead={canRead}\n folders={folders as FolderWithType[]}\n onSelectAsset={handleSelectAsset}\n selectedAssets={selectedAssets}\n multiple={multiple}\n onSelectAllAsset={handleSelectAllAssets}\n onEditAsset={setAssetToEdit}\n onEditFolder={setFolderToEdit}\n pagination={pagination!}\n queryObject={queryObject!}\n onAddAsset={onAddAsset}\n onChangeFilters={(filters: FilterCondition<string>[] | BrowseFilter[]) =>\n onChangeFilters!(filters as FilterCondition<string>[])\n }\n onChangeFolder={handleFolderChange}\n onChangePage={onChangePage!}\n onChangePageSize={onChangePageSize!}\n onChangeSort={(sort: string | undefined) => onChangeSort!(sort as Query['sort'])}\n onChangeSearch={onChangeSearch!}\n />\n </Tabs.Content>\n <Tabs.Content value=\"selected\">\n <SelectedStep\n selectedAssets={selectedAssets}\n onSelectAsset={handleSelectAsset}\n onReorderAsset={handleMoveItem}\n />\n </Tabs.Content>\n </Modal.Body>\n </TabsRoot>\n <DialogFooter onClose={onClose} onValidate={() => onValidate(selectedAssets)} />\n </>\n );\n};\n\ninterface AssetDialogProps extends AssetContentProps {\n open?: boolean;\n}\n\nexport const AssetDialog = ({ open = false, onClose, ...restProps }: AssetDialogProps) => {\n return (\n <Modal.Root open={open} onOpenChange={onClose}>\n <Modal.Content>\n <AssetContent onClose={onClose} {...restProps} />\n </Modal.Content>\n </Modal.Root>\n );\n};\n\nconst TabsRoot = styled(Tabs.Root)`\n display: flex;\n flex-direction: column;\n overflow: hidden;\n`;\n"],"names":["LoadingBody","styled","Flex","AssetContent","allowedTypes","folderId","onClose","onAddAsset","onAddFolder","onChangeFolder","onValidate","multiple","initiallySelectedAssets","trackedLocation","assetToEdit","setAssetToEdit","React","useState","undefined","folderToEdit","setFolderToEdit","formatMessage","useIntl","canRead","canCreate","isLoading","isLoadingPermissions","canUpdate","canCopyLink","canDownload","useMediaLibraryPermissions","queryObject","onChangeFilters","onChangePage","onChangePageSize","onChangeSort","onChangeSearch","onChangeFolderParam","useModalQueryParams","folder","data","pagination","results","assets","isLoadingAssets","error","errorAssets","useAssets","skipWhen","query","folders","isLoadingFolders","errorFolders","useFolders","enabled","containsAssetFilter","page","selectedAssets","selectOne","selectOnly","setSelections","selectMultiple","deselectMultiple","useSelectionState","handleSelectAllAssets","allowedAssets","getAllowedFiles","alreadySelected","filter","asset","findIndex","selectedAsset","id","length","handleSelectAsset","hasError","activeTab","setActiveTab","_jsxs","_Fragment","_jsx","Modal","Header","Title","getTrad","defaultMessage","justifyContent","paddingTop","paddingBottom","Loader","DialogFooter","Page","Error","NoPermissions","EditAssetContent","EditFolderContent","location","parentFolderId","handleMoveItem","hoverIndex","destIndex","offset","orderedAssetsClone","slice","nextAssets","moveElement","handleFolderChange","folderPath","TabsRoot","variant","value","onValueChange","paddingLeft","paddingRight","Tabs","List","Trigger","Badge","marginLeft","gap","Button","onClick","Divider","Body","Content","BrowseStep","onSelectAsset","onSelectAllAsset","onEditAsset","onEditFolder","filters","sort","SelectedStep","onReorderAsset","AssetDialog","open","restProps","Root","onOpenChange"],"mappings":"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"}
@@ -27,7 +27,7 @@ import { SelectedStep } from './SelectedStep/SelectedStep.mjs';
27
27
  // TODO: find a better naming convention for the file that was an index file before
28
28
  const LoadingBody = styled(Flex)`
29
29
  /* 80px are coming from the Tabs component that is not included in the ModalBody */
30
- min-height: ${()=>`calc(60vh + 8rem)`};
30
+ min-height: ${()=>`calc(60dvh + 8rem)`};
31
31
  `;
32
32
  const AssetContent = ({ allowedTypes = [], folderId = null, onClose, onAddAsset, onAddFolder, onChangeFolder, onValidate, multiple = false, initiallySelectedAssets = [], trackedLocation })=>{
33
33
  const [assetToEdit, setAssetToEdit] = React.useState(undefined);
@@ -1 +1 @@
1
- {"version":3,"file":"AssetDialog.mjs","sources":["../../../../admin/src/components/AssetDialog/AssetDialog.tsx"],"sourcesContent":["// TODO: find a better naming convention for the file that was an index file before\nimport * as React from 'react';\n\nimport { Page } from '@strapi/admin/strapi-admin';\nimport { Badge, Button, Divider, Flex, Loader, Modal, Tabs } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { useAssets } from '../../hooks/useAssets';\nimport { useFolders } from '../../hooks/useFolders';\nimport { useMediaLibraryPermissions } from '../../hooks/useMediaLibraryPermissions';\nimport { useModalQueryParams } from '../../hooks/useModalQueryParams';\nimport { useSelectionState } from '../../hooks/useSelectionState';\nimport {\n containsAssetFilter,\n getTrad,\n getAllowedFiles,\n moveElement,\n AllowedFiles,\n} from '../../utils';\nimport { EditAssetContent, Asset as EditAsset } from '../EditAssetDialog/EditAssetContent';\nimport { EditFolderContent } from '../EditFolderDialog/EditFolderDialog';\n\nimport {\n BrowseStep,\n FolderWithType,\n FileWithType,\n Filter as BrowseFilter,\n} from './BrowseStep/BrowseStep';\nimport { DialogFooter } from './DialogFooter';\nimport { SelectedStep } from './SelectedStep/SelectedStep';\n\nimport type { File as Asset, FilterCondition, Query } from '../../../../shared/contracts/files';\nimport type { Folder, FolderDefinition } from '../../../../shared/contracts/folders';\nimport type { AllowedTypes } from '../AssetCard/AssetCard';\n\nconst LoadingBody = styled(Flex)`\n /* 80px are coming from the Tabs component that is not included in the ModalBody */\n min-height: ${() => `calc(60vh + 8rem)`};\n`;\n\nexport interface FileRow extends Asset {\n folderURL?: string;\n isSelectable?: boolean;\n type?: string;\n}\n\nexport interface FolderRow extends Folder {\n folderURL?: string;\n isSelectable?: boolean;\n type?: string;\n}\n\ninterface AssetContentProps {\n allowedTypes?: AllowedTypes[];\n folderId?: number | null;\n onClose: () => void;\n onAddAsset: (arg?: { folderId: number | { id: number } | null | undefined }) => void;\n onAddFolder: ({ folderId }: { folderId: number | { id: number } | null | undefined }) => void;\n onChangeFolder: (folderId: number | null) => void;\n onValidate: (selectedAssets: Asset[]) => void;\n multiple?: boolean;\n trackedLocation?: string;\n initiallySelectedAssets?: Asset[];\n}\n\nexport const AssetContent = ({\n allowedTypes = [],\n folderId = null,\n onClose,\n onAddAsset,\n onAddFolder,\n onChangeFolder,\n onValidate,\n multiple = false,\n initiallySelectedAssets = [],\n trackedLocation,\n}: AssetContentProps) => {\n const [assetToEdit, setAssetToEdit] = React.useState<FileWithType | undefined>(undefined);\n const [folderToEdit, setFolderToEdit] = React.useState<FolderRow | undefined>(undefined);\n const { formatMessage } = useIntl();\n const {\n canRead,\n canCreate,\n isLoading: isLoadingPermissions,\n canUpdate,\n canCopyLink,\n canDownload,\n } = useMediaLibraryPermissions();\n\n const [\n { queryObject },\n {\n onChangeFilters,\n onChangePage,\n onChangePageSize,\n onChangeSort,\n onChangeSearch,\n onChangeFolder: onChangeFolderParam,\n },\n ] = useModalQueryParams({ folder: folderId });\n\n const {\n data: { pagination, results: assets } = {},\n isLoading: isLoadingAssets,\n error: errorAssets,\n } = useAssets({ skipWhen: !canRead, query: queryObject });\n\n const {\n data: folders,\n isLoading: isLoadingFolders,\n error: errorFolders,\n } = useFolders({\n enabled: canRead && !containsAssetFilter(queryObject!) && pagination?.page === 1,\n query: queryObject,\n });\n\n const [\n selectedAssets,\n { selectOne, selectOnly, setSelections, selectMultiple, deselectMultiple },\n ] = useSelectionState(['id'], initiallySelectedAssets);\n\n const handleSelectAllAssets = () => {\n const allowedAssets = getAllowedFiles(allowedTypes, assets as AllowedFiles[]);\n\n if (!multiple) {\n return undefined;\n }\n\n // selected files in current folder\n const alreadySelected = allowedAssets.filter(\n (asset) => selectedAssets.findIndex((selectedAsset) => selectedAsset.id === asset.id) !== -1\n );\n\n if (alreadySelected.length > 0) {\n deselectMultiple(alreadySelected);\n } else {\n selectMultiple(allowedAssets);\n }\n };\n\n const handleSelectAsset = (asset: Asset | FileRow | FolderRow) => {\n return multiple ? selectOne(asset as Asset) : selectOnly(asset as Asset);\n };\n\n const isLoading = isLoadingPermissions || isLoadingAssets || isLoadingFolders;\n const hasError = errorAssets || errorFolders;\n\n const [activeTab, setActiveTab] = React.useState(\n selectedAssets.length > 0 ? 'selected' : 'browse'\n );\n\n if (isLoading) {\n return (\n <>\n <Modal.Header>\n <Modal.Title>\n {formatMessage({\n id: getTrad('header.actions.add-assets'),\n defaultMessage: 'Add new assets',\n })}\n </Modal.Title>\n </Modal.Header>\n <LoadingBody justifyContent=\"center\" paddingTop={4} paddingBottom={4}>\n <Loader>\n {formatMessage({\n id: getTrad('content.isLoading'),\n defaultMessage: 'Content is loading.',\n })}\n </Loader>\n </LoadingBody>\n <DialogFooter onClose={onClose} />\n </>\n );\n }\n\n if (hasError) {\n return (\n <>\n <Modal.Header>\n <Modal.Title>\n {formatMessage({\n id: getTrad('header.actions.add-assets'),\n defaultMessage: 'Add new assets',\n })}\n </Modal.Title>\n </Modal.Header>\n <Page.Error />\n <DialogFooter onClose={onClose} />\n </>\n );\n }\n\n if (!canRead) {\n return (\n <>\n <Modal.Header>\n <Modal.Title>\n {formatMessage({\n id: getTrad('header.actions.add-assets'),\n defaultMessage: 'Add new assets',\n })}\n </Modal.Title>\n </Modal.Header>\n <Page.NoPermissions />\n <DialogFooter onClose={onClose} />\n </>\n );\n }\n\n if (assetToEdit) {\n return (\n <EditAssetContent\n onClose={() => setAssetToEdit(undefined)}\n asset={assetToEdit as EditAsset}\n canUpdate={canUpdate}\n canCopyLink={canCopyLink}\n canDownload={canDownload}\n trackedLocation={trackedLocation}\n />\n );\n }\n\n if (folderToEdit) {\n return (\n <EditFolderContent\n folder={folderToEdit as FolderDefinition}\n onClose={() => setFolderToEdit(undefined)}\n location=\"content-manager\"\n parentFolderId={queryObject?.folder as string | number | null | undefined}\n />\n );\n }\n\n const handleMoveItem = (hoverIndex: number, destIndex: number) => {\n const offset = destIndex - hoverIndex;\n const orderedAssetsClone = selectedAssets.slice();\n const nextAssets = moveElement<Asset>(orderedAssetsClone, hoverIndex, offset);\n setSelections(nextAssets);\n };\n\n const handleFolderChange = (folderId: number, folderPath?: string) => {\n onChangeFolder(folderId);\n if (onChangeFolderParam) {\n onChangeFolderParam(folderId, folderPath);\n }\n };\n\n return (\n <>\n <Modal.Header>\n <Modal.Title>\n {formatMessage({\n id: getTrad('header.actions.add-assets'),\n defaultMessage: 'Add new assets',\n })}\n </Modal.Title>\n </Modal.Header>\n\n <TabsRoot variant=\"simple\" value={activeTab} onValueChange={setActiveTab}>\n <Flex paddingLeft={8} paddingRight={8} paddingTop={6} justifyContent=\"space-between\">\n <Tabs.List>\n <Tabs.Trigger value=\"browse\">\n {formatMessage({\n id: getTrad('modal.nav.browse'),\n defaultMessage: 'Browse',\n })}\n </Tabs.Trigger>\n <Tabs.Trigger value=\"selected\">\n {formatMessage({\n id: getTrad('modal.header.select-files'),\n defaultMessage: 'Selected files',\n })}\n <Badge marginLeft={2}>{selectedAssets.length}</Badge>\n </Tabs.Trigger>\n </Tabs.List>\n <Flex gap={2}>\n <Button\n variant=\"secondary\"\n onClick={() => onAddFolder({ folderId: queryObject?.folder })}\n >\n {formatMessage({\n id: getTrad('modal.upload-list.sub-header.add-folder'),\n defaultMessage: 'Add folder',\n })}\n </Button>\n <Button onClick={() => onAddAsset({ folderId: queryObject?.folder })}>\n {formatMessage({\n id: getTrad('modal.upload-list.sub-header.button'),\n defaultMessage: 'Add more assets',\n })}\n </Button>\n </Flex>\n </Flex>\n <Divider />\n <Modal.Body>\n <Tabs.Content value=\"browse\">\n <BrowseStep\n allowedTypes={allowedTypes}\n assets={assets!}\n canCreate={canCreate}\n canRead={canRead}\n folders={folders as FolderWithType[]}\n onSelectAsset={handleSelectAsset}\n selectedAssets={selectedAssets}\n multiple={multiple}\n onSelectAllAsset={handleSelectAllAssets}\n onEditAsset={setAssetToEdit}\n onEditFolder={setFolderToEdit}\n pagination={pagination!}\n queryObject={queryObject!}\n onAddAsset={onAddAsset}\n onChangeFilters={(filters: FilterCondition<string>[] | BrowseFilter[]) =>\n onChangeFilters!(filters as FilterCondition<string>[])\n }\n onChangeFolder={handleFolderChange}\n onChangePage={onChangePage!}\n onChangePageSize={onChangePageSize!}\n onChangeSort={(sort: string | undefined) => onChangeSort!(sort as Query['sort'])}\n onChangeSearch={onChangeSearch!}\n />\n </Tabs.Content>\n <Tabs.Content value=\"selected\">\n <SelectedStep\n selectedAssets={selectedAssets}\n onSelectAsset={handleSelectAsset}\n onReorderAsset={handleMoveItem}\n />\n </Tabs.Content>\n </Modal.Body>\n </TabsRoot>\n <DialogFooter onClose={onClose} onValidate={() => onValidate(selectedAssets)} />\n </>\n );\n};\n\ninterface AssetDialogProps extends AssetContentProps {\n open?: boolean;\n}\n\nexport const AssetDialog = ({ open = false, onClose, ...restProps }: AssetDialogProps) => {\n return (\n <Modal.Root open={open} onOpenChange={onClose}>\n <Modal.Content>\n <AssetContent onClose={onClose} {...restProps} />\n </Modal.Content>\n </Modal.Root>\n );\n};\n\nconst TabsRoot = styled(Tabs.Root)`\n display: flex;\n flex-direction: column;\n overflow: hidden;\n`;\n"],"names":["LoadingBody","styled","Flex","AssetContent","allowedTypes","folderId","onClose","onAddAsset","onAddFolder","onChangeFolder","onValidate","multiple","initiallySelectedAssets","trackedLocation","assetToEdit","setAssetToEdit","React","useState","undefined","folderToEdit","setFolderToEdit","formatMessage","useIntl","canRead","canCreate","isLoading","isLoadingPermissions","canUpdate","canCopyLink","canDownload","useMediaLibraryPermissions","queryObject","onChangeFilters","onChangePage","onChangePageSize","onChangeSort","onChangeSearch","onChangeFolderParam","useModalQueryParams","folder","data","pagination","results","assets","isLoadingAssets","error","errorAssets","useAssets","skipWhen","query","folders","isLoadingFolders","errorFolders","useFolders","enabled","containsAssetFilter","page","selectedAssets","selectOne","selectOnly","setSelections","selectMultiple","deselectMultiple","useSelectionState","handleSelectAllAssets","allowedAssets","getAllowedFiles","alreadySelected","filter","asset","findIndex","selectedAsset","id","length","handleSelectAsset","hasError","activeTab","setActiveTab","_jsxs","_Fragment","_jsx","Modal","Header","Title","getTrad","defaultMessage","justifyContent","paddingTop","paddingBottom","Loader","DialogFooter","Page","Error","NoPermissions","EditAssetContent","EditFolderContent","location","parentFolderId","handleMoveItem","hoverIndex","destIndex","offset","orderedAssetsClone","slice","nextAssets","moveElement","handleFolderChange","folderPath","TabsRoot","variant","value","onValueChange","paddingLeft","paddingRight","Tabs","List","Trigger","Badge","marginLeft","gap","Button","onClick","Divider","Body","Content","BrowseStep","onSelectAsset","onSelectAllAsset","onEditAsset","onEditFolder","filters","sort","SelectedStep","onReorderAsset","AssetDialog","open","restProps","Root","onOpenChange"],"mappings":"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"}
1
+ {"version":3,"file":"AssetDialog.mjs","sources":["../../../../admin/src/components/AssetDialog/AssetDialog.tsx"],"sourcesContent":["// TODO: find a better naming convention for the file that was an index file before\nimport * as React from 'react';\n\nimport { Page } from '@strapi/admin/strapi-admin';\nimport { Badge, Button, Divider, Flex, Loader, Modal, Tabs } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { useAssets } from '../../hooks/useAssets';\nimport { useFolders } from '../../hooks/useFolders';\nimport { useMediaLibraryPermissions } from '../../hooks/useMediaLibraryPermissions';\nimport { useModalQueryParams } from '../../hooks/useModalQueryParams';\nimport { useSelectionState } from '../../hooks/useSelectionState';\nimport {\n containsAssetFilter,\n getTrad,\n getAllowedFiles,\n moveElement,\n AllowedFiles,\n} from '../../utils';\nimport { EditAssetContent, Asset as EditAsset } from '../EditAssetDialog/EditAssetContent';\nimport { EditFolderContent } from '../EditFolderDialog/EditFolderDialog';\n\nimport {\n BrowseStep,\n FolderWithType,\n FileWithType,\n Filter as BrowseFilter,\n} from './BrowseStep/BrowseStep';\nimport { DialogFooter } from './DialogFooter';\nimport { SelectedStep } from './SelectedStep/SelectedStep';\n\nimport type { File as Asset, FilterCondition, Query } from '../../../../shared/contracts/files';\nimport type { Folder, FolderDefinition } from '../../../../shared/contracts/folders';\nimport type { AllowedTypes } from '../AssetCard/AssetCard';\n\nconst LoadingBody = styled(Flex)`\n /* 80px are coming from the Tabs component that is not included in the ModalBody */\n min-height: ${() => `calc(60dvh + 8rem)`};\n`;\n\nexport interface FileRow extends Asset {\n folderURL?: string;\n isSelectable?: boolean;\n type?: string;\n}\n\nexport interface FolderRow extends Folder {\n folderURL?: string;\n isSelectable?: boolean;\n type?: string;\n}\n\ninterface AssetContentProps {\n allowedTypes?: AllowedTypes[];\n folderId?: number | null;\n onClose: () => void;\n onAddAsset: (arg?: { folderId: number | { id: number } | null | undefined }) => void;\n onAddFolder: ({ folderId }: { folderId: number | { id: number } | null | undefined }) => void;\n onChangeFolder: (folderId: number | null) => void;\n onValidate: (selectedAssets: Asset[]) => void;\n multiple?: boolean;\n trackedLocation?: string;\n initiallySelectedAssets?: Asset[];\n}\n\nexport const AssetContent = ({\n allowedTypes = [],\n folderId = null,\n onClose,\n onAddAsset,\n onAddFolder,\n onChangeFolder,\n onValidate,\n multiple = false,\n initiallySelectedAssets = [],\n trackedLocation,\n}: AssetContentProps) => {\n const [assetToEdit, setAssetToEdit] = React.useState<FileWithType | undefined>(undefined);\n const [folderToEdit, setFolderToEdit] = React.useState<FolderRow | undefined>(undefined);\n const { formatMessage } = useIntl();\n const {\n canRead,\n canCreate,\n isLoading: isLoadingPermissions,\n canUpdate,\n canCopyLink,\n canDownload,\n } = useMediaLibraryPermissions();\n\n const [\n { queryObject },\n {\n onChangeFilters,\n onChangePage,\n onChangePageSize,\n onChangeSort,\n onChangeSearch,\n onChangeFolder: onChangeFolderParam,\n },\n ] = useModalQueryParams({ folder: folderId });\n\n const {\n data: { pagination, results: assets } = {},\n isLoading: isLoadingAssets,\n error: errorAssets,\n } = useAssets({ skipWhen: !canRead, query: queryObject });\n\n const {\n data: folders,\n isLoading: isLoadingFolders,\n error: errorFolders,\n } = useFolders({\n enabled: canRead && !containsAssetFilter(queryObject!) && pagination?.page === 1,\n query: queryObject,\n });\n\n const [\n selectedAssets,\n { selectOne, selectOnly, setSelections, selectMultiple, deselectMultiple },\n ] = useSelectionState(['id'], initiallySelectedAssets);\n\n const handleSelectAllAssets = () => {\n const allowedAssets = getAllowedFiles(allowedTypes, assets as AllowedFiles[]);\n\n if (!multiple) {\n return undefined;\n }\n\n // selected files in current folder\n const alreadySelected = allowedAssets.filter(\n (asset) => selectedAssets.findIndex((selectedAsset) => selectedAsset.id === asset.id) !== -1\n );\n\n if (alreadySelected.length > 0) {\n deselectMultiple(alreadySelected);\n } else {\n selectMultiple(allowedAssets);\n }\n };\n\n const handleSelectAsset = (asset: Asset | FileRow | FolderRow) => {\n return multiple ? selectOne(asset as Asset) : selectOnly(asset as Asset);\n };\n\n const isLoading = isLoadingPermissions || isLoadingAssets || isLoadingFolders;\n const hasError = errorAssets || errorFolders;\n\n const [activeTab, setActiveTab] = React.useState(\n selectedAssets.length > 0 ? 'selected' : 'browse'\n );\n\n if (isLoading) {\n return (\n <>\n <Modal.Header>\n <Modal.Title>\n {formatMessage({\n id: getTrad('header.actions.add-assets'),\n defaultMessage: 'Add new assets',\n })}\n </Modal.Title>\n </Modal.Header>\n <LoadingBody justifyContent=\"center\" paddingTop={4} paddingBottom={4}>\n <Loader>\n {formatMessage({\n id: getTrad('content.isLoading'),\n defaultMessage: 'Content is loading.',\n })}\n </Loader>\n </LoadingBody>\n <DialogFooter onClose={onClose} />\n </>\n );\n }\n\n if (hasError) {\n return (\n <>\n <Modal.Header>\n <Modal.Title>\n {formatMessage({\n id: getTrad('header.actions.add-assets'),\n defaultMessage: 'Add new assets',\n })}\n </Modal.Title>\n </Modal.Header>\n <Page.Error />\n <DialogFooter onClose={onClose} />\n </>\n );\n }\n\n if (!canRead) {\n return (\n <>\n <Modal.Header>\n <Modal.Title>\n {formatMessage({\n id: getTrad('header.actions.add-assets'),\n defaultMessage: 'Add new assets',\n })}\n </Modal.Title>\n </Modal.Header>\n <Page.NoPermissions />\n <DialogFooter onClose={onClose} />\n </>\n );\n }\n\n if (assetToEdit) {\n return (\n <EditAssetContent\n onClose={() => setAssetToEdit(undefined)}\n asset={assetToEdit as EditAsset}\n canUpdate={canUpdate}\n canCopyLink={canCopyLink}\n canDownload={canDownload}\n trackedLocation={trackedLocation}\n />\n );\n }\n\n if (folderToEdit) {\n return (\n <EditFolderContent\n folder={folderToEdit as FolderDefinition}\n onClose={() => setFolderToEdit(undefined)}\n location=\"content-manager\"\n parentFolderId={queryObject?.folder as string | number | null | undefined}\n />\n );\n }\n\n const handleMoveItem = (hoverIndex: number, destIndex: number) => {\n const offset = destIndex - hoverIndex;\n const orderedAssetsClone = selectedAssets.slice();\n const nextAssets = moveElement<Asset>(orderedAssetsClone, hoverIndex, offset);\n setSelections(nextAssets);\n };\n\n const handleFolderChange = (folderId: number, folderPath?: string) => {\n onChangeFolder(folderId);\n if (onChangeFolderParam) {\n onChangeFolderParam(folderId, folderPath);\n }\n };\n\n return (\n <>\n <Modal.Header>\n <Modal.Title>\n {formatMessage({\n id: getTrad('header.actions.add-assets'),\n defaultMessage: 'Add new assets',\n })}\n </Modal.Title>\n </Modal.Header>\n\n <TabsRoot variant=\"simple\" value={activeTab} onValueChange={setActiveTab}>\n <Flex paddingLeft={8} paddingRight={8} paddingTop={6} justifyContent=\"space-between\">\n <Tabs.List>\n <Tabs.Trigger value=\"browse\">\n {formatMessage({\n id: getTrad('modal.nav.browse'),\n defaultMessage: 'Browse',\n })}\n </Tabs.Trigger>\n <Tabs.Trigger value=\"selected\">\n {formatMessage({\n id: getTrad('modal.header.select-files'),\n defaultMessage: 'Selected files',\n })}\n <Badge marginLeft={2}>{selectedAssets.length}</Badge>\n </Tabs.Trigger>\n </Tabs.List>\n <Flex gap={2}>\n <Button\n variant=\"secondary\"\n onClick={() => onAddFolder({ folderId: queryObject?.folder })}\n >\n {formatMessage({\n id: getTrad('modal.upload-list.sub-header.add-folder'),\n defaultMessage: 'Add folder',\n })}\n </Button>\n <Button onClick={() => onAddAsset({ folderId: queryObject?.folder })}>\n {formatMessage({\n id: getTrad('modal.upload-list.sub-header.button'),\n defaultMessage: 'Add more assets',\n })}\n </Button>\n </Flex>\n </Flex>\n <Divider />\n <Modal.Body>\n <Tabs.Content value=\"browse\">\n <BrowseStep\n allowedTypes={allowedTypes}\n assets={assets!}\n canCreate={canCreate}\n canRead={canRead}\n folders={folders as FolderWithType[]}\n onSelectAsset={handleSelectAsset}\n selectedAssets={selectedAssets}\n multiple={multiple}\n onSelectAllAsset={handleSelectAllAssets}\n onEditAsset={setAssetToEdit}\n onEditFolder={setFolderToEdit}\n pagination={pagination!}\n queryObject={queryObject!}\n onAddAsset={onAddAsset}\n onChangeFilters={(filters: FilterCondition<string>[] | BrowseFilter[]) =>\n onChangeFilters!(filters as FilterCondition<string>[])\n }\n onChangeFolder={handleFolderChange}\n onChangePage={onChangePage!}\n onChangePageSize={onChangePageSize!}\n onChangeSort={(sort: string | undefined) => onChangeSort!(sort as Query['sort'])}\n onChangeSearch={onChangeSearch!}\n />\n </Tabs.Content>\n <Tabs.Content value=\"selected\">\n <SelectedStep\n selectedAssets={selectedAssets}\n onSelectAsset={handleSelectAsset}\n onReorderAsset={handleMoveItem}\n />\n </Tabs.Content>\n </Modal.Body>\n </TabsRoot>\n <DialogFooter onClose={onClose} onValidate={() => onValidate(selectedAssets)} />\n </>\n );\n};\n\ninterface AssetDialogProps extends AssetContentProps {\n open?: boolean;\n}\n\nexport const AssetDialog = ({ open = false, onClose, ...restProps }: AssetDialogProps) => {\n return (\n <Modal.Root open={open} onOpenChange={onClose}>\n <Modal.Content>\n <AssetContent onClose={onClose} {...restProps} />\n </Modal.Content>\n </Modal.Root>\n );\n};\n\nconst TabsRoot = styled(Tabs.Root)`\n display: flex;\n flex-direction: column;\n overflow: hidden;\n`;\n"],"names":["LoadingBody","styled","Flex","AssetContent","allowedTypes","folderId","onClose","onAddAsset","onAddFolder","onChangeFolder","onValidate","multiple","initiallySelectedAssets","trackedLocation","assetToEdit","setAssetToEdit","React","useState","undefined","folderToEdit","setFolderToEdit","formatMessage","useIntl","canRead","canCreate","isLoading","isLoadingPermissions","canUpdate","canCopyLink","canDownload","useMediaLibraryPermissions","queryObject","onChangeFilters","onChangePage","onChangePageSize","onChangeSort","onChangeSearch","onChangeFolderParam","useModalQueryParams","folder","data","pagination","results","assets","isLoadingAssets","error","errorAssets","useAssets","skipWhen","query","folders","isLoadingFolders","errorFolders","useFolders","enabled","containsAssetFilter","page","selectedAssets","selectOne","selectOnly","setSelections","selectMultiple","deselectMultiple","useSelectionState","handleSelectAllAssets","allowedAssets","getAllowedFiles","alreadySelected","filter","asset","findIndex","selectedAsset","id","length","handleSelectAsset","hasError","activeTab","setActiveTab","_jsxs","_Fragment","_jsx","Modal","Header","Title","getTrad","defaultMessage","justifyContent","paddingTop","paddingBottom","Loader","DialogFooter","Page","Error","NoPermissions","EditAssetContent","EditFolderContent","location","parentFolderId","handleMoveItem","hoverIndex","destIndex","offset","orderedAssetsClone","slice","nextAssets","moveElement","handleFolderChange","folderPath","TabsRoot","variant","value","onValueChange","paddingLeft","paddingRight","Tabs","List","Trigger","Badge","marginLeft","gap","Button","onClick","Divider","Body","Content","BrowseStep","onSelectAsset","onSelectAllAsset","onEditAsset","onEditFolder","filters","sort","SelectedStep","onReorderAsset","AssetDialog","open","restProps","Root","onOpenChange"],"mappings":"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"}