{"version":3,"file":"main.5723ba4fc7691f4e.js","mappings":"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","sources":["./src/app/app.component.ts","./src/app/app.component.html","./src/app/app.module.ts","./src/app/beep.service.ts","./src/app/camera-access.ts","./src/app/shopping-cart-item/shopping-cart-item.component.ts","./src/app/shopping-cart-item/shopping-cart-item.component.html","./src/app/update.service.ts","./src/environments/environment.ts","./src/main.ts"],"sourcesContent":["import { AfterViewInit, ChangeDetectorRef, Component } from '@angular/core';\nimport { BeepService } from './beep.service';\nimport Quagga from '@ericblade/quagga2';\nimport { Article } from './article';\nimport { UpdateService } from './update.service';\nimport { environment } from '../environments/environment';\nimport { getMainBarcodeScanningCamera } from './camera-access';\nimport { HttpParams } from '@angular/common/http';\n\n//import products from '../assets/products.json';\n//import prices from '../assets/prices.json';\n\n//import products from '../assets/products-08042022.json';\n//import prices from '../assets/prices-08042022.json';\n\n//import products from '../assets/products-11172022.json';\n//import prices from '../assets/prices-11172022.json';\n\n//import products from '../assets/products-11252022.json';\n//import products from '../assets/products-12072022.json';\nimport products from '../assets/products-01162023.json';\n\nimport { Product } from './product';\nimport { Price } from './price';\n\n@Component({\n selector: 'app-root',\n templateUrl: './app.component.html',\n styleUrls: ['./app.component.scss']\n})\nexport class AppComponent implements AfterViewInit \n{\n started: boolean | undefined;\n errorMessage: string | undefined;\n acceptAnyCode = true;\n items: [Article, number][] = [];\n totalPrice: number = 0;\n productsScanned: Product[] = [];\n\n private lastScannedCode: string | undefined;\n private lastScannedCodeDate: number | undefined;\n\n private _products: Product[] = [];\n private _prices: Price[] = [];\n private _seqNumber: string | null;\n private _securityKey: string | null;\n private _callbackUrl:string | null;\n private _enableScan: boolean = true;\n\n constructor(private changeDetectorRef: ChangeDetectorRef,\n private beepService: BeepService,\n private updateService: UpdateService) \n {\n // \n {\n if (!navigator.mediaDevices || !(typeof navigator.mediaDevices.getUserMedia === 'function')) \n {\n this.errorMessage = 'getUserMedia is not supported. Please use Chrome on Android or Safari on iOS';\n this.started = false;\n return Promise.reject(this.errorMessage);\n }\n\n // enumerate devices and do some heuristics to find a suitable first camera\n return Quagga.CameraAccess.enumerateVideoDevices()\n .then(mediaDeviceInfos => {\n const mainCamera = getMainBarcodeScanningCamera(mediaDeviceInfos);\n if (mainCamera) {\n console.log(`Using ${mainCamera.label} (${mainCamera.deviceId}) as initial camera`);\n return this.initializeScannerWithDevice(mainCamera.deviceId);\n } else {\n console.error(`Unable to determine suitable camera, will fall back to default handling`);\n return this.initializeScannerWithDevice(undefined);\n }\n })\n .catch(error => {\n this.errorMessage = `Failed to enumerate devices: ${error}`;\n this.started = false;\n });\n }\n\n private initializeScannerWithDevice(preferredDeviceId: string | undefined): Promise \n {\n console.log(`Initializing Quagga scanner...`);\n\n const constraints: MediaTrackConstraints = {};\n if (preferredDeviceId) \n {\n // if we have a specific device, we select that\n constraints.deviceId = preferredDeviceId;\n } else \n {\n // otherwise we tell the browser we want a camera facing backwards (note that browser does not always care about this)\n constraints.facingMode = 'environment';\n }\n\n return Quagga.init({\n inputStream: {\n type: 'LiveStream',\n constraints,\n area: { // defines rectangle of the detection/localization area\n top: '25%', // top offset\n right: '10%', // right offset\n left: '10%', // left offset\n bottom: '25%' // bottom offset\n },\n target: document.querySelector('#scanner-container') ?? undefined\n },\n decoder: {\n readers: ['ean_reader', 'code_128_reader', 'upc_reader'],\n multiple: false\n },\n // See: https://github.com/ericblade/quagga2/blob/master/README.md#locate\n locate: false\n },\n (err) => {\n if (err) {\n console.error(`Quagga initialization failed: ${err}`);\n this.errorMessage = `Initialization error: ${err}`;\n this.started = false;\n } else {\n console.log(`Quagga initialization succeeded`);\n Quagga.start();\n this.started = true;\n this.changeDetectorRef.detectChanges();\n Quagga.onDetected((res) => {\n if (res.codeResult.code) \n { \n if (!this._enableScan) {\n return;\n }\n\n this.onBarcodeScanned(res.codeResult.code);\n }\n });\n }\n });\n }\n\n onBarcodeScanned(code: string) \n { \n // ignore duplicates for an interval of 1.5 seconds\n const now = new Date().getTime();\n\n if (code === this.lastScannedCode && ((this.lastScannedCodeDate !== undefined) && (now < this.lastScannedCodeDate + 1500))) \n {\n return;\n }\n\n let product = this._products.find(o => o.ModelNo === code || o.ModelNo === code.substring(1, code.length));\n\n if (!product) \n {\n this.errorMessage = `${code} is not valid. Please scan a valid barcode`;\n return;\n }\n\n if (this.productsScanned.findIndex(o => o == product) > -1) \n {\n this.errorMessage = `${code} is already scanned. Please scan a different barcode`;\n return;\n }\n\n let price = this._prices.find(o => o.ItemSeq === product?.Seq);\n\n product.UnitPrice = (price) ? price.Price1 : 0.0000;\n\n this.errorMessage = undefined;\n this.productsScanned.push(product);\n\n this.reditectToCallbackUrl();\n }\n \n handleCloseClickEvent(e: MouseEvent): void \n { \n if (window.confirm(`Are you sure you want to close this page?`)) \n {\n let params: HttpParams = new HttpParams()\n .set(\"seq\", this._seqNumber || \"\")\n .set(\"key\", this._securityKey || \"\")\n .set(\"items\", \"0\");\n\n window.location.href = `${decodeURIComponent(this._callbackUrl as string)}?${params.toString()}`;\n }\n }\n\n reditectToCallbackUrl(): void\n {\n this._enableScan = false;\n\n let params: HttpParams = new HttpParams()\n .set(\"seq\", this._seqNumber || \"\")\n .set(\"key\", this._securityKey || \"\")\n .set(\"items\", this.productsScanned.map(o => o.Seq).join(','));\n\n window.location.href = `${decodeURIComponent(this._callbackUrl as string)}?${params.toString()}`; \n //window.alert(`${decodeURIComponent(this._callbackUrl as string)}?${params.toString()}`);\n }\n}\n","
\n {{ errorMessage }}\n
\n\n
\n\n
\n \n
\n\n
\n This is a companion app for the blog post located here.\n The source code is available on Github.\n
\n\n
\n\n Please scan barcode\n\n
    \n
  • {{ product.ItemName}}(${{ product.UnitPrice }})
  • \n
\n\n
\n\n
\n \n
\n \n
\n","import { NgModule } from '@angular/core';\nimport { BrowserModule } from '@angular/platform-browser';\nimport { FormsModule } from '@angular/forms';\nimport { RouterModule, Routes } from '@angular/router';\nimport { ServiceWorkerModule, SwRegistrationOptions } from '@angular/service-worker';\n\nimport { AppComponent } from './app.component';\nimport { ShoppingCartItemComponent } from './shopping-cart-item/shopping-cart-item.component';\n\nimport { environment } from '../environments/environment';\n\n@NgModule({\n declarations: [\n AppComponent,\n ShoppingCartItemComponent\n ],\n imports: [\n BrowserModule,\n FormsModule,\n\n // PWA support\n ServiceWorkerModule.register('ngsw-worker.js'),\n RouterModule.forRoot([])\n ],\n providers: [\n {\n provide: SwRegistrationOptions,\n useFactory: () => {\n return {\n enabled: environment.production,\n registrationStrategy: 'registerImmediately'\n };\n }\n },\n ],\n bootstrap: [AppComponent]\n})\nexport class AppModule {\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class BeepService {\n\n constructor() {\n }\n\n beep() {\n const audio = new Audio();\n audio.src = 'assets/beep.wav';\n audio.load();\n audio.play();\n }\n}\n","const environmentFacingCameraLabelStrings: string[] = [\n 'rear',\n 'back',\n 'rück',\n 'arrière',\n 'trasera',\n 'trás',\n 'traseira',\n 'posteriore',\n '后面',\n '後面',\n '背面',\n '后置', // alternative\n '後置', // alternative\n '背置', // alternative\n 'задней',\n 'الخلفية',\n '후',\n 'arka',\n 'achterzijde',\n 'หลัง',\n 'baksidan',\n 'bagside',\n 'sau',\n 'bak',\n 'tylny',\n 'takakamera',\n 'belakang',\n 'אחורית',\n 'πίσω',\n 'spate',\n 'hátsó',\n 'zadní',\n 'darrere',\n 'zadná',\n 'задня',\n 'stražnja',\n 'belakang',\n 'बैक'\n];\n\nexport function isKnownBackCameraLabel(label: string): boolean {\n const labelLowerCase = label.toLowerCase();\n return environmentFacingCameraLabelStrings.some(str => {\n return labelLowerCase.includes(str);\n });\n}\n\nexport function getMainBarcodeScanningCamera(devices: MediaDeviceInfo[]): MediaDeviceInfo | undefined {\n const backCameras = devices.filter(v => isKnownBackCameraLabel(v.label));\n const sortedBackCameras = backCameras.sort((a, b) => a.label.localeCompare(b.label));\n return sortedBackCameras.length > 0 ? sortedBackCameras[0] : undefined;\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { Article } from '../article';\n\n@Component({\n selector: 'app-shopping-cart-item',\n templateUrl: './shopping-cart-item.component.html',\n styleUrls: ['./shopping-cart-item.component.scss']\n})\nexport class ShoppingCartItemComponent implements OnInit {\n\n constructor() {\n }\n\n @Input()\n article: Article | undefined;\n\n @Input()\n count: number | undefined;\n\n ngOnInit(): void {\n }\n\n}\n","
\n \n
{{ article.name }}
\n
{{ count }}
\n
\n","import { Injectable } from '@angular/core';\nimport { SwUpdate } from '@angular/service-worker';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UpdateService {\n\n constructor(private swUpdate: SwUpdate) {\n swUpdate.available.subscribe(event => {\n if (window.confirm(`A new update is available. Would you like to load the latest version?`)) {\n swUpdate.activateUpdate().then(() => document.location.reload());\n }\n });\n }\n\n checkForUpdates() {\n this.swUpdate.checkForUpdate();\n }\n}\n","// This file can be replaced during build by using the `fileReplacements` array.\n// `ng build` replaces `environment.ts` with `environment.prod.ts`.\n// The list of file replacements can be found in `angular.json`.\n\nexport const environment = {\n production: false\n};\n\n/*\n * For easier debugging in development mode, you can import the following file\n * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`.\n *\n * This import should be commented out in production mode because it will have a negative impact\n * on performance if an error is thrown.\n */\n// import 'zone.js/plugins/zone-error'; // Included with Angular CLI.\n","import { enableProdMode } from '@angular/core';\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n\nimport { AppModule } from './app/app.module';\nimport { environment } from './environments/environment';\n\nif (environment.production) {\n enableProdMode();\n}\n\nplatformBrowserDynamic().bootstrapModule(AppModule)\n .catch(err => console.error(err));\n"],"names":[],"sourceRoot":"webpack:///"}