Spaces:
Paused
Paused
| "use client"; | |
| import React, { useState, useEffect } from 'react'; | |
| // @ts-ignore | |
| import * as PDFJS from 'pdfjs-dist/build/pdf'; | |
| import FileEmbedder from './FileEmbedder'; | |
| PDFJS.GlobalWorkerOptions.workerSrc = "https://cdnjs.cloudflare.com/ajax/libs/pdf.js/3.11.174/pdf.worker.min.js"; | |
| interface FileLoaderProps { | |
| setFileText: (text: string) => void; | |
| } | |
| export const FileLoader: React.FC<FileLoaderProps> = ({ setFileText }) => { | |
| const [selectedFile, setSelectedFile] = useState<File | null>(null); | |
| // Handle file processing | |
| useEffect(() => { | |
| const processPDF = async (file: File) => { | |
| try { | |
| const fileData = new Uint8Array(await file.arrayBuffer()); | |
| const pdf = await PDFJS.getDocument({ data: fileData }).promise; | |
| const maxPages = pdf.numPages; | |
| const pageTexts = []; | |
| for (let pageNo = 1; pageNo <= maxPages; pageNo++) { | |
| const page = await pdf.getPage(pageNo); | |
| const tokenizedText = await page.getTextContent(); | |
| // @ts-ignore | |
| const pageText = tokenizedText.items.map(token => token.str).join(' '); | |
| pageTexts.push(pageText); | |
| } | |
| const documentText = pageTexts.join(' '); | |
| setFileText(documentText); | |
| } catch (error) { | |
| console.error('PDF processing error:', error); | |
| } | |
| }; | |
| if (selectedFile && selectedFile.type === "application/pdf") { | |
| processPDF(selectedFile); | |
| } | |
| }, [selectedFile, setFileText]); | |
| // Handle file selection | |
| const handleFileChange = (event: React.ChangeEvent<HTMLInputElement>) => { | |
| if (event.target.files) { | |
| setSelectedFile(event.target.files[0]); | |
| } | |
| }; | |
| return ( | |
| <div> | |
| <FileEmbedder onFileSelect={handleFileChange} /> | |
| {/* Optionally display some status or progress indicator */} | |
| </div> | |
| ); | |
| }; | |