podcast manager
1import {ReadonlySignal, useSignal, useSignalEffect} from '@preact/signals'
2import {liveQuery} from 'dexie'
3
4export function useLiveQuery<T>(querier: () => Promise<T>): ReadonlySignal<T | undefined> {
5 const signal = useSignal<T>()
6 const observable = liveQuery(querier)
7
8 useSignalEffect(() => {
9 const subscription = observable.subscribe((value) => {
10 signal.value = value
11 console.debug('subscription updating')
12 })
13
14 return () => {
15 subscription.unsubscribe()
16 console.debug('subscription closing')
17 }
18 })
19
20 return signal
21}