@folklore/hooks 0.0.8 → 0.0.12

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 (3) hide show
  1. package/dist/cjs.js +1314 -8
  2. package/dist/es.js +1307 -8
  3. package/package.json +5 -3
package/dist/es.js CHANGED
@@ -1,8 +1,401 @@
1
- import { useEffect, useCallback, useState, useRef } from 'react';
2
- import EventsManager from '@folklore/events';
1
+ import _defineProperty from '@babel/runtime/helpers/defineProperty';
3
2
  import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
3
+ import { useState, useRef, useEffect, useMemo, useCallback } from 'react';
4
+ import { loadDailymotion, loadYouTube, loadVimeo } from '@folklore/services';
5
+ import createDebug from 'debug';
6
+ import EventsManager from '@folklore/events';
4
7
  import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
5
- import _defineProperty from '@babel/runtime/helpers/defineProperty';
8
+
9
+ function usePlayerCurrentTime(player) {
10
+ var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
11
+ _ref$id = _ref.id,
12
+ id = _ref$id === void 0 ? null : _ref$id,
13
+ _ref$disabled = _ref.disabled,
14
+ disabled = _ref$disabled === void 0 ? false : _ref$disabled,
15
+ _ref$updateInterval = _ref.updateInterval,
16
+ updateInterval = _ref$updateInterval === void 0 ? 1000 : _ref$updateInterval,
17
+ _ref$onUpdate = _ref.onUpdate,
18
+ customOnUpdate = _ref$onUpdate === void 0 ? null : _ref$onUpdate,
19
+ _ref$getCurrentTime = _ref.getCurrentTime,
20
+ getCurrentTime = _ref$getCurrentTime === void 0 ? function (p) {
21
+ return p.currentTime;
22
+ } : _ref$getCurrentTime;
23
+
24
+ var _useState = useState(0),
25
+ _useState2 = _slicedToArray(_useState, 2),
26
+ currentTime = _useState2[0],
27
+ setCurrentTime = _useState2[1];
28
+
29
+ var realCurrentTime = useRef(currentTime);
30
+ var lastIdRef = useRef(id);
31
+ var idChanged = lastIdRef.current !== id;
32
+
33
+ if (idChanged) {
34
+ realCurrentTime.current = 0;
35
+ lastIdRef.current = id;
36
+ } // Check time update
37
+
38
+
39
+ useEffect(function () {
40
+ if (disabled || player === null) {
41
+ return function () {};
42
+ }
43
+
44
+ var canceled = false;
45
+
46
+ var updateTime = function updateTime(time) {
47
+ if (canceled) {
48
+ return;
49
+ }
50
+
51
+ realCurrentTime.current = time;
52
+ setCurrentTime(time);
53
+
54
+ if (customOnUpdate !== null) {
55
+ customOnUpdate(time);
56
+ }
57
+ };
58
+
59
+ var interval = setInterval(function () {
60
+ var time = getCurrentTime(player);
61
+
62
+ if (typeof time.then !== 'undefined') {
63
+ time.then(updateTime);
64
+ } else {
65
+ updateTime(time);
66
+ }
67
+ }, updateInterval);
68
+ return function () {
69
+ canceled = true;
70
+ clearInterval(interval);
71
+ };
72
+ }, [id, player, setCurrentTime, disabled, updateInterval, getCurrentTime]);
73
+ return realCurrentTime.current;
74
+ }
75
+
76
+ function ownKeys$4(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; }
77
+
78
+ function _objectSpread$4(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$4(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$4(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
79
+ var noPlayerError$1 = new Error('No player');
80
+ var debug$3 = createDebug('folklore:video:youtube');
81
+
82
+ var useDailymotionPlayer = function useDailymotionPlayer() {
83
+ var id = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
84
+ var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
85
+ var _params$width = params.width,
86
+ width = _params$width === void 0 ? 0 : _params$width,
87
+ _params$height = params.height,
88
+ height = _params$height === void 0 ? 0 : _params$height,
89
+ _params$duration = params.duration,
90
+ duration = _params$duration === void 0 ? 0 : _params$duration,
91
+ _params$autoplay = params.autoplay,
92
+ autoplay = _params$autoplay === void 0 ? false : _params$autoplay,
93
+ _params$muted = params.muted,
94
+ initialMuted = _params$muted === void 0 ? false : _params$muted,
95
+ _params$start = params.start,
96
+ start = _params$start === void 0 ? 0 : _params$start,
97
+ _params$controls = params.controls,
98
+ controls = _params$controls === void 0 ? true : _params$controls,
99
+ _params$queueAutoplay = params.queueAutoplayNext,
100
+ queueAutoplayNext = _params$queueAutoplay === void 0 ? false : _params$queueAutoplay,
101
+ _params$queueEnable = params.queueEnable,
102
+ queueEnable = _params$queueEnable === void 0 ? false : _params$queueEnable,
103
+ _params$sharingEnable = params.sharingEnable,
104
+ sharingEnable = _params$sharingEnable === void 0 ? false : _params$sharingEnable,
105
+ _params$uiLogo = params.uiLogo,
106
+ uiLogo = _params$uiLogo === void 0 ? false : _params$uiLogo,
107
+ _params$uiStartScreen = params.uiStartScreenInfo,
108
+ uiStartScreenInfo = _params$uiStartScreen === void 0 ? true : _params$uiStartScreen,
109
+ _params$timeUpdateInt = params.timeUpdateInterval,
110
+ timeUpdateInterval = _params$timeUpdateInt === void 0 ? 1000 : _params$timeUpdateInt,
111
+ _params$onTimeUpdate = params.onTimeUpdate,
112
+ customOnTimeUpdate = _params$onTimeUpdate === void 0 ? null : _params$onTimeUpdate,
113
+ _params$getVideoId = params.getVideoId,
114
+ getVideoId = _params$getVideoId === void 0 ? function (url) {
115
+ if (url === null || url.match(/^https?:/) === null) {
116
+ return null;
117
+ }
118
+
119
+ var match = url.match(/\/video\/([^/?]+)/);
120
+ return match !== null ? match[1] : null;
121
+ } : _params$getVideoId;
122
+
123
+ var _useState = useState(typeof window.DM !== 'undefined'),
124
+ _useState2 = _slicedToArray(_useState, 2),
125
+ apiLoaded = _useState2[0],
126
+ setApiLoaded = _useState2[1];
127
+
128
+ var _useState3 = useState(false),
129
+ _useState4 = _slicedToArray(_useState3, 2),
130
+ playerReady = _useState4[0],
131
+ setPlayerReady = _useState4[1];
132
+
133
+ var _useState5 = useState(false),
134
+ _useState6 = _slicedToArray(_useState5, 2),
135
+ loaded = _useState6[0],
136
+ setLoaded = _useState6[1];
137
+
138
+ var apiRef = useRef(typeof window.DM !== 'undefined' ? window.DM : null);
139
+ var elementRef = useRef(null);
140
+ var playerRef = useRef(null);
141
+ var ready = apiLoaded && playerReady;
142
+ var videoId = useMemo(function () {
143
+ return getVideoId(id);
144
+ }, [id]);
145
+
146
+ var _useState7 = useState(initialMuted),
147
+ _useState8 = _slicedToArray(_useState7, 2),
148
+ muted = _useState8[0],
149
+ setMuted = _useState8[1];
150
+
151
+ var _useState9 = useState(initialMuted ? 0 : 1),
152
+ _useState10 = _slicedToArray(_useState9, 2),
153
+ volume = _useState10[0],
154
+ setVolumeState = _useState10[1];
155
+
156
+ var _useState11 = useState({
157
+ playing: false,
158
+ paused: false,
159
+ ended: false,
160
+ buffering: false,
161
+ adPlaying: false
162
+ }),
163
+ _useState12 = _slicedToArray(_useState11, 2),
164
+ playState = _useState12[0],
165
+ setPlayState = _useState12[1];
166
+
167
+ var _useState13 = useState({
168
+ width: width,
169
+ height: height,
170
+ duration: duration
171
+ }),
172
+ _useState14 = _slicedToArray(_useState13, 2),
173
+ metadata = _useState14[0],
174
+ setMetadata = _useState14[1]; // Load SDK
175
+
176
+
177
+ useEffect(function () {
178
+ var canceled = false;
179
+
180
+ if (!apiLoaded && id !== null) {
181
+ loadDailymotion().then(function (api) {
182
+ if (!canceled) {
183
+ apiRef.current = api;
184
+ setApiLoaded(true);
185
+ debug$3('API Loaded');
186
+ }
187
+ });
188
+ }
189
+
190
+ return function () {
191
+ canceled = true;
192
+ };
193
+ }, [id]); // Create or update player
194
+
195
+ useEffect(function () {
196
+ var _apiRef$current = apiRef.current,
197
+ DM = _apiRef$current === void 0 ? null : _apiRef$current;
198
+ var _playerRef$current = playerRef.current,
199
+ currentPlayer = _playerRef$current === void 0 ? null : _playerRef$current;
200
+ var _elementRef$current = elementRef.current,
201
+ element = _elementRef$current === void 0 ? null : _elementRef$current;
202
+
203
+ if (!apiLoaded || videoId === null || element === null) {
204
+ return;
205
+ }
206
+
207
+ var playerParams = {
208
+ 'autoplay-d': autoplay,
209
+ // muted,
210
+ start: start,
211
+ controls: controls,
212
+ 'queue-autoplay-next': queueAutoplayNext,
213
+ 'queue-enable': queueEnable,
214
+ 'sharing-enable': sharingEnable,
215
+ 'ui-logo': uiLogo,
216
+ 'ui-start-screen-info': uiStartScreenInfo
217
+ };
218
+ var player = currentPlayer;
219
+
220
+ if (player !== null) {
221
+ player.load(id, {
222
+ params: playerParams
223
+ });
224
+ } else {
225
+ player = DM.player(element, {
226
+ video: videoId,
227
+ width: width,
228
+ height: height,
229
+ params: playerParams
230
+ });
231
+ playerRef.current = player;
232
+ }
233
+
234
+ if (!playerReady) {
235
+ setPlayerReady(true);
236
+ }
237
+ }, [apiLoaded, elementRef.current, videoId, width, height, autoplay, muted, start, controls, queueAutoplayNext, queueEnable, sharingEnable, uiLogo, uiStartScreenInfo]);
238
+ useEffect(function () {
239
+ var _playerRef$current2 = playerRef.current,
240
+ player = _playerRef$current2 === void 0 ? null : _playerRef$current2;
241
+
242
+ if (player === null) {
243
+ return function () {};
244
+ }
245
+
246
+ var currentPlayState = playState;
247
+ var currentMetadata = metadata;
248
+
249
+ function onPlaybackReady() {
250
+ setLoaded(true);
251
+ }
252
+
253
+ function onLoadedMetadata() {
254
+ currentMetadata = _objectSpread$4(_objectSpread$4({}, currentMetadata), {}, {
255
+ duration: player.duration
256
+ });
257
+ setMetadata(currentMetadata);
258
+ }
259
+
260
+ function onDurationChange() {
261
+ currentMetadata = _objectSpread$4(_objectSpread$4({}, currentMetadata), {}, {
262
+ duration: player.duration
263
+ });
264
+ setMetadata(currentMetadata);
265
+ }
266
+
267
+ function onVolumeChange() {
268
+ setMuted(player.muted);
269
+ setVolumeState(player.volume);
270
+ }
271
+
272
+ function onPlay() {
273
+ currentPlayState = _objectSpread$4(_objectSpread$4({}, currentPlayState), {}, {
274
+ playing: true,
275
+ paused: false,
276
+ ended: false
277
+ });
278
+ setPlayState(currentPlayState);
279
+ }
280
+
281
+ function onPause() {
282
+ currentPlayState = _objectSpread$4(_objectSpread$4({}, currentPlayState), {}, {
283
+ playing: false,
284
+ paused: true,
285
+ ended: false
286
+ });
287
+ setPlayState(currentPlayState);
288
+ }
289
+
290
+ function onEnd() {
291
+ currentPlayState = _objectSpread$4(_objectSpread$4({}, currentPlayState), {}, {
292
+ playing: false,
293
+ paused: false,
294
+ ended: true
295
+ });
296
+ setPlayState(currentPlayState);
297
+ }
298
+
299
+ function onPlaying() {
300
+ currentPlayState = _objectSpread$4(_objectSpread$4({}, currentPlayState), {}, {
301
+ buffering: false
302
+ });
303
+ setPlayState(currentPlayState);
304
+ }
305
+
306
+ function onWaiting() {
307
+ currentPlayState = _objectSpread$4(_objectSpread$4({}, currentPlayState), {}, {
308
+ buffering: true
309
+ });
310
+ setPlayState(currentPlayState);
311
+ }
312
+
313
+ function onAdStart() {
314
+ currentPlayState = _objectSpread$4(_objectSpread$4({}, currentPlayState), {}, {
315
+ adPlaying: true
316
+ });
317
+ setPlayState(currentPlayState);
318
+ }
319
+
320
+ function onAdEnd() {
321
+ currentPlayState = _objectSpread$4(_objectSpread$4({}, currentPlayState), {}, {
322
+ adPlaying: false
323
+ });
324
+ setPlayState(currentPlayState);
325
+ }
326
+
327
+ player.addEventListener('playback_ready', onPlaybackReady);
328
+ player.addEventListener('loadedmetadata', onLoadedMetadata);
329
+ player.addEventListener('durationchange', onDurationChange);
330
+ player.addEventListener('volumechange', onVolumeChange);
331
+ player.addEventListener('play', onPlay);
332
+ player.addEventListener('pause', onPause);
333
+ player.addEventListener('video_end', onEnd);
334
+ player.addEventListener('playing', onPlaying);
335
+ player.addEventListener('waiting', onWaiting);
336
+ player.addEventListener('ad_start', onAdStart);
337
+ player.addEventListener('ad_end', onAdEnd);
338
+ return function () {
339
+ player.removeEventListener('playback_ready', onPlaybackReady);
340
+ player.removeEventListener('loadedmetadata', onLoadedMetadata);
341
+ player.removeEventListener('durationchange', onDurationChange);
342
+ player.removeEventListener('volumechange', onVolumeChange);
343
+ player.removeEventListener('play', onPlay);
344
+ player.removeEventListener('pause', onPause);
345
+ player.removeEventListener('video_end', onEnd);
346
+ player.removeEventListener('playing', onPlaying);
347
+ player.removeEventListener('waiting', onWaiting);
348
+ player.removeEventListener('ad_start', onAdStart);
349
+ player.removeEventListener('ad_end', onAdEnd);
350
+ };
351
+ }, [playerRef.current, playerReady, videoId, setLoaded, setPlayState, setMetadata, setVolumeState, setMuted]);
352
+ var play = useCallback(function () {
353
+ var player = playerRef.current;
354
+ return player !== null ? player.play() : Promise.reject(noPlayerError$1);
355
+ }, []);
356
+ var pause = useCallback(function () {
357
+ var player = playerRef.current;
358
+ return player !== null ? player.pause() : Promise.reject(noPlayerError$1);
359
+ }, []);
360
+ var setVolume = useCallback(function (newVolume) {
361
+ var player = playerRef.current;
362
+ return player !== null ? player.setVolume(newVolume) : Promise.reject(noPlayerError$1);
363
+ }, []);
364
+ var mute = useCallback(function () {
365
+ var player = playerRef.current;
366
+ return player !== null ? player.setMute(true) : Promise.reject(noPlayerError$1);
367
+ }, []);
368
+ var unmute = useCallback(function () {
369
+ var player = playerRef.current;
370
+ return player !== null ? player.setMute(false) : Promise.reject(noPlayerError$1);
371
+ }, []);
372
+ var seek = useCallback(function (time) {
373
+ var player = playerRef.current;
374
+ return player !== null ? player.seek(time) : Promise.reject(noPlayerError$1);
375
+ }, []);
376
+ var playing = playState.playing;
377
+ var currentTime = usePlayerCurrentTime(playerRef.current, {
378
+ id: videoId,
379
+ disabled: !playing || timeUpdateInterval === null,
380
+ updateInterval: timeUpdateInterval,
381
+ onUpdate: customOnTimeUpdate
382
+ });
383
+ return _objectSpread$4(_objectSpread$4({
384
+ ref: elementRef,
385
+ player: playerRef.current,
386
+ ready: ready,
387
+ play: play,
388
+ pause: pause,
389
+ mute: mute,
390
+ unmute: unmute,
391
+ setVolume: setVolume,
392
+ seek: seek,
393
+ currentTime: currentTime,
394
+ loaded: loaded,
395
+ muted: muted,
396
+ volume: volume
397
+ }, metadata), playState);
398
+ };
6
399
 
7
400
  var eventsManager$1 = typeof document !== 'undefined' ? new EventsManager(document) : null;
8
401
 
@@ -58,9 +451,212 @@ function useKeyboard() {
58
451
  useWindowEvent('keyup', keyMap !== null ? onKeyUp : null);
59
452
  }
60
453
 
61
- 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; }
454
+ function ownKeys$3(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; }
62
455
 
63
- 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; }
456
+ function _objectSpread$3(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$3(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$3(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
457
+ var debug$2 = createDebug('folklore:video:native');
458
+ var noPlayerError = new Error('No player');
459
+
460
+ var useNativeVideoPlayer = function useNativeVideoPlayer(url) {
461
+ var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
462
+ _ref$width = _ref.width,
463
+ width = _ref$width === void 0 ? 0 : _ref$width,
464
+ _ref$height = _ref.height,
465
+ height = _ref$height === void 0 ? 0 : _ref$height,
466
+ _ref$duration = _ref.duration,
467
+ duration = _ref$duration === void 0 ? 0 : _ref$duration,
468
+ _ref$initialMuted = _ref.initialMuted,
469
+ initialMuted = _ref$initialMuted === void 0 ? false : _ref$initialMuted,
470
+ _ref$timeUpdateInterv = _ref.timeUpdateInterval,
471
+ timeUpdateInterval = _ref$timeUpdateInterv === void 0 ? 1000 : _ref$timeUpdateInterv,
472
+ _ref$onTimeUpdate = _ref.onTimeUpdate,
473
+ customOnTimeUpdate = _ref$onTimeUpdate === void 0 ? null : _ref$onTimeUpdate;
474
+
475
+ var elementRef = useRef(null);
476
+
477
+ var _useState = useState(false),
478
+ _useState2 = _slicedToArray(_useState, 2),
479
+ loaded = _useState2[0],
480
+ setLoaded = _useState2[1];
481
+
482
+ var _useState3 = useState(initialMuted ? 0 : 1),
483
+ _useState4 = _slicedToArray(_useState3, 2),
484
+ volume = _useState4[0],
485
+ setVolumeState = _useState4[1];
486
+
487
+ var _useState5 = useState({
488
+ playing: false,
489
+ paused: false,
490
+ ended: false,
491
+ buffering: false
492
+ }),
493
+ _useState6 = _slicedToArray(_useState5, 2),
494
+ playState = _useState6[0],
495
+ setPlayState = _useState6[1];
496
+
497
+ var _useState7 = useState({
498
+ width: width,
499
+ height: height,
500
+ duration: duration
501
+ }),
502
+ _useState8 = _slicedToArray(_useState7, 2),
503
+ metadata = _useState8[0],
504
+ setMetadata = _useState8[1];
505
+
506
+ var play = useCallback(function () {
507
+ var player = elementRef.current;
508
+ return player !== null ? player.play() : Promise.reject(noPlayerError);
509
+ }, []);
510
+ var pause = useCallback(function () {
511
+ var player = elementRef.current;
512
+ return player !== null ? player.pause() : Promise.reject(noPlayerError);
513
+ }, []);
514
+ var setVolume = useCallback(function (newVolume) {
515
+ var player = elementRef.current;
516
+
517
+ if (player !== null) {
518
+ player.volume = newVolume;
519
+ return Promise.resolve(newVolume);
520
+ }
521
+
522
+ return Promise.reject(noPlayerError);
523
+ }, []);
524
+ var mute = useCallback(function () {
525
+ var player = elementRef.current;
526
+
527
+ if (player !== null) {
528
+ player.muted = true;
529
+ return Promise.resolve(true);
530
+ }
531
+
532
+ return Promise.reject(noPlayerError);
533
+ }, []);
534
+ var unmute = useCallback(function () {
535
+ var player = elementRef.current;
536
+
537
+ if (player !== null) {
538
+ player.muted = false;
539
+ return Promise.resolve(false);
540
+ }
541
+
542
+ return Promise.reject(noPlayerError);
543
+ }, []);
544
+ var seek = useCallback(function (newTime) {
545
+ var player = elementRef.current;
546
+
547
+ if (player !== null) {
548
+ player.currentTime = newTime;
549
+ return Promise.resolve(newTime);
550
+ }
551
+
552
+ return Promise.reject(noPlayerError);
553
+ }, []);
554
+ var setLoop = useCallback(function (newLoop) {
555
+ var player = elementRef.current;
556
+
557
+ if (player !== null) {
558
+ player.loop = newLoop;
559
+ return Promise.resolve(newLoop);
560
+ }
561
+
562
+ return Promise.reject(noPlayerError);
563
+ }, []); // Bind player events
564
+
565
+ useEffect(function () {
566
+ var player = elementRef.current;
567
+
568
+ if (player === null) {
569
+ return function () {};
570
+ }
571
+
572
+ var onCanPlay = function onCanPlay() {
573
+ setLoaded(true);
574
+ debug$2('onCanPlay [URL: %s]', url);
575
+ };
576
+
577
+ var onMetadataLoaded = function onMetadataLoaded() {
578
+ var newMetadata = {
579
+ duration: player.duration,
580
+ width: player.videoWidth,
581
+ height: player.videoHeight
582
+ };
583
+ setMetadata(newMetadata);
584
+ debug$2('onMetadataLoaded [URL: %s]', url);
585
+ };
586
+
587
+ var onPlay = function onPlay() {
588
+ setPlayState({
589
+ playing: true,
590
+ paused: false,
591
+ ended: false,
592
+ buffering: false
593
+ });
594
+ debug$2('onPlay [URL: %s]', url);
595
+ };
596
+
597
+ var onPause = function onPause() {
598
+ setPlayState({
599
+ playing: false,
600
+ paused: true,
601
+ ended: false,
602
+ buffering: false
603
+ });
604
+ debug$2('onPause [URL: %s]', url);
605
+ };
606
+
607
+ var onEnded = function onEnded() {
608
+ setPlayState({
609
+ playing: false,
610
+ paused: false,
611
+ ended: true,
612
+ buffering: false
613
+ });
614
+ debug$2('onEnded [URL: %s]', url);
615
+ };
616
+
617
+ debug$2('Bind events [URL: %s]', url);
618
+ player.addEventListener('canplay', onCanPlay);
619
+ player.addEventListener('metadataloaded', onMetadataLoaded);
620
+ player.addEventListener('play', onPlay);
621
+ player.addEventListener('pause', onPause);
622
+ player.addEventListener('ended', onEnded);
623
+ return function () {
624
+ debug$2('Unbind events [URL: %s]', url);
625
+ player.removeEventListener('canplay', onCanPlay);
626
+ player.removeEventListener('metadataloaded', onMetadataLoaded);
627
+ player.removeEventListener('play', onPlay);
628
+ player.removeEventListener('pause', onPause);
629
+ player.removeEventListener('ended', onEnded);
630
+ };
631
+ }, [url, elementRef.current, setPlayState, setMetadata, setVolumeState, setLoaded]);
632
+ var playing = playState.playing;
633
+ var currentTime = usePlayerCurrentTime(elementRef.current, {
634
+ id: url,
635
+ disabled: !playing || timeUpdateInterval === null,
636
+ updateInterval: timeUpdateInterval,
637
+ onUpdate: customOnTimeUpdate
638
+ });
639
+ return _objectSpread$3(_objectSpread$3({
640
+ ref: elementRef,
641
+ player: elementRef.current,
642
+ play: play,
643
+ pause: pause,
644
+ mute: mute,
645
+ unmute: unmute,
646
+ setVolume: setVolume,
647
+ seek: seek,
648
+ setLoop: setLoop,
649
+ ready: true,
650
+ currentTime: currentTime,
651
+ loaded: loaded,
652
+ muted: volume === 0,
653
+ volume: volume
654
+ }, metadata), playState);
655
+ };
656
+
657
+ function ownKeys$2(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; }
658
+
659
+ function _objectSpread$2(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$2(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$2(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
64
660
  var observersCache = new Map();
65
661
 
66
662
  var getOptionsKey = function getOptionsKey(_ref) {
@@ -83,7 +679,7 @@ var createObserver = function createObserver(Observer) {
83
679
 
84
680
  if (currentSubscriber !== null) {
85
681
  return subscribers.map(function (it) {
86
- return it.element === element && it.callbacks.indexOf(callback) === -1 ? _objectSpread(_objectSpread({}, it), {}, {
682
+ return it.element === element && it.callbacks.indexOf(callback) === -1 ? _objectSpread$2(_objectSpread$2({}, it), {}, {
87
683
  callbacks: [].concat(_toConsumableArray(it.callbacks), [callback])
88
684
  }) : it;
89
685
  }).filter(function (it) {
@@ -99,7 +695,7 @@ var createObserver = function createObserver(Observer) {
99
695
 
100
696
  var removeSubscriber = function removeSubscriber(element, callback) {
101
697
  return subscribers.map(function (it) {
102
- return it.element === element ? _objectSpread(_objectSpread({}, it), {}, {
698
+ return it.element === element ? _objectSpread$2(_objectSpread$2({}, it), {}, {
103
699
  callbacks: it.callbacks.filter(function (subCallback) {
104
700
  return subCallback !== callback;
105
701
  })
@@ -298,4 +894,707 @@ var useResizeObserver = function useResizeObserver() {
298
894
  }, resizeObserverInitialEntry);
299
895
  };
300
896
 
301
- export { getObserver, useDocumentEvent, useIntersectionObserver, useKeyboard, useObserver, useResizeObserver, useWindowEvent };
897
+ function ownKeys$1(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; }
898
+
899
+ function _objectSpread$1(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$1(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$1(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
900
+ var NO_PLAYER_ERROR$1 = new Error('No player');
901
+ var debug$1 = createDebug('folklore:video:youtube');
902
+
903
+ function useYouTubePlayer(id) {
904
+ var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
905
+ _ref$width = _ref.width,
906
+ width = _ref$width === void 0 ? 0 : _ref$width,
907
+ _ref$height = _ref.height,
908
+ height = _ref$height === void 0 ? 0 : _ref$height,
909
+ _ref$duration = _ref.duration,
910
+ duration = _ref$duration === void 0 ? 0 : _ref$duration,
911
+ _ref$autoplay = _ref.autoplay,
912
+ autoplay = _ref$autoplay === void 0 ? false : _ref$autoplay,
913
+ _ref$controls = _ref.controls,
914
+ controls = _ref$controls === void 0 ? true : _ref$controls,
915
+ _ref$timeUpdateInterv = _ref.timeUpdateInterval,
916
+ timeUpdateInterval = _ref$timeUpdateInterv === void 0 ? 1000 : _ref$timeUpdateInterv,
917
+ _ref$muted = _ref.muted,
918
+ initialMuted = _ref$muted === void 0 ? false : _ref$muted,
919
+ _ref$onVolumeChange = _ref.onVolumeChange,
920
+ customOnVolumeChange = _ref$onVolumeChange === void 0 ? null : _ref$onVolumeChange,
921
+ _ref$onTimeUpdate = _ref.onTimeUpdate,
922
+ customOnTimeUpdate = _ref$onTimeUpdate === void 0 ? null : _ref$onTimeUpdate,
923
+ _ref$getVideoId = _ref.getVideoId,
924
+ getVideoId = _ref$getVideoId === void 0 ? function (url) {
925
+ if (url === null || url.match(/^https?:/) === null) {
926
+ return null;
927
+ }
928
+
929
+ var regExp = /^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\?))\??v?=?([^#&?]*).*/;
930
+ var match = url.match(regExp);
931
+ return match && match[7].length === 11 ? match[7] : null;
932
+ } : _ref$getVideoId;
933
+
934
+ var _useState = useState(typeof window.YT !== 'undefined'),
935
+ _useState2 = _slicedToArray(_useState, 2),
936
+ apiLoaded = _useState2[0],
937
+ setApiLoaded = _useState2[1];
938
+
939
+ var apiRef = useRef(typeof window.YT !== 'undefined' ? window.YT : null);
940
+ var elementRef = useRef(null);
941
+ var playerRef = useRef(null);
942
+ var playerElementRef = useRef(elementRef.current);
943
+ var videoId = useMemo(function () {
944
+ return getVideoId(id);
945
+ }, [id]);
946
+
947
+ var _useState3 = useState(false),
948
+ _useState4 = _slicedToArray(_useState3, 2),
949
+ ready = _useState4[0],
950
+ setReady = _useState4[1];
951
+
952
+ var _useState5 = useState(initialMuted),
953
+ _useState6 = _slicedToArray(_useState5, 2),
954
+ muted = _useState6[0],
955
+ setMuted = _useState6[1];
956
+
957
+ var _useState7 = useState({
958
+ playing: false,
959
+ paused: false,
960
+ ended: false,
961
+ buffering: false
962
+ }),
963
+ _useState8 = _slicedToArray(_useState7, 2),
964
+ playState = _useState8[0],
965
+ setPlayState = _useState8[1];
966
+
967
+ var _useState9 = useState({
968
+ width: width,
969
+ height: height,
970
+ duration: duration
971
+ }),
972
+ _useState10 = _slicedToArray(_useState9, 2),
973
+ metadata = _useState10[0],
974
+ setMetadata = _useState10[1];
975
+
976
+ useEffect(function () {
977
+ var canceled = false;
978
+
979
+ if (!apiLoaded && videoId !== null) {
980
+ loadYouTube().then(function (api) {
981
+ if (!canceled) {
982
+ apiRef.current = api;
983
+ setApiLoaded(true);
984
+ debug$1('API Loaded');
985
+ }
986
+ });
987
+ }
988
+
989
+ return function () {
990
+ canceled = true;
991
+ };
992
+ }, [apiLoaded, videoId, setApiLoaded]);
993
+ var play = useCallback(function () {
994
+ var player = playerRef.current;
995
+ return player !== null && typeof player.playVideo !== 'undefined' ? Promise.resolve(player.playVideo()) : Promise.reject(NO_PLAYER_ERROR$1);
996
+ }, []);
997
+ var pause = useCallback(function () {
998
+ var player = playerRef.current;
999
+ return player !== null && typeof player.pauseVideo !== 'undefined' ? Promise.resolve(player.pauseVideo()) : Promise.reject(NO_PLAYER_ERROR$1);
1000
+ }, []);
1001
+ var setVolume = useCallback(function (volume) {
1002
+ var player = playerRef.current;
1003
+ var promise = player !== null && typeof player.setVolume !== 'undefined' ? Promise.resolve(player.setVolume(volume * 100)) : Promise.reject(NO_PLAYER_ERROR$1);
1004
+
1005
+ if (customOnVolumeChange) {
1006
+ customOnVolumeChange(volume);
1007
+ }
1008
+
1009
+ return promise;
1010
+ }, [customOnVolumeChange]);
1011
+ var mute = useCallback(function () {
1012
+ var player = playerRef.current;
1013
+ return (player !== null && typeof player.mute !== 'undefined' ? Promise.resolve(player.mute()) : Promise.reject(NO_PLAYER_ERROR$1)).then(function () {
1014
+ return setMuted(true);
1015
+ });
1016
+ }, [setMuted]);
1017
+ var unmute = useCallback(function () {
1018
+ var player = playerRef.current;
1019
+ return (player !== null && typeof player.unMute !== 'undefined' ? Promise.resolve(player.unMute()) : Promise.reject(NO_PLAYER_ERROR$1)).then(function () {
1020
+ return setMuted(false);
1021
+ });
1022
+ }, []);
1023
+ var seek = useCallback(function (time) {
1024
+ var player = playerRef.current;
1025
+ return player !== null && typeof player.seekTo !== 'undefined' ? Promise.resolve(player.seekTo(time)) : Promise.reject(NO_PLAYER_ERROR$1);
1026
+ }, []);
1027
+ var setLoop = useCallback(function (loop) {
1028
+ var player = playerRef.current;
1029
+ return player !== null && typeof player.setLoop !== 'undefined' ? Promise.resolve(player.setLoop(loop)) : Promise.reject(NO_PLAYER_ERROR$1);
1030
+ }, []);
1031
+ var destroyPlayer = useCallback(function () {
1032
+ if (playerRef.current !== null) {
1033
+ debug$1('Unset player');
1034
+ playerRef.current = null;
1035
+ }
1036
+ }, []); // Detect iframe switch and destroy player
1037
+
1038
+ useEffect(function () {
1039
+ var currentPlayer = playerRef.current;
1040
+
1041
+ if (playerElementRef.current !== elementRef.current && currentPlayer !== null) {
1042
+ debug$1('iFrame switched');
1043
+ destroyPlayer();
1044
+ }
1045
+ }); // Create player
1046
+
1047
+ useEffect(function () {
1048
+ var _apiRef$current = apiRef.current,
1049
+ YT = _apiRef$current === void 0 ? null : _apiRef$current;
1050
+ var _playerRef$current = playerRef.current,
1051
+ currentPlayer = _playerRef$current === void 0 ? null : _playerRef$current;
1052
+ var _elementRef$current = elementRef.current,
1053
+ element = _elementRef$current === void 0 ? null : _elementRef$current;
1054
+
1055
+ if (!apiLoaded || videoId === null || element === null) {
1056
+ destroyPlayer();
1057
+ return;
1058
+ }
1059
+
1060
+ var player = currentPlayer;
1061
+
1062
+ if (player !== null) {
1063
+ debug$1('Switch video [ID: %s]', videoId);
1064
+ player.loadVideoById(videoId);
1065
+ } else {
1066
+ debug$1('Create player [ID: %s]', videoId);
1067
+ var iframe = elementRef.current;
1068
+
1069
+ var onReady = function onReady(_ref2) {
1070
+ var target = _ref2.target;
1071
+ player = target;
1072
+ playerRef.current = target;
1073
+ setReady(true);
1074
+ var newDuration = target.getDuration();
1075
+
1076
+ if (newDuration !== metadata.duration) {
1077
+ setMetadata(_objectSpread$1(_objectSpread$1({}, metadata), {}, {
1078
+ duration: newDuration
1079
+ }));
1080
+ }
1081
+
1082
+ debug$1('onReady [ID: %s]', videoId);
1083
+ };
1084
+
1085
+ var onStateChange = function onStateChange(_ref3) {
1086
+ var state = _ref3.data;
1087
+ var newState = {
1088
+ playing: state === YT.PlayerState.PLAYING,
1089
+ paused: state === YT.PlayerState.PAUSED,
1090
+ ended: state === YT.PlayerState.ENDED,
1091
+ buffering: state === YT.PlayerState.BUFFERING
1092
+ };
1093
+ setPlayState(newState);
1094
+ var stateLabel = null;
1095
+
1096
+ if (newState.playing) {
1097
+ stateLabel = 'playing';
1098
+ } else if (newState.paused) {
1099
+ stateLabel = 'paused';
1100
+ } else if (newState.ended) {
1101
+ stateLabel = 'ended';
1102
+ } else if (newState.buffering) {
1103
+ stateLabel = 'buffering';
1104
+ } else if (state === -1) {
1105
+ stateLabel = 'not started';
1106
+ } else if (state === 0) {
1107
+ stateLabel = 'stopped';
1108
+ }
1109
+
1110
+ debug$1('onStateChange %s [ID: %s]', stateLabel, videoId);
1111
+ };
1112
+
1113
+ player = new YT.Player(iframe, {
1114
+ videoId: videoId,
1115
+ playerVars: {
1116
+ controls: controls,
1117
+ autoplay: autoplay ? 1 : 0,
1118
+ mute: initialMuted,
1119
+ playsinline: true,
1120
+ rel: 0,
1121
+ showinfo: 0,
1122
+ modestbranding: 1
1123
+ },
1124
+ events: {
1125
+ onReady: onReady,
1126
+ onStateChange: onStateChange
1127
+ }
1128
+ });
1129
+ playerElementRef.current = iframe;
1130
+ }
1131
+
1132
+ playerRef.current = player;
1133
+ }, [apiLoaded, videoId, setPlayState, setReady, setMetadata, destroyPlayer]);
1134
+ var playing = playState.playing;
1135
+ var getCurrentTime = useCallback(function (p) {
1136
+ return p.getCurrentTime();
1137
+ }, []);
1138
+ var currentTime = usePlayerCurrentTime(playerRef.current, {
1139
+ id: videoId,
1140
+ disabled: !playing || timeUpdateInterval === null,
1141
+ updateInterval: timeUpdateInterval,
1142
+ onUpdate: customOnTimeUpdate,
1143
+ getCurrentTime: getCurrentTime
1144
+ });
1145
+ return _objectSpread$1(_objectSpread$1({
1146
+ ref: elementRef,
1147
+ player: playerRef.current,
1148
+ play: play,
1149
+ pause: pause,
1150
+ mute: mute,
1151
+ unmute: unmute,
1152
+ setVolume: setVolume,
1153
+ seek: seek,
1154
+ setLoop: setLoop,
1155
+ ready: ready,
1156
+ currentTime: currentTime,
1157
+ muted: muted,
1158
+ loaded: ready
1159
+ }, metadata), playState);
1160
+ }
1161
+
1162
+ 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; }
1163
+
1164
+ 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; }
1165
+ var debug = createDebug('folklore:video:vimeo');
1166
+ var NO_PLAYER_ERROR = new Error('No player');
1167
+
1168
+ var useVimeoPlayer = function useVimeoPlayer(id) {
1169
+ var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
1170
+ _ref$width = _ref.width,
1171
+ width = _ref$width === void 0 ? 0 : _ref$width,
1172
+ _ref$height = _ref.height,
1173
+ height = _ref$height === void 0 ? 0 : _ref$height,
1174
+ _ref$duration = _ref.duration,
1175
+ duration = _ref$duration === void 0 ? 0 : _ref$duration,
1176
+ _ref$autoplay = _ref.autoplay,
1177
+ autoplay = _ref$autoplay === void 0 ? false : _ref$autoplay,
1178
+ _ref$autopause = _ref.autopause,
1179
+ autopause = _ref$autopause === void 0 ? true : _ref$autopause,
1180
+ _ref$byline = _ref.byline,
1181
+ byline = _ref$byline === void 0 ? false : _ref$byline,
1182
+ _ref$controls = _ref.controls,
1183
+ controls = _ref$controls === void 0 ? false : _ref$controls,
1184
+ _ref$initialMuted = _ref.initialMuted,
1185
+ initialMuted = _ref$initialMuted === void 0 ? false : _ref$initialMuted,
1186
+ _ref$timeUpdateInterv = _ref.timeUpdateInterval,
1187
+ timeUpdateInterval = _ref$timeUpdateInterv === void 0 ? 1000 : _ref$timeUpdateInterv,
1188
+ _ref$onTimeUpdate = _ref.onTimeUpdate,
1189
+ customOnTimeUpdate = _ref$onTimeUpdate === void 0 ? null : _ref$onTimeUpdate,
1190
+ _ref$getVideoId = _ref.getVideoId,
1191
+ getVideoId = _ref$getVideoId === void 0 ? function (url) {
1192
+ if (url === null || url.match(/^[0-9]+$/) !== null) {
1193
+ return url;
1194
+ }
1195
+
1196
+ var match = url.match(/\/[0-9]+/);
1197
+ return match !== null ? match[1] : null;
1198
+ } : _ref$getVideoId;
1199
+
1200
+ var _useState = useState(false),
1201
+ _useState2 = _slicedToArray(_useState, 2),
1202
+ apiLoaded = _useState2[0],
1203
+ setApiLoaded = _useState2[1];
1204
+
1205
+ var apiRef = useRef(null);
1206
+ var elementRef = useRef(null);
1207
+ var playerRef = useRef(null);
1208
+ var videoId = useMemo(function () {
1209
+ return getVideoId(id);
1210
+ }, [id]);
1211
+
1212
+ var _useState3 = useState(false),
1213
+ _useState4 = _slicedToArray(_useState3, 2),
1214
+ ready = _useState4[0],
1215
+ setReady = _useState4[1];
1216
+
1217
+ var _useState5 = useState(false),
1218
+ _useState6 = _slicedToArray(_useState5, 2),
1219
+ loaded = _useState6[0],
1220
+ setLoaded = _useState6[1];
1221
+
1222
+ var _useState7 = useState(initialMuted ? 0 : 1),
1223
+ _useState8 = _slicedToArray(_useState7, 2),
1224
+ volume = _useState8[0],
1225
+ setVolumeState = _useState8[1];
1226
+
1227
+ var _useState9 = useState({
1228
+ playing: false,
1229
+ paused: false,
1230
+ ended: false,
1231
+ buffering: false
1232
+ }),
1233
+ _useState10 = _slicedToArray(_useState9, 2),
1234
+ playState = _useState10[0],
1235
+ setPlayState = _useState10[1];
1236
+
1237
+ var _useState11 = useState({
1238
+ width: width,
1239
+ height: height,
1240
+ duration: duration
1241
+ }),
1242
+ _useState12 = _slicedToArray(_useState11, 2),
1243
+ metadata = _useState12[0],
1244
+ setMetadata = _useState12[1]; // Load SDK
1245
+
1246
+
1247
+ useEffect(function () {
1248
+ var canceled = false;
1249
+
1250
+ if (!apiLoaded && id !== null) {
1251
+ loadVimeo().then(function (api) {
1252
+ if (!canceled) {
1253
+ apiRef.current = api;
1254
+ setApiLoaded(true);
1255
+ debug('API Loaded');
1256
+ }
1257
+ });
1258
+ }
1259
+
1260
+ return function () {
1261
+ canceled = true;
1262
+ };
1263
+ }, [id]);
1264
+ var play = useCallback(function () {
1265
+ var player = playerRef.current;
1266
+ return player !== null ? player.play() : Promise.reject(NO_PLAYER_ERROR);
1267
+ }, []);
1268
+ var pause = useCallback(function () {
1269
+ var player = playerRef.current;
1270
+ return player !== null ? player.pause() : Promise.reject(NO_PLAYER_ERROR);
1271
+ }, []);
1272
+ var setVolume = useCallback(function (newVolume) {
1273
+ var player = playerRef.current;
1274
+ return player !== null ? player.setVolume(newVolume) : Promise.reject(NO_PLAYER_ERROR);
1275
+ }, []);
1276
+ var mute = useCallback(function () {
1277
+ var player = playerRef.current;
1278
+ return player !== null ? player.setVolume(0) : Promise.reject(NO_PLAYER_ERROR);
1279
+ }, []);
1280
+ var unmute = useCallback(function () {
1281
+ var player = playerRef.current;
1282
+ return player !== null ? player.setVolume(1) : Promise.reject(NO_PLAYER_ERROR);
1283
+ }, []);
1284
+ var seek = useCallback(function (time) {
1285
+ var player = playerRef.current;
1286
+ return player !== null ? player.setCurrentTime(time) : Promise.reject(NO_PLAYER_ERROR);
1287
+ }, []);
1288
+ var setLoop = useCallback(function (loop) {
1289
+ var player = playerRef.current;
1290
+ return player !== null ? player.setLoop(loop) : Promise.reject(NO_PLAYER_ERROR);
1291
+ }, []);
1292
+ var destroyVideo = useCallback(function () {
1293
+ var player = playerRef.current;
1294
+
1295
+ if (player !== null) {
1296
+ debug('Unload video');
1297
+ player.unload();
1298
+ }
1299
+
1300
+ if (player !== null) {
1301
+ debug('Unset video');
1302
+ playerRef.current = null;
1303
+ }
1304
+ }, []);
1305
+ var playerElementRef = useRef(elementRef.current);
1306
+ useEffect(function () {
1307
+ var currentPlayer = playerRef.current;
1308
+
1309
+ if (playerElementRef.current !== elementRef.current && currentPlayer !== null) {
1310
+ debug('iFrame switched');
1311
+ destroyVideo();
1312
+ }
1313
+ }); // Create player
1314
+
1315
+ useEffect(function () {
1316
+ var _apiRef$current = apiRef.current,
1317
+ Player = _apiRef$current === void 0 ? null : _apiRef$current;
1318
+ var _playerRef$current = playerRef.current,
1319
+ currentPlayer = _playerRef$current === void 0 ? null : _playerRef$current;
1320
+ var _elementRef$current = elementRef.current,
1321
+ element = _elementRef$current === void 0 ? null : _elementRef$current;
1322
+
1323
+ if (!apiLoaded || videoId === null || element === null) {
1324
+ destroyVideo();
1325
+ return;
1326
+ }
1327
+
1328
+ var player = currentPlayer;
1329
+
1330
+ if (player === null) {
1331
+ debug('Create player [ID: %s]', videoId);
1332
+ player = new Player(element, {
1333
+ id: videoId,
1334
+ autoplay: autoplay,
1335
+ autopause: autopause,
1336
+ byline: byline,
1337
+ controls: controls,
1338
+ muted: initialMuted,
1339
+ background: !controls
1340
+ });
1341
+ player.ready().then(function () {
1342
+ return setReady(true);
1343
+ }).catch(function (e) {
1344
+ debug('ERROR: %o', e);
1345
+ });
1346
+ playerElementRef.current = element;
1347
+ } else {
1348
+ debug('Load video [ID: %s]', videoId);
1349
+ player.loadVideo(videoId).catch(function (e) {
1350
+ debug('ERROR: %o', e);
1351
+ });
1352
+ }
1353
+
1354
+ playerRef.current = player;
1355
+ }, [apiLoaded, videoId, setReady, destroyVideo, setLoaded]); // Bind player events
1356
+
1357
+ useEffect(function () {
1358
+ var player = playerRef.current;
1359
+
1360
+ if (player === null) {
1361
+ return function () {};
1362
+ }
1363
+
1364
+ var canceled = false;
1365
+
1366
+ var onLoaded = function onLoaded() {
1367
+ Promise.all([player.getDuration(), player.getVideoWidth(), player.getVideoHeight(), player.getMuted()]).then(function (_ref2) {
1368
+ var _ref3 = _slicedToArray(_ref2, 4),
1369
+ newDuration = _ref3[0],
1370
+ newWidth = _ref3[1],
1371
+ newHeight = _ref3[2],
1372
+ newMuted = _ref3[3];
1373
+
1374
+ if (canceled) {
1375
+ return;
1376
+ }
1377
+
1378
+ var newMetadata = {
1379
+ duration: newDuration,
1380
+ width: newWidth,
1381
+ height: newHeight
1382
+ };
1383
+ setMetadata(newMetadata);
1384
+
1385
+ if (newMuted) {
1386
+ setVolumeState(0);
1387
+ }
1388
+
1389
+ setLoaded(true);
1390
+ });
1391
+ debug('onLoaded [ID: %s]', videoId);
1392
+ };
1393
+
1394
+ var onPlay = function onPlay() {
1395
+ setPlayState({
1396
+ playing: true,
1397
+ paused: false,
1398
+ ended: false,
1399
+ buffering: false
1400
+ });
1401
+ debug('onPlay [ID: %s]', videoId);
1402
+ player.getMuted().then(function (newMuted) {
1403
+ if (!canceled && newMuted) {
1404
+ setVolumeState(0);
1405
+ }
1406
+ }).catch(function () {});
1407
+ };
1408
+
1409
+ var onPause = function onPause() {
1410
+ setPlayState({
1411
+ playing: false,
1412
+ paused: true,
1413
+ ended: false,
1414
+ buffering: false
1415
+ });
1416
+ debug('onPause [ID: %s]', videoId);
1417
+ };
1418
+
1419
+ var onVolumeChange = function onVolumeChange(_ref4) {
1420
+ var newVolume = _ref4.volume;
1421
+ return setVolumeState(newVolume);
1422
+ };
1423
+
1424
+ var onEnded = function onEnded() {
1425
+ setPlayState({
1426
+ playing: false,
1427
+ paused: false,
1428
+ ended: true,
1429
+ buffering: false
1430
+ });
1431
+ };
1432
+
1433
+ var onBufferStart = function onBufferStart() {
1434
+ setPlayState({
1435
+ playing: true,
1436
+ paused: false,
1437
+ ended: false,
1438
+ buffering: true
1439
+ });
1440
+ debug('onBufferStart [ID: %s]', videoId);
1441
+ };
1442
+
1443
+ var onBufferEnded = function onBufferEnded() {
1444
+ setPlayState({
1445
+ playing: true,
1446
+ paused: false,
1447
+ ended: false,
1448
+ buffering: false
1449
+ });
1450
+ debug('onBufferStart [ID: %s]', videoId);
1451
+ };
1452
+
1453
+ debug('Bind events [ID: %s]', videoId);
1454
+ player.on('loaded', onLoaded);
1455
+ player.on('play', onPlay);
1456
+ player.on('pause', onPause);
1457
+ player.on('volumechange', onVolumeChange);
1458
+ player.on('ended', onEnded);
1459
+ player.on('bufferstart', onBufferStart);
1460
+ player.on('bufferend', onBufferEnded);
1461
+ return function () {
1462
+ canceled = true;
1463
+ debug('Unbind events [ID: %s]', videoId);
1464
+ player.off('loaded', onLoaded);
1465
+ player.off('play', onPlay);
1466
+ player.off('pause', onPause);
1467
+ player.off('volumechange', onVolumeChange);
1468
+ player.off('ended', onEnded);
1469
+ player.off('bufferstart', onBufferStart);
1470
+ player.off('bufferend', onBufferEnded);
1471
+ };
1472
+ }, [videoId, playerRef.current, setPlayState, setMetadata, setVolumeState, setLoaded]);
1473
+ var playing = playState.playing;
1474
+ var getCurrentTime = useCallback(function (p) {
1475
+ return p.getCurrentTime();
1476
+ }, []);
1477
+ var currentTime = usePlayerCurrentTime(playerRef.current, {
1478
+ id: videoId,
1479
+ disabled: !playing || timeUpdateInterval === null,
1480
+ updateInterval: timeUpdateInterval,
1481
+ onUpdate: customOnTimeUpdate,
1482
+ getCurrentTime: getCurrentTime
1483
+ });
1484
+ return _objectSpread(_objectSpread({
1485
+ ref: elementRef,
1486
+ player: playerRef.current,
1487
+ play: play,
1488
+ pause: pause,
1489
+ mute: mute,
1490
+ unmute: unmute,
1491
+ setVolume: setVolume,
1492
+ seek: seek,
1493
+ setLoop: setLoop,
1494
+ ready: ready,
1495
+ currentTime: currentTime,
1496
+ loaded: loaded,
1497
+ muted: volume === 0,
1498
+ volume: volume
1499
+ }, metadata), playState);
1500
+ };
1501
+
1502
+ function useVideoPlayer(params) {
1503
+ var _ref = params || {},
1504
+ _ref$service = _ref.service,
1505
+ service = _ref$service === void 0 ? null : _ref$service,
1506
+ _ref$videoId = _ref.videoId,
1507
+ videoId = _ref$videoId === void 0 ? null : _ref$videoId,
1508
+ _ref$url = _ref.url,
1509
+ url = _ref$url === void 0 ? null : _ref$url,
1510
+ _ref$onLoaded = _ref.onLoaded,
1511
+ customOnLoaded = _ref$onLoaded === void 0 ? null : _ref$onLoaded,
1512
+ _ref$onPlay = _ref.onPlay,
1513
+ customOnPlay = _ref$onPlay === void 0 ? null : _ref$onPlay,
1514
+ _ref$onPause = _ref.onPause,
1515
+ customOnPause = _ref$onPause === void 0 ? null : _ref$onPause,
1516
+ _ref$onEnd = _ref.onEnd,
1517
+ customOnEnd = _ref$onEnd === void 0 ? null : _ref$onEnd,
1518
+ _ref$onMetadataChange = _ref.onMetadataChange,
1519
+ customOnMetadataChange = _ref$onMetadataChange === void 0 ? null : _ref$onMetadataChange,
1520
+ _ref$onBufferStart = _ref.onBufferStart,
1521
+ customOnBufferStart = _ref$onBufferStart === void 0 ? null : _ref$onBufferStart,
1522
+ _ref$onBufferEnded = _ref.onBufferEnded,
1523
+ customOnBufferEnded = _ref$onBufferEnded === void 0 ? null : _ref$onBufferEnded;
1524
+
1525
+ var dailymotionPlayer = useDailymotionPlayer(service === 'dailymotion' ? videoId || url : null, params);
1526
+ var youtubePlayer = useYouTubePlayer(service === 'youtube' ? videoId || url : null, params);
1527
+ var vimeoPlayer = useVimeoPlayer(service === 'vimeo' ? videoId || url : null, params);
1528
+ var nativePlayer = useNativeVideoPlayer(url, params);
1529
+ var player = null;
1530
+
1531
+ if (service === 'dailymotion') {
1532
+ player = dailymotionPlayer;
1533
+ } else if (service === 'youtube') {
1534
+ player = youtubePlayer;
1535
+ } else if (service === 'vimeo') {
1536
+ player = vimeoPlayer;
1537
+ } else {
1538
+ player = nativePlayer;
1539
+ }
1540
+
1541
+ var _ref2 = player || {},
1542
+ _ref2$playing = _ref2.playing,
1543
+ playing = _ref2$playing === void 0 ? false : _ref2$playing,
1544
+ _ref2$paused = _ref2.paused,
1545
+ paused = _ref2$paused === void 0 ? false : _ref2$paused,
1546
+ _ref2$buffering = _ref2.buffering,
1547
+ buffering = _ref2$buffering === void 0 ? false : _ref2$buffering,
1548
+ _ref2$ended = _ref2.ended,
1549
+ ended = _ref2$ended === void 0 ? false : _ref2$ended,
1550
+ _ref2$ready = _ref2.ready,
1551
+ ready = _ref2$ready === void 0 ? false : _ref2$ready,
1552
+ _ref2$width = _ref2.width,
1553
+ metaWidth = _ref2$width === void 0 ? null : _ref2$width,
1554
+ _ref2$height = _ref2.height,
1555
+ metaHeight = _ref2$height === void 0 ? null : _ref2$height,
1556
+ _ref2$duration = _ref2.duration,
1557
+ metaDuration = _ref2$duration === void 0 ? null : _ref2$duration;
1558
+
1559
+ useEffect(function () {
1560
+ if (ready && customOnLoaded !== null) {
1561
+ customOnLoaded();
1562
+ }
1563
+ }, [ready, customOnLoaded]);
1564
+ useEffect(function () {
1565
+ if (playing && customOnPlay !== null) {
1566
+ customOnPlay();
1567
+ }
1568
+ }, [playing, customOnPlay]);
1569
+ useEffect(function () {
1570
+ if (paused && customOnPause !== null) {
1571
+ customOnPause();
1572
+ }
1573
+ }, [paused, customOnPause]);
1574
+ useEffect(function () {
1575
+ if (buffering && customOnBufferStart !== null) {
1576
+ customOnBufferStart();
1577
+ } else if (!buffering && customOnBufferEnded !== null) {
1578
+ customOnBufferEnded();
1579
+ }
1580
+ }, [buffering, customOnBufferStart, customOnBufferEnded]);
1581
+ useEffect(function () {
1582
+ if (ended && customOnEnd !== null) {
1583
+ customOnEnd();
1584
+ }
1585
+ }, [ended, customOnEnd]);
1586
+ useEffect(function () {
1587
+ var hasMetadata = metaWidth !== null || metaHeight !== null || metaDuration !== null;
1588
+
1589
+ if (hasMetadata && customOnMetadataChange !== null) {
1590
+ customOnMetadataChange({
1591
+ width: metaWidth,
1592
+ height: metaHeight,
1593
+ duration: metaDuration
1594
+ });
1595
+ }
1596
+ }, [metaWidth, metaHeight, metaDuration, customOnMetadataChange]);
1597
+ return player;
1598
+ }
1599
+
1600
+ export { getObserver, useDailymotionPlayer, useDocumentEvent, useIntersectionObserver, useKeyboard, useNativeVideoPlayer, useObserver, usePlayerCurrentTime, useResizeObserver, useVideoPlayer, useVimeoPlayer, useWindowEvent, useYouTubePlayer };