Fixed: Incorrect friends list shown
This commit is contained in:
@@ -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,
|
||||||
|
};
|
||||||
|
});
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 });
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -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,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'
|
||||||
|
|||||||
Reference in New Issue
Block a user