import React, { ComponentType, PureComponent } from 'react'; import { connect } from 'react-redux'; import { injectIntl } from 'react-intl'; /** * its an higher order component to provide selected local language messages * and store states and dispatchers * ** * it will get messages from translator.js to widget or component * (comp with check then from props.intl.messages). * const FooterContainer = IntlMessagesConnector(FooterWidget, Translator); * after this statement, messages can be directly provided by just passing ID * * ** * it will get all states from store and will provide dispatch method from * store to trigger any action * mapStateToProps provide with arg of state, we can select specifiic store reducers to be passed * in components props, and as its 2 way binding any thing changes in store, component will rerender * const mapStateToProps = (state) => ({ rbp: state.rbp }); * mapDispatchToProps provide with dispatch method from store you can get any action * and dispatch it here to update or add store * const mapStateToProps = (dispatch) => (dispatch(actionName(data))); * @param {*} Component * @param {*} mapStateToProps * @param {*} mapDispatchToProps * @param {*} preloadData */ export const IntlConnector = (Component: ComponentType, mapStateToProps: any, mapDispatchToProps: any, preloadData: any = {}) => { const unwrappedComponent = class extends PureComponent { render() { return ( ); } }; const connectedComponent = mapStateToProps || mapDispatchToProps ? connect(mapStateToProps, mapDispatchToProps)(unwrappedComponent) : unwrappedComponent; const wrappedComponent = injectIntl(connectedComponent); return wrappedComponent; };