CS4610-FinalProject / FinalProject / src / pages / Friends.tsx
Friends.tsx
Raw
import { useContext, useEffect, useState } from "react";
import { useNavigate, useParams } from "react-router-dom";
import { ApiContext } from "../contexts/api";
import { useApi } from "../hooks/useApi";
import { Header } from '../components/Header';

type Friend= {
    username: string;
}

export const Friends = () => {
    const api = useApi();
    const [username, setUsername] = useState("");
    const [friends, setFriends] = useState([] as Friend[]);
    const [reloadFriends, setReloadFriends] = useState(false);

    useEffect(() => {
        setReloadFriends(true);
    }, []);

    useEffect(() => {
        if (reloadFriends) {
            fetchFriends();
            setReloadFriends(false);
        }
    }, [reloadFriends]);


    const fetchFriends = async () => {
        const fetchedFriends = await api.getFriends();
        setFriends(fetchedFriends);
    };

    const handleAddFriend = async () => {
        const success = await api.addFriend(username);
        if (success) {
            alert(`${username} was added successfully!`);
            friends.push({username: username});
        } else {
            alert(`There was an error adding ${username}.`);
        }
        setUsername("");
    };

    const handleRemoveFriend = async (removeFriendUsername: string, index: number) => {
        let tempArray = [...friends];
        tempArray.splice(index, 1);
        setFriends([...tempArray]);
        const response = await api.removeFriend(removeFriendUsername);
    }

    return (
        <div>
            <div style={{ position: "relative" }}>
                <Header title="YourJams." />
            </div>
            <button onClick={() => {setReloadFriends(true)}}>Refresh Friends List</button>
            <form onSubmit={(e) => {e.preventDefault(); handleAddFriend();}}>
                <label>
                    <div>
                        <input type="text" value={username} onChange={(e) => setUsername(e.target.value)} />
                        <button type="submit">Add Friend</button>
                    </div>
                </label>
            </form>
            <div>
                <h2>Friends:</h2>
                {friends.map((friend) => (
                    <div key={friend.username}>
                        <p>{friend.username}</p>
                        <button onClick={() => {
                            handleRemoveFriend(friend.username, friends.indexOf(friend));
                        }}>Remove Friend</button>
                    </div>
                    // <li key={friend.username}>{friend.username}</li>
                    
                ))}
            </div>
        </div>
    );
};