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 (