import {useEffect, useState} from 'react'; import {Stream, Sink} from '@most/types'; import {newDefaultScheduler} from '@most/scheduler'; import {pending, RemoteData} from '@devexperts/remote-data-ts'; // eslint-disable-next-line const emptyFunc = () => {}; export const useStream = (stream$: Stream, defaultValue: T): T => { const [state, setState] = useState(defaultValue); useEffect(() => { const sink: Sink = { event: (_, val) => { setState(val); }, end: emptyFunc, error: emptyFunc }; const effect$ = stream$.run(sink, newDefaultScheduler()); return () => { effect$.dispose(); }; }, [stream$]); return state; }; export const useStreamRD = (stream$: Stream>): RemoteData => { return useStream(stream$, pending); };