clipon / frontend /src /hooks /useWebSocket.js
yonagush
Launch Clipon — AI-powered viral clip generator
edb7d3e
import { useState, useEffect, useRef } from 'react'
import { createWebSocket } from '../utils/api.js'
/**
* Custom hook for WebSocket connection
* @param {string} jobId - The job ID to connect to
* @returns {{jobData: object|null, isConnected: boolean, error: string|null}}
*/
export function useWebSocket(jobId) {
const [jobData, setJobData] = useState(null)
const [isConnected, setIsConnected] = useState(false)
const [error, setError] = useState(null)
const wsRef = useRef(null)
useEffect(() => {
if (!jobId) return
setError(null)
setIsConnected(false)
wsRef.current = createWebSocket(
jobId,
(data) => {
setJobData(data)
setIsConnected(true)
setError(null)
},
() => {
setIsConnected(false)
// Don't set error on normal close
}
)
return () => {
if (wsRef.current) {
wsRef.current.close()
}
}
}, [jobId])
return {
jobData,
isConnected,
error,
}
}