@@ -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