refactor(stage-shared): now useVersionedLocalStorageManualReset

This commit is contained in:
Neko Ayaka
2026-03-28 15:56:21 +08:00
parent bb0c93edb4
commit 4b2bd40f73
5 changed files with 42 additions and 9 deletions
@@ -1 +1,3 @@
export * from './use-local-storage-manual-reset'
export * from './use-versioned-local-storage'
export * from './use-versioned-local-storage-manual-reset'
@@ -4,7 +4,11 @@ import type { MaybeRefOrGetter, WatchOptions } from 'vue'
import { refManualReset, useLocalStorage } from '@vueuse/core'
import { unref, watch } from 'vue'
export function useLocalStorageManualReset<T>(key: MaybeRefOrGetter<string>, initialValue: MaybeRefOrGetter<T>, options?: UseStorageOptions<T> & WatchOptions): ManualResetRefReturn<T> {
export function useLocalStorageManualReset<T>(
key: MaybeRefOrGetter<string>,
initialValue: MaybeRefOrGetter<T>,
options?: UseStorageOptions<T> & WatchOptions,
): ManualResetRefReturn<T> {
const value = unref(initialValue)
const localStorageState = useLocalStorage<T>(key, value, options)
const state = refManualReset<T>(localStorageState)
@@ -0,0 +1,28 @@
import type { ManualResetRefReturn, UseStorageOptions } from '@vueuse/core'
import type { MaybeRefOrGetter } from 'vue'
import type { UseVersionedStorageOptions } from '../use-versioned-local-storage'
import { refManualReset } from '@vueuse/core'
import { unref, watch } from 'vue'
import { useVersionedLocalStorage } from '../use-versioned-local-storage'
export function useVersionedLocalStorageManualReset<T>(
key: MaybeRefOrGetter<string>,
initialValue: MaybeRefOrGetter<T>,
options?: UseStorageOptions<T> & UseVersionedStorageOptions<T>,
): ManualResetRefReturn<T> {
const value = unref(initialValue)
const localStorageState = useVersionedLocalStorage<T>(key, value, options)
const state = refManualReset<T>(localStorageState)
const { resume, pause } = watch(state, newValue => localStorageState.value = newValue, options)
watch(localStorageState, (newValue) => {
pause()
state.value = newValue
resume()
}, options)
return state
}
@@ -1,11 +1,11 @@
import type { IfAny, UseStorageOptions } from '@vueuse/core'
import type { MaybeRefOrGetter, Ref, UnwrapRef } from 'vue'
import type { UseStorageOptions } from '@vueuse/core'
import type { MaybeRefOrGetter, Ref } from 'vue'
import { useLocalStorage } from '@vueuse/core'
import { ref, toValue, watch } from 'vue'
interface Versioned<T> { version?: string, data?: T }
interface UseVersionedStorageOptions<T> {
export interface Versioned<T> { version?: string, data?: T }
export interface UseVersionedStorageOptions<T> {
defaultVersion?: string
satisfiesVersionBy?: (version: string) => boolean
onVersionMismatch?: (value: Versioned<T>) => OnVersionMismatchActions<T>
@@ -19,9 +19,9 @@ export function useVersionedLocalStorage<T>(
key: MaybeRefOrGetter<string>,
initialValue: MaybeRefOrGetter<T>,
options?: UseStorageOptions<T> & UseVersionedStorageOptions<T>,
): [T] extends [Ref<any, any>] ? IfAny<T, Ref<T, T>, T> : Ref<UnwrapRef<T>, T | UnwrapRef<T>> {
): Ref<T, T> {
const defaultVersion = options?.defaultVersion || '1.0.0'
const data = ref(toValue(initialValue))
const data = ref(toValue(initialValue)) as Ref<T, T>
const rawValue = useLocalStorage<Versioned<T>>(key, { version: defaultVersion, data: toValue(initialValue) }, options as unknown as UseStorageOptions<Versioned<T>>)
watch(rawValue, (value) => {
@@ -42,7 +42,7 @@ export function useVersionedLocalStorage<T>(
}
}
data.value = rawValue.value.data
data.value = rawValue.value.data!
return
}
@@ -10,6 +10,5 @@ export * from './use-build-info'
export * from './use-chat-session/summary'
export * from './use-optimistic'
export * from './use-scroll-to-hash'
export * from './use-versioned-local-storage'
export * from './vision'
export * from './whisper'