import jsQR from "jsqr" import {saveAs} from 'file-saver' import {decodeData} from "../src/decode" import { processJpeg, processPng, processPdf } from "../src/process" import {createPass} from "../src/pass" import Card from "../components/Card" import Alert from "../components/Alert" export default Form function Form() { function readFileAsync(file) { return new Promise((resolve, reject) => { let reader = new FileReader(); reader.onload = () => { resolve(reader.result); }; reader.onerror = reject; reader.readAsArrayBuffer(file); }) } const error = function(heading, message) { const alert = document.getElementById('alert') alert.setAttribute('style', null) document.getElementById('heading').innerHTML = heading document.getElementById('message').innerHTML = message document.getElementById('spin').style.display = 'none' } const processFile = async function() { document.getElementById('spin').style.display = 'block' const file = document.getElementById('file').files[0] const fileBuffer = await readFileAsync(file) let imageData switch (file.type) { case 'application/pdf': console.log('pdf') imageData = await processPdf(fileBuffer) break case 'image/jpeg': console.log('jpeg') imageData = await processJpeg(fileBuffer) break case 'image/png': console.log('png') imageData = await processPng(fileBuffer) break default: error('Error', 'Invalid file type') return } let code = jsQR(imageData.data, imageData.width, imageData.height, { inversionAttempts: 'dontInvert', }) if (code) { const rawData = code.data let decoded try { decoded = decodeData(rawData) } catch (error) { error('Invalid QR code found', 'Make sure that you picked the correct PDF') } return {decoded: decoded, raw: rawData} } else { error('No QR code found', 'Try scanning the PDF again') } } const addToWallet = async function(event) { event.preventDefault() let result try { result = await processFile() } catch { error('Error:', 'Could not extract QR code data from PDF') } if (typeof result === 'undefined') { return } const color = document.getElementById('color').value try { const pass = await createPass( { decoded: result.decoded, raw: result.raw, color: color } ) if (!pass) { error('Error:', "Something went wrong.") } else { const passBlob = new Blob([pass], {type: "application/vnd.apple.pkpass"}); saveAs(passBlob, 'covid.pkpass') } } catch (e) { error('Error:', e.message) } finally { document.getElementById('spin').style.display = 'none' } } return (
addToWallet(e)}>

Please select the (scanned) certificate PDF page, which you received from your doctor, pharmacy, vaccination centre or online.

} />
} />

Data privacy is of special importance when processing health-related data. In order for you to make an informed decision, please read the Privacy Policy.

} /> ) }