-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathuseSocket.ts
67 lines (55 loc) · 1.89 KB
/
useSocket.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
import useWebSocket from 'react-use-websocket'
import { useAuthStore as useDwindleStore } from '@workduck-io/dwindle'
import { BannerType, config, mog, useAuthStore, useRouteStore } from '@mexit/core'
import { SocketActionType } from '../Types/Socket'
const useSocket = () => {
const userId = useAuthStore((s) => s.userDetails?.id)
const idToken = useDwindleStore((s) => s.userCred?.token)
const addUser = useRouteStore((s) => s.addUserInRoute)
const removeUser = useRouteStore((s) => s.removeUserFromRoute)
const setActiveUsers = useRouteStore((s) => s.addRouteInfo)
const handleAction = (action: SocketActionType, data: any) => {
switch (action) {
case SocketActionType.ROUTE_CHANGE:
break
case SocketActionType.CONTENT_UPDATE:
break
case SocketActionType.USER_LIST_UPDATE:
if (data.joined) {
addUser(data.route, data.joined)
}
if (data.left) {
removeUser(data.route, data.left)
}
if (data.users) {
const filterUser = data.users?.filter((user: string) => !!user)
setActiveUsers(data.route, { users: filterUser, banners: filterUser.length > 0 ? [BannerType.editor] : [] })
}
break
default:
mog('No Handler for this action', { action, data })
}
}
const handleSocketMessage = (event) => {
if (event.data) {
const message = JSON.parse(event.data)
handleAction(message.action, message.data)
}
}
const utilFunctions = useWebSocket(
config.baseURLs.MEXIT_WEBSOCKET_URL,
{
onOpen: () => mog('CONNECTION OPENED'),
retryOnError: false,
onError: (event) => {
mog('Socket Error Occured', { event })
},
onMessage: handleSocketMessage,
queryParams: { userId, Authorizer: idToken },
share: true
},
false // !!(idToken && userId)
)
return utilFunctions
}
export default useSocket