react-redux-isomorphic
Version:
Set of utilities for creating isomorphic applications using react-redux
55 lines (47 loc) • 1.7 kB
JavaScript
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;