'use client'; import './style.scss'; import { useCallback } from 'react'; import { QRCodeSVG } from 'qrcode.react'; import { Button } from '@/components/ui/button'; import { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from '@/components/ui/dialog'; import { getDateFilename } from '@/lib/utils/client'; type Props = { isEnable: boolean; open: boolean; onChange: (open: boolean) => void; } export default function QRCode({ isEnable, open, onChange }: Props) { const handleDownload = useCallback(() => { const svgElement = document.getElementById('qrCode'); if (!svgElement) { return; } const svgData = new XMLSerializer().serializeToString(svgElement); const canvas = document.createElement('canvas'); const ctx = canvas.getContext('2d')!; const img = new Image(); img.onload = () => { canvas.width = img.width; canvas.height = img.height; ctx.drawImage(img, 0, 0); const pngFile = canvas.toDataURL('image/png'); const link = document.createElement('a'); link.download = getDateFilename('qr'); link.href = pngFile; link.click(); }; img.src = 'data:image/svg+xml;base64,' + btoa(unescape(encodeURIComponent(svgData))); }, []); if (!isEnable) { return null; } return ( 게시글 확인 QR 아래 QR을 스캔하여 게시글을 확인할 수 있습니다.
); }