import { Component, createEffect, createResource, createSignal, JSX, Show, splitProps, } from "solid-js"; import qrcode from "qrcode"; import WarningIcon from "~icons/carbon/warning-alt-filled"; const QrCode: Component< { margin?: number; value: string; errorCorrectionLevel?: string; } & JSX.HTMLAttributes > = (p) => { const [props, rest] = splitProps(p, [ "margin", "value", "errorCorrectionLevel", ]); let ref: HTMLDivElement = undefined!; const [qrError, setQrError] = createSignal(); const [svg] = createResource( () => props.value, async (value) => { let svg; try { svg = await qrcode.toString(value, { type: "svg", margin: props.margin, errorCorrectionLevel: props.errorCorrectionLevel as any, }); setQrError(); } catch (err) { console.error(err); setQrError((err as Error).message); } return svg; } ); createEffect(() => { const html = svg() || ""; requestAnimationFrame(function () { ref.innerHTML = html; }); }); return ( <>
Fehler:{" "} {qrError()}
); }; export default QrCode;