feat: migrate from Next.js to Vite and React Router, updating routing and environment variable handling

This commit is contained in:
HouYunFei
2026-06-26 16:41:32 +08:00
parent ef7a218ba6
commit e635ec6908
24 changed files with 314 additions and 238 deletions
@@ -2,7 +2,7 @@
import { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from "react";
import type { ChangeEvent as ReactChangeEvent, DragEvent as ReactDragEvent, MouseEvent as ReactMouseEvent, PointerEvent as ReactPointerEvent } from "react";
import { useParams, useRouter, useSearchParams } from "next/navigation";
import { useNavigate, useParams, useSearchParams } from "react-router-dom";
import { BookOpen, Bot, Home, ImageIcon, Images, List, Menu, Music2, Plus, Redo2, Settings2, Trash2, Undo2, Upload, Video } from "lucide-react";
import { saveAs } from "file-saver";
@@ -220,9 +220,9 @@ function ConnectionCreateOption({ theme, icon, title, description, onClick }: {
function InfiniteCanvasPage() {
const { message, modal } = App.useApp();
const params = useParams<{ id: string }>();
const router = useRouter();
const searchParams = useSearchParams();
const projectId = params.id;
const navigate = useNavigate();
const [searchParams] = useSearchParams();
const projectId = params.id || "";
const localAgentConnected = useCanvasAgentStore((state) => state.connected);
const localAgentActivity = useCanvasAgentStore((state) => state.activity);
const localAgentEnabled = useCanvasAgentStore((state) => state.enabled);
@@ -399,7 +399,7 @@ function InfiniteCanvasPage() {
setProjectLoaded(false);
const project = openProject(projectId);
if (!project) {
router.replace("/canvas");
navigate("/canvas", { replace: true });
return;
}
@@ -430,7 +430,7 @@ function InfiniteCanvasPage() {
setProjectLoaded(true);
};
void restore();
}, [hydrated, openProject, projectId, router]);
}, [hydrated, navigate, openProject, projectId]);
useEffect(() => {
if (!projectLoaded || !["new", "recent", "choose"].includes(searchParams.get("mode") || "")) return;
@@ -1032,14 +1032,14 @@ function InfiniteCanvasPage() {
const createAndOpenProject = useCallback(() => {
const id = createProject(`无限画布 ${useCanvasStore.getState().projects.length + 1}`);
router.push(`/canvas/${id}`);
}, [createProject, router]);
navigate(`/canvas/${id}`);
}, [createProject, navigate]);
const deleteCurrentProject = useCallback(() => {
deleteProjects([projectId]);
cleanupAssetImages();
router.push("/canvas");
}, [cleanupAssetImages, deleteProjects, projectId, router]);
navigate("/canvas");
}, [cleanupAssetImages, deleteProjects, navigate, projectId]);
const handleCanvasMouseDown = useCallback(
(event: ReactPointerEvent<HTMLDivElement>) => {
@@ -2503,8 +2503,8 @@ function InfiniteCanvasPage() {
onCancelTitleEditing={() => setTitleEditing(false)}
canUndo={historyState.canUndo}
canRedo={historyState.canRedo}
onHome={() => router.push("/")}
onProjects={() => router.push("/canvas")}
onHome={() => navigate("/")}
onProjects={() => navigate("/canvas")}
onCreateProject={createAndOpenProject}
onDeleteProject={deleteCurrentProject}
onImportImage={() => handleUploadRequest()}