@mirrormedia/lilith-draft-editor 3.0.6 → 3.0.8
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/lib/draft-js/buttons/annotation.js +3 -1
- package/lib/draft-js/buttons/embedded-code.js +3 -1
- package/lib/draft-js/buttons/image.js +18 -20
- package/lib/draft-js/buttons/info-box.js +3 -1
- package/lib/website/mirrordaily/selector/image-selector.js +5 -26
- package/lib/website/mirrordaily/selector/video-selector.js +7 -30
- package/lib/website/mirrormedia/draft-editor.js +312 -338
- package/package.json +1 -2
- package/lib/website/mirrordaily/selector/image-uploader.js +0 -247
- package/lib/website/mirrordaily/selector/video-uploader.js +0 -185
- package/lib/website/mirrordaily/utils/file-convert.js +0 -86
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mirrormedia/lilith-draft-editor",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.8",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -22,7 +22,6 @@
|
|
|
22
22
|
"dependencies": {
|
|
23
23
|
"@mirrormedia/lilith-draft-renderer": "^1.4.3",
|
|
24
24
|
"draft-js": "^0.11.7",
|
|
25
|
-
"js-sha256": "^0.11.0",
|
|
26
25
|
"usehooks-ts": "^2"
|
|
27
26
|
},
|
|
28
27
|
"peerDependencies": {
|
|
@@ -1,247 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.ImageUploader = ImageUploader;
|
|
7
|
-
|
|
8
|
-
var _apollo = require("@keystone-6/core/admin-ui/apollo");
|
|
9
|
-
|
|
10
|
-
var _modals = require("@keystone-ui/modals");
|
|
11
|
-
|
|
12
|
-
var _react = _interopRequireWildcard(require("react"));
|
|
13
|
-
|
|
14
|
-
var _styledComponents = _interopRequireDefault(require("styled-components"));
|
|
15
|
-
|
|
16
|
-
var _fileConvert = require("../utils/file-convert");
|
|
17
|
-
|
|
18
|
-
var _button = require("@keystone-ui/button");
|
|
19
|
-
|
|
20
|
-
var _fields = require("@keystone-ui/fields");
|
|
21
|
-
|
|
22
|
-
var _lodash = _interopRequireDefault(require("lodash"));
|
|
23
|
-
|
|
24
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
25
|
-
|
|
26
|
-
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
27
|
-
|
|
28
|
-
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
29
|
-
|
|
30
|
-
const imagesMutation = (0, _apollo.gql)`
|
|
31
|
-
mutation AddPhotos($data: [PhotoCreateInput!]!) {
|
|
32
|
-
photos: createPhotos(data: $data) {
|
|
33
|
-
id
|
|
34
|
-
name
|
|
35
|
-
imageFile {
|
|
36
|
-
url
|
|
37
|
-
width
|
|
38
|
-
height
|
|
39
|
-
}
|
|
40
|
-
resized {
|
|
41
|
-
original
|
|
42
|
-
w480
|
|
43
|
-
w800
|
|
44
|
-
w1200
|
|
45
|
-
w1600
|
|
46
|
-
w2400
|
|
47
|
-
}
|
|
48
|
-
resizedWebp {
|
|
49
|
-
original
|
|
50
|
-
w480
|
|
51
|
-
w800
|
|
52
|
-
w1200
|
|
53
|
-
w1600
|
|
54
|
-
w2400
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
`;
|
|
59
|
-
const CustomButton = (0, _styledComponents.default)(_button.Button)`
|
|
60
|
-
margin-top: 10px;
|
|
61
|
-
`;
|
|
62
|
-
const HiddenInput = _styledComponents.default.input`
|
|
63
|
-
display: none;
|
|
64
|
-
`;
|
|
65
|
-
const ImagesWrapper = _styledComponents.default.div`
|
|
66
|
-
overflow: auto;
|
|
67
|
-
margin-top: 10px;
|
|
68
|
-
`;
|
|
69
|
-
const ImageFilesWrapper = _styledComponents.default.div`
|
|
70
|
-
display: flex;
|
|
71
|
-
flex-wrap: wrap;
|
|
72
|
-
overflow: auto;
|
|
73
|
-
`;
|
|
74
|
-
const ImageFileWrapper = _styledComponents.default.div`
|
|
75
|
-
width: 33%;
|
|
76
|
-
cursor: pointer;
|
|
77
|
-
padding: 0 10px 10px;
|
|
78
|
-
`;
|
|
79
|
-
const Image = _styledComponents.default.img`
|
|
80
|
-
display: block;
|
|
81
|
-
width: 100%;
|
|
82
|
-
aspect-ratio: 2;
|
|
83
|
-
object-fit: contain;
|
|
84
|
-
`;
|
|
85
|
-
const ImageName = _styledComponents.default.p`
|
|
86
|
-
text-align: center;
|
|
87
|
-
`;
|
|
88
|
-
const CustomCheckbox = (0, _styledComponents.default)(_fields.Checkbox)`
|
|
89
|
-
display: flex;
|
|
90
|
-
align-items: center;
|
|
91
|
-
cursor: pointer;
|
|
92
|
-
`;
|
|
93
|
-
const Label = _styledComponents.default.label`
|
|
94
|
-
display: block;
|
|
95
|
-
margin: 10px 0;
|
|
96
|
-
font-weight: 600;
|
|
97
|
-
`;
|
|
98
|
-
|
|
99
|
-
const AddImages = ({
|
|
100
|
-
onAddImages
|
|
101
|
-
}) => {
|
|
102
|
-
const inputRef = (0, _react.useRef)(null);
|
|
103
|
-
|
|
104
|
-
const inputChangeHandler = async event => {
|
|
105
|
-
const files = event.target.files;
|
|
106
|
-
event.target.files = null;
|
|
107
|
-
if (!files) return;
|
|
108
|
-
const imagesFiles = await (0, _fileConvert.convertFilesToImageData)(files);
|
|
109
|
-
console.log('imagesFiles', imagesFiles);
|
|
110
|
-
onAddImages(imagesFiles);
|
|
111
|
-
};
|
|
112
|
-
|
|
113
|
-
const onUploadButton = () => {
|
|
114
|
-
var _inputRef$current;
|
|
115
|
-
|
|
116
|
-
(_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 ? void 0 : _inputRef$current.click();
|
|
117
|
-
};
|
|
118
|
-
|
|
119
|
-
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(CustomButton, {
|
|
120
|
-
onClick: onUploadButton
|
|
121
|
-
}, "\u65B0\u589E\u5716\u7247"), /*#__PURE__*/_react.default.createElement(HiddenInput, {
|
|
122
|
-
type: "file",
|
|
123
|
-
multiple: true,
|
|
124
|
-
accept: "image/*",
|
|
125
|
-
ref: inputRef,
|
|
126
|
-
onChange: inputChangeHandler
|
|
127
|
-
}));
|
|
128
|
-
};
|
|
129
|
-
|
|
130
|
-
const ImageFiles = ({
|
|
131
|
-
files,
|
|
132
|
-
onChange
|
|
133
|
-
}) => {
|
|
134
|
-
return /*#__PURE__*/_react.default.createElement(ImageFilesWrapper, null, files.map(file => /*#__PURE__*/_react.default.createElement(ImageFile, {
|
|
135
|
-
key: file.uid,
|
|
136
|
-
file: file,
|
|
137
|
-
onChange: onChange
|
|
138
|
-
})));
|
|
139
|
-
};
|
|
140
|
-
|
|
141
|
-
const ImageFile = ({
|
|
142
|
-
file,
|
|
143
|
-
onChange
|
|
144
|
-
}) => {
|
|
145
|
-
return /*#__PURE__*/_react.default.createElement(ImageFileWrapper, null, /*#__PURE__*/_react.default.createElement(Image, {
|
|
146
|
-
src: file.blobURL
|
|
147
|
-
}), /*#__PURE__*/_react.default.createElement(Label, {
|
|
148
|
-
htmlFor: "name"
|
|
149
|
-
}, "Image Name"), /*#__PURE__*/_react.default.createElement(_fields.TextInput, {
|
|
150
|
-
id: "name",
|
|
151
|
-
type: "text",
|
|
152
|
-
defaultValue: file.name,
|
|
153
|
-
onChange: _lodash.default.debounce(e => {
|
|
154
|
-
onChange({ ...file,
|
|
155
|
-
name: e.target.value
|
|
156
|
-
});
|
|
157
|
-
})
|
|
158
|
-
}), /*#__PURE__*/_react.default.createElement(ImageName, null, file.name), /*#__PURE__*/_react.default.createElement(CustomCheckbox, {
|
|
159
|
-
defaultChecked: file.shouldSetWatermark,
|
|
160
|
-
onChange: _lodash.default.debounce(e => {
|
|
161
|
-
onChange({ ...file,
|
|
162
|
-
shouldSetWatermark: e.target.checked
|
|
163
|
-
});
|
|
164
|
-
})
|
|
165
|
-
}, "\u6D6E\u6C34\u5370"));
|
|
166
|
-
};
|
|
167
|
-
|
|
168
|
-
function ImageUploader({
|
|
169
|
-
onChange
|
|
170
|
-
}) {
|
|
171
|
-
const [files, setFiles] = (0, _react.useState)([]);
|
|
172
|
-
const [addPhotos, {
|
|
173
|
-
data: uploadData,
|
|
174
|
-
loading: uploadLoading,
|
|
175
|
-
error: uploadError
|
|
176
|
-
}] = (0, _apollo.useMutation)(imagesMutation);
|
|
177
|
-
|
|
178
|
-
const onAddImages = rawFiles => {
|
|
179
|
-
const existedImageUids = new Set(files.map(file => file.uid));
|
|
180
|
-
const newFiles = rawFiles.filter(file => !existedImageUids.has(file.uid)).map(rawFile => ({ ...rawFile,
|
|
181
|
-
shouldSetWatermark: true
|
|
182
|
-
}));
|
|
183
|
-
setFiles(prev => prev.concat(newFiles));
|
|
184
|
-
};
|
|
185
|
-
|
|
186
|
-
const onConfirm = async () => {
|
|
187
|
-
if (!files.length) return onChange([]);
|
|
188
|
-
const tasks = files.map(async data => ({ ...data,
|
|
189
|
-
file: await (0, _fileConvert.convertStringToFile)(data.blobURL, data.name, data.type)
|
|
190
|
-
}));
|
|
191
|
-
const data = (await Promise.allSettled(tasks)).filter(function (settledResult) {
|
|
192
|
-
return settledResult.status === 'fulfilled';
|
|
193
|
-
}).map(result => result.value);
|
|
194
|
-
addPhotos({
|
|
195
|
-
variables: {
|
|
196
|
-
data: data.map(d => ({
|
|
197
|
-
name: d.name,
|
|
198
|
-
imageFile: {
|
|
199
|
-
upload: d.file
|
|
200
|
-
},
|
|
201
|
-
waterMark: d.shouldSetWatermark
|
|
202
|
-
}))
|
|
203
|
-
}
|
|
204
|
-
});
|
|
205
|
-
};
|
|
206
|
-
|
|
207
|
-
const onImageFileChang = file => {
|
|
208
|
-
const newFiles = Array.from(files);
|
|
209
|
-
const foundIndex = newFiles.findIndex(ele => ele.uid === file.uid);
|
|
210
|
-
|
|
211
|
-
if (foundIndex !== -1) {
|
|
212
|
-
newFiles[foundIndex] = file;
|
|
213
|
-
setFiles(newFiles);
|
|
214
|
-
}
|
|
215
|
-
};
|
|
216
|
-
|
|
217
|
-
(0, _react.useEffect)(() => {
|
|
218
|
-
var _uploadData$photos;
|
|
219
|
-
|
|
220
|
-
if (uploadData !== null && uploadData !== void 0 && (_uploadData$photos = uploadData.photos) !== null && _uploadData$photos !== void 0 && _uploadData$photos.length) {
|
|
221
|
-
onChange(uploadData.photos);
|
|
222
|
-
}
|
|
223
|
-
}, [uploadData, onChange]);
|
|
224
|
-
return /*#__PURE__*/_react.default.createElement(_modals.DrawerController, {
|
|
225
|
-
isOpen: true
|
|
226
|
-
}, /*#__PURE__*/_react.default.createElement(_modals.Drawer, {
|
|
227
|
-
title: "Upload images",
|
|
228
|
-
actions: {
|
|
229
|
-
cancel: {
|
|
230
|
-
label: 'Cancel',
|
|
231
|
-
action: () => {
|
|
232
|
-
onChange([]);
|
|
233
|
-
}
|
|
234
|
-
},
|
|
235
|
-
confirm: {
|
|
236
|
-
label: 'Confirm',
|
|
237
|
-
action: onConfirm
|
|
238
|
-
}
|
|
239
|
-
},
|
|
240
|
-
width: "narrow"
|
|
241
|
-
}, /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(AddImages, {
|
|
242
|
-
onAddImages: onAddImages
|
|
243
|
-
}), /*#__PURE__*/_react.default.createElement(ImagesWrapper, null, /*#__PURE__*/_react.default.createElement(ImageFiles, {
|
|
244
|
-
files: files,
|
|
245
|
-
onChange: onImageFileChang
|
|
246
|
-
})), uploadLoading && /*#__PURE__*/_react.default.createElement("div", null, "loading"), uploadError && /*#__PURE__*/_react.default.createElement("div", null, uploadError.message))));
|
|
247
|
-
}
|
|
@@ -1,185 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.VideoUploader = VideoUploader;
|
|
7
|
-
|
|
8
|
-
var _apollo = require("@keystone-6/core/admin-ui/apollo");
|
|
9
|
-
|
|
10
|
-
var _react = _interopRequireWildcard(require("react"));
|
|
11
|
-
|
|
12
|
-
var _fileConvert = require("../utils/file-convert");
|
|
13
|
-
|
|
14
|
-
var _styledComponents = _interopRequireDefault(require("styled-components"));
|
|
15
|
-
|
|
16
|
-
var _button = require("@keystone-ui/button");
|
|
17
|
-
|
|
18
|
-
var _modals = require("@keystone-ui/modals");
|
|
19
|
-
|
|
20
|
-
var _lodash = _interopRequireDefault(require("lodash"));
|
|
21
|
-
|
|
22
|
-
var _fields = require("@keystone-ui/fields");
|
|
23
|
-
|
|
24
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
25
|
-
|
|
26
|
-
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
27
|
-
|
|
28
|
-
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
29
|
-
|
|
30
|
-
const videoMutation = (0, _apollo.gql)`
|
|
31
|
-
mutation AddVideo($data: VideoCreateInput!) {
|
|
32
|
-
video: createVideo(data: $data) {
|
|
33
|
-
id
|
|
34
|
-
name
|
|
35
|
-
videoSrc
|
|
36
|
-
youtubeUrl
|
|
37
|
-
file {
|
|
38
|
-
filename
|
|
39
|
-
filesize
|
|
40
|
-
url
|
|
41
|
-
}
|
|
42
|
-
heroImage {
|
|
43
|
-
id
|
|
44
|
-
name
|
|
45
|
-
imageFile {
|
|
46
|
-
url
|
|
47
|
-
}
|
|
48
|
-
resized {
|
|
49
|
-
original
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
`;
|
|
55
|
-
const CustomButton = (0, _styledComponents.default)(_button.Button)`
|
|
56
|
-
margin: 10px 0;
|
|
57
|
-
`;
|
|
58
|
-
const HiddenInput = _styledComponents.default.input`
|
|
59
|
-
display: none;
|
|
60
|
-
`;
|
|
61
|
-
const VideoWrapper = _styledComponents.default.div`
|
|
62
|
-
overflow: auto;
|
|
63
|
-
margin-top: 10px;
|
|
64
|
-
`;
|
|
65
|
-
const Video = _styledComponents.default.video`
|
|
66
|
-
width: 100%;
|
|
67
|
-
aspect-ratio: 2;
|
|
68
|
-
object-fit: contain;
|
|
69
|
-
`;
|
|
70
|
-
const Label = _styledComponents.default.label`
|
|
71
|
-
display: block;
|
|
72
|
-
margin: 10px 0;
|
|
73
|
-
font-weight: 600;
|
|
74
|
-
`;
|
|
75
|
-
const HintWrapper = _styledComponents.default.div`
|
|
76
|
-
margin: 10px 0;
|
|
77
|
-
`;
|
|
78
|
-
|
|
79
|
-
const AddVideo = ({
|
|
80
|
-
onAddVideo
|
|
81
|
-
}) => {
|
|
82
|
-
const inputRef = (0, _react.useRef)(null);
|
|
83
|
-
|
|
84
|
-
const inputChangeHandler = async event => {
|
|
85
|
-
const files = event.target.files;
|
|
86
|
-
event.target.files = null;
|
|
87
|
-
if (!files) return;
|
|
88
|
-
const videoFiles = await (0, _fileConvert.convertFilesToVideoData)(files);
|
|
89
|
-
onAddVideo(videoFiles[0]);
|
|
90
|
-
};
|
|
91
|
-
|
|
92
|
-
const onUploadButton = () => {
|
|
93
|
-
var _inputRef$current;
|
|
94
|
-
|
|
95
|
-
(_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 ? void 0 : _inputRef$current.click();
|
|
96
|
-
};
|
|
97
|
-
|
|
98
|
-
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(CustomButton, {
|
|
99
|
-
onClick: onUploadButton
|
|
100
|
-
}, "\u65B0\u589E\u5F71\u7247"), /*#__PURE__*/_react.default.createElement(HiddenInput, {
|
|
101
|
-
type: "file",
|
|
102
|
-
multiple: false,
|
|
103
|
-
accept: "video/*",
|
|
104
|
-
ref: inputRef,
|
|
105
|
-
onChange: inputChangeHandler
|
|
106
|
-
}));
|
|
107
|
-
};
|
|
108
|
-
|
|
109
|
-
function VideoUploader({
|
|
110
|
-
onChange
|
|
111
|
-
}) {
|
|
112
|
-
const [file, setFile] = (0, _react.useState)();
|
|
113
|
-
const [addVideo, {
|
|
114
|
-
data: uploadData,
|
|
115
|
-
loading: uploadLoading,
|
|
116
|
-
error: uploadError
|
|
117
|
-
}] = (0, _apollo.useMutation)(videoMutation);
|
|
118
|
-
|
|
119
|
-
const onAddVideo = file => {
|
|
120
|
-
setFile(file);
|
|
121
|
-
};
|
|
122
|
-
|
|
123
|
-
const onVideoNameChange = e => {
|
|
124
|
-
if (!file) return;
|
|
125
|
-
setFile({ ...file,
|
|
126
|
-
name: e.target.value
|
|
127
|
-
});
|
|
128
|
-
};
|
|
129
|
-
|
|
130
|
-
const onConfirm = async () => {
|
|
131
|
-
if (!file) return onChange();
|
|
132
|
-
const data = { ...file,
|
|
133
|
-
file: await (0, _fileConvert.convertStringToFile)(file.blobURL, file.name, file.type)
|
|
134
|
-
};
|
|
135
|
-
addVideo({
|
|
136
|
-
variables: {
|
|
137
|
-
data: {
|
|
138
|
-
name: data.name,
|
|
139
|
-
file: {
|
|
140
|
-
upload: data.file
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
});
|
|
145
|
-
};
|
|
146
|
-
|
|
147
|
-
(0, _react.useEffect)(() => {
|
|
148
|
-
if (uploadData !== null && uploadData !== void 0 && uploadData.video) {
|
|
149
|
-
onChange(uploadData.video);
|
|
150
|
-
}
|
|
151
|
-
}, [uploadData, onChange]);
|
|
152
|
-
return /*#__PURE__*/_react.default.createElement(_modals.DrawerController, {
|
|
153
|
-
isOpen: true
|
|
154
|
-
}, /*#__PURE__*/_react.default.createElement(_modals.Drawer, {
|
|
155
|
-
title: "Upload images",
|
|
156
|
-
actions: {
|
|
157
|
-
cancel: {
|
|
158
|
-
label: 'Cancel',
|
|
159
|
-
action: () => {
|
|
160
|
-
onChange();
|
|
161
|
-
}
|
|
162
|
-
},
|
|
163
|
-
confirm: {
|
|
164
|
-
label: 'Confirm',
|
|
165
|
-
action: onConfirm
|
|
166
|
-
}
|
|
167
|
-
},
|
|
168
|
-
width: "narrow"
|
|
169
|
-
}, /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(AddVideo, {
|
|
170
|
-
onAddVideo: onAddVideo
|
|
171
|
-
}), file && /*#__PURE__*/_react.default.createElement(VideoWrapper, null, /*#__PURE__*/_react.default.createElement(Video, {
|
|
172
|
-
src: file === null || file === void 0 ? void 0 : file.blobURL,
|
|
173
|
-
muted: true,
|
|
174
|
-
loop: true,
|
|
175
|
-
controls: true,
|
|
176
|
-
autoPlay: true
|
|
177
|
-
}), /*#__PURE__*/_react.default.createElement(Label, {
|
|
178
|
-
htmlFor: "name"
|
|
179
|
-
}, "Video Name"), /*#__PURE__*/_react.default.createElement(_fields.TextInput, {
|
|
180
|
-
id: "name",
|
|
181
|
-
type: "text",
|
|
182
|
-
defaultValue: file.name,
|
|
183
|
-
onChange: _lodash.default.debounce(onVideoNameChange)
|
|
184
|
-
})), uploadLoading && /*#__PURE__*/_react.default.createElement(HintWrapper, null, "loading"), uploadError && /*#__PURE__*/_react.default.createElement(HintWrapper, null, uploadError.message))));
|
|
185
|
-
}
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.convertBlobToString = convertBlobToString;
|
|
7
|
-
exports.convertFilesToImageData = convertFilesToImageData;
|
|
8
|
-
exports.convertFilesToVideoData = convertFilesToVideoData;
|
|
9
|
-
exports.convertStringToFile = convertStringToFile;
|
|
10
|
-
|
|
11
|
-
var _jsSha = require("js-sha256");
|
|
12
|
-
|
|
13
|
-
async function convertFilesToMediaData(fileList, isValidFile, wrapResult) {
|
|
14
|
-
const files = Array.from(fileList);
|
|
15
|
-
const fileNamePostfix = new Intl.DateTimeFormat('fr-CA', {
|
|
16
|
-
year: 'numeric',
|
|
17
|
-
month: '2-digit',
|
|
18
|
-
day: '2-digit'
|
|
19
|
-
}).format(Date.now());
|
|
20
|
-
const tasks = files.map(async file => {
|
|
21
|
-
if (!isValidFile(file)) return;
|
|
22
|
-
const uInt8Data = await file.arrayBuffer();
|
|
23
|
-
const name = file.name;
|
|
24
|
-
const positionOfLastDot = name.lastIndexOf('.');
|
|
25
|
-
const filename = positionOfLastDot > -1 ? `${name.slice(0, positionOfLastDot)}_${fileNamePostfix}${name.slice(positionOfLastDot)}` : `${name}_${fileNamePostfix}`;
|
|
26
|
-
return wrapResult({
|
|
27
|
-
uid: (0, _jsSha.sha256)(uInt8Data),
|
|
28
|
-
name: filename,
|
|
29
|
-
type: file.type,
|
|
30
|
-
blobURL: convertBlobToString(file)
|
|
31
|
-
});
|
|
32
|
-
});
|
|
33
|
-
const results = await Promise.allSettled(tasks);
|
|
34
|
-
return results.filter(r => r.status === 'fulfilled').map(r => r.value).filter(r => Boolean(r));
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
function isImageFile(file) {
|
|
38
|
-
return file.type.startsWith('image/');
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
async function convertFilesToImageData(fileList) {
|
|
42
|
-
return convertFilesToMediaData(fileList, isImageFile, ({
|
|
43
|
-
uid,
|
|
44
|
-
name,
|
|
45
|
-
type,
|
|
46
|
-
blobURL
|
|
47
|
-
}) => ({
|
|
48
|
-
uid,
|
|
49
|
-
name,
|
|
50
|
-
type,
|
|
51
|
-
blobURL
|
|
52
|
-
}));
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
async function convertFilesToVideoData(fileList) {
|
|
56
|
-
return convertFilesToMediaData(fileList, isVideoFile, ({
|
|
57
|
-
uid,
|
|
58
|
-
name,
|
|
59
|
-
type,
|
|
60
|
-
blobURL
|
|
61
|
-
}) => ({
|
|
62
|
-
uid,
|
|
63
|
-
name,
|
|
64
|
-
type,
|
|
65
|
-
blobURL
|
|
66
|
-
}));
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
function isVideoFile(file) {
|
|
70
|
-
return file.type.startsWith('video/');
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
function blobToFile(blob, fileName, extension) {
|
|
74
|
-
return new File([blob], fileName, {
|
|
75
|
-
type: extension
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
function convertBlobToString(blob) {
|
|
80
|
-
return URL.createObjectURL(blob);
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
async function convertStringToFile(str, fileName, extension) {
|
|
84
|
-
const request = new Request(str);
|
|
85
|
-
return await fetch(request).then(response => response.blob()).then(blob => blobToFile(blob, fileName, extension ?? blob.type));
|
|
86
|
-
}
|