/home/edulekha/heavenbuildpro.com/wp-content/plugins/extendify/src/Draft/hooks/useCompletion.js
import { useEffect, useState } from '@wordpress/element'
import { completion } from '@draft/api/Data'
export const useCompletion = (prompt, promptType, systemMessageKey) => {
const [result, setResult] = useState('')
const [error, setError] = useState(null)
const [loading, setLoading] = useState(false)
useEffect(() => {
let cancelled = false
let reader
const decoder = new TextDecoder()
if (!prompt) {
setLoading(false)
setResult('')
cancelled = true
return
}
const fetchData = async () => {
setResult('')
setError(false)
setLoading(true)
const response = await completion(
prompt,
promptType,
systemMessageKey,
)
reader = response.body.getReader()
let done = false
while (!done) {
const { value, done: readerDone } = await reader.read()
done = readerDone
if (value && !cancelled) {
const decodedValue = decoder.decode(value)
setResult((prevResult) => prevResult + decodedValue)
}
}
}
fetchData()
.finally(() => {
if (!cancelled) {
setLoading(false)
}
})
.catch((error) => {
if (!cancelled) {
setError(error)
}
})
return () => {
cancelled = true
if (reader) {
reader.cancel()
}
}
}, [prompt, systemMessageKey, promptType])
return { completion: result, error, loading }
}