Quiz: 'خروج' leaves the quiz even though the confirm sheet holds a back step (nav.leave)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -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 (
|
||||
<NavContext.Provider value={value}>
|
||||
|
||||
@@ -405,7 +405,7 @@ export function QuizScreen({ lessonId, nodeId }: { lessonId?: number; nodeId?: s
|
||||
</p>
|
||||
<div className="flex flex-col gap-2.5">
|
||||
<PrimaryButton color={color} onClick={() => setConfirmExit(false)}>ادامه میدم</PrimaryButton>
|
||||
<SecondaryButton onClick={() => { setConfirmExit(false); nav.back(); }}>خروج</SecondaryButton>
|
||||
<SecondaryButton onClick={() => nav.leave()}>خروج</SecondaryButton>
|
||||
</div>
|
||||
</Sheet>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user