diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/composable/queryParams.ts | 35 | ||||
-rw-r--r-- | src/tools/hash-text/hash-text.vue | 3 | ||||
-rw-r--r-- | src/tools/token-generator/token-generator.tool.vue | 15 | ||||
-rw-r--r-- | src/tools/uuid-generator/uuid-generator.vue | 3 |
4 files changed, 46 insertions, 10 deletions
diff --git a/src/composable/queryParams.ts b/src/composable/queryParams.ts new file mode 100644 index 0000000..b62c8b3 --- /dev/null +++ b/src/composable/queryParams.ts @@ -0,0 +1,35 @@ +import { useRouteQuery } from '@vueuse/router'; +import { computed } from 'vue'; + +export { useQueryParam }; + +const transformers = { + number: { + fromQuery: (value: string) => Number(value), + toQuery: (value: number) => String(value), + }, + string: { + fromQuery: (value: string) => value, + toQuery: (value: string) => value, + }, + boolean: { + fromQuery: (value: string) => value.toLowerCase() === 'true', + toQuery: (value: boolean) => (value ? 'true' : 'false'), + }, +}; + +function useQueryParam<T>({ name, defaultValue }: { name: string; defaultValue: T }) { + const type = typeof defaultValue; + const transformer = transformers[type as keyof typeof transformers] ?? transformers.string; + + const proxy = useRouteQuery(name, transformer.toQuery(defaultValue as never)); + + return computed<T>({ + get() { + return transformer.fromQuery(proxy.value) as T; + }, + set(value) { + proxy.value = transformer.toQuery(value as never); + }, + }); +} diff --git a/src/tools/hash-text/hash-text.vue b/src/tools/hash-text/hash-text.vue index 4b7bcf1..50a9c33 100644 --- a/src/tools/hash-text/hash-text.vue +++ b/src/tools/hash-text/hash-text.vue @@ -40,6 +40,7 @@ </template> <script setup lang="ts"> +import { useQueryParam } from '@/composable/queryParams'; import { enc, lib, MD5, RIPEMD160, SHA1, SHA224, SHA256, SHA3, SHA384, SHA512 } from 'crypto-js'; import { ref } from 'vue'; import InputCopyable from '../../components/InputCopyable.vue'; @@ -59,7 +60,7 @@ const algos = { type AlgoNames = keyof typeof algos; type Encoding = keyof typeof enc | 'Bin'; const algoNames = Object.keys(algos) as AlgoNames[]; -const encoding = ref<Encoding>('Hex'); +const encoding = useQueryParam<Encoding>({ defaultValue: 'Hex', name: 'encoding' }); const clearText = ref(''); function formatWithEncoding(words: lib.WordArray, encoding: Encoding) { diff --git a/src/tools/token-generator/token-generator.tool.vue b/src/tools/token-generator/token-generator.tool.vue index 25bfea2..c2dcb0f 100644 --- a/src/tools/token-generator/token-generator.tool.vue +++ b/src/tools/token-generator/token-generator.tool.vue @@ -54,18 +54,19 @@ <script setup lang="ts"> import { useCopy } from '@/composable/copy'; import { ref, watch } from 'vue'; +import { useQueryParam } from '@/composable/queryParams'; import { createToken } from './token-generator.service'; const token = ref(''); -const length = ref(64); +const length = useQueryParam({ name: 'length', defaultValue: 64 }); const { copy } = useCopy({ source: token, text: 'Token copied to the clipboard' }); -const withUppercase = ref(true); -const withLowercase = ref(true); -const withNumbers = ref(true); -const withSymbols = ref(false); +const withUppercase = useQueryParam({ name: 'uppercase', defaultValue: true }); +const withLowercase = useQueryParam({ name: 'lowercase', defaultValue: true }); +const withNumbers = useQueryParam({ name: 'numbers', defaultValue: true }); +const withSymbols = useQueryParam({ name: 'symbols', defaultValue: false }); -watch([withUppercase, withLowercase, withNumbers, withSymbols, length], refreshToken); +watch([withUppercase, withLowercase, withNumbers, withSymbols, length], refreshToken, { immediate: true }); function refreshToken() { token.value = createToken({ @@ -76,6 +77,4 @@ function refreshToken() { withSymbols: withSymbols.value, }); } - -refreshToken(); </script> diff --git a/src/tools/uuid-generator/uuid-generator.vue b/src/tools/uuid-generator/uuid-generator.vue index 36379f8..e274c98 100644 --- a/src/tools/uuid-generator/uuid-generator.vue +++ b/src/tools/uuid-generator/uuid-generator.vue @@ -32,8 +32,9 @@ import { useCopy } from '@/composable/copy'; import { ref, watch } from 'vue'; import { v4 as generateUUID } from 'uuid'; +import { useQueryParam } from '@/composable/queryParams'; -const count = ref(1); +const count = useQueryParam({ defaultValue: 1, name: 'count' }); const uuids = ref(''); |