Files
douyin-archive/app/aweme/[awemeId]/components/AuthorWorksTab.tsx
T
feie9454andClaude Opus 5.5 b84fcec77b feat: 播放页按来源列表切换,新增作者/搜索/hashtag 侧栏
- 播放上下文:作品链接带上来源(搜索、标签、作者、hashtag),上一条/下一条
  在该列表内移动;当前作品不在列表中时退回全部作品的发布时间顺序
- 顶部提示标签显示当前列表与位置,点击打开侧栏列表,✕ 退出
- 侧栏改为「评论 | TA的作品 | 搜索结果/#hashtag」标签页,作品封面网格可就地切换
- 作者模式:打开「TA的作品」进入,关闭侧栏不退出,点提示 ✕ 后回到原来的列表
- 从搜索结果进入或点 hashtag 时自动打开对应列表
- 描述中的 hashtag 可点击,按完整 hashtag 精确匹配(#丰川祥子 不含 #丰川祥子cos)
- 新增 /api/playlist;搜索 SQL 抽到 lib/search-query.ts 与播放页共用,保证顺序一致
- 移动端:底部抽屉、点作品后收起,媒体区支持上下滑切换

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-09 00:50:09 +08:00

64 lines
1.9 KiB
TypeScript

import { ChevronRight } from "lucide-react";
import Link from "next/link";
import { memo } from "react";
import type { PlaylistState } from "../hooks/usePlaylist";
import type { User } from "../types.ts";
import { WorksGrid } from "./WorksGrid";
interface AuthorWorksTabProps {
/** 侧栏打开且停在「TA的作品」标签页 */
active: boolean;
author: User;
works: PlaylistState;
currentId: string;
/** 跳转时原样带上的播放上下文查询串 */
contextQuery: string;
onSelect: () => void;
}
// 侧栏「TA的作品」:作者在库里的全部作品。点作品就地切换;点作者名字才去独立的作者页。
export const AuthorWorksTab = memo(function AuthorWorksTab({
active,
author,
works,
currentId,
contextQuery,
onSelect,
}: AuthorWorksTabProps) {
const header = author.sec_uid ? (
<Link
href={`/author/${author.sec_uid}`}
className="group flex min-w-0 flex-1 items-center gap-2.5"
title="打开作者主页"
>
{/* biome-ignore lint/performance/noImgElement: 头像来自对象存储,不走 next/image */}
<img
src={author.avatar_url ?? ""}
alt=""
className="h-9 w-9 shrink-0 rounded-full bg-white/10 object-cover"
/>
<span className="truncate font-semibold text-white group-hover:underline">
@{author.nickname}
</span>
<ChevronRight size={16} className="shrink-0 text-white/60" />
<span className="ml-auto shrink-0 text-xs text-white/40">作者主页</span>
</Link>
) : (
<span className="truncate font-semibold text-white">
@{author.nickname}
</span>
);
return (
<WorksGrid
active={active}
list={works}
currentId={currentId}
hrefQuery={contextQuery}
onSelect={onSelect}
singleHint="库里只存了这位作者的这一个作品"
header={header}
/>
);
});