UNPKG

contiago-toolbar

Version:

One of the options for outputting content from contiago xml-server

47 lines (37 loc) 1.54 kB
import React from 'react'; import PropTypes from 'prop-types'; import hoistNonReactStatics from 'hoist-non-react-statics'; import getInjectors from './sagaInjectors'; /** * Dynamically injects a saga, passes component's props as saga arguments * * @param {string} key A key of the saga * @param {function} saga A root saga that will be injected * @param {string} [mode] By default (constants.RESTART_ON_REMOUNT) the saga will be started on component mount and * cancelled with `task.cancel()` on component un-mount for improved performance. Another two options: * - constants.DAEMON—starts the saga on component mount and never cancels it or starts again, * - constants.ONCE_TILL_UNMOUNT—behaves like 'RESTART_ON_REMOUNT' but never runs it again. * */ export default ({ key, saga, mode }) => (WrappedComponent) => { class InjectSaga extends React.Component { static WrappedComponent = WrappedComponent; static contextTypes = { store: PropTypes.object.isRequired, }; static displayName = `withSaga(${(WrappedComponent.displayName || WrappedComponent.name || 'Component')})`; componentWillMount() { const { injectSaga } = this.injectors; injectSaga(key, { saga, mode }, this.props); } componentWillUnmount() { const { ejectSaga } = this.injectors; ejectSaga(key); } injectors = getInjectors(this.context.store); render() { return <WrappedComponent {...this.props} />; } } return hoistNonReactStatics(InjectSaga, WrappedComponent); };