"use client"; import { useEffect, useState } from "react"; import { FaPlay, FaMusic, FaSearch } from "react-icons/fa"; import { MdLibraryMusic } from "react-icons/md"; import { useAuth } from "./context/auth"; import pb from "./lib/pocketbase"; import { Root, Navbar, Logo, LogoIcon, NavCtaLink, NavLeft, NavCenter, SearchBox, SearchInput, SearchButton, NavRight, GridContainer, CardGrid, Card, ThumbnailWrapper, Thumbnail, PlayOverlay, PlayCircle, CardMeta, CardInfo, CardTitle, CardSub, EmptyState, TypingGlobalStyle, } from "./page.styles"; interface ChartRecord { id: string; title: string; artist: string; thumbnail: string; lrc: string; media: string; offset: number; } export default function TypingPage() { const { user, signOut } = useAuth(); const [charts, setCharts] = useState([]); const [search, setSearch] = useState(""); useEffect(() => { pb.collection("charts") .getFullList({ sort: "-created" }) .then(setCharts) .catch(console.error); }, []); const normalizedSearch = search.trim().toLowerCase(); const filtered = normalizedSearch ? charts.filter( (item) => item.title.toLowerCase().includes(normalizedSearch) || item.artist.toLowerCase().includes(normalizedSearch), ) : charts; return ( <> TypingMIXX setSearch(e.target.value)} /> {user ? ( <> {user.username || user.name} { e.preventDefault(); signOut(); }}> Sign out ) : ( Sign in )} {filtered.length === 0 ? ( No results found. ) : ( filtered.map((item) => ( {item.thumbnail ? ( ) : ( )} {item.title} {item.artist} )) )} ); }