Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | 'use client' import { useQuery } from '@tanstack/react-query' import { api } from '@/lib/queryClient' import { euclidKeys } from '@/lib/queryKeys' export type CreationsTab = 'mine' | 'published' | 'seen' export interface CreationMeta { id: string thumbnail: string | null isPublic: boolean createdAt: Date title: string | null updatedAt: Date | null } async function fetchCreations( tab: CreationsTab, playerId?: string | null ): Promise<CreationMeta[]> { if (tab === 'seen') { try { const stored = localStorage.getItem('euclid_seen_ids') const ids: string[] = stored ? JSON.parse(stored) : [] if (ids.length === 0) return [] const res = await api(`euclid/creations?ids=${ids.join(',')}`) if (!res.ok) return [] const json = await res.json() return json.creations ?? [] } catch { return [] } } const params = new URLSearchParams({ limit: '60', mine: 'true' }) if (tab === 'published') params.set('isPublic', 'true') if (playerId) params.set('playerId', playerId) const res = await api(`euclid/creations?${params}`) if (!res.ok) return [] const json = await res.json() return json.creations ?? [] } export function useEuclidCreations(tab: CreationsTab, playerId?: string | null) { return useQuery({ queryKey: euclidKeys.creations(tab, playerId), queryFn: () => fetchCreations(tab, playerId), }) } |