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),