'use client'; import { useState, useEffect, FC } from 'react'; import { writeBarcode, prepareZXingModule, type WriterOptions } from 'zxing-wasm/writer'; // Configure WASM file location for writer prepareZXingModule({ overrides: { locateFile: (path, prefix) => { if (path.endsWith('.wasm')) { return window.location.origin + '/zxing_writer.wasm'; } return prefix + path; } } }); export const Pdf417BarcodeWasm: FC<{ hub3aText: string, className?: string }> = ({ hub3aText, className }) => { const [barcodeDataUrl, setBarcodeDataUrl] = useState(undefined); const [error, setError] = useState(undefined); useEffect(() => { const generateBarcode = async () => { try { setError(undefined); setBarcodeDataUrl(undefined); const writerOptions: WriterOptions = { format: 'PDF417', ecLevel: "5", scale: 2, }; const result = await writeBarcode(hub3aText, writerOptions); // Convert PNG blob to data URL const reader = new FileReader(); reader.onloadend = () => { setBarcodeDataUrl(reader.result as string); }; reader.readAsDataURL(result.image as Blob); } catch (err) { console.error('Failed to generate PDF417 barcode:', err); setError('Failed to generate barcode'); } }; if (hub3aText) { generateBarcode(); } }, [hub3aText]); // Show error state if (error) { return (
{error}
); } // Don't render until barcode is generated (prevents hydration mismatch) if (!barcodeDataUrl) { return (
); } return ( // eslint-disable-next-line @next/next/no-img-element PDF417 Barcode ); }