From 84db9711bcd455ed2c6c15ce1473d37459250008 Mon Sep 17 00:00:00 2001 From: sagit <36596628+Sagit-chu@users.noreply.github.com> Date: Sat, 14 Mar 2026 12:14:15 +0800 Subject: [PATCH] fix: preserve scroll position after editing forward rules (#319) * fix(dialog): prevent both open and close auto focus to avoid page scroll Add onOpenAutoFocus handler to prevent Radix Dialog from auto-focusing content on open, which can cause unwanted scroll behavior. * fix(dialog): remove onOpenAutoFocus, keep only onCloseAutoFocus Remove onOpenAutoFocus handler that was causing scroll issues on first open. Keep onCloseAutoFocus to prevent scroll to trigger element on close. Key fix: Move {...props} before onCloseAutoFocus to prevent override. * fix(dialog): prevent scroll to top on modal close - Move {...props} before onCloseAutoFocus to prevent override - Simplify handler to just e.preventDefault() - Apply fix to both dialog.tsx and modal.tsx * fix: preserve scroll position after editing forward rules Move getForwardDisplayFlow outside component to prevent unnecessary re-renders that reset scroll position on save. --- vite-frontend/src/pages/forward.tsx | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/vite-frontend/src/pages/forward.tsx b/vite-frontend/src/pages/forward.tsx index 8129ed0..cd8a42e 100644 --- a/vite-frontend/src/pages/forward.tsx +++ b/vite-frontend/src/pages/forward.tsx @@ -579,6 +579,16 @@ const mapForwardApiItems = (items: ForwardApiItem[]): Forward[] => { })); }; +const getForwardDisplayFlow = (forward: Forward): number => { + const directFlow = (forward.inFlow || 0) + (forward.outFlow || 0); + + if (directFlow > 0) { + return directFlow; + } + + return forward.federationShareFlow || 0; +}; + export default function ForwardPage() { const [loading, setLoading] = useState(true); const [forwards, setForwards] = useState([]); @@ -1237,16 +1247,6 @@ export default function ForwardPage() { [], ); - const getForwardDisplayFlow = (forward: Forward): number => { - const directFlow = (forward.inFlow || 0) + (forward.outFlow || 0); - - if (directFlow > 0) { - return directFlow; - } - - return forward.federationShareFlow || 0; - }; - // 切换显示模式并保存到localStorage const handleViewModeChange = () => { const newMode = viewMode === "grouped" ? "direct" : "grouped";