Skip to content
This repository was archived by the owner on Nov 25, 2022. It is now read-only.

Commit 02ed7bc

Browse files
authored
Merge pull request #137 from opentok/dev
v0.11.0
2 parents d954e18 + c4c80be commit 02ed7bc

9 files changed

+2433
-18
lines changed

.npmignore

+2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
example/
22
src/
33
test/
4+
types/index.test-d.ts
5+
types/tsconfig.json
46
karma.conf.js
57
.travis.yml
68
.npmignore

.travis.yml

+2-5
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,10 @@
11
sudo: required
2-
dist: trusty
2+
services:
3+
- xvfb
34
language: node_js
45
node_js:
56
- 6
67

7-
before_install:
8-
- export DISPLAY=:99.0
9-
- sh -e /etc/init.d/xvfb start
10-
118
script: ./node_modules/.bin/run-tests
129

1310
after_failure:

package.json

+6-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
{
22
"name": "opentok-react",
3-
"version": "0.10.0",
3+
"version": "0.11.0",
44
"description": "React components for OpenTok.js",
55
"main": "dist/index.js",
66
"scripts": {
7+
"types": "tsd types",
78
"test": "karma start",
89
"unit": "karma start --single-run",
910
"prepublish": "npm run build",
@@ -41,6 +42,7 @@
4142
"uuid": "^3.0.1"
4243
},
4344
"devDependencies": {
45+
"@types/react": "^16.9.34",
4446
"babel-cli": "^6.18.0",
4547
"babel-eslint": "^7.1.1",
4648
"babel-preset-es2015": "^6.9.0",
@@ -69,11 +71,13 @@
6971
"react-dom": "^15.5.0",
7072
"react-test-renderer": "^15.5.4",
7173
"travis-multirunner": "^4.5.0",
74+
"tsd": "^0.11.0",
7275
"watchify": "^3.8.0"
7376
},
7477
"browserify": {
7578
"transform": [
7679
"babelify"
7780
]
78-
}
81+
},
82+
"types": "./types/index.d.ts"
7983
}

src/OTSubscriber.js

+7-4
Original file line numberDiff line numberDiff line change
@@ -53,10 +53,13 @@ export default class OTSubscriber extends Component {
5353
this.setState({ subscriber: null });
5454
return;
5555
}
56-
57-
const container = document.createElement('div');
58-
container.setAttribute('class', 'OTSubscriberContainer');
59-
this.node.appendChild(container);
56+
const properties = this.props.properties || {};
57+
let container;
58+
if (properties.insertDefaultUI !== false) {
59+
container = document.createElement('div');
60+
container.setAttribute('class', 'OTSubscriberContainer');
61+
this.node.appendChild(container);
62+
}
6063

6164
this.subscriberId = uuid();
6265
const { subscriberId } = this;

types/index.d.ts

