import { useState, useEffect } from "react" import { Link } from "react-router-dom" import { User, Users } from "../types" import axios from "axios" import TopBar from "../components/TopBar" export default function UsersPage({socket}: {socket: WebSocket}) { const [users, setUsers] = useState(); const [search, setSearch] = useState(""); const [token, setToken] = useState(""); const [thisUser, setThisUser] = useState(); function deleteUser(username: string) { if (!window.confirm(`Are you sure you want to delete ${username}?`)) { return; } axios .post(`/api/users/${username}/delete`, { token }) .catch((err) => { console.error(err.response); }); } useEffect(() => { const token = localStorage.getItem("token") if (token) { setToken(token) axios .post("/api/auth/me", { token: token }) .then((res) => { setThisUser(res.data) }) } axios .get("/api/users") .then((res) => { setUsers(res.data) }) .catch((err) => { console.error(err.response) }) }, []) useEffect(() => { socket.addEventListener('message', function (event) { const data = JSON.parse(event.data); if (data.type === "new_user" || data.type === "delete_user") { axios .get("/api/users") .then((res) => { setUsers(res.data) }) .catch((err) => { console.error(err.response) }) } }); }, []) if (!users) { return (

Users

Loading...

) } return (

Users

setSearch(e.target.value)} />
    {users?.sort().filter((channel) => channel.username.toLowerCase().includes(search.toLowerCase())).map((user) => (
  • {user.username} {thisUser?.admin == 1 && ( )}
  • ))}
) }