const { useState, useEffect } = React;
function TextWithLineBreaks(props) {
const textWithBreaks = props.text.split("\n").map((text, index) => (
{text}
));
return
{textWithBreaks}
;
}
function App() {
const [selectedFile, setSelectedFile] = useState(null);
const [previewUrl, setPreviewUrl] = useState(null);
const [isLoading, setIsLoading] = useState(false);
const [result, setResult] = useState("");
const [callId, setCallId] = useState(null);
const handleFileChange = (e) => {
const file = e.target.files[0];
if (file) {
setSelectedFile(file);
setPreviewUrl(URL.createObjectURL(file));
}
};
const handleExtractText = async () => {
if (!selectedFile) return;
setIsLoading(true);
setResult("");
try {
const formData = new FormData();
formData.append("receipt", selectedFile);
console.log(
"Sending file:",
selectedFile.name,
selectedFile.type,
selectedFile.size,
);
const response = await fetch("/parse", {
method: "POST",
body: formData,
});
if (!response.ok) {
const errorText = await response.text();
console.error("Server response:", response.status, errorText);
throw new Error(`Server error: ${response.status} ${errorText}`);
}
const data = await response.json();
console.log("Response data:", data);
setCallId(data.call_id);
} catch (error) {
console.error("Detailed error:", error);
setResult(`Error: ${error.message}`);
setIsLoading(false);
}
};
useEffect(() => {
if (!callId) return;
const pollInterval = setInterval(async () => {
try {
const response = await fetch(`/result/${callId}`);
if (response.status === 202) {
return;
}
if (response.ok) {
const data = await response.json();
setResult(data);
setIsLoading(false);
clearInterval(pollInterval);
setCallId(null);
} else {
throw new Error("Failed to get results");
}
} catch (error) {
console.error("Error polling results:", error);
setResult("Error getting results");
setIsLoading(false);
clearInterval(pollInterval);
setCallId(null);
}
}, 1000);
return () => clearInterval(pollInterval);
}, [callId]);
return (
Receipt Parsing with GOT OCR 2.0
Upload a receipt
{!previewUrl ? (
<>
>
) : (

)}
GOT-OCR Output
{isLoading ? (
) : result ? (
) : null}
);
}
const container = document.getElementById("react");
const root = ReactDOM.createRoot(container);
root.render(React.createElement(App));