diff --git a/src/PageManager.tsx b/src/PageManager.tsx index 05e69c5e..33892600 100644 --- a/src/PageManager.tsx +++ b/src/PageManager.tsx @@ -1,6 +1,6 @@ import Sidebar from '@/components/Sidebar' import { Separator } from '@/components/ui/separator' -import { cn, isAndroid } from '@/lib/utils' +import { cn } from '@/lib/utils' import NoteListPage from '@/pages/primary/NoteListPage' import HomePage from '@/pages/secondary/HomePage' import { TPageRef } from '@/types' @@ -92,6 +92,7 @@ export function PageManager({ maxStackSize = 5 }: { maxStackSize?: number }) { const { isSmallScreen } = useScreenSize() useEffect(() => { + window.history.pushState(null, '', window.location.href) if (window.location.pathname !== '/') { if ( ['/users', '/notes', '/relays'].some((path) => window.location.pathname.startsWith(path)) && @@ -118,7 +119,10 @@ export function PageManager({ maxStackSize = 5 }: { maxStackSize?: number }) { const onPopState = (e: PopStateEvent) => { const closeModal = modalManager.pop() - if (closeModal) return + if (closeModal) { + window.history.forward() + return + } let state = e.state as { index: number; url: string } | null setSecondaryStack((pre) => { @@ -173,25 +177,10 @@ export function PageManager({ maxStackSize = 5 }: { maxStackSize?: number }) { }) } - const onLeave = (event: BeforeUnloadEvent) => { - // Cancel the event as stated by the standard. - event.preventDefault() - // Chrome requires returnValue to be set. - event.returnValue = '' - } - window.addEventListener('popstate', onPopState) - if (isAndroid()) { - window.addEventListener('beforeunload', onLeave) - } - return () => { window.removeEventListener('popstate', onPopState) - - if (isAndroid()) { - window.removeEventListener('beforeunload', onLeave) - } } }, []) @@ -211,25 +200,21 @@ export function PageManager({ maxStackSize = 5 }: { maxStackSize?: number }) { } const pushSecondaryPage = (url: string, index?: number) => { - // FIXME: Temporary solution to prevent the back action after closing - // the modal when navigating. - setTimeout(() => { - setSecondaryStack((prevStack) => { - if (isCurrentPage(prevStack, url)) { - const currentItem = prevStack[prevStack.length - 1] - if (currentItem?.ref?.current) { - currentItem.ref.current.scrollToTop() - } - return prevStack + setSecondaryStack((prevStack) => { + if (isCurrentPage(prevStack, url)) { + const currentItem = prevStack[prevStack.length - 1] + if (currentItem?.ref?.current) { + currentItem.ref.current.scrollToTop() } + return prevStack + } - const { newStack, newItem } = pushNewPageToStack(prevStack, url, maxStackSize, index) - if (newItem) { - window.history.pushState({ index: newItem.index, url }, '', url) - } - return newStack - }) - }, 10) + const { newStack, newItem } = pushNewPageToStack(prevStack, url, maxStackSize, index) + if (newItem) { + window.history.pushState({ index: newItem.index, url }, '', url) + } + return newStack + }) } const popSecondaryPage = () => { diff --git a/src/components/NoteOptions/index.tsx b/src/components/NoteOptions/index.tsx index f1bd5054..166ae126 100644 --- a/src/components/NoteOptions/index.tsx +++ b/src/components/NoteOptions/index.tsx @@ -88,6 +88,7 @@ export default function NoteOptions({ event, className }: { event: Event; classN