fix: de-duplicate the continue-listening row
ABS returns items-in-progress once per in-progress podcast episode (same item id), which rendered duplicate cards. Collapse to one card per library item. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -13,6 +13,16 @@ interface RecentState {
|
||||
loading: boolean
|
||||
}
|
||||
|
||||
/**
|
||||
* Collapse to one card per library item. ABS returns items-in-progress once per
|
||||
* in-progress podcast episode (same title/cover), which looks like duplicates; keep
|
||||
* only the first (most recent) occurrence of each id.
|
||||
*/
|
||||
function dedupeById(items: LibraryItem[]): LibraryItem[] {
|
||||
const seen = new Set<string>()
|
||||
return items.filter((i) => (seen.has(i.id) ? false : (seen.add(i.id), true)))
|
||||
}
|
||||
|
||||
export default function Home() {
|
||||
const libraries = useLibraryStore((s) => s.libraries)
|
||||
const librariesLoaded = useLibraryStore((s) => s.loaded)
|
||||
@@ -25,7 +35,7 @@ export default function Home() {
|
||||
let cancelled = false
|
||||
setContinueLoading(true)
|
||||
getItemsInProgress(20)
|
||||
.then((items) => !cancelled && setContinueItems(items))
|
||||
.then((items) => !cancelled && setContinueItems(dedupeById(items)))
|
||||
.catch(() => !cancelled && setContinueItems([]))
|
||||
.finally(() => !cancelled && setContinueLoading(false))
|
||||
return () => {
|
||||
|
||||
Reference in New Issue
Block a user