import { Controller } from "@hotwired/stimulus"; export default class extends Controller { static targets = ["input", "preview", "modal"]; connect() { this.qrScanner = null; } startCamera(event) { event.preventDefault(); this.modalTarget.classList.remove("hidden"); const videoElement = this.previewTarget; // Greift fehlerfrei auf die Klasse aus dem public-Ordner zu this.qrScanner = new window.QrScanner( videoElement, (result) => { this.handleScanSuccess(result.data); }, { onDecodeError: (error) => { /* Fehler ignorieren */ }, highlightScanRegion: true, highlightCodeOutline: true, maxScansPerSecond: 10 } ); this.qrScanner.start().catch((err) => { console.error("Kamera-Fehler:", err); alert("Kamera konnte nicht gestartet werden."); this.modalTarget.classList.add("hidden"); }); } handleScanSuccess(decodedText) { this.inputTarget.value = decodedText; this.inputTarget.dispatchEvent(new Event("input", { bubbles: true })); this.stopCamera(); } stopCamera() { if (this.qrScanner) { this.qrScanner.stop(); this.qrScanner.destroy(); this.qrScanner = null; } this.modalTarget.classList.add("hidden"); } disconnect() { this.stopCamera(); } }