aboutsummaryrefslogtreecommitdiffstats
path: root/src/app/page.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/app/page.tsx')
-rw-r--r--src/app/page.tsx50
1 files changed, 26 insertions, 24 deletions
diff --git a/src/app/page.tsx b/src/app/page.tsx
index c1a8dc7..0670509 100644
--- a/src/app/page.tsx
+++ b/src/app/page.tsx
@@ -2,7 +2,7 @@
import { useState, useEffect } from "react";
import { FaPlay, FaMusic, FaSearch, FaUserCircle, FaKeyboard } from "react-icons/fa";
import { MdLibraryMusic } from "react-icons/md";
-import { Root, Navbar, Logo, LogoIcon, NavLink } from "./styles/shared";
+import { Root, Navbar, Logo, LogoIcon, NavLink, NavCtaLink } from "./styles/shared";
import {
NavLeft,
NavCenter,
@@ -50,7 +50,7 @@ function capitalize(s: string) {
export default function HomePage() {
const [data, setData] = useState<KaraokeData>({});
- const [activeChip, setActiveChip] = useState("All");
+ const [activeChip, setActiveChip] = useState("all");
const [search, setSearch] = useState("");
useEffect(() => {
@@ -61,19 +61,28 @@ export default function HomePage() {
}, []);
const categories = Object.keys(data);
- const chips = ["All", ...categories.map(capitalize)];
+ const chips = [
+ { key: "all", label: "All" },
+ ...categories.map((category) => ({
+ key: category,
+ label: capitalize(category),
+ })),
+ ];
- const visibleItems: KaraokeEntry[] = activeChip === "All"
+ const visibleItems: KaraokeEntry[] = activeChip === "all"
? Object.values(data).flat()
- : data[activeChip.toLowerCase()] ?? [];
+ : data[activeChip] ?? [];
- const filtered = search.trim()
- ? visibleItems.filter(
+ const normalizedSearch = search.trim().toLowerCase();
+ const searchableItems = normalizedSearch ? Object.values(data).flat() : visibleItems;
+
+ const filtered = normalizedSearch
+ ? searchableItems.filter(
(item) =>
- item.title.toLowerCase().includes(search.toLowerCase()) ||
- item.artist.toLowerCase().includes(search.toLowerCase()),
+ item.title.toLowerCase().includes(normalizedSearch) ||
+ item.artist.toLowerCase().includes(normalizedSearch),
)
- : visibleItems;
+ : searchableItems;
return (
<Root>
@@ -101,8 +110,8 @@ export default function HomePage() {
</NavCenter>
<NavRight>
- <NavLink href="/game">LRC-Type</NavLink>
- <NavLink href="/create">Create</NavLink>
+ <NavCtaLink href="/game">LRC-Type</NavCtaLink>
+ <NavCtaLink href="/create">Create</NavCtaLink>
<Avatar>
<FaUserCircle />
</Avatar>
@@ -112,11 +121,11 @@ export default function HomePage() {
<ChipsBar>
{chips.map((chip) => (
<Chip
- key={chip}
- $active={chip === activeChip}
- onClick={() => setActiveChip(chip)}
+ key={chip.key}
+ $active={chip.key === activeChip}
+ onClick={() => setActiveChip(chip.key)}
>
- {chip}
+ {chip.label}
</Chip>
))}
</ChipsBar>
@@ -142,7 +151,7 @@ export default function HomePage() {
{(item.has_srv || item.has_instrumental) && (
<BadgeRow>
{item.has_srv && <Badge $color="#7c3aed">SRV</Badge>}
- {item.has_instrumental && <Badge $color="#0369a1">Inst.</Badge>}
+ {item.has_instrumental && <Badge $color="#0369a1">Inst. Track</Badge>}
</BadgeRow>
)}
</ThumbnailWrapper>
@@ -166,13 +175,6 @@ export default function HomePage() {
<PlayerDescription>
Load your own video, audio, LRC lyrics
</PlayerDescription>
- <SectionHeading style={{ marginTop: 24 }}>Typing Game</SectionHeading>
- <OpenPlayerLink href="/game">
- <FaKeyboard /> Play Typing Game
- </OpenPlayerLink>
- <PlayerDescription>
- Type lyrics in sync with the music to score points
- </PlayerDescription>
</CtaSection>
</Root>
);
send patches to the email below
yukais@pinapelz.com
include the subject [PATCH repo_name]
pinapelz.com
homepage