Fix Discover page: stringify IDs for Set comparisons, show result count
This commit is contained in:
@@ -87,36 +87,38 @@ export default function Discover() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const handleToggleSave = async (id: string) => {
|
const handleToggleSave = async (id: string) => {
|
||||||
setSavingIds((prev) => new Set(prev).add(id))
|
const sid = String(id)
|
||||||
|
setSavingIds((prev) => new Set(prev).add(sid))
|
||||||
try {
|
try {
|
||||||
const { saved } = await toggleSaveRecommendation(id)
|
const { saved } = await toggleSaveRecommendation(sid)
|
||||||
setResults((prev) =>
|
setResults((prev) =>
|
||||||
prev.map((r) => (r.id === id ? { ...r, saved } : r))
|
prev.map((r) => (String(r.id) === sid ? { ...r, saved } : r))
|
||||||
)
|
)
|
||||||
} catch {
|
} catch {
|
||||||
// silent
|
// silent
|
||||||
} finally {
|
} finally {
|
||||||
setSavingIds((prev) => {
|
setSavingIds((prev) => {
|
||||||
const next = new Set(prev)
|
const next = new Set(prev)
|
||||||
next.delete(id)
|
next.delete(sid)
|
||||||
return next
|
return next
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const handleDislike = async (id: string) => {
|
const handleDislike = async (id: string) => {
|
||||||
setDislikingIds((prev) => new Set(prev).add(id))
|
const sid = String(id)
|
||||||
|
setDislikingIds((prev) => new Set(prev).add(sid))
|
||||||
try {
|
try {
|
||||||
const { disliked } = await dislikeRecommendation(id)
|
const { disliked } = await dislikeRecommendation(sid)
|
||||||
setResults((prev) =>
|
setResults((prev) =>
|
||||||
prev.map((r) => (r.id === id ? { ...r, disliked } : r))
|
prev.map((r) => (String(r.id) === sid ? { ...r, disliked } : r))
|
||||||
)
|
)
|
||||||
} catch {
|
} catch {
|
||||||
// silent
|
// silent
|
||||||
} finally {
|
} finally {
|
||||||
setDislikingIds((prev) => {
|
setDislikingIds((prev) => {
|
||||||
const next = new Set(prev)
|
const next = new Set(prev)
|
||||||
next.delete(id)
|
next.delete(sid)
|
||||||
return next
|
return next
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -298,7 +300,7 @@ export default function Discover() {
|
|||||||
{results.length > 0 && (
|
{results.length > 0 && (
|
||||||
<div>
|
<div>
|
||||||
<h2 className="text-lg font-semibold text-charcoal mb-4">
|
<h2 className="text-lg font-semibold text-charcoal mb-4">
|
||||||
Your Recommendations
|
Your Recommendations ({results.length})
|
||||||
</h2>
|
</h2>
|
||||||
<div className="space-y-3">
|
<div className="space-y-3">
|
||||||
{results.map((rec) => (
|
{results.map((rec) => (
|
||||||
@@ -307,13 +309,19 @@ export default function Discover() {
|
|||||||
recommendation={rec}
|
recommendation={rec}
|
||||||
onToggleSave={handleToggleSave}
|
onToggleSave={handleToggleSave}
|
||||||
onDislike={handleDislike}
|
onDislike={handleDislike}
|
||||||
saving={savingIds.has(rec.id)}
|
saving={savingIds.has(String(rec.id))}
|
||||||
disliking={dislikingIds.has(rec.id)}
|
disliking={dislikingIds.has(String(rec.id))}
|
||||||
/>
|
/>
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
|
{!discovering && results.length === 0 && !error && (selectedPlaylist || query.trim()) && (
|
||||||
|
<p className="text-charcoal-muted text-sm text-center py-4">
|
||||||
|
Click "Discover Music" to get recommendations
|
||||||
|
</p>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user