{"version":3,"sources":["webpack:///./app/javascript/qr_react_src/utils/time_helpers.js","webpack:///./app/javascript/qr_react_src/QrPageV3/TabBar/index.module.css","webpack:///./app/javascript/qr_react_src/QrPageV3/Common/TabPanel/DeviceName/index.module.css","webpack:///./app/javascript/qr_react_src/QrPageV3/ManualEnterTabPanel/index.module.css","webpack:///./app/javascript/qr_react_src/QrPageV3/PageHeader/index.module.css","webpack:///./app/javascript/qr_react_src/QrPageV3/Common/TabPanel/BookmarkInfoButton/index.module.css","webpack:///./app/javascript/qr_react_src/QrPageV3/ScanTabPanel/ZxingQrReader/ViewFinder.module.css","webpack:///./app/javascript/qr_react_src/QrPageV3/ScanTabPanel/index.module.css","webpack:///./app/javascript/qr_react_src/QrPageV3/Common/TabPanel/index.module.css","webpack:///./app/javascript/qr_react_src/QrPageV3/HistoryTabPanel/index.module.css","webpack:///./app/javascript/qr_react_src/QrPageV3/ScanTabPanel/ZxingQrReader/index.module.css","webpack:///./app/javascript/qr_react_src/QrPageV3/HistoryTabPanel/ScanLineItem/index.module.css","webpack:///./app/assets/images/starstream.png","webpack:///./app/assets/images/scanner/history.png","webpack:///./app/assets/images/scanner/history-yellow.png","webpack:///./app/assets/images/scanner/scan.png","webpack:///./app/assets/images/scanner/scan-yellow.png","webpack:///./app/assets/images/scanner/keyboard.png","webpack:///./app/assets/images/scanner/keyboard-yellow.png","webpack:///./app/assets/images/scanner/corner-down-right.png","webpack:///./app/javascript/qr_react_src/QrPageV3/Common/ValidationResult/index.module.css","webpack:///./app/javascript/qr_react_src/utils/API_public.js","webpack:///./app/javascript/qr_react_src/QrPageV2/QrScanner.jsx","webpack:///./app/javascript/qr_react_src/QrPageV2/index.jsx","webpack:///./app/javascript/qr_react_src/QrPageV3/PageHeader/index.jsx","webpack:///./app/javascript/qr_react_src/QrPageV3/Common/TabPanel/DeviceName/useDeviceName.js","webpack:///./app/javascript/qr_react_src/QrPageV3/TabBar/useCurrentTab.js","webpack:///./app/javascript/qr_react_src/QrPageV3/Common/ValidationResult/useShowValidationResult.js","webpack:///./app/javascript/qr_react_src/QrPageV3/TabBar/index.jsx","webpack:///./app/javascript/qr_react_src/QrPageV3/Common/TabPanel/DeviceName/inlineStyles.js","webpack:///./app/javascript/qr_react_src/QrPageV3/Common/TabPanel/DeviceName/index.jsx","webpack:///./app/javascript/qr_react_src/QrPageV3/Common/TabPanel/BookmarkInfoButton/index.jsx","webpack:///./app/javascript/qr_react_src/QrPageV3/Common/TabPanel/index.jsx","webpack:///./app/javascript/qr_react_src/QrPageV3/HistoryTabPanel/ScanLineItem/ValidLineItem.jsx","webpack:///./app/javascript/qr_react_src/QrPageV3/HistoryTabPanel/ScanLineItem/InvalidLineItem.jsx","webpack:///./app/javascript/qr_react_src/QrPageV3/HistoryTabPanel/ScanLineItem/ScannedLineItem.jsx","webpack:///./app/javascript/qr_react_src/QrPageV3/HistoryTabPanel/ScanLineItem/index.jsx","webpack:///./app/javascript/qr_react_src/QrPageV3/HistoryTabPanel/useScans.jsx","webpack:///./app/javascript/qr_react_src/QrPageV3/HistoryTabPanel/index.jsx","webpack:///./app/javascript/qr_react_src/QrPageV3/ScanTabPanel/ZxingQrReader/useQrReader.jsx","webpack:///./app/javascript/qr_react_src/QrPageV3/ScanTabPanel/ZxingQrReader/ViewFinder.jsx","webpack:///./app/javascript/qr_react_src/QrPageV3/ScanTabPanel/ZxingQrReader/index.jsx","webpack:///./app/javascript/qr_react_src/QrPageV3/Common/ValidationResult/inlineStyles.js","webpack:///./app/javascript/qr_react_src/QrPageV3/Common/ValidationResult/ValidTicketResult.jsx","webpack:///./app/javascript/qr_react_src/QrPageV3/Common/ValidationResult/InvalidTicketResult.jsx","webpack:///./app/javascript/qr_react_src/QrPageV3/Common/ValidationResult/ScannedTicketResult.jsx","webpack:///./app/javascript/qr_react_src/QrPageV3/Common/ValidationResult/index.jsx","webpack:///./app/javascript/qr_react_src/utils/validateTicket.js","webpack:///./app/javascript/qr_react_src/utils/usePageVisibility.js","webpack:///./app/javascript/qr_react_src/QrPageV3/ScanTabPanel/index.jsx","webpack:///./app/javascript/qr_react_src/QrPageV3/ManualEnterTabPanel/index.jsx","webpack:///./app/javascript/qr_react_src/QrPageV3/index.jsx","webpack:///./app/javascript/qr_react_src/AppQr.jsx","webpack:///./app/javascript/packs/qr_react_module.jsx"],"names":["timeFromSecondsSinceEpoch","seconds","Date","datetimeStringFromSecondsSinceEpoch","time","format","datetimeString","timeStringFromSecondsSinceEpoch","timeString","dateStringFromSecondsSinceEpoch","dateString","currentSecondsSinceEpoch","Math","floor","now","module","exports","instance","axios","create","baseURL","SCAN_VALID","SCANNED_BEFORE","QrScanner","state","facingMode","monitoring","scans","loading","openResultDialog","dialogTitle","dialogText","dialogTextColor","showManualInput","manualInput","deviceName","pendingDeviceName","editingDeviceName","showDeviceNameBlankError","handleScan","data","setState","validateTicket","result","status","message","push","scan","created_at","device_name","prevScans","prev_scans","color","qr_data","API_public","post","response","Sentry","scope","setExtra","console","log","valid","handleError","err","error","closeDialog","submitEnterCodeManually","scannerDeviceName","localStorage","getItem","this","rows","i","length","r_time","r_data","valid_str","key","style","toLocaleTimeString","hour","minute","hour12","Fragment","contentStyle","display","flexDirection","justifyContent","padding","textAlign","margin","fontSize","fontWeight","placeholder","width","value","onInput","event","target","paddingTop","modifier","disabled","onClick","setItem","marginBottom","delay","onError","onScan","showViewFinder","alignItems","textOverflow","overflow","size","material","icon","marginLeft","isOpen","indeterminate","onCancel","cancelable","className","float","onChange","React","Component","defaultProps","monitorQrCode","onQrCode","QrPageV2","PageHeader","styles","header","brand","src","starstreamPNG","starstream","scannerName","DeviceNameState","hookstate","useDeviceNameState","useHookstate","EditingDeviceNameState","useEditingDeviceName","get","setEditingDeviceName","set","TabName","CurrentTabState","useCurrentTab","currentTab","setCurrentTab","ShowValidationResultState","useShowValidationResult","showValidationResult","setShowValidationResult","HistoryTab","ScanTab","ManualEnterTab","TabBar","tabBar","tab","historyIcon","HistoryYellowIconPath","HistoryIconPath","tabTitle","scanIcon","ScanYellowIconPath","ScanIconPath","manualEnterIcon","KeyboardYellowIconPath","KeyboardIconPath","inlineStyles","modalBody","marginTop","maxWidth","marginRight","buttonWrapper","DeviceName","useDeviceName","setDeviceName","useState","setPendingDeviceName","useEffect","editButton","deviceNameText","editIconWrapper","IconPencil","editIcon","class","fieldBox","field","saveButton","cancelButton","notice","BookmarkInfoButton","modalOpen","setModalOpen","infoButtonWrapper","infoButton","IconInfoCircle","visible","body","text","okButton","TabPanel","props","tabPanel","headSection","space","bodySection","children","ValidLineItem","event_name","product_variant_title","line","eventName","variantTitle","IconCheck","sucessIcon","code","InvalidLineItem","IconX","invalidIcon","ScannedLineItem","firstScan","sort","a","b","scannedLine","IconExclamationMark","warningIcon","firstScannedLabel","cornerDownRightIcon","cornerDownRightIconPath","ScanLineItem","scansState","useScansState","HistoryTabPanel","sortedScans","box","title","map","index","useQrReader","scanDelay","onResult","videoRef","active","readerControls","useRef","codeReader","useMemo","BrowserQRCodeReader","delayBetweenScanAttempts","setup","releaseAllStreams","decodeFromConstraints","video","current","controls","isChecksumError","ChecksumException","isNotFound","NotFoundException","isFormatError","FormatException","stop","ViewFinder","viewFinder","IconRadiusTopLeft","radiusTopLeftIcon","IconRadiusTopRight","radiusTopRightIcon","IconRadiusBottomLeft","radiusBottomLeftIcon","IconRadiusBottomRight","radiusBottomRightIcon","ZxingQrReader","container","muted","ref","transform","undefined","ValidTicketResult","onClickNext","card","indicator","ticket","nextButton","InvalidTicketResult","invalid","ScannedTicketResult","scanned","scannedBy","ValidationResult","postScans","parseResponseToScan","usePageVisibility","isVisible","setIsVisible","eventHandler","document","visibilityState","addEventListener","removeEventListener","ScanTabPanel","setFacingMode","setLoading","currentScan","setCurrentScan","qrReaderActive","setQrReaderActive","pageIsVisible","merge","qrReader","hidden","flipCameraWrapper","flipCamera","IconRefresh","cameraRotateIcon","ManualEnterTabPanel","setCode","handleSubmit","label","info","toUpperCase","validateButton","QrPageV3","backgroundColor","AppQr","version","mountPoint","getElementById","appVersion","parseInt","dataset","ReactDOM","render"],"mappings":"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","file":"js/qr_react_module-601e1b0ed5ba762f5fac.chunk.js","sourcesContent":["import { format } from \"date-fns\";\nexport const timeFromSecondsSinceEpoch = (seconds) => {\n return new Date(seconds * 1000);\n}\n\nexport const dateString = (time) => {\n return format(time, 'yyyy-MM-dd')\n}\n\nexport const datetimeString = (time) => {\n return format(time, 'yyyy-MM-dd @ hh:mm')\n}\n\nexport const datetimeStringFromSecondsSinceEpoch = (seconds) => {\n const time = timeFromSecondsSinceEpoch(seconds)\n return datetimeString(time)\n}\n\nexport const timeString = (time) => {\n return format(time, 'hh:mmaaa')\n}\n\nexport const timeStringFromSecondsSinceEpoch = (seconds) => {\n const time = timeFromSecondsSinceEpoch(seconds)\n return timeString(time)\n}\n\nexport const dateStringFromSecondsSinceEpoch = (seconds) => {\n const time = timeFromSecondsSinceEpoch(seconds)\n return dateString(time)\n}\n\nexport const currentSecondsSinceEpoch = () => {\n return Math.floor(Date.now() / 1000)\n}\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"tabBar\":\"index-module__tabBar___1CMA-\",\"tab\":\"index-module__tab___3FE59\",\"historyIcon\":\"index-module__historyIcon___1PZdO\",\"scanIcon\":\"index-module__scanIcon___2PY9r\",\"manualEnterIcon\":\"index-module__manualEnterIcon___1Ez_y\",\"activeIcon\":\"index-module__activeIcon___18tVE\",\"tabTitle\":\"index-module__tabTitle___ntDZA\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"editButton\":\"index-module__editButton___kX9rg\",\"deviceNameText\":\"index-module__deviceNameText___20JPG\",\"editIconWrapper\":\"index-module__editIconWrapper___3z3PF\",\"editIcon\":\"index-module__editIcon___2ej0t\",\"saveButton\":\"index-module__saveButton___3APeV\",\"cancelButton\":\"index-module__cancelButton___2CHH4\",\"notice\":\"index-module__notice___2KGtc\",\"fieldBox\":\"index-module__fieldBox___fgtgR\",\"field\":\"index-module__field___2DN50\",\"error\":\"index-module__error___XJh7b\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"label\":\"index-module__label___1hzzh\",\"info\":\"index-module__info___2ILxP\",\"fieldBox\":\"index-module__fieldBox___2H8fq\",\"error\":\"index-module__error___vPqxm\",\"field\":\"index-module__field___lGT8y\",\"validateButton\":\"index-module__validateButton___3_DT2\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"header\":\"index-module__header___3keTi\",\"brand\":\"index-module__brand___nJwFC\",\"icon\":\"index-module__icon___2SNGi\",\"starstream\":\"index-module__starstream___1RqNi\",\"scannerName\":\"index-module__scannerName___2wsbC\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"infoButtonWrapper\":\"index-module__infoButtonWrapper___HEpj_\",\"infoButton\":\"index-module__infoButton___KrZ2j\",\"body\":\"index-module__body___10UL-\",\"text\":\"index-module__text___2NeYT\",\"okButton\":\"index-module__okButton___3oznI\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"viewFinder\":\"ViewFinder-module__viewFinder___11QoE\",\"radiusTopLeftIcon\":\"ViewFinder-module__radiusTopLeftIcon___drQHY\",\"radiusTopRightIcon\":\"ViewFinder-module__radiusTopRightIcon___jJkAH\",\"radiusBottomLeftIcon\":\"ViewFinder-module__radiusBottomLeftIcon___1UeBM\",\"radiusBottomRightIcon\":\"ViewFinder-module__radiusBottomRightIcon___25UOd\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"qrReader\":\"index-module__qrReader___26MEH\",\"hidden\":\"index-module__hidden___xemoW\",\"flipCameraWrapper\":\"index-module__flipCameraWrapper___3E6Ye\",\"flipCamera\":\"index-module__flipCamera___vc3LZ\",\"cameraRotateIcon\":\"index-module__cameraRotateIcon___1zcDj\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"tabPanel\":\"index-module__tabPanel___2u4eJ\",\"headSection\":\"index-module__headSection___1W998\",\"bodySection\":\"index-module__bodySection___15FQu\",\"space\":\"index-module__space___2i64D\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"box\":\"index-module__box___7tzav\",\"title\":\"index-module__title___1Z-gE\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"container\":\"index-module__container___VqTUa\",\"video\":\"index-module__video___22pUa\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"line\":\"index-module__line___3kCiD\",\"scannedLine\":\"index-module__scannedLine___1dyWa\",\"eventName\":\"index-module__eventName___2oT2u\",\"variantTitle\":\"index-module__variantTitle___1zOff\",\"body\":\"index-module__body___38Ydg\",\"scan\":\"index-module__scan___1MW63\",\"firstScan\":\"index-module__firstScan___1MalK\",\"code\":\"index-module__code___3txEi\",\"deviceName\":\"index-module__deviceName___OJ0DT\",\"time\":\"index-module__time___riNHS\",\"sucessIcon\":\"index-module__sucessIcon___MGkDw\",\"warningIcon\":\"index-module__warningIcon___2M6Z6\",\"invalidIcon\":\"index-module__invalidIcon___Utr40\",\"cornerDownRightIcon\":\"index-module__cornerDownRightIcon___11Szz\",\"flex\":\"index-module__flex___2pQEk\",\"flexColumn\":\"index-module__flexColumn___fVJs8\",\"firstScannedLabel\":\"index-module__firstScannedLabel___1OWLy\"};","module.exports = __webpack_public_path__ + \"media/images/starstream-8d718957.png\";","module.exports = __webpack_public_path__ + \"media/scanner/history-20c62ded.png\";","module.exports = __webpack_public_path__ + \"media/scanner/history-yellow-17b25731.png\";","module.exports = __webpack_public_path__ + \"media/scanner/scan-39f832ef.png\";","module.exports = __webpack_public_path__ + \"media/scanner/scan-yellow-2eb36944.png\";","module.exports = __webpack_public_path__ + \"media/scanner/keyboard-131a915e.png\";","module.exports = __webpack_public_path__ + \"media/scanner/keyboard-yellow-ea5cfa8e.png\";","module.exports = __webpack_public_path__ + \"media/scanner/corner-down-right-82ad881f.png\";","// extracted by mini-css-extract-plugin\nmodule.exports = {\"card\":\"index-module__card___2DnH_\",\"valid\":\"index-module__valid___lFPFO\",\"scanned\":\"index-module__scanned___s13uw\",\"invalid\":\"index-module__invalid___22rIB\",\"eventName\":\"index-module__eventName___3DX6P\",\"variantTitle\":\"index-module__variantTitle___3-bEt\",\"indicator\":\"index-module__indicator___r1sUa\",\"ticket\":\"index-module__ticket___10GDl\",\"scanedBy\":\"index-module__scanedBy___16Zy-\",\"deviceName\":\"index-module__deviceName___297Ff\",\"time\":\"index-module__time___2gk43\",\"code\":\"index-module__code___2RBmZ\",\"nextButton\":\"index-module__nextButton___2rzGY\"};","import axios from \"axios\"\n\nconst instance = axios.create({\n baseURL: \"/api_public/v1/\"\n})\n\n// export your axios instance to use within your app\nexport default instance","import \"./qr_style.css\"\nimport API_public from \"../utils/API_public\"\nimport React from \"react\"\nimport QrReader from \"react-qr-reader\";\nimport {AlertDialog, Button, Modal, ProgressBar, Input, Page, Card, Row, Icon} from 'react-onsenui';\nimport PropTypes from \"prop-types\";\nimport * as Sentry from \"@sentry/react\";\n\nconst SCAN_VALID = 'scan_valid'\nconst SCANNED_BEFORE = 'scanned_before'\nconst SCAN_INVALID = 'scan_invalid'\n\nclass QrScanner extends React.Component {\n state = {\n facingMode: \"environment\",\n monitoring: true,\n scans: [],\n loading: false,\n openResultDialog: false,\n dialogTitle: \"Valid\",\n dialogText: \"The ticket is valid\",\n dialogTextColor: \"green\",\n // manual code\n showManualInput: false,\n manualInput: \"\",\n deviceName: null,\n pendingDeviceName: null,\n editingDeviceName: false,\n showDeviceNameBlankError: false\n }\n\n componentDidMount() {\n const scannerDeviceName = localStorage.getItem(\"StarStreamScannerDeviceName\")\n if (scannerDeviceName) {\n this.setState({\n editingDeviceName: false,\n pendingDeviceName: scannerDeviceName,\n deviceName: scannerDeviceName\n })\n } else {\n this.setState({\n editingDeviceName: true,\n pendingDeviceName: scannerDeviceName,\n deviceName: scannerDeviceName\n })\n }\n }\n\n handleScan = async (data) => {\n if (data) {\n if (this.state.monitoring) {\n this.setState({\n monitoring: false,\n loading: true,\n })\n\n // validate the ticket\n const result = await this.validateTicket(data)\n\n if (result.status === SCAN_VALID) {\n this.setState({\n dialogTitle: \"Valid\",\n dialogText: result.message,\n dialogTextColor: \"green\"\n })\n this.state.scans.push({\n time: new Date(result.scan.created_at * 1000),\n data: data,\n status: result.status,\n deviceName: result.scan.device_name,\n prevScans: result.prev_scans,\n color: 'green'\n })\n\n } else if (result.status === SCANNED_BEFORE) {\n this.setState({\n dialogTitle: \"Valid\",\n dialogText: result.message,\n dialogTextColor: \"orange\"\n })\n this.state.scans.push({\n time: new Date(result.scan.created_at * 1000),\n data: data,\n status: result.status,\n deviceName: result.scan.device_name,\n prevScans: result.prev_scans,\n color: 'orange'\n })\n\n } else {\n this.setState({\n dialogTitle: \"Invalid\",\n dialogText: result.message,\n dialogTextColor: \"red\"\n })\n this.state.scans.push({\n time: new Date(),\n data: data,\n status: result.status,\n deviceName: this.state.deviceName,\n color: 'red'\n })\n }\n\n this.setState({\n loading: false,\n openResultDialog: true\n })\n }\n }\n }\n\n validateTicket = async (qr_data) => {\n try {\n const response = await API_public.post(`/scans`, { qr_data, device_name: this.state.deviceName })\n return response.data\n } catch (e) {\n Sentry.withScope(scope => {\n scope.setExtra(\"handled\", true)\n Sentry.captureException(e)\n })\n console.log(e)\n return {valid: false};\n }\n }\n\n handleError = err => {\n console.error(err)\n }\n\n closeDialog = () => {\n this.setState({\n openResultDialog: false,\n loading: false,\n monitoring: true,\n })\n }\n\n submitEnterCodeManually = async () => {\n this.setState({\n showManualInput: false,\n })\n await this.handleScan(this.state.manualInput)\n }\n\n render() {\n let rows = [];\n for (let i = this.state.scans.length - 1; i >= 0; i--) {\n const r_time = this.state.scans[i].time\n const r_data = this.state.scans[i].data\n const status = this.state.scans[i].status\n const valid_str = status === SCAN_INVALID ? \"invalid\" : \"valid\"\n const color = this.state.scans[i].color\n const deviceName = this.state.scans[i].deviceName\n\n rows.push(\n \n \n
\n #{i + 1} - {r_data} - {valid_str} - {deviceName} @{r_time.toLocaleTimeString([], {\n hour: '2-digit',\n minute: '2-digit',\n hour12: false\n })}\n
\n \n \n );\n }\n\n if (this.state.scans.length <= 0) {\n rows.push(\n \n \n
\n No Data\n
\n \n \n );\n }\n\n return (\n \n {this.state.editingDeviceName ? (\n\n \n

Starstream Code Scanner

\n \n \n {this.state.pendingDeviceName === '' &&\n
can't be blank
\n }\n {\n this.setState({pendingDeviceName: event.target.value})\n }}\n />\n
\n \n {\n if (this.state.pendingDeviceName && this.state.pendingDeviceName.length > 0) {\n localStorage.setItem('StarStreamScannerDeviceName', this.state.pendingDeviceName)\n this.setState({\n deviceName: this.state.pendingDeviceName,\n editingDeviceName: false\n })\n } else {\n this.setState({\n pendingDeviceName: ''\n })\n }\n }}\n >\n Save\n \n \n {this.state.deviceName &&\n \n {\n this.setState({\n pendingDeviceName: this.state.deviceName,\n editingDeviceName: false\n })\n }}\n >\n Cancel\n \n \n }\n \n\n ) : (\n\n \n
\n
\n Starstream QR Code Scanner\n
\n
\n
\n
\n You can bookmark this webpage on your phone home-screen to access Starstream QR Code Scanner\n quickly.\n
\n
\n You can share this url with your employees, so they can scan tickets too.\n
\n
\n
\n \n
\n
\n

\n {this.state.deviceName}\n

\n this.setState({editingDeviceName: true})}\n >\n \n \n
\n
\n
\n \n \n
\n\n \n \n \n \n \n \n \n {rows}\n \n
Scans
\n\n
\n \n
\n
\n \n Validating ticket with Starstream's servers...\n \n \n \n \n {this.state.dialogTitle}\n \n \n {this.state.dialogText}\n \n \n \n \n \n \n \n Enter ticket code manually\n \n \n The code is located under the QR Code. The format is XXX-YYY-ZZZZZZ.\n \n \n {\n this.setState({manualInput: event.target.value})\n }}\n modifier='material'\n placeholder='Code'/>\n \n \n \n \n \n
\n\n )}\n
\n )\n }\n}\n\nQrScanner.propTypes = {\n onQrCode: PropTypes.func,\n monitorQrCode: PropTypes.bool,\n}\n\nQrScanner.defaultProps = {\n monitorQrCode: true,\n onQrCode: (data) => {\n },\n}\n\nexport default QrScanner","import React from \"react\"\nimport * as Ons from \"react-onsenui\";\nimport QrScanner from \"./QrScanner\";\n\nexport default class QrPageV2 extends React.Component {\n render() {\n return (\n <>\n \n \n \n \n )\n }\n}","import React from \"react\"\nimport starstreamPNG from \"../../../../assets/images/starstream.png\"\nimport styles from \"./index.module.css\"\n\nconst PageHeader = () => {\n return (\n
\n\n
\n \n
starstream
\n
\n\n
\n QR Code Scanner\n
\n\n
\n )\n}\n\nexport default PageHeader\n","import { hookstate, useHookstate } from \"@hookstate/core\"\n\nconst DeviceNameState = hookstate(null)\nexport const useDeviceNameState = () => {\n return useHookstate(DeviceNameState)\n}\nexport const useDeviceName = () => {\n\n const deviceName = useDeviceNameState()\n\n return [deviceName.get(), deviceName.set]\n}\n\nconst EditingDeviceNameState = hookstate(true)\nexport const useEditingDeviceName = () => {\n\n const editingDeviceName = useHookstate(EditingDeviceNameState)\n\n return {\n editingDeviceName: editingDeviceName.get(),\n setEditingDeviceName: editingDeviceName.set\n }\n}\n","import { hookstate, useHookstate } from \"@hookstate/core\"\n\nexport const TabName = {\n HistoryTab: 'history',\n ScanTab: 'scan',\n ManualEnterTab: 'manual'\n}\n\nconst CurrentTabState = hookstate(TabName.ScanTab)\n\nexport const useCurrentTab = () => {\n\n const currentTab = useHookstate(CurrentTabState)\n\n return {\n currentTab: currentTab.get(),\n setCurrentTab: currentTab.set\n }\n}\n","import { hookstate, useHookstate } from \"@hookstate/core\"\n\nconst ShowValidationResultState = hookstate(false)\nexport const useShowValidationResult = () => {\n\n const showValidationResult = useHookstate(ShowValidationResultState)\n\n return {\n showValidationResult: showValidationResult.get(),\n setShowValidationResult: showValidationResult.set\n }\n}\n","import React from 'react'\nimport styles from './index.module.css'\n\nimport HistoryIconPath from '../../../../assets/images/scanner/history.png'\nimport HistoryYellowIconPath from '../../../../assets/images/scanner/history-yellow.png'\nimport ScanIconPath from '../../../../assets/images/scanner/scan.png'\nimport ScanYellowIconPath from '../../../../assets/images/scanner/scan-yellow.png'\nimport KeyboardIconPath from '../../../../assets/images/scanner/keyboard.png'\nimport KeyboardYellowIconPath from '../../../../assets/images/scanner/keyboard-yellow.png'\n\nimport { useEditingDeviceName } from '../Common/TabPanel/DeviceName/useDeviceName'\nimport {useCurrentTab, TabName} from './useCurrentTab'\n\nimport { useShowValidationResult } from '../Common/ValidationResult/useShowValidationResult'\n\nconst {HistoryTab, ScanTab, ManualEnterTab} = TabName\n\nconst TabBar = () => {\n\n const {currentTab, setCurrentTab} = useCurrentTab()\n const {editingDeviceName} = useEditingDeviceName()\n const {showValidationResult} = useShowValidationResult()\n\n return (\n <>\n {!editingDeviceName && !showValidationResult &&\n
\n\n setCurrentTab(HistoryTab)}\n >\n \n
History
\n \n\n setCurrentTab(ScanTab)}\n >\n \n
Scan
\n \n\n setCurrentTab(ManualEnterTab)}\n >\n \n
Manual Enter
\n \n\n
\n }\n \n )\n\n}\n\nexport default TabBar\n","const inlineStyles = {\n\n modalBody: {\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n padding: '0 30px 30px 30px',\n marginTop: '-100px',\n width: '100%',\n maxWidth: '400px',\n marginLeft: 'auto',\n marginRight: 'auto'\n },\n\n buttonWrapper: {\n paddingTop: '16px'\n }\n}\n\nexport default inlineStyles\n","import React, { useState, useEffect } from \"react\"\nimport {Button, Input, Page, Card, Row} from 'react-onsenui';\nimport styles from './index.module.css'\nimport inlineStyles from \"./inlineStyles\";\nimport { useDeviceName, useEditingDeviceName } from \"./useDeviceName\";\nimport { IconPencil } from '@tabler/icons-react'\n\nconst DeviceName = () => {\n\n const [deviceName, setDeviceName] = useDeviceName()\n const {editingDeviceName, setEditingDeviceName} = useEditingDeviceName()\n const [pendingDeviceName, setPendingDeviceName] = useState()\n\n useEffect(() => {\n // localStorage.removeItem('StarStreamScannerDeviceName')\n const scannerDeviceName = localStorage.getItem(\"StarStreamScannerDeviceName\")\n if (scannerDeviceName) {\n setEditingDeviceName(false)\n setPendingDeviceName(scannerDeviceName)\n setDeviceName(scannerDeviceName)\n } else {\n setEditingDeviceName(true)\n setPendingDeviceName(scannerDeviceName)\n setDeviceName(scannerDeviceName)\n }\n }, [])\n\n const save = () => {\n if (pendingDeviceName && pendingDeviceName.length > 0) {\n localStorage.setItem('StarStreamScannerDeviceName', pendingDeviceName)\n setDeviceName(pendingDeviceName)\n setEditingDeviceName(false)\n } else {\n setPendingDeviceName('')\n }\n }\n\n const cancel = () => {\n setPendingDeviceName(deviceName)\n setEditingDeviceName(false)\n }\n\n return (\n <>\n
\n setEditingDeviceName(true)}\n >\n

