File size: 823 Bytes
4d70170
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import type { Ref } from 'vue'
import { watch } from 'vue'
import { getStorage, setStorage } from '@vue-devtools/shared-utils'

export function nonReactive<T>(ref: Ref<T>) {
  const holder = {
    value: ref.value,
  }

  watch(ref, (value) => {
    holder.value = value
  }, {
    flush: 'sync',
  })

  return holder
}

export function addNonReactiveProperties<T = any>(target: T, props: Partial<T>) {
  for (const key in props) {
    Object.defineProperty(target, key, {
      value: props[key],
      writable: true,
      enumerable: true,
      configurable: false,
    })
  }
}

export function useSavedRef<T>(ref: Ref<T>, storageKey: string) {
  const savedValue = getStorage(storageKey)
  if (savedValue != null) {
    ref.value = savedValue
  }

  watch(ref, (value) => {
    setStorage(storageKey, value)
  })
}