From e8e2a31312ec8e5e56a5562b2c168b5d213e51c3 Mon Sep 17 00:00:00 2001 From: 4gray Date: Fri, 31 Jul 2026 12:11:06 +0200 Subject: [PATCH] fix(downloads): normalize fragments before queries --- .../workspace-shell-route.utils.spec.ts | 26 ++++++++++++++++--- .../navigation/workspace-shell-route.utils.ts | 4 +-- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/libs/workspace/shell/util/src/lib/navigation/workspace-shell-route.utils.spec.ts b/libs/workspace/shell/util/src/lib/navigation/workspace-shell-route.utils.spec.ts index 956e92a63..6f36c3f9d 100644 --- a/libs/workspace/shell/util/src/lib/navigation/workspace-shell-route.utils.spec.ts +++ b/libs/workspace/shell/util/src/lib/navigation/workspace-shell-route.utils.spec.ts @@ -64,9 +64,7 @@ describe('workspace-shell-route.utils', () => { it('disables collection shell state for focused download details', () => { expect( - parseWorkspaceShellRoute( - '/workspace/downloads/42?query=matrix#technical-details' - ) + parseWorkspaceShellRoute('/workspace/downloads/42?q=x#details') ).toEqual( expect.objectContaining({ kind: 'downloads', @@ -111,6 +109,28 @@ describe('workspace-shell-route.utils', () => { ); }); + it.each([ + [ + 'keeps Xtream query state before a fragment', + '/workspace/xtreams/pl-1/favorites?scope=all#details', + true, + ], + [ + 'keeps Stalker query state before a fragment', + '/workspace/stalker/pl-1/favorites?scope=all#details', + true, + ], + [ + 'ignores query-like text inside a fragment', + '/workspace/xtreams/pl-1/favorites#details?scope=all', + false, + ], + ])('%s', (_name, url, expectedAllScope) => { + expect(parseWorkspaceShellRoute(url).isPortalFavoritesAllScope).toBe( + expectedAllScope + ); + }); + it('keeps manager shell state outside exact focused download routes', () => { expect(parseWorkspaceShellRoute('/workspace/downloads/')).toEqual( expect.objectContaining({ diff --git a/libs/workspace/shell/util/src/lib/navigation/workspace-shell-route.utils.ts b/libs/workspace/shell/util/src/lib/navigation/workspace-shell-route.utils.ts index b7d6d2eec..68239ca2a 100644 --- a/libs/workspace/shell/util/src/lib/navigation/workspace-shell-route.utils.ts +++ b/libs/workspace/shell/util/src/lib/navigation/workspace-shell-route.utils.ts @@ -86,8 +86,8 @@ function normalizePath(url: string): { segments: string[]; queryParams: URLSearchParams; } { - const [pathWithFragment, query = ''] = url.split('?'); - const [path] = pathWithFragment.split('#'); + const [urlWithoutFragment] = url.split('#'); + const [path, query = ''] = urlWithoutFragment.split('?'); return { segments: path.split('/').filter(Boolean), queryParams: new URLSearchParams(query),