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.
Files changed (60) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +86 -0
  3. package/build/actions/assets.js +37 -0
  4. package/build/actions/assets.js.map +1 -0
  5. package/build/actions/secrets.js +125 -0
  6. package/build/actions/secrets.js.map +1 -0
  7. package/build/actions/upload.js +280 -0
  8. package/build/actions/upload.js.map +1 -0
  9. package/build/clients/SanityClient.js +19 -0
  10. package/build/clients/SanityClient.js.map +1 -0
  11. package/build/clients/upChunkObservable.js +66 -0
  12. package/build/clients/upChunkObservable.js.map +1 -0
  13. package/build/components/FileInputButton.js +84 -0
  14. package/build/components/FileInputButton.js.map +1 -0
  15. package/build/components/Input.css +30 -0
  16. package/build/components/Input.js +823 -0
  17. package/build/components/Input.js.map +1 -0
  18. package/build/components/MuxLogo.js +19 -0
  19. package/build/components/MuxLogo.js.map +1 -0
  20. package/build/components/Preview.css +16 -0
  21. package/build/components/Preview.js +95 -0
  22. package/build/components/Preview.js.map +1 -0
  23. package/build/components/SelectAsset.css +56 -0
  24. package/build/components/SelectAsset.js +162 -0
  25. package/build/components/SelectAsset.js.map +1 -0
  26. package/build/components/Setup.css +7 -0
  27. package/build/components/Setup.js +311 -0
  28. package/build/components/Setup.js.map +1 -0
  29. package/build/components/UploadPlaceholder.css +81 -0
  30. package/build/components/UploadPlaceholder.js +92 -0
  31. package/build/components/UploadPlaceholder.js.map +1 -0
  32. package/build/components/Uploader.css +28 -0
  33. package/build/components/Uploader.js +534 -0
  34. package/build/components/Uploader.js.map +1 -0
  35. package/build/components/Video.css +21 -0
  36. package/build/components/Video.js +360 -0
  37. package/build/components/Video.js.map +1 -0
  38. package/build/config.js +17 -0
  39. package/build/config.js.map +1 -0
  40. package/build/index.js +22 -0
  41. package/build/index.js.map +1 -0
  42. package/build/schema/mux.video.js +41 -0
  43. package/build/schema/mux.video.js.map +1 -0
  44. package/build/schema/mux.videoAsset.js +29 -0
  45. package/build/schema/mux.videoAsset.js.map +1 -0
  46. package/build/util/extractFiles.js +70 -0
  47. package/build/util/extractFiles.js.map +1 -0
  48. package/build/util/formatTime.js +28 -0
  49. package/build/util/formatTime.js.map +1 -0
  50. package/build/util/generateJwt.js +30 -0
  51. package/build/util/generateJwt.js.map +1 -0
  52. package/build/util/getPosterSrc.js +46 -0
  53. package/build/util/getPosterSrc.js.map +1 -0
  54. package/build/util/getStoryboardSrc.js +26 -0
  55. package/build/util/getStoryboardSrc.js.map +1 -0
  56. package/build/util/getVideoSrc.js +23 -0
  57. package/build/util/getVideoSrc.js.map +1 -0
  58. package/config.dist.json +3 -0
  59. package/package.json +85 -0
  60. 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
+ }