From b6e1730d54832bb1572bef2c17f9da8b5b3b3a63 Mon Sep 17 00:00:00 2001 From: Yuzu Date: Tue, 30 Jun 2026 02:00:45 +0700 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat:=20restore=20scroll=20position?= =?UTF-8?q?=20across=20navigation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/renderer/src/components/AppShell.tsx | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/renderer/src/components/AppShell.tsx b/src/renderer/src/components/AppShell.tsx index b8ad345..b525265 100644 --- a/src/renderer/src/components/AppShell.tsx +++ b/src/renderer/src/components/AppShell.tsx @@ -1,4 +1,4 @@ -import { Fragment, useEffect, useState } from "react"; +import { Fragment, useEffect, useLayoutEffect, useRef, useState } from "react"; import { ArrowLeft, ChevronLeft, @@ -140,6 +140,14 @@ function Shell() { ? `${nav.current.kind}:${nav.current.id}` : nav.current.kind; + const stageRef = useRef(null); + useLayoutEffect(() => { + const el = stageRef.current; + if (!el) return; + const saved = nav.getViewState(`scroll:${stageKey}`); + el.scrollTop = typeof saved === "number" ? saved : 0; + }, [stageKey, nav]); + return (
@@ -194,7 +202,11 @@ function Shell() {
-
+
nav.setViewState(`scroll:${stageKey}`, e.currentTarget.scrollTop)} + > {nav.canBack ? (