import { Link, useParams, useNavigate } from "react-router-dom"; import { useEffect, useState } from "react"; import { User, Messages } from "../types"; import TopBar from "../components/TopBar"; import MessageComponent from "../components/MessageComponent"; import axios from "axios"; import "../styles/UserPage.css"; export default function UserPage({socket}: {socket: WebSocket}) { const navigate = useNavigate(); const { username } = useParams(); const [pageUser, setPageUser] = useState(); const [messages, setMessages] = useState(); const [user, setUser] = useState(); const [noUser, setNoUser] = useState(false); const [token, setToken] = useState(""); function deleteUser() { if (!window.confirm(`Are you sure you want to delete ${pageUser?.username}?`)) { return; } axios .post(`/api/users/${pageUser?.username}/delete`, { token }) .then(() => { navigate("/"); }) .catch((err) => { console.error(err.response.data); }); } function deleteUserPfp() { if (!window.confirm(`Are you sure you want to delete ${pageUser?.username}'s profile picture?`)) { return; } axios .post(`/api/users/${pageUser?.username}/deletepfp`, { token }) .then(() => { window.location.reload(); }) .catch((err) => { console.error(err.response.data); }); } useEffect(() => { const localToken = localStorage.getItem("token"); if (localToken) { setToken(localToken); axios .post("/api/auth/me", { token: localToken }).then((res) => { setUser(res.data); }); } }, []); useEffect(() => { axios .get(`/api/users/${username}`) .then((res) => { setPageUser(res.data); }) .catch((err) => { if (err.response.data.error === "No user found") { setNoUser(true); } console.error(err.response.data); }); axios .get(`/api/users/${username}/lastmessages`) .then((res) => { setMessages(res.data); }) .catch((err) => { console.error(err.response.data); }); }, [username]); useEffect(() => { socket.addEventListener('message', function (event) { const data = JSON.parse(event.data); if (((data.type === "new_message" || data.type === "delete_message") && data.user_id === pageUser?.id) || data.type === "purge_channel" || data.type === "delete_channel") { axios .get(`/api/users/${username}/lastmessages`) .then((res) => { setMessages(res.data); }) .catch((err) => { console.error(err.response); }); } }); }, [pageUser]); if (noUser) { return (

User Not Found

Sorry, the user you are looking for does not exist.

Go back to the homepage
) } if (!pageUser) { return (

Loading...

) } return (
pfp

{pageUser.username}

{pageUser.admin ?

Admin

:

User

} {pageUser.id === user?.id && ( Edit profile )} {user?.admin == 1 && (
)}

Last messages

{messages?.map((message) => ( ))}
); }