Mayo commited on
fix: disable prefetch to make navigation work
Browse filesref: https://github.com/vercel/next.js/issues/48642#issuecomment-1517125348
- ui/app/(app)/about/page.tsx +5 -5
- ui/app/(app)/settings/page.tsx +9 -8
- ui/components/MenuBar.tsx +9 -19
ui/app/(app)/about/page.tsx
CHANGED
|
@@ -2,7 +2,7 @@
|
|
| 2 |
|
| 3 |
import { useEffect, useState } from 'react'
|
| 4 |
import { useTranslation } from 'react-i18next'
|
| 5 |
-
import
|
| 6 |
import {
|
| 7 |
ChevronLeftIcon,
|
| 8 |
CheckCircleIcon,
|
|
@@ -20,7 +20,6 @@ type VersionStatus = 'loading' | 'latest' | 'outdated' | 'error'
|
|
| 20 |
|
| 21 |
export default function AboutPage() {
|
| 22 |
const { t } = useTranslation()
|
| 23 |
-
const router = useRouter()
|
| 24 |
const { openExternal } = useAppStore()
|
| 25 |
|
| 26 |
const [appVersion, setAppVersion] = useState<string>()
|
|
@@ -64,12 +63,13 @@ export default function AboutPage() {
|
|
| 64 |
<div className='relative mx-auto max-w-xl'>
|
| 65 |
{/* Header with back button */}
|
| 66 |
<div className='mb-8 flex items-center'>
|
| 67 |
-
<
|
| 68 |
-
|
|
|
|
| 69 |
className='text-muted-foreground hover:bg-accent hover:text-foreground absolute -left-14 flex size-10 items-center justify-center rounded-full transition'
|
| 70 |
>
|
| 71 |
<ChevronLeftIcon className='size-6' />
|
| 72 |
-
</
|
| 73 |
<h1 className='text-foreground text-2xl font-bold'>
|
| 74 |
{t('settings.about')}
|
| 75 |
</h1>
|
|
|
|
| 2 |
|
| 3 |
import { useEffect, useState } from 'react'
|
| 4 |
import { useTranslation } from 'react-i18next'
|
| 5 |
+
import Link from 'next/link'
|
| 6 |
import {
|
| 7 |
ChevronLeftIcon,
|
| 8 |
CheckCircleIcon,
|
|
|
|
| 20 |
|
| 21 |
export default function AboutPage() {
|
| 22 |
const { t } = useTranslation()
|
|
|
|
| 23 |
const { openExternal } = useAppStore()
|
| 24 |
|
| 25 |
const [appVersion, setAppVersion] = useState<string>()
|
|
|
|
| 63 |
<div className='relative mx-auto max-w-xl'>
|
| 64 |
{/* Header with back button */}
|
| 65 |
<div className='mb-8 flex items-center'>
|
| 66 |
+
<Link
|
| 67 |
+
href='/'
|
| 68 |
+
prefetch={false}
|
| 69 |
className='text-muted-foreground hover:bg-accent hover:text-foreground absolute -left-14 flex size-10 items-center justify-center rounded-full transition'
|
| 70 |
>
|
| 71 |
<ChevronLeftIcon className='size-6' />
|
| 72 |
+
</Link>
|
| 73 |
<h1 className='text-foreground text-2xl font-bold'>
|
| 74 |
{t('settings.about')}
|
| 75 |
</h1>
|
ui/app/(app)/settings/page.tsx
CHANGED
|
@@ -3,7 +3,7 @@
|
|
| 3 |
import { useEffect, useMemo, useState } from 'react'
|
| 4 |
import { useTheme } from 'next-themes'
|
| 5 |
import { useTranslation } from 'react-i18next'
|
| 6 |
-
import
|
| 7 |
import {
|
| 8 |
SunIcon,
|
| 9 |
MoonIcon,
|
|
@@ -43,7 +43,6 @@ const THEME_OPTIONS = [
|
|
| 43 |
export default function SettingsPage() {
|
| 44 |
const { t, i18n } = useTranslation()
|
| 45 |
const { theme, setTheme } = useTheme()
|
| 46 |
-
const router = useRouter()
|
| 47 |
const locales = useMemo(
|
| 48 |
() => Object.keys(i18n.options.resources || {}),
|
| 49 |
[i18n.options.resources],
|
|
@@ -73,12 +72,13 @@ export default function SettingsPage() {
|
|
| 73 |
<div className='relative mx-auto max-w-xl'>
|
| 74 |
{/* Header with back button */}
|
| 75 |
<div className='mb-8 flex items-center'>
|
| 76 |
-
<
|
| 77 |
-
|
|
|
|
| 78 |
className='text-muted-foreground hover:bg-accent hover:text-foreground absolute -left-14 flex size-10 items-center justify-center rounded-full transition'
|
| 79 |
>
|
| 80 |
<ChevronLeftIcon className='size-6' />
|
| 81 |
-
</
|
| 82 |
<h1 className='text-foreground text-2xl font-bold'>
|
| 83 |
{t('settings.title')}
|
| 84 |
</h1>
|
|
@@ -184,15 +184,16 @@ export default function SettingsPage() {
|
|
| 184 |
<div className='border-border mb-8 border-t' />
|
| 185 |
|
| 186 |
{/* About Link */}
|
| 187 |
-
<
|
| 188 |
-
|
|
|
|
| 189 |
className='hover:bg-accent flex w-full items-center justify-between rounded-lg px-3 py-3 text-left transition'
|
| 190 |
>
|
| 191 |
<span className='text-foreground text-sm font-medium'>
|
| 192 |
{t('settings.about')}
|
| 193 |
</span>
|
| 194 |
<ChevronRightIcon className='text-muted-foreground size-5' />
|
| 195 |
-
</
|
| 196 |
</div>
|
| 197 |
</div>
|
| 198 |
</ScrollArea>
|
|
|
|
| 3 |
import { useEffect, useMemo, useState } from 'react'
|
| 4 |
import { useTheme } from 'next-themes'
|
| 5 |
import { useTranslation } from 'react-i18next'
|
| 6 |
+
import Link from 'next/link'
|
| 7 |
import {
|
| 8 |
SunIcon,
|
| 9 |
MoonIcon,
|
|
|
|
| 43 |
export default function SettingsPage() {
|
| 44 |
const { t, i18n } = useTranslation()
|
| 45 |
const { theme, setTheme } = useTheme()
|
|
|
|
| 46 |
const locales = useMemo(
|
| 47 |
() => Object.keys(i18n.options.resources || {}),
|
| 48 |
[i18n.options.resources],
|
|
|
|
| 72 |
<div className='relative mx-auto max-w-xl'>
|
| 73 |
{/* Header with back button */}
|
| 74 |
<div className='mb-8 flex items-center'>
|
| 75 |
+
<Link
|
| 76 |
+
href='/'
|
| 77 |
+
prefetch={false}
|
| 78 |
className='text-muted-foreground hover:bg-accent hover:text-foreground absolute -left-14 flex size-10 items-center justify-center rounded-full transition'
|
| 79 |
>
|
| 80 |
<ChevronLeftIcon className='size-6' />
|
| 81 |
+
</Link>
|
| 82 |
<h1 className='text-foreground text-2xl font-bold'>
|
| 83 |
{t('settings.title')}
|
| 84 |
</h1>
|
|
|
|
| 184 |
<div className='border-border mb-8 border-t' />
|
| 185 |
|
| 186 |
{/* About Link */}
|
| 187 |
+
<Link
|
| 188 |
+
href='/about'
|
| 189 |
+
prefetch={false}
|
| 190 |
className='hover:bg-accent flex w-full items-center justify-between rounded-lg px-3 py-3 text-left transition'
|
| 191 |
>
|
| 192 |
<span className='text-foreground text-sm font-medium'>
|
| 193 |
{t('settings.about')}
|
| 194 |
</span>
|
| 195 |
<ChevronRightIcon className='text-muted-foreground size-5' />
|
| 196 |
+
</Link>
|
| 197 |
</div>
|
| 198 |
</div>
|
| 199 |
</ScrollArea>
|
ui/components/MenuBar.tsx
CHANGED
|
@@ -1,7 +1,6 @@
|
|
| 1 |
'use client'
|
| 2 |
|
| 3 |
-
import
|
| 4 |
-
import { useRouter } from 'next/navigation'
|
| 5 |
import { isTauri, isMacOS } from '@/lib/backend'
|
| 6 |
import { useTranslation } from 'react-i18next'
|
| 7 |
import { useAppStore } from '@/lib/store'
|
|
@@ -24,7 +23,6 @@ type MenuItem = {
|
|
| 24 |
|
| 25 |
export function MenuBar() {
|
| 26 |
const { t } = useTranslation()
|
| 27 |
-
const router = useRouter()
|
| 28 |
const {
|
| 29 |
openDocuments,
|
| 30 |
openExternal,
|
|
@@ -35,12 +33,6 @@ export function MenuBar() {
|
|
| 35 |
saveDocuments,
|
| 36 |
} = useAppStore()
|
| 37 |
|
| 38 |
-
useEffect(() => {
|
| 39 |
-
// Prefetch pages for smoother navigation
|
| 40 |
-
router.prefetch('/settings')
|
| 41 |
-
router.prefetch('/about')
|
| 42 |
-
}, [router])
|
| 43 |
-
|
| 44 |
const fileMenuItems: MenuItem[] = [
|
| 45 |
{ label: t('menu.openFile'), onSelect: openDocuments },
|
| 46 |
{ label: t('menu.save'), onSelect: saveDocuments },
|
|
@@ -122,11 +114,10 @@ export function MenuBar() {
|
|
| 122 |
</MenubarItem>
|
| 123 |
))}
|
| 124 |
<MenubarSeparator />
|
| 125 |
-
<MenubarItem
|
| 126 |
-
|
| 127 |
-
|
| 128 |
-
|
| 129 |
-
{t('menu.settings')}
|
| 130 |
</MenubarItem>
|
| 131 |
</MenubarContent>
|
| 132 |
</MenubarMenu>
|
|
@@ -187,11 +178,10 @@ export function MenuBar() {
|
|
| 187 |
</MenubarItem>
|
| 188 |
))}
|
| 189 |
<MenubarSeparator />
|
| 190 |
-
<MenubarItem
|
| 191 |
-
|
| 192 |
-
|
| 193 |
-
|
| 194 |
-
{t('settings.about')}
|
| 195 |
</MenubarItem>
|
| 196 |
</MenubarContent>
|
| 197 |
</MenubarMenu>
|
|
|
|
| 1 |
'use client'
|
| 2 |
|
| 3 |
+
import Link from 'next/link'
|
|
|
|
| 4 |
import { isTauri, isMacOS } from '@/lib/backend'
|
| 5 |
import { useTranslation } from 'react-i18next'
|
| 6 |
import { useAppStore } from '@/lib/store'
|
|
|
|
| 23 |
|
| 24 |
export function MenuBar() {
|
| 25 |
const { t } = useTranslation()
|
|
|
|
| 26 |
const {
|
| 27 |
openDocuments,
|
| 28 |
openExternal,
|
|
|
|
| 33 |
saveDocuments,
|
| 34 |
} = useAppStore()
|
| 35 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 36 |
const fileMenuItems: MenuItem[] = [
|
| 37 |
{ label: t('menu.openFile'), onSelect: openDocuments },
|
| 38 |
{ label: t('menu.save'), onSelect: saveDocuments },
|
|
|
|
| 114 |
</MenubarItem>
|
| 115 |
))}
|
| 116 |
<MenubarSeparator />
|
| 117 |
+
<MenubarItem className='text-[13px]' asChild>
|
| 118 |
+
<Link href='/settings' prefetch={false}>
|
| 119 |
+
{t('menu.settings')}
|
| 120 |
+
</Link>
|
|
|
|
| 121 |
</MenubarItem>
|
| 122 |
</MenubarContent>
|
| 123 |
</MenubarMenu>
|
|
|
|
| 178 |
</MenubarItem>
|
| 179 |
))}
|
| 180 |
<MenubarSeparator />
|
| 181 |
+
<MenubarItem className='text-[13px]' asChild>
|
| 182 |
+
<Link href='/about' prefetch={false}>
|
| 183 |
+
{t('settings.about')}
|
| 184 |
+
</Link>
|
|
|
|
| 185 |
</MenubarItem>
|
| 186 |
</MenubarContent>
|
| 187 |
</MenubarMenu>
|