diff options
Diffstat (limited to 'frontend-vanilla')
| -rw-r--r-- | frontend-vanilla/src/main.test.ts | 27 | ||||
| -rw-r--r-- | frontend-vanilla/src/main.ts | 14 |
2 files changed, 39 insertions, 2 deletions
diff --git a/frontend-vanilla/src/main.test.ts b/frontend-vanilla/src/main.test.ts index a8b6969..d397a5e 100644 --- a/frontend-vanilla/src/main.test.ts +++ b/frontend-vanilla/src/main.test.ts @@ -293,4 +293,31 @@ describe('main application logic', () => { body: expect.stringContaining('"read":true') })); }); + + it('should close settings and return to home when clicking settings again', () => { + renderLayout(); + const settingsLink = document.querySelector('[data-nav="settings"]') as HTMLElement; + expect(settingsLink).not.toBeNull(); + + const getCurrentRouteSpy = vi.spyOn(router, 'getCurrentRoute').mockReturnValue({ path: '/settings', params: {}, query: new URLSearchParams() }); + const navigateSpy = vi.spyOn(router, 'navigate'); + + settingsLink.click(); + + expect(navigateSpy).toHaveBeenCalledWith('/', expect.any(Object)); + getCurrentRouteSpy.mockRestore(); + }); + + it('should navigate to home with filter when clicking filter from settings', () => { + renderLayout(); + const getCurrentRouteSpy = vi.spyOn(router, 'getCurrentRoute').mockReturnValue({ path: '/settings', params: {}, query: new URLSearchParams() }); + const navigateSpy = vi.spyOn(router, 'navigate'); + + const filterLink = document.querySelector('a[data-nav="filter"][data-value="starred"]') as HTMLElement; + expect(filterLink).not.toBeNull(); + filterLink.click(); + + expect(navigateSpy).toHaveBeenCalledWith('/', expect.objectContaining({ filter: 'starred' })); + getCurrentRouteSpy.mockRestore(); + }); }); diff --git a/frontend-vanilla/src/main.ts b/frontend-vanilla/src/main.ts index b167a18..c22dd26 100644 --- a/frontend-vanilla/src/main.ts +++ b/frontend-vanilla/src/main.ts @@ -114,7 +114,12 @@ export function attachLayoutListeners() { if (navType === 'filter') { e.preventDefault(); const filter = link.getAttribute('data-value') as FilterType; - router.updateQuery({ filter }); + const currentRoute = router.getCurrentRoute(); + if (currentRoute.path === '/settings') { + router.navigate('/', { ...currentQuery, filter }); + } else { + router.updateQuery({ filter }); + } } else if (navType === 'tag') { e.preventDefault(); const tag = link.getAttribute('data-value')!; @@ -129,7 +134,12 @@ export function attachLayoutListeners() { } } else if (navType === 'settings') { e.preventDefault(); - router.navigate('/settings', currentQuery); + const currentRoute = router.getCurrentRoute(); + if (currentRoute.path === '/settings') { + router.navigate('/', currentQuery); + } else { + router.navigate('/settings', currentQuery); + } } // Auto-close sidebar on mobile after clicking a link |
