From 24a6f7c5707da246d0fb3aaef5c51bb9bb724b29 Mon Sep 17 00:00:00 2001 From: AliReza Date: Fri, 16 Oct 2026 02:18:10 +0330 Subject: [PATCH] =?UTF-8?q?Quiz:=20'=D8=AE=D8=B1=D9=88=D8=AC'=20leaves=20t?= =?UTF-8?q?he=20quiz=20even=20though=20the=20confirm=20sheet=20holds=20a?= =?UTF-8?q?=20back=20step=20(nav.leave)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 5.5 --- src/nav/Navigator.tsx | 12 +++++++++++- src/screens/QuizScreen.tsx | 2 +- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/nav/Navigator.tsx b/src/nav/Navigator.tsx index 5ef66ba..1b9405d 100644 --- a/src/nav/Navigator.tsx +++ b/src/nav/Navigator.tsx @@ -30,6 +30,8 @@ interface Nav { /** صفحه‌ی فعلی را عوض می‌کند بدونِ اضافه کردن به تاریخچه. */ replace: (route: Route) => void; back: () => void; + /** از صفحه‌ی فعلی بیرون می‌رود حتی اگر برگه‌ای باز باشد (برگه هم بسته می‌شود)؛ `back` فقط خودِ برگه را می‌بندد. */ + leave: () => void; switchTab: (tab: TabName) => void; } @@ -122,6 +124,13 @@ export function NavigatorProvider({ initial, children }: { initial: Route; child else stepBack(); }, [stepBack]); + const leave = useCallback(() => { + setSteps([]); + const s = stackRef.current; + if (s.length > 1) setState({ stack: s.slice(0, -1), direction: 'back' }); + else if (s[0].name !== 'home') setState({ stack: [{ name: 'home' }], direction: 'back' }); + }, []); + const switchTab = useCallback((tab: TabName) => { // زدنِ همان تبی که باز و ریشه است صفحه را از نو نمی‌سازد (قبلاً دوباره بار می‌شد)؛ مثلِ اپ‌های بومی به // بالای همان صفحه برمی‌گردد. @@ -141,9 +150,10 @@ export function NavigatorProvider({ initial, children }: { initial: Route; child push, replace, back, + leave, switchTab, }; - }, [stack, direction, reselect, push, replace, back, switchTab]); + }, [stack, direction, reselect, push, replace, back, leave, switchTab]); return ( diff --git a/src/screens/QuizScreen.tsx b/src/screens/QuizScreen.tsx index a7ff0d2..467cb89 100644 --- a/src/screens/QuizScreen.tsx +++ b/src/screens/QuizScreen.tsx @@ -405,7 +405,7 @@ export function QuizScreen({ lessonId, nodeId }: { lessonId?: number; nodeId?: s

setConfirmExit(false)}>ادامه می‌دم - { setConfirmExit(false); nav.back(); }}>خروج + nav.leave()}>خروج