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 (
Modal Icon Receipt Parsing with GOT OCR 2.0
Upload a receipt
{!previewUrl ? ( <> ) : ( Preview )}
GOT-OCR Output
{isLoading ? (
) : result ? ( ) : null}
); } const container = document.getElementById("react"); const root = ReactDOM.createRoot(container); root.render(React.createElement(App));