{deviceName}

\n
\n \n
\n \n
\n\n {editingDeviceName &&\n\n \n\n

Device name

\n\n \n {pendingDeviceName === '' &&\n
Device name can't be blank
\n }\n setPendingDeviceName(event.target.value)}\n />\n
\n\n \n \n Save\n \n \n\n {deviceName &&\n \n \n Cancel\n \n \n }\n\n
\n

Bookmark this webpage to access the Scanner quickly

\n

Share this URL with your employee, so they can scan tickets too

\n
\n
\n }\n \n )\n}\n\nexport default DeviceName\n","import React, {useState} from 'react'\nimport styles from './index.module.css'\nimport { IconInfoCircle } from '@tabler/icons-react';\nimport { Modal, Card, Button } from 'react-onsenui';\n\nconst BookmarkInfoButton = () => {\n\n const [modalOpen, setModalOpen] = useState(false)\n\n return (\n <>\n
\n setModalOpen(true)}\n >\n \n \n
\n\n \n \n
\n

Bookmark this webpage to access the Scanner quickly

\n

Share this URL with your employee, so they can scan tickets too

\n
\n\n setModalOpen(false)}\n >\n OK\n \n
\n
\n \n )\n}\n\nexport default BookmarkInfoButton\n","import React from \"react\"\nimport styles from './index.module.css'\nimport DeviceName from \"./DeviceName\";\nimport BookmarkInfoButton from \"./BookmarkInfoButton\";\n\nconst TabPanel = (props) => {\n\n return (\n
\n\n
\n
\n \n \n
\n\n
\n {props.children} \n
\n\n
\n )\n}\n\nexport default TabPanel\n","import React from 'react'\nimport styles from './index.module.css'\nimport { timeStringFromSecondsSinceEpoch } from '../../../utils/time_helpers'\nimport { IconCheck } from '@tabler/icons-react'\n\nconst ValidLineItem = (props) => {\n\n const {\n qr_data,\n device_name,\n created_at,\n event_name,\n product_variant_title\n } = props.scan\n\n return (\n <>\n
\n\n
\n
{event_name}
\n {product_variant_title &&\n
{product_variant_title}
\n }\n
\n\n
\n \n\n
\n {qr_data}\n
\n\n
\n {device_name}\n
\n\n
\n {timeStringFromSecondsSinceEpoch(created_at)}\n
\n
\n\n
\n \n )\n\n}\n\nexport default ValidLineItem\n","import React from 'react'\nimport styles from './index.module.css'\nimport { timeStringFromSecondsSinceEpoch } from '../../../utils/time_helpers'\nimport { IconX } from '@tabler/icons-react'\n\nconst InvalidLineItem = (props) => {\n\n const {\n qr_data,\n device_name,\n created_at\n } = props.scan\n\n return (\n <>\n
\n\n
\n\n \n\n
\n {qr_data}\n
\n\n {device_name &&\n
\n {device_name}\n
\n }\n\n
\n {timeStringFromSecondsSinceEpoch(created_at)}\n
\n\n
\n\n
\n \n )\n\n}\n\nexport default InvalidLineItem\n","import React from 'react'\nimport styles from './index.module.css'\nimport { timeStringFromSecondsSinceEpoch } from '../../../utils/time_helpers'\nimport { IconExclamationMark, IconCheck } from '@tabler/icons-react'\nimport cornerDownRightIconPath from \"../../../../../assets/images/scanner/corner-down-right.png\"\n\nconst ScannedLineItem = (props) => {\n\n const {\n qr_data,\n device_name,\n created_at,\n prev_scans,\n event_name,\n product_variant_title\n } = props.scan\n\n const firstScan = prev_scans && [...prev_scans].sort((a, b) => a.created_at - b.created_at)[0]\n\n return (\n <>\n
\n\n
\n
{event_name}
\n {product_variant_title &&\n
{product_variant_title}
\n }\n
\n\n
\n
\n \n\n
\n {qr_data}\n
\n\n
\n {device_name}\n
\n\n
\n {timeStringFromSecondsSinceEpoch(created_at)}\n
\n
\n\n
\n\n \n\n \n\n \n\n
\n {firstScan.qr_data}\n
\n\n
\n {firstScan.device_name}\n
\n\n
\n {timeStringFromSecondsSinceEpoch(firstScan.created_at)}\n
\n\n
\n
\n\n
\n \n )\n\n}\n\nexport default ScannedLineItem\n","import React from 'react'\nimport ValidLineItem from './ValidLineItem'\nimport InvalidLineItem from './InvalidLineItem'\nimport ScannedLineItem from './ScannedLineItem'\n\nconst SCAN_VALID = 'scan_valid'\nconst SCANNED_BEFORE = 'scanned_before'\nconst SCAN_INVALID = 'scan_invalid'\n\nconst ScanLineItem = (props) => {\n\n const {scan} = props\n\n return (\n <>\n {scan.status === SCAN_VALID &&\n \n }\n\n {scan.status === SCANNED_BEFORE &&\n \n }\n\n {scan.status === SCAN_INVALID &&\n \n }\n \n )\n\n}\n\nexport default ScanLineItem\n","import { hookstate, useHookstate } from \"@hookstate/core\"\n\nconst scansState = hookstate([])\nexport const useScansState = () => {\n return useHookstate(scansState)\n}\nexport const useScans = () => {\n\n const scans = useScansState()\n\n return {\n scans: scans.get(),\n setScans: scans.set\n }\n}\n","import React from 'react'\nimport styles from './index.module.css'\nimport TabPanel from '../Common/TabPanel'\nimport ScanLineItem from './ScanLineItem'\nimport { useScansState } from './useScans'\n\nconst HistoryTabPanel = () => {\n\n const scans = useScansState()\n const sortedScans = [...scans.get()].sort((a, b) => b.created_at - a.created_at)\n\n return (\n \n\n
\n\n

