1
0
Fork 0
VaultUI/src/elements/QRScanner.js

46 lines
1 KiB
JavaScript
Raw Normal View History

2021-04-29 12:52:00 +01:00
import { Margin } from "./Margin.js";
2021-05-03 09:25:42 +01:00
import { makeElement } from "../htmlUtils.js";
2021-04-29 12:52:00 +01:00
import QrScanner from 'qr-scanner';
/* eslint-disable import/no-unresolved */
import qrScannerWorkerSource from '!!raw-loader!qr-scanner/qr-scanner-worker.min.js';
QrScanner.WORKER_PATH = URL.createObjectURL(new Blob([qrScannerWorkerSource]));
export async function QRScanner(onScan) {
let webcamVideo = makeElement({
tag: "video"
})
let QRInput = makeElement({
tag: "div",
children: [
Margin(webcamVideo),
]
});
let stream = await navigator.mediaDevices.getUserMedia({
video: {
facingMode: 'environment',
},
audio: false,
});
webcamVideo.srcObject = stream;
let lastSeenValue = "";
const qrScanner = new QrScanner(webcamVideo, function (value) {
if (lastSeenValue == value) return;
onScan(value);
});
qrScanner.start();
QRInput.deinit = () => {
try {
stream.getTracks().forEach(function (track) {
track.stop();
});
} catch (_) {
()=>{};
}
};
return QRInput;
2021-04-29 12:52:00 +01:00
}