+72
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
import React from 'react';
2+
import { Session, Error, PublisherProperties, Stream, SubscriberProperties, PublisherEventHandlers, SessionEventHandlers, SubscriberEventHandlers, Subscriber, Publisher } from './opentok';
3+
4+
export interface OTPublisherRef {
5+
getPublisher(): Publisher;
6+
}
7+
8+
export interface OTPublisherProps {
9+
session?: Session;
10+
properties?: PublisherProperties;
11+
ref?: React.Ref<OTPublisherRef>;
12+
eventHandlers?: PublisherEventHandlers;
13+
onInit?: () => void;
14+
onPublish?: () => void;
15+
onError?: (error: Error) => void;
16+
}
17+
18+
export interface OTSessionProps {
19+
apiKey: string;
20+
sessionId: string;
21+
token: string;
22+
eventHandlers?: SessionEventHandlers;
23+
onConnect?: () => void;
24+
onError?: (error: Error) => void;
25+
}
26+
27+
export interface OTStreamsProps {
28+
children: React.ReactElement;
29+
session?: Session;
30+
streams?: Stream[];
31+
}
32+
33+
export interface OTSubscriberRef {
34+
getSubscriber(): Subscriber;
35+
}
36+
37+
export interface OTSubscriberProps {
38+
eventHandlers?: SubscriberEventHandlers;
39+
properties?: SubscriberProperties;
40+
ref?: React.Ref<OTSubscriberRef>;
41+
session?: Session;
42+
stream?: Stream;
43+
onSubscribe?: () => void;
44+
onError?: (error: Error) => void;
45+
}
46+
47+
export const OTPublisher: React.ComponentType<OTPublisherProps>;
48+
export const OTSession: React.ComponentType<OTSessionProps>;
49+
export const OTStreams: React.ComponentType<OTStreamsProps>;
50+
export const OTSubscriber: React.ComponentType<OTSubscriberProps>;
51+
52+
export interface CreateSessionOptions {
53+
apiKey: string;
54+
sessionId: string;
55+
token: string;
56+
onStreamsUpdated?: (streams: Stream[]) => void;
57+
}
58+
59+
export interface SessionHelper {
60+
session: Session;
61+
streams: Stream[];
62+
disconnect: () => void;
63+
}
64+
65+
export function createSession(options: CreateSessionOptions): SessionHelper;
66+
67+
export interface PreloadScriptProps {
68+
loadingDelegate?: React.ReactNode;
69+
opentokClientUrl?: string;
70+
}
71+
72+
export function preloadScript(component: React.ComponentType): React.ComponentType<PreloadScriptProps>;

types/index.test-d.ts

