diff --git a/packages/stage-shared/src/composables/index.ts b/packages/stage-shared/src/composables/index.ts index 7c880de94..22b00e349 100644 --- a/packages/stage-shared/src/composables/index.ts +++ b/packages/stage-shared/src/composables/index.ts @@ -1 +1,3 @@ export * from './use-local-storage-manual-reset' +export * from './use-versioned-local-storage' +export * from './use-versioned-local-storage-manual-reset' diff --git a/packages/stage-shared/src/composables/use-local-storage-manual-reset.ts b/packages/stage-shared/src/composables/use-local-storage-manual-reset/index.ts similarity index 75% rename from packages/stage-shared/src/composables/use-local-storage-manual-reset.ts rename to packages/stage-shared/src/composables/use-local-storage-manual-reset/index.ts index 339fecef5..1711a3037 100644 --- a/packages/stage-shared/src/composables/use-local-storage-manual-reset.ts +++ b/packages/stage-shared/src/composables/use-local-storage-manual-reset/index.ts @@ -4,7 +4,11 @@ import type { MaybeRefOrGetter, WatchOptions } from 'vue' import { refManualReset, useLocalStorage } from '@vueuse/core' import { unref, watch } from 'vue' -export function useLocalStorageManualReset(key: MaybeRefOrGetter, initialValue: MaybeRefOrGetter, options?: UseStorageOptions & WatchOptions): ManualResetRefReturn { +export function useLocalStorageManualReset( + key: MaybeRefOrGetter, + initialValue: MaybeRefOrGetter, + options?: UseStorageOptions & WatchOptions, +): ManualResetRefReturn { const value = unref(initialValue) const localStorageState = useLocalStorage(key, value, options) const state = refManualReset(localStorageState) diff --git a/packages/stage-shared/src/composables/use-versioned-local-storage-manual-reset/index.ts b/packages/stage-shared/src/composables/use-versioned-local-storage-manual-reset/index.ts new file mode 100644 index 000000000..a9a3e7db4 --- /dev/null +++ b/packages/stage-shared/src/composables/use-versioned-local-storage-manual-reset/index.ts @@ -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( + key: MaybeRefOrGetter, + initialValue: MaybeRefOrGetter, + options?: UseStorageOptions & UseVersionedStorageOptions, +): ManualResetRefReturn { + const value = unref(initialValue) + const localStorageState = useVersionedLocalStorage(key, value, options) + const state = refManualReset(localStorageState) + + const { resume, pause } = watch(state, newValue => localStorageState.value = newValue, options) + watch(localStorageState, (newValue) => { + pause() + state.value = newValue + resume() + }, options) + + return state +} diff --git a/packages/stage-ui/src/composables/use-versioned-local-storage/index.ts b/packages/stage-shared/src/composables/use-versioned-local-storage/index.ts similarity index 86% rename from packages/stage-ui/src/composables/use-versioned-local-storage/index.ts rename to packages/stage-shared/src/composables/use-versioned-local-storage/index.ts index a00368ddf..512126f93 100644 --- a/packages/stage-ui/src/composables/use-versioned-local-storage/index.ts +++ b/packages/stage-shared/src/composables/use-versioned-local-storage/index.ts @@ -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 { version?: string, data?: T } -interface UseVersionedStorageOptions { +export interface Versioned { version?: string, data?: T } +export interface UseVersionedStorageOptions { defaultVersion?: string satisfiesVersionBy?: (version: string) => boolean onVersionMismatch?: (value: Versioned) => OnVersionMismatchActions @@ -19,9 +19,9 @@ export function useVersionedLocalStorage( key: MaybeRefOrGetter, initialValue: MaybeRefOrGetter, options?: UseStorageOptions & UseVersionedStorageOptions, -): [T] extends [Ref] ? IfAny, T> : Ref, T | UnwrapRef> { +): Ref { const defaultVersion = options?.defaultVersion || '1.0.0' - const data = ref(toValue(initialValue)) + const data = ref(toValue(initialValue)) as Ref const rawValue = useLocalStorage>(key, { version: defaultVersion, data: toValue(initialValue) }, options as unknown as UseStorageOptions>) watch(rawValue, (value) => { @@ -42,7 +42,7 @@ export function useVersionedLocalStorage( } } - data.value = rawValue.value.data + data.value = rawValue.value.data! return } diff --git a/packages/stage-ui/src/composables/index.ts b/packages/stage-ui/src/composables/index.ts index bd5890db8..35f775302 100644 --- a/packages/stage-ui/src/composables/index.ts +++ b/packages/stage-ui/src/composables/index.ts @@ -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'