UNPKG

react-redux-isomorphic

Version:

Set of utilities for creating isomorphic applications using react-redux

55 lines (47 loc) 1.7 kB
import React from 'react'; import { useDispatch } from 'react-redux'; import IsomorphicContext from './context'; import useComponentState from './useComponentState'; import requestContext from './requestContext'; import { loadContext, reloadContext, destroy } from './actions'; var useEffectFake = function useEffectFake(handler) { handler(); }; var useIsomorphic = function useIsomorphic(isomorphicId, getContext) { var _useComponentState = useComponentState(isomorphicId), isReady = _useComponentState.isReady, isLoading = _useComponentState.isLoading, isReloading = _useComponentState.isReloading, context = _useComponentState.context, error = _useComponentState.error; var dispatch = useDispatch(); var _React$useContext = React.useContext(IsomorphicContext), loadParams = _React$useContext.loadParams, isFakeHooks = _React$useContext.isFakeHooks; var useEffectIsomorphic = isFakeHooks ? useEffectFake : React.useEffect; useEffectIsomorphic(function () { if (!isLoading && !isReady) { dispatch(loadContext(isomorphicId)); requestContext(isomorphicId, getContext, loadParams, dispatch); } return function () { dispatch(destroy(isomorphicId)); }; }, [isomorphicId]); var reload = React.useCallback(function () { if (isLoading) { return; } dispatch(reloadContext(isomorphicId)); requestContext(isomorphicId, getContext, loadParams, dispatch); }, [isomorphicId, isLoading, getContext]); return { isReady: isReady, isLoading: isLoading, isReloading: isReloading, context: context, error: error, reload: reload }; }; export default useIsomorphic;