forked from Tadrisino/MathApp_frontend
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;
|
replace: (route: Route) => void;
|
||||||
back: () => void;
|
back: () => void;
|
||||||
|
/** از صفحهی فعلی بیرون میرود حتی اگر برگهای باز باشد (برگه هم بسته میشود)؛ `back` فقط خودِ برگه را میبندد. */
|
||||||
|
leave: () => void;
|
||||||
switchTab: (tab: TabName) => void;
|
switchTab: (tab: TabName) => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -122,6 +124,13 @@ export function NavigatorProvider({ initial, children }: { initial: Route; child
|
|||||||
else stepBack();
|
else stepBack();
|
||||||
}, [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) => {
|
const switchTab = useCallback((tab: TabName) => {
|
||||||
// زدنِ همان تبی که باز و ریشه است صفحه را از نو نمیسازد (قبلاً دوباره بار میشد)؛ مثلِ اپهای بومی به
|
// زدنِ همان تبی که باز و ریشه است صفحه را از نو نمیسازد (قبلاً دوباره بار میشد)؛ مثلِ اپهای بومی به
|
||||||
// بالای همان صفحه برمیگردد.
|
// بالای همان صفحه برمیگردد.
|
||||||
@@ -141,9 +150,10 @@ export function NavigatorProvider({ initial, children }: { initial: Route; child
|
|||||||
push,
|
push,
|
||||||
replace,
|
replace,
|
||||||
back,
|
back,
|
||||||
|
leave,
|
||||||
switchTab,
|
switchTab,
|
||||||
};
|
};
|
||||||
}, [stack, direction, reselect, push, replace, back, switchTab]);
|
}, [stack, direction, reselect, push, replace, back, leave, switchTab]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<NavContext.Provider value={value}>
|
<NavContext.Provider value={value}>
|
||||||
|
|||||||
@@ -405,7 +405,7 @@ export function QuizScreen({ lessonId, nodeId }: { lessonId?: number; nodeId?: s
|
|||||||
</p>
|
</p>
|
||||||
<div className="flex flex-col gap-2.5">
|
<div className="flex flex-col gap-2.5">
|
||||||
<PrimaryButton color={color} onClick={() => setConfirmExit(false)}>ادامه میدم</PrimaryButton>
|
<PrimaryButton color={color} onClick={() => setConfirmExit(false)}>ادامه میدم</PrimaryButton>
|
||||||
<SecondaryButton onClick={() => { setConfirmExit(false); nav.back(); }}>خروج</SecondaryButton>
|
<SecondaryButton onClick={() => nav.leave()}>خروج</SecondaryButton>
|
||||||
</div>
|
</div>
|
||||||
</Sheet>
|
</Sheet>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user