fix(agent): 会话列表分栏跟随当前会话并进 URL,保留滚动位置
- 打开巡检会话(含巡检的子会话)时左栏自动切到「自动巡检」并选中当前项; 手动切换分栏写进 ?tab=,刷新、窄屏「全部会话」返回都保持 - 列表页 / 会话页之间保留搜索、筛选和各分栏的滚动位置;当前会话看不见时滚进可见区 - 跳到子会话时展开父会话 - 演示模式的分栏筛选与服务端一致:子会话随父会话 Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Cxwgnn2pbzQ7rXv3rq7fei
This commit is contained in:
1 parent
177d21c26b
commit
f5234cbcb9
7 files changed
+257
-30
No files matched your search
@@ -141,22 +141,34 @@ export const TRIGGER_LABEL: Record<AgentTrigger, string> = {
|
||||
export type AgentRunGroup = "conversation" | "auto";
|
||||
const isAutoTrigger = (t: AgentTrigger) => t === "schedule" || t === "event";
|
||||
|
||||
/** 会话所在分栏:子会话随父会话(与服务端 group 筛选一致);父会话未知时子会话归「对话」 */
|
||||
export function runGroup(
|
||||
run: Pick<AgentRunView, "trigger">,
|
||||
parent?: Pick<AgentRunView, "trigger"> | null,
|
||||
): AgentRunGroup {
|
||||
const t = run.trigger === "subagent" && parent ? parent.trigger : run.trigger;
|
||||
return isAutoTrigger(t) ? "auto" : "conversation";
|
||||
}
|
||||
|
||||
export function useAgentRuns(status?: AgentRunStatus, trigger?: AgentTrigger, group?: AgentRunGroup) {
|
||||
const mock = useAgentMockGate();
|
||||
return useInfiniteQuery({
|
||||
queryKey: [...agentKeys.runs(status, trigger, group), mock],
|
||||
initialPageParam: undefined as string | undefined,
|
||||
queryFn: async ({ pageParam, signal }) => {
|
||||
if (mock)
|
||||
if (mock) {
|
||||
const all = MOCK_RUNS();
|
||||
const byId = new Map(all.map((r) => [r.id, r] as const));
|
||||
return {
|
||||
items: MOCK_RUNS().filter(
|
||||
items: all.filter(
|
||||
(r) =>
|
||||
(!status || r.status === status) &&
|
||||
(!trigger || r.trigger === trigger) &&
|
||||
(!group || isAutoTrigger(r.trigger) === (group === "auto")),
|
||||
(!group || runGroup(r, r.parentRunId ? byId.get(r.parentRunId) : null) === group),
|
||||
),
|
||||
nextCursor: null,
|
||||
};
|
||||
}
|
||||
return apiParsed(RunPage, AGENT_BASE, {
|
||||
params: cleanParams({ status, trigger, group, cursor: pageParam, limit: 30 }),
|
||||
signal,
|
||||
|
||||
Reference in new issue
Block a user