Mayo commited on
Commit
c3ca015
·
unverified ·
1 Parent(s): 8f6c8ee

fix: disable prefetch to make navigation work

Browse files

ref: https://github.com/vercel/next.js/issues/48642#issuecomment-1517125348

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 { useRouter } from 'next/navigation'
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
- <button
68
- onClick={() => router.push('/')}
 
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
- </button>
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 { useRouter } from 'next/navigation'
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
- <button
77
- onClick={() => router.push('/')}
 
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
- </button>
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
- <button
188
- onClick={() => router.push('/about')}
 
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
- </button>
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 { useEffect } from 'react'
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
- className='text-[13px]'
127
- onSelect={() => router.push('/settings')}
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
- className='text-[13px]'
192
- onSelect={() => router.push('/about')}
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>