All files / web/src/components/admin/tts-lab useTestLog.ts

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

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                                                                                 
'use client'

import { useCallback, useRef, useState } from 'react'

export type LogLevel = 'info' | 'warn' | 'error' | 'success'

export interface LogEntry {
  timestamp: number
  level: LogLevel
  message: string
  detail?: string
}

export interface UseTestLogReturn {
  entries: LogEntry[]
  log: (level: LogLevel, message: string, detail?: string) => void
  clear: () => void
}

export function useTestLog(maxEntries = 200): UseTestLogReturn {
  const [entries, setEntries] = useState<LogEntry[]>([])
  const startRef = useRef(Date.now())

  const log = useCallback(
    (level: LogLevel, message: string, detail?: string) => {
      setEntries((prev) => {
        const next = [...prev, { timestamp: Date.now() - startRef.current, level, message, detail }]
        return next.length > maxEntries ? next.slice(-maxEntries) : next
      })
    },
    [maxEntries]
  )

  const clear = useCallback(() => {
    setEntries([])
    startRef.current = Date.now()
  }, [])

  return { entries, log, clear }
}