@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.
- package/dist/cjs.js +1314 -8
- package/dist/es.js +1307 -8
- package/package.json +5 -3
package/dist/es.js
CHANGED
|
@@ -1,8 +1,401 @@
|
|
|
1
|
-
import
|
|
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
|
-
|
|
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
|
-
|
|
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 };
|