UNPKG

juliette-react

Version:
29 lines 1.13 kB
import { useCallback, useContext, useEffect, useMemo, useState } from 'react'; import { StoreContext } from './contexts'; import { skip, take } from 'rxjs/operators'; export function useStore() { const store = useContext(StoreContext); if (!store) throw new Error('Store is not provided! Use StoreContext to provide it.'); return store; } export function useDispatch() { const store = useStore(); return useCallback(store.dispatch.bind(store), [store]); } export function useSelect(keyOrSelector) { const store = useStore(); const [state$, initialState] = useMemo(() => { let initialState = null; const state$ = store.select(keyOrSelector); state$.pipe(take(1)).subscribe(state => (initialState = state)); return [state$, initialState]; }, [store, keyOrSelector]); const [state, setState] = useState(initialState); useEffect(() => { const subscription = state$.pipe(skip(1)).subscribe(setState); return () => subscription.unsubscribe(); }, [state$]); return state; } //# sourceMappingURL=hooks.js.map