1
- // For now, socketcluster-client is a devDep because of https://github.com/npm/npm/issues/3081
2
- import socketCluster from 'socketcluster-client' ;
3
1
import React , { Component } from 'react' ;
4
2
import promisify from 'es6-promisify' ;
5
- import { Map , List } from 'immutable' ;
6
3
7
4
// constants
8
- const { CLOSED , CONNECTING , OPEN , AUTHENTICATED , PENDING , UNAUTHENTICATED } = socketCluster . SCSocket ;
5
+ const CLOSED = 'closed' ;
6
+ const CONNECTING = 'connecting' ;
7
+ const OPEN = 'open' ;
8
+ const AUTHENTICATED = 'authenticated' ;
9
+ const PENDING = 'pending' ;
10
+ const UNAUTHENTICATED = 'unauthenticated' ;
11
+
9
12
const CONNECT_REQUEST = '@@socketCluster/CONNECT_REQUEST' ;
10
13
const CONNECT_SUCCESS = '@@socketCluster/CONNECT_SUCCESS' ;
11
14
const CONNECT_ERROR = '@@socketCluster/CONNECT_ERROR' ;
@@ -21,78 +24,90 @@ const DISCONNECT = '@@socketCluster/DISCONNECT';
21
24
const DEAUTHENTICATE = '@@socketCluster/DEAUTHENTICATE' ;
22
25
23
26
// Reducer
24
- const initialState = Map ( {
27
+ const initialState = {
25
28
id : null ,
26
29
socketState : CLOSED ,
27
30
authState : PENDING ,
28
31
authToken : null ,
29
32
authError : null ,
30
33
error : null ,
31
- pendingSubs : List ( ) ,
32
- subs : List ( )
33
- } ) ;
34
+ pendingSubs : [ ] ,
35
+ subs : [ ]
36
+ } ;
34
37
35
38
export const socketClusterReducer = function ( state = initialState , action ) {
36
39
switch ( action . type ) {
37
40
case DEAUTHENTICATE :
38
- return state . merge ( {
41
+ return {
42
+ ...state ,
39
43
authState : UNAUTHENTICATED ,
40
44
authToken : null
41
- } ) ;
45
+ } ;
42
46
case DISCONNECT :
43
47
return initialState ;
44
48
case CONNECT_REQUEST :
45
- return state . merge ( {
49
+ return {
50
+ ...state ,
46
51
socketState : CONNECTING
47
- } ) ;
52
+ } ;
48
53
case CONNECT_ERROR :
49
- return state . merge ( {
54
+ return {
55
+ ...state ,
50
56
error : action . error
51
- } ) ;
57
+ } ;
52
58
case CONNECT_SUCCESS :
53
- return state . merge ( {
59
+ return {
60
+ ...state ,
54
61
id : action . payload . id ,
55
62
socketState : action . payload . socketState ,
56
63
authState : action . payload . authState ,
57
64
error : action . error
58
- } ) ;
65
+ } ;
59
66
case AUTH_REQUEST :
60
- return state . merge ( {
67
+ return {
68
+ ...state ,
61
69
authState : PENDING
62
- } ) ;
70
+ } ;
63
71
case AUTH_SUCCESS :
64
- return state . merge ( {
72
+ return {
73
+ ...state ,
65
74
authState : AUTHENTICATED ,
66
75
authToken : action . payload . authToken
67
- } ) ;
76
+ } ;
68
77
case AUTH_ERROR :
69
- return state . merge ( {
78
+ return {
79
+ ...state ,
70
80
authState : UNAUTHENTICATED ,
71
81
authError : action . error
72
- } ) ;
82
+ } ;
73
83
case SUBSCRIBE_REQUEST :
74
- return state . merge ( {
75
- pendingSubs : state . get ( 'pendingSubs' ) . push ( action . payload . channelName )
76
- } ) ;
84
+ return {
85
+ ...state ,
86
+ pendingSubs : state . pendingSubs . concat ( action . payload . channelName )
87
+ } ;
77
88
case SUBSCRIBE_SUCCESS :
78
- return state . merge ( {
79
- pendingSubs : state . get ( 'pendingSubs' ) . filter ( sub => sub !== action . payload . channelName ) ,
80
- subs : state . get ( 'subs' ) . push ( action . payload . channelName )
81
- } ) ;
89
+ return {
90
+ ...state ,
91
+ pendingSubs : state . pendingSubs . filter ( sub => sub !== action . payload . channelName ) ,
92
+ subs : state . subs . concat ( action . payload . channelName )
93
+ } ;
82
94
case SUBSCRIBE_ERROR :
83
- return state . merge ( {
84
- pendingSubs : state . get ( 'pendingSubs' ) . filter ( sub => sub !== action . payload . channelName ) ,
95
+ return {
96
+ ...state ,
97
+ pendingSubs : state . pendingSubs . filter ( sub => sub !== action . payload . channelName ) ,
85
98
error : action . error
86
- } ) ;
99
+ } ;
87
100
case UNSUBSCRIBE :
88
- return state . merge ( {
89
- subs : state . get ( 'subs' ) . filter ( sub => sub !== action . payload . channelName ) ,
101
+ return {
102
+ ...state ,
103
+ subs : state . subs . filter ( sub => sub !== action . payload . channelName ) ,
90
104
error : action . error
91
- } ) ;
105
+ } ;
92
106
case KICKOUT :
93
- return state . merge ( {
107
+ return {
108
+ ...state ,
94
109
error : action . error
95
- } ) ;
110
+ } ;
96
111
default :
97
112
return state ;
98
113
}
@@ -127,13 +142,13 @@ export const reduxSocket = (options, hocOptions) => ComposedComponent =>
127
142
this . handleError ( ) ;
128
143
this . handleSubs ( ) ;
129
144
this . handleAuth ( ) ;
145
+ const { onConnect} = this . hocOptions ;
146
+ if ( onConnect ) {
147
+ onConnect ( this . options , this . hocOptions , this . socket ) ;
148
+ }
130
149
return ;
131
150
}
132
151
clearTimeout ( this . socket . __destructionCountdown ) ;
133
- const { onConnect} = this . hocOptions ;
134
- if ( onConnect ) {
135
- onConnect ( this . socket ) ;
136
- }
137
152
}
138
153
139
154
componentWillUnmount ( ) {
@@ -142,7 +157,7 @@ export const reduxSocket = (options, hocOptions) => ComposedComponent =>
142
157
this . socket = this . socketCluster . destroy ( options ) ;
143
158
const { onDisconnect} = this . hocOptions ;
144
159
if ( onDisconnect ) {
145
- onDisconnect ( true , this . socket ) ;
160
+ onDisconnect ( true , this . options , this . hocOptions , this . socket ) ;
146
161
}
147
162
} , this . hocOptions . keepAlive ) ;
148
163
}
@@ -161,6 +176,9 @@ export const reduxSocket = (options, hocOptions) => ComposedComponent =>
161
176
dispatch ( { type : SUBSCRIBE_REQUEST , payload : { channelName} } ) ;
162
177
}
163
178
} ) ;
179
+ socket . on ( 'subscribeRequest' , channelName => {
180
+ dispatch ( { type : SUBSCRIBE_REQUEST , payload : { channelName} } ) ;
181
+ } ) ;
164
182
socket . on ( 'subscribe' , channelName => {
165
183
dispatch ( { type : SUBSCRIBE_SUCCESS , payload : { channelName} } ) ;
166
184
} ) ;
@@ -212,7 +230,7 @@ export const reduxSocket = (options, hocOptions) => ComposedComponent =>
212
230
const { onDisconnect} = this . hocOptions ;
213
231
if ( onDisconnect ) {
214
232
// did not time out, so first param is false
215
- onDisconnect ( false , this . socket ) ;
233
+ onDisconnect ( false , this . options , this . hocOptions , this . socket ) ;
216
234
}
217
235
} ) ;
218
236
// triggers while in connecting state
0 commit comments