返回 DeepSeek-Reasonix
useLocalUiLifecycles.ts
根目录 / desktop / frontend / src / app-runtime / useLocalUiLifecycles.ts
1 import { useEffect, useRef } from "react";
2 import { activeTabMirror } from "./activeTabMirror";
3
4 export function useRetiredProjectTreeUiMigration() {
5 useEffect(() => {
6 try {
7 localStorage.removeItem("projectTree:timeFilter");
8 localStorage.removeItem("projectTree:workbenchOrganize");
9 } catch {
10 /* localStorage unavailable */
11 }
12 }, []);
13 }
14
15 export function useDecisionSurfaceFocus(input: {
16 surface: string | null;
17 activeTabId?: string | null;
18 closeOverlays: () => void;
19 }) {
20 const { surface, activeTabId, closeOverlays } = input;
21 const previous = useRef<string | null>(null);
22 const surfaceRef = useRef<string | null>(surface);
23 surfaceRef.current = surface;
24 useEffect(() => {
25 if (surface) {
26 closeOverlays();
27 previous.current = surface;
28 return;
29 }
30 const hadSurface = previous.current !== null;
31 previous.current = null;
32 if (!hadSurface) return;
33 const tabAtRelease = activeTabId;
34 const frame = requestAnimationFrame(() => {
35 if (surfaceRef.current !== null || activeTabMirror().current !== tabAtRelease) return;
36 (document.getElementById("composer-input") as HTMLTextAreaElement | null)?.focus({ preventScroll: true });
37 });
38 return () => cancelAnimationFrame(frame);
39 }, [activeTabId, closeOverlays, surface]);
40 }
41
42 export function useActiveTabUiReset(input: {
43 activeTabId?: string | null;
44 setClearPending: (value: boolean) => void;
45 setInsertTarget: (value: "composer") => void;
46 }) {
47 const { activeTabId, setClearPending, setInsertTarget } = input;
48 useEffect(() => {
49 setClearPending(false);
50 setInsertTarget("composer");
51 }, [activeTabId, setClearPending, setInsertTarget]);
52 }
53
54 export function useVerificationRevealReset(input: {
55 activeTabId?: string | null;
56 completionSummary: unknown;
57 sessionPath?: string;
58 turnStartAt?: number | null;
59 reset: (value: null) => void;
60 }) {
61 const { activeTabId, sessionPath, turnStartAt, reset } = input;
62 useEffect(() => { reset(null); }, [activeTabId, sessionPath, reset, turnStartAt]);
63 }
64
64 lines TYPESCRIPT