sanity-plugin-mux-input 1.1.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/LICENSE +21 -0
- package/README.md +86 -0
- package/build/actions/assets.js +37 -0
- package/build/actions/assets.js.map +1 -0
- package/build/actions/secrets.js +125 -0
- package/build/actions/secrets.js.map +1 -0
- package/build/actions/upload.js +280 -0
- package/build/actions/upload.js.map +1 -0
- package/build/clients/SanityClient.js +19 -0
- package/build/clients/SanityClient.js.map +1 -0
- package/build/clients/upChunkObservable.js +66 -0
- package/build/clients/upChunkObservable.js.map +1 -0
- package/build/components/FileInputButton.js +84 -0
- package/build/components/FileInputButton.js.map +1 -0
- package/build/components/Input.css +30 -0
- package/build/components/Input.js +823 -0
- package/build/components/Input.js.map +1 -0
- package/build/components/MuxLogo.js +19 -0
- package/build/components/MuxLogo.js.map +1 -0
- package/build/components/Preview.css +16 -0
- package/build/components/Preview.js +95 -0
- package/build/components/Preview.js.map +1 -0
- package/build/components/SelectAsset.css +56 -0
- package/build/components/SelectAsset.js +162 -0
- package/build/components/SelectAsset.js.map +1 -0
- package/build/components/Setup.css +7 -0
- package/build/components/Setup.js +311 -0
- package/build/components/Setup.js.map +1 -0
- package/build/components/UploadPlaceholder.css +81 -0
- package/build/components/UploadPlaceholder.js +92 -0
- package/build/components/UploadPlaceholder.js.map +1 -0
- package/build/components/Uploader.css +28 -0
- package/build/components/Uploader.js +534 -0
- package/build/components/Uploader.js.map +1 -0
- package/build/components/Video.css +21 -0
- package/build/components/Video.js +360 -0
- package/build/components/Video.js.map +1 -0
- package/build/config.js +17 -0
- package/build/config.js.map +1 -0
- package/build/index.js +22 -0
- package/build/index.js.map +1 -0
- package/build/schema/mux.video.js +41 -0
- package/build/schema/mux.video.js.map +1 -0
- package/build/schema/mux.videoAsset.js +29 -0
- package/build/schema/mux.videoAsset.js.map +1 -0
- package/build/util/extractFiles.js +70 -0
- package/build/util/extractFiles.js.map +1 -0
- package/build/util/formatTime.js +28 -0
- package/build/util/formatTime.js.map +1 -0
- package/build/util/generateJwt.js +30 -0
- package/build/util/generateJwt.js.map +1 -0
- package/build/util/getPosterSrc.js +46 -0
- package/build/util/getPosterSrc.js.map +1 -0
- package/build/util/getStoryboardSrc.js +26 -0
- package/build/util/getStoryboardSrc.js.map +1 -0
- package/build/util/getVideoSrc.js +23 -0
- package/build/util/getVideoSrc.js.map +1 -0
- package/config.dist.json +3 -0
- package/package.json +85 -0
- package/sanity.json +16 -0
|
@@ -0,0 +1,534 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _icons = require("@sanity/icons");
|
|
9
|
+
|
|
10
|
+
var _ui = require("@sanity/ui");
|
|
11
|
+
|
|
12
|
+
var _buttonCollection = _interopRequireDefault(require("part:@sanity/components/buttons/button-collection"));
|
|
13
|
+
|
|
14
|
+
var _content = _interopRequireDefault(require("part:@sanity/components/dialogs/content"));
|
|
15
|
+
|
|
16
|
+
var _default2 = _interopRequireDefault(require("part:@sanity/components/dialogs/default"));
|
|
17
|
+
|
|
18
|
+
var _default3 = _interopRequireDefault(require("part:@sanity/components/formfields/default"));
|
|
19
|
+
|
|
20
|
+
var _bar = _interopRequireDefault(require("part:@sanity/components/progress/bar"));
|
|
21
|
+
|
|
22
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
23
|
+
|
|
24
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
25
|
+
|
|
26
|
+
var _fi = require("react-icons/fi");
|
|
27
|
+
|
|
28
|
+
var _rxjs = require("rxjs");
|
|
29
|
+
|
|
30
|
+
var _operators = require("rxjs/operators");
|
|
31
|
+
|
|
32
|
+
var _upload = require("../actions/upload");
|
|
33
|
+
|
|
34
|
+
var _SanityClient = _interopRequireDefault(require("../clients/SanityClient"));
|
|
35
|
+
|
|
36
|
+
var _extractFiles = require("../util/extractFiles");
|
|
37
|
+
|
|
38
|
+
var _FileInputButton = _interopRequireDefault(require("./FileInputButton"));
|
|
39
|
+
|
|
40
|
+
var _Uploader = _interopRequireDefault(require("./Uploader.css"));
|
|
41
|
+
|
|
42
|
+
var _UploadPlaceholder = _interopRequireDefault(require("./UploadPlaceholder"));
|
|
43
|
+
|
|
44
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
45
|
+
|
|
46
|
+
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; }
|
|
47
|
+
|
|
48
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
49
|
+
|
|
50
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
51
|
+
|
|
52
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
53
|
+
|
|
54
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
55
|
+
|
|
56
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
57
|
+
|
|
58
|
+
function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
|
|
59
|
+
|
|
60
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
61
|
+
|
|
62
|
+
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
63
|
+
|
|
64
|
+
var ctrlKey = 17;
|
|
65
|
+
var cmdKey = 91;
|
|
66
|
+
var propTypes = {
|
|
67
|
+
hasFocus: _propTypes.default.bool,
|
|
68
|
+
onFocus: _propTypes.default.func,
|
|
69
|
+
onBlur: _propTypes.default.func,
|
|
70
|
+
onBrowse: _propTypes.default.func.isRequired,
|
|
71
|
+
onSetupButtonClicked: _propTypes.default.func.isRequired,
|
|
72
|
+
onUploadComplete: _propTypes.default.func,
|
|
73
|
+
secrets: _propTypes.default.shape({
|
|
74
|
+
token: _propTypes.default.string,
|
|
75
|
+
secretKey: _propTypes.default.string,
|
|
76
|
+
enableSignedUrls: _propTypes.default.bool
|
|
77
|
+
}),
|
|
78
|
+
buttons: _propTypes.default.node,
|
|
79
|
+
children: _propTypes.default.node
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
function createEventHandler() {
|
|
83
|
+
var events$ = new _rxjs.Subject();
|
|
84
|
+
|
|
85
|
+
var handler = event => events$.next(event);
|
|
86
|
+
|
|
87
|
+
return [events$.asObservable(), handler];
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
class MuxVideoInputUploader extends _react.Component {
|
|
91
|
+
constructor() {
|
|
92
|
+
super(...arguments);
|
|
93
|
+
|
|
94
|
+
_defineProperty(this, "state", {
|
|
95
|
+
isDraggingOver: false,
|
|
96
|
+
invalidPaste: false,
|
|
97
|
+
invalidFile: false,
|
|
98
|
+
uploadProgress: null,
|
|
99
|
+
fileInfo: null,
|
|
100
|
+
uuid: null
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
_defineProperty(this, "dragEnteredEls", []);
|
|
104
|
+
|
|
105
|
+
_defineProperty(this, "upload", null);
|
|
106
|
+
|
|
107
|
+
_defineProperty(this, "ctrlDown", false);
|
|
108
|
+
|
|
109
|
+
_defineProperty(this, "cancelUploadButton", /*#__PURE__*/_react.default.createRef());
|
|
110
|
+
|
|
111
|
+
_defineProperty(this, "hiddenTextField", /*#__PURE__*/_react.default.createRef());
|
|
112
|
+
|
|
113
|
+
_defineProperty(this, "container", /*#__PURE__*/_react.default.createRef());
|
|
114
|
+
|
|
115
|
+
_defineProperty(this, "handleProgress", evt => {
|
|
116
|
+
if (evt.percent) {
|
|
117
|
+
this.setState({
|
|
118
|
+
uploadProgress: evt.percent
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
if (evt.file) {
|
|
123
|
+
this.setState({
|
|
124
|
+
fileInfo: evt.file
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
_defineProperty(this, "handleUploadFile", file => {
|
|
130
|
+
this.setState({
|
|
131
|
+
uploadProgress: 0,
|
|
132
|
+
fileInfo: null,
|
|
133
|
+
uuid: null
|
|
134
|
+
});
|
|
135
|
+
this.upload = (0, _upload.uploadFile)(file, {
|
|
136
|
+
enableSignedUrls: this.props.secrets.enableSignedUrls
|
|
137
|
+
}).pipe((0, _operators.takeUntil)(this.onCancelUploadButtonClick$.pipe((0, _operators.tap)(() => {
|
|
138
|
+
if (this.state.uuid) {
|
|
139
|
+
_SanityClient.default.delete(this.state.uuid);
|
|
140
|
+
}
|
|
141
|
+
})))).subscribe({
|
|
142
|
+
complete: () => {
|
|
143
|
+
this.setState({
|
|
144
|
+
error: null,
|
|
145
|
+
uploadProgress: null,
|
|
146
|
+
uuid: null
|
|
147
|
+
});
|
|
148
|
+
},
|
|
149
|
+
next: event => {
|
|
150
|
+
this.handleUploadEvent(event);
|
|
151
|
+
},
|
|
152
|
+
error: err => {
|
|
153
|
+
this.setState({
|
|
154
|
+
error: err,
|
|
155
|
+
uploadProgress: null,
|
|
156
|
+
uuid: null
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
});
|
|
160
|
+
});
|
|
161
|
+
|
|
162
|
+
_defineProperty(this, "handleUploadEvent", event => {
|
|
163
|
+
switch (event.type) {
|
|
164
|
+
case 'success':
|
|
165
|
+
return this.handleUploadSuccess(event.asset);
|
|
166
|
+
|
|
167
|
+
case 'progress':
|
|
168
|
+
return this.handleProgress(event);
|
|
169
|
+
|
|
170
|
+
case 'file':
|
|
171
|
+
return this.setState({
|
|
172
|
+
fileInfo: event.file
|
|
173
|
+
});
|
|
174
|
+
|
|
175
|
+
case 'uuid':
|
|
176
|
+
// Means we created a mux.videoAsset document with an uuid
|
|
177
|
+
return this.setState({
|
|
178
|
+
uuid: event.uuid
|
|
179
|
+
});
|
|
180
|
+
|
|
181
|
+
case 'url':
|
|
182
|
+
return this.setState({
|
|
183
|
+
url: event.url,
|
|
184
|
+
uploadProgress: 100
|
|
185
|
+
});
|
|
186
|
+
|
|
187
|
+
default:
|
|
188
|
+
return null;
|
|
189
|
+
}
|
|
190
|
+
});
|
|
191
|
+
|
|
192
|
+
_defineProperty(this, "handleUploadSuccess", assetDocument => {
|
|
193
|
+
this.setState({
|
|
194
|
+
uploadProgress: 100
|
|
195
|
+
});
|
|
196
|
+
|
|
197
|
+
if (this.props.onUploadComplete) {
|
|
198
|
+
this.props.onUploadComplete(assetDocument);
|
|
199
|
+
}
|
|
200
|
+
});
|
|
201
|
+
|
|
202
|
+
_defineProperty(this, "handlePaste", event => {
|
|
203
|
+
var clipboardData = event.clipboardData || window.clipboardData;
|
|
204
|
+
var url = clipboardData.getData('text');
|
|
205
|
+
var options = {
|
|
206
|
+
enableSignedUrls: this.props.secrets.enableSignedUrls
|
|
207
|
+
};
|
|
208
|
+
this.upload = (0, _upload.uploadUrl)(url, options).subscribe({
|
|
209
|
+
complete: () => {
|
|
210
|
+
this.setState({
|
|
211
|
+
error: null,
|
|
212
|
+
uploadProgress: null,
|
|
213
|
+
url: null
|
|
214
|
+
});
|
|
215
|
+
},
|
|
216
|
+
next: sEvent => {
|
|
217
|
+
this.handleUploadEvent(sEvent);
|
|
218
|
+
},
|
|
219
|
+
error: err => {
|
|
220
|
+
var error; // Don't output error dialog when just invalid url
|
|
221
|
+
|
|
222
|
+
if (!err.message.toLowerCase().match('invalid url')) {
|
|
223
|
+
error = err;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
this.setState({
|
|
227
|
+
invalidPaste: true,
|
|
228
|
+
error
|
|
229
|
+
}, () => {
|
|
230
|
+
setTimeout(() => {
|
|
231
|
+
this.setState({
|
|
232
|
+
invalidPaste: false,
|
|
233
|
+
uploadProgress: null
|
|
234
|
+
});
|
|
235
|
+
}, 2000);
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
});
|
|
239
|
+
});
|
|
240
|
+
|
|
241
|
+
_defineProperty(this, "handleDrop", event => {
|
|
242
|
+
this.setState({
|
|
243
|
+
isDraggingOver: false
|
|
244
|
+
});
|
|
245
|
+
event.preventDefault();
|
|
246
|
+
event.stopPropagation();
|
|
247
|
+
(0, _extractFiles.extractDroppedFiles)(event.nativeEvent.dataTransfer).then(files => {
|
|
248
|
+
if (files) {
|
|
249
|
+
this.handleUploadFile(files[0]);
|
|
250
|
+
}
|
|
251
|
+
});
|
|
252
|
+
});
|
|
253
|
+
|
|
254
|
+
_defineProperty(this, "handleDragOver", event => {
|
|
255
|
+
event.preventDefault();
|
|
256
|
+
event.stopPropagation();
|
|
257
|
+
});
|
|
258
|
+
|
|
259
|
+
_defineProperty(this, "handleDragEnter", event => {
|
|
260
|
+
event.stopPropagation();
|
|
261
|
+
this.dragEnteredEls.push(event.target);
|
|
262
|
+
this.setState({
|
|
263
|
+
isDraggingOver: true
|
|
264
|
+
});
|
|
265
|
+
});
|
|
266
|
+
|
|
267
|
+
_defineProperty(this, "handleDragLeave", event => {
|
|
268
|
+
event.stopPropagation();
|
|
269
|
+
var idx = this.dragEnteredEls.indexOf(event.target);
|
|
270
|
+
|
|
271
|
+
if (idx > -1) {
|
|
272
|
+
this.dragEnteredEls.splice(idx, 1);
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
if (this.dragEnteredEls.length === 0) {
|
|
276
|
+
this.setState({
|
|
277
|
+
isDraggingOver: false
|
|
278
|
+
});
|
|
279
|
+
}
|
|
280
|
+
});
|
|
281
|
+
|
|
282
|
+
_defineProperty(this, "handleCancelUploadButtonClicked", event => {
|
|
283
|
+
this.setState({
|
|
284
|
+
uploadProgress: null,
|
|
285
|
+
error: null
|
|
286
|
+
});
|
|
287
|
+
this.container.current.focus();
|
|
288
|
+
});
|
|
289
|
+
|
|
290
|
+
_defineProperty(this, "handleErrorClose", event => {
|
|
291
|
+
if (event) {
|
|
292
|
+
event.preventDefault();
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
if (this.state.uploadProgress !== null) {
|
|
296
|
+
return;
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
this.setState({
|
|
300
|
+
invalidFile: false,
|
|
301
|
+
invalidPaste: false,
|
|
302
|
+
error: null,
|
|
303
|
+
uploadProgress: null
|
|
304
|
+
});
|
|
305
|
+
this.container.current.focus();
|
|
306
|
+
});
|
|
307
|
+
|
|
308
|
+
_defineProperty(this, "handleSetupButtonClicked", event => {
|
|
309
|
+
this.handleErrorClose(event);
|
|
310
|
+
this.props.onSetupButtonClicked();
|
|
311
|
+
});
|
|
312
|
+
|
|
313
|
+
_defineProperty(this, "handleKeyDown", event => {
|
|
314
|
+
if (event.keyCode == ctrlKey || event.keyCode == cmdKey) {
|
|
315
|
+
this.ctrlDown = true;
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
var vKey = 86;
|
|
319
|
+
|
|
320
|
+
if (this.ctrlDown && event.keyCode == vKey) {
|
|
321
|
+
this.hiddenTextField.current.focus();
|
|
322
|
+
}
|
|
323
|
+
});
|
|
324
|
+
|
|
325
|
+
_defineProperty(this, "handleKeyUp", event => {
|
|
326
|
+
if (event.keyCode == ctrlKey || event.keyCode == cmdKey) {
|
|
327
|
+
this.ctrlDown = false;
|
|
328
|
+
}
|
|
329
|
+
});
|
|
330
|
+
|
|
331
|
+
_defineProperty(this, "handleFocus", event => {
|
|
332
|
+
this.props.onFocus(event);
|
|
333
|
+
});
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
componentWillUnmount() {
|
|
337
|
+
this.unSubscribeToUpload();
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
componentDidMount() {
|
|
341
|
+
var _createEventHandler = createEventHandler(),
|
|
342
|
+
_createEventHandler2 = _slicedToArray(_createEventHandler, 2),
|
|
343
|
+
onClick$ = _createEventHandler2[0],
|
|
344
|
+
onClick = _createEventHandler2[1];
|
|
345
|
+
|
|
346
|
+
this.onCancelUploadButtonClick$ = onClick$;
|
|
347
|
+
this.handleCancelUploadButtonClick = onClick;
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
unSubscribeToUpload() {
|
|
351
|
+
if (this.upload && !this.upload.closed) {
|
|
352
|
+
this.upload.unsubscribe();
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
renderUploadPlaceHolder() {
|
|
357
|
+
if (this.props.children) {
|
|
358
|
+
return null;
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
if (this.state.uploadProgress !== null) {
|
|
362
|
+
return null;
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
var _this$state = this.state,
|
|
366
|
+
invalidFile = _this$state.invalidFile,
|
|
367
|
+
invalidPaste = _this$state.invalidPaste,
|
|
368
|
+
isDraggingOver = _this$state.isDraggingOver;
|
|
369
|
+
return /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_default3.default, {
|
|
370
|
+
level: 0
|
|
371
|
+
}, /*#__PURE__*/_react.default.createElement(_UploadPlaceholder.default, {
|
|
372
|
+
isDraggingOver: isDraggingOver,
|
|
373
|
+
hasFocus: this.props.hasFocus,
|
|
374
|
+
invalidPaste: invalidPaste,
|
|
375
|
+
invalidFile: invalidFile
|
|
376
|
+
})), /*#__PURE__*/_react.default.createElement(_buttonCollection.default, null, /*#__PURE__*/_react.default.createElement(_FileInputButton.default, {
|
|
377
|
+
icon: /*#__PURE__*/_react.default.createElement(_fi.FiUpload, {
|
|
378
|
+
"data-sanity-icon": "upload"
|
|
379
|
+
}),
|
|
380
|
+
onSelect: files => this.handleUploadFile(files[0]),
|
|
381
|
+
accept: 'video/*',
|
|
382
|
+
text: "Upload"
|
|
383
|
+
}), /*#__PURE__*/_react.default.createElement(_ui.Button, {
|
|
384
|
+
mode: "ghost",
|
|
385
|
+
tone: "default",
|
|
386
|
+
text: "Browse",
|
|
387
|
+
onClick: this.props.onBrowse
|
|
388
|
+
})));
|
|
389
|
+
} // eslint-disable-next-line complexity
|
|
390
|
+
|
|
391
|
+
|
|
392
|
+
renderUploadProgress() {
|
|
393
|
+
var _this$state2 = this.state,
|
|
394
|
+
uploadProgress = _this$state2.uploadProgress,
|
|
395
|
+
fileInfo = _this$state2.fileInfo,
|
|
396
|
+
url = _this$state2.url;
|
|
397
|
+
|
|
398
|
+
if (uploadProgress === null) {
|
|
399
|
+
return null;
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
var text = uploadProgress < 100 ? "Uploading ".concat(fileInfo ? "'".concat(fileInfo.name, "'") : 'file') : 'Waiting for Mux to complete the file';
|
|
403
|
+
|
|
404
|
+
if (this.state.error) {
|
|
405
|
+
text = this.state.error.message;
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
if (url) {
|
|
409
|
+
text = "Uploading ".concat(url);
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
return /*#__PURE__*/_react.default.createElement("div", {
|
|
413
|
+
className: _Uploader.default.uploadProgress
|
|
414
|
+
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
415
|
+
className: _Uploader.default.progressBar
|
|
416
|
+
}, /*#__PURE__*/_react.default.createElement(_bar.default, {
|
|
417
|
+
percent: uploadProgress,
|
|
418
|
+
text: text,
|
|
419
|
+
isInProgress: uploadProgress === 100 && !this.state.error,
|
|
420
|
+
showPercent: true,
|
|
421
|
+
animation: true,
|
|
422
|
+
color: "primary"
|
|
423
|
+
})), (uploadProgress < 100 || this.state.error) && /*#__PURE__*/_react.default.createElement("div", {
|
|
424
|
+
ref: this.cancelUploadButton
|
|
425
|
+
}, /*#__PURE__*/_react.default.createElement(_ui.Button, {
|
|
426
|
+
text: "Cancel upload",
|
|
427
|
+
padding: 3,
|
|
428
|
+
tone: "critical",
|
|
429
|
+
onClick: this.handleCancelUploadButtonClick
|
|
430
|
+
})));
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
renderError() {
|
|
434
|
+
var _this$state3 = this.state,
|
|
435
|
+
uploadProgress = _this$state3.uploadProgress,
|
|
436
|
+
error = _this$state3.error;
|
|
437
|
+
|
|
438
|
+
if (!error) {
|
|
439
|
+
return null;
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
if (uploadProgress !== null) {
|
|
443
|
+
return null;
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
var message = this.state.error.message;
|
|
447
|
+
|
|
448
|
+
if (message === 'Invalid credentials') {
|
|
449
|
+
message = /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("h3", null, "Invalid credentials"), /*#__PURE__*/_react.default.createElement("p", null, "You need to check your Mux access token and secret key."), /*#__PURE__*/_react.default.createElement(_ui.Button, {
|
|
450
|
+
text: "Run setup",
|
|
451
|
+
tone: "primary",
|
|
452
|
+
padding: 3,
|
|
453
|
+
onClick: this.handleSetupButtonClicked
|
|
454
|
+
}));
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
return /*#__PURE__*/_react.default.createElement(_default2.default, {
|
|
458
|
+
title: "Upload failed",
|
|
459
|
+
color: "danger",
|
|
460
|
+
useOverlay: true,
|
|
461
|
+
onClose: this.handleErrorClose,
|
|
462
|
+
onEscape: this.handleErrorClose,
|
|
463
|
+
onClickOutside: this.handleErrorClose
|
|
464
|
+
}, /*#__PURE__*/_react.default.createElement(_content.default, {
|
|
465
|
+
size: "small"
|
|
466
|
+
}, message));
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
renderButtons() {
|
|
470
|
+
if (this.state.uploadProgress === null && this.props.buttons) {
|
|
471
|
+
return /*#__PURE__*/_react.default.createElement(_ui.Grid, {
|
|
472
|
+
columns: 4,
|
|
473
|
+
gap: 2
|
|
474
|
+
}, /*#__PURE__*/_react.default.createElement(_FileInputButton.default, {
|
|
475
|
+
icon: /*#__PURE__*/_react.default.createElement(_icons.UploadIcon, {
|
|
476
|
+
"data-sanity-icon": "upload"
|
|
477
|
+
}),
|
|
478
|
+
onSelect: files => this.handleUploadFile(files[0]),
|
|
479
|
+
text: "Upload"
|
|
480
|
+
}), this.props.buttons);
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
return null;
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
renderChildren() {
|
|
487
|
+
if (this.state.uploadProgress !== null) {
|
|
488
|
+
return null;
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
return this.props.children;
|
|
492
|
+
}
|
|
493
|
+
|
|
494
|
+
render() {
|
|
495
|
+
return /*#__PURE__*/_react.default.createElement(_ui.Card, {
|
|
496
|
+
padding: 0,
|
|
497
|
+
radius: 0,
|
|
498
|
+
shadow: 0,
|
|
499
|
+
tabIndex: 0,
|
|
500
|
+
onBlur: this.props.onBlur,
|
|
501
|
+
onFocus: this.props.onFocus,
|
|
502
|
+
onDrop: this.handleDrop,
|
|
503
|
+
onKeyDown: this.handleKeyDown,
|
|
504
|
+
onDragOver: this.handleDragOver,
|
|
505
|
+
onDragLeave: this.handleDragLeave,
|
|
506
|
+
onDragEnter: this.handleDragEnter,
|
|
507
|
+
ref: this.container
|
|
508
|
+
}, /*#__PURE__*/_react.default.createElement("input", {
|
|
509
|
+
ref: this.hiddenTextField,
|
|
510
|
+
className: _Uploader.default.hiddenTextField,
|
|
511
|
+
type: "text",
|
|
512
|
+
onPaste: this.handlePaste
|
|
513
|
+
}), this.renderError(), this.renderUploadProgress(), this.renderUploadPlaceHolder(), this.renderChildren(), this.renderButtons());
|
|
514
|
+
}
|
|
515
|
+
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
MuxVideoInputUploader.propTypes = propTypes;
|
|
519
|
+
MuxVideoInputUploader.defaultProps = {
|
|
520
|
+
hasFocus: false,
|
|
521
|
+
onFocus: null,
|
|
522
|
+
onBlur: null,
|
|
523
|
+
onUploadComplete: null,
|
|
524
|
+
secrets: {
|
|
525
|
+
token: '',
|
|
526
|
+
secretKey: '',
|
|
527
|
+
enableSignedUrls: false
|
|
528
|
+
},
|
|
529
|
+
buttons: null,
|
|
530
|
+
children: null
|
|
531
|
+
};
|
|
532
|
+
var _default = MuxVideoInputUploader;
|
|
533
|
+
exports.default = _default;
|
|
534
|
+
//# sourceMappingURL=Uploader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/components/Uploader.js"],"names":["ctrlKey","cmdKey","propTypes","hasFocus","PropTypes","bool","onFocus","func","onBlur","onBrowse","isRequired","onSetupButtonClicked","onUploadComplete","secrets","shape","token","string","secretKey","enableSignedUrls","buttons","node","children","createEventHandler","events$","Subject","handler","event","next","asObservable","MuxVideoInputUploader","Component","isDraggingOver","invalidPaste","invalidFile","uploadProgress","fileInfo","uuid","React","createRef","evt","percent","setState","file","upload","props","pipe","onCancelUploadButtonClick$","state","client","delete","subscribe","complete","error","handleUploadEvent","err","type","handleUploadSuccess","asset","handleProgress","url","assetDocument","clipboardData","window","getData","options","sEvent","message","toLowerCase","match","setTimeout","preventDefault","stopPropagation","nativeEvent","dataTransfer","then","files","handleUploadFile","dragEnteredEls","push","target","idx","indexOf","splice","length","container","current","focus","handleErrorClose","keyCode","ctrlDown","vKey","hiddenTextField","componentWillUnmount","unSubscribeToUpload","componentDidMount","onClick$","onClick","handleCancelUploadButtonClick","closed","unsubscribe","renderUploadPlaceHolder","renderUploadProgress","text","name","styles","progressBar","cancelUploadButton","renderError","handleSetupButtonClicked","renderButtons","renderChildren","render","handleDrop","handleKeyDown","handleDragOver","handleDragLeave","handleDragEnter","handlePaste","defaultProps"],"mappings":"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","sourcesContent":["import {UploadIcon} from '@sanity/icons'\r\nimport {Button, Card, Grid} from '@sanity/ui'\r\nimport ButtonCollection from 'part:@sanity/components/buttons/button-collection'\r\nimport DialogContent from 'part:@sanity/components/dialogs/content'\r\nimport Dialog from 'part:@sanity/components/dialogs/default'\r\nimport FormField from 'part:@sanity/components/formfields/default'\r\nimport ProgressBar from 'part:@sanity/components/progress/bar'\r\nimport PropTypes from 'prop-types'\r\nimport React, {Component} from 'react'\r\nimport {FiUpload} from 'react-icons/fi'\r\nimport {Subject} from 'rxjs'\r\nimport {takeUntil, tap} from 'rxjs/operators'\r\nimport {uploadFile, uploadUrl} from '../actions/upload'\r\nimport client from '../clients/SanityClient'\r\nimport {extractDroppedFiles} from '../util/extractFiles'\r\nimport FileInputButton from './FileInputButton'\r\nimport styles from './Uploader.css'\r\nimport UploadPlaceholder from './UploadPlaceholder'\r\n\r\nconst ctrlKey = 17\r\nconst cmdKey = 91\r\n\r\nconst propTypes = {\r\n hasFocus: PropTypes.bool,\r\n onFocus: PropTypes.func,\r\n onBlur: PropTypes.func,\r\n onBrowse: PropTypes.func.isRequired,\r\n onSetupButtonClicked: PropTypes.func.isRequired,\r\n onUploadComplete: PropTypes.func,\r\n secrets: PropTypes.shape({\r\n token: PropTypes.string,\r\n secretKey: PropTypes.string,\r\n enableSignedUrls: PropTypes.bool,\r\n }),\r\n buttons: PropTypes.node,\r\n children: PropTypes.node,\r\n}\r\n\r\nfunction createEventHandler() {\r\n const events$ = new Subject()\r\n const handler = (event) => events$.next(event)\r\n return [events$.asObservable(), handler]\r\n}\r\n\r\nclass MuxVideoInputUploader extends Component {\r\n state = {\r\n isDraggingOver: false,\r\n invalidPaste: false,\r\n invalidFile: false,\r\n uploadProgress: null,\r\n fileInfo: null,\r\n uuid: null,\r\n }\r\n dragEnteredEls = []\r\n\r\n upload = null\r\n\r\n ctrlDown = false\r\n\r\n cancelUploadButton = React.createRef()\r\n hiddenTextField = React.createRef()\r\n container = React.createRef()\r\n\r\n componentWillUnmount() {\r\n this.unSubscribeToUpload()\r\n }\r\n\r\n componentDidMount() {\r\n const [onClick$, onClick] = createEventHandler()\r\n this.onCancelUploadButtonClick$ = onClick$\r\n this.handleCancelUploadButtonClick = onClick\r\n }\r\n\r\n unSubscribeToUpload() {\r\n if (this.upload && !this.upload.closed) {\r\n this.upload.unsubscribe()\r\n }\r\n }\r\n\r\n handleProgress = (evt) => {\r\n if (evt.percent) {\r\n this.setState({uploadProgress: evt.percent})\r\n }\r\n if (evt.file) {\r\n this.setState({fileInfo: evt.file})\r\n }\r\n }\r\n\r\n handleUploadFile = (file) => {\r\n this.setState({uploadProgress: 0, fileInfo: null, uuid: null})\r\n this.upload = uploadFile(file, {enableSignedUrls: this.props.secrets.enableSignedUrls})\r\n .pipe(\r\n takeUntil(\r\n this.onCancelUploadButtonClick$.pipe(\r\n tap(() => {\r\n if (this.state.uuid) {\r\n client.delete(this.state.uuid)\r\n }\r\n })\r\n )\r\n )\r\n )\r\n .subscribe({\r\n complete: () => {\r\n this.setState({error: null, uploadProgress: null, uuid: null})\r\n },\r\n next: (event) => {\r\n this.handleUploadEvent(event)\r\n },\r\n error: (err) => {\r\n this.setState({error: err, uploadProgress: null, uuid: null})\r\n },\r\n })\r\n }\r\n\r\n handleUploadEvent = (event) => {\r\n switch (event.type) {\r\n case 'success':\r\n return this.handleUploadSuccess(event.asset)\r\n case 'progress':\r\n return this.handleProgress(event)\r\n case 'file':\r\n return this.setState({fileInfo: event.file})\r\n case 'uuid':\r\n // Means we created a mux.videoAsset document with an uuid\r\n return this.setState({uuid: event.uuid})\r\n case 'url':\r\n return this.setState({url: event.url, uploadProgress: 100})\r\n default:\r\n return null\r\n }\r\n }\r\n\r\n handleUploadSuccess = (assetDocument) => {\r\n this.setState({uploadProgress: 100})\r\n if (this.props.onUploadComplete) {\r\n this.props.onUploadComplete(assetDocument)\r\n }\r\n }\r\n\r\n handlePaste = (event) => {\r\n const clipboardData = event.clipboardData || window.clipboardData\r\n const url = clipboardData.getData('text')\r\n const options = {enableSignedUrls: this.props.secrets.enableSignedUrls}\r\n\r\n this.upload = uploadUrl(url, options).subscribe({\r\n complete: () => {\r\n this.setState({error: null, uploadProgress: null, url: null})\r\n },\r\n next: (sEvent) => {\r\n this.handleUploadEvent(sEvent)\r\n },\r\n error: (err) => {\r\n let error\r\n // Don't output error dialog when just invalid url\r\n if (!err.message.toLowerCase().match('invalid url')) {\r\n error = err\r\n }\r\n this.setState({invalidPaste: true, error}, () => {\r\n setTimeout(() => {\r\n this.setState({invalidPaste: false, uploadProgress: null})\r\n }, 2000)\r\n })\r\n },\r\n })\r\n }\r\n\r\n handleDrop = (event) => {\r\n this.setState({isDraggingOver: false})\r\n event.preventDefault()\r\n event.stopPropagation()\r\n extractDroppedFiles(event.nativeEvent.dataTransfer).then((files) => {\r\n if (files) {\r\n this.handleUploadFile(files[0])\r\n }\r\n })\r\n }\r\n\r\n handleDragOver = (event) => {\r\n event.preventDefault()\r\n event.stopPropagation()\r\n }\r\n\r\n handleDragEnter = (event) => {\r\n event.stopPropagation()\r\n this.dragEnteredEls.push(event.target)\r\n this.setState({isDraggingOver: true})\r\n }\r\n\r\n handleDragLeave = (event) => {\r\n event.stopPropagation()\r\n const idx = this.dragEnteredEls.indexOf(event.target)\r\n if (idx > -1) {\r\n this.dragEnteredEls.splice(idx, 1)\r\n }\r\n if (this.dragEnteredEls.length === 0) {\r\n this.setState({isDraggingOver: false})\r\n }\r\n }\r\n\r\n handleCancelUploadButtonClicked = (event) => {\r\n this.setState({uploadProgress: null, error: null})\r\n this.container.current.focus()\r\n }\r\n\r\n handleErrorClose = (event) => {\r\n if (event) {\r\n event.preventDefault()\r\n }\r\n if (this.state.uploadProgress !== null) {\r\n return\r\n }\r\n this.setState({\r\n invalidFile: false,\r\n invalidPaste: false,\r\n error: null,\r\n uploadProgress: null,\r\n })\r\n this.container.current.focus()\r\n }\r\n\r\n handleSetupButtonClicked = (event) => {\r\n this.handleErrorClose(event)\r\n this.props.onSetupButtonClicked()\r\n }\r\n\r\n renderUploadPlaceHolder() {\r\n if (this.props.children) {\r\n return null\r\n }\r\n if (this.state.uploadProgress !== null) {\r\n return null\r\n }\r\n const {invalidFile, invalidPaste, isDraggingOver} = this.state\r\n return (\r\n <div>\r\n <FormField level={0}>\r\n <UploadPlaceholder\r\n isDraggingOver={isDraggingOver}\r\n hasFocus={this.props.hasFocus}\r\n invalidPaste={invalidPaste}\r\n invalidFile={invalidFile}\r\n />\r\n </FormField>\r\n <ButtonCollection>\r\n <FileInputButton\r\n icon={<FiUpload data-sanity-icon=\"upload\" />}\r\n onSelect={(files) => this.handleUploadFile(files[0])}\r\n accept={'video/*'}\r\n text=\"Upload\"\r\n />\r\n <Button mode=\"ghost\" tone=\"default\" text=\"Browse\" onClick={this.props.onBrowse} />\r\n </ButtonCollection>\r\n </div>\r\n )\r\n }\r\n\r\n // eslint-disable-next-line complexity\r\n renderUploadProgress() {\r\n const {uploadProgress, fileInfo, url} = this.state\r\n if (uploadProgress === null) {\r\n return null\r\n }\r\n let text =\r\n uploadProgress < 100\r\n ? `Uploading ${fileInfo ? `'${fileInfo.name}'` : 'file'}`\r\n : 'Waiting for Mux to complete the file'\r\n if (this.state.error) {\r\n text = this.state.error.message\r\n }\r\n if (url) {\r\n text = `Uploading ${url}`\r\n }\r\n return (\r\n <div className={styles.uploadProgress}>\r\n <div className={styles.progressBar}>\r\n <ProgressBar\r\n percent={uploadProgress}\r\n text={text}\r\n isInProgress={uploadProgress === 100 && !this.state.error}\r\n showPercent\r\n animation\r\n color=\"primary\"\r\n />\r\n </div>\r\n {(uploadProgress < 100 || this.state.error) && (\r\n <div ref={this.cancelUploadButton}>\r\n <Button\r\n text=\"Cancel upload\"\r\n padding={3}\r\n tone=\"critical\"\r\n onClick={this.handleCancelUploadButtonClick}\r\n />\r\n </div>\r\n )}\r\n </div>\r\n )\r\n }\r\n\r\n renderError() {\r\n const {uploadProgress, error} = this.state\r\n if (!error) {\r\n return null\r\n }\r\n if (uploadProgress !== null) {\r\n return null\r\n }\r\n let message = this.state.error.message\r\n if (message === 'Invalid credentials') {\r\n message = (\r\n <div>\r\n <h3>Invalid credentials</h3>\r\n <p>You need to check your Mux access token and secret key.</p>\r\n <Button\r\n text=\"Run setup\"\r\n tone=\"primary\"\r\n padding={3}\r\n onClick={this.handleSetupButtonClicked}\r\n />\r\n </div>\r\n )\r\n }\r\n return (\r\n <Dialog\r\n title=\"Upload failed\"\r\n color=\"danger\"\r\n useOverlay\r\n onClose={this.handleErrorClose}\r\n onEscape={this.handleErrorClose}\r\n onClickOutside={this.handleErrorClose}\r\n >\r\n <DialogContent size=\"small\">{message}</DialogContent>\r\n </Dialog>\r\n )\r\n }\r\n\r\n renderButtons() {\r\n if (this.state.uploadProgress === null && this.props.buttons) {\r\n return (\r\n <Grid columns={4} gap={2}>\r\n <FileInputButton\r\n icon={<UploadIcon data-sanity-icon=\"upload\" />}\r\n onSelect={(files) => this.handleUploadFile(files[0])}\r\n text=\"Upload\"\r\n />\r\n {this.props.buttons}\r\n </Grid>\r\n )\r\n }\r\n return null\r\n }\r\n\r\n renderChildren() {\r\n if (this.state.uploadProgress !== null) {\r\n return null\r\n }\r\n return this.props.children\r\n }\r\n\r\n handleKeyDown = (event) => {\r\n if (event.keyCode == ctrlKey || event.keyCode == cmdKey) {\r\n this.ctrlDown = true\r\n }\r\n const vKey = 86\r\n if (this.ctrlDown && event.keyCode == vKey) {\r\n this.hiddenTextField.current.focus()\r\n }\r\n }\r\n\r\n handleKeyUp = (event) => {\r\n if (event.keyCode == ctrlKey || event.keyCode == cmdKey) {\r\n this.ctrlDown = false\r\n }\r\n }\r\n\r\n handleFocus = (event) => {\r\n this.props.onFocus(event)\r\n }\r\n\r\n render() {\r\n return (\r\n <Card\r\n padding={0}\r\n radius={0}\r\n shadow={0}\r\n tabIndex={0}\r\n onBlur={this.props.onBlur}\r\n onFocus={this.props.onFocus}\r\n onDrop={this.handleDrop}\r\n onKeyDown={this.handleKeyDown}\r\n onDragOver={this.handleDragOver}\r\n onDragLeave={this.handleDragLeave}\r\n onDragEnter={this.handleDragEnter}\r\n ref={this.container}\r\n >\r\n <input\r\n ref={this.hiddenTextField}\r\n className={styles.hiddenTextField}\r\n type=\"text\"\r\n onPaste={this.handlePaste}\r\n />\r\n {this.renderError()}\r\n {this.renderUploadProgress()}\r\n {this.renderUploadPlaceHolder()}\r\n {this.renderChildren()}\r\n {this.renderButtons()}\r\n </Card>\r\n )\r\n }\r\n}\r\n\r\nMuxVideoInputUploader.propTypes = propTypes\r\n\r\nMuxVideoInputUploader.defaultProps = {\r\n hasFocus: false,\r\n onFocus: null,\r\n onBlur: null,\r\n onUploadComplete: null,\r\n secrets: {\r\n token: '',\r\n secretKey: '',\r\n enableSignedUrls: false,\r\n },\r\n buttons: null,\r\n children: null,\r\n}\r\n\r\nexport default MuxVideoInputUploader\r\n"],"file":"Uploader.js"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
@import 'part:@sanity/base/theme/variables-style';
|
|
2
|
+
|
|
3
|
+
.videoContainer {
|
|
4
|
+
position: relative;
|
|
5
|
+
min-height: 150px;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
.videoContainer media-controller {
|
|
9
|
+
max-width: 100%;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
.progressBar {
|
|
13
|
+
position: relative;
|
|
14
|
+
margin-top: var(--large-padding);
|
|
15
|
+
margin-bottom: 2.5em;
|
|
16
|
+
padding: var(--medium-padding);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.uploadCancelButton {
|
|
20
|
+
text-align: center;
|
|
21
|
+
}
|