All files / src/hooks/useWatcher useWatcher.ts

27.27% Statements 3/11
0% Branches 0/2
0% Functions 0/5
30% Lines 3/10

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 191x   1x     1x                          
import { useSyncExternalStore } from 'react'
import type { Watcher } from 'watch-state'
import { Watch } from 'watch-state'
 
/** @deprecated Use `useSelector` */
export function useWatcher<S> (state: Watcher<S>): S {
  return useSyncExternalStore(callback => {
    const watcher = new Watch(update => {
      if (update) callback()
 
      return state(update)
    }, true)
 
    return () => {
      watcher.destroy()
    }
  }, () => state(false))
}