@strapi/upload 5.34.0 → 5.36.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.
- package/dist/admin/components/EditAssetDialog/EditAssetContent.js +32 -3
- package/dist/admin/components/EditAssetDialog/EditAssetContent.js.map +1 -1
- package/dist/admin/components/EditAssetDialog/EditAssetContent.mjs +32 -3
- package/dist/admin/components/EditAssetDialog/EditAssetContent.mjs.map +1 -1
- package/dist/admin/components/EditAssetDialog/PreviewBox/AssetPreview.js.map +1 -1
- package/dist/admin/components/EditAssetDialog/PreviewBox/AssetPreview.mjs.map +1 -1
- package/dist/admin/components/EditAssetDialog/PreviewBox/FocalPointActions.js +57 -0
- package/dist/admin/components/EditAssetDialog/PreviewBox/FocalPointActions.js.map +1 -0
- package/dist/admin/components/EditAssetDialog/PreviewBox/FocalPointActions.mjs +55 -0
- package/dist/admin/components/EditAssetDialog/PreviewBox/FocalPointActions.mjs.map +1 -0
- package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewBox.js +96 -20
- package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewBox.js.map +1 -1
- package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewBox.mjs +98 -22
- package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewBox.mjs.map +1 -1
- package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewComponents.js +47 -0
- package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewComponents.js.map +1 -1
- package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewComponents.mjs +44 -1
- package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewComponents.mjs.map +1 -1
- package/dist/admin/future/App.js +6 -11
- package/dist/admin/future/App.js.map +1 -1
- package/dist/admin/future/App.mjs +6 -11
- package/dist/admin/future/App.mjs.map +1 -1
- 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 +342 -0
- package/dist/admin/future/pages/Assets/AssetsPage.js.map +1 -0
- package/dist/admin/future/pages/Assets/AssetsPage.mjs +321 -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/DropZoneWithOverlay.js +33 -0
- package/dist/admin/future/pages/Assets/components/DropZone/DropZoneWithOverlay.js.map +1 -0
- package/dist/admin/future/pages/Assets/components/DropZone/DropZoneWithOverlay.mjs +31 -0
- package/dist/admin/future/pages/Assets/components/DropZone/DropZoneWithOverlay.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/services/api.js +28 -0
- package/dist/admin/future/services/api.js.map +1 -0
- package/dist/admin/future/services/api.mjs +25 -0
- package/dist/admin/future/services/api.mjs.map +1 -0
- 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/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/future/utils/translations.js +8 -0
- package/dist/admin/future/utils/translations.js.map +1 -0
- package/dist/admin/future/utils/translations.mjs +6 -0
- package/dist/admin/future/utils/translations.mjs.map +1 -0
- package/dist/admin/hooks/useEditAsset.js +1 -0
- package/dist/admin/hooks/useEditAsset.js.map +1 -1
- package/dist/admin/hooks/useEditAsset.mjs +1 -0
- package/dist/admin/hooks/useEditAsset.mjs.map +1 -1
- package/dist/admin/index.js +1 -1
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +1 -1
- package/dist/admin/index.mjs.map +1 -1
- package/dist/admin/package.json.js +7 -6
- package/dist/admin/package.json.js.map +1 -1
- package/dist/admin/package.json.mjs +7 -6
- package/dist/admin/package.json.mjs.map +1 -1
- package/dist/admin/src/components/EditAssetDialog/PreviewBox/AssetPreview.d.ts +1 -2
- package/dist/admin/src/components/EditAssetDialog/PreviewBox/FocalPointActions.d.ts +7 -0
- package/dist/admin/src/components/EditAssetDialog/PreviewBox/PreviewBox.d.ts +6 -2
- package/dist/admin/src/components/EditAssetDialog/PreviewBox/PreviewComponents.d.ts +13 -0
- package/dist/admin/src/future/App.d.ts +1 -1
- 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/DropZoneWithOverlay.d.ts +4 -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/services/api.d.ts +5 -1
- package/dist/admin/src/future/services/assets.d.ts +13 -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/src/future/utils/translations.d.ts +1 -0
- package/dist/admin/translations/en.json.js +11 -0
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +11 -0
- package/dist/admin/translations/en.json.mjs.map +1 -1
- package/dist/server/content-types/file.js +4 -0
- package/dist/server/content-types/file.js.map +1 -1
- package/dist/server/content-types/file.mjs +4 -0
- package/dist/server/content-types/file.mjs.map +1 -1
- package/dist/server/controllers/validation/admin/upload.js +5 -0
- package/dist/server/controllers/validation/admin/upload.js.map +1 -1
- package/dist/server/controllers/validation/admin/upload.mjs +5 -0
- package/dist/server/controllers/validation/admin/upload.mjs.map +1 -1
- package/dist/server/controllers/validation/content-api/upload.js +6 -1
- package/dist/server/controllers/validation/content-api/upload.js.map +1 -1
- package/dist/server/controllers/validation/content-api/upload.mjs +6 -1
- package/dist/server/controllers/validation/content-api/upload.mjs.map +1 -1
- package/dist/server/services/upload.js +3 -1
- package/dist/server/services/upload.js.map +1 -1
- package/dist/server/services/upload.mjs +3 -1
- package/dist/server/services/upload.mjs.map +1 -1
- package/dist/server/src/content-types/file.d.ts +4 -0
- package/dist/server/src/content-types/file.d.ts.map +1 -1
- package/dist/server/src/content-types/index.d.ts +4 -0
- package/dist/server/src/content-types/index.d.ts.map +1 -1
- package/dist/server/src/controllers/validation/admin/upload.d.ts +240 -0
- package/dist/server/src/controllers/validation/admin/upload.d.ts.map +1 -1
- package/dist/server/src/controllers/validation/content-api/upload.d.ts +180 -0
- package/dist/server/src/controllers/validation/content-api/upload.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +5 -1
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts +1 -1
- package/dist/server/src/services/upload.d.ts +1 -1
- package/dist/server/src/services/upload.d.ts.map +1 -1
- package/dist/server/src/types.d.ts +6 -0
- package/dist/server/src/types.d.ts.map +1 -1
- package/dist/shared/contracts/files.d.ts +6 -0
- package/package.json +7 -6
- package/dist/admin/future/pages/MediaLibraryPage.js +0 -55
- package/dist/admin/future/pages/MediaLibraryPage.js.map +0 -1
- package/dist/admin/future/pages/MediaLibraryPage.mjs +0 -53
- package/dist/admin/future/pages/MediaLibraryPage.mjs.map +0 -1
- package/dist/admin/src/future/pages/MediaLibraryPage.d.ts +0 -1
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
|
+
import { useRef, useState, useEffect } from 'react';
|
|
3
|
+
import * as ToggleGroup from '@radix-ui/react-toggle-group';
|
|
4
|
+
import { useNotification, useAPIErrorHandler, Layouts, SearchInput } from '@strapi/admin/strapi-admin';
|
|
5
|
+
import { Box, VisuallyHidden, Flex, SimpleMenu, MenuItem, Loader, Typography } from '@strapi/design-system';
|
|
6
|
+
import { ChevronDown, Files, List, GridFour, Folder } from '@strapi/icons';
|
|
7
|
+
import { useIntl } from 'react-intl';
|
|
8
|
+
import { styled } from 'styled-components';
|
|
9
|
+
import { usePersistentState } from '../../../hooks/usePersistentState.mjs';
|
|
10
|
+
import { useUploadFilesMutation } from '../../services/api.mjs';
|
|
11
|
+
import { useGetAssetsQuery } from '../../services/assets.mjs';
|
|
12
|
+
import { getTranslationKey } from '../../utils/translations.mjs';
|
|
13
|
+
import { AssetsGrid } from './components/AssetsGrid.mjs';
|
|
14
|
+
import { AssetsTable } from './components/AssetsTable.mjs';
|
|
15
|
+
import { DropZoneWithOverlay } from './components/DropZone/DropZoneWithOverlay.mjs';
|
|
16
|
+
import { UploadDropZoneProvider, useUploadDropZone } from './components/DropZone/UploadDropZoneContext.mjs';
|
|
17
|
+
import { viewOptions, localStorageKeys } from './constants.mjs';
|
|
18
|
+
|
|
19
|
+
const AssetsView = ({ view })=>{
|
|
20
|
+
const { formatMessage } = useIntl();
|
|
21
|
+
const { data, isLoading, error } = useGetAssetsQuery({
|
|
22
|
+
folder: null
|
|
23
|
+
});
|
|
24
|
+
const isGridView = view === viewOptions.GRID;
|
|
25
|
+
const assets = data?.results ?? [];
|
|
26
|
+
if (isLoading) {
|
|
27
|
+
return /*#__PURE__*/ jsx(Flex, {
|
|
28
|
+
justifyContent: "center",
|
|
29
|
+
padding: 8,
|
|
30
|
+
children: /*#__PURE__*/ jsx(Loader, {
|
|
31
|
+
children: formatMessage({
|
|
32
|
+
id: 'app.loading',
|
|
33
|
+
defaultMessage: 'Loading...'
|
|
34
|
+
})
|
|
35
|
+
})
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
if (error) {
|
|
39
|
+
return /*#__PURE__*/ jsx(Box, {
|
|
40
|
+
padding: 8,
|
|
41
|
+
children: /*#__PURE__*/ jsx(Typography, {
|
|
42
|
+
textColor: "danger600",
|
|
43
|
+
children: formatMessage({
|
|
44
|
+
id: getTranslationKey('list.assets.error'),
|
|
45
|
+
defaultMessage: 'An error occurred while fetching assets.'
|
|
46
|
+
})
|
|
47
|
+
})
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
if (isGridView) {
|
|
51
|
+
return /*#__PURE__*/ jsx(AssetsGrid, {
|
|
52
|
+
assets: assets
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
return /*#__PURE__*/ jsx(AssetsTable, {
|
|
56
|
+
assets: assets
|
|
57
|
+
});
|
|
58
|
+
};
|
|
59
|
+
const StyledToggleGroup = styled(ToggleGroup.Root)`
|
|
60
|
+
display: flex;
|
|
61
|
+
border: 1px solid ${({ theme })=>theme.colors.neutral200};
|
|
62
|
+
border-radius: ${({ theme })=>theme.borderRadius};
|
|
63
|
+
overflow: hidden;
|
|
64
|
+
`;
|
|
65
|
+
const StyledToggleItem = styled(ToggleGroup.Item)`
|
|
66
|
+
display: flex;
|
|
67
|
+
align-items: center;
|
|
68
|
+
gap: ${({ theme })=>theme.spaces[2]};
|
|
69
|
+
padding: ${({ theme })=>`${theme.spaces[2]} ${theme.spaces[4]}`};
|
|
70
|
+
border: none;
|
|
71
|
+
background: ${({ theme })=>theme.colors.neutral0};
|
|
72
|
+
color: ${({ theme })=>theme.colors.neutral800};
|
|
73
|
+
cursor: pointer;
|
|
74
|
+
font-size: ${({ theme })=>theme.fontSizes[1]};
|
|
75
|
+
font-weight: ${({ theme })=>theme.fontWeights.semiBold};
|
|
76
|
+
|
|
77
|
+
&:hover {
|
|
78
|
+
background: ${({ theme })=>theme.colors.neutral100};
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
&[data-state='on'] {
|
|
82
|
+
background: ${({ theme })=>theme.colors.neutral150};
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
svg {
|
|
86
|
+
width: 1.6rem;
|
|
87
|
+
height: 1.6rem;
|
|
88
|
+
}
|
|
89
|
+
`;
|
|
90
|
+
const DropFilesMessage = ({ uploadDropZoneRef })=>{
|
|
91
|
+
const { formatMessage } = useIntl();
|
|
92
|
+
const { isDragging } = useUploadDropZone();
|
|
93
|
+
// Dropzone message position (relative to main content)
|
|
94
|
+
const [leftContentWidth, setLeftContentWidth] = useState(0);
|
|
95
|
+
// Calculate the left content width to position the dropzone message correctly
|
|
96
|
+
useEffect(()=>{
|
|
97
|
+
if (!uploadDropZoneRef?.current) return;
|
|
98
|
+
const updateRect = ()=>{
|
|
99
|
+
const rect = uploadDropZoneRef.current?.getBoundingClientRect();
|
|
100
|
+
if (rect) {
|
|
101
|
+
setLeftContentWidth((prev)=>prev !== rect.left ? rect.left : prev);
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
updateRect();
|
|
105
|
+
const resizeObserver = new ResizeObserver(updateRect);
|
|
106
|
+
resizeObserver.observe(uploadDropZoneRef.current);
|
|
107
|
+
return ()=>resizeObserver.disconnect();
|
|
108
|
+
}, [
|
|
109
|
+
uploadDropZoneRef
|
|
110
|
+
]);
|
|
111
|
+
if (!isDragging) return null;
|
|
112
|
+
return /*#__PURE__*/ jsxs(DropFilesMessageImpl, {
|
|
113
|
+
$leftContentWidth: leftContentWidth,
|
|
114
|
+
children: [
|
|
115
|
+
/*#__PURE__*/ jsx(Typography, {
|
|
116
|
+
textColor: "neutral0",
|
|
117
|
+
children: formatMessage({
|
|
118
|
+
id: getTranslationKey('dropzone.upload.message'),
|
|
119
|
+
defaultMessage: 'Drop here to upload to'
|
|
120
|
+
})
|
|
121
|
+
}),
|
|
122
|
+
/*#__PURE__*/ jsxs(Flex, {
|
|
123
|
+
gap: 2,
|
|
124
|
+
alignItems: "center",
|
|
125
|
+
children: [
|
|
126
|
+
/*#__PURE__*/ jsx(Folder, {
|
|
127
|
+
width: 20,
|
|
128
|
+
height: 20,
|
|
129
|
+
fill: "neutral0"
|
|
130
|
+
}),
|
|
131
|
+
/*#__PURE__*/ jsx(Typography, {
|
|
132
|
+
textColor: "neutral0",
|
|
133
|
+
fontWeight: "semiBold",
|
|
134
|
+
children: "Current folder"
|
|
135
|
+
})
|
|
136
|
+
]
|
|
137
|
+
})
|
|
138
|
+
]
|
|
139
|
+
});
|
|
140
|
+
};
|
|
141
|
+
const DropFilesMessageImpl = styled(Box)`
|
|
142
|
+
position: fixed;
|
|
143
|
+
bottom: ${({ theme })=>theme.spaces[8]};
|
|
144
|
+
left: 50%;
|
|
145
|
+
transform: translateX(calc(-50% + ${({ $leftContentWidth })=>$leftContentWidth / 2}px));
|
|
146
|
+
display: flex;
|
|
147
|
+
flex-direction: column;
|
|
148
|
+
align-items: center;
|
|
149
|
+
justify-content: center;
|
|
150
|
+
gap: ${({ theme })=>theme.spaces[2]};
|
|
151
|
+
background: ${({ theme })=>theme.colors.primary600};
|
|
152
|
+
padding: ${({ theme })=>theme.spaces[4]} ${({ theme })=>theme.spaces[6]};
|
|
153
|
+
border-radius: ${({ theme })=>theme.borderRadius};
|
|
154
|
+
z-index: 2;
|
|
155
|
+
`;
|
|
156
|
+
const AssetsPage = ()=>{
|
|
157
|
+
const { formatMessage } = useIntl();
|
|
158
|
+
// View state
|
|
159
|
+
const [view, setView] = usePersistentState(localStorageKeys.view, viewOptions.GRID);
|
|
160
|
+
const isGridView = view === viewOptions.GRID;
|
|
161
|
+
// Refs
|
|
162
|
+
const fileInputRef = useRef(null);
|
|
163
|
+
const uploadDropZoneRef = useRef(null);
|
|
164
|
+
// Upload handlers
|
|
165
|
+
const { toggleNotification } = useNotification();
|
|
166
|
+
const { _unstableFormatAPIError } = useAPIErrorHandler();
|
|
167
|
+
const [uploadFiles] = useUploadFilesMutation();
|
|
168
|
+
const uploadFilesToFolder = async (files, folderId)=>{
|
|
169
|
+
if (files.length === 0) return;
|
|
170
|
+
const formData = new FormData();
|
|
171
|
+
files.forEach((file)=>{
|
|
172
|
+
formData.append('files', file);
|
|
173
|
+
formData.append('fileInfo', JSON.stringify({
|
|
174
|
+
name: file.name,
|
|
175
|
+
caption: null,
|
|
176
|
+
alternativeText: null,
|
|
177
|
+
folder: folderId
|
|
178
|
+
}));
|
|
179
|
+
});
|
|
180
|
+
try {
|
|
181
|
+
await uploadFiles(formData).unwrap();
|
|
182
|
+
toggleNotification({
|
|
183
|
+
type: 'success',
|
|
184
|
+
message: formatMessage({
|
|
185
|
+
id: getTranslationKey('assets.uploaded'),
|
|
186
|
+
defaultMessage: '{number, plural, one {# asset} other {# assets}} uploaded successfully'
|
|
187
|
+
}, {
|
|
188
|
+
number: files.length
|
|
189
|
+
})
|
|
190
|
+
});
|
|
191
|
+
} catch (error) {
|
|
192
|
+
const errorMessage = _unstableFormatAPIError(error);
|
|
193
|
+
toggleNotification({
|
|
194
|
+
type: 'danger',
|
|
195
|
+
message: errorMessage
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
};
|
|
199
|
+
const handleFileSelect = ()=>{
|
|
200
|
+
fileInputRef.current?.click();
|
|
201
|
+
};
|
|
202
|
+
const handleFileChange = async (e)=>{
|
|
203
|
+
const files = e.target.files;
|
|
204
|
+
if (files && files.length > 0) {
|
|
205
|
+
await uploadFilesToFolder(Array.from(files), null);
|
|
206
|
+
}
|
|
207
|
+
e.target.value = '';
|
|
208
|
+
};
|
|
209
|
+
const handleDrop = async (files)=>{
|
|
210
|
+
await uploadFilesToFolder(files, null);
|
|
211
|
+
};
|
|
212
|
+
return /*#__PURE__*/ jsx(UploadDropZoneProvider, {
|
|
213
|
+
onDrop: handleDrop,
|
|
214
|
+
children: /*#__PURE__*/ jsx(Box, {
|
|
215
|
+
ref: uploadDropZoneRef,
|
|
216
|
+
children: /*#__PURE__*/ jsxs(Layouts.Root, {
|
|
217
|
+
minHeight: "100vh",
|
|
218
|
+
children: [
|
|
219
|
+
/*#__PURE__*/ jsx(VisuallyHidden, {
|
|
220
|
+
children: /*#__PURE__*/ jsx("input", {
|
|
221
|
+
type: "file",
|
|
222
|
+
ref: fileInputRef,
|
|
223
|
+
onChange: handleFileChange,
|
|
224
|
+
multiple: true
|
|
225
|
+
})
|
|
226
|
+
}),
|
|
227
|
+
/*#__PURE__*/ jsx(DropFilesMessage, {
|
|
228
|
+
uploadDropZoneRef: uploadDropZoneRef
|
|
229
|
+
}),
|
|
230
|
+
/*#__PURE__*/ jsx(Layouts.Header, {
|
|
231
|
+
navigationAction: /*#__PURE__*/ jsx(Box, {
|
|
232
|
+
children: "TODO: Breadcrumbs"
|
|
233
|
+
}),
|
|
234
|
+
title: "TODO: Folder location",
|
|
235
|
+
primaryAction: /*#__PURE__*/ jsxs(Flex, {
|
|
236
|
+
gap: 2,
|
|
237
|
+
children: [
|
|
238
|
+
/*#__PURE__*/ jsx(SimpleMenu, {
|
|
239
|
+
popoverPlacement: "bottom-end",
|
|
240
|
+
variant: "default",
|
|
241
|
+
endIcon: /*#__PURE__*/ jsx(ChevronDown, {}),
|
|
242
|
+
label: formatMessage({
|
|
243
|
+
id: getTranslationKey('new'),
|
|
244
|
+
defaultMessage: 'New'
|
|
245
|
+
}),
|
|
246
|
+
children: /*#__PURE__*/ jsx(MenuItem, {
|
|
247
|
+
onSelect: handleFileSelect,
|
|
248
|
+
startIcon: /*#__PURE__*/ jsx(Files, {}),
|
|
249
|
+
children: formatMessage({
|
|
250
|
+
id: getTranslationKey('import-files'),
|
|
251
|
+
defaultMessage: 'Import files'
|
|
252
|
+
})
|
|
253
|
+
})
|
|
254
|
+
}),
|
|
255
|
+
/*#__PURE__*/ jsx(SearchInput, {
|
|
256
|
+
label: formatMessage({
|
|
257
|
+
id: getTranslationKey('search.label'),
|
|
258
|
+
defaultMessage: 'Search for an asset'
|
|
259
|
+
}),
|
|
260
|
+
trackedEvent: "didSearchMediaLibraryElements",
|
|
261
|
+
trackedEventDetails: {
|
|
262
|
+
location: 'upload'
|
|
263
|
+
}
|
|
264
|
+
}),
|
|
265
|
+
/*#__PURE__*/ jsxs(StyledToggleGroup, {
|
|
266
|
+
type: "single",
|
|
267
|
+
value: isGridView ? 'grid' : 'table',
|
|
268
|
+
onValueChange: (value)=>value && setView(value === 'grid' ? viewOptions.GRID : viewOptions.TABLE),
|
|
269
|
+
"aria-label": formatMessage({
|
|
270
|
+
id: getTranslationKey('view.switch.label'),
|
|
271
|
+
defaultMessage: 'View options'
|
|
272
|
+
}),
|
|
273
|
+
children: [
|
|
274
|
+
/*#__PURE__*/ jsxs(StyledToggleItem, {
|
|
275
|
+
value: "table",
|
|
276
|
+
"aria-label": formatMessage({
|
|
277
|
+
id: getTranslationKey('view.table'),
|
|
278
|
+
defaultMessage: 'Table view'
|
|
279
|
+
}),
|
|
280
|
+
children: [
|
|
281
|
+
/*#__PURE__*/ jsx(List, {}),
|
|
282
|
+
formatMessage({
|
|
283
|
+
id: getTranslationKey('view.table'),
|
|
284
|
+
defaultMessage: 'Table view'
|
|
285
|
+
})
|
|
286
|
+
]
|
|
287
|
+
}),
|
|
288
|
+
/*#__PURE__*/ jsxs(StyledToggleItem, {
|
|
289
|
+
value: "grid",
|
|
290
|
+
"aria-label": formatMessage({
|
|
291
|
+
id: getTranslationKey('view.grid'),
|
|
292
|
+
defaultMessage: 'Grid view'
|
|
293
|
+
}),
|
|
294
|
+
children: [
|
|
295
|
+
/*#__PURE__*/ jsx(GridFour, {}),
|
|
296
|
+
formatMessage({
|
|
297
|
+
id: getTranslationKey('view.grid'),
|
|
298
|
+
defaultMessage: 'Grid view'
|
|
299
|
+
})
|
|
300
|
+
]
|
|
301
|
+
})
|
|
302
|
+
]
|
|
303
|
+
})
|
|
304
|
+
]
|
|
305
|
+
})
|
|
306
|
+
}),
|
|
307
|
+
/*#__PURE__*/ jsx(Layouts.Content, {
|
|
308
|
+
children: /*#__PURE__*/ jsx(DropZoneWithOverlay, {
|
|
309
|
+
children: /*#__PURE__*/ jsx(AssetsView, {
|
|
310
|
+
view: view
|
|
311
|
+
})
|
|
312
|
+
})
|
|
313
|
+
})
|
|
314
|
+
]
|
|
315
|
+
})
|
|
316
|
+
})
|
|
317
|
+
});
|
|
318
|
+
};
|
|
319
|
+
|
|
320
|
+
export { AssetsPage };
|
|
321
|
+
//# sourceMappingURL=AssetsPage.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AssetsPage.mjs","sources":["../../../../../admin/src/future/pages/Assets/AssetsPage.tsx"],"sourcesContent":["import { useEffect, useRef, useState, type ChangeEvent } from 'react';\n\nimport * as ToggleGroup from '@radix-ui/react-toggle-group';\nimport {\n Layouts,\n SearchInput,\n useNotification,\n useAPIErrorHandler,\n} from '@strapi/admin/strapi-admin';\nimport {\n Box,\n Flex,\n Loader,\n MenuItem,\n SimpleMenu,\n Typography,\n VisuallyHidden,\n} from '@strapi/design-system';\nimport { ChevronDown, Files, Folder, GridFour as GridIcon, List } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { usePersistentState } from '../../../hooks/usePersistentState';\nimport { useUploadFilesMutation } from '../../services/api';\nimport { useGetAssetsQuery } from '../../services/assets';\nimport { getTranslationKey } from '../../utils/translations';\n\nimport { AssetsGrid } from './components/AssetsGrid';\nimport { AssetsTable } from './components/AssetsTable';\nimport { DropZoneWithOverlay } from './components/DropZone/DropZoneWithOverlay';\nimport {\n UploadDropZoneProvider,\n useUploadDropZone,\n} from './components/DropZone/UploadDropZoneContext';\nimport { localStorageKeys, viewOptions } from './constants';\n\ninterface AssetsViewProps {\n view: number;\n}\n\nconst AssetsView = ({ view }: AssetsViewProps) => {\n const { formatMessage } = useIntl();\n const { data, isLoading, error } = useGetAssetsQuery({ folder: null });\n\n const isGridView = view === viewOptions.GRID;\n const assets = data?.results ?? [];\n\n if (isLoading) {\n return (\n <Flex justifyContent=\"center\" padding={8}>\n <Loader>{formatMessage({ id: 'app.loading', defaultMessage: 'Loading...' })}</Loader>\n </Flex>\n );\n }\n\n if (error) {\n return (\n <Box padding={8}>\n <Typography textColor=\"danger600\">\n {formatMessage({\n id: getTranslationKey('list.assets.error'),\n defaultMessage: 'An error occurred while fetching assets.',\n })}\n </Typography>\n </Box>\n );\n }\n\n if (isGridView) {\n return <AssetsGrid assets={assets} />;\n }\n\n return <AssetsTable assets={assets} />;\n};\n\nconst StyledToggleGroup = styled(ToggleGroup.Root)`\n display: flex;\n border: 1px solid ${({ theme }) => theme.colors.neutral200};\n border-radius: ${({ theme }) => theme.borderRadius};\n overflow: hidden;\n`;\n\nconst StyledToggleItem = styled(ToggleGroup.Item)`\n display: flex;\n align-items: center;\n gap: ${({ theme }) => theme.spaces[2]};\n padding: ${({ theme }) => `${theme.spaces[2]} ${theme.spaces[4]}`};\n border: none;\n background: ${({ theme }) => theme.colors.neutral0};\n color: ${({ theme }) => theme.colors.neutral800};\n cursor: pointer;\n font-size: ${({ theme }) => theme.fontSizes[1]};\n font-weight: ${({ theme }) => theme.fontWeights.semiBold};\n\n &:hover {\n background: ${({ theme }) => theme.colors.neutral100};\n }\n\n &[data-state='on'] {\n background: ${({ theme }) => theme.colors.neutral150};\n }\n\n svg {\n width: 1.6rem;\n height: 1.6rem;\n }\n`;\n\n/**\n * Dropzone items\n */\n\ninterface DropFilesMessageProps {\n uploadDropZoneRef?: React.RefObject<HTMLDivElement>;\n}\n\nconst DropFilesMessage = ({ uploadDropZoneRef }: DropFilesMessageProps) => {\n const { formatMessage } = useIntl();\n const { isDragging } = useUploadDropZone();\n\n // Dropzone message position (relative to main content)\n const [leftContentWidth, setLeftContentWidth] = useState(0);\n\n // Calculate the left content width to position the dropzone message correctly\n useEffect(() => {\n if (!uploadDropZoneRef?.current) return;\n\n const updateRect = () => {\n const rect = uploadDropZoneRef.current?.getBoundingClientRect();\n if (rect) {\n setLeftContentWidth((prev) => (prev !== rect.left ? rect.left : prev));\n }\n };\n\n updateRect();\n const resizeObserver = new ResizeObserver(updateRect);\n resizeObserver.observe(uploadDropZoneRef.current);\n return () => resizeObserver.disconnect();\n }, [uploadDropZoneRef]);\n\n if (!isDragging) return null;\n\n return (\n <DropFilesMessageImpl $leftContentWidth={leftContentWidth}>\n <Typography textColor=\"neutral0\">\n {formatMessage({\n id: getTranslationKey('dropzone.upload.message'),\n defaultMessage: 'Drop here to upload to',\n })}\n </Typography>\n <Flex gap={2} alignItems=\"center\">\n <Folder width={20} height={20} fill=\"neutral0\" />\n <Typography textColor=\"neutral0\" fontWeight=\"semiBold\">\n Current folder{/* TODO: Replace this later with the current folder name */}\n </Typography>\n </Flex>\n </DropFilesMessageImpl>\n );\n};\n\nconst DropFilesMessageImpl = styled(Box)<{ $leftContentWidth: number }>`\n position: fixed;\n bottom: ${({ theme }) => theme.spaces[8]};\n left: 50%;\n transform: translateX(calc(-50% + ${({ $leftContentWidth }) => $leftContentWidth / 2}px));\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: ${({ theme }) => theme.spaces[2]};\n background: ${({ theme }) => theme.colors.primary600};\n padding: ${({ theme }) => theme.spaces[4]} ${({ theme }) => theme.spaces[6]};\n border-radius: ${({ theme }) => theme.borderRadius};\n z-index: 2;\n`;\n\nexport const AssetsPage = () => {\n const { formatMessage } = useIntl();\n\n // View state\n const [view, setView] = usePersistentState(localStorageKeys.view, viewOptions.GRID);\n const isGridView = view === viewOptions.GRID;\n\n // Refs\n const fileInputRef = useRef<HTMLInputElement>(null);\n const uploadDropZoneRef = useRef<HTMLDivElement>(null);\n\n // Upload handlers\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError } = useAPIErrorHandler();\n const [uploadFiles] = useUploadFilesMutation();\n\n const uploadFilesToFolder = async (files: globalThis.File[], folderId: number | null) => {\n if (files.length === 0) return;\n const formData = new FormData();\n files.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: folderId,\n })\n );\n });\n try {\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: files.length }\n ),\n });\n } catch (error) {\n const errorMessage = _unstableFormatAPIError(error as Error);\n toggleNotification({\n type: 'danger',\n message: errorMessage,\n });\n }\n };\n\n const handleFileSelect = () => {\n fileInputRef.current?.click();\n };\n\n const handleFileChange = async (e: ChangeEvent<HTMLInputElement>) => {\n const files = e.target.files;\n if (files && files.length > 0) {\n await uploadFilesToFolder(Array.from(files), null);\n }\n e.target.value = '';\n };\n\n const handleDrop = async (files: globalThis.File[]) => {\n await uploadFilesToFolder(files, null);\n };\n\n return (\n <UploadDropZoneProvider onDrop={handleDrop}>\n <Box ref={uploadDropZoneRef}>\n <Layouts.Root minHeight=\"100vh\">\n <VisuallyHidden>\n <input type=\"file\" ref={fileInputRef} onChange={handleFileChange} multiple />\n </VisuallyHidden>\n\n <DropFilesMessage uploadDropZoneRef={uploadDropZoneRef} />\n\n <Layouts.Header\n navigationAction={<Box>TODO: Breadcrumbs</Box>}\n title=\"TODO: Folder location\"\n primaryAction={\n <Flex gap={2}>\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 <SearchInput\n label={formatMessage({\n id: getTranslationKey('search.label'),\n defaultMessage: 'Search for an asset',\n })}\n trackedEvent=\"didSearchMediaLibraryElements\"\n trackedEventDetails={{ location: 'upload' }}\n />\n <StyledToggleGroup\n type=\"single\"\n value={isGridView ? 'grid' : 'table'}\n onValueChange={(value) =>\n value && setView(value === 'grid' ? viewOptions.GRID : viewOptions.TABLE)\n }\n aria-label={formatMessage({\n id: getTranslationKey('view.switch.label'),\n defaultMessage: 'View options',\n })}\n >\n <StyledToggleItem\n value=\"table\"\n aria-label={formatMessage({\n id: getTranslationKey('view.table'),\n defaultMessage: 'Table view',\n })}\n >\n <List />\n {formatMessage({\n id: getTranslationKey('view.table'),\n defaultMessage: 'Table view',\n })}\n </StyledToggleItem>\n <StyledToggleItem\n value=\"grid\"\n aria-label={formatMessage({\n id: getTranslationKey('view.grid'),\n defaultMessage: 'Grid view',\n })}\n >\n <GridIcon />\n {formatMessage({\n id: getTranslationKey('view.grid'),\n defaultMessage: 'Grid view',\n })}\n </StyledToggleItem>\n </StyledToggleGroup>\n </Flex>\n }\n />\n\n <Layouts.Content>\n <DropZoneWithOverlay>\n <AssetsView view={view} />\n </DropZoneWithOverlay>\n </Layouts.Content>\n </Layouts.Root>\n </Box>\n </UploadDropZoneProvider>\n );\n};\n"],"names":["AssetsView","view","formatMessage","useIntl","data","isLoading","error","useGetAssetsQuery","folder","isGridView","viewOptions","GRID","assets","results","_jsx","Flex","justifyContent","padding","Loader","id","defaultMessage","Box","Typography","textColor","getTranslationKey","AssetsGrid","AssetsTable","StyledToggleGroup","styled","ToggleGroup","Root","theme","colors","neutral200","borderRadius","StyledToggleItem","Item","spaces","neutral0","neutral800","fontSizes","fontWeights","semiBold","neutral100","neutral150","DropFilesMessage","uploadDropZoneRef","isDragging","useUploadDropZone","leftContentWidth","setLeftContentWidth","useState","useEffect","current","updateRect","rect","getBoundingClientRect","prev","left","resizeObserver","ResizeObserver","observe","disconnect","_jsxs","DropFilesMessageImpl","$leftContentWidth","gap","alignItems","Folder","width","height","fill","fontWeight","primary600","AssetsPage","setView","usePersistentState","localStorageKeys","fileInputRef","useRef","toggleNotification","useNotification","_unstableFormatAPIError","useAPIErrorHandler","uploadFiles","useUploadFilesMutation","uploadFilesToFolder","files","folderId","length","formData","FormData","forEach","file","append","JSON","stringify","name","caption","alternativeText","unwrap","type","message","number","errorMessage","handleFileSelect","click","handleFileChange","e","target","Array","from","value","handleDrop","UploadDropZoneProvider","onDrop","ref","Layouts","minHeight","VisuallyHidden","input","onChange","multiple","Header","navigationAction","title","primaryAction","SimpleMenu","popoverPlacement","variant","endIcon","ChevronDown","label","MenuItem","onSelect","startIcon","Files","SearchInput","trackedEvent","trackedEventDetails","location","onValueChange","TABLE","aria-label","List","GridIcon","Content","DropZoneWithOverlay"],"mappings":"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"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var designSystem = require('@strapi/design-system');
|
|
5
|
+
var icons = require('@strapi/icons');
|
|
6
|
+
var reactIntl = require('react-intl');
|
|
7
|
+
var styledComponents = require('styled-components');
|
|
8
|
+
var enums = require('../../../enums.js');
|
|
9
|
+
var files = require('../../../utils/files.js');
|
|
10
|
+
var getAssetIcon = require('../../../utils/getAssetIcon.js');
|
|
11
|
+
var translations = require('../../../utils/translations.js');
|
|
12
|
+
|
|
13
|
+
/* -------------------------------------------------------------------------------------------------
|
|
14
|
+
* AssetsGrid
|
|
15
|
+
* -----------------------------------------------------------------------------------------------*/ const StyledCard = styledComponents.styled(designSystem.Card)`
|
|
16
|
+
border: 1px solid ${({ theme })=>theme.colors.neutral200};
|
|
17
|
+
border-radius: 8px;
|
|
18
|
+
overflow: hidden;
|
|
19
|
+
`;
|
|
20
|
+
/* -------------------------------------------------------------------------------------------------
|
|
21
|
+
* AssetPreview
|
|
22
|
+
* -----------------------------------------------------------------------------------------------*/ const PreviewContainer = styledComponents.styled(designSystem.Box)`
|
|
23
|
+
position: relative;
|
|
24
|
+
width: 100%;
|
|
25
|
+
padding-bottom: 62.5%;
|
|
26
|
+
height: 0;
|
|
27
|
+
overflow: hidden;
|
|
28
|
+
background: repeating-conic-gradient(
|
|
29
|
+
${({ theme })=>theme.colors.neutral100} 0% 25%,
|
|
30
|
+
transparent 0% 50%
|
|
31
|
+
)
|
|
32
|
+
50% / 20px 20px;
|
|
33
|
+
`;
|
|
34
|
+
const StyledImage = styledComponents.styled.img`
|
|
35
|
+
position: absolute;
|
|
36
|
+
top: 0;
|
|
37
|
+
left: 0;
|
|
38
|
+
width: 100%;
|
|
39
|
+
height: 100%;
|
|
40
|
+
object-fit: cover;
|
|
41
|
+
`;
|
|
42
|
+
const IconPreview = styledComponents.styled(designSystem.Flex)`
|
|
43
|
+
position: absolute;
|
|
44
|
+
top: 0;
|
|
45
|
+
left: 0;
|
|
46
|
+
width: 100%;
|
|
47
|
+
height: 100%;
|
|
48
|
+
color: ${({ theme })=>theme.colors.neutral500};
|
|
49
|
+
background: ${({ theme })=>theme.colors.neutral100};
|
|
50
|
+
`;
|
|
51
|
+
const AssetPreview = ({ asset })=>{
|
|
52
|
+
const { alternativeText, ext, formats, mime, url } = asset;
|
|
53
|
+
if (mime?.includes(enums.AssetType.Image)) {
|
|
54
|
+
const mediaURL = files.prefixFileUrlWithBackendUrl(formats?.thumbnail?.url) ?? files.prefixFileUrlWithBackendUrl(url);
|
|
55
|
+
if (mediaURL) {
|
|
56
|
+
return /*#__PURE__*/ jsxRuntime.jsx(PreviewContainer, {
|
|
57
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(StyledImage, {
|
|
58
|
+
src: mediaURL,
|
|
59
|
+
alt: alternativeText || ''
|
|
60
|
+
})
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
const DocIcon = getAssetIcon.getAssetIcon(mime, ext);
|
|
65
|
+
return /*#__PURE__*/ jsxRuntime.jsx(PreviewContainer, {
|
|
66
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(IconPreview, {
|
|
67
|
+
justifyContent: "center",
|
|
68
|
+
alignItems: "center",
|
|
69
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(DocIcon, {
|
|
70
|
+
width: 48,
|
|
71
|
+
height: 48
|
|
72
|
+
})
|
|
73
|
+
})
|
|
74
|
+
});
|
|
75
|
+
};
|
|
76
|
+
/* -------------------------------------------------------------------------------------------------
|
|
77
|
+
* AssetCard
|
|
78
|
+
* -----------------------------------------------------------------------------------------------*/ const StyledCardHeader = styledComponents.styled(designSystem.CardHeader)`
|
|
79
|
+
border-bottom: none;
|
|
80
|
+
`;
|
|
81
|
+
const CardFooter = styledComponents.styled(designSystem.Flex)`
|
|
82
|
+
min-width: 0;
|
|
83
|
+
`;
|
|
84
|
+
const FileTypeIcon = styledComponents.styled(designSystem.Flex)`
|
|
85
|
+
color: ${({ theme })=>theme.colors.neutral600};
|
|
86
|
+
flex-shrink: 0;
|
|
87
|
+
`;
|
|
88
|
+
const FileName = styledComponents.styled(designSystem.Typography)`
|
|
89
|
+
flex: 1;
|
|
90
|
+
min-width: 0;
|
|
91
|
+
`;
|
|
92
|
+
const AssetCard = ({ asset })=>{
|
|
93
|
+
const { formatMessage } = reactIntl.useIntl();
|
|
94
|
+
const TypeIcon = getAssetIcon.getAssetIcon(asset.mime, asset.ext);
|
|
95
|
+
return /*#__PURE__*/ jsxRuntime.jsxs(StyledCard, {
|
|
96
|
+
children: [
|
|
97
|
+
/*#__PURE__*/ jsxRuntime.jsx(StyledCardHeader, {
|
|
98
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(AssetPreview, {
|
|
99
|
+
asset: asset
|
|
100
|
+
})
|
|
101
|
+
}),
|
|
102
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.CardBody, {
|
|
103
|
+
children: /*#__PURE__*/ jsxRuntime.jsxs(CardFooter, {
|
|
104
|
+
alignItems: "center",
|
|
105
|
+
gap: 2,
|
|
106
|
+
paddingTop: 2,
|
|
107
|
+
children: [
|
|
108
|
+
/*#__PURE__*/ jsxRuntime.jsx(FileTypeIcon, {
|
|
109
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(TypeIcon, {
|
|
110
|
+
width: 16,
|
|
111
|
+
height: 16
|
|
112
|
+
})
|
|
113
|
+
}),
|
|
114
|
+
/*#__PURE__*/ jsxRuntime.jsx(FileName, {
|
|
115
|
+
textColor: "primary800",
|
|
116
|
+
ellipsis: true,
|
|
117
|
+
children: asset.name
|
|
118
|
+
}),
|
|
119
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
|
|
120
|
+
label: formatMessage({
|
|
121
|
+
id: translations.getTranslationKey('control-card.more-actions'),
|
|
122
|
+
defaultMessage: 'More actions'
|
|
123
|
+
}),
|
|
124
|
+
variant: "ghost",
|
|
125
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(icons.More, {})
|
|
126
|
+
})
|
|
127
|
+
]
|
|
128
|
+
})
|
|
129
|
+
})
|
|
130
|
+
]
|
|
131
|
+
});
|
|
132
|
+
};
|
|
133
|
+
const AssetsGrid = ({ assets })=>{
|
|
134
|
+
const { formatMessage } = reactIntl.useIntl();
|
|
135
|
+
if (assets.length === 0) {
|
|
136
|
+
return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
|
|
137
|
+
padding: 8,
|
|
138
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
139
|
+
textColor: "neutral600",
|
|
140
|
+
children: formatMessage({
|
|
141
|
+
id: 'app.components.EmptyStateLayout.content-document',
|
|
142
|
+
defaultMessage: 'No content found'
|
|
143
|
+
})
|
|
144
|
+
})
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Grid.Root, {
|
|
148
|
+
gap: 4,
|
|
149
|
+
children: assets.map((asset)=>/*#__PURE__*/ jsxRuntime.jsx(designSystem.Grid.Item, {
|
|
150
|
+
col: 3,
|
|
151
|
+
m: 4,
|
|
152
|
+
s: 6,
|
|
153
|
+
xs: 12,
|
|
154
|
+
direction: "column",
|
|
155
|
+
alignItems: "stretch",
|
|
156
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(AssetCard, {
|
|
157
|
+
asset: asset
|
|
158
|
+
})
|
|
159
|
+
}, asset.id))
|
|
160
|
+
});
|
|
161
|
+
};
|
|
162
|
+
|
|
163
|
+
exports.AssetsGrid = AssetsGrid;
|
|
164
|
+
//# sourceMappingURL=AssetsGrid.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AssetsGrid.js","sources":["../../../../../../admin/src/future/pages/Assets/components/AssetsGrid.tsx"],"sourcesContent":["import {\n Box,\n Card,\n CardBody,\n CardHeader,\n Flex,\n Grid,\n IconButton,\n Typography,\n} from '@strapi/design-system';\nimport { More } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { AssetType } from '../../../enums';\nimport { prefixFileUrlWithBackendUrl } from '../../../utils/files';\nimport { getAssetIcon } from '../../../utils/getAssetIcon';\nimport { getTranslationKey } from '../../../utils/translations';\n\nimport type { File } from '../../../../../../shared/contracts/files';\n\n/* -------------------------------------------------------------------------------------------------\n * AssetsGrid\n * -----------------------------------------------------------------------------------------------*/\n\nconst StyledCard = styled(Card)`\n border: 1px solid ${({ theme }) => theme.colors.neutral200};\n border-radius: 8px;\n overflow: hidden;\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * AssetPreview\n * -----------------------------------------------------------------------------------------------*/\n\nconst PreviewContainer = styled(Box)`\n position: relative;\n width: 100%;\n padding-bottom: 62.5%;\n height: 0;\n overflow: hidden;\n background: repeating-conic-gradient(\n ${({ theme }) => theme.colors.neutral100} 0% 25%,\n transparent 0% 50%\n )\n 50% / 20px 20px;\n`;\n\nconst StyledImage = styled.img`\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n object-fit: cover;\n`;\n\nconst IconPreview = styled(Flex)`\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n color: ${({ theme }) => theme.colors.neutral500};\n background: ${({ theme }) => theme.colors.neutral100};\n`;\n\ninterface AssetPreviewProps {\n asset: File;\n}\n\nconst AssetPreview = ({ asset }: AssetPreviewProps) => {\n const { alternativeText, ext, formats, mime, url } = asset;\n\n if (mime?.includes(AssetType.Image)) {\n const mediaURL =\n prefixFileUrlWithBackendUrl(formats?.thumbnail?.url) ?? prefixFileUrlWithBackendUrl(url);\n\n if (mediaURL) {\n return (\n <PreviewContainer>\n <StyledImage src={mediaURL} alt={alternativeText || ''} />\n </PreviewContainer>\n );\n }\n }\n\n const DocIcon = getAssetIcon(mime, ext);\n\n return (\n <PreviewContainer>\n <IconPreview justifyContent=\"center\" alignItems=\"center\">\n <DocIcon width={48} height={48} />\n </IconPreview>\n </PreviewContainer>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * AssetCard\n * -----------------------------------------------------------------------------------------------*/\n\nconst StyledCardHeader = styled(CardHeader)`\n border-bottom: none;\n`;\n\nconst CardFooter = styled(Flex)`\n min-width: 0;\n`;\n\nconst FileTypeIcon = styled(Flex)`\n color: ${({ theme }) => theme.colors.neutral600};\n flex-shrink: 0;\n`;\n\nconst FileName = styled(Typography)`\n flex: 1;\n min-width: 0;\n`;\n\ninterface AssetCardProps {\n asset: File;\n}\n\nconst AssetCard = ({ asset }: AssetCardProps) => {\n const { formatMessage } = useIntl();\n const TypeIcon = getAssetIcon(asset.mime, asset.ext);\n\n return (\n <StyledCard>\n <StyledCardHeader>\n <AssetPreview asset={asset} />\n </StyledCardHeader>\n <CardBody>\n <CardFooter alignItems=\"center\" gap={2} paddingTop={2}>\n <FileTypeIcon>\n <TypeIcon width={16} height={16} />\n </FileTypeIcon>\n <FileName textColor=\"primary800\" ellipsis>\n {asset.name}\n </FileName>\n <IconButton\n label={formatMessage({\n id: getTranslationKey('control-card.more-actions'),\n defaultMessage: 'More actions',\n })}\n variant=\"ghost\"\n >\n <More />\n </IconButton>\n </CardFooter>\n </CardBody>\n </StyledCard>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * AssetsGrid\n * -----------------------------------------------------------------------------------------------*/\n\ninterface AssetsGridProps {\n assets: File[];\n}\n\nexport const AssetsGrid = ({ assets }: AssetsGridProps) => {\n const { formatMessage } = useIntl();\n\n if (assets.length === 0) {\n return (\n <Box padding={8}>\n <Typography textColor=\"neutral600\">\n {formatMessage({\n id: 'app.components.EmptyStateLayout.content-document',\n defaultMessage: 'No content found',\n })}\n </Typography>\n </Box>\n );\n }\n\n return (\n <Grid.Root gap={4}>\n {assets.map((asset) => (\n <Grid.Item\n col={3}\n m={4}\n s={6}\n xs={12}\n key={asset.id}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <AssetCard asset={asset} />\n </Grid.Item>\n ))}\n </Grid.Root>\n );\n};\n"],"names":["StyledCard","styled","Card","theme","colors","neutral200","PreviewContainer","Box","neutral100","StyledImage","img","IconPreview","Flex","neutral500","AssetPreview","asset","alternativeText","ext","formats","mime","url","includes","AssetType","Image","mediaURL","prefixFileUrlWithBackendUrl","thumbnail","_jsx","src","alt","DocIcon","getAssetIcon","justifyContent","alignItems","width","height","StyledCardHeader","CardHeader","CardFooter","FileTypeIcon","neutral600","FileName","Typography","AssetCard","formatMessage","useIntl","TypeIcon","_jsxs","CardBody","gap","paddingTop","textColor","ellipsis","name","IconButton","label","id","getTranslationKey","defaultMessage","variant","More","AssetsGrid","assets","length","padding","Grid","Root","map","Item","col","m","s","xs","direction"],"mappings":"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"}
|