Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F32159097
socket.react.js
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
5 KB
Referenced Files
None
Subscribers
None
socket.react.js
View Options
// @flow
import
invariant
from
'invariant'
;
import
*
as
React
from
'react'
;
import
{
useDispatch
}
from
'react-redux'
;
import
{
logOut
,
logOutActionTypes
}
from
'lib/actions/user-actions.js'
;
import
{
preRequestUserStateSelector
}
from
'lib/selectors/account-selectors.js'
;
import
{
cookieSelector
,
urlPrefixSelector
,
connectionSelector
,
lastCommunicatedPlatformDetailsSelector
,
}
from
'lib/selectors/keyserver-selectors.js'
;
import
{
isLoggedIn
}
from
'lib/selectors/user-selectors.js'
;
import
{
accountHasPassword
}
from
'lib/shared/account-utils.js'
;
import
Socket
,
{
type
BaseSocketProps
}
from
'lib/socket/socket.react.js'
;
import
{
logInActionSources
}
from
'lib/types/account-types.js'
;
import
{
useServerCall
,
useDispatchActionPromise
,
fetchNewCookieFromNativeCredentials
,
}
from
'lib/utils/action-utils.js'
;
import
{
InputStateContext
}
from
'./input/input-state.js'
;
import
{
activeMessageListSelector
,
nativeCalendarQuery
,
}
from
'./navigation/nav-selectors.js'
;
import
{
NavContext
}
from
'./navigation/navigation-context.js'
;
import
{
useSelector
}
from
'./redux/redux-utils.js'
;
import
{
noDataAfterPolicyAcknowledgmentSelector
}
from
'./selectors/account-selectors.js'
;
import
{
openSocketSelector
,
sessionIdentificationSelector
,
nativeGetClientResponsesSelector
,
nativeSessionStateFuncSelector
,
}
from
'./selectors/socket-selectors.js'
;
import
Alert
from
'./utils/alert.js'
;
import
{
useInitialNotificationsEncryptedMessage
}
from
'./utils/crypto-utils.js'
;
import
{
decompressMessage
}
from
'./utils/decompress.js'
;
const
NativeSocket
:
React
.
ComponentType
<
BaseSocketProps
>
=
React
.
memo
<
BaseSocketProps
>
(
function
NativeSocket
(
props
:
BaseSocketProps
)
{
const
inputState
=
React
.
useContext
(
InputStateContext
);
const
navContext
=
React
.
useContext
(
NavContext
);
const
cookie
=
useSelector
(
cookieSelector
);
const
urlPrefix
=
useSelector
(
urlPrefixSelector
);
invariant
(
urlPrefix
,
'missing urlPrefix for given keyserver id'
);
const
connection
=
useSelector
(
connectionSelector
);
invariant
(
connection
,
'keyserver missing from keyserverStore'
);
const
frozen
=
useSelector
(
state
=>
state
.
frozen
);
const
active
=
useSelector
(
state
=>
isLoggedIn
(
state
)
&&
state
.
lifecycleState
!==
'background'
,
);
const
noDataAfterPolicyAcknowledgment
=
useSelector
(
noDataAfterPolicyAcknowledgmentSelector
,
);
const
currentUserInfo
=
useSelector
(
state
=>
state
.
currentUserInfo
);
const
openSocket
=
useSelector
(
openSocketSelector
);
invariant
(
openSocket
,
'openSocket failed to be created'
);
const
sessionIdentification
=
useSelector
(
sessionIdentificationSelector
);
const
preRequestUserState
=
useSelector
(
preRequestUserStateSelector
);
const
getInitialNotificationsEncryptedMessage
=
useInitialNotificationsEncryptedMessage
();
const
getClientResponses
=
useSelector
(
state
=>
nativeGetClientResponsesSelector
({
redux
:
state
,
navContext
,
getInitialNotificationsEncryptedMessage
,
}),
);
const
sessionStateFunc
=
useSelector
(
state
=>
nativeSessionStateFuncSelector
({
redux
:
state
,
navContext
,
}),
);
const
currentCalendarQuery
=
useSelector
(
state
=>
nativeCalendarQuery
({
redux
:
state
,
navContext
,
}),
);
const
canSendReports
=
useSelector
(
state
=>
!
state
.
frozen
&&
state
.
connectivity
.
hasWiFi
&&
(
!
inputState
||
!
inputState
.
uploadInProgress
()),
);
const
activeThread
=
React
.
useMemo
(()
=>
{
if
(
!
active
)
{
return
null
;
}
return
activeMessageListSelector
(
navContext
);
},
[
active
,
navContext
]);
const
lastCommunicatedPlatformDetails
=
useSelector
(
lastCommunicatedPlatformDetailsSelector
,
);
const
dispatch
=
useDispatch
();
const
dispatchActionPromise
=
useDispatchActionPromise
();
const
callLogOut
=
useServerCall
(
logOut
);
const
socketCrashLoopRecovery
=
React
.
useCallback
(
async
()
=>
{
if
(
!
accountHasPassword
(
currentUserInfo
))
{
dispatchActionPromise
(
logOutActionTypes
,
callLogOut
(
preRequestUserState
),
);
Alert
.
alert
(
'Log in needed'
,
'After acknowledging the policies, we need you to log in to your account again'
,
[{
text
:
'OK'
}],
);
return
;
}
await
fetchNewCookieFromNativeCredentials
(
dispatch
,
cookie
,
urlPrefix
,
logInActionSources
.
refetchUserDataAfterAcknowledgment
,
getInitialNotificationsEncryptedMessage
,
);
},
[
callLogOut
,
cookie
,
currentUserInfo
,
dispatch
,
dispatchActionPromise
,
preRequestUserState
,
urlPrefix
,
getInitialNotificationsEncryptedMessage
,
]);
return
(
<
Socket
{...
props
}
active
=
{
active
}
openSocket
=
{
openSocket
}
getClientResponses
=
{
getClientResponses
}
activeThread
=
{
activeThread
}
sessionStateFunc
=
{
sessionStateFunc
}
sessionIdentification
=
{
sessionIdentification
}
cookie
=
{
cookie
}
urlPrefix
=
{
urlPrefix
}
connection
=
{
connection
}
currentCalendarQuery
=
{
currentCalendarQuery
}
canSendReports
=
{
canSendReports
}
frozen
=
{
frozen
}
preRequestUserState
=
{
preRequestUserState
}
dispatch
=
{
dispatch
}
dispatchActionPromise
=
{
dispatchActionPromise
}
logOut
=
{
callLogOut
}
noDataAfterPolicyAcknowledgment
=
{
noDataAfterPolicyAcknowledgment
}
socketCrashLoopRecovery
=
{
socketCrashLoopRecovery
}
getInitialNotificationsEncryptedMessage
=
{
getInitialNotificationsEncryptedMessage
}
lastCommunicatedPlatformDetails
=
{
lastCommunicatedPlatformDetails
}
decompressSocketMessage
=
{
decompressMessage
}
/>
);
});
export
default
NativeSocket
;
File Metadata
Details
Attached
Mime Type
text/x-java
Expires
Sun, Dec 7, 4:26 PM (23 h, 21 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
5839562
Default Alt Text
socket.react.js (5 KB)
Attached To
Mode
rCOMM Comm
Attached
Detach File
Event Timeline
Log In to Comment