Scan History

\n\n
\n {sortedScans.map((scan, index) => )}\n
\n
\n\n
\n )\n\n}\n\nexport default HistoryTabPanel\n","import { useEffect, useMemo, useRef } from 'react';\nimport { BrowserQRCodeReader } from '@zxing/browser';\nimport { NotFoundException, ChecksumException, FormatException } from '@zxing/library';\n\nexport const useQrReader = (props) => {\n\n const {facingMode, scanDelay, onResult, onError, videoRef, active} = props\n\n const readerControls = useRef(null)\n\n const codeReader = useMemo(() => {\n return new BrowserQRCodeReader(null, {\n delayBetweenScanAttempts: scanDelay\n });\n }, [scanDelay])\n\n useEffect(() => {\n const setup = async () => {\n try {\n BrowserQRCodeReader.releaseAllStreams()\n\n await codeReader.decodeFromConstraints({video: {facingMode}}, videoRef.current, (result, error, controls) => {\n readerControls.current = controls\n\n if (result) {\n onResult(result)\n } else {\n const isChecksumError = error instanceof ChecksumException;\n const isNotFound = error instanceof NotFoundException;\n const isFormatError = error instanceof FormatException;\n\n if (!isChecksumError && !isNotFound && !isFormatError) {\n onError(error)\n }\n }\n })\n } catch (error) {\n onError(error)\n }\n }\n\n if (active) {\n setup()\n } else {\n readerControls.current?.stop()\n }\n\n return () => {\n readerControls.current?.stop()\n }\n }, [facingMode, active])\n\n};\n","import React from 'react'\nimport styles from './ViewFinder.module.css'\nimport {\n IconRadiusTopLeft,\n IconRadiusTopRight,\n IconRadiusBottomLeft,\n IconRadiusBottomRight\n} from '@tabler/icons-react'\n\nconst ViewFinder = () => {\n return (\n <>\n
\n\n \n \n \n \n\n
\n \n )\n}\n\nexport default ViewFinder\n","import React, { useRef } from 'react';\nimport styles from \"./index.module.css\"\nimport { useQrReader } from './useQrReader';\nimport ViewFinder from './ViewFinder';\n\nexport const ZxingQrReader = (props) => {\n\n const {\n facingMode,\n scanDelay,\n onError,\n onResult,\n active\n } = props\n\n const videoRef = useRef()\n\n useQrReader({\n facingMode,\n scanDelay,\n onResult,\n onError,\n videoRef,\n active\n });\n\n return (\n
\n \n \n
\n );\n};\n\nexport default ZxingQrReader;\n","const inlineStyles = {\n\n modalBody: {\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n padding: '30px',\n color: 'white',\n width: '100%',\n maxWidth: '500px',\n marginLeft: 'auto',\n marginRight: 'auto'\n }\n\n}\n\nexport default inlineStyles\n","import React from \"react\"\nimport { Page } from \"react-onsenui\";\nimport styles from './index.module.css'\nimport inlineStyles from \"./inlineStyles\";\nimport { IconCheck } from \"@tabler/icons-react\";\nimport { useShowValidationResult } from \"./useShowValidationResult\";\n\nconst ValidTicketResult = (props) => {\n\n const {scan, onClickNext} = props\n const {setShowValidationResult} = useShowValidationResult()\n\n return (\n <>\n {scan &&\n \n\n
\n
\n {scan.event_name}\n
\n\n {scan.product_variant_title &&\n
\n {scan.product_variant_title}\n
\n }\n\n
\n \n
\n\n
\n Valid Ticket\n
\n\n
\n {scan.qr_data}\n
\n
\n\n {\n setShowValidationResult(false)\n onClickNext()\n }}\n >\n Next\n \n\n
\n }\n \n )\n}\n\nexport default ValidTicketResult\n","import React from \"react\"\nimport { Page } from \"react-onsenui\";\nimport styles from './index.module.css'\nimport inlineStyles from \"./inlineStyles\";\nimport { IconX } from \"@tabler/icons-react\";\nimport { useShowValidationResult } from \"./useShowValidationResult\";\n\nconst InvalidTicketResult = (props) => {\n\n const {scan, onClickNext} = props\n const {setShowValidationResult} = useShowValidationResult()\n\n return (\n <>\n \n\n
\n\n
\n \n
\n\n
\n Invalid Ticket\n
\n\n
\n {scan.qr_data}\n
\n\n
\n\n {\n setShowValidationResult(false)\n onClickNext()\n }}\n >\n Next\n \n\n
\n \n )\n}\n\nexport default InvalidTicketResult\n","import React from \"react\"\nimport { Page } from \"react-onsenui\";\nimport styles from './index.module.css'\nimport inlineStyles from \"./inlineStyles\";\nimport { IconExclamationMark } from \"@tabler/icons-react\";\nimport { useShowValidationResult } from \"./useShowValidationResult\";\nimport { datetimeStringFromSecondsSinceEpoch } from \"../../../utils/time_helpers\";\n\nconst ScannedTicketResult = (props) => {\n\n const {scan, onClickNext} = props\n const {setShowValidationResult} = useShowValidationResult()\n\n const {prev_scans} = scan\n const firstScan = prev_scans && prev_scans.sort((a, b) => a.created_at - b.created_at)[0]\n\n return (\n <>\n {scan &&\n \n\n
\n
\n {scan.event_name}\n
\n\n {scan.product_variant_title &&\n
\n {scan.product_variant_title}\n
\n }\n\n
\n \n
\n\n
\n Valid Ticket\n
\n\n
\n Already scanned\n {firstScan?.device_name &&\n by {firstScan.device_name}\n }\n
\n\n {firstScan &&\n
\n {datetimeStringFromSecondsSinceEpoch(firstScan.created_at)} \n
\n }\n\n
\n {scan.qr_data}\n
\n
\n\n {\n setShowValidationResult(false)\n onClickNext()\n }}\n >\n Next\n \n\n
\n }\n \n )\n}\n\nexport default ScannedTicketResult\n","import React from \"react\"\nimport { useShowValidationResult } from \"./useShowValidationResult\";\nimport ValidTicketResult from \"./ValidTicketResult\";\nimport InvalidTicketResult from \"./InvalidTicketResult\";\nimport ScannedTicketResult from \"./ScannedTicketResult\";\n\nconst SCAN_VALID = 'scan_valid'\nconst SCANNED_BEFORE = 'scanned_before'\nconst SCAN_INVALID = 'scan_invalid'\n\nconst ValidationResult = (props) => {\n\n const {scan, onClickNext} = props\n\n const {showValidationResult} = useShowValidationResult()\n\n return (\n <>\n {showValidationResult &&\n <>\n {scan.status === SCAN_VALID &&\n \n }\n\n {scan.status === SCANNED_BEFORE &&\n \n }\n\n {scan.status === SCAN_INVALID &&\n \n }\n \n }\n \n )\n}\n\nexport default ValidationResult\n","import API_public from \"./API_public\"\nimport { currentSecondsSinceEpoch } from \"./time_helpers\"\nimport * as Sentry from \"@sentry/react\";\n\nconst postScans = async (qr_data, device_name) => {\n try {\n const response = await API_public.post(`/scans`, { qr_data, device_name })\n return response.data\n } catch (e) {\n Sentry.withScope(scope => {\n scope.setExtra(\"handled\", true)\n Sentry.captureException(e)\n })\n console.log(e)\n return {status: 'scan_invalid'};\n }\n}\n\nconst parseResponseToScan = (result, qr_data, device_name) => {\n const scan = result.scan || {qr_data}\n scan.status = result.status\n scan.prev_scans = result.prev_scans || []\n scan.created_at = scan.created_at || currentSecondsSinceEpoch()\n scan.device_name = scan.device_name || device_name\n return scan\n}\n\nconst validateTicket = async (qr_data, device_name) => {\n const result = await postScans(qr_data, device_name)\n return parseResponseToScan(result, qr_data, device_name)\n}\n\nexport default validateTicket\n","import { useEffect, useState } from \"react\";\n\nconst usePageVisibility = () => {\n\n const [isVisible, setIsVisible] = useState(true)\n\n useEffect(() => {\n const eventHandler = () => {\n if (document.visibilityState === \"visible\") {\n setIsVisible(true)\n } else {\n setIsVisible(false)\n }\n }\n document.addEventListener(\"visibilitychange\", eventHandler)\n\n return () => {\n document.removeEventListener(\"visibilitychange\", eventHandler)\n }\n }, [])\n\n return isVisible\n\n}\n\nexport default usePageVisibility\n","import React, { useState, useRef, useEffect } from \"react\"\nimport {Modal, ProgressBar} from 'react-onsenui';\nimport ZxingQrReader from \"./ZxingQrReader\";\nimport styles from './index.module.css'\nimport { useDeviceNameState } from \"../Common/TabPanel/DeviceName/useDeviceName\";\nimport { IconRefresh } from \"@tabler/icons-react\";\nimport ValidationResult from \"../Common/ValidationResult\";\nimport { useShowValidationResult } from \"../Common/ValidationResult/useShowValidationResult\";\nimport TabPanel from \"../Common/TabPanel\";\nimport { useScansState } from \"../HistoryTabPanel/useScans\";\nimport validateTicket from \"../../utils/validateTicket\";\nimport { useEditingDeviceName } from \"../Common/TabPanel/DeviceName/useDeviceName\";\nimport usePageVisibility from \"../../utils/usePageVisibility\";\n\nconst ScanTabPanel = () => {\n\n const [facingMode, setFacingMode] = useState(\"environment\")\n const monitoring = useRef(true)\n const scans = useScansState()\n const [loading, setLoading] = useState(false)\n const deviceName = useDeviceNameState()\n\n const {setShowValidationResult} = useShowValidationResult()\n\n const [currentScan, setCurrentScan] = useState()\n\n const {editingDeviceName} = useEditingDeviceName()\n\n const [qrReaderActive, setQrReaderActive] = useState(false)\n\n const pageIsVisible = usePageVisibility()\n\n useEffect(() => {\n if (pageIsVisible) {\n setQrReaderActive(true)\n } else {\n setQrReaderActive(false)\n }\n }, [pageIsVisible])\n\n const handleScan = async (data) => {\n if (data) {\n if (monitoring.current) {\n monitoring.current = false\n setLoading(true)\n\n const scan = await validateTicket(data, deviceName.get())\n\n setCurrentScan(scan)\n scans.merge([scan])\n\n\n setLoading(false)\n setShowValidationResult(true)\n }\n }\n }\n\n const handleError = err => {\n console.error(err)\n }\n\n return (\n \n\n
\n {\n await handleScan(result.text)\n }}\n onError={handleError}\n active={qrReaderActive}\n />\n\n
\n {\n setFacingMode(facingMode == \"environment\" ? \"user\" : \"environment\")\n }\n }>\n \n \n
\n
\n\n\n \n Validating ticket with Starstream's servers...\n \n \n\n monitoring.current = true}\n />\n\n
\n )\n}\n\nexport default ScanTabPanel\n","import React, { useState } from \"react\"\nimport {Modal, ProgressBar, Input, Button, Card} from 'react-onsenui';\nimport styles from './index.module.css'\nimport { useDeviceNameState } from \"../Common/TabPanel/DeviceName/useDeviceName\";\nimport ValidationResult from \"../Common/ValidationResult\";\nimport { useShowValidationResult } from \"../Common/ValidationResult/useShowValidationResult\";\nimport TabPanel from \"../Common/TabPanel\";\nimport { useScansState } from \"../HistoryTabPanel/useScans\";\nimport validateTicket from \"../../utils/validateTicket\";\n\nconst ManualEnterTabPanel = () => {\n\n const scans = useScansState()\n const [loading, setLoading] = useState(false)\n const [code, setCode] = useState(null)\n const deviceName = useDeviceNameState()\n\n const {setShowValidationResult} = useShowValidationResult()\n\n const [currentScan, setCurrentScan] = useState()\n\n const handleSubmit = async (data) => {\n if (data) {\n if (!loading) {\n setLoading(true)\n\n const scan = await validateTicket(data, deviceName.get())\n\n setCurrentScan(scan)\n scans.merge([scan])\n\n setLoading(false)\n setShowValidationResult(true)\n }\n } else {\n setCode('')\n }\n }\n\n return (\n \n\n \n\n
\n

