Fixed: Incorrect friends list shown

This commit is contained in:
Moon Patel
2023-07-03 16:40:28 +05:30
parent 1d9f2cc65a
commit f7bb1e89cb
4 changed files with 35 additions and 26 deletions
+7 -2
View File
@@ -38,9 +38,14 @@ const userSchema = new Schema(
}, },
methods: { methods: {
async getFriends() { async getFriends() {
await this.populate("friends", "username"); await this.populate("friends", "username email");
// console.log(this.friends); // console.log(this.friends);
return this.friends.map(friend => friend.username); return this.friends.map((friend) => {
return {
username: friend.username,
email: friend.email,
};
});
}, },
}, },
} }
+9 -4
View File
@@ -1,5 +1,6 @@
const router = require("express").Router(); const router = require("express").Router();
const { User } = require("../models/user"); const { User } = require("../models/user");
const { checkAuth } = require("../util/auth");
const { pendingChallenges } = require("./room"); const { pendingChallenges } = require("./room");
// TODO // TODO
@@ -13,11 +14,15 @@ router.get("/:username", async (req, res, next) => {
router.post("/:username", async (req, res, next) => {}); router.post("/:username", async (req, res, next) => {});
// get friends of the user // get friends of the user
router.get("/:username/friends", async (req, res, next) => { router.get("/:username/friends", checkAuth, async (req, res, next) => {
const username = req.params.username; const username = req.params.username;
const user = await User.findOne({ username }); const user = await User.findOne({ username });
const friends = await user.getFriends(); if (user) {
return res.json({ success: true, friends }); const friends = await user.getFriends();
return res.json({ success: true, friends });
} else {
return res.json({ success: false, error: "Invalid username" });
}
}); });
// TODO // TODO
@@ -37,7 +42,7 @@ router.get("/:username/challenges", async (req, res, next) => {
let username = req.params.username; let username = req.params.username;
let challenges = pendingChallenges.get(username); let challenges = pendingChallenges.get(username);
if (!challenges) challenges = []; if (!challenges) challenges = [];
console.log(username,challenges); console.log(username, challenges);
res.json({ success: true, challenges: challenges }); res.json({ success: true, challenges: challenges });
}); });
+18 -19
View File
@@ -1,50 +1,49 @@
import { Avatar, Flex, Image, Loader, NavLink, Text, Title } from '@mantine/core'; import { Avatar, Flex, Image, Loader, NavLink, Text, Title } from '@mantine/core';
import { Link } from 'react-router-dom'; import { Link } from 'react-router-dom';
import React, { useEffect, useState } from 'react'; import React, { useEffect, useState } from 'react';
import { getAuthToken, getUserData } from '../../utils/auth'
const FriendsList = () => { const FriendsList = () => {
const [friends, setFriends] = useState(null); const [friends, setFriends] = useState(null);
const user = getUserData();
let { username } = user;
useEffect(() => { useEffect(() => {
const abortController = new AbortController();
let response = null; let response = null;
const fetchData = async () => { const fetchData = async () => {
let url = `${import.meta.env.VITE_BACKEND_HOST}/api/user/user1/friends`; let url = `${import.meta.env.VITE_BACKEND_HOST}/api/user/${username}/friends`;
try { try {
response = await fetch(url, { signal: abortController.signal }); response = await fetch(url, {
headers: {
'Authorization': `Bearer ${getAuthToken()}`
}
});
const data = await response.json(); const data = await response.json();
if (data.success) { if (data.success) {
setFriends(data.friends); setFriends(data.friends);
} else { } else {
throw data; throw data.error;
} }
} catch (error) { } catch (error) {
if (error.message === 'The user aborted a request.'); console.error(error)
else {
console.log('Error fetching data');
throw error;
}
} }
} }
fetchData(); fetchData();
return () => {
if (!response) {
abortController.abort();
}
}
}, []); }, []);
if (!friends) {
return (
<Loader m="20px" variant='dots' color='lime' />
)
}
return ( return (
<Flex sx={{ flexGrow: '1' }} height="100%" justify="start" my="md" align="start" direction="column"> <Flex sx={{ flexGrow: '1' }} height="100%" justify="start" my="md" align="start" direction="column">
<Title px="sm" pt="md" order={3}>Friends</Title> <Title px="sm" pt="md" order={3}>Friends</Title>
{ {
friends ? friends.map((friend, index) => <NavLink key={index} component={Link} to={`/play/friend/${friend.username}`} p='5px' icon={<Avatar size='sm' color='blue' children={friend.username[0].toUpperCase()} />} label={<Text fw={700}>{friend.username}</Text>} />)
friends.map((friend, index) => <NavLink key={index} component={Link} to="/play/friend/moonpatel" p='5px' icon={<Avatar size='sm' color='blue' children="M" />} label={<Text fw={700}>{friend}</Text>} />)
:
<Loader m="20px" variant='dots' color='lime' />
} }
</Flex> </Flex>
) )
+1 -1
View File
@@ -1,6 +1,6 @@
import { Avatar, Button, Flex, Image, Loader, MediaQuery, NavLink, Text, Title } from '@mantine/core' import { Avatar, Button, Flex, Image, Loader, MediaQuery, NavLink, Text, Title } from '@mantine/core'
import React, { useEffect, useState } from 'react' import React, { useEffect, useState } from 'react'
import ChessBoard from '../Play/ChessBoard' import ChessBoard from '../Chess/ChessBoard'
import { useNavigate, useParams } from 'react-router-dom' import { useNavigate, useParams } from 'react-router-dom'
import { socket } from '../../socket' import { socket } from '../../socket'
import { getUserData } from '../../../utils/auth' import { getUserData } from '../../../utils/auth'