fix(web): avoid reload when switching signin locale

This commit is contained in:
yyh 2026-04-30 12:49:25 +08:00
parent 16f57b74f5
commit f7a9279a14
No known key found for this signature in database
2 changed files with 58 additions and 1 deletions

View File

@ -0,0 +1,57 @@
import { useSuspenseQuery } from '@tanstack/react-query'
import { fireEvent, render, screen } from '@testing-library/react'
import { setLocaleOnClient } from '@/i18n-config'
import Header from '../_header'
vi.mock('@tanstack/react-query', () => ({
useSuspenseQuery: vi.fn(),
}))
vi.mock('@/context/i18n', () => ({
useLocale: () => 'en-US',
}))
vi.mock('@/i18n-config', () => ({
setLocaleOnClient: vi.fn(),
}))
vi.mock('@/next/dynamic', () => ({
default: () => () => null,
}))
vi.mock('@/service/system-features', () => ({
systemFeaturesQueryOptions: () => ({}),
}))
vi.mock('../_locale-menu', () => ({
default: ({ onChange }: { onChange?: (value: string) => void }) => (
<button type="button" onClick={() => onChange?.('ja-JP')}>
Switch Language
</button>
),
}))
const mockUseSuspenseQuery = vi.mocked(useSuspenseQuery)
const mockSetLocaleOnClient = vi.mocked(setLocaleOnClient)
describe('Signin Header', () => {
beforeEach(() => {
vi.clearAllMocks()
mockUseSuspenseQuery.mockReturnValue({
data: {
branding: {
enabled: false,
login_page_logo: '',
},
},
} as ReturnType<typeof useSuspenseQuery>)
})
it('should switch locale without forcing a full page reload', () => {
render(<Header />)
fireEvent.click(screen.getByRole('button', { name: 'Switch Language' }))
expect(mockSetLocaleOnClient).toHaveBeenCalledWith('ja-JP', false)
})
})

View File

@ -39,7 +39,7 @@ const Header = () => {
value={locale}
items={languages.filter(item => item.supported)}
onChange={(value) => {
setLocaleOnClient(value as Locale)
setLocaleOnClient(value as Locale, false)
}}
/>
<Divider type="vertical" className="mx-0 ml-2 h-4" />