The code is located under the QR code.

\n

The format is XXX-YYY-ZZZZZZ.

\n
\n\n \n {code === '' &&\n
Code can't be blank
\n }\n setCode(event.target.value?.toUpperCase())}\n class={styles.field}\n modifier='large'\n placeholder='Code'\n />\n
\n\n handleSubmit(code)}\n >\n Validate\n \n\n\n \n Validating ticket with Starstream's servers...\n \n \n\n setCode(null)}\n />\n
\n )\n}\n\nexport default ManualEnterTabPanel\n","import React from \"react\"\nimport { Page } from \"react-onsenui\";\nimport PageHeader from \"./PageHeader\";\nimport TabBar from \"./TabBar\";\nimport { useCurrentTab, TabName } from \"./TabBar/useCurrentTab\";\nimport HistoryTabPanel from \"./HistoryTabPanel\";\nimport ScanTabPanel from \"./ScanTabPanel\";\nimport ManualEnterTabPanel from \"./ManualEnterTabPanel\";\n\nconst {HistoryTab, ScanTab, ManualEnterTab} = TabName\n\nconst QrPageV3 = () => {\n\n const {currentTab} = useCurrentTab()\n\n return (\n <>\n \n\n \n\n {currentTab === HistoryTab && (\n \n )}\n\n {currentTab === ScanTab && (\n \n )}\n\n {currentTab === ManualEnterTab && (\n \n )}\n\n \n\n \n \n )\n}\n\nexport default QrPageV3\n","import React from \"react\"\nimport QrPageV2 from \"./QrPageV2\";\nimport QrPageV3 from \"./QrPageV3\";\n\nconst AppQr = ({version}) => {\n return (\n <>\n {version === 2 && }\n {version === 3 && }\n \n );\n}\n\nexport default AppQr","import ReactDOM from \"react-dom\";\nimport React from \"react\";\nimport AppQr from \"../qr_react_src/AppQr\";\n\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n const mountPoint = document.getElementById(\"react-qr\")\n const appVersion = parseInt(mountPoint.dataset.version)\n\n ReactDOM.render(\n ,\n mountPoint\n )\n})"],"sourceRoot":""}