@chayns-components/gallery 5.0.0-beta.98 → 5.0.0-beta.981
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/README.md +4 -15
- package/lib/cjs/components/Gallery.js +317 -0
- package/lib/cjs/components/Gallery.js.map +1 -0
- package/lib/cjs/components/Gallery.styles.js +92 -0
- package/lib/cjs/components/Gallery.styles.js.map +1 -0
- package/lib/cjs/components/add-file/AddFile.js +33 -0
- package/lib/cjs/components/add-file/AddFile.js.map +1 -0
- package/lib/cjs/components/add-file/AddFile.styles.js +23 -0
- package/lib/cjs/components/add-file/AddFile.styles.js.map +1 -0
- package/lib/cjs/components/gallery-item/GalleryItem.js +43 -0
- package/lib/cjs/components/gallery-item/GalleryItem.js.map +1 -0
- package/lib/cjs/components/gallery-item/GalleryItem.styles.js +51 -0
- package/lib/cjs/components/gallery-item/GalleryItem.styles.js.map +1 -0
- package/lib/cjs/components/gallery-item/media-item/MediaItem.js +52 -0
- package/lib/cjs/components/gallery-item/media-item/MediaItem.js.map +1 -0
- package/lib/cjs/components/gallery-item/media-item/MediaItem.styles.js +62 -0
- package/lib/cjs/components/gallery-item/media-item/MediaItem.styles.js.map +1 -0
- package/lib/cjs/components/gallery-item/preview-item/PreviewItem.js +45 -0
- package/lib/cjs/components/gallery-item/preview-item/PreviewItem.js.map +1 -0
- package/lib/cjs/components/gallery-item/preview-item/PreviewItem.styles.js +43 -0
- package/lib/cjs/components/gallery-item/preview-item/PreviewItem.styles.js.map +1 -0
- package/lib/cjs/index.js +21 -0
- package/lib/cjs/index.js.map +1 -0
- package/lib/cjs/types/gallery.js +12 -0
- package/lib/cjs/types/gallery.js.map +1 -0
- package/lib/cjs/utils/file.js +51 -0
- package/lib/cjs/utils/file.js.map +1 -0
- package/lib/esm/components/Gallery.js +307 -0
- package/lib/esm/components/Gallery.js.map +1 -0
- package/lib/esm/components/Gallery.styles.js +91 -0
- package/lib/esm/components/Gallery.styles.js.map +1 -0
- package/lib/esm/components/add-file/AddFile.js +26 -0
- package/lib/esm/components/add-file/AddFile.js.map +1 -0
- package/lib/esm/components/add-file/AddFile.styles.js +22 -0
- package/lib/esm/components/add-file/AddFile.styles.js.map +1 -0
- package/lib/esm/components/gallery-item/GalleryItem.js +37 -0
- package/lib/esm/components/gallery-item/GalleryItem.js.map +1 -0
- package/lib/esm/components/gallery-item/GalleryItem.styles.js +50 -0
- package/lib/esm/components/gallery-item/GalleryItem.styles.js.map +1 -0
- package/lib/esm/components/gallery-item/media-item/MediaItem.js +45 -0
- package/lib/esm/components/gallery-item/media-item/MediaItem.js.map +1 -0
- package/lib/esm/components/gallery-item/media-item/MediaItem.styles.js +73 -0
- package/lib/esm/components/gallery-item/media-item/MediaItem.styles.js.map +1 -0
- package/lib/esm/components/gallery-item/preview-item/PreviewItem.js +41 -0
- package/lib/esm/components/gallery-item/preview-item/PreviewItem.js.map +1 -0
- package/lib/esm/components/gallery-item/preview-item/PreviewItem.styles.js +45 -0
- package/lib/esm/components/gallery-item/preview-item/PreviewItem.styles.js.map +1 -0
- package/lib/esm/index.js +5 -0
- package/lib/esm/index.js.map +1 -0
- package/lib/esm/types/gallery.js +6 -0
- package/lib/esm/types/gallery.js.map +1 -0
- package/lib/esm/utils/file.js +47 -0
- package/lib/esm/utils/file.js.map +1 -0
- package/lib/types/components/Gallery.d.ts +47 -0
- package/lib/types/components/Gallery.styles.d.ts +10 -0
- package/lib/types/components/add-file/AddFile.d.ts +9 -0
- package/lib/types/components/add-file/AddFile.styles.d.ts +4 -0
- package/lib/types/components/gallery-item/GalleryItem.d.ts +30 -0
- package/lib/types/components/gallery-item/GalleryItem.styles.d.ts +5 -0
- package/lib/types/components/gallery-item/media-item/MediaItem.d.ts +22 -0
- package/lib/types/components/gallery-item/media-item/MediaItem.styles.d.ts +279 -0
- package/lib/types/components/gallery-item/preview-item/PreviewItem.d.ts +14 -0
- package/lib/types/components/gallery-item/preview-item/PreviewItem.styles.d.ts +273 -0
- package/lib/types/index.d.ts +2 -0
- package/lib/types/types/gallery.d.ts +4 -0
- package/lib/types/utils/file.d.ts +17 -0
- package/package.json +47 -28
- package/lib/components/gallery/Gallery.d.ts +0 -4
- package/lib/components/gallery/Gallery.js +0 -14
- package/lib/components/gallery/Gallery.js.map +0 -1
- package/lib/components/gallery/Gallery.styles.d.ts +0 -1
- package/lib/components/gallery/Gallery.styles.js +0 -11
- package/lib/components/gallery/Gallery.styles.js.map +0 -1
- package/lib/index.d.ts +0 -1
- package/lib/index.js +0 -14
- package/lib/index.js.map +0 -1
package/README.md
CHANGED
|
@@ -15,14 +15,14 @@
|
|
|
15
15
|
|
|
16
16
|
## Installation
|
|
17
17
|
|
|
18
|
-
First you need to install the
|
|
18
|
+
First you need to install the gallery part of the chayns-components.
|
|
19
19
|
|
|
20
20
|
```bash
|
|
21
21
|
# NPM
|
|
22
|
-
npm install @chayns-components/
|
|
22
|
+
npm install @chayns-components/gallery
|
|
23
23
|
|
|
24
24
|
# Yarn
|
|
25
|
-
yarn add @chayns-components/
|
|
25
|
+
yarn add @chayns-components/gallery
|
|
26
26
|
```
|
|
27
27
|
|
|
28
28
|
> **Information:** Since the components have now been implemented with the styled-components
|
|
@@ -31,15 +31,4 @@ yarn add @chayns-components/typewriter
|
|
|
31
31
|
|
|
32
32
|
## Usage
|
|
33
33
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
```typescript jsx
|
|
37
|
-
import { Typewriter } from '@chayns-components/typewriter';
|
|
38
|
-
|
|
39
|
-
<Typewriter>
|
|
40
|
-
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt
|
|
41
|
-
ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo
|
|
42
|
-
dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est. Lorem ipsum dolor
|
|
43
|
-
sit amet.
|
|
44
|
-
</Typewriter>;
|
|
45
|
-
```
|
|
34
|
+
For detailed usage visit the [storybook](https://components.chayns.site/storybook).
|
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _core = require("@chayns-components/core");
|
|
8
|
+
var _chaynsApi = require("chayns-api");
|
|
9
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
10
|
+
var _uuid = require("uuid");
|
|
11
|
+
var _gallery = require("../types/gallery");
|
|
12
|
+
var _file = require("../utils/file");
|
|
13
|
+
var _AddFile = _interopRequireDefault(require("./add-file/AddFile"));
|
|
14
|
+
var _GalleryItem = _interopRequireDefault(require("./gallery-item/GalleryItem"));
|
|
15
|
+
var _Gallery = require("./Gallery.styles");
|
|
16
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
17
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
18
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
19
|
+
const Gallery = ({
|
|
20
|
+
allowDragAndDrop = false,
|
|
21
|
+
doubleFileDialogMessage = 'Diese Datei ist bereits vorhanden',
|
|
22
|
+
isEditMode = false,
|
|
23
|
+
fileMinWidth = 100,
|
|
24
|
+
files,
|
|
25
|
+
maxFiles,
|
|
26
|
+
onAdd,
|
|
27
|
+
onFileCountChange,
|
|
28
|
+
onRemove,
|
|
29
|
+
viewMode = _gallery.GalleryViewMode.GRID
|
|
30
|
+
}) => {
|
|
31
|
+
const [fileItems, setFileItems] = (0, _react.useState)([]);
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* This function adds a previewUrl to fileItems
|
|
35
|
+
*/
|
|
36
|
+
const handlePreviewUrlCallback = (previewUrl, file) => {
|
|
37
|
+
setFileItems(prevState => prevState.map(prevFile => {
|
|
38
|
+
if (prevFile.id === file.id) {
|
|
39
|
+
return {
|
|
40
|
+
...prevFile,
|
|
41
|
+
previewUrl
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
return prevFile;
|
|
45
|
+
}));
|
|
46
|
+
};
|
|
47
|
+
const callDuplicateFileDialog = (0, _react.useCallback)(() => {
|
|
48
|
+
(0, _chaynsApi.createDialog)({
|
|
49
|
+
type: _chaynsApi.DialogType.ALERT,
|
|
50
|
+
text: doubleFileDialogMessage
|
|
51
|
+
});
|
|
52
|
+
}, [doubleFileDialogMessage]);
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* This function adds uploaded files to fileItems
|
|
56
|
+
*/
|
|
57
|
+
const handleUploadFileCallback = (0, _react.useCallback)((file, uploadedFile) => {
|
|
58
|
+
setFileItems(prevState => {
|
|
59
|
+
const updatedState = prevState.map(prevFile => {
|
|
60
|
+
var _prevFile$uploadedFil;
|
|
61
|
+
if (((_prevFile$uploadedFil = prevFile.uploadedFile) === null || _prevFile$uploadedFil === void 0 ? void 0 : _prevFile$uploadedFil.url) === uploadedFile.url) {
|
|
62
|
+
callDuplicateFileDialog();
|
|
63
|
+
return undefined;
|
|
64
|
+
}
|
|
65
|
+
if (prevFile.id === file.id) {
|
|
66
|
+
if (typeof onAdd === 'function') {
|
|
67
|
+
const prevElement = prevState.find(({
|
|
68
|
+
uploadedFile: newUploadedFile
|
|
69
|
+
}) => (newUploadedFile === null || newUploadedFile === void 0 ? void 0 : newUploadedFile.url) === (uploadedFile === null || uploadedFile === void 0 ? void 0 : uploadedFile.url));
|
|
70
|
+
if (!prevElement) {
|
|
71
|
+
onAdd({
|
|
72
|
+
file: uploadedFile,
|
|
73
|
+
id: file.id
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return {
|
|
78
|
+
...prevFile,
|
|
79
|
+
uploadedFile,
|
|
80
|
+
state: 'uploaded'
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
return prevFile;
|
|
84
|
+
});
|
|
85
|
+
const tmp = [];
|
|
86
|
+
updatedState.forEach(updatedFile => {
|
|
87
|
+
if (updatedFile !== undefined) {
|
|
88
|
+
tmp.push(updatedFile);
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
return tmp ?? [];
|
|
92
|
+
});
|
|
93
|
+
}, [callDuplicateFileDialog, onAdd]);
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Returns the current count to check if all files are uploaded
|
|
97
|
+
*/
|
|
98
|
+
(0, _react.useEffect)(() => {
|
|
99
|
+
if (typeof onFileCountChange === 'function') {
|
|
100
|
+
onFileCountChange(fileItems.length);
|
|
101
|
+
}
|
|
102
|
+
}, [fileItems.length, onFileCountChange]);
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Prepares files for previewUrl and upload
|
|
106
|
+
*/
|
|
107
|
+
(0, _react.useEffect)(() => {
|
|
108
|
+
const filesToGeneratePreview = fileItems.filter(file => file.file && !file.previewUrl && (file.state === 'none' || !file.state));
|
|
109
|
+
const filesToUpload = fileItems.filter(file => !file.uploadedFile && file.state !== 'uploading');
|
|
110
|
+
filesToGeneratePreview.forEach(file => {
|
|
111
|
+
if (!file.file) {
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
if (file.file.type.includes('video/')) {
|
|
115
|
+
(0, _file.generateVideoThumbnail)({
|
|
116
|
+
file: file.file,
|
|
117
|
+
callback: previewUrl => handlePreviewUrlCallback(previewUrl, file)
|
|
118
|
+
});
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
(0, _file.generatePreviewUrl)({
|
|
122
|
+
file: file.file,
|
|
123
|
+
callback: previewUrl => handlePreviewUrlCallback(previewUrl, file)
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
|
+
filesToUpload.forEach(file => {
|
|
127
|
+
setFileItems(prevState => prevState.map(prevFile => {
|
|
128
|
+
if (prevFile.id === file.id) {
|
|
129
|
+
return {
|
|
130
|
+
...prevFile,
|
|
131
|
+
state: 'uploading'
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
return prevFile;
|
|
135
|
+
}));
|
|
136
|
+
void (0, _core.uploadFile)({
|
|
137
|
+
fileToUpload: file,
|
|
138
|
+
callback: UploadedFile => handleUploadFileCallback(file, UploadedFile)
|
|
139
|
+
});
|
|
140
|
+
});
|
|
141
|
+
}, [fileItems, handleUploadFileCallback]);
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* This function formats and adds files to fileItems
|
|
145
|
+
*/
|
|
146
|
+
const handleAddFiles = (0, _react.useCallback)(filesToAdd => {
|
|
147
|
+
const newFileItems = [];
|
|
148
|
+
filesToAdd.forEach(file => {
|
|
149
|
+
if (file && !(0, _file.filterDuplicateFile)({
|
|
150
|
+
files: fileItems,
|
|
151
|
+
newFile: file
|
|
152
|
+
})) {
|
|
153
|
+
newFileItems.push({
|
|
154
|
+
id: (0, _uuid.v4)(),
|
|
155
|
+
file,
|
|
156
|
+
state: 'none'
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
});
|
|
160
|
+
let tmp = newFileItems;
|
|
161
|
+
if (maxFiles) {
|
|
162
|
+
tmp = newFileItems.slice(0, maxFiles - (fileItems.length + filesToAdd.length - 1));
|
|
163
|
+
}
|
|
164
|
+
setFileItems(prevState => [...prevState, ...tmp]);
|
|
165
|
+
}, [fileItems, maxFiles]);
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* This function adds external files to fileItems
|
|
169
|
+
*/
|
|
170
|
+
(0, _react.useEffect)(() => {
|
|
171
|
+
if (files) {
|
|
172
|
+
const newFileItems = [];
|
|
173
|
+
files.forEach(file => {
|
|
174
|
+
newFileItems.push({
|
|
175
|
+
id: file.id ?? (0, _uuid.v4)(),
|
|
176
|
+
uploadedFile: file.file,
|
|
177
|
+
file: undefined,
|
|
178
|
+
state: 'uploaded',
|
|
179
|
+
previewUrl: undefined
|
|
180
|
+
});
|
|
181
|
+
});
|
|
182
|
+
setFileItems(prevState => {
|
|
183
|
+
const updatedItems = prevState.map(prevItem => {
|
|
184
|
+
const newItem = newFileItems.find(item => item.uploadedFile && item.uploadedFile.url === (prevItem.uploadedFile && prevItem.uploadedFile.url));
|
|
185
|
+
return newItem || prevItem;
|
|
186
|
+
});
|
|
187
|
+
return updatedItems.concat(newFileItems.filter(newItem => !prevState.some(prevItem => prevItem.uploadedFile && newItem.uploadedFile && prevItem.uploadedFile.url === newItem.uploadedFile.url)));
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
}, [files]);
|
|
191
|
+
|
|
192
|
+
/**
|
|
193
|
+
* This function deletes a selected file from the file list
|
|
194
|
+
*/
|
|
195
|
+
const handleDeleteFile = (0, _react.useCallback)(id => {
|
|
196
|
+
let fileToDelete;
|
|
197
|
+
const filteredFiles = fileItems.filter(file => {
|
|
198
|
+
const fileId = file.id;
|
|
199
|
+
if (fileId === id && file.uploadedFile) {
|
|
200
|
+
fileToDelete = {
|
|
201
|
+
file: file.uploadedFile,
|
|
202
|
+
id
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
return fileId !== id;
|
|
206
|
+
});
|
|
207
|
+
setFileItems(filteredFiles);
|
|
208
|
+
if (!fileToDelete || typeof onRemove !== 'function') {
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
onRemove(fileToDelete);
|
|
212
|
+
}, [fileItems, onRemove]);
|
|
213
|
+
|
|
214
|
+
/**
|
|
215
|
+
* This function handles the drag and drop
|
|
216
|
+
*/
|
|
217
|
+
const handleDrop = (0, _react.useCallback)(e => {
|
|
218
|
+
if (!allowDragAndDrop) {
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
e.preventDefault();
|
|
222
|
+
const draggedFiles = Array.from(e.dataTransfer.files);
|
|
223
|
+
handleAddFiles(draggedFiles);
|
|
224
|
+
}, [allowDragAndDrop, handleAddFiles]);
|
|
225
|
+
|
|
226
|
+
/**
|
|
227
|
+
* Opens the files in a slideShow
|
|
228
|
+
*/
|
|
229
|
+
const openFiles = (0, _react.useCallback)(file => {
|
|
230
|
+
const startIndex = fileItems.findIndex(item => item.id === file.id);
|
|
231
|
+
const items = fileItems.map(item => {
|
|
232
|
+
var _item$uploadedFile;
|
|
233
|
+
return {
|
|
234
|
+
url: ((_item$uploadedFile = item.uploadedFile) === null || _item$uploadedFile === void 0 ? void 0 : _item$uploadedFile.url.replace('_0.mp4', '.mp4')) ?? '',
|
|
235
|
+
mediaType: item.uploadedFile && 'thumbnailUrl' in item.uploadedFile ? _chaynsApi.MediaType.VIDEO : _chaynsApi.MediaType.IMAGE
|
|
236
|
+
};
|
|
237
|
+
});
|
|
238
|
+
|
|
239
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
240
|
+
// @ts-ignore
|
|
241
|
+
void (0, _chaynsApi.openMedia)({
|
|
242
|
+
items,
|
|
243
|
+
startIndex
|
|
244
|
+
});
|
|
245
|
+
}, [fileItems]);
|
|
246
|
+
|
|
247
|
+
/**
|
|
248
|
+
* Returns the ratio of the single file
|
|
249
|
+
*/
|
|
250
|
+
const ratio = (0, _react.useMemo)(() => {
|
|
251
|
+
var _fileItems$;
|
|
252
|
+
switch (fileItems.length) {
|
|
253
|
+
case 0:
|
|
254
|
+
return 0;
|
|
255
|
+
case 1:
|
|
256
|
+
return Math.max(((_fileItems$ = fileItems[0]) === null || _fileItems$ === void 0 || (_fileItems$ = _fileItems$.uploadedFile) === null || _fileItems$ === void 0 ? void 0 : _fileItems$.ratio) ?? 1, 1);
|
|
257
|
+
case 2:
|
|
258
|
+
return 2;
|
|
259
|
+
case 3:
|
|
260
|
+
return 3;
|
|
261
|
+
default:
|
|
262
|
+
return 1;
|
|
263
|
+
}
|
|
264
|
+
}, [fileItems]);
|
|
265
|
+
const galleryContent = (0, _react.useMemo)(() => {
|
|
266
|
+
const combinedFilesLength = fileItems.length;
|
|
267
|
+
if (isEditMode) {
|
|
268
|
+
const items = fileItems.map(file => /*#__PURE__*/_react.default.createElement(_GalleryItem.default, {
|
|
269
|
+
key: file.id,
|
|
270
|
+
fileItem: file,
|
|
271
|
+
isEditMode: true,
|
|
272
|
+
onClick: openFiles,
|
|
273
|
+
handleDeleteFile: handleDeleteFile
|
|
274
|
+
}));
|
|
275
|
+
if (maxFiles && maxFiles <= combinedFilesLength) {
|
|
276
|
+
return items;
|
|
277
|
+
}
|
|
278
|
+
items.push(/*#__PURE__*/_react.default.createElement(_AddFile.default, {
|
|
279
|
+
key: "add_file",
|
|
280
|
+
onAdd: handleAddFiles
|
|
281
|
+
}));
|
|
282
|
+
return items;
|
|
283
|
+
}
|
|
284
|
+
const shortedFiles = fileItems.slice(0, 4);
|
|
285
|
+
return shortedFiles.map((file, index) => {
|
|
286
|
+
let imageRatio = 1;
|
|
287
|
+
if (viewMode === _gallery.GalleryViewMode.GRID) {
|
|
288
|
+
if (combinedFilesLength === 2 && (index === 0 || index === 1)) {
|
|
289
|
+
imageRatio = 0.5;
|
|
290
|
+
} else if (index === 0 && combinedFilesLength > 2 || combinedFilesLength === 3 && (index === 1 || index === 2)) {
|
|
291
|
+
imageRatio = 1.5;
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
return /*#__PURE__*/_react.default.createElement(_GalleryItem.default, {
|
|
295
|
+
key: file.id,
|
|
296
|
+
fileItem: file,
|
|
297
|
+
isEditMode: false,
|
|
298
|
+
handleDeleteFile: handleDeleteFile,
|
|
299
|
+
onClick: openFiles,
|
|
300
|
+
ratio: imageRatio,
|
|
301
|
+
remainingItemsLength: combinedFilesLength > 4 && index === 3 ? combinedFilesLength : undefined
|
|
302
|
+
});
|
|
303
|
+
});
|
|
304
|
+
}, [fileItems, isEditMode, maxFiles, handleAddFiles, openFiles, handleDeleteFile, viewMode]);
|
|
305
|
+
return (0, _react.useMemo)(() => /*#__PURE__*/_react.default.createElement(_Gallery.StyledGallery, null, isEditMode ? /*#__PURE__*/_react.default.createElement(_Gallery.StyledGalleryEditModeWrapper, {
|
|
306
|
+
$fileMinWidth: fileMinWidth,
|
|
307
|
+
onDragOver: e => e.preventDefault(),
|
|
308
|
+
onDrop: e => void handleDrop(e)
|
|
309
|
+
}, galleryContent) : /*#__PURE__*/_react.default.createElement(_Gallery.StyledGalleryItemWrapper, {
|
|
310
|
+
$ratio: ratio,
|
|
311
|
+
$uploadedFileLength: fileItems.length,
|
|
312
|
+
$viewMode: viewMode
|
|
313
|
+
}, galleryContent)), [isEditMode, fileMinWidth, galleryContent, ratio, fileItems.length, viewMode, handleDrop]);
|
|
314
|
+
};
|
|
315
|
+
Gallery.displayName = 'Gallery';
|
|
316
|
+
var _default = exports.default = Gallery;
|
|
317
|
+
//# sourceMappingURL=Gallery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Gallery.js","names":["_core","require","_chaynsApi","_react","_interopRequireWildcard","_uuid","_gallery","_file","_AddFile","_interopRequireDefault","_GalleryItem","_Gallery","e","__esModule","default","_getRequireWildcardCache","WeakMap","r","t","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","Gallery","allowDragAndDrop","doubleFileDialogMessage","isEditMode","fileMinWidth","files","maxFiles","onAdd","onFileCountChange","onRemove","viewMode","GalleryViewMode","GRID","fileItems","setFileItems","useState","handlePreviewUrlCallback","previewUrl","file","prevState","map","prevFile","id","callDuplicateFileDialog","useCallback","createDialog","type","DialogType","ALERT","text","handleUploadFileCallback","uploadedFile","updatedState","_prevFile$uploadedFil","url","undefined","prevElement","find","newUploadedFile","state","tmp","forEach","updatedFile","push","useEffect","length","filesToGeneratePreview","filter","filesToUpload","includes","generateVideoThumbnail","callback","generatePreviewUrl","uploadFile","fileToUpload","UploadedFile","handleAddFiles","filesToAdd","newFileItems","filterDuplicateFile","newFile","uuidv4","slice","updatedItems","prevItem","newItem","item","concat","some","handleDeleteFile","fileToDelete","filteredFiles","fileId","handleDrop","preventDefault","draggedFiles","Array","from","dataTransfer","openFiles","startIndex","findIndex","items","_item$uploadedFile","replace","mediaType","MediaType","VIDEO","IMAGE","openMedia","ratio","useMemo","_fileItems$","Math","max","galleryContent","combinedFilesLength","createElement","key","fileItem","onClick","shortedFiles","index","imageRatio","remainingItemsLength","StyledGallery","StyledGalleryEditModeWrapper","$fileMinWidth","onDragOver","onDrop","StyledGalleryItemWrapper","$ratio","$uploadedFileLength","$viewMode","displayName","_default","exports"],"sources":["../../../src/components/Gallery.tsx"],"sourcesContent":["import {\n Image,\n uploadFile,\n Video,\n type FileItem,\n type InternalFileItem,\n} from '@chayns-components/core';\nimport { createDialog, DialogType, MediaType, openMedia, OpenMediaItem } from 'chayns-api';\nimport React, { DragEvent, FC, useCallback, useEffect, useMemo, useState } from 'react';\nimport { v4 as uuidv4 } from 'uuid';\nimport { GalleryViewMode } from '../types/gallery';\nimport { filterDuplicateFile, generatePreviewUrl, generateVideoThumbnail } from '../utils/file';\nimport AddFile from './add-file/AddFile';\nimport GalleryItem from './gallery-item/GalleryItem';\nimport {\n StyledGallery,\n StyledGalleryEditModeWrapper,\n StyledGalleryItemWrapper,\n} from './Gallery.styles';\n\nexport type GalleryProps = {\n /**\n * Whether drag and drop is allowed or not\n */\n allowDragAndDrop?: boolean;\n /**\n * The message that should be displayed if a File is already given.\n */\n doubleFileDialogMessage?: string;\n /**\n * The minimum width of a file in the edit mode\n */\n fileMinWidth?: number;\n /**\n * Images and videos which should be displayed\n */\n files?: FileItem[];\n /**\n * Whether images and videos can be edited\n */\n isEditMode?: boolean;\n /**\n * The maximum amount of images and videos that can be uploaded.\n */\n maxFiles?: number;\n /**\n * Function to be executed when files are added and uploaded\n */\n onAdd?: (file: FileItem) => void;\n /**\n * Function to be executed when the count of files are changed. Needed to check if all files are uploaded\n */\n onFileCountChange?: (fileCount: number) => void;\n /**\n * Function to be executed when a file is removed\n */\n onRemove?: (file: FileItem) => void;\n /**\n * The mode how the images should be displayed.\n */\n viewMode?: GalleryViewMode;\n};\n\nconst Gallery: FC<GalleryProps> = ({\n allowDragAndDrop = false,\n doubleFileDialogMessage = 'Diese Datei ist bereits vorhanden',\n isEditMode = false,\n fileMinWidth = 100,\n files,\n maxFiles,\n onAdd,\n onFileCountChange,\n onRemove,\n viewMode = GalleryViewMode.GRID,\n}) => {\n const [fileItems, setFileItems] = useState<InternalFileItem[]>([]);\n\n /**\n * This function adds a previewUrl to fileItems\n */\n const handlePreviewUrlCallback = (previewUrl: string, file: InternalFileItem) => {\n setFileItems((prevState) =>\n prevState.map((prevFile) => {\n if (prevFile.id === file.id) {\n return { ...prevFile, previewUrl };\n }\n return prevFile;\n }),\n );\n };\n\n const callDuplicateFileDialog = useCallback(() => {\n createDialog({ type: DialogType.ALERT, text: doubleFileDialogMessage });\n }, [doubleFileDialogMessage]);\n\n /**\n * This function adds uploaded files to fileItems\n */\n const handleUploadFileCallback = useCallback(\n (file: InternalFileItem, uploadedFile: Video | Image) => {\n setFileItems((prevState) => {\n const updatedState = prevState.map((prevFile) => {\n if (prevFile.uploadedFile?.url === uploadedFile.url) {\n callDuplicateFileDialog();\n\n return undefined;\n }\n\n if (prevFile.id === file.id) {\n if (typeof onAdd === 'function') {\n const prevElement = prevState.find(\n ({ uploadedFile: newUploadedFile }) =>\n newUploadedFile?.url === uploadedFile?.url,\n );\n\n if (!prevElement) {\n onAdd({\n file: uploadedFile,\n id: file.id,\n });\n }\n }\n\n return {\n ...prevFile,\n uploadedFile,\n state: 'uploaded',\n };\n }\n\n return prevFile;\n });\n\n const tmp: InternalFileItem[] = [];\n\n updatedState.forEach((updatedFile) => {\n if (updatedFile !== undefined) {\n tmp.push(updatedFile as InternalFileItem);\n }\n });\n\n return tmp ?? [];\n });\n },\n [callDuplicateFileDialog, onAdd],\n );\n\n /**\n * Returns the current count to check if all files are uploaded\n */\n useEffect(() => {\n if (typeof onFileCountChange === 'function') {\n onFileCountChange(fileItems.length);\n }\n }, [fileItems.length, onFileCountChange]);\n\n /**\n * Prepares files for previewUrl and upload\n */\n useEffect(() => {\n const filesToGeneratePreview = fileItems.filter(\n (file) => file.file && !file.previewUrl && (file.state === 'none' || !file.state),\n );\n\n const filesToUpload = fileItems.filter(\n (file) => !file.uploadedFile && file.state !== 'uploading',\n );\n\n filesToGeneratePreview.forEach((file) => {\n if (!file.file) {\n return;\n }\n\n if (file.file.type.includes('video/')) {\n generateVideoThumbnail({\n file: file.file,\n callback: (previewUrl) => handlePreviewUrlCallback(previewUrl, file),\n });\n\n return;\n }\n\n generatePreviewUrl({\n file: file.file,\n callback: (previewUrl) => handlePreviewUrlCallback(previewUrl, file),\n });\n });\n\n filesToUpload.forEach((file) => {\n setFileItems((prevState) =>\n prevState.map((prevFile) => {\n if (prevFile.id === file.id) {\n return { ...prevFile, state: 'uploading' };\n }\n return prevFile;\n }),\n );\n\n void uploadFile({\n fileToUpload: file,\n callback: (UploadedFile) => handleUploadFileCallback(file, UploadedFile),\n });\n });\n }, [fileItems, handleUploadFileCallback]);\n\n /**\n * This function formats and adds files to fileItems\n */\n const handleAddFiles = useCallback(\n (filesToAdd: File[]) => {\n const newFileItems: InternalFileItem[] = [];\n\n filesToAdd.forEach((file) => {\n if (file && !filterDuplicateFile({ files: fileItems, newFile: file })) {\n newFileItems.push({\n id: uuidv4(),\n file,\n state: 'none',\n });\n }\n });\n\n let tmp = newFileItems;\n\n if (maxFiles) {\n tmp = newFileItems.slice(0, maxFiles - (fileItems.length + filesToAdd.length - 1));\n }\n\n setFileItems((prevState) => [...prevState, ...tmp]);\n },\n [fileItems, maxFiles],\n );\n\n /**\n * This function adds external files to fileItems\n */\n useEffect(() => {\n if (files) {\n const newFileItems: InternalFileItem[] = [];\n\n files.forEach((file) => {\n newFileItems.push({\n id: file.id ?? uuidv4(),\n uploadedFile: file.file,\n file: undefined,\n state: 'uploaded',\n previewUrl: undefined,\n });\n });\n\n setFileItems((prevState) => {\n const updatedItems = prevState.map((prevItem) => {\n const newItem = newFileItems.find(\n (item) =>\n item.uploadedFile &&\n item.uploadedFile.url ===\n (prevItem.uploadedFile && prevItem.uploadedFile.url),\n );\n return newItem || prevItem;\n });\n\n return updatedItems.concat(\n newFileItems.filter(\n (newItem) =>\n !prevState.some(\n (prevItem) =>\n prevItem.uploadedFile &&\n newItem.uploadedFile &&\n prevItem.uploadedFile.url === newItem.uploadedFile.url,\n ),\n ),\n );\n });\n }\n }, [files]);\n\n /**\n * This function deletes a selected file from the file list\n */\n const handleDeleteFile = useCallback(\n (id?: string) => {\n let fileToDelete: FileItem | undefined;\n\n const filteredFiles = fileItems.filter((file) => {\n const fileId = file.id;\n\n if (fileId === id && file.uploadedFile) {\n fileToDelete = { file: file.uploadedFile, id };\n }\n\n return fileId !== id;\n });\n\n setFileItems(filteredFiles);\n\n if (!fileToDelete || typeof onRemove !== 'function') {\n return;\n }\n\n onRemove(fileToDelete);\n },\n [fileItems, onRemove],\n );\n\n /**\n * This function handles the drag and drop\n */\n const handleDrop = useCallback(\n (e: DragEvent<HTMLDivElement>) => {\n if (!allowDragAndDrop) {\n return;\n }\n\n e.preventDefault();\n const draggedFiles = Array.from(e.dataTransfer.files);\n\n handleAddFiles(draggedFiles);\n },\n [allowDragAndDrop, handleAddFiles],\n );\n\n /**\n * Opens the files in a slideShow\n */\n const openFiles = useCallback(\n (file: InternalFileItem) => {\n const startIndex = fileItems.findIndex((item) => item.id === file.id);\n\n const items: OpenMediaItem[] = fileItems.map((item) => ({\n url: item.uploadedFile?.url.replace('_0.mp4', '.mp4') ?? '',\n mediaType:\n item.uploadedFile && 'thumbnailUrl' in item.uploadedFile\n ? MediaType.VIDEO\n : MediaType.IMAGE,\n }));\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n void openMedia({ items, startIndex });\n },\n [fileItems],\n );\n\n /**\n * Returns the ratio of the single file\n */\n const ratio = useMemo(() => {\n switch (fileItems.length) {\n case 0:\n return 0;\n case 1:\n return Math.max(fileItems[0]?.uploadedFile?.ratio ?? 1, 1);\n case 2:\n return 2;\n case 3:\n return 3;\n default:\n return 1;\n }\n }, [fileItems]);\n\n const galleryContent = useMemo(() => {\n const combinedFilesLength = fileItems.length;\n\n if (isEditMode) {\n const items = fileItems.map((file) => (\n <GalleryItem\n key={file.id}\n fileItem={file}\n isEditMode\n onClick={openFiles}\n handleDeleteFile={handleDeleteFile}\n />\n ));\n\n if (maxFiles && maxFiles <= combinedFilesLength) {\n return items;\n }\n\n items.push(<AddFile key=\"add_file\" onAdd={handleAddFiles} />);\n\n return items;\n }\n\n const shortedFiles = fileItems.slice(0, 4);\n\n return shortedFiles.map((file, index) => {\n let imageRatio = 1;\n\n if (viewMode === GalleryViewMode.GRID) {\n if (combinedFilesLength === 2 && (index === 0 || index === 1)) {\n imageRatio = 0.5;\n } else if (\n (index === 0 && combinedFilesLength > 2) ||\n (combinedFilesLength === 3 && (index === 1 || index === 2))\n ) {\n imageRatio = 1.5;\n }\n }\n\n return (\n <GalleryItem\n key={file.id}\n fileItem={file}\n isEditMode={false}\n handleDeleteFile={handleDeleteFile}\n onClick={openFiles}\n ratio={imageRatio}\n remainingItemsLength={\n combinedFilesLength > 4 && index === 3 ? combinedFilesLength : undefined\n }\n />\n );\n });\n }, [fileItems, isEditMode, maxFiles, handleAddFiles, openFiles, handleDeleteFile, viewMode]);\n\n return useMemo(\n () => (\n <StyledGallery>\n {isEditMode ? (\n <StyledGalleryEditModeWrapper\n $fileMinWidth={fileMinWidth}\n onDragOver={(e) => e.preventDefault()}\n onDrop={(e) => void handleDrop(e)}\n >\n {galleryContent}\n </StyledGalleryEditModeWrapper>\n ) : (\n <StyledGalleryItemWrapper\n $ratio={ratio}\n $uploadedFileLength={fileItems.length}\n $viewMode={viewMode}\n >\n {galleryContent}\n </StyledGalleryItemWrapper>\n )}\n </StyledGallery>\n ),\n [isEditMode, fileMinWidth, galleryContent, ratio, fileItems.length, viewMode, handleDrop],\n );\n};\n\nGallery.displayName = 'Gallery';\n\nexport default Gallery;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.StyledGalleryItemWrapper = exports.StyledGalleryEditModeWrapper = exports.StyledGallery = void 0;
|
|
7
|
+
var _styledComponents = _interopRequireWildcard(require("styled-components"));
|
|
8
|
+
var _gallery = require("../types/gallery");
|
|
9
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
10
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
11
|
+
const StyledGallery = exports.StyledGallery = _styledComponents.default.div``;
|
|
12
|
+
const StyledGalleryItemWrapper = exports.StyledGalleryItemWrapper = _styledComponents.default.div`
|
|
13
|
+
display: grid;
|
|
14
|
+
gap: 5px;
|
|
15
|
+
|
|
16
|
+
${({
|
|
17
|
+
$viewMode,
|
|
18
|
+
$uploadedFileLength
|
|
19
|
+
}) => {
|
|
20
|
+
if ($viewMode === _gallery.GalleryViewMode.GRID) {
|
|
21
|
+
return (0, _styledComponents.css)`
|
|
22
|
+
> div:first-child {
|
|
23
|
+
grid-column: 1 / -1;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
${() => {
|
|
27
|
+
switch ($uploadedFileLength) {
|
|
28
|
+
case 1:
|
|
29
|
+
return (0, _styledComponents.css)`
|
|
30
|
+
grid-template-columns: 1fr;
|
|
31
|
+
`;
|
|
32
|
+
case 2:
|
|
33
|
+
return (0, _styledComponents.css)`
|
|
34
|
+
grid-template-columns: repeat(2, 1fr);
|
|
35
|
+
> div:first-child {
|
|
36
|
+
grid-column: span 1;
|
|
37
|
+
}
|
|
38
|
+
`;
|
|
39
|
+
case 3:
|
|
40
|
+
return (0, _styledComponents.css)`
|
|
41
|
+
grid-template-columns: repeat(2, 1fr);
|
|
42
|
+
> div:first-child {
|
|
43
|
+
grid-column: span 2;
|
|
44
|
+
}
|
|
45
|
+
`;
|
|
46
|
+
default:
|
|
47
|
+
return (0, _styledComponents.css)`
|
|
48
|
+
grid-template-columns: repeat(3, minmax(0, 1fr));
|
|
49
|
+
> div:not(:first-child) {
|
|
50
|
+
grid-column: span 1;
|
|
51
|
+
}
|
|
52
|
+
`;
|
|
53
|
+
}
|
|
54
|
+
}}
|
|
55
|
+
`;
|
|
56
|
+
}
|
|
57
|
+
switch ($uploadedFileLength) {
|
|
58
|
+
case 1:
|
|
59
|
+
return (0, _styledComponents.css)`
|
|
60
|
+
grid-template-columns: 1fr;
|
|
61
|
+
`;
|
|
62
|
+
case 2:
|
|
63
|
+
return (0, _styledComponents.css)`
|
|
64
|
+
grid-template-columns: repeat(2, 1fr);
|
|
65
|
+
`;
|
|
66
|
+
case 3:
|
|
67
|
+
return (0, _styledComponents.css)`
|
|
68
|
+
grid-template-columns: repeat(3, 1fr);
|
|
69
|
+
`;
|
|
70
|
+
default:
|
|
71
|
+
return (0, _styledComponents.css)`
|
|
72
|
+
grid-template-columns: repeat(2, 1fr);
|
|
73
|
+
> div:nth-child(-n + 2) {
|
|
74
|
+
grid-row: 1;
|
|
75
|
+
}
|
|
76
|
+
`;
|
|
77
|
+
}
|
|
78
|
+
}}
|
|
79
|
+
|
|
80
|
+
aspect-ratio: ${({
|
|
81
|
+
$ratio
|
|
82
|
+
}) => $ratio};
|
|
83
|
+
`;
|
|
84
|
+
const StyledGalleryEditModeWrapper = exports.StyledGalleryEditModeWrapper = _styledComponents.default.div`
|
|
85
|
+
display: grid;
|
|
86
|
+
grid-template-columns: ${({
|
|
87
|
+
$fileMinWidth
|
|
88
|
+
}) => `repeat(auto-fill, minmax(${$fileMinWidth}px, 1fr))`};
|
|
89
|
+
grid-auto-rows: 1fr;
|
|
90
|
+
gap: 6px;
|
|
91
|
+
`;
|
|
92
|
+
//# sourceMappingURL=Gallery.styles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Gallery.styles.js","names":["_styledComponents","_interopRequireWildcard","require","_gallery","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","StyledGallery","exports","styled","div","StyledGalleryItemWrapper","$viewMode","$uploadedFileLength","GalleryViewMode","GRID","css","$ratio","StyledGalleryEditModeWrapper","$fileMinWidth"],"sources":["../../../src/components/Gallery.styles.ts"],"sourcesContent":["import styled, { css } from 'styled-components';\nimport { GalleryViewMode } from '../types/gallery';\n\nexport const StyledGallery = styled.div``;\n\nexport const StyledGalleryItemWrapper = styled.div<{\n $uploadedFileLength: number;\n $ratio: number;\n $viewMode: GalleryViewMode;\n}>`\n display: grid;\n gap: 5px;\n\n ${({ $viewMode, $uploadedFileLength }) => {\n if ($viewMode === GalleryViewMode.GRID) {\n return css`\n > div:first-child {\n grid-column: 1 / -1;\n }\n\n ${() => {\n switch ($uploadedFileLength) {\n case 1:\n return css`\n grid-template-columns: 1fr;\n `;\n case 2:\n return css`\n grid-template-columns: repeat(2, 1fr);\n > div:first-child {\n grid-column: span 1;\n }\n `;\n case 3:\n return css`\n grid-template-columns: repeat(2, 1fr);\n > div:first-child {\n grid-column: span 2;\n }\n `;\n default:\n return css`\n grid-template-columns: repeat(3, minmax(0, 1fr));\n > div:not(:first-child) {\n grid-column: span 1;\n }\n `;\n }\n }}\n `;\n }\n\n switch ($uploadedFileLength) {\n case 1:\n return css`\n grid-template-columns: 1fr;\n `;\n case 2:\n return css`\n grid-template-columns: repeat(2, 1fr);\n `;\n case 3:\n return css`\n grid-template-columns: repeat(3, 1fr);\n `;\n default:\n return css`\n grid-template-columns: repeat(2, 1fr);\n > div:nth-child(-n + 2) {\n grid-row: 1;\n }\n `;\n }\n }}\n\n aspect-ratio: ${({ $ratio }) => $ratio};\n`;\n\nexport const StyledGalleryEditModeWrapper = styled.div<{\n $fileMinWidth: number;\n}>`\n display: grid;\n grid-template-columns: ${({ $fileMinWidth }) =>\n `repeat(auto-fill, minmax(${$fileMinWidth}px, 1fr))`};\n grid-auto-rows: 1fr;\n gap: 6px;\n`;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _core = require("@chayns-components/core");
|
|
8
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
9
|
+
var _AddFile = require("./AddFile.styles");
|
|
10
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
11
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
12
|
+
const AddFile = ({
|
|
13
|
+
onAdd
|
|
14
|
+
}) => {
|
|
15
|
+
const openSelectDialog = (0, _react.useCallback)(async () => {
|
|
16
|
+
const files = await (0, _core.selectFiles)({
|
|
17
|
+
multiple: true,
|
|
18
|
+
type: 'image/*, video/*'
|
|
19
|
+
});
|
|
20
|
+
onAdd(files);
|
|
21
|
+
}, [onAdd]);
|
|
22
|
+
return /*#__PURE__*/_react.default.createElement(_AddFile.StyledAddFile, {
|
|
23
|
+
key: "addButton"
|
|
24
|
+
}, /*#__PURE__*/_react.default.createElement(_AddFile.StyledAddFIleIconWrapper, {
|
|
25
|
+
onClick: () => void openSelectDialog()
|
|
26
|
+
}, /*#__PURE__*/_react.default.createElement(_core.Icon, {
|
|
27
|
+
size: 40,
|
|
28
|
+
icons: ['fa fa-plus']
|
|
29
|
+
})));
|
|
30
|
+
};
|
|
31
|
+
AddFile.displayName = 'AddFile';
|
|
32
|
+
var _default = exports.default = AddFile;
|
|
33
|
+
//# sourceMappingURL=AddFile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AddFile.js","names":["_core","require","_react","_interopRequireWildcard","_AddFile","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","AddFile","onAdd","openSelectDialog","useCallback","files","selectFiles","multiple","type","createElement","StyledAddFile","key","StyledAddFIleIconWrapper","onClick","Icon","size","icons","displayName","_default","exports"],"sources":["../../../../src/components/add-file/AddFile.tsx"],"sourcesContent":["import { Icon, selectFiles } from '@chayns-components/core';\nimport React, { FC, useCallback } from 'react';\nimport { StyledAddFile, StyledAddFIleIconWrapper } from './AddFile.styles';\n\nexport type AddFileProps = {\n /**\n * Function to be executed when files are added\n */\n onAdd: (files: File[]) => void;\n};\n\nconst AddFile: FC<AddFileProps> = ({ onAdd }) => {\n const openSelectDialog = useCallback(async () => {\n const files = await selectFiles({\n multiple: true,\n type: 'image/*, video/*',\n });\n\n onAdd(files);\n }, [onAdd]);\n\n return (\n <StyledAddFile key=\"addButton\">\n <StyledAddFIleIconWrapper onClick={() => void openSelectDialog()}>\n <Icon size={40} icons={['fa fa-plus']} />\n </StyledAddFIleIconWrapper>\n </StyledAddFile>\n );\n};\n\nAddFile.displayName = 'AddFile';\n\nexport default AddFile;\n"],"mappings":";;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAC,uBAAA,CAAAF,OAAA;AACA,IAAAG,QAAA,GAAAH,OAAA;AAA2E,SAAAI,yBAAAC,CAAA,6BAAAC,OAAA,mBAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,CAAAC,CAAA,WAAAA,CAAA,GAAAG,CAAA,GAAAD,CAAA,KAAAF,CAAA;AAAA,SAAAH,wBAAAG,CAAA,EAAAE,CAAA,SAAAA,CAAA,IAAAF,CAAA,IAAAA,CAAA,CAAAI,UAAA,SAAAJ,CAAA,eAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,WAAAK,OAAA,EAAAL,CAAA,QAAAG,CAAA,GAAAJ,wBAAA,CAAAG,CAAA,OAAAC,CAAA,IAAAA,CAAA,CAAAG,GAAA,CAAAN,CAAA,UAAAG,CAAA,CAAAI,GAAA,CAAAP,CAAA,OAAAQ,CAAA,KAAAC,SAAA,UAAAC,CAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,CAAA,IAAAd,CAAA,oBAAAc,CAAA,OAAAC,cAAA,CAAAC,IAAA,CAAAhB,CAAA,EAAAc,CAAA,SAAAG,CAAA,GAAAP,CAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAb,CAAA,EAAAc,CAAA,UAAAG,CAAA,KAAAA,CAAA,CAAAV,GAAA,IAAAU,CAAA,CAAAC,GAAA,IAAAP,MAAA,CAAAC,cAAA,CAAAJ,CAAA,EAAAM,CAAA,EAAAG,CAAA,IAAAT,CAAA,CAAAM,CAAA,IAAAd,CAAA,CAAAc,CAAA,YAAAN,CAAA,CAAAH,OAAA,GAAAL,CAAA,EAAAG,CAAA,IAAAA,CAAA,CAAAe,GAAA,CAAAlB,CAAA,EAAAQ,CAAA,GAAAA,CAAA;AAS3E,MAAMW,OAAyB,GAAGA,CAAC;EAAEC;AAAM,CAAC,KAAK;EAC7C,MAAMC,gBAAgB,GAAG,IAAAC,kBAAW,EAAC,YAAY;IAC7C,MAAMC,KAAK,GAAG,MAAM,IAAAC,iBAAW,EAAC;MAC5BC,QAAQ,EAAE,IAAI;MACdC,IAAI,EAAE;IACV,CAAC,CAAC;IAEFN,KAAK,CAACG,KAAK,CAAC;EAChB,CAAC,EAAE,CAACH,KAAK,CAAC,CAAC;EAEX,oBACIxB,MAAA,CAAAS,OAAA,CAAAsB,aAAA,CAAC7B,QAAA,CAAA8B,aAAa;IAACC,GAAG,EAAC;EAAW,gBAC1BjC,MAAA,CAAAS,OAAA,CAAAsB,aAAA,CAAC7B,QAAA,CAAAgC,wBAAwB;IAACC,OAAO,EAAEA,CAAA,KAAM,KAAKV,gBAAgB,CAAC;EAAE,gBAC7DzB,MAAA,CAAAS,OAAA,CAAAsB,aAAA,CAACjC,KAAA,CAAAsC,IAAI;IAACC,IAAI,EAAE,EAAG;IAACC,KAAK,EAAE,CAAC,YAAY;EAAE,CAAE,CAClB,CACf,CAAC;AAExB,CAAC;AAEDf,OAAO,CAACgB,WAAW,GAAG,SAAS;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAhC,OAAA,GAEjBc,OAAO","ignoreList":[]}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.StyledAddFile = exports.StyledAddFIleIconWrapper = void 0;
|
|
7
|
+
var _styledComponents = _interopRequireDefault(require("styled-components"));
|
|
8
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
9
|
+
const StyledAddFile = exports.StyledAddFile = _styledComponents.default.div`
|
|
10
|
+
position: relative;
|
|
11
|
+
`;
|
|
12
|
+
const StyledAddFIleIconWrapper = exports.StyledAddFIleIconWrapper = _styledComponents.default.button`
|
|
13
|
+
background-color: ${({
|
|
14
|
+
theme
|
|
15
|
+
}) => theme['101']};
|
|
16
|
+
box-shadow: 0 0 0 1px
|
|
17
|
+
rgba(${({
|
|
18
|
+
theme
|
|
19
|
+
}) => theme['009-rgb']}, 0.08) inset;
|
|
20
|
+
width: 100%;
|
|
21
|
+
aspect-ratio: 1 / 1;
|
|
22
|
+
`;
|
|
23
|
+
//# sourceMappingURL=AddFile.styles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AddFile.styles.js","names":["_styledComponents","_interopRequireDefault","require","e","__esModule","default","StyledAddFile","exports","styled","div","StyledAddFIleIconWrapper","button","theme"],"sources":["../../../../src/components/add-file/AddFile.styles.ts"],"sourcesContent":["import type { WithTheme } from '@chayns-components/core';\nimport styled from 'styled-components';\n\nexport const StyledAddFile = styled.div`\n position: relative;\n`;\n\ntype StyledAddFIleIconWrapperProps = WithTheme<unknown>;\n\nexport const StyledAddFIleIconWrapper = styled.button<StyledAddFIleIconWrapperProps>`\n background-color: ${({ theme }: StyledAddFIleIconWrapperProps) => theme['101']};\n box-shadow: 0 0 0 1px\n rgba(${({ theme }: StyledAddFIleIconWrapperProps) => theme['009-rgb']}, 0.08) inset;\n width: 100%;\n aspect-ratio: 1 / 1;\n`;\n"],"mappings":";;;;;;AACA,IAAAA,iBAAA,GAAAC,sBAAA,CAAAC,OAAA;AAAuC,SAAAD,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAEhC,MAAMG,aAAa,GAAAC,OAAA,CAAAD,aAAA,GAAGE,yBAAM,CAACC,GAAG;AACvC;AACA,CAAC;AAIM,MAAMC,wBAAwB,GAAAH,OAAA,CAAAG,wBAAA,GAAGF,yBAAM,CAACG,MAAqC;AACpF,wBAAwB,CAAC;EAAEC;AAAqC,CAAC,KAAKA,KAAK,CAAC,KAAK,CAAC;AAClF;AACA,eAAe,CAAC;EAAEA;AAAqC,CAAC,KAAKA,KAAK,CAAC,SAAS,CAAC;AAC7E;AACA;AACA,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _core = require("@chayns-components/core");
|
|
8
|
+
var _framerMotion = require("framer-motion");
|
|
9
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
10
|
+
var _GalleryItem = require("./GalleryItem.styles");
|
|
11
|
+
var _MediaItem = _interopRequireDefault(require("./media-item/MediaItem"));
|
|
12
|
+
var _PreviewItem = _interopRequireDefault(require("./preview-item/PreviewItem"));
|
|
13
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
14
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
15
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
16
|
+
const GalleryItem = ({
|
|
17
|
+
fileItem,
|
|
18
|
+
handleDeleteFile,
|
|
19
|
+
isEditMode,
|
|
20
|
+
ratio = 1,
|
|
21
|
+
remainingItemsLength,
|
|
22
|
+
onClick
|
|
23
|
+
}) => (0, _react.useMemo)(() => /*#__PURE__*/_react.default.createElement(_GalleryItem.StyledGalleryItem, null, isEditMode && /*#__PURE__*/_react.default.createElement(_GalleryItem.StyledGalleryItemDeleteButton, {
|
|
24
|
+
onClick: () => handleDeleteFile(fileItem.id)
|
|
25
|
+
}, /*#__PURE__*/_react.default.createElement(_core.Icon, {
|
|
26
|
+
size: 20,
|
|
27
|
+
icons: ['ts-wrong']
|
|
28
|
+
})), !fileItem.state || fileItem.state === 'none' || !fileItem.previewUrl && !fileItem.uploadedFile ? null : /*#__PURE__*/_react.default.createElement(_framerMotion.AnimatePresence, {
|
|
29
|
+
initial: false
|
|
30
|
+
}, fileItem.state === 'uploading' ? /*#__PURE__*/_react.default.createElement(_PreviewItem.default, {
|
|
31
|
+
ratio: ratio,
|
|
32
|
+
key: `uploading_${fileItem.id ?? ''}`,
|
|
33
|
+
fileItem: fileItem
|
|
34
|
+
}) : /*#__PURE__*/_react.default.createElement(_MediaItem.default, {
|
|
35
|
+
key: `uploaded_${fileItem.id ?? ''}`,
|
|
36
|
+
fileItem: fileItem,
|
|
37
|
+
isEditMode: isEditMode,
|
|
38
|
+
ratio: ratio,
|
|
39
|
+
openSelectedFile: onClick
|
|
40
|
+
})), remainingItemsLength && /*#__PURE__*/_react.default.createElement(_GalleryItem.StyledGalleryItemMoreItemsIndicator, null, /*#__PURE__*/_react.default.createElement("p", null, `+ ${remainingItemsLength - 3}`))), [fileItem, handleDeleteFile, isEditMode, onClick, ratio, remainingItemsLength]);
|
|
41
|
+
GalleryItem.displayName = 'GalleryItem';
|
|
42
|
+
var _default = exports.default = GalleryItem;
|
|
43
|
+
//# sourceMappingURL=GalleryItem.js.map
|