Spaces:
Runtime error
Runtime error
| import { useState } from 'react'; | |
| import { DashButton } from './DashButton' | |
| import { FileEmbedder } from './FileEmbedder'; | |
| import * as PDFJS from 'pdfjs-dist/build/pdf'; | |
| PDFJS.GlobalWorkerOptions.workerSrc = `//cdnjs.cloudflare.com/ajax/libs/pdf.js/${PDFJS.version}/pdf.worker.min.js`; | |
| const readFile = (blob) => new Promise((resolve, reject) => { | |
| const reader = new FileReader(); | |
| reader.onload = (event) => resolve(event.target.result); | |
| reader.onerror = reject; | |
| reader.readAsText(blob); | |
| }); | |
| export default class Pdf { | |
| static async getPageText(pdf, pageNo) { | |
| const page = await pdf.getPage(pageNo); | |
| const tokenizedText = await page.getTextContent(); | |
| const pageText = tokenizedText.items.map((token) => token.str).join(''); | |
| return pageText; | |
| } | |
| static async getPDFText(source) { | |
| const pdf = await PDFJS.getDocument(source).promise; | |
| const maxPages = pdf.numPages; | |
| const pageTextPromises = []; | |
| for (let pageNo = 1; pageNo <= maxPages; pageNo += 1) { | |
| pageTextPromises.push(Pdf.getPageText(pdf, pageNo)); | |
| } | |
| const pageTexts = await Promise.all(pageTextPromises); | |
| return pageTexts.join(' '); | |
| } | |
| } | |
| export const FileLoader = ({ setFileText }) => { | |
| const [files, setFiles] = useState(); | |
| const [uploadStatus, setUploadStatus] = useState("Embed"); | |
| const handleEmbed = (files) => { | |
| setFiles(files) | |
| }; | |
| return ( | |
| <> | |
| <FileEmbedder handleEmbed={handleEmbed} /> | |
| <DashButton | |
| handleClick={async () => { | |
| if (files && files.length) { | |
| const file = files[0]; | |
| let text; | |
| const blob = new Blob([file], { type: 'text/plain' }); | |
| if (file.type === "application/pdf") { | |
| text = await Pdf.getPDFText(URL.createObjectURL(blob)); | |
| } else { | |
| text = await readFile(file) | |
| } | |
| console.log(`file text: ${text}`); | |
| setFileText(text); | |
| setUploadStatus("Embed Complete"); | |
| } | |
| }} | |
| > | |
| <div>{uploadStatus}</div> | |
| </DashButton> | |
| </> | |
| ); | |
| }; | |