From ff35f5b1055bcb6462240f85d0f6f60be55a0ae2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A5=87=E8=B6=A3=E4=BF=9D=E7=BD=97?= Date: Thu, 22 Jan 2026 11:27:02 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=8E=BB=E9=99=A4=E8=B7=AF=E7=94=B1?= =?UTF-8?q?=E6=94=B9=E4=B8=BA=20Store=20=E6=8E=A7=E5=88=B6=E5=BD=93?= =?UTF-8?q?=E5=89=8D=E6=BF=80=E6=B4=BB=20Tab?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/biz/project-tabs-bar.tsx | 12 --------- src/main.tsx | 26 +++++++++---------- src/pages/editor.tsx | 33 ++++++------------------- src/pages/home.tsx | 4 --- src/store/project-tabs-store.ts | 3 ++- 5 files changed, 23 insertions(+), 55 deletions(-) diff --git a/src/components/biz/project-tabs-bar.tsx b/src/components/biz/project-tabs-bar.tsx index 4f4ef19..490c4b9 100644 --- a/src/components/biz/project-tabs-bar.tsx +++ b/src/components/biz/project-tabs-bar.tsx @@ -1,5 +1,3 @@ -import { useEffect } from "react"; -import { useLocation, useNavigate } from "react-router"; import { X } from "lucide-react"; import { cn } from "@/lib/utils"; import { useProjectTabsStore } from "@/store/project-tabs-store"; @@ -10,16 +8,6 @@ export function ProjectTabsBar() { const activateTab = useProjectTabsStore((state) => state.activateTab); const activateHome = useProjectTabsStore((state) => state.activateHome); const closeTab = useProjectTabsStore((state) => state.closeTab); - const location = useLocation(); - const navigate = useNavigate(); - - useEffect(() => { - const active = tabs.find((tab) => tab.id === activeTabId); - if (!active) return; - const targetPath = active.kind === "home" ? "/" : `/editor/${active.projectId}`; - if (location.pathname === targetPath) return; - navigate(targetPath); - }, [activeTabId, tabs, location.pathname, navigate]); function handleSelect(tabId: string, kind: "home" | "project") { if (kind === "home") activateHome(); diff --git a/src/main.tsx b/src/main.tsx index b3f80de..a3fb802 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -1,26 +1,26 @@ import { StrictMode } from "react"; import { createRoot } from "react-dom/client"; -import { createHashRouter } from "react-router"; -import { RouterProvider } from "react-router/dom"; import "./index.css"; import Home from "./pages/home.tsx"; import Editor from "./pages/editor.tsx"; import { Toaster } from "@/components/ui/sonner"; +import { useProjectTabsStore } from "@/store/project-tabs-store"; -const router = createHashRouter([ - { - path: "/", - element: , - }, - { - path: "/editor/:id", - element: , - }, -]); +function App() { + const tabs = useProjectTabsStore((state) => state.tabs); + const activeTabId = useProjectTabsStore((state) => state.activeTabId); + const active = tabs.find((tab) => tab.id === activeTabId); + + if (active?.kind === "project") { + return ; + } + + return ; +} createRoot(document.getElementById("root")!).render( - + ); diff --git a/src/pages/editor.tsx b/src/pages/editor.tsx index 0575f97..ce152b6 100644 --- a/src/pages/editor.tsx +++ b/src/pages/editor.tsx @@ -1,7 +1,6 @@ /* eslint-disable react-hooks/exhaustive-deps */ import { useCallback, useEffect, useMemo, useRef, useState } from "react"; import type React from "react"; -import { useParams, useNavigate } from "react-router"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { @@ -18,7 +17,7 @@ import { updateProject, deleteProjectDeep, } from "@/lib/db"; -import { ArrowBigDownDash, ArrowBigUpDash, Brackets, CaseSensitive, Filter, FolderOpen, Languages, LocateFixed, MoreVertical, PencilLine, Reply, Save, Settings, Trash2 } from "lucide-react"; +import { ArrowBigDownDash, ArrowBigUpDash, Brackets, CaseSensitive, Filter, FolderOpen, Languages, LocateFixed, MoreVertical, PencilLine, Save, Settings, Trash2 } from "lucide-react"; import { useTranslationInlineEdit } from "@/hooks/biz/use-translation-inline-edit"; import { buildStructureFromObject, flattenEntries, flattenValues, type FlatEntry, insertEntrySibling, removeEntryAtPath, renameEntryAtPath, moveEntryByOffset } from "@/lib/i18n-structure"; import { ImportLanguageModal } from "@/components/biz/import-language-modal"; @@ -51,9 +50,11 @@ import { loadNativeProjectSources, saveNativeLanguageFile, type LoadedProjectSou import { useProjectSourcesStore } from "@/store/sources-store"; import CommonMenubar, { type CommonMenubarItem } from "@/components/biz/editor/common-menubar"; -export default function Editor() { - const { id: projectId } = useParams(); - const navigate = useNavigate(); +type EditorProps = { + projectId?: string; +}; + +export default function Editor({ projectId }: EditorProps) { const [project, setProject] = useState(null); const [structure, setStructure] = useState(null); const [languages, setLanguages] = useState([]); @@ -605,23 +606,6 @@ export default function Editor() {
- {!structure ? ( - - ) : ( -
- - -
- )} {projectId && ( )} {project && ( - )}
@@ -832,7 +816,6 @@ export default function Editor() { await deleteProjectDeep(projectId); forgetProjectInTabs(projectId); activateHomeTab(); - navigate("/"); }} /> diff --git a/src/pages/home.tsx b/src/pages/home.tsx index 1c7958e..f49b1b2 100644 --- a/src/pages/home.tsx +++ b/src/pages/home.tsx @@ -1,5 +1,4 @@ import { useEffect, useMemo, useState } from "react"; -import { useNavigate } from "react-router"; import { Input } from "@/components/ui/input"; import { Button } from "@/components/ui/button"; import { createProject, deleteProjectDeep, listProjects, type Project, updateProject } from "@/lib/db"; @@ -26,7 +25,6 @@ function App() { const [error, setError] = useState(null); const [settingsOpen, setSettingsOpen] = useState(false); const [currentProject, setCurrentProject] = useState(null); - const navigate = useNavigate(); const flags = useConnectionFlags(); const activateHomeTab = useProjectTabsStore((state) => state.activateHome); const registerProjectsInTabs = useProjectTabsStore((state) => state.registerProjects); @@ -119,14 +117,12 @@ function App() { className="relative cursor-pointer rounded-md border p-4 transition hover:shadow-sm" onClick={() => { openProjectTab(p); - navigate(`/editor/${p.id}`); }} role="button" tabIndex={0} onKeyDown={(e) => { if (e.key === "Enter" || e.key === " ") { openProjectTab(p); - navigate(`/editor/${p.id}`); } }} > diff --git a/src/store/project-tabs-store.ts b/src/store/project-tabs-store.ts index 28586b0..88fee41 100644 --- a/src/store/project-tabs-store.ts +++ b/src/store/project-tabs-store.ts @@ -227,7 +227,8 @@ export const useProjectTabsStore = create((set, get) => ({ get().closeProjectTab(projectId); set((state) => { if (!state.projectIndex[projectId]) return state; - const { [projectId]: _removed, ...rest } = state.projectIndex; + + const { [projectId]: _removed, ...rest } = state.projectIndex; // eslint-disable-line @typescript-eslint/no-unused-vars return { projectIndex: rest, lastActiveProjectId: state.lastActiveProjectId === projectId ? null : state.lastActiveProjectId,