sanity-plugin-mux-input 1.1.6 → 1.1.7

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 (82) hide show
  1. package/README.md +27 -11
  2. package/build/actions/assets.js +0 -7
  3. package/build/actions/assets.js.map +1 -1
  4. package/build/actions/secrets.js.map +1 -1
  5. package/build/actions/upload.js +13 -25
  6. package/build/actions/upload.js.map +1 -1
  7. package/build/clients/SanityClient.js +4 -3
  8. package/build/clients/SanityClient.js.map +1 -1
  9. package/build/clients/upChunkObservable.js +3 -3
  10. package/build/clients/upChunkObservable.js.map +1 -1
  11. package/build/components/EditThumbnailDialog.js +123 -0
  12. package/build/components/EditThumbnailDialog.js.map +1 -0
  13. package/build/components/FileInputButton.js +30 -39
  14. package/build/components/FileInputButton.js.map +1 -1
  15. package/build/components/Input.js +83 -367
  16. package/build/components/Input.js.map +1 -1
  17. package/build/components/InputBrowser.js +34 -0
  18. package/build/components/InputBrowser.js.map +1 -0
  19. package/build/components/InputError.js +28 -0
  20. package/build/components/InputError.js.map +1 -0
  21. package/build/components/MuxLogo.js +425 -7
  22. package/build/components/MuxLogo.js.map +1 -1
  23. package/build/components/Player.js +292 -0
  24. package/build/components/Player.js.map +1 -0
  25. package/build/components/Preview.js +37 -52
  26. package/build/components/Preview.js.map +1 -1
  27. package/build/components/SelectAsset.js +67 -135
  28. package/build/components/SelectAsset.js.map +1 -1
  29. package/build/components/Setup.js +39 -103
  30. package/build/components/Setup.js.map +1 -1
  31. package/build/components/SetupButton.js +45 -0
  32. package/build/components/SetupButton.js.map +1 -0
  33. package/build/components/SetupDialog.js +34 -0
  34. package/build/components/SetupDialog.js.map +1 -0
  35. package/build/components/SetupNotice.js +38 -0
  36. package/build/components/SetupNotice.js.map +1 -0
  37. package/build/components/Uploader.js +74 -289
  38. package/build/components/Uploader.js.map +1 -1
  39. package/build/components/Uploader.styles.js +306 -0
  40. package/build/components/Uploader.styles.js.map +1 -0
  41. package/build/components/VideoSource.js +82 -0
  42. package/build/components/VideoSource.js.map +1 -0
  43. package/build/components/VideoSource.styles.js +165 -0
  44. package/build/components/VideoSource.styles.js.map +1 -0
  45. package/build/index.js +3 -3
  46. package/build/index.js.map +1 -1
  47. package/build/schema/mux.video.js.map +1 -1
  48. package/build/schema/mux.videoAsset.js.map +1 -1
  49. package/build/util/areSecretsSignable.js +11 -0
  50. package/build/util/areSecretsSignable.js.map +1 -0
  51. package/build/util/extractFiles.js +12 -6
  52. package/build/util/extractFiles.js.map +1 -1
  53. package/build/util/generateJwt.js +6 -15
  54. package/build/util/generateJwt.js.map +1 -1
  55. package/build/util/getPlaybackId.js +18 -0
  56. package/build/util/getPlaybackId.js.map +1 -0
  57. package/build/util/getPlaybackPolicy.js +13 -0
  58. package/build/util/getPlaybackPolicy.js.map +1 -0
  59. package/build/util/getPosterSrc.js +27 -31
  60. package/build/util/getPosterSrc.js.map +1 -1
  61. package/build/util/getStoryboardSrc.js +16 -13
  62. package/build/util/getStoryboardSrc.js.map +1 -1
  63. package/build/util/getVideoSrc.js +16 -10
  64. package/build/util/getVideoSrc.js.map +1 -1
  65. package/build/util/isSigned.js +28 -0
  66. package/build/util/isSigned.js.map +1 -0
  67. package/build/util/types.js +2 -0
  68. package/build/util/types.js.map +1 -0
  69. package/package.json +43 -38
  70. package/sanity.json +2 -2
  71. package/build/components/Preview.css +0 -16
  72. package/build/components/SelectAsset.css +0 -56
  73. package/build/components/Setup.css +0 -7
  74. package/build/components/UploadPlaceholder.css +0 -81
  75. package/build/components/UploadPlaceholder.js +0 -92
  76. package/build/components/UploadPlaceholder.js.map +0 -1
  77. package/build/components/Uploader.css +0 -28
  78. package/build/components/Video.css +0 -21
  79. package/build/components/Video.js +0 -360
  80. package/build/components/Video.js.map +0 -1
  81. package/build/util/formatTime.js +0 -28
  82. package/build/util/formatTime.js.map +0 -1
package/README.md CHANGED
@@ -1,6 +1,12 @@
1
1
  # Mux Video Input Sanity Plugin
2
2
 
