sanity-plugin-mux-input 1.0.1 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -0
- package/build/actions/upload.js +6 -6
- package/build/actions/upload.js.map +1 -1
- package/build/components/Input.js +30 -10
- package/build/components/Input.js.map +1 -1
- package/build/components/Video.js +29 -2
- package/build/components/Video.js.map +1 -1
- package/build/config.js +17 -0
- package/build/config.js.map +1 -0
- package/config.dist.json +3 -0
- package/package.json +13 -13
package/README.md
CHANGED
|
@@ -59,6 +59,18 @@ To enable [signed urls](https://docs.mux.com/docs/security-signed-urls) with con
|
|
|
59
59
|
|
|
60
60
|
More information for this feature of the plugin can be found on Mux's [documentation](https://docs.mux.com/docs/headless-cms-sanity#advanced-signed-urls)
|
|
61
61
|
|
|
62
|
+
# Enabling MP4 support
|
|
63
|
+
|
|
64
|
+
To enable [static MP4 renditions](https://docs.mux.com/guides/video/enable-static-mp4-renditions), create or open the config file found in `config/mux-input.json` in your studio folder. This file is automatically created the first time the studio starts after adding the plugin.
|
|
65
|
+
|
|
66
|
+
```
|
|
67
|
+
{
|
|
68
|
+
"mp4_support": "standard"
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
Currently `mp4_support` is the only supported MUX option and this supports a value of either `standard` or `none` (the default).
|
|
73
|
+
|
|
62
74
|
# Contributing
|
|
63
75
|
|
|
64
76
|
Issues are actively monitored and PRs are welcome. When developing this plugin the easiest setup is:
|
package/build/actions/upload.js
CHANGED
|
@@ -11,6 +11,8 @@ exports.default = void 0;
|
|
|
11
11
|
|
|
12
12
|
var _uuid = require("@sanity/uuid");
|
|
13
13
|
|
|
14
|
+
var _config = _interopRequireDefault(require("../config"));
|
|
15
|
+
|
|
14
16
|
var _lodash = require("lodash");
|
|
15
17
|
|
|
16
18
|
var _rxjs = require("rxjs");
|
|
@@ -60,7 +62,8 @@ function uploadUrl(url) {
|
|
|
60
62
|
var enableSignedUrls = options.enableSignedUrls;
|
|
61
63
|
var muxBody = {
|
|
62
64
|
input: validUrl,
|
|
63
|
-
playback_policy: [enableSignedUrls ? 'signed' : 'public']
|
|
65
|
+
playback_policy: [enableSignedUrls ? 'signed' : 'public'],
|
|
66
|
+
mp4_support: _config.default.mp4_support
|
|
64
67
|
};
|
|
65
68
|
var query = {
|
|
66
69
|
muxBody: JSON.stringify(muxBody),
|
|
@@ -107,11 +110,8 @@ function uploadFile(file) {
|
|
|
107
110
|
var uuid = (0, _uuid.uuid)();
|
|
108
111
|
var enableSignedUrls = options.enableSignedUrls;
|
|
109
112
|
var body = {
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
// normalize_audio: false (default),
|
|
113
|
-
// master_access: false (default),
|
|
114
|
-
|
|
113
|
+
mp4_support: _config.default.mp4_support,
|
|
114
|
+
playback_policy: [enableSignedUrls ? 'signed' : 'public']
|
|
115
115
|
};
|
|
116
116
|
return (0, _rxjs.concat)((0, _rxjs.of)({
|
|
117
117
|
type: 'uuid',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/actions/upload.js"],"names":["cancelUpload","uuid","client","observable","request","url","clientConfig","dataset","withCredentials","method","uploadUrl","options","testUrl","pipe","validUrl","type","json","status","Error","enableSignedUrls","muxBody","input","playback_policy","query","JSON","stringify","filename","split","slice","headers","result","asset","results","document","id","uploadFile","file","testFile","fileOptions","body","upload","event","updateAssetDocumentFromUpload","doc","err","getUpload","assetId","pollUpload","maxTries","pollInterval","tries","Promise","resolve","reject","setInterval","data","asset_id","clearInterval","_id","_type","playbackId","playback_ids","uploadId","createOrReplace","then","window","File","optionsFromFile","error","parsed","URL","protocol","match","opts","fileOpts","preserveFilename","undefined","name","contentType"],"mappings":"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","sourcesContent":["/* eslint-disable camelcase */\nimport {uuid as generateUuid} from '@sanity/uuid'\nimport {isString} from 'lodash'\nimport {concat, defer, from, of, throwError} from 'rxjs'\nimport {catchError, mergeMap, mergeMapTo, switchMap} from 'rxjs/operators'\nimport {getAsset} from '../actions/assets'\nimport {testSecretsObservable} from '../actions/secrets'\nimport client from '../clients/SanityClient'\nimport {createUpChunkObservable} from '../clients/upChunkObservable'\n\nexport function cancelUpload(uuid) {\n return client.observable.request({\n url: `/addons/mux/uploads/${client.clientConfig.dataset}/${uuid}`,\n withCredentials: true,\n method: 'DELETE',\n })\n}\n\nexport function uploadUrl(url, options = {}) {\n return testUrl(url).pipe(\n switchMap((validUrl) => {\n return concat(\n of({type: 'url', url: validUrl}),\n testSecretsObservable().pipe(\n switchMap((json) => {\n if (!json || !json.status) {\n return throwError(new Error('Invalid credentials'))\n }\n const uuid = generateUuid()\n const {enableSignedUrls} = options\n const muxBody = {\n input: validUrl,\n playback_policy: [enableSignedUrls ? 'signed' : 'public'],\n }\n const query = {\n muxBody: JSON.stringify(muxBody),\n filename: validUrl.split('/').slice(-1)[0],\n }\n const dataset = client.clientConfig.dataset\n return defer(() =>\n client.observable.request({\n url: `/addons/mux/assets/${dataset}`,\n withCredentials: true,\n method: 'POST',\n headers: {\n 'MUX-Proxy-UUID': uuid,\n 'Content-Type': 'application/json',\n },\n query,\n })\n ).pipe(\n mergeMap((result) => {\n const asset =\n (result && result.results && result.results[0] && result.results[0].document) ||\n null\n if (!asset) {\n return throwError(new Error('No asset document returned'))\n }\n return of({type: 'success', id: uuid, asset})\n })\n )\n })\n )\n )\n })\n )\n}\n\nexport function uploadFile(file, options = {}) {\n return testFile(file).pipe(\n switchMap((fileOptions) => {\n return concat(\n of({type: 'file', file: fileOptions}),\n testSecretsObservable().pipe(\n switchMap((json) => {\n if (!json || !json.status) {\n return throwError(new Error('Invalid credentials'))\n }\n const uuid = generateUuid()\n const {enableSignedUrls} = options\n const body = {\n playback_policy: [enableSignedUrls ? 'signed' : 'public'],\n // TODO: These parameters were enabled by Sanity, but we are not using them yet\n // mp4_support: false (default),\n // normalize_audio: false (default),\n // master_access: false (default),\n }\n return concat(\n of({type: 'uuid', uuid}),\n defer(() =>\n client.observable.request({\n url: `/addons/mux/uploads/${client.clientConfig.dataset}`,\n withCredentials: true,\n method: 'POST',\n headers: {\n 'MUX-Proxy-UUID': uuid,\n 'Content-Type': 'application/json',\n },\n body,\n })\n ).pipe(\n mergeMap((result) => {\n return createUpChunkObservable(uuid, result.upload.url, file).pipe(\n // eslint-disable-next-line max-nested-callbacks\n mergeMap((event) => {\n if (event.type !== 'success') {\n return of(event)\n }\n return from(updateAssetDocumentFromUpload(uuid)).pipe(\n // eslint-disable-next-line max-nested-callbacks\n mergeMap((doc) => of({...event, asset: doc}))\n )\n }),\n // eslint-disable-next-line max-nested-callbacks\n catchError((err) => {\n // Delete asset document\n return cancelUpload(uuid).pipe(mergeMapTo(throwError(err)))\n })\n )\n })\n )\n )\n })\n )\n )\n })\n )\n}\n\nexport function getUpload(assetId) {\n return client.request({\n url: `/addons/mux/uploads/${client.clientConfig.dataset}/${assetId}`,\n withCredentials: true,\n method: 'GET',\n })\n}\n\nexport default {uploadUrl, uploadFile, getUpload}\n\nfunction pollUpload(uuid) {\n const maxTries = 10\n let pollInterval\n let tries = 0\n let assetId\n let upload\n return new Promise((resolve, reject) => {\n pollInterval = setInterval(async () => {\n try {\n upload = await getUpload(uuid)\n } catch (err) {\n reject(err)\n return\n }\n assetId = upload && upload.data && upload.data.asset_id\n if (assetId) {\n clearInterval(pollInterval)\n resolve(upload)\n }\n if (tries > maxTries) {\n clearInterval(pollInterval)\n reject(new Error('Upload did not finish'))\n }\n tries++\n }, 2000)\n })\n}\n\nasync function updateAssetDocumentFromUpload(uuid) {\n let upload\n let asset\n try {\n upload = await pollUpload(uuid)\n } catch (err) {\n return Promise.reject(err)\n }\n try {\n asset = await getAsset(upload.data.asset_id)\n } catch (err) {\n return Promise.reject(err)\n }\n const doc = {\n _id: uuid,\n _type: 'mux.videoAsset',\n status: asset.data.status,\n data: asset.data,\n assetId: asset.data.id,\n playbackId: asset.data.playback_ids[0].id,\n uploadId: upload.data.id,\n }\n return client.createOrReplace(doc).then(() => {\n return doc\n })\n}\n\nfunction testFile(file) {\n if (typeof window !== 'undefined' && file instanceof window.File) {\n const fileOptions = optionsFromFile(file)\n return of(fileOptions)\n }\n return throwError(new Error('Invalid file'))\n}\n\nfunction testUrl(url) {\n const error = new Error('Invalid URL')\n if (!isString(url)) {\n return throwError(error)\n }\n let parsed\n try {\n parsed = new URL(url)\n } catch (err) {\n return throwError(error)\n }\n if (parsed && !parsed.protocol.match(/http:|https:/)) {\n return throwError(error)\n }\n return of(url)\n}\n\nfunction optionsFromFile(opts, file) {\n if (typeof window === 'undefined' || !(file instanceof window.File)) {\n return opts\n }\n const fileOpts = {\n filename: opts.preserveFilename === false ? undefined : file.name,\n contentType: file.type,\n }\n\n return {\n ...{\n filename: opts.preserveFilename === false ? undefined : file.name,\n contentType: file.type,\n },\n fileOpts,\n }\n}\n"],"file":"upload.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/actions/upload.js"],"names":["cancelUpload","uuid","client","observable","request","url","clientConfig","dataset","withCredentials","method","uploadUrl","options","testUrl","pipe","validUrl","type","json","status","Error","enableSignedUrls","muxBody","input","playback_policy","mp4_support","config","query","JSON","stringify","filename","split","slice","headers","result","asset","results","document","id","uploadFile","file","testFile","fileOptions","body","upload","event","updateAssetDocumentFromUpload","doc","err","getUpload","assetId","pollUpload","maxTries","pollInterval","tries","Promise","resolve","reject","setInterval","data","asset_id","clearInterval","_id","_type","playbackId","playback_ids","uploadId","createOrReplace","then","window","File","optionsFromFile","error","parsed","URL","protocol","match","opts","fileOpts","preserveFilename","undefined","name","contentType"],"mappings":"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","sourcesContent":["/* eslint-disable camelcase */\nimport {uuid as generateUuid} from '@sanity/uuid'\nimport config from '../config'\nimport {isString} from 'lodash'\nimport {concat, defer, from, of, throwError} from 'rxjs'\nimport {catchError, mergeMap, mergeMapTo, switchMap} from 'rxjs/operators'\nimport {getAsset} from '../actions/assets'\nimport {testSecretsObservable} from '../actions/secrets'\nimport client from '../clients/SanityClient'\nimport {createUpChunkObservable} from '../clients/upChunkObservable'\n\nexport function cancelUpload(uuid) {\n return client.observable.request({\n url: `/addons/mux/uploads/${client.clientConfig.dataset}/${uuid}`,\n withCredentials: true,\n method: 'DELETE',\n })\n}\n\nexport function uploadUrl(url, options = {}) {\n return testUrl(url).pipe(\n switchMap((validUrl) => {\n return concat(\n of({type: 'url', url: validUrl}),\n testSecretsObservable().pipe(\n switchMap((json) => {\n if (!json || !json.status) {\n return throwError(new Error('Invalid credentials'))\n }\n const uuid = generateUuid()\n const {enableSignedUrls} = options\n const muxBody = {\n input: validUrl,\n playback_policy: [enableSignedUrls ? 'signed' : 'public'],\n mp4_support: config.mp4_support,\n }\n const query = {\n muxBody: JSON.stringify(muxBody),\n filename: validUrl.split('/').slice(-1)[0],\n }\n\n const dataset = client.clientConfig.dataset\n return defer(() =>\n client.observable.request({\n url: `/addons/mux/assets/${dataset}`,\n withCredentials: true,\n method: 'POST',\n headers: {\n 'MUX-Proxy-UUID': uuid,\n 'Content-Type': 'application/json',\n },\n query,\n })\n ).pipe(\n mergeMap((result) => {\n const asset =\n (result && result.results && result.results[0] && result.results[0].document) ||\n null\n\n if (!asset) {\n return throwError(new Error('No asset document returned'))\n }\n return of({type: 'success', id: uuid, asset})\n })\n )\n })\n )\n )\n })\n )\n}\n\nexport function uploadFile(file, options = {}) {\n return testFile(file).pipe(\n switchMap((fileOptions) => {\n return concat(\n of({type: 'file', file: fileOptions}),\n testSecretsObservable().pipe(\n switchMap((json) => {\n if (!json || !json.status) {\n return throwError(new Error('Invalid credentials'))\n }\n const uuid = generateUuid()\n const {enableSignedUrls} = options\n const body = {\n mp4_support: config.mp4_support,\n playback_policy: [enableSignedUrls ? 'signed' : 'public'],\n }\n\n return concat(\n of({type: 'uuid', uuid}),\n defer(() =>\n client.observable.request({\n url: `/addons/mux/uploads/${client.clientConfig.dataset}`,\n withCredentials: true,\n method: 'POST',\n headers: {\n 'MUX-Proxy-UUID': uuid,\n 'Content-Type': 'application/json',\n },\n body,\n })\n ).pipe(\n mergeMap((result) => {\n return createUpChunkObservable(uuid, result.upload.url, file).pipe(\n // eslint-disable-next-line max-nested-callbacks\n mergeMap((event) => {\n if (event.type !== 'success') {\n return of(event)\n }\n return from(updateAssetDocumentFromUpload(uuid)).pipe(\n // eslint-disable-next-line max-nested-callbacks\n mergeMap((doc) => of({...event, asset: doc}))\n )\n }),\n // eslint-disable-next-line max-nested-callbacks\n catchError((err) => {\n // Delete asset document\n return cancelUpload(uuid).pipe(mergeMapTo(throwError(err)))\n })\n )\n })\n )\n )\n })\n )\n )\n })\n )\n}\n\nexport function getUpload(assetId) {\n return client.request({\n url: `/addons/mux/uploads/${client.clientConfig.dataset}/${assetId}`,\n withCredentials: true,\n method: 'GET',\n })\n}\n\nexport default {uploadUrl, uploadFile, getUpload}\n\nfunction pollUpload(uuid) {\n const maxTries = 10\n let pollInterval\n let tries = 0\n let assetId\n let upload\n return new Promise((resolve, reject) => {\n pollInterval = setInterval(async () => {\n try {\n upload = await getUpload(uuid)\n } catch (err) {\n reject(err)\n return\n }\n assetId = upload && upload.data && upload.data.asset_id\n if (assetId) {\n clearInterval(pollInterval)\n resolve(upload)\n }\n if (tries > maxTries) {\n clearInterval(pollInterval)\n reject(new Error('Upload did not finish'))\n }\n tries++\n }, 2000)\n })\n}\n\nasync function updateAssetDocumentFromUpload(uuid) {\n let upload\n let asset\n try {\n upload = await pollUpload(uuid)\n } catch (err) {\n return Promise.reject(err)\n }\n try {\n asset = await getAsset(upload.data.asset_id)\n } catch (err) {\n return Promise.reject(err)\n }\n\n const doc = {\n _id: uuid,\n _type: 'mux.videoAsset',\n status: asset.data.status,\n data: asset.data,\n assetId: asset.data.id,\n playbackId: asset.data.playback_ids[0].id,\n uploadId: upload.data.id,\n }\n return client.createOrReplace(doc).then(() => {\n return doc\n })\n}\n\nfunction testFile(file) {\n if (typeof window !== 'undefined' && file instanceof window.File) {\n const fileOptions = optionsFromFile(file)\n return of(fileOptions)\n }\n return throwError(new Error('Invalid file'))\n}\n\nfunction testUrl(url) {\n const error = new Error('Invalid URL')\n if (!isString(url)) {\n return throwError(error)\n }\n let parsed\n try {\n parsed = new URL(url)\n } catch (err) {\n return throwError(error)\n }\n if (parsed && !parsed.protocol.match(/http:|https:/)) {\n return throwError(error)\n }\n return of(url)\n}\n\nfunction optionsFromFile(opts, file) {\n if (typeof window === 'undefined' || !(file instanceof window.File)) {\n return opts\n }\n const fileOpts = {\n filename: opts.preserveFilename === false ? undefined : file.name,\n contentType: file.type,\n }\n\n return {\n ...{\n filename: opts.preserveFilename === false ? undefined : file.name,\n contentType: file.type,\n },\n fileOpts,\n }\n}\n"],"file":"upload.js"}
|
|
@@ -49,6 +49,8 @@ var _Uploader = _interopRequireDefault(require("./Uploader"));
|
|
|
49
49
|
|
|
50
50
|
var _Video = _interopRequireDefault(require("./Video"));
|
|
51
51
|
|
|
52
|
+
var _config = _interopRequireDefault(require("../config"));
|
|
53
|
+
|
|
52
54
|
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); }
|
|
53
55
|
|
|
54
56
|
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; }
|
|
@@ -154,7 +156,7 @@ var _default = (0, _formBuilder.withDocument)(class MuxVideoInput extends _react
|
|
|
154
156
|
|
|
155
157
|
this.pollInterval = setInterval(() => {
|
|
156
158
|
(0, _assets.getAsset)(assetDocument.assetId).then(response => {
|
|
157
|
-
var props = response.data;
|
|
159
|
+
var props = response.data; // TODO: consider a deep comparison on `props` with asset data and only patch only if it's changed
|
|
158
160
|
|
|
159
161
|
_SanityClient.default.patch(assetDocument._id).set({
|
|
160
162
|
status: props.status,
|
|
@@ -473,7 +475,7 @@ var _default = (0, _formBuilder.withDocument)(class MuxVideoInput extends _react
|
|
|
473
475
|
}
|
|
474
476
|
|
|
475
477
|
this.subscription = (0, _preview.observePaths)(asset, ['thumbTime', 'data', 'assetId', 'playbackId', 'status']).pipe((0, _operators.tap)(assetDocument => {
|
|
476
|
-
var _assetDocument$data, _assetDocument$data$
|
|
478
|
+
var _assetDocument$data, _assetDocument$data$s, _assetDocument$data2, _assetDocument$data2$, _assetDocument$data3, _assetDocument$data3$;
|
|
477
479
|
|
|
478
480
|
this.setState({
|
|
479
481
|
assetDocument
|
|
@@ -490,19 +492,37 @@ var _default = (0, _formBuilder.withDocument)(class MuxVideoInput extends _react
|
|
|
490
492
|
error: new Error(assetDocument.data.errors.messages.join(' '))
|
|
491
493
|
});
|
|
492
494
|
});
|
|
493
|
-
}
|
|
495
|
+
} // Poll MUX if it's preparing the main document or its own static renditions
|
|
496
|
+
|
|
494
497
|
|
|
495
|
-
if (assetDocument
|
|
498
|
+
if ((assetDocument === null || assetDocument === void 0 ? void 0 : assetDocument.status) === 'preparing' || (assetDocument === null || assetDocument === void 0 ? void 0 : (_assetDocument$data = assetDocument.data) === null || _assetDocument$data === void 0 ? void 0 : (_assetDocument$data$s = _assetDocument$data.static_renditions) === null || _assetDocument$data$s === void 0 ? void 0 : _assetDocument$data$s.status) === 'preparing') {
|
|
496
499
|
this.pollMux();
|
|
497
|
-
}
|
|
500
|
+
} // If MP4 support is enabled: MUX will prepare static_renditions only _after_ an asset
|
|
501
|
+
// has been successfully uploaded.
|
|
502
|
+
// A _ready_ asset doesn't mean static mp4s are generated and ready for use!
|
|
503
|
+
// In these cases, wait for `static_renditions.status === 'ready'` before clearing the poll interval.
|
|
504
|
+
|
|
498
505
|
|
|
499
506
|
if (assetDocument && assetDocument.status === 'ready') {
|
|
500
|
-
|
|
501
|
-
|
|
507
|
+
switch (_config.default.mp4_support) {
|
|
508
|
+
case 'standard':
|
|
509
|
+
if ((assetDocument === null || assetDocument === void 0 ? void 0 : (_assetDocument$data2 = assetDocument.data) === null || _assetDocument$data2 === void 0 ? void 0 : (_assetDocument$data2$ = _assetDocument$data2.static_renditions) === null || _assetDocument$data2$ === void 0 ? void 0 : _assetDocument$data2$.status) === 'ready') {
|
|
510
|
+
clearInterval(this.pollInterval);
|
|
511
|
+
this.pollInterval = null;
|
|
512
|
+
}
|
|
513
|
+
|
|
514
|
+
break;
|
|
515
|
+
|
|
516
|
+
case 'none':
|
|
517
|
+
default:
|
|
518
|
+
clearInterval(this.pollInterval);
|
|
519
|
+
this.pollInterval = null;
|
|
520
|
+
break;
|
|
521
|
+
}
|
|
502
522
|
} // eslint-disable-next-line camelcase
|
|
503
523
|
|
|
504
524
|
|
|
505
|
-
var isSigned = (assetDocument === null || assetDocument === void 0 ? void 0 : (_assetDocument$
|
|
525
|
+
var isSigned = (assetDocument === null || assetDocument === void 0 ? void 0 : (_assetDocument$data3 = assetDocument.data) === null || _assetDocument$data3 === void 0 ? void 0 : (_assetDocument$data3$ = _assetDocument$data3.playback_ids[0]) === null || _assetDocument$data3$ === void 0 ? void 0 : _assetDocument$data3$.policy) === 'signed';
|
|
506
526
|
this.setState({
|
|
507
527
|
assetDocument,
|
|
508
528
|
isSigned,
|
|
@@ -655,7 +675,7 @@ var _default = (0, _formBuilder.withDocument)(class MuxVideoInput extends _react
|
|
|
655
675
|
}
|
|
656
676
|
|
|
657
677
|
render() {
|
|
658
|
-
var _assetDocument$
|
|
678
|
+
var _assetDocument$data4, _assetDocument$data4$, _assetDocument$data4$2;
|
|
659
679
|
|
|
660
680
|
var _this$props = this.props,
|
|
661
681
|
type = _this$props.type,
|
|
@@ -671,7 +691,7 @@ var _default = (0, _formBuilder.withDocument)(class MuxVideoInput extends _react
|
|
|
671
691
|
confirmRemove = _this$state7.confirmRemove,
|
|
672
692
|
thumb = _this$state7.thumb,
|
|
673
693
|
assetDocument = _this$state7.assetDocument;
|
|
674
|
-
var cssAspectRatio = (assetDocument === null || assetDocument === void 0 ? void 0 : (_assetDocument$
|
|
694
|
+
var cssAspectRatio = (assetDocument === null || assetDocument === void 0 ? void 0 : (_assetDocument$data4 = assetDocument.data) === null || _assetDocument$data4 === void 0 ? void 0 : (_assetDocument$data4$ = _assetDocument$data4.aspect_ratio) === null || _assetDocument$data4$ === void 0 ? void 0 : (_assetDocument$data4$2 = _assetDocument$data4$.split(':')) === null || _assetDocument$data4$2 === void 0 ? void 0 : _assetDocument$data4$2.join('/')) || 'auto';
|
|
675
695
|
return /*#__PURE__*/_react.default.createElement(_ui.ThemeProvider, {
|
|
676
696
|
theme: _ui.studioTheme
|
|
677
697
|
}, /*#__PURE__*/_react.default.createElement(_ui.Box, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/Input.js"],"names":["NOOP","cachedSecrets","token","secretKey","enableSignedUrls","signingKeyId","signingKeyPrivate","validateSecrets","secrets","getSecrets","Promise","resolve","isInitialSetup","needsSetup","then","exists","MuxVideoInput","Component","constructor","props","assetDocument","confirmRemove","deleteOnMuxChecked","deleteAssetDocumentChecked","error","hasFocus","isLoading","isSigned","showSetup","showBrowser","videoReadyToPlay","thumbLoading","handleFocus","setState","state","pollInterval","setInterval","assetId","response","data","client","patch","_id","set","status","commit","returnDocuments","catch","event","prevState","showStetup","result","onChange","PatchEvent","from","asset","_ref","document","setupAssetListener","preventDefault","stopPropagation","unsetAsset","reject","unset","delete","videoPlayer","current","currentTime","getVideoElement","options","time","thumbTime","width","height","fitMode","thumb","playbackId","newThumb","value","setupButton","React","createRef","video","removeVideoButton","componentDidMount","componentWillUnmount","subscription","unsubscribe","clearInterval","getAsset","pipe","handleRemoveVideo","Error","errors","messages","join","pollMux","playback_ids","policy","subscribe","renderSetup","handleCancelSaveSetup","handleSaveSetup","renderSetupButton","styles","setupButtonContainer","handleSetupButtonClicked","SetupIcon","renderSetupNotice","backgroundColor","borderRadius","renderAsset","isSignedAlert","handleVideoReadyToPlay","renderVideoButtons","readOnly","handleBrowseButton","handleOpenThumb","handleRemoveVideoButtonClicked","renderBrowser","handleCloseBrowser","handleSelectAsset","renderError","handleErrorClose","message","render","type","level","markers","cssAspectRatio","aspect_ratio","split","studioTheme","position","title","description","formField","blur","focus","handleOnUploadComplete","handleCloseThumbPreview","maxWidth","display","aspectRatio","handleSetThumbButton","handleCancelRemove","handleDeleteOnMuxCheckBoxClicked","margin","handleDeleteAssetDocumentCheckBoxClicked"],"mappings":"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","sourcesContent":["import {\n Box,\n Button,\n Card,\n Checkbox,\n Dialog,\n Flex,\n Grid,\n Inline,\n Stack,\n studioTheme,\n Text,\n ThemeProvider,\n} from '@sanity/ui'\nimport SetupIcon from 'part:@sanity/base/plugin-icon'\nimport {observePaths} from 'part:@sanity/base/preview'\nimport DialogContent from 'part:@sanity/components/dialogs/content'\nimport FullscreenDialog from 'part:@sanity/components/dialogs/fullscreen'\nimport FormField from 'part:@sanity/components/formfields/default'\nimport Spinner from 'part:@sanity/components/loading/spinner'\nimport {withDocument} from 'part:@sanity/form-builder'\nimport PatchEvent, {set, setIfMissing, unset} from 'part:@sanity/form-builder/patch-event'\nimport React, {Component} from 'react'\nimport {of} from 'rxjs'\nimport {tap} from 'rxjs/operators'\nimport {deleteAsset, getAsset} from '../actions/assets'\nimport {fetchSecrets} from '../actions/secrets'\nimport client from '../clients/SanityClient'\nimport getPosterSrc from '../util/getPosterSrc'\nimport styles from './Input.css'\nimport MuxLogo from './MuxLogo'\nimport SelectAsset from './SelectAsset'\nimport Setup from './Setup'\nimport Uploader from './Uploader'\nimport Video from './Video'\n\nconst NOOP = () => {\n /* intentional noop */\n}\n\nconst cachedSecrets = {\n token: null,\n secretKey: null,\n enableSignedUrls: false,\n signingKeyId: null,\n signingKeyPrivate: null,\n}\n\nfunction validateSecrets(secrets) {\n if (!secrets.token || !secrets.secretKey) return false\n\n return true\n}\n\nfunction getSecrets() {\n if (cachedSecrets.token) {\n return Promise.resolve({\n isInitialSetup: true,\n needsSetup: false,\n secrets: cachedSecrets,\n })\n }\n return fetchSecrets().then(({secrets, exists}) => {\n cachedSecrets.token = secrets.token\n cachedSecrets.secretKey = secrets.secretKey\n cachedSecrets.enableSignedUrls = secrets.enableSignedUrls\n cachedSecrets.signingKeyId = secrets.signingKeyId\n cachedSecrets.signingKeyPrivate = secrets.signingKeyPrivate\n\n return {\n isInitialSetup: !exists,\n needsSetup: !validateSecrets(cachedSecrets),\n secrets: cachedSecrets,\n }\n })\n}\n\nexport default withDocument(\n class MuxVideoInput extends Component {\n state = {\n assetDocument: null,\n confirmRemove: false,\n deleteOnMuxChecked: false,\n deleteAssetDocumentChecked: true,\n error: null,\n hasFocus: false,\n isInitialSetup: true,\n isLoading: 'secrets',\n needsSetup: true,\n secrets: null,\n isSigned: false,\n showSetup: false,\n showBrowser: false,\n videoReadyToPlay: false,\n thumbLoading: false,\n }\n\n constructor(props) {\n super(props)\n getSecrets()\n .then(({secrets, isInitialSetup, needsSetup}) => {\n this.setState({\n secrets,\n isInitialSetup,\n needsSetup,\n isLoading: props.value?.asset, // If there is an asset continue loading\n })\n })\n .catch((error) => this.setState({error}))\n\n this.setupButton = React.createRef()\n this.pollInterval = null\n this.video = React.createRef()\n this.removeVideoButton = React.createRef()\n this.videoPlayer = React.createRef()\n }\n\n componentDidMount() {\n this.setupAssetListener()\n }\n\n componentWillUnmount() {\n if (this.subscription) {\n this.subscription.unsubscribe()\n }\n if (this.pollInterval) {\n clearInterval(this.pollInterval)\n this.pollInterval = null\n }\n }\n\n focus = () => {\n this.handleFocus()\n }\n\n handleFocus = () => {\n this.setState({hasFocus: true})\n }\n\n handleBlur = () => {\n this.setState({hasFocus: false})\n }\n\n getAsset() {\n const {value} = this.props\n return value ? value.asset : null\n }\n\n setupAssetListener() {\n if (this.subscription) {\n this.subscription.unsubscribe()\n }\n this.setState({videoReadyToPlay: false})\n const asset = this.getAsset()\n if (!asset) {\n return\n }\n this.subscription = observePaths(asset, [\n 'thumbTime',\n 'data',\n 'assetId',\n 'playbackId',\n 'status',\n ])\n .pipe(\n tap((assetDocument) => {\n this.setState({assetDocument})\n if (assetDocument && assetDocument.status === 'errored') {\n clearInterval(this.pollInterval)\n this.pollInterval = null\n // eslint-disable-next-line no-warning-comments\n // todo: use client.observable\n return this.handleRemoveVideo().then(() => {\n this.setState({\n isLoading: false,\n error: new Error(assetDocument.data.errors.messages.join(' ')),\n })\n })\n }\n if (assetDocument && assetDocument.status === 'preparing') {\n this.pollMux()\n }\n if (assetDocument && assetDocument.status === 'ready') {\n clearInterval(this.pollInterval)\n this.pollInterval = null\n }\n\n // eslint-disable-next-line camelcase\n const isSigned = assetDocument?.data?.playback_ids[0]?.policy === 'signed'\n this.setState({assetDocument, isSigned, isLoading: false})\n\n return of(assetDocument)\n })\n )\n .subscribe()\n }\n\n pollMux = () => {\n const assetDocument = this.state.assetDocument\n if (!assetDocument) {\n return\n }\n if (this.pollInterval) {\n return\n }\n this.pollInterval = setInterval(() => {\n getAsset(assetDocument.assetId)\n .then((response) => {\n const props = response.data\n client\n .patch(assetDocument._id)\n .set({\n status: props.status,\n data: props,\n })\n .commit({returnDocuments: false})\n })\n .catch((error) => {\n this.setState({error})\n })\n }, 2000)\n }\n\n handleSetupButtonClicked = (event) => {\n this.setState((prevState) => ({showSetup: !prevState.showStetup}))\n }\n\n handleSaveSetup = ({token, secretKey, enableSignedUrls, signingKeyId, signingKeyPrivate}) => {\n cachedSecrets.token = token\n cachedSecrets.secretKey = secretKey\n cachedSecrets.enableSignedUrls = enableSignedUrls\n cachedSecrets.signingKeyId = signingKeyId\n cachedSecrets.signingKeyPrivate = signingKeyPrivate\n\n this.setState({\n showSetup: false,\n secrets: cachedSecrets,\n needsSetup: !validateSecrets(cachedSecrets),\n })\n }\n\n handleCancelSaveSetup = () => {\n this.setState({showSetup: false})\n }\n\n handleOnUploadComplete = (result) => {\n const {onChange} = this.props\n const {_id} = result\n onChange(\n PatchEvent.from([setIfMissing({asset: {_ref: _id}}, []), set({_ref: _id}, ['asset'])])\n )\n this.setState({assetDocument: result.document}, () => {\n this.setupAssetListener()\n })\n }\n\n handleRemoveVideoButtonClicked = (event) => {\n event.preventDefault()\n event.stopPropagation()\n this.setState({confirmRemove: true})\n }\n\n handleRemoveVideo = () => {\n const {assetDocument} = this.state\n this.setState({isLoading: true})\n const unsetAsset = () => {\n return new Promise((resolve, reject) => {\n this.setState(\n {\n assetDocument: null,\n confirmRemove: false,\n isLoading: false,\n },\n () => {\n if (this.state.deleteOnMuxChecked || this.state.deleteAssetDocumentChecked) {\n return client\n .patch(this.props.document._id)\n .unset(['video'])\n .commit({returnDocuments: false})\n .then(() => {\n if (!assetDocument) {\n return resolve()\n }\n return client\n .delete(assetDocument._id)\n .then(() => {\n resolve()\n })\n .catch((error) => {\n reject(error)\n })\n })\n }\n return this.props.onChange(PatchEvent.from(unset()))\n }\n )\n })\n }\n return unsetAsset()\n .then(() => {\n if (this.state.deleteOnMuxChecked) {\n return deleteAsset(assetDocument.assetId).catch((error) => {\n this.setState({error})\n })\n }\n return true\n })\n .catch((error) => {\n this.setState({error})\n })\n }\n\n handleCancelRemove = (event) => {\n this.setState({\n confirmRemove: false,\n deleteOnMuxChecked: true,\n deleteAssetDocumentChecked: true,\n })\n }\n\n handleDeleteOnMuxCheckBoxClicked = (event) => {\n this.setState((prevState) => ({\n deleteOnMuxChecked: !prevState.deleteOnMuxChecked,\n }))\n }\n\n handleDeleteAssetDocumentCheckBoxClicked = (event) => {\n this.setState((prevState) => ({\n deleteAssetDocumentChecked: !prevState.deleteAssetDocumentChecked,\n }))\n }\n\n handleOpenThumb = (event) => {\n if (!this.videoPlayer.current) {\n return\n }\n const {assetDocument, isSigned} = this.state\n const currentTime = this.videoPlayer.current.getVideoElement().currentTime\n const options = {\n time: assetDocument.thumbTime,\n width: 320,\n height: 320,\n fitMode: 'crop',\n isSigned,\n signingKeyId: cachedSecrets.signingKeyId,\n signingKeyPrivate: cachedSecrets.signingKeyPrivate,\n }\n\n const thumb = getPosterSrc(assetDocument.playbackId, options)\n const newThumb = getPosterSrc(assetDocument.playbackId, {...options, time: currentTime})\n\n this.setState({thumb, newThumb})\n }\n\n handleSetThumbButton = (event) => {\n if (!this.videoPlayer.current) {\n return\n }\n\n this.setState({thumbLoading: true})\n const {assetDocument, isSigned} = this.state\n const currentTime = this.videoPlayer.current.getVideoElement().currentTime\n client\n .patch(assetDocument._id)\n .set({\n thumbTime: currentTime,\n })\n .commit({returnDocuments: false})\n .then((response) => {\n const options = {\n time: currentTime,\n width: 320,\n height: 320,\n fitMode: 'crop',\n isSigned,\n signingKeyId: cachedSecrets.signingKeyId,\n signingKeyPrivate: cachedSecrets.signingKeyPrivate,\n }\n\n const thumb = getPosterSrc(assetDocument.playbackId, options)\n\n this.setState({thumb, thumbLoading: false})\n })\n .catch((error) => {\n this.setState({error, thumbLoading: false})\n })\n }\n\n handleErrorClose = (event) => {\n if (event) {\n event.preventDefault()\n }\n\n this.setState({\n error: null,\n })\n }\n\n handleCloseThumbPreview = (event) => {\n this.setState({thumb: null})\n }\n\n handleBrowseButton = (event) => {\n this.setState({showBrowser: true})\n }\n\n handleCloseBrowser = (event) => {\n this.setState({showBrowser: false})\n }\n\n handleSelectAsset = (asset) => {\n const {onChange} = this.props\n\n onChange(\n PatchEvent.from([\n setIfMissing({asset: {_ref: asset._id}}, []),\n set({_ref: asset._id}, ['asset']),\n ])\n )\n\n this.setState({showBrowser: false, assetDocument: asset}, () => {\n this.setupAssetListener()\n })\n }\n\n handleVideoReadyToPlay = () => {\n this.setState({videoReadyToPlay: true})\n }\n\n renderSetup() {\n const {secrets} = this.state\n\n return (\n <Dialog\n header=\"Mux API Credentials\"\n width={1}\n onClose={this.handleCancelSaveSetup}\n zOffset={1000}\n >\n <Setup\n secrets={secrets || null}\n onSave={this.handleSaveSetup}\n onCancel={this.handleCancelSaveSetup}\n />\n </Dialog>\n )\n }\n\n renderSetupButton() {\n const {isLoading, showSetup, needsSetup} = this.state\n const renderSetup = !isLoading && showSetup\n return (\n <div className={styles.setupButtonContainer}>\n <Button\n tone={needsSetup ? 'critical' : 'positive'}\n mode=\"bleed\"\n onClick={this.handleSetupButtonClicked}\n icon={SetupIcon}\n padding={3}\n radius={3}\n aria-label=\"Set up Mux credentials\"\n />\n {renderSetup && this.renderSetup()}\n </div>\n )\n }\n\n renderSetupNotice() {\n const {isLoading, isInitialSetup} = this.state\n\n if (isLoading) {\n return null\n }\n\n return (\n <Stack padding={4} space={5} style={{backgroundColor: '#efefefef', borderRadius: 3}}>\n <MuxLogo />\n <Stack space={4}>\n {isInitialSetup && (\n <Text>\n Looks like this is the first time you are using the Mux video plugin in this\n dataset. Great!\n </Text>\n )}\n <Text>Before you can upload video, you must set your Mux credentials.</Text>\n <Text>Click the plugin button in the field title to open Setup.</Text>\n </Stack>\n </Stack>\n )\n }\n\n // eslint-disable-next-line complexity\n renderAsset() {\n const {assetDocument, isSigned} = this.state\n const renderAsset = !!assetDocument\n if (!renderAsset) {\n return null\n }\n const isSignedAlert = isSigned ? (\n <Card padding={3} radius={2} shadow={1} tone=\"positive\">\n <Text size={1}>This Mux asset is using a signed url.</Text>\n </Card>\n ) : null\n return (\n <Stack space={2} marginBottom={2}>\n {isSignedAlert}\n <Video\n assetDocument={assetDocument}\n ref={this.videoPlayer}\n onReady={this.handleVideoReadyToPlay}\n onCancel={this.handleRemoveVideo}\n />\n </Stack>\n )\n }\n\n renderVideoButtons() {\n const {assetDocument, confirmRemove} = this.state\n const {readOnly} = this.props\n if (assetDocument && assetDocument.status === 'ready' && !readOnly) {\n return [\n <Button\n key=\"browse\"\n mode=\"ghost\"\n tone=\"primary\"\n onClick={this.handleBrowseButton}\n text=\"Browse\"\n />,\n <Button\n key=\"thumbnail\"\n mode=\"ghost\"\n tone=\"primary\"\n disabled={this.state.videoReadyToPlay === false}\n onClick={this.handleOpenThumb}\n text=\"Thumbnail\"\n />,\n <Button\n key=\"remove\"\n ref={this.removeVideoButton}\n onClick={confirmRemove ? NOOP : this.handleRemoveVideoButtonClicked}\n mode=\"ghost\"\n tone=\"critical\"\n text=\"Remove\"\n />,\n ]\n }\n return null\n }\n\n renderBrowser() {\n return (\n <FullscreenDialog title=\"Select video\" onClose={this.handleCloseBrowser} isOpen>\n <SelectAsset onSelect={this.handleSelectAsset} />\n </FullscreenDialog>\n )\n }\n\n renderError() {\n const {error} = this.state\n if (!error) {\n return null\n }\n return (\n <Dialog header=\"Error\" onClose={this.handleErrorClose}>\n <DialogContent size=\"small\">{error.message}</DialogContent>\n </Dialog>\n )\n }\n\n render() {\n const {type, level, markers} = this.props\n const {\n isLoading,\n secrets,\n hasFocus,\n needsSetup,\n error,\n showBrowser,\n confirmRemove,\n thumb,\n assetDocument,\n } = this.state\n\n const cssAspectRatio = assetDocument?.data?.aspect_ratio?.split(':')?.join('/') || 'auto'\n\n return (\n <ThemeProvider theme={studioTheme}>\n <Box style={{position: 'relative'}}>\n <Flex align=\"center\" justify=\"space-between\">\n <FormField\n label={type.title}\n markers={markers}\n description={type.description}\n level={level}\n className={styles.formField}\n />\n {this.renderSetupButton()}\n </Flex>\n\n {isLoading === 'secrets' && (\n <Box marginBottom={2}>\n <Inline align=\"center\" space={2}>\n <Spinner inline />\n <Text size={1}>Fetching credentials</Text>\n </Inline>\n </Box>\n )}\n\n {needsSetup && this.renderSetupNotice()}\n\n {!needsSetup && (\n <Uploader\n buttons={this.renderVideoButtons()}\n hasFocus={hasFocus}\n // eslint-disable-next-line react/jsx-handler-names\n onBlur={this.blur}\n // eslint-disable-next-line react/jsx-handler-names\n onFocus={this.focus}\n onSetupButtonClicked={this.handleSetupButtonClicked}\n onUploadComplete={this.handleOnUploadComplete}\n secrets={secrets}\n onBrowse={this.handleBrowseButton}\n >\n {this.renderAsset()}\n </Uploader>\n )}\n\n {thumb && (\n <Dialog header=\"Thumbnail\" zOffset={1000} onClose={this.handleCloseThumbPreview}>\n <Stack space={3} padding={3}>\n <Stack space={3}>\n <Stack space={2}>\n <Text size={1} weight=\"semibold\">\n Current:\n </Text>\n <img\n style={{\n maxWidth: '100%',\n borderRadius: '0.1875rem',\n display: 'block',\n aspectRatio: cssAspectRatio,\n }}\n src={this.state.thumb}\n width={400}\n />\n </Stack>\n <Stack space={2}>\n <Text size={1} weight=\"semibold\">\n New:\n </Text>\n <img\n style={{\n maxWidth: '100%',\n borderRadius: '0.1875rem',\n display: 'block',\n aspectRatio: cssAspectRatio,\n }}\n src={this.state.newThumb}\n width={400}\n />\n </Stack>\n </Stack>\n <Button\n key=\"thumbnail\"\n mode=\"ghost\"\n tone=\"primary\"\n disabled={this.state.videoReadyToPlay === false}\n onClick={this.handleSetThumbButton}\n loading={this.state.thumbLoading}\n text=\"Set new thumbnail\"\n />\n </Stack>\n </Dialog>\n )}\n\n {showBrowser && this.renderBrowser()}\n\n {confirmRemove && (\n <Dialog header=\"Remove video\" zOffset={1000} onClose={this.handleCancelRemove}>\n <Box padding={4}>\n <Stack space={3}>\n <Flex align=\"center\">\n <Checkbox\n checked={this.state.deleteOnMuxChecked}\n onChange={this.handleDeleteOnMuxCheckBoxClicked}\n />\n <Text style={{margin: '0 10px'}}>Delete asset on Mux</Text>\n </Flex>\n <Flex align=\"center\">\n <Checkbox\n disabled={this.state.deleteOnMuxChecked}\n checked={\n this.state.deleteOnMuxChecked || this.state.deleteAssetDocumentChecked\n }\n onChange={this.handleDeleteAssetDocumentCheckBoxClicked}\n />\n <Text style={{margin: '0 10px'}}>Delete video from dataset</Text>\n </Flex>\n <Grid columns={2} gap={2}>\n <Button\n mode=\"ghost\"\n tone=\"default\"\n text=\"Cancel\"\n onClick={this.handleCancelRemove}\n loading={!!isLoading}\n />\n <Button\n mode=\"default\"\n tone=\"critical\"\n text=\"Remove\"\n onClick={this.handleRemoveVideo}\n loading={!!isLoading}\n />\n </Grid>\n </Stack>\n </Box>\n </Dialog>\n )}\n\n {error && this.renderError()}\n </Box>\n </ThemeProvider>\n )\n }\n }\n)\n"],"file":"Input.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/components/Input.js"],"names":["NOOP","cachedSecrets","token","secretKey","enableSignedUrls","signingKeyId","signingKeyPrivate","validateSecrets","secrets","getSecrets","Promise","resolve","isInitialSetup","needsSetup","then","exists","MuxVideoInput","Component","constructor","props","assetDocument","confirmRemove","deleteOnMuxChecked","deleteAssetDocumentChecked","error","hasFocus","isLoading","isSigned","showSetup","showBrowser","videoReadyToPlay","thumbLoading","handleFocus","setState","state","pollInterval","setInterval","assetId","response","data","client","patch","_id","set","status","commit","returnDocuments","catch","event","prevState","showStetup","result","onChange","PatchEvent","from","asset","_ref","document","setupAssetListener","preventDefault","stopPropagation","unsetAsset","reject","unset","delete","videoPlayer","current","currentTime","getVideoElement","options","time","thumbTime","width","height","fitMode","thumb","playbackId","newThumb","value","setupButton","React","createRef","video","removeVideoButton","componentDidMount","componentWillUnmount","subscription","unsubscribe","clearInterval","getAsset","pipe","handleRemoveVideo","Error","errors","messages","join","static_renditions","pollMux","config","mp4_support","playback_ids","policy","subscribe","renderSetup","handleCancelSaveSetup","handleSaveSetup","renderSetupButton","styles","setupButtonContainer","handleSetupButtonClicked","SetupIcon","renderSetupNotice","backgroundColor","borderRadius","renderAsset","isSignedAlert","handleVideoReadyToPlay","renderVideoButtons","readOnly","handleBrowseButton","handleOpenThumb","handleRemoveVideoButtonClicked","renderBrowser","handleCloseBrowser","handleSelectAsset","renderError","handleErrorClose","message","render","type","level","markers","cssAspectRatio","aspect_ratio","split","studioTheme","position","title","description","formField","blur","focus","handleOnUploadComplete","handleCloseThumbPreview","maxWidth","display","aspectRatio","handleSetThumbButton","handleCancelRemove","handleDeleteOnMuxCheckBoxClicked","margin","handleDeleteAssetDocumentCheckBoxClicked"],"mappings":"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","sourcesContent":["import {\n Box,\n Button,\n Card,\n Checkbox,\n Dialog,\n Flex,\n Grid,\n Inline,\n Stack,\n studioTheme,\n Text,\n ThemeProvider,\n} from '@sanity/ui'\nimport SetupIcon from 'part:@sanity/base/plugin-icon'\nimport {observePaths} from 'part:@sanity/base/preview'\nimport DialogContent from 'part:@sanity/components/dialogs/content'\nimport FullscreenDialog from 'part:@sanity/components/dialogs/fullscreen'\nimport FormField from 'part:@sanity/components/formfields/default'\nimport Spinner from 'part:@sanity/components/loading/spinner'\nimport {withDocument} from 'part:@sanity/form-builder'\nimport PatchEvent, {set, setIfMissing, unset} from 'part:@sanity/form-builder/patch-event'\nimport React, {Component} from 'react'\nimport {of} from 'rxjs'\nimport {tap} from 'rxjs/operators'\nimport {deleteAsset, getAsset} from '../actions/assets'\nimport {fetchSecrets} from '../actions/secrets'\nimport client from '../clients/SanityClient'\nimport getPosterSrc from '../util/getPosterSrc'\nimport styles from './Input.css'\nimport MuxLogo from './MuxLogo'\nimport SelectAsset from './SelectAsset'\nimport Setup from './Setup'\nimport Uploader from './Uploader'\nimport Video from './Video'\nimport config from '../config'\n\nconst NOOP = () => {\n /* intentional noop */\n}\n\nconst cachedSecrets = {\n token: null,\n secretKey: null,\n enableSignedUrls: false,\n signingKeyId: null,\n signingKeyPrivate: null,\n}\n\nfunction validateSecrets(secrets) {\n if (!secrets.token || !secrets.secretKey) return false\n\n return true\n}\n\nfunction getSecrets() {\n if (cachedSecrets.token) {\n return Promise.resolve({\n isInitialSetup: true,\n needsSetup: false,\n secrets: cachedSecrets,\n })\n }\n return fetchSecrets().then(({secrets, exists}) => {\n cachedSecrets.token = secrets.token\n cachedSecrets.secretKey = secrets.secretKey\n cachedSecrets.enableSignedUrls = secrets.enableSignedUrls\n cachedSecrets.signingKeyId = secrets.signingKeyId\n cachedSecrets.signingKeyPrivate = secrets.signingKeyPrivate\n\n return {\n isInitialSetup: !exists,\n needsSetup: !validateSecrets(cachedSecrets),\n secrets: cachedSecrets,\n }\n })\n}\n\nexport default withDocument(\n class MuxVideoInput extends Component {\n state = {\n assetDocument: null,\n confirmRemove: false,\n deleteOnMuxChecked: false,\n deleteAssetDocumentChecked: true,\n error: null,\n hasFocus: false,\n isInitialSetup: true,\n isLoading: 'secrets',\n needsSetup: true,\n secrets: null,\n isSigned: false,\n showSetup: false,\n showBrowser: false,\n videoReadyToPlay: false,\n thumbLoading: false,\n }\n\n constructor(props) {\n super(props)\n getSecrets()\n .then(({secrets, isInitialSetup, needsSetup}) => {\n this.setState({\n secrets,\n isInitialSetup,\n needsSetup,\n isLoading: props.value?.asset, // If there is an asset continue loading\n })\n })\n .catch((error) => this.setState({error}))\n\n this.setupButton = React.createRef()\n this.pollInterval = null\n this.video = React.createRef()\n this.removeVideoButton = React.createRef()\n this.videoPlayer = React.createRef()\n }\n\n componentDidMount() {\n this.setupAssetListener()\n }\n\n componentWillUnmount() {\n if (this.subscription) {\n this.subscription.unsubscribe()\n }\n if (this.pollInterval) {\n clearInterval(this.pollInterval)\n this.pollInterval = null\n }\n }\n\n focus = () => {\n this.handleFocus()\n }\n\n handleFocus = () => {\n this.setState({hasFocus: true})\n }\n\n handleBlur = () => {\n this.setState({hasFocus: false})\n }\n\n getAsset() {\n const {value} = this.props\n return value ? value.asset : null\n }\n\n setupAssetListener() {\n if (this.subscription) {\n this.subscription.unsubscribe()\n }\n this.setState({videoReadyToPlay: false})\n const asset = this.getAsset()\n if (!asset) {\n return\n }\n this.subscription = observePaths(asset, [\n 'thumbTime',\n 'data',\n 'assetId',\n 'playbackId',\n 'status',\n ])\n .pipe(\n tap((assetDocument) => {\n this.setState({assetDocument})\n if (assetDocument && assetDocument.status === 'errored') {\n clearInterval(this.pollInterval)\n this.pollInterval = null\n // eslint-disable-next-line no-warning-comments\n // todo: use client.observable\n return this.handleRemoveVideo().then(() => {\n this.setState({\n isLoading: false,\n error: new Error(assetDocument.data.errors.messages.join(' ')),\n })\n })\n }\n // Poll MUX if it's preparing the main document or its own static renditions\n if (\n assetDocument?.status === 'preparing' ||\n assetDocument?.data?.static_renditions?.status === 'preparing'\n ) {\n this.pollMux()\n }\n // If MP4 support is enabled: MUX will prepare static_renditions only _after_ an asset\n // has been successfully uploaded.\n // A _ready_ asset doesn't mean static mp4s are generated and ready for use!\n // In these cases, wait for `static_renditions.status === 'ready'` before clearing the poll interval.\n if (assetDocument && assetDocument.status === 'ready') {\n switch (config.mp4_support) {\n case 'standard':\n if (assetDocument?.data?.static_renditions?.status === 'ready') {\n clearInterval(this.pollInterval)\n this.pollInterval = null\n }\n break\n case 'none':\n default:\n clearInterval(this.pollInterval)\n this.pollInterval = null\n break\n }\n }\n\n // eslint-disable-next-line camelcase\n const isSigned = assetDocument?.data?.playback_ids[0]?.policy === 'signed'\n this.setState({assetDocument, isSigned, isLoading: false})\n\n return of(assetDocument)\n })\n )\n .subscribe()\n }\n\n pollMux = () => {\n const assetDocument = this.state.assetDocument\n if (!assetDocument) {\n return\n }\n if (this.pollInterval) {\n return\n }\n this.pollInterval = setInterval(() => {\n getAsset(assetDocument.assetId)\n .then((response) => {\n const props = response.data\n\n // TODO: consider a deep comparison on `props` with asset data and only patch only if it's changed\n client\n .patch(assetDocument._id)\n .set({\n status: props.status,\n data: props,\n })\n .commit({returnDocuments: false})\n })\n .catch((error) => {\n this.setState({error})\n })\n }, 2000)\n }\n\n handleSetupButtonClicked = (event) => {\n this.setState((prevState) => ({showSetup: !prevState.showStetup}))\n }\n\n handleSaveSetup = ({token, secretKey, enableSignedUrls, signingKeyId, signingKeyPrivate}) => {\n cachedSecrets.token = token\n cachedSecrets.secretKey = secretKey\n cachedSecrets.enableSignedUrls = enableSignedUrls\n cachedSecrets.signingKeyId = signingKeyId\n cachedSecrets.signingKeyPrivate = signingKeyPrivate\n\n this.setState({\n showSetup: false,\n secrets: cachedSecrets,\n needsSetup: !validateSecrets(cachedSecrets),\n })\n }\n\n handleCancelSaveSetup = () => {\n this.setState({showSetup: false})\n }\n\n handleOnUploadComplete = (result) => {\n const {onChange} = this.props\n const {_id} = result\n onChange(\n PatchEvent.from([setIfMissing({asset: {_ref: _id}}, []), set({_ref: _id}, ['asset'])])\n )\n this.setState({assetDocument: result.document}, () => {\n this.setupAssetListener()\n })\n }\n\n handleRemoveVideoButtonClicked = (event) => {\n event.preventDefault()\n event.stopPropagation()\n this.setState({confirmRemove: true})\n }\n\n handleRemoveVideo = () => {\n const {assetDocument} = this.state\n this.setState({isLoading: true})\n const unsetAsset = () => {\n return new Promise((resolve, reject) => {\n this.setState(\n {\n assetDocument: null,\n confirmRemove: false,\n isLoading: false,\n },\n () => {\n if (this.state.deleteOnMuxChecked || this.state.deleteAssetDocumentChecked) {\n return client\n .patch(this.props.document._id)\n .unset(['video'])\n .commit({returnDocuments: false})\n .then(() => {\n if (!assetDocument) {\n return resolve()\n }\n return client\n .delete(assetDocument._id)\n .then(() => {\n resolve()\n })\n .catch((error) => {\n reject(error)\n })\n })\n }\n return this.props.onChange(PatchEvent.from(unset()))\n }\n )\n })\n }\n return unsetAsset()\n .then(() => {\n if (this.state.deleteOnMuxChecked) {\n return deleteAsset(assetDocument.assetId).catch((error) => {\n this.setState({error})\n })\n }\n return true\n })\n .catch((error) => {\n this.setState({error})\n })\n }\n\n handleCancelRemove = (event) => {\n this.setState({\n confirmRemove: false,\n deleteOnMuxChecked: true,\n deleteAssetDocumentChecked: true,\n })\n }\n\n handleDeleteOnMuxCheckBoxClicked = (event) => {\n this.setState((prevState) => ({\n deleteOnMuxChecked: !prevState.deleteOnMuxChecked,\n }))\n }\n\n handleDeleteAssetDocumentCheckBoxClicked = (event) => {\n this.setState((prevState) => ({\n deleteAssetDocumentChecked: !prevState.deleteAssetDocumentChecked,\n }))\n }\n\n handleOpenThumb = (event) => {\n if (!this.videoPlayer.current) {\n return\n }\n const {assetDocument, isSigned} = this.state\n const currentTime = this.videoPlayer.current.getVideoElement().currentTime\n const options = {\n time: assetDocument.thumbTime,\n width: 320,\n height: 320,\n fitMode: 'crop',\n isSigned,\n signingKeyId: cachedSecrets.signingKeyId,\n signingKeyPrivate: cachedSecrets.signingKeyPrivate,\n }\n\n const thumb = getPosterSrc(assetDocument.playbackId, options)\n const newThumb = getPosterSrc(assetDocument.playbackId, {...options, time: currentTime})\n\n this.setState({thumb, newThumb})\n }\n\n handleSetThumbButton = (event) => {\n if (!this.videoPlayer.current) {\n return\n }\n\n this.setState({thumbLoading: true})\n const {assetDocument, isSigned} = this.state\n const currentTime = this.videoPlayer.current.getVideoElement().currentTime\n client\n .patch(assetDocument._id)\n .set({\n thumbTime: currentTime,\n })\n .commit({returnDocuments: false})\n .then((response) => {\n const options = {\n time: currentTime,\n width: 320,\n height: 320,\n fitMode: 'crop',\n isSigned,\n signingKeyId: cachedSecrets.signingKeyId,\n signingKeyPrivate: cachedSecrets.signingKeyPrivate,\n }\n\n const thumb = getPosterSrc(assetDocument.playbackId, options)\n\n this.setState({thumb, thumbLoading: false})\n })\n .catch((error) => {\n this.setState({error, thumbLoading: false})\n })\n }\n\n handleErrorClose = (event) => {\n if (event) {\n event.preventDefault()\n }\n\n this.setState({\n error: null,\n })\n }\n\n handleCloseThumbPreview = (event) => {\n this.setState({thumb: null})\n }\n\n handleBrowseButton = (event) => {\n this.setState({showBrowser: true})\n }\n\n handleCloseBrowser = (event) => {\n this.setState({showBrowser: false})\n }\n\n handleSelectAsset = (asset) => {\n const {onChange} = this.props\n\n onChange(\n PatchEvent.from([\n setIfMissing({asset: {_ref: asset._id}}, []),\n set({_ref: asset._id}, ['asset']),\n ])\n )\n\n this.setState({showBrowser: false, assetDocument: asset}, () => {\n this.setupAssetListener()\n })\n }\n\n handleVideoReadyToPlay = () => {\n this.setState({videoReadyToPlay: true})\n }\n\n renderSetup() {\n const {secrets} = this.state\n\n return (\n <Dialog\n header=\"Mux API Credentials\"\n width={1}\n onClose={this.handleCancelSaveSetup}\n zOffset={1000}\n >\n <Setup\n secrets={secrets || null}\n onSave={this.handleSaveSetup}\n onCancel={this.handleCancelSaveSetup}\n />\n </Dialog>\n )\n }\n\n renderSetupButton() {\n const {isLoading, showSetup, needsSetup} = this.state\n const renderSetup = !isLoading && showSetup\n return (\n <div className={styles.setupButtonContainer}>\n <Button\n tone={needsSetup ? 'critical' : 'positive'}\n mode=\"bleed\"\n onClick={this.handleSetupButtonClicked}\n icon={SetupIcon}\n padding={3}\n radius={3}\n aria-label=\"Set up Mux credentials\"\n />\n {renderSetup && this.renderSetup()}\n </div>\n )\n }\n\n renderSetupNotice() {\n const {isLoading, isInitialSetup} = this.state\n\n if (isLoading) {\n return null\n }\n\n return (\n <Stack padding={4} space={5} style={{backgroundColor: '#efefefef', borderRadius: 3}}>\n <MuxLogo />\n <Stack space={4}>\n {isInitialSetup && (\n <Text>\n Looks like this is the first time you are using the Mux video plugin in this\n dataset. Great!\n </Text>\n )}\n <Text>Before you can upload video, you must set your Mux credentials.</Text>\n <Text>Click the plugin button in the field title to open Setup.</Text>\n </Stack>\n </Stack>\n )\n }\n\n // eslint-disable-next-line complexity\n renderAsset() {\n const {assetDocument, isSigned} = this.state\n const renderAsset = !!assetDocument\n if (!renderAsset) {\n return null\n }\n const isSignedAlert = isSigned ? (\n <Card padding={3} radius={2} shadow={1} tone=\"positive\">\n <Text size={1}>This Mux asset is using a signed url.</Text>\n </Card>\n ) : null\n return (\n <Stack space={2} marginBottom={2}>\n {isSignedAlert}\n <Video\n assetDocument={assetDocument}\n ref={this.videoPlayer}\n onReady={this.handleVideoReadyToPlay}\n onCancel={this.handleRemoveVideo}\n />\n </Stack>\n )\n }\n\n renderVideoButtons() {\n const {assetDocument, confirmRemove} = this.state\n const {readOnly} = this.props\n if (assetDocument && assetDocument.status === 'ready' && !readOnly) {\n return [\n <Button\n key=\"browse\"\n mode=\"ghost\"\n tone=\"primary\"\n onClick={this.handleBrowseButton}\n text=\"Browse\"\n />,\n <Button\n key=\"thumbnail\"\n mode=\"ghost\"\n tone=\"primary\"\n disabled={this.state.videoReadyToPlay === false}\n onClick={this.handleOpenThumb}\n text=\"Thumbnail\"\n />,\n <Button\n key=\"remove\"\n ref={this.removeVideoButton}\n onClick={confirmRemove ? NOOP : this.handleRemoveVideoButtonClicked}\n mode=\"ghost\"\n tone=\"critical\"\n text=\"Remove\"\n />,\n ]\n }\n return null\n }\n\n renderBrowser() {\n return (\n <FullscreenDialog title=\"Select video\" onClose={this.handleCloseBrowser} isOpen>\n <SelectAsset onSelect={this.handleSelectAsset} />\n </FullscreenDialog>\n )\n }\n\n renderError() {\n const {error} = this.state\n if (!error) {\n return null\n }\n return (\n <Dialog header=\"Error\" onClose={this.handleErrorClose}>\n <DialogContent size=\"small\">{error.message}</DialogContent>\n </Dialog>\n )\n }\n\n render() {\n const {type, level, markers} = this.props\n const {\n isLoading,\n secrets,\n hasFocus,\n needsSetup,\n error,\n showBrowser,\n confirmRemove,\n thumb,\n assetDocument,\n } = this.state\n\n const cssAspectRatio = assetDocument?.data?.aspect_ratio?.split(':')?.join('/') || 'auto'\n\n return (\n <ThemeProvider theme={studioTheme}>\n <Box style={{position: 'relative'}}>\n <Flex align=\"center\" justify=\"space-between\">\n <FormField\n label={type.title}\n markers={markers}\n description={type.description}\n level={level}\n className={styles.formField}\n />\n {this.renderSetupButton()}\n </Flex>\n\n {isLoading === 'secrets' && (\n <Box marginBottom={2}>\n <Inline align=\"center\" space={2}>\n <Spinner inline />\n <Text size={1}>Fetching credentials</Text>\n </Inline>\n </Box>\n )}\n\n {needsSetup && this.renderSetupNotice()}\n\n {!needsSetup && (\n <Uploader\n buttons={this.renderVideoButtons()}\n hasFocus={hasFocus}\n // eslint-disable-next-line react/jsx-handler-names\n onBlur={this.blur}\n // eslint-disable-next-line react/jsx-handler-names\n onFocus={this.focus}\n onSetupButtonClicked={this.handleSetupButtonClicked}\n onUploadComplete={this.handleOnUploadComplete}\n secrets={secrets}\n onBrowse={this.handleBrowseButton}\n >\n {this.renderAsset()}\n </Uploader>\n )}\n\n {thumb && (\n <Dialog header=\"Thumbnail\" zOffset={1000} onClose={this.handleCloseThumbPreview}>\n <Stack space={3} padding={3}>\n <Stack space={3}>\n <Stack space={2}>\n <Text size={1} weight=\"semibold\">\n Current:\n </Text>\n <img\n style={{\n maxWidth: '100%',\n borderRadius: '0.1875rem',\n display: 'block',\n aspectRatio: cssAspectRatio,\n }}\n src={this.state.thumb}\n width={400}\n />\n </Stack>\n <Stack space={2}>\n <Text size={1} weight=\"semibold\">\n New:\n </Text>\n <img\n style={{\n maxWidth: '100%',\n borderRadius: '0.1875rem',\n display: 'block',\n aspectRatio: cssAspectRatio,\n }}\n src={this.state.newThumb}\n width={400}\n />\n </Stack>\n </Stack>\n <Button\n key=\"thumbnail\"\n mode=\"ghost\"\n tone=\"primary\"\n disabled={this.state.videoReadyToPlay === false}\n onClick={this.handleSetThumbButton}\n loading={this.state.thumbLoading}\n text=\"Set new thumbnail\"\n />\n </Stack>\n </Dialog>\n )}\n\n {showBrowser && this.renderBrowser()}\n\n {confirmRemove && (\n <Dialog header=\"Remove video\" zOffset={1000} onClose={this.handleCancelRemove}>\n <Box padding={4}>\n <Stack space={3}>\n <Flex align=\"center\">\n <Checkbox\n checked={this.state.deleteOnMuxChecked}\n onChange={this.handleDeleteOnMuxCheckBoxClicked}\n />\n <Text style={{margin: '0 10px'}}>Delete asset on Mux</Text>\n </Flex>\n <Flex align=\"center\">\n <Checkbox\n disabled={this.state.deleteOnMuxChecked}\n checked={\n this.state.deleteOnMuxChecked || this.state.deleteAssetDocumentChecked\n }\n onChange={this.handleDeleteAssetDocumentCheckBoxClicked}\n />\n <Text style={{margin: '0 10px'}}>Delete video from dataset</Text>\n </Flex>\n <Grid columns={2} gap={2}>\n <Button\n mode=\"ghost\"\n tone=\"default\"\n text=\"Cancel\"\n onClick={this.handleCancelRemove}\n loading={!!isLoading}\n />\n <Button\n mode=\"default\"\n tone=\"critical\"\n text=\"Remove\"\n onClick={this.handleRemoveVideo}\n loading={!!isLoading}\n />\n </Grid>\n </Stack>\n </Box>\n </Dialog>\n )}\n\n {error && this.renderError()}\n </Box>\n </ThemeProvider>\n )\n }\n }\n)\n"],"file":"Input.js"}
|
|
@@ -83,6 +83,7 @@ class MuxVideo extends _react.Component {
|
|
|
83
83
|
isLoading: true,
|
|
84
84
|
error: null,
|
|
85
85
|
isDeletedOnMux: false,
|
|
86
|
+
isPreparingStaticRenditions: false,
|
|
86
87
|
secrets: null
|
|
87
88
|
};
|
|
88
89
|
this.playRef = /*#__PURE__*/_react.default.createRef();
|
|
@@ -91,7 +92,10 @@ class MuxVideo extends _react.Component {
|
|
|
91
92
|
|
|
92
93
|
|
|
93
94
|
static getDerivedStateFromProps(nextProps) {
|
|
95
|
+
var _assetDocument$data, _assetDocument$data$s, _assetDocument$data2, _assetDocument$data2$;
|
|
96
|
+
|
|
94
97
|
var isLoading = true;
|
|
98
|
+
var isPreparingStaticRenditions = false;
|
|
95
99
|
var assetDocument = nextProps.assetDocument;
|
|
96
100
|
|
|
97
101
|
if (assetDocument && assetDocument.status === 'preparing') {
|
|
@@ -114,8 +118,17 @@ class MuxVideo extends _react.Component {
|
|
|
114
118
|
isLoading = false;
|
|
115
119
|
}
|
|
116
120
|
|
|
121
|
+
if ((assetDocument === null || assetDocument === void 0 ? void 0 : (_assetDocument$data = assetDocument.data) === null || _assetDocument$data === void 0 ? void 0 : (_assetDocument$data$s = _assetDocument$data.static_renditions) === null || _assetDocument$data$s === void 0 ? void 0 : _assetDocument$data$s.status) === 'preparing') {
|
|
122
|
+
isPreparingStaticRenditions = true;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
if ((assetDocument === null || assetDocument === void 0 ? void 0 : (_assetDocument$data2 = assetDocument.data) === null || _assetDocument$data2 === void 0 ? void 0 : (_assetDocument$data2$ = _assetDocument$data2.static_renditions) === null || _assetDocument$data2$ === void 0 ? void 0 : _assetDocument$data2$.status) === 'ready') {
|
|
126
|
+
isPreparingStaticRenditions = false;
|
|
127
|
+
}
|
|
128
|
+
|
|
117
129
|
return {
|
|
118
|
-
isLoading
|
|
130
|
+
isLoading,
|
|
131
|
+
isPreparingStaticRenditions
|
|
119
132
|
};
|
|
120
133
|
}
|
|
121
134
|
|
|
@@ -317,7 +330,21 @@ class MuxVideo extends _react.Component {
|
|
|
317
330
|
size: 1
|
|
318
331
|
}, "There was an error loading this video (", error.type, ")."), this.state.isDeletedOnMux && /*#__PURE__*/_react.default.createElement(_ui.Text, {
|
|
319
332
|
size: 1
|
|
320
|
-
}, "The video is deleted on Mux")))
|
|
333
|
+
}, "The video is deleted on Mux"))), this.state.isPreparingStaticRenditions && /*#__PURE__*/_react.default.createElement(_ui.Card, {
|
|
334
|
+
padding: 2,
|
|
335
|
+
radius: 1,
|
|
336
|
+
style: {
|
|
337
|
+
background: 'var(--card-fg-color)',
|
|
338
|
+
position: 'absolute',
|
|
339
|
+
top: '0.5em',
|
|
340
|
+
left: '0.5em'
|
|
341
|
+
}
|
|
342
|
+
}, /*#__PURE__*/_react.default.createElement(_ui.Text, {
|
|
343
|
+
size: 1,
|
|
344
|
+
style: {
|
|
345
|
+
color: 'var(--card-bg-color)'
|
|
346
|
+
}
|
|
347
|
+
}, "MUX is preparing static renditions, please stand by")));
|
|
321
348
|
}
|
|
322
349
|
|
|
323
350
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/Video.js"],"names":["NOOP","propTypes","assetDocument","PropTypes","object","isRequired","autoload","bool","onCancel","func","onReady","MuxVideo","Component","constructor","props","React","createRef","event","setState","showControls","hls","startLoad","state","storyboardUrl","posterUrl","source","isLoading","error","isDeletedOnMux","secrets","playRef","muteRef","getDerivedStateFromProps","nextProps","status","componentDidMount","video","style","document","createElement","innerHTML","current","shadowRoot","appendChild","cloneNode","then","componentDidUpdate","prevProps","prevState","previousVideo","playbackId","newVideo","resolveSourceAndPoster","src","attachVideo","destroy","options","isSigned","data","playback_ids","policy","signingKeyId","signingKeyPrivate","getVideoElement","Hls","isSupported","autoStartLoad","loadSource","attachMedia","on","Events","MANIFEST_PARSED","e","videoContainer","display","ERROR","type","ErrorTypes","NETWORK_ERROR","assetId","response","catch","err","message","match","console","canPlayType","addEventListener","render","styles","progressBar","uploadCancelButton","handleCancelButtonClicked","handleVideoClick","defaultProps","undefined"],"mappings":"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","sourcesContent":["import {Card, Stack, Text} from '@sanity/ui'\nimport Hls from 'hls.js'\nimport 'media-chrome'\nimport Button from 'part:@sanity/components/buttons/default'\nimport ProgressBar from 'part:@sanity/components/progress/bar'\nimport PropTypes from 'prop-types'\nimport React, {Component} from 'react'\nimport {getAsset} from '../actions/assets'\nimport {fetchSecrets} from '../actions/secrets'\nimport getPosterSrc from '../util/getPosterSrc'\nimport getStoryboardSrc from '../util/getStoryboardSrc'\nimport getVideoSrc from '../util/getVideoSrc'\nimport styles from './Video.css'\n\nconst NOOP = () => {\n /* intentional noop */\n}\n\nconst propTypes = {\n // eslint-disable-next-line react/forbid-prop-types\n assetDocument: PropTypes.object.isRequired,\n autoload: PropTypes.bool,\n onCancel: PropTypes.func,\n onReady: PropTypes.func,\n}\n\nclass MuxVideo extends Component {\n videoContainer = React.createRef()\n hls = null\n\n constructor(props) {\n super(props)\n this.state = {\n storyboardUrl: null,\n posterUrl: null,\n source: null,\n isLoading: true,\n error: null,\n isDeletedOnMux: false,\n secrets: null,\n }\n this.playRef = React.createRef()\n this.muteRef = React.createRef()\n }\n\n // eslint-disable-next-line complexity\n static getDerivedStateFromProps(nextProps) {\n let isLoading = true\n const {assetDocument} = nextProps\n\n if (assetDocument && assetDocument.status === 'preparing') {\n isLoading = 'Preparing the video'\n }\n if (assetDocument && assetDocument.status === 'waiting_for_upload') {\n isLoading = 'Waiting for upload to start'\n }\n if (assetDocument && assetDocument.status === 'waiting') {\n isLoading = 'Processing upload'\n }\n if (assetDocument && assetDocument.status === 'ready') {\n isLoading = false\n }\n if (assetDocument && typeof assetDocument.status === 'undefined') {\n isLoading = false\n }\n return {isLoading}\n }\n\n componentDidMount() {\n this.video = React.createRef()\n\n const style = document.createElement('style')\n style.innerHTML = 'button svg { vertical-align: middle; }'\n\n if (this.playRef?.current?.shadowRoot) {\n this.playRef.current.shadowRoot.appendChild(style)\n }\n if (this.muteRef?.current?.shadowRoot) {\n this.muteRef.current.shadowRoot.appendChild(style.cloneNode(true))\n }\n\n this.setState(MuxVideo.getDerivedStateFromProps(this.props))\n fetchSecrets().then(({secrets}) => this.setState({secrets}))\n }\n\n componentDidUpdate(prevProps, prevState) {\n const previousVideo = prevProps.assetDocument.playbackId\n const newVideo = this.props.assetDocument.playbackId\n\n if (\n !this.state.isLoading &&\n this.state.secrets &&\n (this.state.source === null || previousVideo !== newVideo)\n ) {\n this.resolveSourceAndPoster(this.props.assetDocument)\n }\n\n if (this.state.source !== null && this.video.current && !this.video.current.src) {\n // eslint-disable-next-line react/no-did-update-set-state\n this.setState({error: null})\n this.attachVideo()\n }\n\n if (this.state.source !== null && this.state.source !== prevState.source) {\n // eslint-disable-next-line react/no-did-update-set-state\n this.setState({error: null, showControls: false})\n if (this.hls) {\n this.hls.destroy()\n }\n this.attachVideo()\n }\n }\n\n resolveSourceAndPoster(assetDocument) {\n const playbackId = assetDocument.playbackId\n const options = {\n isSigned: assetDocument.data.playback_ids[0].policy === 'signed',\n signingKeyId: this.state.secrets.signingKeyId || null,\n signingKeyPrivate: this.state.secrets.signingKeyPrivate || null,\n }\n\n const source = getVideoSrc(playbackId, options)\n const posterUrl = getPosterSrc(playbackId, options)\n const storyboardUrl = getStoryboardSrc(playbackId, options)\n this.setState({source, posterUrl, storyboardUrl})\n }\n\n getVideoElement() {\n return this.video && this.video.current\n }\n\n attachVideo() {\n const {assetDocument, autoload} = this.props\n\n if (Hls.isSupported()) {\n this.hls = new Hls({autoStartLoad: autoload})\n this.hls.loadSource(this.state.source)\n this.hls.attachMedia(this.video.current)\n this.hls.on(Hls.Events.MANIFEST_PARSED, (e) => {\n if (this.videoContainer.current) {\n this.videoContainer.current.style.display = 'block'\n }\n if (this.props.onReady) {\n this.props.onReady()\n }\n })\n this.hls.on(Hls.Events.ERROR, (event, data) => {\n switch (data.type) {\n case Hls.ErrorTypes.NETWORK_ERROR:\n if (this.videoContainer.current) {\n this.videoContainer.current.style.display = 'none'\n }\n this.setState({error: data})\n getAsset(assetDocument.assetId)\n .then((response) => {\n this.setState({isDeletedOnMux: false})\n })\n .catch((err) => {\n if (err.message.match(/404/)) {\n this.setState({isDeletedOnMux: true})\n return\n }\n console.error(data, err) // eslint-disable-line no-console\n })\n break\n default:\n console.error(data) // eslint-disable-line no-console\n }\n })\n } else if (this.video.current.canPlayType('application/vnd.apple.mpegurl')) {\n this.video.current.src = this.state.source\n this.video.current.addEventListener('loadedmetadata', () => {\n this.hls.loadSource(this.state.source)\n this.hls.attachMedia(this.video.current)\n })\n }\n }\n\n handleVideoClick = (event) => {\n this.setState({showControls: true})\n this.hls.startLoad(0)\n if (this.props.onReady) {\n this.props.onReady(event)\n }\n }\n\n handleCancelButtonClicked = (event) => {\n if (this.props.onCancel) {\n this.props.onCancel(event)\n }\n }\n\n // eslint-disable-next-line complexity\n render() {\n const {posterUrl, isLoading, error} = this.state\n const {assetDocument, autoload} = this.props\n if (!assetDocument || !assetDocument.status) {\n return null\n }\n\n if (isLoading) {\n return (\n <div>\n <div className={styles.progressBar}>\n <ProgressBar\n percent={100}\n text={(isLoading !== true && isLoading) || 'Waiting for Mux to complete the file'}\n isInProgress\n showPercent\n animation\n color=\"primary\"\n />\n </div>\n <div className={styles.uploadCancelButton}>\n <Button onClick={this.handleCancelButtonClicked}>Cancel</Button>\n </div>\n </div>\n )\n }\n\n const showControls = autoload || this.state.showControls\n\n return (\n <div ref={this.videoContainer} className={styles.videoContainer}>\n <media-controller>\n <video\n onClick={autoload ? NOOP : this.handleVideoClick}\n ref={this.video}\n poster={posterUrl}\n slot=\"media\"\n crossOrigin=\"anonomous\"\n >\n {this.state.storyboardUrl && (\n <track label=\"thumbnails\" default kind=\"metadata\" src={this.state.storyboardUrl} />\n )}\n </video>\n {showControls && (\n <media-control-bar>\n <media-play-button ref={this.playRef} />\n <media-mute-button ref={this.muteRef} />\n {/* The media volume range is causing an error to be logged in the studio: Failed to construct 'CustomElement': The result must not have attributes */}\n {/* <media-volume-range /> */}\n <media-progress-range />\n </media-control-bar>\n )}\n </media-controller>\n {error && (\n <Card padding={3} radius={2} shadow={1} tone=\"critical\" marginTop={2}>\n <Stack space={2}>\n <Text size={1}>There was an error loading this video ({error.type}).</Text>\n {this.state.isDeletedOnMux && <Text size={1}>The video is deleted on Mux</Text>}\n </Stack>\n </Card>\n )}\n </div>\n )\n }\n}\n\nMuxVideo.propTypes = propTypes\n\nMuxVideo.defaultProps = {\n autoload: true,\n onCancel: undefined,\n onReady: undefined,\n}\n\nexport default MuxVideo\n"],"file":"Video.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/components/Video.js"],"names":["NOOP","propTypes","assetDocument","PropTypes","object","isRequired","autoload","bool","onCancel","func","onReady","MuxVideo","Component","constructor","props","React","createRef","event","setState","showControls","hls","startLoad","state","storyboardUrl","posterUrl","source","isLoading","error","isDeletedOnMux","isPreparingStaticRenditions","secrets","playRef","muteRef","getDerivedStateFromProps","nextProps","status","data","static_renditions","componentDidMount","video","style","document","createElement","innerHTML","current","shadowRoot","appendChild","cloneNode","then","componentDidUpdate","prevProps","prevState","previousVideo","playbackId","newVideo","resolveSourceAndPoster","src","attachVideo","destroy","options","isSigned","playback_ids","policy","signingKeyId","signingKeyPrivate","getVideoElement","Hls","isSupported","autoStartLoad","loadSource","attachMedia","on","Events","MANIFEST_PARSED","e","videoContainer","display","ERROR","type","ErrorTypes","NETWORK_ERROR","assetId","response","catch","err","message","match","console","canPlayType","addEventListener","render","styles","progressBar","uploadCancelButton","handleCancelButtonClicked","handleVideoClick","background","position","top","left","color","defaultProps","undefined"],"mappings":"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","sourcesContent":["import {Box, Card, Stack, Text} from '@sanity/ui'\nimport Hls from 'hls.js'\nimport 'media-chrome'\nimport Button from 'part:@sanity/components/buttons/default'\nimport ProgressBar from 'part:@sanity/components/progress/bar'\nimport PropTypes from 'prop-types'\nimport React, {Component} from 'react'\nimport {getAsset} from '../actions/assets'\nimport {fetchSecrets} from '../actions/secrets'\nimport getPosterSrc from '../util/getPosterSrc'\nimport getStoryboardSrc from '../util/getStoryboardSrc'\nimport getVideoSrc from '../util/getVideoSrc'\nimport styles from './Video.css'\n\nconst NOOP = () => {\n /* intentional noop */\n}\n\nconst propTypes = {\n // eslint-disable-next-line react/forbid-prop-types\n assetDocument: PropTypes.object.isRequired,\n autoload: PropTypes.bool,\n onCancel: PropTypes.func,\n onReady: PropTypes.func,\n}\n\nclass MuxVideo extends Component {\n videoContainer = React.createRef()\n hls = null\n\n constructor(props) {\n super(props)\n this.state = {\n storyboardUrl: null,\n posterUrl: null,\n source: null,\n isLoading: true,\n error: null,\n isDeletedOnMux: false,\n isPreparingStaticRenditions: false,\n secrets: null,\n }\n this.playRef = React.createRef()\n this.muteRef = React.createRef()\n }\n\n // eslint-disable-next-line complexity\n static getDerivedStateFromProps(nextProps) {\n let isLoading = true\n let isPreparingStaticRenditions = false\n const {assetDocument} = nextProps\n\n if (assetDocument && assetDocument.status === 'preparing') {\n isLoading = 'Preparing the video'\n }\n if (assetDocument && assetDocument.status === 'waiting_for_upload') {\n isLoading = 'Waiting for upload to start'\n }\n if (assetDocument && assetDocument.status === 'waiting') {\n isLoading = 'Processing upload'\n }\n if (assetDocument && assetDocument.status === 'ready') {\n isLoading = false\n }\n if (assetDocument && typeof assetDocument.status === 'undefined') {\n isLoading = false\n }\n if (assetDocument?.data?.static_renditions?.status === 'preparing') {\n isPreparingStaticRenditions = true\n }\n if (assetDocument?.data?.static_renditions?.status === 'ready') {\n isPreparingStaticRenditions = false\n }\n return {\n isLoading,\n isPreparingStaticRenditions,\n }\n }\n\n componentDidMount() {\n this.video = React.createRef()\n\n const style = document.createElement('style')\n style.innerHTML = 'button svg { vertical-align: middle; }'\n\n if (this.playRef?.current?.shadowRoot) {\n this.playRef.current.shadowRoot.appendChild(style)\n }\n if (this.muteRef?.current?.shadowRoot) {\n this.muteRef.current.shadowRoot.appendChild(style.cloneNode(true))\n }\n\n this.setState(MuxVideo.getDerivedStateFromProps(this.props))\n fetchSecrets().then(({secrets}) => this.setState({secrets}))\n }\n\n componentDidUpdate(prevProps, prevState) {\n const previousVideo = prevProps.assetDocument.playbackId\n const newVideo = this.props.assetDocument.playbackId\n\n if (\n !this.state.isLoading &&\n this.state.secrets &&\n (this.state.source === null || previousVideo !== newVideo)\n ) {\n this.resolveSourceAndPoster(this.props.assetDocument)\n }\n\n if (this.state.source !== null && this.video.current && !this.video.current.src) {\n // eslint-disable-next-line react/no-did-update-set-state\n this.setState({error: null})\n this.attachVideo()\n }\n\n if (this.state.source !== null && this.state.source !== prevState.source) {\n // eslint-disable-next-line react/no-did-update-set-state\n this.setState({error: null, showControls: false})\n if (this.hls) {\n this.hls.destroy()\n }\n this.attachVideo()\n }\n }\n\n resolveSourceAndPoster(assetDocument) {\n const playbackId = assetDocument.playbackId\n const options = {\n isSigned: assetDocument.data.playback_ids[0].policy === 'signed',\n signingKeyId: this.state.secrets.signingKeyId || null,\n signingKeyPrivate: this.state.secrets.signingKeyPrivate || null,\n }\n\n const source = getVideoSrc(playbackId, options)\n const posterUrl = getPosterSrc(playbackId, options)\n const storyboardUrl = getStoryboardSrc(playbackId, options)\n this.setState({source, posterUrl, storyboardUrl})\n }\n\n getVideoElement() {\n return this.video && this.video.current\n }\n\n attachVideo() {\n const {assetDocument, autoload} = this.props\n\n if (Hls.isSupported()) {\n this.hls = new Hls({autoStartLoad: autoload})\n this.hls.loadSource(this.state.source)\n this.hls.attachMedia(this.video.current)\n this.hls.on(Hls.Events.MANIFEST_PARSED, (e) => {\n if (this.videoContainer.current) {\n this.videoContainer.current.style.display = 'block'\n }\n if (this.props.onReady) {\n this.props.onReady()\n }\n })\n this.hls.on(Hls.Events.ERROR, (event, data) => {\n switch (data.type) {\n case Hls.ErrorTypes.NETWORK_ERROR:\n if (this.videoContainer.current) {\n this.videoContainer.current.style.display = 'none'\n }\n this.setState({error: data})\n getAsset(assetDocument.assetId)\n .then((response) => {\n this.setState({isDeletedOnMux: false})\n })\n .catch((err) => {\n if (err.message.match(/404/)) {\n this.setState({isDeletedOnMux: true})\n return\n }\n console.error(data, err) // eslint-disable-line no-console\n })\n break\n default:\n console.error(data) // eslint-disable-line no-console\n }\n })\n } else if (this.video.current.canPlayType('application/vnd.apple.mpegurl')) {\n this.video.current.src = this.state.source\n this.video.current.addEventListener('loadedmetadata', () => {\n this.hls.loadSource(this.state.source)\n this.hls.attachMedia(this.video.current)\n })\n }\n }\n\n handleVideoClick = (event) => {\n this.setState({showControls: true})\n this.hls.startLoad(0)\n if (this.props.onReady) {\n this.props.onReady(event)\n }\n }\n\n handleCancelButtonClicked = (event) => {\n if (this.props.onCancel) {\n this.props.onCancel(event)\n }\n }\n\n // eslint-disable-next-line complexity\n render() {\n const {posterUrl, isLoading, error} = this.state\n const {assetDocument, autoload} = this.props\n if (!assetDocument || !assetDocument.status) {\n return null\n }\n\n if (isLoading) {\n return (\n <div>\n <div className={styles.progressBar}>\n <ProgressBar\n percent={100}\n text={(isLoading !== true && isLoading) || 'Waiting for Mux to complete the file'}\n isInProgress\n showPercent\n animation\n color=\"primary\"\n />\n </div>\n <div className={styles.uploadCancelButton}>\n <Button onClick={this.handleCancelButtonClicked}>Cancel</Button>\n </div>\n </div>\n )\n }\n\n const showControls = autoload || this.state.showControls\n\n return (\n <div ref={this.videoContainer} className={styles.videoContainer}>\n <media-controller>\n <video\n onClick={autoload ? NOOP : this.handleVideoClick}\n ref={this.video}\n poster={posterUrl}\n slot=\"media\"\n crossOrigin=\"anonomous\"\n >\n {this.state.storyboardUrl && (\n <track label=\"thumbnails\" default kind=\"metadata\" src={this.state.storyboardUrl} />\n )}\n </video>\n\n {showControls && (\n <media-control-bar>\n <media-play-button ref={this.playRef} />\n <media-mute-button ref={this.muteRef} />\n {/* The media volume range is causing an error to be logged in the studio: Failed to construct 'CustomElement': The result must not have attributes */}\n {/* <media-volume-range /> */}\n <media-progress-range />\n </media-control-bar>\n )}\n </media-controller>\n {error && (\n <Card padding={3} radius={2} shadow={1} tone=\"critical\" marginTop={2}>\n <Stack space={2}>\n <Text size={1}>There was an error loading this video ({error.type}).</Text>\n {this.state.isDeletedOnMux && <Text size={1}>The video is deleted on Mux</Text>}\n </Stack>\n </Card>\n )}\n\n {this.state.isPreparingStaticRenditions && (\n <Card\n padding={2}\n radius={1}\n style={{\n background: 'var(--card-fg-color)',\n position: 'absolute',\n top: '0.5em',\n left: '0.5em',\n }}\n >\n <Text size={1} style={{color: 'var(--card-bg-color)'}}>\n MUX is preparing static renditions, please stand by\n </Text>\n </Card>\n )}\n </div>\n )\n }\n}\n\nMuxVideo.propTypes = propTypes\n\nMuxVideo.defaultProps = {\n autoload: true,\n onCancel: undefined,\n onReady: undefined,\n}\n\nexport default MuxVideo\n"],"file":"Video.js"}
|
package/build/config.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _configMuxInput = _interopRequireDefault(require("config:mux-input"));
|
|
9
|
+
|
|
10
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
11
|
+
|
|
12
|
+
/* eslint-disable camelcase */
|
|
13
|
+
var _default = {
|
|
14
|
+
mp4_support: (_configMuxInput.default === null || _configMuxInput.default === void 0 ? void 0 : _configMuxInput.default.mp4_support) || 'none'
|
|
15
|
+
};
|
|
16
|
+
exports.default = _default;
|
|
17
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/config.js"],"names":["mp4_support"],"mappings":";;;;;;;AACA;;;;AADA;eAGe;AACbA,EAAAA,WAAW,EAAE,2GAAQA,WAAR,KAAuB;AADvB,C","sourcesContent":["/* eslint-disable camelcase */\nimport config from 'config:mux-input'\n\nexport default {\n mp4_support: config?.mp4_support || 'none',\n}\n"],"file":"config.js"}
|
package/config.dist.json
ADDED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sanity-plugin-mux-input",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.1.1",
|
|
4
4
|
"description": "An input component that integrates Sanity Studio with Mux video encoding/hosting service.",
|
|
5
5
|
"main": "build/index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -24,25 +24,25 @@
|
|
|
24
24
|
"author": "Sanity.io <hello@sanity.io>",
|
|
25
25
|
"license": "MIT",
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@mux/upchunk": "
|
|
28
|
-
"@sanity/icons": "^1.1
|
|
29
|
-
"@sanity/ui": "^0.
|
|
27
|
+
"@mux/upchunk": "2.2.2",
|
|
28
|
+
"@sanity/icons": "^1.2.1",
|
|
29
|
+
"@sanity/ui": "^0.36.12",
|
|
30
30
|
"@sanity/uuid": "^3.0.1",
|
|
31
31
|
"hls.js": "^0.11.0",
|
|
32
32
|
"jsonwebtoken": "^8.5.1",
|
|
33
|
-
"lodash": "^4.17.
|
|
34
|
-
"media-chrome": "^0.
|
|
33
|
+
"lodash": "^4.17.21",
|
|
34
|
+
"media-chrome": "^0.2.2",
|
|
35
35
|
"prop-types": "^15.7.2",
|
|
36
|
-
"react-icons": "^4.1
|
|
36
|
+
"react-icons": "^4.3.1",
|
|
37
37
|
"rxjs": "^6.5.3"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
|
-
"eslint": "^7.
|
|
41
|
-
"eslint-config-prettier": "^
|
|
42
|
-
"eslint-config-sanity": "^5.
|
|
43
|
-
"eslint-plugin-import": "^2.
|
|
44
|
-
"eslint-plugin-react": "^7.
|
|
45
|
-
"prettier": "^2.
|
|
40
|
+
"eslint": "^7.32.0",
|
|
41
|
+
"eslint-config-prettier": "^8.3.0",
|
|
42
|
+
"eslint-config-sanity": "^5.1.0",
|
|
43
|
+
"eslint-plugin-import": "^2.24.2",
|
|
44
|
+
"eslint-plugin-react": "^7.26.1",
|
|
45
|
+
"prettier": "^2.4.1",
|
|
46
46
|
"react": "^17.0.1",
|
|
47
47
|
"sanipack": "^2.0.1"
|
|
48
48
|
},
|