import React, { useMemo } from 'react'; import PropTypes from 'prop-types'; import { ReactReduxContext } from './Context'; import { createSubscription } from '../utils/Subscription'; import { useIsomorphicLayoutEffect } from '../utils/useIsomorphicLayoutEffect'; function Provider(_ref) { var store = _ref.store, context = _ref.context, children = _ref.children; var contextValue = useMemo(function () { var subscription = createSubscription(store); return { store: store, subscription: subscription }; }, [store]); var previousState = useMemo(function () { return store.getState(); }, [store]); useIsomorphicLayoutEffect(function () { var subscription = contextValue.subscription; subscription.onStateChange = subscription.notifyNestedSubs; subscription.trySubscribe(); if (previousState !== store.getState()) { subscription.notifyNestedSubs(); } return function () { subscription.tryUnsubscribe(); subscription.onStateChange = null; }; }, [contextValue, previousState]); var Context = context || ReactReduxContext; return /*#__PURE__*/React.createElement(Context.Provider, { value: contextValue }, children); } if (process.env.NODE_ENV !== 'production') { Provider.propTypes = { store: PropTypes.shape({ subscribe: PropTypes.func.isRequired, dispatch: PropTypes.func.isRequired, getState: PropTypes.func.isRequired }), context: PropTypes.object, children: PropTypes.any }; } export default Provider;