diff --git a/lib/socket/socket.react.js b/lib/socket/socket.react.js --- a/lib/socket/socket.react.js +++ b/lib/socket/socket.react.js @@ -12,6 +12,7 @@ import MessageHandler from './message-handler.react.js'; import RequestResponseHandler from './request-response-handler.react.js'; import UpdateHandler from './update-handler.react.js'; +import UserInfosHandler from './user-infos-handler.react.js'; import { updateActivityActionTypes } from '../actions/activity-actions.js'; import { updateLastCommunicatedPlatformDetailsActionType } from '../actions/device-actions.js'; import { @@ -366,6 +367,10 @@ frozen={this.props.frozen} keyserverID={this.props.keyserverID} /> + ); } diff --git a/lib/socket/user-infos-handler.react.js b/lib/socket/user-infos-handler.react.js new file mode 100644 --- /dev/null +++ b/lib/socket/user-infos-handler.react.js @@ -0,0 +1,37 @@ +// @flow +import * as React from 'react'; +import { useEffect } from 'react'; + +import { + type SocketListener, + type ClientServerSocketMessage, +} from '../types/socket-types.js'; +import { serverServerSocketMessageValidator } from '../types/socket-types.js'; +import { extractUserIDsFromPayload } from '../utils/conversion-utils.js'; + +type Props = { + +addListener: (listener: SocketListener) => void, + +removeListener: (listener: SocketListener) => void, +}; + +export default function UserInfosHandler(props: Props): React.Node { + const { addListener, removeListener } = props; + + const onMessage = React.useCallback((message: ClientServerSocketMessage) => { + // eslint-disable-next-line no-unused-vars + const newUserIDs = extractUserIDsFromPayload( + serverServerSocketMessageValidator, + message, + ); + // TODO: dispatch an action adding the new user ids to the UserStore + }, []); + + useEffect(() => { + addListener(onMessage); + return () => { + removeListener(onMessage); + }; + }, [addListener, removeListener, onMessage]); + + return null; +}