zapishis-client/apps/web/hooks/telegram/use-back-button.ts
Vlad Chikalkin ed197143d6
Feature/tma back button (#70)
* feat(layout): integrate TelegramProvider and BackButton into main layout for enhanced navigation

* refactor(layout): remove BackButton from main layout and update navigation imports

* use ui back button for non tma mode
2025-08-02 15:42:06 +03:00

37 lines
796 B
TypeScript

'use client';
import { backButton } from '@telegram-apps/sdk-react';
import { usePathname, useRouter } from 'next/navigation';
import { useCallback, useEffect } from 'react';
export function useBackButton() {
const { back } = useRouter();
const pathname = usePathname();
const onBackClick = useCallback(() => {
if (pathname !== '/') {
back();
}
}, [pathname, back]);
useEffect(() => {
const off = backButton.onClick(onBackClick);
return off;
}, [onBackClick]);
useEffect(() => {
if (backButton.isMounted()) {
if (isRootLevelPage(pathname)) {
backButton.hide();
} else {
backButton.show();
}
}
}, [pathname]);
}
function isRootLevelPage(path: string) {
return path.split('/').filter(Boolean).length === 1;
}