From 3aa156b2c94261a76b171216a263dd98fc178dd7 Mon Sep 17 00:00:00 2001 From: schroda <50052685+schroda@users.noreply.github.com> Date: Sun, 5 May 2024 23:27:52 +0200 Subject: [PATCH] Prevent duplicated mangas in source browse Regression introduced with 6186cb0ea31131c2c9bcbfeadce1f81a59266598 --- src/screens/SourceMangas.tsx | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/screens/SourceMangas.tsx b/src/screens/SourceMangas.tsx index a02f0a58..44148c95 100644 --- a/src/screens/SourceMangas.tsx +++ b/src/screens/SourceMangas.tsx @@ -95,11 +95,13 @@ const SOURCE_CONTENT_TYPE_TO_ERROR_MSG_KEY: { [contentType in SourceContentType] }; const getUniqueMangas = (mangas: TPartialManga[]): TPartialManga[] => { + const mangaIdToManga: Record = {}; const uniqueMangas: TPartialManga[] = []; mangas.forEach((manga) => { - const isDuplicate = uniqueMangas.some((uniqueManga) => uniqueManga.id === manga.id); + const isDuplicate = !!mangaIdToManga[manga.id]; if (!isDuplicate) { + mangaIdToManga[manga.id] = manga; uniqueMangas.push(manga); } }); @@ -174,16 +176,12 @@ const useSourceManga = ( pages.forEach((page, index) => { const pageItems = page.data?.fetchSourceManga.mangas ?? ([] as FetchItemsResult); - const uniqueItems = getUniqueMangas([...allItems, ...pageItems]); - const uniquePageItems = pageItems.filter( - (pageItem) => !!uniqueItems.find((uniqueItem) => uniqueItem.id === pageItem.id), - ); - const nonLibraryItems = uniquePageItems.filter((item) => !hideLibraryEntries || !item.inLibrary); - // const nonLibraryItems = uniquePageItems; + const nonLibraryPageItems = pageItems.filter((item) => !hideLibraryEntries || !item.inLibrary); + const uniqueItems = getUniqueMangas([...allItems, ...nonLibraryPageItems]); const isLastPage = !isPageLoading && pages.length === index + 1; - filteredOutAllItemsOfFetchedPage = isLastPage && !nonLibraryItems.length && !!pageItems.length; - allItems = [...allItems, ...nonLibraryItems]; + filteredOutAllItemsOfFetchedPage = isLastPage && !nonLibraryPageItems.length && !!pageItems.length; + allItems = uniqueItems; }); return allItems;