All files / web/src/hooks usePlayerSongs.ts

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

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                                                       
import { useQuery } from '@tanstack/react-query'
import { songKeys } from '@/lib/queryKeys'
import { api } from '@/lib/queryClient'
import type { SongLyricsSection } from '@/lib/song/alignment'

export interface PlayerSong {
  id: string
  title: string | null
  createdAt: string
  audioPath: string
  /** Word-alignment sidecar URL. May 404 for legacy songs — player degrades gracefully. */
  alignmentPath: string
  lyrics: SongLyricsSection[]
}

export function usePlayerSongs(playerId: string | null) {
  return useQuery({
    queryKey: songKeys.player(playerId!),
    queryFn: async (): Promise<PlayerSong[]> => {
      const res = await api(`curriculum/${playerId}/songs`)
      if (!res.ok) throw new Error('Failed to fetch songs')
      const data = await res.json()
      return data.songs
    },
    enabled: !!playerId,
  })
}