diff --git a/src/modules/core/AppRoute.constants.ts b/src/modules/core/AppRoute.constants.ts index 0d75c45b..9582d59a 100644 --- a/src/modules/core/AppRoute.constants.ts +++ b/src/modules/core/AppRoute.constants.ts @@ -18,6 +18,16 @@ type AppRouteInfo = { type TAppRoutes = Record; +const createParam = (name: string, value: any): string => (value ? `${name}=${encodeURIComponent(value)}` : ''); + +const createQueryParam = (query: string | null | undefined): string => createParam('query', query); + +const addParams = (path: string, ...params: string[]) => { + const joinedParams = params.filter(Boolean).join('&'); + + return `${path}${joinedParams ? `?${joinedParams}` : ''}`; +}; + export const AppRoutes = { root: { match: '/', @@ -94,11 +104,11 @@ export const AppRoutes = { sources: { match: 'sources', path: '/sources', - childRoutes: { browse: { match: ':sourceId', - path: (sourceId: SourceType['id']) => `/sources/${sourceId}`, + path: (sourceId: SourceType['id'], query?: string | null | undefined) => + addParams(`/sources/${sourceId}`, createQueryParam(query)), }, configure: { match: ':sourceId/configure', @@ -106,11 +116,7 @@ export const AppRoutes = { }, searchAll: { match: 'all/search', - path: (query?: string | null | undefined) => { - const queryParam = query ? `query=${encodeURIComponent(query)}` : ''; - - return `/sources/all/search${queryParam ? `?${queryParam}` : ''}`; - }, + path: (query?: string | null | undefined) => addParams('/sources/all/search', createQueryParam(query)), }, }, }, @@ -132,14 +138,8 @@ export const AppRoutes = { }, library: { match: 'library', - path: (tab?: string, search?: string) => { - const tabParam = tab ? `tab=${tab}` : ''; - const searchParam = search ? `query=${encodeURIComponent(search)}` : ''; - - const params = [tabParam, searchParam].filter(Boolean).join('&'); - - return `/library${params ? `?${params}` : ''}`; - }, + path: (tab?: string, search?: string) => + addParams('/library', createParam('tab', tab), createQueryParam(search)), }, updates: { match: 'updates', @@ -164,8 +164,8 @@ export const AppRoutes = { childRoutes: { search: { match: 'manga/:mangaId/search', - path: (sourceId: SourceType['id'], mangaId: MangaIdInfo['id']) => - `/migrate/source/${sourceId}/manga/${mangaId}/search`, + path: (sourceId: SourceType['id'], mangaId: MangaIdInfo['id'], query?: string | null | undefined) => + addParams(`/migrate/source/${sourceId}/manga/${mangaId}/search`, createQueryParam(query)), }, }, }, diff --git a/src/modules/global-search/screens/SearchAll.tsx b/src/modules/global-search/screens/SearchAll.tsx index 72129614..a518564e 100644 --- a/src/modules/global-search/screens/SearchAll.tsx +++ b/src/modules/global-search/screens/SearchAll.tsx @@ -165,7 +165,7 @@ const SourceSearchPreview = React.memo( {displayName} diff --git a/src/modules/manga/components/MangaActionMenuItems.tsx b/src/modules/manga/components/MangaActionMenuItems.tsx index c514b7c1..4a76c0b4 100644 --- a/src/modules/manga/components/MangaActionMenuItems.tsx +++ b/src/modules/manga/components/MangaActionMenuItems.tsx @@ -157,7 +157,7 @@ export const MangaActionMenuItems = ({ )} {isSingleMode && ( diff --git a/src/modules/manga/components/MangaToolbarMenu.tsx b/src/modules/manga/components/MangaToolbarMenu.tsx index 1982ed9f..cac43282 100644 --- a/src/modules/manga/components/MangaToolbarMenu.tsx +++ b/src/modules/manga/components/MangaToolbarMenu.tsx @@ -66,7 +66,11 @@ export const MangaToolbarMenu = ({ manga, onRefresh, refreshing }: IProps) => { <> @@ -126,7 +130,7 @@ export const MangaToolbarMenu = ({ manga, onRefresh, refreshing }: IProps) => { diff --git a/src/modules/manga/components/cards/MangaCard.tsx b/src/modules/manga/components/cards/MangaCard.tsx index f772dfa8..8c8dd227 100644 --- a/src/modules/manga/components/cards/MangaCard.tsx +++ b/src/modules/manga/components/cards/MangaCard.tsx @@ -34,7 +34,7 @@ const getMangaLinkTo = ( case 'duplicate': return AppRoutes.manga.path(mangaId); case 'migrate.search': - return `${AppRoutes.migrate.childRoutes.search.path(sourceId ?? '-1', mangaId)}?query=${mangaTitle}`; + return AppRoutes.migrate.childRoutes.search.path(sourceId ?? '-1', mangaId, mangaTitle); case 'migrate.select': return ''; default: