fix: update queryParams and downloadbase64

This commit is contained in:
ShareVB 2024-07-14 23:33:38 +02:00
parent d161082569
commit bad0262275
3 changed files with 32 additions and 33 deletions

27
pnpm-lock.yaml generated
View file

@ -142,7 +142,7 @@ dependencies:
version: 0.3.8 version: 0.3.8
pp-qr-code: pp-qr-code:
specifier: ^0.6.3 specifier: ^0.6.3
version: 0.6.3 version: 0.6.4
qrcode: qrcode:
specifier: ^1.5.1 specifier: ^1.5.1
version: 1.5.1 version: 1.5.1
@ -3360,7 +3360,7 @@ packages:
dependencies: dependencies:
'@unhead/dom': 0.5.1 '@unhead/dom': 0.5.1
'@unhead/schema': 0.5.1 '@unhead/schema': 0.5.1
'@vueuse/shared': 10.9.0(vue@3.3.4) '@vueuse/shared': 10.11.0(vue@3.3.4)
unhead: 0.5.1 unhead: 0.5.1
vue: 3.3.4 vue: 3.3.4
transitivePeerDependencies: transitivePeerDependencies:
@ -3993,20 +3993,19 @@ packages:
- vue - vue
dev: false dev: false
/@vueuse/shared@10.3.0(vue@3.3.4): /@vueuse/shared@10.11.0(vue@3.3.4):
resolution: {integrity: sha512-kGqCTEuFPMK4+fNWy6dUOiYmxGcUbtznMwBZLC1PubidF4VZY05B+Oht7Jh7/6x4VOWGpvu3R37WHi81cKpiqg==} resolution: {integrity: sha512-fyNoIXEq3PfX1L3NkNhtVQUSRtqYwJtJg+Bp9rIzculIZWHTkKSysujrOk2J+NrRulLTQH9+3gGSfYLWSEWU1A==}
dependencies: dependencies:
vue-demi: 0.14.5(vue@3.3.4) vue-demi: 0.14.8(vue@3.3.4)
transitivePeerDependencies: transitivePeerDependencies:
- '@vue/composition-api' - '@vue/composition-api'
- vue - vue
dev: false dev: false
/@vueuse/shared@10.9.0(vue@3.3.4): /@vueuse/shared@10.3.0(vue@3.3.4):
resolution: {integrity: sha512-Uud2IWncmAfJvRaFYzv5OHDli+FbOzxiVEQdLCKQKLyhz94PIyFC3CHcH7EDMwIn8NPtD06+PNbC/PiO0LGLtw==} resolution: {integrity: sha512-kGqCTEuFPMK4+fNWy6dUOiYmxGcUbtznMwBZLC1PubidF4VZY05B+Oht7Jh7/6x4VOWGpvu3R37WHi81cKpiqg==}
dependencies: dependencies:
vue-demi: 0.14.7(vue@3.3.4) vue-demi: 0.14.5(vue@3.3.4)
vue-demi: 0.14.7(vue@3.3.4)
transitivePeerDependencies: transitivePeerDependencies:
- '@vue/composition-api' - '@vue/composition-api'
- vue - vue
@ -7477,8 +7476,8 @@ packages:
source-map-js: 1.0.2 source-map-js: 1.0.2
dev: true dev: true
/pp-qr-code@0.6.3: /pp-qr-code@0.6.4:
resolution: {integrity: sha512-QhIlfia7KAHGGO3umM+leYyPP/Ad1Urw4xUhbIIy9XE4iVHI70+KKxMqL5BBHC8fJblh4Vh9SVrhayb0vHf1tQ==} resolution: {integrity: sha512-6OhfzsFgZClbBh3XzfwysSwH4injljeMreKaZyxWydthkhXAdjSbFfEtrvfHt1SN65PmAHEOux+dOVvJRiOaDw==}
dependencies: dependencies:
qrcode-generator: 1.4.4 qrcode-generator: 1.4.4
dev: false dev: false
@ -9180,10 +9179,8 @@ packages:
vue: 3.3.4 vue: 3.3.4
dev: false dev: false
/vue-demi@0.14.7(vue@3.3.4): /vue-demi@0.14.8(vue@3.3.4):
resolution: {integrity: sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==} resolution: {integrity: sha512-Uuqnk9YE9SsWeReYqK2alDI5YzciATE0r2SkA6iMAtuXvNTMNACJLJEXNXaEy94ECuBe4Sk6RzRU80kjdbIo1Q==}
/vue-demi@0.14.7(vue@3.3.4):
resolution: {integrity: sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==}
engines: {node: '>=12'} engines: {node: '>=12'}
hasBin: true hasBin: true
requiresBuild: true requiresBuild: true

