refactor(pages): replace inline links with Button asChild and TabsList variant

This commit is contained in:
zetaloop
2026-02-25 14:54:15 +08:00
parent f0a8abefa5
commit 0cf2d272c9
4 changed files with 26 additions and 52 deletions
-2
View File
@@ -51,7 +51,6 @@ export default function CommunityPage() {
variant={sortMode === "latest" ? "default" : "outline"} variant={sortMode === "latest" ? "default" : "outline"}
size="sm" size="sm"
onClick={() => setSortMode("latest")} onClick={() => setSortMode("latest")}
className="h-8"
> >
</Button> </Button>
@@ -59,7 +58,6 @@ export default function CommunityPage() {
variant={sortMode === "hot" ? "default" : "outline"} variant={sortMode === "hot" ? "default" : "outline"}
size="sm" size="sm"
onClick={() => setSortMode("hot")} onClick={() => setSortMode("hot")}
className="h-8"
> >
</Button> </Button>
+22 -36
View File
@@ -62,14 +62,12 @@ export default function HomePage() {
</div> </div>
<div className="flex flex-wrap gap-3"> <div className="flex flex-wrap gap-3">
{games.map((game) => ( {games.map((game) => (
<Link <Button key={game.id} variant="secondary" className="rounded-full" asChild>
key={game.id} <Link href={`/search?game=${encodeURIComponent(game.name)}`}>
href={`/search?game=${encodeURIComponent(game.name)}`} <GameIcon name={game.icon} className="h-5 w-5" />
className="flex items-center gap-2 rounded-full bg-muted/50 text-muted-foreground px-4 py-2 hover:bg-muted hover:text-foreground transition-all" {game.name}
> </Link>
<GameIcon name={game.icon} className="h-5 w-5" /> </Button>
<span className="text-sm font-medium">{game.name}</span>
</Link>
))} ))}
</div> </div>
</section> </section>
@@ -77,34 +75,22 @@ export default function HomePage() {
<section className="space-y-6"> <section className="space-y-6">
<div className="flex flex-col sm:flex-row sm:items-center justify-between gap-4"> <div className="flex flex-col sm:flex-row sm:items-center justify-between gap-4">
<h2 className="text-xl font-semibold"></h2> <h2 className="text-xl font-semibold"></h2>
<div className="flex flex-wrap items-center gap-4 text-sm"> <div className="flex flex-wrap items-center gap-1 text-sm">
<Link href="/search?sort=composite" className="text-primary font-medium"> <Button variant="ghost" size="sm" asChild>
<Link href="/search?sort=composite"></Link>
</Link> </Button>
<Link <Button variant="ghost" size="sm" className="text-muted-foreground" asChild>
href="/search?sort=rating" <Link href="/search?sort=rating"></Link>
className="text-muted-foreground hover:text-foreground transition-colors" </Button>
> <Button variant="ghost" size="sm" className="text-muted-foreground" asChild>
<Link href="/search?sort=orders"></Link>
</Link> </Button>
<Link <Button variant="ghost" size="sm" className="text-muted-foreground" asChild>
href="/search?sort=orders" <Link href="/search?sort=price_asc"></Link>
className="text-muted-foreground hover:text-foreground transition-colors" </Button>
> <Button variant="ghost" size="sm" className="text-muted-foreground" asChild>
<Link href="/search?sort=price_desc"></Link>
</Link> </Button>
<Link
href="/search?sort=price_asc"
className="text-muted-foreground hover:text-foreground transition-colors"
>
</Link>
<Link
href="/search?sort=price_desc"
className="text-muted-foreground hover:text-foreground transition-colors"
>
</Link>
</div> </div>
</div> </div>
+3 -13
View File
@@ -92,19 +92,9 @@ export default async function PlayerDetailPage({ params }: { params: Promise<{ i
</div> </div>
<Tabs defaultValue="services" className="space-y-6"> <Tabs defaultValue="services" className="space-y-6">
<TabsList className="w-full justify-start border-b rounded-none h-auto p-0 bg-transparent"> <TabsList variant="line">
<TabsTrigger <TabsTrigger value="services"> ({playerServices.length})</TabsTrigger>
value="services" <TabsTrigger value="reviews"> ({playerReviews.length})</TabsTrigger>
className="rounded-none border-b-2 border-transparent data-[state=active]:border-primary data-[state=active]:bg-transparent px-6 py-3 text-base -mb-px"
>
({playerServices.length})
</TabsTrigger>
<TabsTrigger
value="reviews"
className="rounded-none border-b-2 border-transparent data-[state=active]:border-primary data-[state=active]:bg-transparent px-6 py-3 text-base -mb-px"
>
({playerReviews.length})
</TabsTrigger>
</TabsList> </TabsList>
<TabsContent value="services" className="mt-6"> <TabsContent value="services" className="mt-6">
+1 -1
View File
@@ -129,7 +129,7 @@ export function Header() {
{roleLabels[currentRole]} {roleLabels[currentRole]}
</Button> </Button>
</DropdownMenuTrigger> </DropdownMenuTrigger>
<DropdownMenuContent align="end"> <DropdownMenuContent align="end" className="space-y-1">
<DropdownMenuLabel></DropdownMenuLabel> <DropdownMenuLabel></DropdownMenuLabel>
<DropdownMenuSeparator /> <DropdownMenuSeparator />
{availableRoles.map(([role, label]) => ( {availableRoles.map(([role, label]) => (