@tivio/sdk-react 3.6.2 → 4.0.0
Sign up to get free protection for your applications and to get access to all the features.
- package/README.md +117 -228
- package/README.md.bak +117 -228
- package/dist/index.d.ts +783 -292
- package/dist/index.js +1 -2
- package/dist/sdk-react.d.ts +2551 -0
- package/package.json +6 -5
- package/dist/index.js.LICENSE.txt +0 -347
package/README.md
CHANGED
@@ -1,7 +1,53 @@
|
|
1
1
|
# @tivio/sdk-react
|
2
2
|
|
3
|
+
@tivio/sdk-react provides everything which is necessary (components, data hooks etc.) to build a custom React application
|
4
|
+
above Tivio Studio. You can comfortably manage all you videos, settings such as application's screens and rows and also monetization
|
5
|
+
settings in the administration of Tivio Studio while having the freedom to build your own application.
|
6
|
+
|
3
7
|
## Changelog
|
4
8
|
|
9
|
+
* v4.0.0
|
10
|
+
* minor: Types cleanup
|
11
|
+
* MAJOR: Remove deprecated and unused stuff
|
12
|
+
* auth
|
13
|
+
* changePassword
|
14
|
+
* changeUserPhoto
|
15
|
+
* removeUserPhoto
|
16
|
+
* getPurchasedVodsWithInitializedVideos
|
17
|
+
* initializeUser
|
18
|
+
* createFreePurchase
|
19
|
+
* components
|
20
|
+
* VideoAdBanner
|
21
|
+
* getters
|
22
|
+
* getExportedConfig
|
23
|
+
* getChannelById
|
24
|
+
* getSectionById
|
25
|
+
* getWidgetById
|
26
|
+
* hooks
|
27
|
+
* useLastVideoByWidgetId
|
28
|
+
* useScreen
|
29
|
+
* useFreePurchase
|
30
|
+
* useWidget
|
31
|
+
* useChannel
|
32
|
+
* useSection
|
33
|
+
* useVideosInSection
|
34
|
+
* useSectionsInChannel
|
35
|
+
* useChannelsInWidget
|
36
|
+
* subscriptions
|
37
|
+
* subscribeToWidget
|
38
|
+
* subscribeToChannel
|
39
|
+
* subscribeToSection
|
40
|
+
* subscribeToVideosInSection
|
41
|
+
* subscribeToSectionsInChannel
|
42
|
+
* subscribeToChannelsInWidget
|
43
|
+
* subscribeToScreen
|
44
|
+
|
45
|
+
* v3.7.0
|
46
|
+
* minor: purchase contains created and updated
|
47
|
+
|
48
|
+
* v3.6.3
|
49
|
+
* patch: improve README.md
|
50
|
+
|
5
51
|
* v3.6.2
|
6
52
|
* patch: Fix types
|
7
53
|
|
@@ -185,46 +231,51 @@ await setUser('userId', { token: 'xxx'})
|
|
185
231
|
await setUser(null)
|
186
232
|
```
|
187
233
|
|
188
|
-
##
|
234
|
+
## Player
|
189
235
|
|
190
|
-
|
191
|
-
|
236
|
+
You can choose whether you will use complete player component provided by Tivio or you will wrap your existing player
|
237
|
+
with the Tivio Player Wrapper.
|
192
238
|
|
193
|
-
|
194
|
-
import { TivioWidget } from '@tivio/sdk-react'
|
239
|
+
### Tivio Player component
|
195
240
|
|
196
|
-
|
197
|
-
|
198
|
-
<TivioWidget id="theWidgetId" />
|
199
|
-
)
|
200
|
-
}
|
201
|
-
```
|
241
|
+
```javascript
|
242
|
+
import { useTivioData } from '@tivio/sdk-react'
|
202
243
|
|
203
|
-
|
244
|
+
const PlayerExample = () => {
|
245
|
+
const bundle = useTivioData()
|
204
246
|
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
function Screen() {
|
209
|
-
const ref = useRef<TivioWidgetRef>(null)
|
247
|
+
if (!bundle?.components?.WebPlayer) {
|
248
|
+
return <p>Loading...</p>
|
249
|
+
}
|
210
250
|
|
211
251
|
return (
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
252
|
+
<>
|
253
|
+
<div
|
254
|
+
style={{
|
255
|
+
height: 720,
|
256
|
+
width: 1280,
|
257
|
+
}}
|
258
|
+
>
|
259
|
+
<bundle.components.WebPlayer
|
260
|
+
id="player1"
|
261
|
+
className="web-player"
|
262
|
+
source="/videos/xxxxxxxxxxxxxxxxxxxx" // dynamically change this based on video you want to play
|
263
|
+
/>
|
264
|
+
</div>
|
265
|
+
</>
|
217
266
|
)
|
218
267
|
}
|
219
268
|
```
|
220
269
|
|
221
|
-
|
270
|
+
### Player wrapper
|
222
271
|
|
223
|
-
Player wrapper is the way how you can enhance your video player with Tivio features, such Tivio Ads. In order to start
|
272
|
+
Player wrapper is the way how you can enhance your video player with Tivio features, such Tivio Ads. In order to start
|
273
|
+
using Tivio player wrapper, wrap your player methods with PlayerWrapper, start using PlayerWrapper's methods
|
274
|
+
instead of them to control your playback and start sending player events to Tivio PlayerWrapper.
|
224
275
|
|
225
|
-
|
276
|
+
#### Wrap your player methods with Tivio player wrapper
|
226
277
|
|
227
|
-
```
|
278
|
+
```javascript
|
228
279
|
import { useTivioReadyData } from '@tivio/sdk-react'
|
229
280
|
|
230
281
|
function CustomPlayer() {
|
@@ -256,9 +307,9 @@ function CustomPlayer() {
|
|
256
307
|
}
|
257
308
|
```
|
258
309
|
|
259
|
-
|
310
|
+
#### Start using Tivio player wrapper methods to control playback
|
260
311
|
|
261
|
-
```
|
312
|
+
```javascript
|
262
313
|
// Channel source metadata, such as channel name, epg start and epg end are necessary
|
263
314
|
// for TV ad segment detection and application of ad strategies
|
264
315
|
const source = new ChannelSource(
|
@@ -292,9 +343,9 @@ function CustomPlayer() {
|
|
292
343
|
}
|
293
344
|
```
|
294
345
|
|
295
|
-
|
346
|
+
#### Start reporting player events to Tivio
|
296
347
|
|
297
|
-
```
|
348
|
+
```javascript
|
298
349
|
// Report that source is playing
|
299
350
|
playerWrapper.onStateChanged('playing')
|
300
351
|
|
@@ -310,9 +361,9 @@ function CustomPlayer() {
|
|
310
361
|
}
|
311
362
|
```
|
312
363
|
|
313
|
-
|
364
|
+
#### Start reporting playback-related errors to Tivio
|
314
365
|
|
315
|
-
```
|
366
|
+
```javascript
|
316
367
|
// Report that video failed to load (e.g. due to a wrong URI)
|
317
368
|
playerWrapper.onLoadError(new Error('video failed to load'))
|
318
369
|
|
@@ -322,87 +373,46 @@ function CustomPlayer() {
|
|
322
373
|
}
|
323
374
|
```
|
324
375
|
|
325
|
-
## Tivio DOM events
|
326
|
-
|
327
|
-
`TivioWidget` triggers these events on `window.document`.
|
328
|
-
|
329
|
-
1. To instruct the parent app to navigate to and focus a specific TivioWidget (e.g. after going back from a Tivio screen)
|
330
|
-
|
331
|
-
```typescript
|
332
|
-
document.addEventListener("tivio_request_goto", e => {
|
333
|
-
e.detail.widgetId; // string - Tivio widget ID to go navigate to in UI
|
334
|
-
});
|
335
|
-
```
|
336
|
-
2. To notify the parent app about context switch, i.e. where is the user located or what is he focusing
|
337
|
-
|
338
|
-
```typescript
|
339
|
-
document.addEventListener("tivio_context_switch", e => {
|
340
|
-
e.detail.context; // 'tivio' | 'parent' - where is the user located? - in Tivio or in parent app
|
341
|
-
|
342
|
-
// For context Tivio there are additional fields
|
343
|
-
e.detail.context; // 'tivio'
|
344
|
-
e.detail.contextLocation; // 'route' | 'overlay' | 'widget' - where in Tivio is the user located?
|
345
|
-
// - on a Tivio route, in parent app but looking at a full screen Tivio overlay,
|
346
|
-
// or in parent app and focus is on a Tivio widget
|
347
|
-
|
348
|
-
// For context Tivio contextLocation 'widget' there is an additional field of widget ID
|
349
|
-
e.detail.widgetId; // string - which Tivio widget is focused right now
|
350
|
-
});
|
351
|
-
```
|
352
|
-
3. To notify the parent app about whether it should be handling key input from RC (TV remote) or not. When inputHandler is 'tivio', the parent app should stop reacting to key input, when inputHandler is 'parent' the parent app should start reacting again.
|
353
|
-
|
354
|
-
```typescript
|
355
|
-
document.addEventListener("tivio_key_input_handling_change", e => {
|
356
|
-
e.detail.inputHandler; // 'tivio' | 'parent' - who should be handling RC input? - Tivio or parent app
|
357
|
-
});
|
358
|
-
```
|
359
|
-
|
360
376
|
## Data hooks
|
361
377
|
|
362
|
-
|
378
|
+
### useUser hook
|
379
|
+
Gets information about current user.
|
363
380
|
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
/**
|
370
|
-
* Use widget
|
371
|
-
* @param widgetId - widget id
|
372
|
-
*/
|
373
|
-
useWidget: (widgetId: string) => {
|
374
|
-
error: string | null;
|
375
|
-
data: Widget | null;
|
381
|
+
```ts
|
382
|
+
useUser: () => {
|
383
|
+
user: User | null
|
384
|
+
error: string | null
|
385
|
+
isInitialized: boolean
|
376
386
|
}
|
377
387
|
```
|
378
388
|
|
379
|
-
###
|
380
|
-
|
381
|
-
Gets Channel object and subscribes to its changes.
|
389
|
+
### useRowsInScreen hook
|
390
|
+
Gets array of Rows objects of specific screen and subscribes to its changes.
|
382
391
|
|
383
|
-
```
|
392
|
+
```ts
|
384
393
|
/**
|
385
|
-
* Use
|
386
|
-
* @param
|
394
|
+
* Use rows in screen
|
395
|
+
* @param screenId - screen id (from studio.tiv.io)
|
396
|
+
* @param options - subscription options
|
387
397
|
*/
|
388
|
-
|
389
|
-
|
390
|
-
|
398
|
+
useRowsInScreen: (screenId: string, options?: PaginationOptions) => {
|
399
|
+
pagination: PaginationInterface<Row> | null
|
400
|
+
error: Error | null
|
391
401
|
}
|
392
402
|
```
|
393
403
|
|
394
|
-
###
|
395
|
-
|
396
|
-
Gets Section object and subscribes to its changes.
|
404
|
+
### useItemsInRow hook
|
405
|
+
Gets array of row items objects of specific row and subscribes to its changes.
|
397
406
|
|
398
|
-
```
|
407
|
+
```ts
|
399
408
|
/**
|
400
|
-
* Use
|
401
|
-
* @param
|
409
|
+
* Use row items
|
410
|
+
* @param rowId - row ID
|
411
|
+
* @param options - subscription options
|
402
412
|
*/
|
403
|
-
|
404
|
-
|
405
|
-
|
413
|
+
useItemsInRow: (rowId: string, options?: SubscribeToItemsInRowOptions) => {
|
414
|
+
pagination: PaginationInterface<ItemsInRow> | null
|
415
|
+
error: Error | null
|
406
416
|
}
|
407
417
|
```
|
408
418
|
|
@@ -410,7 +420,7 @@ useSection: (sectionId: string) => {
|
|
410
420
|
|
411
421
|
Gets Video object and subscribes to its changes.
|
412
422
|
|
413
|
-
```
|
423
|
+
```ts
|
414
424
|
/**
|
415
425
|
* Use video
|
416
426
|
* @param videoId - video id
|
@@ -421,139 +431,18 @@ useVideo: (videoId: string) => {
|
|
421
431
|
}
|
422
432
|
```
|
423
433
|
|
424
|
-
###
|
425
|
-
|
426
|
-
Gets array of Channel objects and subscribes to their changes. It is possible to use `hasNextPage` and `fetchMore`
|
427
|
-
for pagination (returned in `data` object).
|
428
|
-
|
429
|
-
``` javascript
|
430
|
-
/**
|
431
|
-
* Use channels in widget
|
432
|
-
* @param widgetId - widget id
|
433
|
-
* @param [limit] - channels count, defaults to 10
|
434
|
-
*/
|
435
|
-
useChannelsInWidget: (widgetId: string, limit?: number) => {
|
436
|
-
error: string | null;
|
437
|
-
data: PaginationData<Channel> | null;
|
438
|
-
}
|
439
|
-
```
|
440
|
-
|
441
|
-
### useSectionsInChannel hook
|
442
|
-
|
443
|
-
Gets array of Section objects and subscribes to their changes. It is possible to use `hasNextPage` and `fetchMore`
|
444
|
-
for pagination (returned in `data` object).
|
445
|
-
|
446
|
-
``` javascript
|
447
|
-
/**
|
448
|
-
* Use section in channel
|
449
|
-
* @param channelId - channel id
|
450
|
-
* @param [limit] - sections count, defaults to 10
|
451
|
-
*/
|
452
|
-
useSectionsInChannel: (channelId: string, limit?: number) => {
|
453
|
-
error: string | null;
|
454
|
-
data: PaginationData<Section> | null;
|
455
|
-
}
|
456
|
-
```
|
457
|
-
|
458
|
-
### useVideosInSection hook
|
459
|
-
|
460
|
-
Gets array of Video objects and subscribes to their changes. It is possible to use `hasNextPage` and `fetchMore`
|
461
|
-
for pagination (returned in `data` object).
|
462
|
-
|
463
|
-
``` javascript
|
464
|
-
/**
|
465
|
-
* Use videos in section
|
466
|
-
* @param sectionId - section id
|
467
|
-
* @param [limit] - videos count, defaults to 10
|
468
|
-
*/
|
469
|
-
useVideosInSection: (sectionId: string, limit?: number) => {
|
470
|
-
error: string | null;
|
471
|
-
data: PaginationData<Video> | null;
|
472
|
-
}
|
473
|
-
```
|
474
|
-
|
475
|
-
### useScreen hook
|
476
|
-
Gets Screen object and subscribes to its changes.
|
477
|
-
|
478
|
-
```ts
|
479
|
-
/**
|
480
|
-
* Hook to fetch an app screen
|
481
|
-
* @param screenId - screen ID configured via studio.tiv.io
|
482
|
-
*/
|
483
|
-
useScreen: (screenId: string) => {
|
484
|
-
error: Error | null
|
485
|
-
data: Screen | null
|
486
|
-
}
|
487
|
-
|
488
|
-
// Example:
|
489
|
-
// Screens with their screenIds are configured via studio.tiv.io
|
490
|
-
const screenId = '890sdfvxoi'
|
491
|
-
const { error, data } = useScreen(screenId)
|
492
|
-
|
493
|
-
if (data) {
|
494
|
-
const screenName = data.name
|
495
|
-
const screenRows = data.rows
|
496
|
-
// ...
|
497
|
-
}
|
498
|
-
```
|
499
|
-
|
500
|
-
### useItemsInRow hook
|
501
|
-
|
502
|
-
Gets array of Video or Tag objects for a specified row. It is possible to use
|
503
|
-
`hasNextPage` and `fetchMore` for pagination (returned in `data` object).
|
504
|
-
|
505
|
-
*(Note: Does not subscribe to changes in video objects, in order to refresh data it is necessary to reload the app.)*
|
506
|
-
|
507
|
-
```ts
|
508
|
-
/**
|
509
|
-
* Hook to fetch row items for rows received from `useScreen()`
|
510
|
-
* @param id - row ID configured via studio.tiv.io
|
511
|
-
* @param options.limit - items limit
|
512
|
-
* @param options.noLimit - disable/enable pagination (will fetch all items)
|
513
|
-
* @param options.fecthTags - disable/enable tags fetching
|
514
|
-
*/
|
515
|
-
useItemsInRow: (id: string, options: {limit?: number, noLimit?: boolean, fecthTags?: boolean}) => {
|
516
|
-
error: Error | null
|
517
|
-
data: PaginationData<Video | Tag> | null
|
518
|
-
isLoading: boolean
|
519
|
-
}
|
520
|
-
|
521
|
-
// Example:
|
522
|
-
// Rows and their row ID can be loaded using useScreen() hook
|
523
|
-
const Row = ({ id }: { id: string}) => {
|
524
|
-
const rowData = useItemsInRow(id, 10)
|
525
|
-
|
526
|
-
return <div>
|
527
|
-
<div>Row id: {id}</div>
|
528
|
-
Count: ({rowData.data?.items.length})
|
529
|
-
<div>
|
530
|
-
{rowData.isLoading && <div>Loading...</div>}
|
531
|
-
{rowData.data?.items.map(item => (
|
532
|
-
<div>
|
533
|
-
<div>{item.name}</div>
|
534
|
-
<img src={item.cover} alt={item.name} />
|
535
|
-
</div>
|
536
|
-
))}
|
537
|
-
</div>
|
538
|
-
<button onClick={() => rowData.data?.fetchMore()}>more</button>
|
539
|
-
</div>
|
540
|
-
}
|
541
|
-
```
|
542
|
-
|
543
|
-
### useTaggedItems hook
|
544
|
-
|
545
|
-
Allows to fetch videos with given tags.
|
434
|
+
### useTaggedVideos hook
|
435
|
+
Gets videos with given tag IDs.
|
546
436
|
|
547
437
|
```ts
|
548
438
|
/**
|
549
|
-
*
|
550
|
-
* @param
|
551
|
-
* @param options
|
552
|
-
* @
|
553
|
-
* @param options.fecthTags - disable/enable tags fetching
|
439
|
+
* Use tagged videos
|
440
|
+
* @param tagIds - tag ids
|
441
|
+
* @param options - subscription options
|
442
|
+
* @public
|
554
443
|
*/
|
555
|
-
|
444
|
+
useTaggedVideos: (tagIds: string[], options?: SubscribeToItemsInRowOptions) => {
|
445
|
+
pagination: PaginationInterface<Video> | null
|
556
446
|
error: Error | null
|
557
|
-
data: PaginationData<Video> | null
|
558
447
|
}
|
559
448
|
```
|