View file

@ -17,6 +17,12 @@ const transformers = {
fromQuery: (value: string) => value.toLowerCase() === 'true', fromQuery: (value: string) => value.toLowerCase() === 'true',
toQuery: (value: boolean) => (value ? 'true' : 'false'), toQuery: (value: boolean) => (value ? 'true' : 'false'),
}, },
object: {
fromQuery: (value: string) => {
return JSON.parse(value);
},
toQuery: (value: object) => JSON.stringify(value),
},
}; };
function useQueryParam<T>({ name, defaultValue }: { name: string; defaultValue: T }) { function useQueryParam<T>({ name, defaultValue }: { name: string; defaultValue: T }) {
@ -35,30 +41,26 @@ function useQueryParam<T>({ name, defaultValue }: { name: string; defaultValue:
}); });
} }
function useQueryParamOrStorage<T>({ name, storageName, defaultValue }: { name: string; storageName: string; defaultValue?: T }) { function useQueryParamOrStorage<T>({ name, storageName, defaultValue }: { name: string; storageName: string; defaultValue: T }) {
const type = typeof defaultValue; const type = typeof defaultValue;
const transformer = transformers[type as keyof typeof transformers] ?? transformers.string; const transformer = transformers[type as keyof typeof transformers] ?? transformers.string;
const storageRef = useStorage(storageName, defaultValue); const storageRef = useStorage(storageName, defaultValue);
const storageDefaultValue = storageRef.value ?? defaultValue; const proxyDefaultValue = transformer.toQuery(defaultValue as never);
const proxy = useRouteQuery(name, proxyDefaultValue);
const proxy = useRouteQuery(name, transformer.toQuery(storageDefaultValue as never)); const r = ref(defaultValue);
const ref = computed<T>({ watch(r,
get() { (value) => {
return transformer.fromQuery(proxy.value) as unknown as T;
},
set(value) {
proxy.value = transformer.toQuery(value as never); proxy.value = transformer.toQuery(value as never);
storageRef.value = value as never;
}, },
}); { deep: true });
watch( r.value = (proxy.value && proxy.value !== proxyDefaultValue
ref, ? transformer.fromQuery(proxy.value) as unknown as T
(newValue) => { : storageRef.value as T) as never;
storageRef.value = newValue;
},
);
return ref; return r;
} }

View file

@ -8,7 +8,7 @@ import type {
} from 'pp-qr-code'; } from 'pp-qr-code';
import qrcodeConsole from 'qrcode-terminal-nooctal'; import qrcodeConsole from 'qrcode-terminal-nooctal';
import { useQRCodeStyling } from './useQRCode'; import { useQRCodeStyling } from './useQRCode';
import { useDownloadFileFromBase64Refs } from '@/composable/downloadBase64'; import { useDownloadFileFromBase64 } from '@/composable/downloadBase64';
import { useQueryParamOrStorage } from '@/composable/queryParams'; import { useQueryParamOrStorage } from '@/composable/queryParams';
const foreground = useQueryParamOrStorage({ name: 'fg', storageName: 'qr-code-gen:fg', defaultValue: '#000000ff' }); const foreground = useQueryParamOrStorage({ name: 'fg', storageName: 'qr-code-gen:fg', defaultValue: '#000000ff' });
@ -83,7 +83,7 @@ const qrcodeTerminal = computedAsync(() => {
const filename = ref('qr-code'); const filename = ref('qr-code');
const extension = computed(() => outputType.value.toString()); const extension = computed(() => outputType.value.toString());
const { download } = useDownloadFileFromBase64Refs({ source: qrcode, filename, extension }); const { download } = useDownloadFileFromBase64({ source: qrcode, filename, extension });
</script> </script>
<template> <template>