All files / web/src/hooks useEuclidCreations.ts

0% Statements 0/51
0% Branches 0/1
0% Functions 0/1
0% Lines 0/51

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),
  })
}