3
- This is a plugin which let you use [Mux](https://www.mux.com) video assets in your Sanity studio.
3
+ > **NOTE**
4
+ >
5
+ > This is the **Sanity Studio v2 version** of sanity-plugin-mux-input.
6
+ >
7
+ > For the v3 version, please refer to the [main branch](https://github.com/sanity-io/sanity-plugin-mux-input).
8
+
9
+ This is a plugin that let you use [Mux](https://www.mux.com) video assets in your Sanity studio.
4
10
 
5
11
  The Mux plugin for Sanity gives you a way to upload and preview videos easily.
6
12
 
@@ -43,11 +49,11 @@ Not familiar with Sanity? [Visit www.sanity.io](https://www.sanity.io/)
43
49
  The token is stored in the dataset as a document of the type `mux.apiKey` with the id `secrets.mux`.
44
50
  Having the ID be non-root ensures that only editors are able to see it.
45
51
 
46
- The Mux plugin will find it’s access tokens by fetching this document.
52
+ The Mux plugin will find its access tokens by fetching this document.
47
53
 
48
54
  # Playing videos in the frontend
49
55
 
50
- We have made an own player which supports poster images for the videos as set with this plugin, see [`sanity-mux-player`](https://github.com/sanity-io/sanity-mux-player)
56
+ We have made our own player which supports poster images for the videos as set with this plugin, see [`sanity-mux-player`](https://github.com/sanity-io/sanity-mux-player)
51
57
 
52
58
  You could use any player which supports HLS, just point the video source to:
53
59
 
@@ -69,7 +75,7 @@ To enable [static MP4 renditions](https://docs.mux.com/guides/video/enable-stati
69
75
  }
70
76
  ```
71
77
 
72
- Currently `mp4_support` is the only supported MUX option and this supports a value of either `standard` or `none` (the default).
78
+ Currently, `mp4_support` is the only supported MUX option and this supports a value of either `standard` or `none` (the default).
73
79
 
74
80
  # Contributing
75
81
 
@@ -78,19 +84,29 @@ Issues are actively monitored and PRs are welcome. When developing this plugin t
78
84
  1. Fork this repo.
79
85
  1. Install the sanity cli and create a sanity project: `npm install -g @sanity/cli && sanity init`. Follow the prompts, starting out with the blog template is a good way to go.
80
86
  1. `cd` into your project directory, run `npm install && npm start` - your sanity studio should be running on http://localhost:3333.
81
- 1. `cd` into the `plugins` director of your project.
87
+ 1. `cd` into the `plugins` directory of your project.
82
88
  1. Fork this repo and clone your fork into the `plugins` directory inside your project `git clone git@github.com:your-fork/sanity-plugin-mux-input.git`.
83
89
  1. Open `sanity.json`, go to the `plugins` array and add `mux-input`.
84
90
  1. Re-start the sanity studio server with `npm start`.
85
91
  1. Edit `schemas/post.js` and add follow the plugin documentation to add a `mux.video` type field.
86
- 1. Your studio should reload, and now when you edit the plugin code it should reload the studio, when you're done create a branch, put in a PR and a maintainer will review it. Thank you!
92
+ 1. Your studio should reload, and now when you edit the plugin code it should reload the studio, when you're done creating a branch, put in a PR and a maintainer will review it. Thank you!
93
+
94
+ # Publishing
87
95
 
88
- ## Publishing
96
+ Publishing is done by pushing [Conventional Commits](https://github.com/semantic-release/semantic-release#how-does-it-work).
97
+ On the [studio-v2](/tree/studio-v2) branch this will result in:
89
98
 
90
- ### Test
99
+ - a new version on the `latest` dist-tag.
100
+ - running `yarn add sanity-plugin-mux-input` or `npm i sanity-plugin-mux-input` will fetch the new version.
101
+ - running `sanity install mux-input` will fetch the new version.
102
+ - studio-v3 users are unaffected.
103
+ On the [main](/tree/main) branch this will result in:
104
+ - a new prerelease version on the `studio-v3` dist-tag.
105
+ - running `yarn add sanity-plugin-mux-input@studio-v3` or `npm i sanity-plugin-mux-input@studio-v3` will fetch the new version.
106
+ - running `sanity install mux-input` won't fetch the new version.
91
107
 
92
- `yarn semantic-release`
108
+ After Studio v3 turns stable this behavior will change. The v2 version will then be available on the `studio-v2` dist-tag, and `studio-v3` is upgraded to live on `latest`.
93
109
 
94
- ### Go live
110
+ # Test
95
111
 
96
- `yarn semantic-release -- --no-ci`
112
+ `npm test`
@@ -3,7 +3,6 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.default = void 0;
7
6
  exports.deleteAsset = deleteAsset;
8
7
  exports.getAsset = getAsset;
9
8
 
@@ -28,10 +27,4 @@ function getAsset(assetId) {
28
27
  method: 'GET'
29
28
  });
30
29
  }
31
-
32
- var _default = {
33
- getAsset,
34
- deleteAsset
35
- };
36
- exports.default = _default;
37
30
  //# sourceMappingURL=assets.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"assets.js","names":["deleteAsset","assetId","dataset","client","clientConfig","request","url","withCredentials","method","getAsset"],"sources":["../../src/actions/assets.js"],"sourcesContent":["import client from '../clients/SanityClient'\n\nexport function deleteAsset(assetId) {\n const dataset = client.clientConfig.dataset\n return client.request({\n url: `/addons/mux/assets/${dataset}/${assetId}`,\n withCredentials: true,\n method: 'DELETE',\n })\n}\n\nexport function getAsset(assetId) {\n const dataset = client.clientConfig.dataset\n return client.request({\n url: `/addons/mux/assets/${dataset}/data/${assetId}`,\n withCredentials: true,\n method: 'GET',\n })\n}\n\nexport default {getAsset, deleteAsset}\n"],"mappings":";;;;;;;;;AAAA;;;;AAEO,SAASA,WAAT,CAAqBC,OAArB,EAA8B;EACnC,IAAMC,OAAO,GAAGC,qBAAA,CAAOC,YAAP,CAAoBF,OAApC;EACA,OAAOC,qBAAA,CAAOE,OAAP,CAAe;IACpBC,GAAG,+BAAwBJ,OAAxB,cAAmCD,OAAnC,CADiB;IAEpBM,eAAe,EAAE,IAFG;IAGpBC,MAAM,EAAE;EAHY,CAAf,CAAP;AAKD;;AAEM,SAASC,QAAT,CAAkBR,OAAlB,EAA2B;EAChC,IAAMC,OAAO,GAAGC,qBAAA,CAAOC,YAAP,CAAoBF,OAApC;EACA,OAAOC,qBAAA,CAAOE,OAAP,CAAe;IACpBC,GAAG,+BAAwBJ,OAAxB,mBAAwCD,OAAxC,CADiB;IAEpBM,eAAe,EAAE,IAFG;IAGpBC,MAAM,EAAE;EAHY,CAAf,CAAP;AAKD;;eAEc;EAACC,QAAD;EAAWT;AAAX,C"}
1
+ {"version":3,"file":"assets.js","names":["deleteAsset","assetId","dataset","client","clientConfig","request","url","withCredentials","method","getAsset"],"sources":["../../src/actions/assets.ts"],"sourcesContent":["import client from '../clients/SanityClient'\nimport type {MuxAsset} from '../util/types'\n\nexport function deleteAsset(assetId: string) {\n const dataset = client.clientConfig.dataset\n return client.request<void>({\n url: `/addons/mux/assets/${dataset}/${assetId}`,\n withCredentials: true,\n method: 'DELETE',\n })\n}\n\nexport function getAsset(assetId: string) {\n const dataset = client.clientConfig.dataset\n return client.request<{data: MuxAsset}>({\n url: `/addons/mux/assets/${dataset}/data/${assetId}`,\n withCredentials: true,\n method: 'GET',\n })\n}\n"],"mappings":";;;;;;;;AAAA;;;;AAGO,SAASA,WAAT,CAAqBC,OAArB,EAAsC;EAC3C,IAAMC,OAAO,GAAGC,qBAAA,CAAOC,YAAP,CAAoBF,OAApC;EACA,OAAOC,qBAAA,CAAOE,OAAP,CAAqB;IAC1BC,GAAG,+BAAwBJ,OAAxB,cAAmCD,OAAnC,CADuB;IAE1BM,eAAe,EAAE,IAFS;IAG1BC,MAAM,EAAE;EAHkB,CAArB,CAAP;AAKD;;AAEM,SAASC,QAAT,CAAkBR,OAAlB,EAAmC;EACxC,IAAMC,OAAO,GAAGC,qBAAA,CAAOC,YAAP,CAAoBF,OAApC;EACA,OAAOC,qBAAA,CAAOE,OAAP,CAAiC;IACtCC,GAAG,+BAAwBJ,OAAxB,mBAAwCD,OAAxC,CADmC;IAEtCM,eAAe,EAAE,IAFqB;IAGtCC,MAAM,EAAE;EAH8B,CAAjC,CAAP;AAKD"}
@@ -1 +1 @@
1
- {"version":3,"file":"secrets.js","names":["cache","secrets","exists","fetchSecrets","Promise","resolve","client","fetch","then","Boolean","token","secretKey","enableSignedUrls","signingKeyId","signingKeyPrivate","saveSecrets","doc","_id","_type","createOrReplace","createSigningKeys","dataset","clientConfig","request","url","withCredentials","method","testSecrets","haveValidSigningKeys","res","data","id","e","console","error","testSecretsObservable","defer","observable"],"sources":["../../src/actions/secrets.js"],"sourcesContent":["import {defer} from 'rxjs'\nimport client from '../clients/SanityClient'\n\nconst cache = {\n secrets: null,\n exists: false,\n}\n\nexport function fetchSecrets() {\n if (cache.exists) {\n return Promise.resolve(cache)\n }\n\n return client.fetch('*[_id == \"secrets.mux\"][0]').then((secrets) => {\n cache.exists = Boolean(secrets)\n cache.secrets = {\n token: secrets?.token || null,\n secretKey: secrets?.secretKey || null,\n enableSignedUrls: secrets?.enableSignedUrls || false,\n signingKeyId: secrets?.signingKeyId || null,\n signingKeyPrivate: secrets?.signingKeyPrivate || null,\n }\n return cache\n })\n}\n\nexport function saveSecrets(token, secretKey, enableSignedUrls, signingKeyId, signingKeyPrivate) {\n const doc = {\n _id: 'secrets.mux',\n _type: 'mux.apiKey',\n token,\n secretKey,\n enableSignedUrls,\n signingKeyId,\n signingKeyPrivate,\n }\n\n return client.createOrReplace(doc).then(() => {\n cache.exists = true\n cache.secrets = {\n token,\n secretKey,\n enableSignedUrls,\n signingKeyId,\n signingKeyPrivate,\n }\n return cache.secrets\n })\n}\n\nexport function createSigningKeys() {\n const dataset = client.clientConfig.dataset\n return client.request({\n url: `/addons/mux/signing-keys/${dataset}`,\n withCredentials: true,\n method: 'POST',\n })\n}\n\nexport function testSecrets() {\n const dataset = client.clientConfig.dataset\n return client.request({\n url: `/addons/mux/secrets/${dataset}/test`,\n withCredentials: true,\n method: 'GET',\n })\n}\n\nexport async function haveValidSigningKeys(signingKeyId, signingKeyPrivate) {\n if (!(signingKeyId && signingKeyPrivate)) {\n return false\n }\n\n const dataset = client.clientConfig.dataset\n try {\n const res = await client.request({\n url: `/addons/mux/signing-keys/${dataset}/${signingKeyId}`,\n withCredentials: true,\n method: 'GET',\n })\n //\n // if this signing key is valid it will return { data: { id: 'xxxx' } }\n //\n return !!(res.data && res.data.id)\n } catch (e) {\n console.error('Error fetching signingKeyId', signingKeyId, 'assuming it is not valid')\n return false\n }\n}\n\nexport function testSecretsObservable() {\n const dataset = client.clientConfig.dataset\n return defer(() =>\n client.observable.request({\n url: `/addons/mux/secrets/${dataset}/test`,\n withCredentials: true,\n method: 'GET',\n })\n )\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"secrets.js","names":["cache","secrets","exists","fetchSecrets","Promise","resolve","client","fetch","then","Boolean","token","secretKey","enableSignedUrls","signingKeyId","signingKeyPrivate","saveSecrets","doc","_id","_type","createOrReplace","createSigningKeys","dataset","clientConfig","request","url","withCredentials","method","testSecrets","haveValidSigningKeys","res","data","id","e","console","error","testSecretsObservable","defer","observable"],"sources":["../../src/actions/secrets.ts"],"sourcesContent":["import {defer} from 'rxjs'\n\nimport client from '../clients/SanityClient'\nimport type {Secrets} from '../util/types'\n\nconst cache: {secrets: Secrets | null; exists: boolean} = {\n secrets: null,\n exists: false,\n}\n\nexport function fetchSecrets() {\n if (cache.exists) {\n return Promise.resolve(cache)\n }\n\n return client.fetch('*[_id == \"secrets.mux\"][0]').then((secrets: Secrets | null) => {\n cache.exists = Boolean(secrets)\n cache.secrets = {\n token: secrets?.token || null,\n secretKey: secrets?.secretKey || null,\n enableSignedUrls: secrets?.enableSignedUrls || false,\n signingKeyId: secrets?.signingKeyId || null,\n signingKeyPrivate: secrets?.signingKeyPrivate || null,\n }\n return cache\n })\n}\n\nexport function saveSecrets(\n token: string,\n secretKey: string,\n enableSignedUrls: boolean,\n signingKeyId: string,\n signingKeyPrivate: string\n) {\n const doc = {\n _id: 'secrets.mux',\n _type: 'mux.apiKey',\n token,\n secretKey,\n enableSignedUrls,\n signingKeyId,\n signingKeyPrivate,\n }\n\n return client.createOrReplace(doc).then(() => {\n cache.exists = true\n cache.secrets = {\n token,\n secretKey,\n enableSignedUrls,\n signingKeyId,\n signingKeyPrivate,\n }\n return cache.secrets\n })\n}\n\nexport function createSigningKeys() {\n const dataset = client.clientConfig.dataset\n return client.request<{data: {private_key: string; id: string; created_at: string}}>({\n url: `/addons/mux/signing-keys/${dataset}`,\n withCredentials: true,\n method: 'POST',\n })\n}\n\nexport function testSecrets() {\n const dataset = client.clientConfig.dataset\n return client.request<{status: boolean}>({\n url: `/addons/mux/secrets/${dataset}/test`,\n withCredentials: true,\n method: 'GET',\n })\n}\n\nexport async function haveValidSigningKeys(signingKeyId: string, signingKeyPrivate: string) {\n if (!(signingKeyId && signingKeyPrivate)) {\n return false\n }\n\n const dataset = client.clientConfig.dataset\n try {\n const res = await client.request<{data: {id: string; created_at: string}}>({\n url: `/addons/mux/signing-keys/${dataset}/${signingKeyId}`,\n withCredentials: true,\n method: 'GET',\n })\n //\n // if this signing key is valid it will return { data: { id: 'xxxx' } }\n //\n return !!(res.data && res.data.id)\n } catch (e) {\n console.error('Error fetching signingKeyId', signingKeyId, 'assuming it is not valid')\n return false\n }\n}\n\nexport function testSecretsObservable() {\n const dataset = client.clientConfig.dataset\n return defer(() =>\n client.observable.request<{status: boolean}>({\n url: `/addons/mux/secrets/${dataset}/test`,\n withCredentials: true,\n method: 'GET',\n })\n )\n}\n"],"mappings":"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"}
@@ -4,29 +4,28 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.cancelUpload = cancelUpload;
7
- exports.default = void 0;
8
7
  exports.getUpload = getUpload;
9
8
  exports.uploadFile = uploadFile;
10
9
  exports.uploadUrl = uploadUrl;
11
10
 
12
11
  var _uuid = require("@sanity/uuid");
13
12
 
14
- var _config = _interopRequireDefault(require("../config"));
15
-
16
13
  var _lodash = require("lodash");
17
14
 
18
15
  var _rxjs = require("rxjs");
19
16
 
20
17
  var _operators = require("rxjs/operators");
21
18
 
22
- var _assets = require("../actions/assets");
23
-
24
- var _secrets = require("../actions/secrets");
25
-
26
19
  var _SanityClient = _interopRequireDefault(require("../clients/SanityClient"));
27
20
 
28
21
  var _upChunkObservable = require("../clients/upChunkObservable");
29
22
 
23
+ var _config = _interopRequireDefault(require("../config"));
24
+
25
+ var _assets = require("./assets");
26
+
27
+ var _secrets = require("./secrets");
28
+
30
29
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
31
30
 
32
31
  function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
@@ -126,7 +125,9 @@ function uploadFile(file) {
126
125
  },
127
126
  body
128
127
  })).pipe((0, _operators.mergeMap)(result => {
129
- return (0, _upChunkObservable.createUpChunkObservable)(uuid, result.upload.url, file).pipe( // eslint-disable-next-line max-nested-callbacks
128
+ return (0, _upChunkObservable.createUpChunkObservable)(uuid, result.upload.url, file).pipe( // eslint-disable-next-line no-warning-comments
129
+ // @TODO type the observable events
130
+ // eslint-disable-next-line max-nested-callbacks
130
131
  (0, _operators.mergeMap)(event => {
131
132
  if (event.type !== 'success') {
132
133
  return (0, _rxjs.of)(event);
@@ -154,13 +155,6 @@ function getUpload(assetId) {
154
155
  });
155
156
  }
156
157
 
157
- var _default = {
158
- uploadUrl,
159
- uploadFile,
160
- getUpload
161
- };
162
- exports.default = _default;
163
-
164
158
  function pollUpload(uuid) {
165
159
  var maxTries = 10;
166
160
  var pollInterval;
@@ -232,7 +226,7 @@ function _updateAssetDocumentFromUpload() {
232
226
 
233
227
  function testFile(file) {
234
228
  if (typeof window !== 'undefined' && file instanceof window.File) {
235
- var fileOptions = optionsFromFile(file);
229
+ var fileOptions = optionsFromFile({}, file);
236
230
  return (0, _rxjs.of)(fileOptions);
237
231
  }
238
232
 
@@ -266,15 +260,9 @@ function optionsFromFile(opts, file) {
266
260
  return opts;
267
261
  }
268
262
 
269
- var fileOpts = {
270
- filename: opts.preserveFilename === false ? undefined : file.name,
271
- contentType: file.type
263
+ return {
264
+ name: opts.preserveFilename === false ? undefined : file.name,
265
+ type: file.type
272
266
  };
273
- return _objectSpread(_objectSpread({}, {
274
- filename: opts.preserveFilename === false ? undefined : file.name,
275
- contentType: file.type
276
- }), {}, {
277
- fileOpts
278
- });
279
267
  }
280
268
  //# sourceMappingURL=upload.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"upload.js","names":["cancelUpload","uuid","client","observable","request","url","clientConfig","dataset","withCredentials","method","uploadUrl","options","testUrl","pipe","switchMap","validUrl","concat","of","type","testSecretsObservable","json","status","throwError","Error","generateUuid","enableSignedUrls","muxBody","input","playback_policy","mp4_support","config","query","JSON","stringify","filename","split","slice","defer","headers","mergeMap","result","asset","results","document","id","uploadFile","file","testFile","fileOptions","body","createUpChunkObservable","upload","event","from","updateAssetDocumentFromUpload","doc","catchError","err","mergeMapTo","getUpload","assetId","pollUpload","maxTries","pollInterval","tries","Promise","resolve","reject","setInterval","data","asset_id","clearInterval","getAsset","_id","_type","playbackId","playback_ids","uploadId","createOrReplace","then","window","File","optionsFromFile","error","isString","parsed","URL","protocol","match","opts","fileOpts","preserveFilename","undefined","name","contentType"],"sources":["../../src/actions/upload.js"],"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"],"mappings":"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"}
1
+ {"version":3,"file":"upload.js","names":["cancelUpload","uuid","client","observable","request","url","clientConfig","dataset","withCredentials","method","uploadUrl","options","testUrl","pipe","switchMap","validUrl","concat","of","type","testSecretsObservable","json","status","throwError","Error","generateUuid","enableSignedUrls","muxBody","input","playback_policy","mp4_support","config","query","JSON","stringify","filename","split","slice","defer","headers","mergeMap","result","asset","results","document","id","uploadFile","file","testFile","fileOptions","body","createUpChunkObservable","upload","event","from","updateAssetDocumentFromUpload","doc","catchError","err","mergeMapTo","getUpload","assetId","pollUpload","maxTries","pollInterval","tries","Promise","resolve","reject","setInterval","data","asset_id","clearInterval","getAsset","_id","_type","playbackId","playback_ids","uploadId","createOrReplace","then","window","File","optionsFromFile","error","isString","parsed","URL","protocol","match","opts","name","preserveFilename","undefined"],"sources":["../../src/actions/upload.ts"],"sourcesContent":["/* eslint-disable camelcase */\nimport {uuid as generateUuid} from '@sanity/uuid'\nimport {isString} from 'lodash'\nimport {type Observable, concat, defer, from, of, throwError} from 'rxjs'\nimport {catchError, mergeMap, mergeMapTo, switchMap} from 'rxjs/operators'\n\nimport client from '../clients/SanityClient'\nimport {createUpChunkObservable} from '../clients/upChunkObservable'\nimport config from '../config'\nimport type {MuxAsset} from '../util/types'\nimport {getAsset} from './assets'\nimport {testSecretsObservable} from './secrets'\n\nexport function cancelUpload(uuid: string) {\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: string, options: {enableSignedUrls?: boolean} = {}) {\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: File, options: {enableSignedUrls?: boolean} = {}) {\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 sanityAssetId: string\n upload: {\n cors_origin: string\n id: string\n new_asset_settings: {\n mp4_support: 'standard' | 'none'\n passthrough: string\n playback_policies: ['public' | 'signed']\n }\n status: 'waiting'\n timeout: number\n url: string\n }\n }>({\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 no-warning-comments\n // @TODO type the observable events\n // eslint-disable-next-line max-nested-callbacks\n mergeMap((event: any) => {\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\ntype UploadResponse = {\n data: {\n asset_id: string\n cors_origin: string\n id: string\n new_asset_settings: {\n mp4_support: 'standard' | 'none'\n passthrough: string\n playback_policies: ['public' | 'signed']\n }\n status: string\n timeout: number\n }\n}\nexport function getUpload(assetId: string) {\n return client.request<UploadResponse>({\n url: `/addons/mux/uploads/${client.clientConfig.dataset}/${assetId}`,\n withCredentials: true,\n method: 'GET',\n })\n}\n\nfunction pollUpload(uuid: string): Promise<UploadResponse> {\n const maxTries = 10\n let pollInterval: number\n let tries = 0\n let assetId: string\n let upload: UploadResponse\n return new Promise((resolve, reject) => {\n pollInterval = (setInterval as typeof window.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: string) {\n let upload: UploadResponse\n let asset: {data: MuxAsset}\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: 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: string): Observable<string> {\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: {preserveFilename?: boolean}, file: File) {\n if (typeof window === 'undefined' || !(file instanceof window.File)) {\n return opts\n }\n return {\n name: opts.preserveFilename === false ? undefined : file.name,\n type: file.type,\n }\n}\n"],"mappings":"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"}
@@ -9,10 +9,11 @@ var _client = _interopRequireDefault(require("part:@sanity/base/client"));
9
9
 
10
10
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
11
 
12
- var isContentLakeSupported = typeof _client.default.withConfig === 'function';
13
- var client = isContentLakeSupported ? _client.default.withConfig({
12
+ var sanityClient = _client.default;
13
+ var isContentLakeSupported = typeof sanityClient.withConfig === 'function';
14
+ var client = isContentLakeSupported ? sanityClient.withConfig({
14
15
  apiVersion: '2021-05-17'
15
- }) : _client.default;
16
+ }) : sanityClient;
16
17
  exports.client = client;
17
18
  var _default = client;
18
19
  exports.default = _default;
@@ -1 +1 @@
1
- {"version":3,"file":"SanityClient.js","names":["isContentLakeSupported","sanityClient","withConfig","client","apiVersion"],"sources":["../../src/clients/SanityClient.js"],"sourcesContent":["import sanityClient from 'part:@sanity/base/client'\n\nconst isContentLakeSupported = typeof sanityClient.withConfig === 'function'\n\nexport const client = isContentLakeSupported\n ? sanityClient.withConfig({apiVersion: '2021-05-17'})\n : sanityClient\n\nexport default client\n"],"mappings":";;;;;;;AAAA;;;;AAEA,IAAMA,sBAAsB,GAAG,OAAOC,eAAA,CAAaC,UAApB,KAAmC,UAAlE;AAEO,IAAMC,MAAM,GAAGH,sBAAsB,GACxCC,eAAA,CAAaC,UAAb,CAAwB;EAACE,UAAU,EAAE;AAAb,CAAxB,CADwC,GAExCH,eAFG;;eAIQE,M"}
1
+ {"version":3,"file":"SanityClient.js","names":["sanityClient","_sanityClient","isContentLakeSupported","withConfig","client","apiVersion"],"sources":["../../src/clients/SanityClient.ts"],"sourcesContent":["import type {SanityClient} from '@sanity/client'\nimport _sanityClient from 'part:@sanity/base/client'\nconst sanityClient = _sanityClient as SanityClient\n\nconst isContentLakeSupported = typeof sanityClient.withConfig === 'function'\n\nexport const client = isContentLakeSupported\n ? sanityClient.withConfig({apiVersion: '2021-05-17'})\n : sanityClient\n\nexport default client\n"],"mappings":";;;;;;;AACA;;;;AACA,IAAMA,YAAY,GAAGC,eAArB;AAEA,IAAMC,sBAAsB,GAAG,OAAOF,YAAY,CAACG,UAApB,KAAmC,UAAlE;AAEO,IAAMC,MAAM,GAAGF,sBAAsB,GACxCF,YAAY,CAACG,UAAb,CAAwB;EAACE,UAAU,EAAE;AAAb,CAAxB,CADwC,GAExCL,YAFG;;eAIQI,M"}
@@ -18,7 +18,7 @@ function createUpChunkObservable(uuid, uploadUrl, source) {
18
18
  var upchunk = UpChunk.createUpload({
19
19
  endpoint: uploadUrl,
20
20
  file: source,
21
- chunkSize: 5120 // Uploads the file in ~5mb chunks
21
+ chunkSize: 30720 // Uploads the file in 30 MB chunks
22
22
 
23
23
  });
24
24
 
@@ -39,7 +39,7 @@ function createUpChunkObservable(uuid, uploadUrl, source) {
39
39
  });
40
40
  };
41
41
 
42
- var offlineHandler = data => {
42
+ var offlineHandler = () => {
43
43
  upchunk.pause();
44
44
  subscriber.next({
45
45
  type: 'pause',
@@ -47,7 +47,7 @@ function createUpChunkObservable(uuid, uploadUrl, source) {
47
47
  });
48
48
  };
49
49
 
50
- var onlineHandler = data => {
50
+ var onlineHandler = () => {
51
51
  upchunk.resume();
52
52
  subscriber.next({
53
53
  type: 'resume',
@@ -1 +1 @@
1
- {"version":3,"file":"upChunkObservable.js","names":["createUpChunkObservable","uuid","uploadUrl","source","Observable","subscriber","upchunk","UpChunk","createUpload","endpoint","file","chunkSize","successHandler","next","type","id","complete","errorHandler","data","error","Error","detail","message","progressHandler","percent","offlineHandler","pause","onlineHandler","resume","on","abort"],"sources":["../../src/clients/upChunkObservable.js"],"sourcesContent":["import * as UpChunk from '@mux/upchunk'\nimport {Observable} from 'rxjs'\n\nexport function createUpChunkObservable(uuid, uploadUrl, source) {\n return new Observable((subscriber) => {\n const upchunk = UpChunk.createUpload({\n endpoint: uploadUrl,\n file: source,\n chunkSize: 5120, // Uploads the file in ~5mb chunks\n })\n\n const successHandler = () => {\n subscriber.next({\n type: 'success',\n id: uuid,\n })\n subscriber.complete()\n }\n\n const errorHandler = (data) => subscriber.error(new Error(data.detail.message))\n\n const progressHandler = (data) => {\n return subscriber.next({type: 'progress', percent: data.detail})\n }\n\n const offlineHandler = (data) => {\n upchunk.pause()\n subscriber.next({\n type: 'pause',\n id: uuid,\n })\n }\n\n const onlineHandler = (data) => {\n upchunk.resume()\n subscriber.next({\n type: 'resume',\n id: uuid,\n })\n }\n\n upchunk.on('success', successHandler)\n upchunk.on('error', errorHandler)\n upchunk.on('progress', progressHandler)\n upchunk.on('offline', offlineHandler)\n upchunk.on('online', onlineHandler)\n\n return () => upchunk.abort()\n })\n}\n"],"mappings":";;;;;;;AAAA;;AACA;;;;;;AAEO,SAASA,uBAAT,CAAiCC,IAAjC,EAAuCC,SAAvC,EAAkDC,MAAlD,EAA0D;EAC/D,OAAO,IAAIC,gBAAJ,CAAgBC,UAAD,IAAgB;IACpC,IAAMC,OAAO,GAAGC,OAAO,CAACC,YAAR,CAAqB;MACnCC,QAAQ,EAAEP,SADyB;MAEnCQ,IAAI,EAAEP,MAF6B;MAGnCQ,SAAS,EAAE,IAHwB,CAGlB;;IAHkB,CAArB,CAAhB;;IAMA,IAAMC,cAAc,GAAG,MAAM;MAC3BP,UAAU,CAACQ,IAAX,CAAgB;QACdC,IAAI,EAAE,SADQ;QAEdC,EAAE,EAAEd;MAFU,CAAhB;MAIAI,UAAU,CAACW,QAAX;IACD,CAND;;IAQA,IAAMC,YAAY,GAAIC,IAAD,IAAUb,UAAU,CAACc,KAAX,CAAiB,IAAIC,KAAJ,CAAUF,IAAI,CAACG,MAAL,CAAYC,OAAtB,CAAjB,CAA/B;;IAEA,IAAMC,eAAe,GAAIL,IAAD,IAAU;MAChC,OAAOb,UAAU,CAACQ,IAAX,CAAgB;QAACC,IAAI,EAAE,UAAP;QAAmBU,OAAO,EAAEN,IAAI,CAACG;MAAjC,CAAhB,CAAP;IACD,CAFD;;IAIA,IAAMI,cAAc,GAAIP,IAAD,IAAU;MAC/BZ,OAAO,CAACoB,KAAR;MACArB,UAAU,CAACQ,IAAX,CAAgB;QACdC,IAAI,EAAE,OADQ;QAEdC,EAAE,EAAEd;MAFU,CAAhB;IAID,CAND;;IAQA,IAAM0B,aAAa,GAAIT,IAAD,IAAU;MAC9BZ,OAAO,CAACsB,MAAR;MACAvB,UAAU,CAACQ,IAAX,CAAgB;QACdC,IAAI,EAAE,QADQ;QAEdC,EAAE,EAAEd;MAFU,CAAhB;IAID,CAND;;IAQAK,OAAO,CAACuB,EAAR,CAAW,SAAX,EAAsBjB,cAAtB;IACAN,OAAO,CAACuB,EAAR,CAAW,OAAX,EAAoBZ,YAApB;IACAX,OAAO,CAACuB,EAAR,CAAW,UAAX,EAAuBN,eAAvB;IACAjB,OAAO,CAACuB,EAAR,CAAW,SAAX,EAAsBJ,cAAtB;IACAnB,OAAO,CAACuB,EAAR,CAAW,QAAX,EAAqBF,aAArB;IAEA,OAAO,MAAMrB,OAAO,CAACwB,KAAR,EAAb;EACD,CA5CM,CAAP;AA6CD"}
1
+ {"version":3,"file":"upChunkObservable.js","names":["createUpChunkObservable","uuid","uploadUrl","source","Observable","subscriber","upchunk","UpChunk","createUpload","endpoint","file","chunkSize","successHandler","next","type","id","complete","errorHandler","data","error","Error","detail","message","progressHandler","percent","offlineHandler","pause","onlineHandler","resume","on","abort"],"sources":["../../src/clients/upChunkObservable.ts"],"sourcesContent":["import * as UpChunk from '@mux/upchunk'\nimport {Observable} from 'rxjs'\n\nexport function createUpChunkObservable(uuid: string, uploadUrl: string, source: File) {\n return new Observable((subscriber) => {\n const upchunk = UpChunk.createUpload({\n endpoint: uploadUrl,\n file: source,\n chunkSize: 30720, // Uploads the file in 30 MB chunks\n })\n\n const successHandler = () => {\n subscriber.next({\n type: 'success',\n id: uuid,\n })\n subscriber.complete()\n }\n\n const errorHandler = (data: CustomEvent) => subscriber.error(new Error(data.detail.message))\n\n const progressHandler = (data: CustomEvent) => {\n return subscriber.next({type: 'progress', percent: data.detail})\n }\n\n const offlineHandler = () => {\n upchunk.pause()\n subscriber.next({\n type: 'pause',\n id: uuid,\n })\n }\n\n const onlineHandler = () => {\n upchunk.resume()\n subscriber.next({\n type: 'resume',\n id: uuid,\n })\n }\n\n upchunk.on('success', successHandler)\n upchunk.on('error', errorHandler)\n upchunk.on('progress', progressHandler)\n upchunk.on('offline', offlineHandler)\n upchunk.on('online', onlineHandler)\n\n return () => upchunk.abort()\n })\n}\n"],"mappings":";;;;;;;AAAA;;AACA;;;;;;AAEO,SAASA,uBAAT,CAAiCC,IAAjC,EAA+CC,SAA/C,EAAkEC,MAAlE,EAAgF;EACrF,OAAO,IAAIC,gBAAJ,CAAgBC,UAAD,IAAgB;IACpC,IAAMC,OAAO,GAAGC,OAAO,CAACC,YAAR,CAAqB;MACnCC,QAAQ,EAAEP,SADyB;MAEnCQ,IAAI,EAAEP,MAF6B;MAGnCQ,SAAS,EAAE,KAHwB,CAGjB;;IAHiB,CAArB,CAAhB;;IAMA,IAAMC,cAAc,GAAG,MAAM;MAC3BP,UAAU,CAACQ,IAAX,CAAgB;QACdC,IAAI,EAAE,SADQ;QAEdC,EAAE,EAAEd;MAFU,CAAhB;MAIAI,UAAU,CAACW,QAAX;IACD,CAND;;IAQA,IAAMC,YAAY,GAAIC,IAAD,IAAuBb,UAAU,CAACc,KAAX,CAAiB,IAAIC,KAAJ,CAAUF,IAAI,CAACG,MAAL,CAAYC,OAAtB,CAAjB,CAA5C;;IAEA,IAAMC,eAAe,GAAIL,IAAD,IAAuB;MAC7C,OAAOb,UAAU,CAACQ,IAAX,CAAgB;QAACC,IAAI,EAAE,UAAP;QAAmBU,OAAO,EAAEN,IAAI,CAACG;MAAjC,CAAhB,CAAP;IACD,CAFD;;IAIA,IAAMI,cAAc,GAAG,MAAM;MAC3BnB,OAAO,CAACoB,KAAR;MACArB,UAAU,CAACQ,IAAX,CAAgB;QACdC,IAAI,EAAE,OADQ;QAEdC,EAAE,EAAEd;MAFU,CAAhB;IAID,CAND;;IAQA,IAAM0B,aAAa,GAAG,MAAM;MAC1BrB,OAAO,CAACsB,MAAR;MACAvB,UAAU,CAACQ,IAAX,CAAgB;QACdC,IAAI,EAAE,QADQ;QAEdC,EAAE,EAAEd;MAFU,CAAhB;IAID,CAND;;IAQAK,OAAO,CAACuB,EAAR,CAAW,SAAX,EAAsBjB,cAAtB;IACAN,OAAO,CAACuB,EAAR,CAAW,OAAX,EAAoBZ,YAApB;IACAX,OAAO,CAACuB,EAAR,CAAW,UAAX,EAAuBN,eAAvB;IACAjB,OAAO,CAACuB,EAAR,CAAW,SAAX,EAAsBJ,cAAtB;IACAnB,OAAO,CAACuB,EAAR,CAAW,QAAX,EAAqBF,aAArB;IAEA,OAAO,MAAMrB,OAAO,CAACwB,KAAR,EAAb;EACD,CA5CM,CAAP;AA6CD"}
@@ -0,0 +1,123 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = EditThumbnailDialog;
7
+
8
+ var _autoId = require("@reach/auto-id");
9
+
10
+ var _ui = require("@sanity/ui");
11
+
12
+ var _react = _interopRequireWildcard(require("react"));
13
+
14
+ var _useDevicePixelRatio = require("use-device-pixel-ratio");
15
+
16
+ var _SanityClient = _interopRequireDefault(require("../clients/SanityClient"));
17
+
18
+ var _VideoSource = require("./VideoSource.styles");
19
+
20
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
+
22
+ 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); }
23
+
24
+ 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; }
25
+
26
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
27
+
28
+ 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."); }
29
+
30
+ 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); }
31
+
32
+ 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; }
33
+
34
+ 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; }
35
+
36
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
37
+
38
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
39
+
40
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
41
+
42
+ 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; }
43
+
44
+ function EditThumbnailDialog(_ref) {
45
+ var asset = _ref.asset,
46
+ getCurrentTime = _ref.getCurrentTime,
47
+ onClose = _ref.onClose,
48
+ videoReadyToPlay = _ref.videoReadyToPlay,
49
+ secrets = _ref.secrets;
50
+ var dialogId = "EditThumbnailDialog".concat((0, _autoId.useId)());
51
+ var nextTime = (0, _react.useMemo)(() => getCurrentTime(), [getCurrentTime]);
52
+ var assetWithNewThumbnail = (0, _react.useMemo)(() => _objectSpread(_objectSpread({}, asset), {}, {
53
+ thumbTime: nextTime
54
+ }), [asset, nextTime]);
55
+
56
+ var _useState = (0, _react.useState)(false),
57
+ _useState2 = _slicedToArray(_useState, 2),
58
+ saving = _useState2[0],
59
+ setSaving = _useState2[1];
60
+
61
+ var _useState3 = (0, _react.useState)(null),
62
+ _useState4 = _slicedToArray(_useState3, 2),
63
+ error = _useState4[0],
64
+ setError = _useState4[1];
65
+
66
+ var handleSave = (0, _react.useCallback)(() => {
67
+ setSaving(true);
68
+
69
+ _SanityClient.default.patch(asset._id).set({
70
+ thumbTime: nextTime
71
+ }).commit({
72
+ returnDocuments: false
73
+ }).catch(setError).finally(() => setSaving(false));
74
+ }, [asset._id, nextTime]);
75
+ var width = 300 * (0, _useDevicePixelRatio.getDevicePixelRatio)({
76
+ maxDpr: 2
77
+ });
78
+
79
+ if (error) {
80
+ // eslint-disable-next-line no-warning-comments
81
+ // @TODO handle errors more gracefully
82
+ throw error;
83
+ }
84
+
85
+ return /*#__PURE__*/_react.default.createElement(_ui.Dialog, {
86
+ id: dialogId,
87
+ header: "Edit thumbnail",
88
+ onClose: onClose,
89
+ footer: /*#__PURE__*/_react.default.createElement(_ui.Stack, {
90
+ padding: 3
91
+ }, /*#__PURE__*/_react.default.createElement(_ui.Button, {
92
+ key: "thumbnail",
93
+ mode: "ghost",
94
+ tone: "primary",
95
+ loading: saving,
96
+ onClick: handleSave,
97
+ disabled: videoReadyToPlay === false,
98
+ text: "Set new thumbnail"
99
+ }))
100
+ }, /*#__PURE__*/_react.default.createElement(_ui.Stack, {
101
+ space: 3,
102
+ padding: 3
103
+ }, /*#__PURE__*/_react.default.createElement(_ui.Stack, {
104
+ space: 2
105
+ }, /*#__PURE__*/_react.default.createElement(_ui.Text, {
106
+ size: 1,
107
+ weight: "semibold"
108
+ }, "Current:"), /*#__PURE__*/_react.default.createElement(_VideoSource.VideoThumbnail, {
109
+ asset: asset,
110
+ secrets: secrets,
111
+ width: width
112
+ })), /*#__PURE__*/_react.default.createElement(_ui.Stack, {
113
+ space: 2
114
+ }, /*#__PURE__*/_react.default.createElement(_ui.Text, {
115
+ size: 1,
116
+ weight: "semibold"
117
+ }, "New:"), /*#__PURE__*/_react.default.createElement(_VideoSource.VideoThumbnail, {
118
+ asset: assetWithNewThumbnail,
119
+ secrets: secrets,
120
+ width: width
121
+ }))));
122
+ }
123
+ //# sourceMappingURL=EditThumbnailDialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EditThumbnailDialog.js","names":["EditThumbnailDialog","asset","getCurrentTime","onClose","videoReadyToPlay","secrets","dialogId","useId","nextTime","useMemo","assetWithNewThumbnail","thumbTime","useState","saving","setSaving","error","setError","handleSave","useCallback","client","patch","_id","set","commit","returnDocuments","catch","finally","width","getDevicePixelRatio","maxDpr"],"sources":["../../src/components/EditThumbnailDialog.tsx"],"sourcesContent":["import {useId} from '@reach/auto-id'\nimport {Button, Dialog, Stack, Text} from '@sanity/ui'\nimport React, {useCallback, useMemo, useState} from 'react'\nimport {getDevicePixelRatio} from 'use-device-pixel-ratio'\n\nimport client from '../clients/SanityClient'\nimport type {Secrets, VideoAssetDocument} from '../util/types'\nimport {VideoThumbnail} from './VideoSource.styles'\n\nexport interface Props {\n asset: VideoAssetDocument\n getCurrentTime: () => number\n onClose: () => void\n videoReadyToPlay: boolean\n secrets: Secrets\n}\nexport default function EditThumbnailDialog({\n asset,\n getCurrentTime,\n onClose,\n videoReadyToPlay,\n secrets,\n}: Props) {\n const dialogId = `EditThumbnailDialog${useId()}`\n const nextTime = useMemo(() => getCurrentTime(), [getCurrentTime])\n const assetWithNewThumbnail = useMemo(() => ({...asset, thumbTime: nextTime}), [asset, nextTime])\n const [saving, setSaving] = useState(false)\n const [error, setError] = useState<Error | null>(null)\n const handleSave = useCallback(() => {\n setSaving(true)\n client\n .patch(asset._id!)\n .set({thumbTime: nextTime})\n .commit({returnDocuments: false})\n .catch(setError)\n .finally(() => setSaving(false))\n }, [asset._id, nextTime])\n const width = 300 * getDevicePixelRatio({maxDpr: 2})\n\n if (error) {\n // eslint-disable-next-line no-warning-comments\n // @TODO handle errors more gracefully\n throw error\n }\n\n return (\n <Dialog\n id={dialogId}\n header=\"Edit thumbnail\"\n onClose={onClose}\n footer={\n <Stack padding={3}>\n <Button\n key=\"thumbnail\"\n mode=\"ghost\"\n tone=\"primary\"\n loading={saving}\n onClick={handleSave}\n disabled={videoReadyToPlay === false}\n text=\"Set new thumbnail\"\n />\n </Stack>\n }\n >\n <Stack space={3} padding={3}>\n <Stack space={2}>\n <Text size={1} weight=\"semibold\">\n Current:\n </Text>\n <VideoThumbnail asset={asset} secrets={secrets} width={width} />\n </Stack>\n <Stack space={2}>\n <Text size={1} weight=\"semibold\">\n New:\n </Text>\n <VideoThumbnail asset={assetWithNewThumbnail} secrets={secrets} width={width} />\n </Stack>\n </Stack>\n </Dialog>\n )\n}\n"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;AACA;;AAEA;;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;AASe,SAASA,mBAAT,OAML;EAAA,IALRC,KAKQ,QALRA,KAKQ;EAAA,IAJRC,cAIQ,QAJRA,cAIQ;EAAA,IAHRC,OAGQ,QAHRA,OAGQ;EAAA,IAFRC,gBAEQ,QAFRA,gBAEQ;EAAA,IADRC,OACQ,QADRA,OACQ;EACR,IAAMC,QAAQ,gCAAyB,IAAAC,aAAA,GAAzB,CAAd;EACA,IAAMC,QAAQ,GAAG,IAAAC,cAAA,EAAQ,MAAMP,cAAc,EAA5B,EAAgC,CAACA,cAAD,CAAhC,CAAjB;EACA,IAAMQ,qBAAqB,GAAG,IAAAD,cAAA,EAAQ,sCAAWR,KAAX;IAAkBU,SAAS,EAAEH;EAA7B,EAAR,EAAiD,CAACP,KAAD,EAAQO,QAAR,CAAjD,CAA9B;;EACA,gBAA4B,IAAAI,eAAA,EAAS,KAAT,CAA5B;EAAA;EAAA,IAAOC,MAAP;EAAA,IAAeC,SAAf;;EACA,iBAA0B,IAAAF,eAAA,EAAuB,IAAvB,CAA1B;EAAA;EAAA,IAAOG,KAAP;EAAA,IAAcC,QAAd;;EACA,IAAMC,UAAU,GAAG,IAAAC,kBAAA,EAAY,MAAM;IACnCJ,SAAS,CAAC,IAAD,CAAT;;IACAK,qBAAA,CACGC,KADH,CACSnB,KAAK,CAACoB,GADf,EAEGC,GAFH,CAEO;MAACX,SAAS,EAAEH;IAAZ,CAFP,EAGGe,MAHH,CAGU;MAACC,eAAe,EAAE;IAAlB,CAHV,EAIGC,KAJH,CAIST,QAJT,EAKGU,OALH,CAKW,MAAMZ,SAAS,CAAC,KAAD,CAL1B;EAMD,CARkB,EAQhB,CAACb,KAAK,CAACoB,GAAP,EAAYb,QAAZ,CARgB,CAAnB;EASA,IAAMmB,KAAK,GAAG,MAAM,IAAAC,wCAAA,EAAoB;IAACC,MAAM,EAAE;EAAT,CAApB,CAApB;;EAEA,IAAId,KAAJ,EAAW;IACT;IACA;IACA,MAAMA,KAAN;EACD;;EAED,oBACE,6BAAC,UAAD;IACE,EAAE,EAAET,QADN;IAEE,MAAM,EAAC,gBAFT;IAGE,OAAO,EAAEH,OAHX;IAIE,MAAM,eACJ,6BAAC,SAAD;MAAO,OAAO,EAAE;IAAhB,gBACE,6BAAC,UAAD;MACE,GAAG,EAAC,WADN;MAEE,IAAI,EAAC,OAFP;MAGE,IAAI,EAAC,SAHP;MAIE,OAAO,EAAEU,MAJX;MAKE,OAAO,EAAEI,UALX;MAME,QAAQ,EAAEb,gBAAgB,KAAK,KANjC;MAOE,IAAI,EAAC;IAPP,EADF;EALJ,gBAkBE,6BAAC,SAAD;IAAO,KAAK,EAAE,CAAd;IAAiB,OAAO,EAAE;EAA1B,gBACE,6BAAC,SAAD;IAAO,KAAK,EAAE;EAAd,gBACE,6BAAC,QAAD;IAAM,IAAI,EAAE,CAAZ;IAAe,MAAM,EAAC;EAAtB,cADF,eAIE,6BAAC,2BAAD;IAAgB,KAAK,EAAEH,KAAvB;IAA8B,OAAO,EAAEI,OAAvC;IAAgD,KAAK,EAAEsB;EAAvD,EAJF,CADF,eAOE,6BAAC,SAAD;IAAO,KAAK,EAAE;EAAd,gBACE,6BAAC,QAAD;IAAM,IAAI,EAAE,CAAZ;IAAe,MAAM,EAAC;EAAtB,UADF,eAIE,6BAAC,2BAAD;IAAgB,KAAK,EAAEjB,qBAAvB;IAA8C,OAAO,EAAEL,OAAvD;IAAgE,KAAK,EAAEsB;EAAvE,EAJF,CAPF,CAlBF,CADF;AAmCD"}
@@ -3,22 +3,26 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.default = exports.FileInputButton = void 0;
6
+ exports.FileInputButton = void 0;
7
7
 
8
- var _ui = require("@sanity/ui");
8
+ var _autoId = require("@reach/auto-id");
9
9
 
10
- var _lodash = require("lodash");
10
+ var _ui = require("@sanity/ui");
11
11
 
12
- var _react = _interopRequireDefault(require("react"));
12
+ var _react = _interopRequireWildcard(require("react"));
13
13
 
14
14
  var _styledComponents = _interopRequireDefault(require("styled-components"));
15
15
 
16
- var _excluded = ["onSelect", "type"];
16
+ var _excluded = ["onSelect"];
17
17
 
18
18
  var _templateObject, _templateObject2;
19
19
 
20
20
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
21
 
22
+ 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); }
23
+
24
+ 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; }
25
+
22
26
  function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
23
27
 
24
28
  function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
@@ -31,45 +35,34 @@ var HiddenInput = _styledComponents.default.input(_templateObject || (_templateO
31
35
 
32
36
  var Label = _styledComponents.default.label(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n position: relative;\n"])));
33
37
 
34
- var handleSelect = _ref => {
35
- var event = _ref.event,
36
- onSelect = _ref.onSelect;
37
-
38
- if (onSelect) {
39
- onSelect(event.target.files);
40
- }
41
- };
38
+ var FileInputButton = _ref => {
39
+ var onSelect = _ref.onSelect,
40
+ props = _objectWithoutProperties(_ref, _excluded);
42
41
 
43
- var handleButtonClick = inputRef => {
44
- if (inputRef && inputRef.current) {
45
- inputRef.current.click();
46
- }
47
- };
48
-
49
- var FileInputButton = _ref2 => {
50
- var onSelect = _ref2.onSelect,
51
- _ref2$type = _ref2.type,
52
- type = _ref2$type === void 0 ? 'file' : _ref2$type,
53
- props = _objectWithoutProperties(_ref2, _excluded);
54
-
55
- var _inputId = _react.default.useRef((0, _lodash.uniqueId)('FileSelect'));
56
-
57
- var inputRef = _react.default.useRef(null);
42
+ var inputId = "FileSelect".concat((0, _autoId.useId)());
43
+ var inputRef = (0, _react.useRef)(null);
44
+ var handleSelect = (0, _react.useCallback)(event => {
45
+ if (onSelect) {
46
+ onSelect(event.target.files);
47
+ }
48
+ }, [onSelect]);
49
+ var handleButtonClick = (0, _react.useCallback)(() => {
50
+ var _inputRef$current;
58
51
 
52
+ return (_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 ? void 0 : _inputRef$current.click();
53
+ }, []);
59
54
  return /*#__PURE__*/_react.default.createElement(Label, {
60
- htmlFor: _inputId.current
55
+ htmlFor: inputId
61
56
  }, /*#__PURE__*/_react.default.createElement(HiddenInput, {
57
+ accept: "video/*",
62
58
  ref: inputRef,
63
- tabindex: "0",
64
- type: type,
65
- id: _inputId.current,
66
- onChange: event => handleSelect({
67
- event,
68
- onSelect
69
- }),
59
+ tabIndex: 0,
60
+ type: "file",
61
+ id: inputId,
62
+ onChange: handleSelect,
70
63
  value: ""
71
64
  }), /*#__PURE__*/_react.default.createElement(_ui.Button, _extends({
72
- onClick: () => handleButtonClick(inputRef),
65
+ onClick: handleButtonClick,
73
66
  mode: "default",
74
67
  tone: "primary",
75
68
  style: {
@@ -79,6 +72,4 @@ var FileInputButton = _ref2 => {
79
72
  };
80
73
 
81
74
  exports.FileInputButton = FileInputButton;
82
- var _default = FileInputButton;
83
- exports.default = _default;
84
75
  //# sourceMappingURL=FileInputButton.js.map