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()}>خروج