Compare commits

...

3 Commits

Author SHA1 Message Date
Thierry
01ef679a17 fix(web-core/useRouteQuery): URL not updating immediately in some cases 2024-08-23 11:18:31 +02:00
Thierry
13ed5d3c87 feat(web-core): rework useRouteQuery composable 2024-08-23 11:18:31 +02:00
Thierry
f74611bfbb feat(web-core): new useRouteQuery composable 2024-08-23 11:18:30 +02:00
3 changed files with 25 additions and 11 deletions

View File

@@ -4,13 +4,16 @@ export function handleDelete(source: WritableComputedRef<any>, value: any) {
if (Array.isArray(source.value)) {
source.value = [...source.value].splice(value, 1)
} else if (source.value instanceof Set) {
source.value = new Set(source.value)
source.value.delete(value)
const newSet = new Set(source.value)
newSet.delete(value)
source.value = newSet
} else if (source.value instanceof Map) {
source.value = new Map(source.value)
source.value.delete(value)
const newMap = new Map(source.value)
newMap.delete(value)
source.value = newMap
} else if (typeof source.value === 'object' && source.value !== null) {
source.value = { ...source.value }
delete source.value[value]
const newObject = { ...source.value }
delete newObject[value]
source.value = newObject
}
}

View File

@@ -2,11 +2,13 @@ import type { WritableComputedRef } from 'vue'
export function handleSet(source: WritableComputedRef<any>, key: any, value: any) {
if (Array.isArray(source.value)) {
source.value = [...source.value]
source.value[key] = value
const newArray = source.value.slice()
newArray[key] = value
source.value = newArray
} else if (source.value instanceof Map) {
source.value = new Map(source.value)
source.value.set(key, value)
const newMap = new Map(source.value)
newMap.set(key, value)
source.value = newMap
} else if (typeof source.value === 'object') {
if (source.value === null) {
return

View File

@@ -39,4 +39,13 @@ export type GuessActions<TData> =
? MapActions<TKey, TValue>
: EmptyObject
export type RouteQuery<TData> = WritableComputedRef<TData> & GuessActions<TData>
export type RouteQuery<TData> = WritableComputedRef<
TData extends Set<infer V>
? ReadonlySet<V>
: TData extends Map<infer K, infer V>
? ReadonlyMap<K, V>
: TData extends object
? Readonly<TData>
: TData
> &
GuessActions<TData>