From f9e3982365122f251eba49ae4ade25f947e43087 Mon Sep 17 00:00:00 2001 From: srgooglo Date: Fri, 28 Oct 2022 22:07:52 +0000 Subject: [PATCH] added `ConnectedFriends` component --- .../src/components/ConnectedFriends/index.jsx | 59 +++++++++++++++++++ .../components/ConnectedFriends/index.less | 8 +++ packages/app/src/components/index.js | 1 + 3 files changed, 68 insertions(+) create mode 100644 packages/app/src/components/ConnectedFriends/index.jsx create mode 100644 packages/app/src/components/ConnectedFriends/index.less 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
+ { + connectedUsers.length === 0 ? + No connected friends : + connectedUsers.map((user_id) => { + return
+ +
+ }) + } +
+} \ No newline at end of file diff --git a/packages/app/src/components/ConnectedFriends/index.less b/packages/app/src/components/ConnectedFriends/index.less new file mode 100644 index 00000000..653adc9c --- /dev/null +++ b/packages/app/src/components/ConnectedFriends/index.less @@ -0,0 +1,8 @@ +.connectedFriends { + display: flex; + flex-direction: column; + + .item { + margin-bottom: 10px; + } +} \ No newline at end of file diff --git a/packages/app/src/components/index.js b/packages/app/src/components/index.js index 30fe8aac..374f88c8 100755 --- a/packages/app/src/components/index.js +++ b/packages/app/src/components/index.js @@ -50,6 +50,7 @@ export { default as CommentCreator } from "./CommentCreator" // USERS export { default as FollowersList } from "./FollowersList" +export { default as ConnectedFriends } from "./ConnectedFriends" // OTHERS export * as AdminTools from "./AdminTools"