import type { Observable } from 'rxjs'; import { useEffect, useState } from 'react'; import { RxUtils } from '@stream-io/video-client'; /** * Utility hook which provides the current value of the given observable. * * @param observable$ the observable to read data from. * @param defaultValue a default value. Used when the observable data can't be read or emits an error - must be stable. */ export const useObservableValue = ( observable$: Observable, defaultValue?: T, ) => { const [value, setValue] = useState(() => { try { return RxUtils.getCurrentValue(observable$); } catch (err) { if (typeof defaultValue === 'undefined') throw err; return defaultValue; } }); useEffect(() => { return RxUtils.createSubscription(observable$, setValue, (err) => { console.log('An error occurred while reading an observable', err); if (defaultValue) setValue(defaultValue); }); }, [defaultValue, observable$]); return value; };