From 5fd9b2eb35f8302679925a981bab8886d46d18b0 Mon Sep 17 00:00:00 2001 From: 4gray Date: Fri, 31 Jul 2026 12:04:06 +0200 Subject: [PATCH] fix(downloads): ignore fragments in shell route state --- .../workspace-shell-route.utils.spec.ts | 51 +++++++++++++++++++ .../navigation/workspace-shell-route.utils.ts | 3 +- 2 files changed, 53 insertions(+), 1 deletion(-) 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 9f9821162..956e92a63 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 @@ -180,6 +180,57 @@ describe('workspace-shell-route.utils', () => { ); }); + it('ignores fragments when identifying download manager routes', () => { + expect( + parseWorkspaceShellRoute('/workspace/downloads/#details') + ).toEqual( + expect.objectContaining({ + kind: 'downloads', + contextPanel: 'none', + searchMode: 'local-filter', + usesQuerySearch: true, + }) + ); + expect( + parseWorkspaceShellRoute( + '/workspace/xtreams/pl-1/downloads/#details' + ) + ).toEqual( + expect.objectContaining({ + kind: 'portal', + section: 'downloads', + contextPanel: 'collection', + searchMode: 'local-filter', + usesQuerySearch: true, + }) + ); + expect( + parseWorkspaceShellRoute( + '/workspace/stalker/pl-1/downloads/#details' + ) + ).toEqual( + expect.objectContaining({ + kind: 'portal', + section: 'downloads', + contextPanel: 'collection', + searchMode: 'local-filter', + usesQuerySearch: true, + }) + ); + expect( + parseWorkspaceShellRoute( + '/workspace/downloads/#details?query=ignored' + ) + ).toEqual( + expect.objectContaining({ + kind: 'downloads', + contextPanel: 'none', + searchMode: 'local-filter', + usesQuerySearch: true, + }) + ); + }); + it('parses Xtream portal routes and detects context-panel/query-search state', () => { expect( parseWorkspaceShellRoute('/workspace/xtreams/pl-1/vod/42') 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 7de345d4f..b7d6d2eec 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,7 +86,8 @@ function normalizePath(url: string): { segments: string[]; queryParams: URLSearchParams; } { - const [path, query = ''] = url.split('?'); + const [pathWithFragment, query = ''] = url.split('?'); + const [path] = pathWithFragment.split('#'); return { segments: path.split('/').filter(Boolean), queryParams: new URLSearchParams(query),