forked from BRETT/BRETT
Initial Commit
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
export interface UserSummary {
|
||||
id: number
|
||||
name: string
|
||||
color: string | null
|
||||
cardEffect: string | null
|
||||
cardEffectColor: string | null
|
||||
cardVignette: boolean
|
||||
cardBorderEffect: string | null
|
||||
cardBorderEffectColor: string | null
|
||||
avatarUrl: string | null
|
||||
createdAt: string
|
||||
stats: {
|
||||
uploads: number
|
||||
comments: number
|
||||
}
|
||||
}
|
||||
|
||||
const inflight = new Map<number, Promise<void>>()
|
||||
|
||||
// Cache für User-Hover-Cards: gleiche Nutzer werden nicht doppelt geladen
|
||||
export function useUserSummaries() {
|
||||
const summaries = useState<Record<number, UserSummary>>('user-summaries', () => ({}))
|
||||
|
||||
function ensureSummary(id: number) {
|
||||
if (summaries.value[id] || inflight.has(id)) return
|
||||
inflight.set(id, (async () => {
|
||||
try {
|
||||
summaries.value[id] = await $fetch<UserSummary>(`/api/users/${id}/summary`)
|
||||
}
|
||||
catch {
|
||||
// Fehler stillschweigend ignorieren — die Card zeigt dann nur die Basisdaten
|
||||
}
|
||||
finally {
|
||||
inflight.delete(id)
|
||||
}
|
||||
})())
|
||||
}
|
||||
|
||||
// Cache-Eintrag verwerfen, damit geänderte Effekte/Farben ohne Reload sichtbar werden
|
||||
function invalidate(id: number) {
|
||||
delete summaries.value[id]
|
||||
}
|
||||
|
||||
return { summaries, ensureSummary, invalidate }
|
||||
}
|
||||
Reference in New Issue
Block a user