feat: 对话列表显示总数,SOUL 编辑区高度自适应收敛
- 新增 POST /threads/count:与 /threads/search 同一套过滤(标题搜索、
系统会话排除),仅返回 {total};ThreadMetaStore 增加 count 方法
(SQL 走 COUNT(*),JSON 过滤分批扫描计数)
- 对话页面搜索框下常驻显示「共 N 条对话」,分页条显示 当前页/总页数
(useThreadsCount,仅随筛选条件变化,翻页不重复请求)
- 智能体右侧 SOUL 预览改为 40vh 上限自适应展开(不再全部展开);
详情面板/卡片编辑/创建页的 SOUL 输入框统一为适中高度 + 可拖拽
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
f107ebc46d
commit
3d6f35391e
10 files changed
+204
-8
No files matched your search
@@ -841,6 +841,47 @@ export function useThreadsPage(options: {
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Total number of conversations matching the same filters as
|
||||
* `useThreadsPage`, via the lightweight `/threads/count` endpoint — powers
|
||||
* the "共 N 条 / X 页" display without fetching any rows. Depends only on the
|
||||
* filters (not the page), so paging doesn't refire it.
|
||||
*/
|
||||
export function useThreadsCount(options: {
|
||||
search?: string;
|
||||
metadata?: Record<string, unknown>;
|
||||
}) {
|
||||
const normalizedSearch = options.search?.trim() ?? "";
|
||||
return useQuery<number>({
|
||||
queryKey: [
|
||||
"threads",
|
||||
"search",
|
||||
"count",
|
||||
normalizedSearch,
|
||||
options.metadata ?? null,
|
||||
],
|
||||
queryFn: async () => {
|
||||
const response = await apiFetch(
|
||||
`${getLangGraphBaseURL()}/threads/count`,
|
||||
{
|
||||
method: "POST",
|
||||
headers: { "Content-Type": "application/json" },
|
||||
body: JSON.stringify({
|
||||
metadata: options.metadata ?? {},
|
||||
query: normalizedSearch || undefined,
|
||||
}),
|
||||
},
|
||||
);
|
||||
if (!response.ok) {
|
||||
throw new Error("Failed to count conversations");
|
||||
}
|
||||
const data = (await response.json()) as { total: number };
|
||||
return data.total;
|
||||
},
|
||||
refetchOnWindowFocus: false,
|
||||
});
|
||||
}
|
||||
|
||||
export function useDeleteThread() {
|
||||
const queryClient = useQueryClient();
|
||||
const apiClient = getAPIClient();
|
||||
|
||||
Reference in new issue
Block a user