import { useEffect, useState } from "react"; import { Input } from "./input"; import { Card, CardDescription, CardHeader, CardTitle } from "./card"; import { Avatar, AvatarFallback, AvatarImage } from "./avatar"; import { User } from "revolt-api"; import { AUTUMN_URL } from "@/lib/constants"; import { fetchUserById } from "@/lib/db"; export default function UserSelector({ onChange }: { onChange?: (user: User | null) => any, }) { const [input, setInput] = useState(""); const [user, setUser] = useState(null); const [searching, setSearching] = useState(false); useEffect(() => { if (input.length != 26) { onChange?.(null); if (user) setUser(null); return; } if (!searching) return; if (input != user?._id) { setSearching(true); fetchUserById(input) .then((user) => { setUser(user); onChange?.(user); }) .catch((e) => { setUser(null); onChange?.(null); }) .finally(() => setSearching(false)); } else setUser(null); }, [input, user, searching, onChange]); return (
{ setInput(e.currentTarget.value); setSearching(true); }} /> {user && } {user ? (user.display_name ?? user.username) .split(" ") .slice(0, 2) .map((x) => String.fromCodePoint(x.codePointAt(0) ?? 32) ?? "") .join("") : "?"} {user ? <>{user.username}#{user.discriminator} {user.display_name} : "User#0000" } { !input ? "Enter an ID..." : input.length != 26 ? "Invalid ID" : searching ? "Searching..." : user ? "User exists!" : "Unknown user" }
) }