UNPKG

react-obsidian

Version:

Dependency injection framework for React and React Native applications

24 lines (19 loc) 790 B
import { useEffect, useState } from 'react'; import { ColdMediatorObservable } from './ColdMediatorObservable'; import { ObservedValues } from '../types'; import { mapObservablesToValues } from '../mapObservablesToValues'; export function useColdObservables<T extends Record<string, any>>(observables: T): ObservedValues<T> { const [mediator] = useState( () => new ColdMediatorObservable<T>(mapObservablesToValues(observables) as T), ); const [values, setValues] = useState(() => mediator.value as ObservedValues<T>); useEffect(() => { Object.keys(observables as {}).forEach((key) => { mediator.addSource(observables[key], (value) => { mediator.setValue(key, value); }); }); return mediator.subscribe(setValues); }, []); return values; }