History

Remove dead code and fix sidebar split/tab navigation conflict

- Remove unused `nowTick` state variable from ChatView - Remove unused `terminalFocusRequestId` state variable from ChatView - Delete unused `WorkspaceRouteSync` component - Remove redundant router.navigate() calls from sidebar split/tab context menu handlers that conflicted with route-level openThreadSurface("focus-or-tab")

Cursor Agent committed 7 months ago

Commit dc4ee0b1 parent d3d096c3 files · +0 −145Browse files

Unified · Split

3 files
  1. apps/web/src/components/ChatView.tsx +0 −2
  2. apps/web/src/components/Sidebar.tsx +0 −13
  3. apps/web/src/components/workspace/WorkspaceRouteSync.tsx +0 −130
apps/web/src/components/ChatView.tsx+0−2
@@ -498,8 +498,6 @@ export default function ChatView(props: ChatViewProps) { · 497 unmodified lines
498498 // When set, the thread-change reset effect will open the sidebar instead of closing it.
499499 // Used by "Implement in a new thread" to carry the sidebar-open intent across navigation.
500500 const planSidebarOpenOnNextThreadRef = useRef(false);
501− const [terminalFocusRequestId, setTerminalFocusRequestId] = useState(0);
502− const [nowTick, setNowTick] = useState(() => Date.now());
503501 const [pullRequestDialogState, setPullRequestDialogState] =
504502 useState<PullRequestDialogState | null>(null);
505503 const [attachmentPreviewHandoffByMessageId, setAttachmentPreviewHandoffByMessageId] = useState<
apps/web/src/components/Sidebar.tsx+0−13
@@ -1654,28 +1654,16 @@ const SidebarProjectItem = memo(function SidebarProjectItem(props: SidebarProjec · 1653 unmodified lines
16541654
16551655 if (clicked === "open-new-tab") {
16561656 openThreadInNewTab(serverThreadSurfaceInput(threadRef));
1657− void router.navigate({
1658− to: "/$environmentId/$threadId",
1659− params: buildThreadRouteParams(threadRef),
1660− });
16611657 return;
16621658 }
16631659
16641660 if (clicked === "open-split-right") {
16651661 openThreadInSplit(serverThreadSurfaceInput(threadRef), "x");
1666− void router.navigate({
1667− to: "/$environmentId/$threadId",
1668− params: buildThreadRouteParams(threadRef),
1669− });
16701662 return;
16711663 }
16721664
16731665 if (clicked === "open-split-down") {
16741666 openThreadInSplit(serverThreadSurfaceInput(threadRef), "y");
1675− void router.navigate({
1676− to: "/$environmentId/$threadId",
1677− params: buildThreadRouteParams(threadRef),
1678− });
16791667 return;
16801668 }
16811669
@@ -1729,7 +1717,6 @@ const SidebarProjectItem = memo(function SidebarProjectItem(props: SidebarProjec · 47 unmodified lines
17291717 openThreadInNewTab,
17301718 openThreadInSplit,
17311719 project.cwd,
1732− router,
17331720 ],
17341721 );
17351722
apps/web/src/components/workspace/WorkspaceRouteSync.tsx+0−130
@@ -1,130 +0,0 @@
1−import { useLocation, useNavigate, useParams } from "@tanstack/react-router";
2−import { useEffect, useMemo, useRef } from "react";
3−
4−import { useComposerDraftStore } from "../../composerDraftStore";
5−import { resolveThreadRouteTarget } from "../../threadRoutes";
6−import { useFocusedWorkspaceRouteTarget, useWorkspaceStore } from "../../workspace/store";
7−import type { ThreadSurfaceInput } from "../../workspace/types";
8−
9−function sameRouteTarget(
10− left: ReturnType<typeof resolveThreadRouteTarget>,
11− right: ReturnType<typeof resolveThreadRouteTarget>,
12−): boolean {
13− if (!left && !right) {
14− return true;
15− }
16− if (!left || !right || left.kind !== right.kind) {
17− return false;
18− }
19− if (left.kind === "server" && right.kind === "server") {
20− return (
21− left.threadRef.environmentId === right.threadRef.environmentId &&
22− left.threadRef.threadId === right.threadRef.threadId
23− );
24− }
25− if (left.kind === "draft" && right.kind === "draft") {
26− return left.draftId === right.draftId;
27− }
28− return false;
29−}
30−
31−export function WorkspaceRouteSync() {
32− const navigate = useNavigate();
33− const openThreadSurface = useWorkspaceStore((state) => state.openThreadSurface);
34− const currentRouteTarget = useParams({
35− strict: false,
36− select: (params) => resolveThreadRouteTarget(params),
37− });
38− const focusedRouteTarget = useFocusedWorkspaceRouteTarget();
39− const pathname = useLocation({
40− select: (location) => location.pathname,
41− });
42− const previousPathnameRef = useRef(pathname);
43− const draftSession = useComposerDraftStore((store) =>
44− currentRouteTarget?.kind === "draft" ? store.getDraftSession(currentRouteTarget.draftId) : null,
45− );
46− const currentRouteSurfaceInput = useMemo<ThreadSurfaceInput | null>(() => {
47− if (!currentRouteTarget) {
48− return null;
49− }
50− if (currentRouteTarget.kind === "server") {
51− return {
52− scope: "server",
53− threadRef: currentRouteTarget.threadRef,
54− };
55− }
56− if (!draftSession) {
57− return null;
58− }
59− return {
60− scope: "draft",
61− draftId: currentRouteTarget.draftId,
62− environmentId: draftSession.environmentId,
63− threadId: draftSession.threadId,
64− };
65− }, [currentRouteTarget, draftSession]);
66−
67− useEffect(() => {
68− const pathnameChanged = previousPathnameRef.current !== pathname;
69− previousPathnameRef.current = pathname;
70−
71− if (currentRouteTarget) {
72− if (!currentRouteSurfaceInput) {
73− return;
74− }
75−
76− if (!focusedRouteTarget || pathnameChanged) {
77− openThreadSurface(currentRouteSurfaceInput, "focus-or-tab");
78− return;
79− }
80−
81− if (sameRouteTarget(currentRouteTarget, focusedRouteTarget)) {
82− return;
83− }
84−
85− void navigateToRouteTarget(navigate, focusedRouteTarget);
86− return;
87− }
88−
89− if (!focusedRouteTarget) {
90− return;
91− }
92−
93− void navigateToRouteTarget(navigate, focusedRouteTarget);
94− }, [
95− currentRouteSurfaceInput,
96− currentRouteTarget,
97− focusedRouteTarget,
98− navigate,
99− openThreadSurface,
100− pathname,
101− ]);
102−
103− return null;
104−}
105−
106−function navigateToRouteTarget(
107− navigate: ReturnType<typeof useNavigate>,
108− target: NonNullable<ReturnType<typeof resolveThreadRouteTarget>>,
109−) {
110− if (target.kind === "server") {
111− return navigate({
112− to: "/$environmentId/$threadId",
113− params: {
114− environmentId: target.threadRef.environmentId,
115− threadId: target.threadRef.threadId,
116− },
117− replace: true,
118− search: {},
119− });
120− }
121−
122− return navigate({
123− to: "/draft/$draftId",
124− params: {
125− draftId: target.draftId,
126− },
127− replace: true,
128− search: {},
129− });
130−}