aboutsummaryrefslogtreecommitdiffstats
path: root/frontend-vanilla
diff options
context:
space:
mode:
Diffstat (limited to 'frontend-vanilla')
-rw-r--r--frontend-vanilla/src/main.test.ts27
-rw-r--r--frontend-vanilla/src/main.ts14
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