@tellescope/video-chat 0.0.11
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/LICENSE +7 -0
- package/README.md +4 -0
- package/lib/cjs/chat.d.ts +69 -0
- package/lib/cjs/chat.d.ts.map +1 -0
- package/lib/cjs/chat.js +171 -0
- package/lib/cjs/chat.js.map +1 -0
- package/lib/cjs/index.d.ts +2 -0
- package/lib/cjs/index.d.ts.map +1 -0
- package/lib/cjs/index.js +14 -0
- package/lib/cjs/index.js.map +1 -0
- package/lib/cjs/index.native.d.ts +2 -0
- package/lib/cjs/index.native.d.ts.map +1 -0
- package/lib/cjs/index.native.js +14 -0
- package/lib/cjs/index.native.js.map +1 -0
- package/lib/cjs/video.d.ts +35 -0
- package/lib/cjs/video.d.ts.map +1 -0
- package/lib/cjs/video.js +189 -0
- package/lib/cjs/video.js.map +1 -0
- package/lib/esm/chat.d.ts +69 -0
- package/lib/esm/chat.d.ts.map +1 -0
- package/lib/esm/chat.js +160 -0
- package/lib/esm/chat.js.map +1 -0
- package/lib/esm/index.d.ts +2 -0
- package/lib/esm/index.d.ts.map +1 -0
- package/lib/esm/index.js +2 -0
- package/lib/esm/index.js.map +1 -0
- package/lib/esm/index.native.d.ts +2 -0
- package/lib/esm/index.native.d.ts.map +1 -0
- package/lib/esm/index.native.js +2 -0
- package/lib/esm/index.native.js.map +1 -0
- package/lib/esm/video.d.ts +35 -0
- package/lib/esm/video.d.ts.map +1 -0
- package/lib/esm/video.js +173 -0
- package/lib/esm/video.js.map +1 -0
- package/lib/tsconfig.tsbuildinfo +1 -0
- package/package.json +61 -0
- package/src/index.native.ts +1 -0
- package/src/index.ts +1 -0
- package/src/video.tsx +129 -0
- package/tsconfig.json +12 -0
package/src/video.tsx
ADDED
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import React, { useCallback, useState, CSSProperties } from "react"
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
useSession,
|
|
5
|
+
} from "@tellescope/react-components/lib/esm/authentication"
|
|
6
|
+
|
|
7
|
+
import {
|
|
8
|
+
UserIdentity,
|
|
9
|
+
} from "@tellescope/types-utilities"
|
|
10
|
+
import {
|
|
11
|
+
AttendeeInfo,
|
|
12
|
+
MeetingInfo,
|
|
13
|
+
} from '@tellescope/types-models'
|
|
14
|
+
|
|
15
|
+
import {
|
|
16
|
+
user_display_name,
|
|
17
|
+
} from "@tellescope/utilities"
|
|
18
|
+
|
|
19
|
+
import {
|
|
20
|
+
Session,
|
|
21
|
+
EnduserSession,
|
|
22
|
+
} from "@tellescope/sdk"
|
|
23
|
+
|
|
24
|
+
import { ThemeProvider } from 'styled-components';
|
|
25
|
+
import {
|
|
26
|
+
MeetingProvider,
|
|
27
|
+
lightTheme,
|
|
28
|
+
|
|
29
|
+
// LocalVideo,
|
|
30
|
+
VideoTileGrid,
|
|
31
|
+
// VideoGrid,
|
|
32
|
+
// VideoTile,
|
|
33
|
+
// PreviewVideo,
|
|
34
|
+
// RemoteVideo,
|
|
35
|
+
useLocalVideo,
|
|
36
|
+
useMeetingManager,
|
|
37
|
+
// useRosterState,
|
|
38
|
+
// useRemoteVideoTileState,
|
|
39
|
+
// useContentShareControls, // screen sharing
|
|
40
|
+
} from 'amazon-chime-sdk-component-library-react';
|
|
41
|
+
import { } from "../../../types-client/node_modules/@tellescope/types-models/src"
|
|
42
|
+
|
|
43
|
+
export const CurrentCallContext = React.createContext({} as {
|
|
44
|
+
meeting: MeetingInfo | undefined, setMeeting: (m: MeetingInfo | undefined) => void,
|
|
45
|
+
})
|
|
46
|
+
interface VideoProps {
|
|
47
|
+
children?: React.ReactNode,
|
|
48
|
+
theme?: typeof lightTheme,
|
|
49
|
+
}
|
|
50
|
+
export const WithVideo = ({ children, theme=lightTheme }: VideoProps) => {
|
|
51
|
+
const [meeting, setMeeting] = useState(undefined as MeetingInfo | undefined)
|
|
52
|
+
|
|
53
|
+
return (
|
|
54
|
+
<CurrentCallContext.Provider value={{ meeting, setMeeting }}>
|
|
55
|
+
<ThemeProvider theme={theme}>
|
|
56
|
+
<MeetingProvider>
|
|
57
|
+
{children}
|
|
58
|
+
</MeetingProvider>
|
|
59
|
+
</ThemeProvider>
|
|
60
|
+
</CurrentCallContext.Provider>
|
|
61
|
+
)
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export const useStartVideoCall = () => {
|
|
65
|
+
const [starting, setStarting] = useState(false)
|
|
66
|
+
const [ending, setEnding] = useState(false)
|
|
67
|
+
const { meeting, setMeeting } = React.useContext(CurrentCallContext)
|
|
68
|
+
|
|
69
|
+
const session = useSession()
|
|
70
|
+
const meetingManager = useMeetingManager();
|
|
71
|
+
const { toggleVideo, isVideoEnabled } = useLocalVideo();
|
|
72
|
+
|
|
73
|
+
const createAndStartMeeting = async (initialAttendees?: UserIdentity[]) => {
|
|
74
|
+
setStarting(false)
|
|
75
|
+
|
|
76
|
+
try {
|
|
77
|
+
const { meeting, host } = await session.api.meetings.start_meeting()
|
|
78
|
+
|
|
79
|
+
await meetingManager.join({ meetingInfo: meeting, attendeeInfo: host }); // Use the join API to create a meeting session
|
|
80
|
+
await meetingManager.start(); // At this point you can let users setup their devices, or start the session immediately
|
|
81
|
+
|
|
82
|
+
if (initialAttendees) {
|
|
83
|
+
session.api.meetings.add_attendees_to_meeting({ id: meeting.Meeting.ExternalMeetingId, attendees: initialAttendees })
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
setMeeting(meeting.Meeting)
|
|
87
|
+
} catch(err) {
|
|
88
|
+
console.error(err)
|
|
89
|
+
}
|
|
90
|
+
finally {
|
|
91
|
+
setStarting(false)
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
const addAttendees = useCallback(async (attendees: UserIdentity[]) => {
|
|
96
|
+
if (!meeting) return
|
|
97
|
+
await session.api.meetings.add_attendees_to_meeting({ id: meeting?.ExternalMeetingId, attendees })
|
|
98
|
+
}, [session, meeting])
|
|
99
|
+
|
|
100
|
+
const endMeeting = async () => {
|
|
101
|
+
if (!meeting) return
|
|
102
|
+
setEnding(true)
|
|
103
|
+
|
|
104
|
+
try {
|
|
105
|
+
await session.api.meetings.end_meeting({ id: meeting.ExternalMeetingId })
|
|
106
|
+
} catch(err) { console.error(err) }
|
|
107
|
+
|
|
108
|
+
setEnding(false)
|
|
109
|
+
setMeeting(undefined)
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
return { starting, ending, meeting, videoIsEnabled: isVideoEnabled, toggleVideo, createAndStartMeeting, addAttendees, endMeeting }
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
export const useJoinVideoCall = () => {
|
|
116
|
+
const meetingManager = useMeetingManager();
|
|
117
|
+
const { toggleVideo, isVideoEnabled } = useLocalVideo();
|
|
118
|
+
const { meeting, setMeeting } = React.useContext(CurrentCallContext)
|
|
119
|
+
|
|
120
|
+
const joinMeeting = async (meetingInfo: { Meeting: MeetingInfo }, attendeeInfo: { Attendee: AttendeeInfo }) => {
|
|
121
|
+
await meetingManager.join({ meetingInfo, attendeeInfo }); // Use the join API to create a meeting session
|
|
122
|
+
await meetingManager.start(); // At this point you can let users setup their devices, or start the session immediately
|
|
123
|
+
setMeeting(meetingInfo.Meeting)
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
return { meeting, videoIsEnabled: isVideoEnabled, toggleVideo, joinMeeting }
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
export { VideoTileGrid }
|
package/tsconfig.json
ADDED