@ozdao/prometheus-framework 0.2.243 → 0.2.244

Sign up to get free protection for your applications and to get access to all the features.
@@ -14,6 +14,7 @@ const _hoisted_2 = {
14
14
  class: "zoom-ratio-wrapper"
15
15
  };
16
16
  const _hoisted_3 = ["min", "max"];
17
+ const SCAN_TIMEOUT = 5e3;
17
18
  const _sfc_main = {
18
19
  __name: "ButtonCheck",
19
20
  emits: ["qrcodecheck"],
@@ -48,7 +49,6 @@ const _sfc_main = {
48
49
  }
49
50
  (_a = document.querySelector("body")) == null ? void 0 : _a.classList.add("barcode-scanner-active");
50
51
  (_b = document.querySelector("html")) == null ? void 0 : _b.classList.add("barcode-scanner-active-html");
51
- index.BarcodeScanner.hideBackground();
52
52
  isScanning.value = true;
53
53
  await index.BarcodeScanner.addListener("barcodeScanned", async (result) => {
54
54
  if (!isProcessing.value) {
@@ -89,10 +89,12 @@ const _sfc_main = {
89
89
  const response = await tickets.actions.update({ _id: barcode.rawValue, status: "used", check: true });
90
90
  alert("Ticket checked. And it's all right!");
91
91
  emits("qrcodecheck");
92
+ setTimeout(() => {
93
+ isProcessing.value = false;
94
+ }, SCAN_TIMEOUT);
92
95
  } catch (e) {
93
96
  console.error(e);
94
97
  alert(`Ticket is not found, already used or deactivated!`);
95
- } finally {
96
98
  isProcessing.value = false;
97
99
  }
98
100
  }
@@ -126,7 +128,7 @@ const _sfc_main = {
126
128
  ])) : vue.createCommentVNode("", true),
127
129
  vue.createVNode(Button.default, {
128
130
  onClick: stopScan,
129
- class: "stop-scan-button"
131
+ class: "bg-white t-black stop-scan-button"
130
132
  }, {
131
133
  default: vue.withCtx(() => _cache[1] || (_cache[1] = [
132
134
  vue.createTextVNode("Stop Scan")
@@ -136,7 +138,7 @@ const _sfc_main = {
136
138
  isTorchAvailable.value ? (vue.openBlock(), vue.createBlock(Button.default, {
137
139
  key: 1,
138
140
  onClick: toggleTorch,
139
- class: "torch-button"
141
+ class: "bg-white torch-button"
140
142
  }, {
141
143
  default: vue.withCtx(() => _cache[2] || (_cache[2] = [
142
144
  vue.createTextVNode(" Toggle Torch ")
@@ -1 +1 @@
1
- {"version":3,"file":"ButtonCheck.vue.cjs","sources":["../../../../../../../src/modules/events/components/elements/ButtonCheck.vue"],"sourcesContent":["<template>\n <div>\n <Button @click=\"startScan\" class=\"bg-main button-small radius-extra button\">\n Check Tickets\n </Button>\n <div v-if=\"isScanning\" class=\"barcode-scanner-modal\">\n <div class=\"square\"></div>\n <div class=\"zoom-ratio-wrapper\" v-if=\"minZoomRatio !== undefined && maxZoomRatio !== undefined\">\n <input type=\"range\" :min=\"minZoomRatio\" :max=\"maxZoomRatio\" @input=\"setZoomRatio\" />\n </div>\n <Button @click=\"stopScan\" class=\"stop-scan-button\">Stop Scan</Button>\n <Button v-if=\"isTorchAvailable\" @click=\"toggleTorch\" class=\"torch-button\">\n Toggle Torch\n </Button>\n </div>\n </div>\n</template>\n\n<script setup>\nimport { ref, onMounted, onUnmounted } from 'vue'\nimport { BarcodeScanner } from '@capacitor-mlkit/barcode-scanning'\nimport Button from '@pf/src/components/Button/Button.vue'\nimport * as tickets from '@pf/src/modules/events/store/tickets'\n\nconst emits = defineEmits(['qrcodecheck'])\nconst error = ref('')\nconst isScanning = ref(false)\nconst isTorchAvailable = ref(false)\nconst minZoomRatio = ref(undefined)\nconst maxZoomRatio = ref(undefined)\nconst isProcessing = ref(false)\n\nonMounted(async () => {\n const { supported } = await BarcodeScanner.isSupported()\n if (!supported) {\n error.value = 'Barcode scanning is not supported on this device'\n }\n const { available } = await BarcodeScanner.isTorchAvailable()\n isTorchAvailable.value = available\n})\n\nonUnmounted(async () => {\n await stopScan()\n})\n\nasync function startScan() {\n try {\n const { camera } = await BarcodeScanner.checkPermissions()\n if (camera !== 'granted') {\n const { camera: newStatus } = await BarcodeScanner.requestPermissions()\n if (newStatus !== 'granted') {\n throw new Error('Camera permission is required to scan barcodes')\n }\n }\n document.querySelector('body')?.classList.add('barcode-scanner-active')\n document.querySelector('html')?.classList.add('barcode-scanner-active-html')\n BarcodeScanner.hideBackground();\n isScanning.value = true\n await BarcodeScanner.addListener('barcodeScanned', async (result) => {\n if (!isProcessing.value) {\n await processBarcode(result.barcode)\n }\n })\n await BarcodeScanner.startScan()\n const { zoomRatio: min } = await BarcodeScanner.getMinZoomRatio()\n const { zoomRatio: max } = await BarcodeScanner.getMaxZoomRatio()\n minZoomRatio.value = min\n maxZoomRatio.value = max\n } catch (e) {\n error.value = e.message\n alert(`Error: ${error.value}`)\n }\n}\n\nasync function stopScan() {\n try {\n document.querySelector('body')?.classList.remove('barcode-scanner-active')\n document.querySelector('html')?.classList.remove('barcode-scanner-active-html')\n isScanning.value = false\n await BarcodeScanner.stopScan()\n await BarcodeScanner.removeAllListeners()\n } catch (e) {\n error.value = e.message\n alert(`Error stopping scan: ${error.value}`)\n }\n}\n\nasync function processBarcode(barcode) {\n if (isProcessing.value) return\n isProcessing.value = true\n try {\n if (!barcode || !barcode.rawValue) {\n throw new Error('Invalid barcode data')\n }\n console.log('barcode is', barcode)\n const response = await tickets.actions.update({ _id: barcode.rawValue, status: 'used', check: true })\n alert(\"Ticket checked. And it's all right!\")\n emits('qrcodecheck')\n } catch (e) {\n console.error(e)\n alert(`Ticket is not found, already used or deactivated!`)\n } finally {\n isProcessing.value = false\n }\n}\n\nasync function setZoomRatio(event) {\n const zoomRatio = parseFloat(event.target.value)\n await BarcodeScanner.setZoomRatio({ zoomRatio })\n}\n\nasync function toggleTorch() {\n await BarcodeScanner.toggleTorch()\n}\n</script>\n\n<style>\n.barcode-scanner-modal {\n visibility: visible;\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: rgba(0, 0, 0, 0.8);\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n}\n\n.square {\n width: 200px;\n height: 200px;\n border: 2px solid white;\n border-radius: 10px;\n}\n\n.zoom-ratio-wrapper {\n width: 80%;\n margin-top: 20px;\n}\n\n.stop-scan-button,\n.torch-button {\n margin-top: 20px;\n}\n\n/* Existing styles */\n/*body.barcode-scanner-active {\n visibility: hidden !important;\n background: transparent !important;\n --background: transparent;\n --ion-background-color: transparent;\n opacity: 0; \n}*/\n\n/*html.barcode-scanner-active-html {\n background: transparent !important;\n}*/\n</style>\n"],"names":["ref","onMounted","BarcodeScanner","onUnmounted","tickets.actions"],"mappings":";;;;;;;;;;;;;;;;;;;;AAwBA,UAAM,QAAQ;AACd,UAAM,QAAQA,IAAG,IAAC,EAAE;AACpB,UAAM,aAAaA,IAAG,IAAC,KAAK;AAC5B,UAAM,mBAAmBA,IAAG,IAAC,KAAK;AAClC,UAAM,eAAeA,IAAG,IAAC,MAAS;AAClC,UAAM,eAAeA,IAAG,IAAC,MAAS;AAClC,UAAM,eAAeA,IAAG,IAAC,KAAK;AAE9BC,QAAAA,UAAU,YAAY;AACpB,YAAM,EAAE,UAAS,IAAK,MAAMC,MAAAA,eAAe,YAAa;AACxD,UAAI,CAAC,WAAW;AACd,cAAM,QAAQ;AAAA,MACf;AACD,YAAM,EAAE,UAAS,IAAK,MAAMA,MAAAA,eAAe,iBAAkB;AAC7D,uBAAiB,QAAQ;AAAA,IAC3B,CAAC;AAEDC,QAAAA,YAAY,YAAY;AACtB,YAAM,SAAU;AAAA,IAClB,CAAC;AAED,mBAAe,YAAY;;AACzB,UAAI;AACF,cAAM,EAAE,OAAM,IAAK,MAAMD,MAAAA,eAAe,iBAAkB;AAC1D,YAAI,WAAW,WAAW;AACxB,gBAAM,EAAE,QAAQ,UAAW,IAAG,MAAMA,MAAAA,eAAe,mBAAoB;AACvE,cAAI,cAAc,WAAW;AAC3B,kBAAM,IAAI,MAAM,gDAAgD;AAAA,UACjE;AAAA,QACF;AACD,uBAAS,cAAc,MAAM,MAA7B,mBAAgC,UAAU,IAAI;AAC9C,uBAAS,cAAc,MAAM,MAA7B,mBAAgC,UAAU,IAAI;AAC9CA,cAAc,eAAC,eAAc;AAC7B,mBAAW,QAAQ;AACnB,cAAMA,qBAAe,YAAY,kBAAkB,OAAO,WAAW;AACnE,cAAI,CAAC,aAAa,OAAO;AACvB,kBAAM,eAAe,OAAO,OAAO;AAAA,UACpC;AAAA,QACP,CAAK;AACD,cAAMA,MAAAA,eAAe,UAAW;AAChC,cAAM,EAAE,WAAW,IAAK,IAAG,MAAMA,MAAAA,eAAe,gBAAiB;AACjE,cAAM,EAAE,WAAW,IAAK,IAAG,MAAMA,MAAAA,eAAe,gBAAiB;AACjE,qBAAa,QAAQ;AACrB,qBAAa,QAAQ;AAAA,MACtB,SAAQ,GAAG;AACV,cAAM,QAAQ,EAAE;AAChB,cAAM,UAAU,MAAM,KAAK,EAAE;AAAA,MAC9B;AAAA,IACH;AAEA,mBAAe,WAAW;;AACxB,UAAI;AACF,uBAAS,cAAc,MAAM,MAA7B,mBAAgC,UAAU,OAAO;AACjD,uBAAS,cAAc,MAAM,MAA7B,mBAAgC,UAAU,OAAO;AACjD,mBAAW,QAAQ;AACnB,cAAMA,MAAAA,eAAe,SAAU;AAC/B,cAAMA,MAAAA,eAAe,mBAAoB;AAAA,MAC1C,SAAQ,GAAG;AACV,cAAM,QAAQ,EAAE;AAChB,cAAM,wBAAwB,MAAM,KAAK,EAAE;AAAA,MAC5C;AAAA,IACH;AAEA,mBAAe,eAAe,SAAS;AACrC,UAAI,aAAa,MAAO;AACxB,mBAAa,QAAQ;AACrB,UAAI;AACF,YAAI,CAAC,WAAW,CAAC,QAAQ,UAAU;AACjC,gBAAM,IAAI,MAAM,sBAAsB;AAAA,QACvC;AACD,gBAAQ,IAAI,cAAc,OAAO;AACjC,cAAM,WAAW,MAAME,gBAAgB,OAAO,EAAE,KAAK,QAAQ,UAAU,QAAQ,QAAQ,OAAO,KAAI,CAAE;AACpG,cAAM,qCAAqC;AAC3C,cAAM,aAAa;AAAA,MACpB,SAAQ,GAAG;AACV,gBAAQ,MAAM,CAAC;AACf,cAAM,mDAAmD;AAAA,MAC7D,UAAY;AACR,qBAAa,QAAQ;AAAA,MACtB;AAAA,IACH;AAEA,mBAAe,aAAa,OAAO;AACjC,YAAM,YAAY,WAAW,MAAM,OAAO,KAAK;AAC/C,YAAMF,qBAAe,aAAa,EAAE,WAAW;AAAA,IACjD;AAEA,mBAAe,cAAc;AAC3B,YAAMA,MAAAA,eAAe,YAAa;AAAA,IACpC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"ButtonCheck.vue.cjs","sources":["../../../../../../../src/modules/events/components/elements/ButtonCheck.vue"],"sourcesContent":["<template>\n <div>\n <Button @click=\"startScan\" class=\"bg-main button-small radius-extra button\">\n Check Tickets\n </Button>\n <div v-if=\"isScanning\" class=\"barcode-scanner-modal\">\n <div class=\"square\"></div>\n <div class=\"zoom-ratio-wrapper\" v-if=\"minZoomRatio !== undefined && maxZoomRatio !== undefined\">\n <input type=\"range\" :min=\"minZoomRatio\" :max=\"maxZoomRatio\" @input=\"setZoomRatio\" />\n </div>\n <Button @click=\"stopScan\" class=\"bg-white t-black stop-scan-button\">Stop Scan</Button>\n <Button v-if=\"isTorchAvailable\" @click=\"toggleTorch\" class=\"bg-white torch-button\">\n Toggle Torch\n </Button>\n </div>\n </div>\n</template>\n\n<script setup>\nimport { ref, onMounted, onUnmounted } from 'vue'\nimport { BarcodeScanner } from '@capacitor-mlkit/barcode-scanning'\nimport Button from '@pf/src/components/Button/Button.vue'\nimport * as tickets from '@pf/src/modules/events/store/tickets'\n\nconst emits = defineEmits(['qrcodecheck'])\nconst error = ref('')\nconst isScanning = ref(false)\nconst isTorchAvailable = ref(false)\nconst minZoomRatio = ref(undefined)\nconst maxZoomRatio = ref(undefined)\nconst isProcessing = ref(false)\n\nonMounted(async () => {\n const { supported } = await BarcodeScanner.isSupported()\n if (!supported) {\n error.value = 'Barcode scanning is not supported on this device'\n }\n const { available } = await BarcodeScanner.isTorchAvailable()\n isTorchAvailable.value = available\n})\n\nonUnmounted(async () => {\n await stopScan()\n})\n\nconst SCAN_TIMEOUT = 5000 // 5 секунд (можно изменить по вашему усмотрению)\n\nasync function startScan() {\n try {\n const { camera } = await BarcodeScanner.checkPermissions()\n if (camera !== 'granted') {\n const { camera: newStatus } = await BarcodeScanner.requestPermissions()\n if (newStatus !== 'granted') {\n throw new Error('Camera permission is required to scan barcodes')\n }\n }\n document.querySelector('body')?.classList.add('barcode-scanner-active')\n document.querySelector('html')?.classList.add('barcode-scanner-active-html')\n isScanning.value = true\n await BarcodeScanner.addListener('barcodeScanned', async (result) => {\n if (!isProcessing.value) {\n await processBarcode(result.barcode)\n }\n })\n await BarcodeScanner.startScan()\n const { zoomRatio: min } = await BarcodeScanner.getMinZoomRatio()\n const { zoomRatio: max } = await BarcodeScanner.getMaxZoomRatio()\n minZoomRatio.value = min\n maxZoomRatio.value = max\n } catch (e) {\n error.value = e.message\n alert(`Error: ${error.value}`)\n }\n}\n\nasync function stopScan() {\n try {\n document.querySelector('body')?.classList.remove('barcode-scanner-active')\n document.querySelector('html')?.classList.remove('barcode-scanner-active-html')\n isScanning.value = false\n await BarcodeScanner.stopScan()\n await BarcodeScanner.removeAllListeners()\n } catch (e) {\n error.value = e.message\n alert(`Error stopping scan: ${error.value}`)\n }\n}\n\nasync function processBarcode(barcode) {\n if (isProcessing.value) return\n isProcessing.value = true\n try {\n if (!barcode || !barcode.rawValue) {\n throw new Error('Invalid barcode data')\n }\n console.log('barcode is', barcode)\n\n const response = await tickets.actions.update({ _id: barcode.rawValue, status: 'used', check: true })\n alert(\"Ticket checked. And it's all right!\")\n emits('qrcodecheck')\n\n // Устанавливаем таймаут перед следующим сканированием\n setTimeout(() => {\n isProcessing.value = false\n }, SCAN_TIMEOUT)\n\n } catch (e) {\n console.error(e)\n alert(`Ticket is not found, already used or deactivated!`)\n // Сбрасываем флаг isProcessing в случае ошибки, чтобы можно было попробовать снова\n isProcessing.value = false\n }\n}\n\nasync function setZoomRatio(event) {\n const zoomRatio = parseFloat(event.target.value)\n await BarcodeScanner.setZoomRatio({ zoomRatio })\n}\n\nasync function toggleTorch() {\n await BarcodeScanner.toggleTorch()\n}\n</script>\n\n<style>\n.barcode-scanner-modal {\n visibility: visible;\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: rgba(0, 0, 0, 0.8);\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n}\n\n.square {\n width: 200px;\n height: 200px;\n border: 2px solid white;\n border-radius: 10px;\n}\n\n.zoom-ratio-wrapper {\n width: 80%;\n margin-top: 20px;\n}\n\n.stop-scan-button,\n.torch-button {\n margin-top: 20px;\n}\n\n/* Existing styles */\nbody.barcode-scanner-active {\n visibility: hidden !important;\n background: transparent !important;\n --background: transparent;\n --ion-background-color: transparent;\n}\n\nhtml.barcode-scanner-active-html {\n background: transparent !important;\n}\n</style>\n"],"names":["ref","onMounted","BarcodeScanner","onUnmounted","tickets.actions"],"mappings":"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"}
@@ -12,6 +12,7 @@ const _hoisted_2 = {
12
12
  class: "zoom-ratio-wrapper"
13
13
  };
14
14
  const _hoisted_3 = ["min", "max"];
15
+ const SCAN_TIMEOUT = 5e3;
15
16
  const _sfc_main = {
16
17
  __name: "ButtonCheck",
17
18
  emits: ["qrcodecheck"],
@@ -46,7 +47,6 @@ const _sfc_main = {
46
47
  }
47
48
  (_a = document.querySelector("body")) == null ? void 0 : _a.classList.add("barcode-scanner-active");
48
49
  (_b = document.querySelector("html")) == null ? void 0 : _b.classList.add("barcode-scanner-active-html");
49
- BarcodeScanner.hideBackground();
50
50
  isScanning.value = true;
51
51
  await BarcodeScanner.addListener("barcodeScanned", async (result) => {
52
52
  if (!isProcessing.value) {
@@ -87,10 +87,12 @@ const _sfc_main = {
87
87
  const response = await actions.update({ _id: barcode.rawValue, status: "used", check: true });
88
88
  alert("Ticket checked. And it's all right!");
89
89
  emits("qrcodecheck");
90
+ setTimeout(() => {
91
+ isProcessing.value = false;
92
+ }, SCAN_TIMEOUT);
90
93
  } catch (e) {
91
94
  console.error(e);
92
95
  alert(`Ticket is not found, already used or deactivated!`);
93
- } finally {
94
96
  isProcessing.value = false;
95
97
  }
96
98
  }
@@ -124,7 +126,7 @@ const _sfc_main = {
124
126
  ])) : createCommentVNode("", true),
125
127
  createVNode(_sfc_main$1, {
126
128
  onClick: stopScan,
127
- class: "stop-scan-button"
129
+ class: "bg-white t-black stop-scan-button"
128
130
  }, {
129
131
  default: withCtx(() => _cache[1] || (_cache[1] = [
130
132
  createTextVNode("Stop Scan")
@@ -134,7 +136,7 @@ const _sfc_main = {
134
136
  isTorchAvailable.value ? (openBlock(), createBlock(_sfc_main$1, {
135
137
  key: 1,
136
138
  onClick: toggleTorch,
137
- class: "torch-button"
139
+ class: "bg-white torch-button"
138
140
  }, {
139
141
  default: withCtx(() => _cache[2] || (_cache[2] = [
140
142
  createTextVNode(" Toggle Torch ")
@@ -1 +1 @@
1
- {"version":3,"file":"ButtonCheck.vue.js","sources":["../../../../../../../src/modules/events/components/elements/ButtonCheck.vue"],"sourcesContent":["<template>\n <div>\n <Button @click=\"startScan\" class=\"bg-main button-small radius-extra button\">\n Check Tickets\n </Button>\n <div v-if=\"isScanning\" class=\"barcode-scanner-modal\">\n <div class=\"square\"></div>\n <div class=\"zoom-ratio-wrapper\" v-if=\"minZoomRatio !== undefined && maxZoomRatio !== undefined\">\n <input type=\"range\" :min=\"minZoomRatio\" :max=\"maxZoomRatio\" @input=\"setZoomRatio\" />\n </div>\n <Button @click=\"stopScan\" class=\"stop-scan-button\">Stop Scan</Button>\n <Button v-if=\"isTorchAvailable\" @click=\"toggleTorch\" class=\"torch-button\">\n Toggle Torch\n </Button>\n </div>\n </div>\n</template>\n\n<script setup>\nimport { ref, onMounted, onUnmounted } from 'vue'\nimport { BarcodeScanner } from '@capacitor-mlkit/barcode-scanning'\nimport Button from '@pf/src/components/Button/Button.vue'\nimport * as tickets from '@pf/src/modules/events/store/tickets'\n\nconst emits = defineEmits(['qrcodecheck'])\nconst error = ref('')\nconst isScanning = ref(false)\nconst isTorchAvailable = ref(false)\nconst minZoomRatio = ref(undefined)\nconst maxZoomRatio = ref(undefined)\nconst isProcessing = ref(false)\n\nonMounted(async () => {\n const { supported } = await BarcodeScanner.isSupported()\n if (!supported) {\n error.value = 'Barcode scanning is not supported on this device'\n }\n const { available } = await BarcodeScanner.isTorchAvailable()\n isTorchAvailable.value = available\n})\n\nonUnmounted(async () => {\n await stopScan()\n})\n\nasync function startScan() {\n try {\n const { camera } = await BarcodeScanner.checkPermissions()\n if (camera !== 'granted') {\n const { camera: newStatus } = await BarcodeScanner.requestPermissions()\n if (newStatus !== 'granted') {\n throw new Error('Camera permission is required to scan barcodes')\n }\n }\n document.querySelector('body')?.classList.add('barcode-scanner-active')\n document.querySelector('html')?.classList.add('barcode-scanner-active-html')\n BarcodeScanner.hideBackground();\n isScanning.value = true\n await BarcodeScanner.addListener('barcodeScanned', async (result) => {\n if (!isProcessing.value) {\n await processBarcode(result.barcode)\n }\n })\n await BarcodeScanner.startScan()\n const { zoomRatio: min } = await BarcodeScanner.getMinZoomRatio()\n const { zoomRatio: max } = await BarcodeScanner.getMaxZoomRatio()\n minZoomRatio.value = min\n maxZoomRatio.value = max\n } catch (e) {\n error.value = e.message\n alert(`Error: ${error.value}`)\n }\n}\n\nasync function stopScan() {\n try {\n document.querySelector('body')?.classList.remove('barcode-scanner-active')\n document.querySelector('html')?.classList.remove('barcode-scanner-active-html')\n isScanning.value = false\n await BarcodeScanner.stopScan()\n await BarcodeScanner.removeAllListeners()\n } catch (e) {\n error.value = e.message\n alert(`Error stopping scan: ${error.value}`)\n }\n}\n\nasync function processBarcode(barcode) {\n if (isProcessing.value) return\n isProcessing.value = true\n try {\n if (!barcode || !barcode.rawValue) {\n throw new Error('Invalid barcode data')\n }\n console.log('barcode is', barcode)\n const response = await tickets.actions.update({ _id: barcode.rawValue, status: 'used', check: true })\n alert(\"Ticket checked. And it's all right!\")\n emits('qrcodecheck')\n } catch (e) {\n console.error(e)\n alert(`Ticket is not found, already used or deactivated!`)\n } finally {\n isProcessing.value = false\n }\n}\n\nasync function setZoomRatio(event) {\n const zoomRatio = parseFloat(event.target.value)\n await BarcodeScanner.setZoomRatio({ zoomRatio })\n}\n\nasync function toggleTorch() {\n await BarcodeScanner.toggleTorch()\n}\n</script>\n\n<style>\n.barcode-scanner-modal {\n visibility: visible;\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: rgba(0, 0, 0, 0.8);\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n}\n\n.square {\n width: 200px;\n height: 200px;\n border: 2px solid white;\n border-radius: 10px;\n}\n\n.zoom-ratio-wrapper {\n width: 80%;\n margin-top: 20px;\n}\n\n.stop-scan-button,\n.torch-button {\n margin-top: 20px;\n}\n\n/* Existing styles */\n/*body.barcode-scanner-active {\n visibility: hidden !important;\n background: transparent !important;\n --background: transparent;\n --ion-background-color: transparent;\n opacity: 0; \n}*/\n\n/*html.barcode-scanner-active-html {\n background: transparent !important;\n}*/\n</style>\n"],"names":["tickets.actions"],"mappings":";;;;;;;;;;;;;;;;;;AAwBA,UAAM,QAAQ;AACd,UAAM,QAAQ,IAAI,EAAE;AACpB,UAAM,aAAa,IAAI,KAAK;AAC5B,UAAM,mBAAmB,IAAI,KAAK;AAClC,UAAM,eAAe,IAAI,MAAS;AAClC,UAAM,eAAe,IAAI,MAAS;AAClC,UAAM,eAAe,IAAI,KAAK;AAE9B,cAAU,YAAY;AACpB,YAAM,EAAE,UAAS,IAAK,MAAM,eAAe,YAAa;AACxD,UAAI,CAAC,WAAW;AACd,cAAM,QAAQ;AAAA,MACf;AACD,YAAM,EAAE,UAAS,IAAK,MAAM,eAAe,iBAAkB;AAC7D,uBAAiB,QAAQ;AAAA,IAC3B,CAAC;AAED,gBAAY,YAAY;AACtB,YAAM,SAAU;AAAA,IAClB,CAAC;AAED,mBAAe,YAAY;;AACzB,UAAI;AACF,cAAM,EAAE,OAAM,IAAK,MAAM,eAAe,iBAAkB;AAC1D,YAAI,WAAW,WAAW;AACxB,gBAAM,EAAE,QAAQ,UAAW,IAAG,MAAM,eAAe,mBAAoB;AACvE,cAAI,cAAc,WAAW;AAC3B,kBAAM,IAAI,MAAM,gDAAgD;AAAA,UACjE;AAAA,QACF;AACD,uBAAS,cAAc,MAAM,MAA7B,mBAAgC,UAAU,IAAI;AAC9C,uBAAS,cAAc,MAAM,MAA7B,mBAAgC,UAAU,IAAI;AAC9C,uBAAe,eAAc;AAC7B,mBAAW,QAAQ;AACnB,cAAM,eAAe,YAAY,kBAAkB,OAAO,WAAW;AACnE,cAAI,CAAC,aAAa,OAAO;AACvB,kBAAM,eAAe,OAAO,OAAO;AAAA,UACpC;AAAA,QACP,CAAK;AACD,cAAM,eAAe,UAAW;AAChC,cAAM,EAAE,WAAW,IAAK,IAAG,MAAM,eAAe,gBAAiB;AACjE,cAAM,EAAE,WAAW,IAAK,IAAG,MAAM,eAAe,gBAAiB;AACjE,qBAAa,QAAQ;AACrB,qBAAa,QAAQ;AAAA,MACtB,SAAQ,GAAG;AACV,cAAM,QAAQ,EAAE;AAChB,cAAM,UAAU,MAAM,KAAK,EAAE;AAAA,MAC9B;AAAA,IACH;AAEA,mBAAe,WAAW;;AACxB,UAAI;AACF,uBAAS,cAAc,MAAM,MAA7B,mBAAgC,UAAU,OAAO;AACjD,uBAAS,cAAc,MAAM,MAA7B,mBAAgC,UAAU,OAAO;AACjD,mBAAW,QAAQ;AACnB,cAAM,eAAe,SAAU;AAC/B,cAAM,eAAe,mBAAoB;AAAA,MAC1C,SAAQ,GAAG;AACV,cAAM,QAAQ,EAAE;AAChB,cAAM,wBAAwB,MAAM,KAAK,EAAE;AAAA,MAC5C;AAAA,IACH;AAEA,mBAAe,eAAe,SAAS;AACrC,UAAI,aAAa,MAAO;AACxB,mBAAa,QAAQ;AACrB,UAAI;AACF,YAAI,CAAC,WAAW,CAAC,QAAQ,UAAU;AACjC,gBAAM,IAAI,MAAM,sBAAsB;AAAA,QACvC;AACD,gBAAQ,IAAI,cAAc,OAAO;AACjC,cAAM,WAAW,MAAMA,QAAgB,OAAO,EAAE,KAAK,QAAQ,UAAU,QAAQ,QAAQ,OAAO,KAAI,CAAE;AACpG,cAAM,qCAAqC;AAC3C,cAAM,aAAa;AAAA,MACpB,SAAQ,GAAG;AACV,gBAAQ,MAAM,CAAC;AACf,cAAM,mDAAmD;AAAA,MAC7D,UAAY;AACR,qBAAa,QAAQ;AAAA,MACtB;AAAA,IACH;AAEA,mBAAe,aAAa,OAAO;AACjC,YAAM,YAAY,WAAW,MAAM,OAAO,KAAK;AAC/C,YAAM,eAAe,aAAa,EAAE,WAAW;AAAA,IACjD;AAEA,mBAAe,cAAc;AAC3B,YAAM,eAAe,YAAa;AAAA,IACpC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"ButtonCheck.vue.js","sources":["../../../../../../../src/modules/events/components/elements/ButtonCheck.vue"],"sourcesContent":["<template>\n <div>\n <Button @click=\"startScan\" class=\"bg-main button-small radius-extra button\">\n Check Tickets\n </Button>\n <div v-if=\"isScanning\" class=\"barcode-scanner-modal\">\n <div class=\"square\"></div>\n <div class=\"zoom-ratio-wrapper\" v-if=\"minZoomRatio !== undefined && maxZoomRatio !== undefined\">\n <input type=\"range\" :min=\"minZoomRatio\" :max=\"maxZoomRatio\" @input=\"setZoomRatio\" />\n </div>\n <Button @click=\"stopScan\" class=\"bg-white t-black stop-scan-button\">Stop Scan</Button>\n <Button v-if=\"isTorchAvailable\" @click=\"toggleTorch\" class=\"bg-white torch-button\">\n Toggle Torch\n </Button>\n </div>\n </div>\n</template>\n\n<script setup>\nimport { ref, onMounted, onUnmounted } from 'vue'\nimport { BarcodeScanner } from '@capacitor-mlkit/barcode-scanning'\nimport Button from '@pf/src/components/Button/Button.vue'\nimport * as tickets from '@pf/src/modules/events/store/tickets'\n\nconst emits = defineEmits(['qrcodecheck'])\nconst error = ref('')\nconst isScanning = ref(false)\nconst isTorchAvailable = ref(false)\nconst minZoomRatio = ref(undefined)\nconst maxZoomRatio = ref(undefined)\nconst isProcessing = ref(false)\n\nonMounted(async () => {\n const { supported } = await BarcodeScanner.isSupported()\n if (!supported) {\n error.value = 'Barcode scanning is not supported on this device'\n }\n const { available } = await BarcodeScanner.isTorchAvailable()\n isTorchAvailable.value = available\n})\n\nonUnmounted(async () => {\n await stopScan()\n})\n\nconst SCAN_TIMEOUT = 5000 // 5 секунд (можно изменить по вашему усмотрению)\n\nasync function startScan() {\n try {\n const { camera } = await BarcodeScanner.checkPermissions()\n if (camera !== 'granted') {\n const { camera: newStatus } = await BarcodeScanner.requestPermissions()\n if (newStatus !== 'granted') {\n throw new Error('Camera permission is required to scan barcodes')\n }\n }\n document.querySelector('body')?.classList.add('barcode-scanner-active')\n document.querySelector('html')?.classList.add('barcode-scanner-active-html')\n isScanning.value = true\n await BarcodeScanner.addListener('barcodeScanned', async (result) => {\n if (!isProcessing.value) {\n await processBarcode(result.barcode)\n }\n })\n await BarcodeScanner.startScan()\n const { zoomRatio: min } = await BarcodeScanner.getMinZoomRatio()\n const { zoomRatio: max } = await BarcodeScanner.getMaxZoomRatio()\n minZoomRatio.value = min\n maxZoomRatio.value = max\n } catch (e) {\n error.value = e.message\n alert(`Error: ${error.value}`)\n }\n}\n\nasync function stopScan() {\n try {\n document.querySelector('body')?.classList.remove('barcode-scanner-active')\n document.querySelector('html')?.classList.remove('barcode-scanner-active-html')\n isScanning.value = false\n await BarcodeScanner.stopScan()\n await BarcodeScanner.removeAllListeners()\n } catch (e) {\n error.value = e.message\n alert(`Error stopping scan: ${error.value}`)\n }\n}\n\nasync function processBarcode(barcode) {\n if (isProcessing.value) return\n isProcessing.value = true\n try {\n if (!barcode || !barcode.rawValue) {\n throw new Error('Invalid barcode data')\n }\n console.log('barcode is', barcode)\n\n const response = await tickets.actions.update({ _id: barcode.rawValue, status: 'used', check: true })\n alert(\"Ticket checked. And it's all right!\")\n emits('qrcodecheck')\n\n // Устанавливаем таймаут перед следующим сканированием\n setTimeout(() => {\n isProcessing.value = false\n }, SCAN_TIMEOUT)\n\n } catch (e) {\n console.error(e)\n alert(`Ticket is not found, already used or deactivated!`)\n // Сбрасываем флаг isProcessing в случае ошибки, чтобы можно было попробовать снова\n isProcessing.value = false\n }\n}\n\nasync function setZoomRatio(event) {\n const zoomRatio = parseFloat(event.target.value)\n await BarcodeScanner.setZoomRatio({ zoomRatio })\n}\n\nasync function toggleTorch() {\n await BarcodeScanner.toggleTorch()\n}\n</script>\n\n<style>\n.barcode-scanner-modal {\n visibility: visible;\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: rgba(0, 0, 0, 0.8);\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n}\n\n.square {\n width: 200px;\n height: 200px;\n border: 2px solid white;\n border-radius: 10px;\n}\n\n.zoom-ratio-wrapper {\n width: 80%;\n margin-top: 20px;\n}\n\n.stop-scan-button,\n.torch-button {\n margin-top: 20px;\n}\n\n/* Existing styles */\nbody.barcode-scanner-active {\n visibility: hidden !important;\n background: transparent !important;\n --background: transparent;\n --ion-background-color: transparent;\n}\n\nhtml.barcode-scanner-active-html {\n background: transparent !important;\n}\n</style>\n"],"names":["tickets.actions"],"mappings":"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"}