+183
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,183 @@
1+
import React from 'react';
2+
import { expectNotAssignable, expectAssignable } from 'tsd';
3+
import { OTSessionProps, OTPublisherProps, OTStreamsProps, OTSubscriberProps, OTSubscriberRef, OTPublisherRef } from ".";
4+
import { Error, Event, ArchiveEvent, SignalEvent, Session, AudioLevelUpdatedEvent, Stream, SubscriberProperties } from "./opentok";
5+
6+
/**
7+
* OTSessionProps
8+
*/
9+
expectNotAssignable<OTSessionProps>({});
10+
expectNotAssignable<OTSessionProps>({
11+
apiKey: ''
12+
});
13+
expectNotAssignable<OTSessionProps>({
14+
apiKey: '',
15+
sessionId: ''
16+
});
17+
18+
expectAssignable<OTSessionProps>({
19+
apiKey: '',
20+
sessionId: '',
21+
token: ''
22+
});
23+
expectAssignable<OTSessionProps>({
24+
apiKey: '',
25+
sessionId: '',
26+
token: '',
27+
eventHandlers: {}
28+
});
29+
expectAssignable<OTSessionProps>({
30+
apiKey: '',
31+
sessionId: '',
32+
token: '',
33+
eventHandlers: {
34+
archiveStarted: (event: ArchiveEvent) => {}
35+
}
36+
});
37+
expectAssignable<OTSessionProps>({
38+
apiKey: '',
39+
sessionId: '',
40+
token: '',
41+
eventHandlers: {
42+
archiveStarted: (event: ArchiveEvent) => {},
43+
'signal:foo': (event: SignalEvent) => {},
44+
'archiveStarted streamCreated': (event: Event) => {}
45+
}
46+
});
47+
48+
declare const session: Session;
49+
declare const publisherRef: React.RefObject<OTPublisherRef>;
50+
51+
/**
52+
* OTPublisherProps
53+
*/
54+
expectNotAssignable<OTPublisherProps>({
55+
session: null
56+
});
57+
expectAssignable<OTPublisherProps>({
58+
session,
59+
});
60+
expectAssignable<OTPublisherProps>({
61+
session,
62+
properties: {}
63+
});
64+
expectAssignable<OTPublisherProps>({
65+
properties: {
66+
audioBitrate: 10000
67+
}
68+
});
69+
expectAssignable<OTPublisherProps>({
70+
eventHandlers: {}
71+
});
72+
expectAssignable<OTPublisherProps>({
73+
ref: undefined
74+
});
75+
expectAssignable<OTPublisherProps>({
76+
ref: (instance: OTPublisherRef | null) => {}
77+
});
78+
expectAssignable<OTPublisherProps>({
79+
ref: publisherRef
80+
});
81+
expectAssignable<OTPublisherProps>({
82+
eventHandlers: {
83+
accessAllowed: (event: Event) => undefined,
84+
accessDenied: (event: Event<'accessDenied'>) => undefined,
85+
destroyed: event => undefined,
86+
audioLevelUpdated: (event: AudioLevelUpdatedEvent) => undefined
87+
}
88+
});
89+
expectAssignable<OTPublisherProps>({
90+
onInit: () => undefined
91+
});
92+
expectAssignable<OTPublisherProps>({
93+
onPublish: () => undefined
94+
});
95+
expectAssignable<OTPublisherProps>({
96+
onError: () => undefined
97+
});
98+
expectAssignable<OTPublisherProps>({
99+
onError: (error: Error) => undefined
100+
});
101+
102+
declare const node: React.ReactNode;
103+
declare const nodeArray: React.ReactNodeArray;
104+
declare const element: React.ReactElement;
105+
declare const stream: Stream;
106+
107+
/**
108+
* OTStreamsProps
109+
*/
110+
expectNotAssignable<OTStreamsProps>({});
111+
expectNotAssignable<OTStreamsProps>({ session });
112+
expectNotAssignable<OTStreamsProps>({ session, streams: [] });
113+
expectNotAssignable<OTStreamsProps>({
114+
children: node
115+
});
116+
expectNotAssignable<OTStreamsProps>({
117+
children: nodeArray
118+
});
119+
expectAssignable<OTStreamsProps>({
120+
children: element
121+
});
122+
expectAssignable<OTStreamsProps>({
123+
children: element,
124+
session
125+
});
126+
expectAssignable<OTStreamsProps>({
127+
children: element,
128+
streams: []
129+
});
130+
expectAssignable<OTStreamsProps>({
131+
children: element,
132+
streams: [stream]
133+
});
134+
135+
declare const subscriberProperties: SubscriberProperties;
136+
declare const subscriberRef: React.RefObject<OTSubscriberRef>;
137+
138+
/**
139+
* OTSubscriberProps
140+
*/
141+
expectAssignable<OTSubscriberProps>({});
142+
expectAssignable<OTSubscriberProps>({ session });
143+
expectAssignable<OTSubscriberProps>({ stream });
144+
expectAssignable<OTSubscriberProps>({ onSubscribe: () => undefined });
145+
expectAssignable<OTSubscriberProps>({ onError: () => undefined });
146+
expectAssignable<OTSubscriberProps>({ onError: error => undefined });
147+
expectAssignable<OTSubscriberProps>({ onError: (error: Error) => undefined });
148+
expectAssignable<OTSubscriberProps>({
149+
properties: subscriberProperties
150+
});
151+
expectNotAssignable<OTSubscriberProps>({
152+
properties: null
153+
});
154+
expectNotAssignable<OTSubscriberProps>({
155+
properties: {
156+
fitMode: NaN
157+
}
158+
});
159+
expectAssignable<OTSubscriberProps>({
160+
eventHandlers: {}
161+
});
162+
expectAssignable<OTSubscriberProps>({
163+
ref: undefined
164+
});
165+
expectAssignable<OTSubscriberProps>({
166+
ref: (instance: OTSubscriberRef | null) => {}
167+
});
168+
expectAssignable<OTSubscriberProps>({
169+
ref: subscriberRef
170+
});
171+
expectAssignable<OTSubscriberProps>({
172+
eventHandlers: {
173+
videoDimensionsChanged: event => undefined,
174+
audioBlocked: (event: Event) => undefined,
175+
audioLevelUpdated: (event: AudioLevelUpdatedEvent) => undefined,
176+
videoElementCreated: (event: Event) => undefined
177+
}
178+
});
179+
expectNotAssignable<OTSubscriberProps>({
180+
eventHandlers: {
181+
'foo': (event: Event) => undefined
182+
}
183+
});

0 commit comments

Comments
 (0)