diff --git a/package-lock.json b/package-lock.json index b64476b..8881c19 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,6 +9,7 @@ "version": "0.6.20", "hasInstallScript": true, "dependencies": { + "@gkucmierz/utils": "^1.28.7", "barcode-detector": "^3.1.0", "lucide-vue-next": "^0.575.0", "marked": "^17.0.3", @@ -2135,6 +2136,12 @@ "node": "^20.19.0 || ^22.13.0 || >=24" } }, + "node_modules/@gkucmierz/utils": { + "version": "1.28.7", + "resolved": "https://registry.npmjs.org/@gkucmierz/utils/-/utils-1.28.7.tgz", + "integrity": "sha512-ekN8W4PL+SEeG0adWlkxxmTv6StLgxqtGRB9eBdWmkT5S4GSfJHYmzLY1ebc4jlL40OEa992ryvsT/TJS7eMmA==", + "license": "MIT" + }, "node_modules/@humanfs/core": { "version": "0.19.1", "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", diff --git a/package.json b/package.json index f1abb90..d72ca63 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ "prepare": "husky" }, "dependencies": { + "@gkucmierz/utils": "^1.28.7", "barcode-detector": "^3.1.0", "lucide-vue-next": "^0.575.0", "marked": "^17.0.3", diff --git a/src/components/tools/QrCode.vue b/src/components/tools/QrCode.vue index e3c6537..a8e7064 100644 --- a/src/components/tools/QrCode.vue +++ b/src/components/tools/QrCode.vue @@ -4,6 +4,11 @@ import { Download } from 'lucide-vue-next' import QRCode from 'qrcode' import { useFillHeight } from '../../composables/useFillHeight' import { useLocalStorage } from '../../composables/useLocalStorage' +import { useRoute, useRouter } from 'vue-router' +import { fromBase64Url, toBase64Url } from '@gkucmierz/utils' + +const route = useRoute() +const router = useRouter() const text = useLocalStorage('text', '', 'qr-code') const ecc = useLocalStorage('ecc', 'M', 'qr-code') @@ -55,7 +60,26 @@ watch([text, ecc], () => { generateQR() }) +watch(text, (newText) => { + if (newText) { + router.replace({ name: 'QrCode', params: { payload: toBase64Url(newText) } }) + } else { + router.replace({ name: 'QrCode', params: {} }) + } +}) + onMounted(() => { + if (route.params.payload) { + try { + const decodedPayload = fromBase64Url(route.params.payload) + text.value = decodedPayload + } catch (e) { + console.error('Failed to parse QR payload from URL', e) + } + } else if (text.value) { + router.replace({ name: 'QrCode', params: { payload: toBase64Url(text.value) } }) + } + if (text.value) generateQR() }) diff --git a/src/components/tools/QrScanner.vue b/src/components/tools/QrScanner.vue index 9bb13b0..c5329ef 100644 --- a/src/components/tools/QrScanner.vue +++ b/src/components/tools/QrScanner.vue @@ -1,6 +1,8 @@