UNPKG

@scandit/web-datacapture-barcode

Version:

Scandit Data Capture SDK for the Web

1 lines 3.13 kB
import{BarcodeCaptureFeedback as e}from"./BarcodeCaptureFeedback.js";import{BarcodeCaptureSession as t}from"./BarcodeCaptureSession.js";import{defaultBarcodeCapture as n}from"./defaults/DefaultsBarcodeCapture.js";import{ensureSmartScanIntentionSupport as r}from"./private/smartScanIntentionHelper.js";import{CameraSettings as i,DataCaptureContext as a,Logger as o,convertToPublicFrameData as s}from"@scandit/web-datacapture-core";var c=class c{constructor(){this.type=`barcodeCapture`,this._isEnabled=!0,this._feedback=e.default,this._context=null,this.listeners=new Set,this.allowedRemainingWorkerMessages=new Set,this.workerMessageListener=this.onWorkerMessage.bind(this)}static get recommendedCameraSettings(){return new i(n.RecommendedCameraSettings)}get context(){return this._context}get feedback(){return this._feedback}static async forContext(e,t){let n=new c;return n.settings=t,e&&await e.setMode(n),n}async setFeedback(e){return this._feedback=e,this.notifyContext()}isEnabled(){return this._isEnabled}async setEnabled(e){this._isEnabled=e,await this.notifyContext()}async applySettings(e){return this.settings=e,this.notifyContext()}addListener(e){this.listeners.has(e)||this.listeners.add(e)}removeListener(e){this.listeners.delete(e)}toJSONObject(){return{type:this.type,enabled:this._isEnabled,feedback:this.feedback.toJSONObject(),settings:this.settings.toJSONObject()}}attachedToContext(e){this._context=e,this._context.subscribeToWorkerMessages(this.workerMessageListener)}async detachedFromContext(){var e;(e=this._context)==null||e.unsubscribeToWorkerMessages(this.workerMessageListener),this._context=null}sendClearFrameDataRequest(e){setTimeout(()=>{var t;(t=this.context)==null||t.workerCommand(`deleteFrameData`,{frameId:e})},0)}async onDidScan(e){if(this.context==null)return;let n=t.fromJSON(e.payload.session),{frameData:r}=e.payload;if(!this._isEnabled){this.sendClearFrameDataRequest(r.frameId),this.allowedRemainingWorkerMessages.clear();return}this.allowedRemainingWorkerMessages.add(`successFeedback`);let i=[];for(let e of this.listeners)if(e.didScan)try{let t=e.didScan(this,n,s(r,this.context));t instanceof Promise&&await t}catch(e){i.push(e)}this.sendClearFrameDataRequest(r.frameId),this.allowedRemainingWorkerMessages.add(`barcodeCaptureDidUpdateSession`);for(let e of i)o.log(o.Level.Error,e)}onDidUpdateSession(e){let n=t.fromJSON(e.payload);if(!(!this._isEnabled&&!this.allowedRemainingWorkerMessages.has(e.type))){this.allowedRemainingWorkerMessages.delete(e.type);for(let e of this.listeners)e.didUpdateSession&&e.didUpdateSession(this,n)}}onSuccessFeedback(e){!this._isEnabled&&!this.allowedRemainingWorkerMessages.has(e.type)||(this.allowedRemainingWorkerMessages.delete(e.type),this.feedback.success.emit())}async onWorkerMessage(e){switch(e.type){case`barcodeCaptureDidScan`:this.onDidScan(e);break;case`barcodeCaptureDidUpdateSession`:this.onDidUpdateSession(e);break;case`successFeedback`:this.onSuccessFeedback(e);break;default:}}async notifyContext(){this.context!=null&&(this.settings=r(this.settings,a.capabilityInfo),await this.context.update())}};export{c as BarcodeCapture};