diff --git a/packages/app/src/components/ConnectedFriends/index.jsx b/packages/app/src/components/ConnectedFriends/index.jsx new file mode 100644 index 00000000..e29fe635 --- /dev/null +++ b/packages/app/src/components/ConnectedFriends/index.jsx @@ -0,0 +1,59 @@ +import React from "react" + +import User from "models/user" +import UserPreview from "components/UserPreview" + +import "./index.less" + +export default (props) => { + const [connectedUsers, setConnectedUsers] = React.useState([]) + + const fetchConnectedFriends = async () => { + const result = await User.getConnectedUsersFollowing().catch((err) => { + console.error(err) + app.message.error("Failed to fetch connected friends") + + return null + }) + + if (result) { + console.log(`Connected friends:`, result) + setConnectedUsers(result) + } + } + + const wsEvents = { + "friend.connected": (user_id) => { + setConnectedUsers([...connectedUsers, user_id]) + }, + "friend.disconnected": (user_id) => { + setConnectedUsers(connectedUsers.filter((id) => id !== user_id)) + } + } + + React.useEffect(() => { + fetchConnectedFriends() + + for (const [event, callback] of Object.entries(wsEvents)) { + window.app.api.namespaces["main"].listenEvent(event, callback) + } + + return () => { + for (const [event, callback] of Object.entries(wsEvents)) { + window.app.api.namespaces["main"].unlistenEvent(event, callback) + } + } + }, []) + + return