|
Server : LiteSpeed System : Linux server104.web-hosting.com 4.18.0-513.24.1.lve.1.el8.x86_64 #1 SMP Thu May 9 15:10:09 UTC 2024 x86_64 User : saleoqej ( 6848) PHP Version : 8.0.30 Disable Function : NONE Directory : /home/saleoqej/public_html/wp-content/plugins/extendify/src/Draft/hooks/ |
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 };
};