Skip to content

Commit 5a1e20e

Browse files
Merge PR mebjas#908 from upstream
2 parents 5943e69 + a667b13 commit 5a1e20e

File tree

2 files changed

+28
-11
lines changed

2 files changed

+28
-11
lines changed

src/core.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,9 @@ export type QrcodeSuccessCallback
253253
export type QrcodeErrorCallback
254254
= (errorMessage: string, error: Html5QrcodeError) => void;
255255

256+
export type StartErrorCallback
257+
= (error: Html5QrcodeError) => void;
258+
256259
/** Code decoder interface. */
257260
export interface QrcodeDecoderAsync {
258261
/**

src/html5-qrcode-scanner.ts

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import {
1212
Html5QrcodeConstants,
1313
Html5QrcodeScanType,
1414
QrcodeSuccessCallback,
15+
StartErrorCallback,
1516
QrcodeErrorCallback,
1617
Html5QrcodeResult,
1718
Html5QrcodeError,
@@ -194,6 +195,11 @@ export class Html5QrcodeScanner {
194195
private cameraScanImage: HTMLImageElement | null = null;
195196
private fileScanImage: HTMLImageElement | null = null;
196197
private fileSelectionUi: FileSelectionUi | null = null;
198+
199+
public startErrorCallback: StartErrorCallback;
200+
public torchButtonErrorCallback: StartErrorCallback;
201+
public getCamaraErrorCallback: StartErrorCallback;
202+
public clickListenerErrorCallback: StartErrorCallback;
197203
//#endregion
198204

199205
/**
@@ -226,6 +232,17 @@ export class Html5QrcodeScanner {
226232
if (config!.rememberLastUsedCamera !== true) {
227233
this.persistedDataManager.reset();
228234
}
235+
const $this = this;
236+
237+
const warnUserViaHeader : StartErrorCallback = (error) => {
238+
$this.setHeaderMessage(
239+
error.toString(), Html5QrcodeScannerStatus.STATUS_WARNING);
240+
};
241+
242+
this.startErrorCallback = warnUserViaHeader;
243+
this.torchButtonErrorCallback = warnUserViaHeader;
244+
this.getCamaraErrorCallback = warnUserViaHeader;
245+
this.clickListenerErrorCallback = warnUserViaHeader;
229246
}
230247

231248
/**
@@ -582,8 +599,7 @@ export class Html5QrcodeScanner {
582599
// time.
583600
createPermissionButtonIfNotExists();
584601
}
585-
$this.setHeaderMessage(
586-
error, Html5QrcodeScannerStatus.STATUS_WARNING);
602+
$this.getCamaraErrorCallback(error);
587603
$this.showHideScanTypeSwapLink(true);
588604
});
589605
}
@@ -763,6 +779,7 @@ export class Html5QrcodeScanner {
763779

764780
// Optional torch button support.
765781
let torchButton: TorchButton;
782+
766783
const createAndShowTorchButtonIfSupported
767784
= (cameraCapabilities: CameraCapabilities) => {
768785
if (!cameraCapabilities.torchFeature().isSupported()) {
@@ -780,9 +797,7 @@ export class Html5QrcodeScanner {
780797
{ display: "none", marginLeft: "5px" },
781798
// Callback in case of torch action failure.
782799
(errorMessage) => {
783-
$this.setHeaderMessage(
784-
errorMessage,
785-
Html5QrcodeScannerStatus.STATUS_WARNING);
800+
$this.torchButtonErrorCallback(Html5QrcodeErrorFactory.createFrom(errorMessage));
786801
}
787802
);
788803
} else {
@@ -850,8 +865,7 @@ export class Html5QrcodeScanner {
850865
$this.showHideScanTypeSwapLink(true);
851866
cameraSelectUi.enable();
852867
resetCameraActionStartButton(/* shouldShow= */ true);
853-
$this.setHeaderMessage(
854-
error, Html5QrcodeScannerStatus.STATUS_WARNING);
868+
$this.startErrorCallback(error);
855869
});
856870
});
857871

@@ -887,8 +901,7 @@ export class Html5QrcodeScanner {
887901
$this.insertCameraScanImageToScanRegion();
888902
}).catch((error) => {
889903
cameraActionStopButton.disabled = false;
890-
$this.setHeaderMessage(
891-
error, Html5QrcodeScannerStatus.STATUS_WARNING);
904+
$this.clickListenerErrorCallback(error);
892905
});
893906
});
894907

@@ -993,13 +1006,14 @@ export class Html5QrcodeScanner {
9931006
}
9941007
}
9951008

996-
private resetHeaderMessage() {
1009+
public resetHeaderMessage() {
9971010
const messageDiv = document.getElementById(
9981011
this.getHeaderMessageContainerId())!;
9991012
messageDiv.style.display = "none";
10001013
}
10011014

1002-
private setHeaderMessage(
1015+
/*eslint complexity: ["error", 5]*/
1016+
public setHeaderMessage(
10031017
messageText: string, scannerStatus?: Html5QrcodeScannerStatus) {
10041018
if (!scannerStatus) {
10051019
scannerStatus = Html5QrcodeScannerStatus.STATUS_DEFAULT;

0 commit comments

Comments
 (0)