UNPKG

@randy.tarampi/jsx

Version:

Some common JSX components for www.randytarampi.ca

45 lines (44 loc) 1.72 kB
import { push } from "connected-react-router/immutable"; import PropTypes from "prop-types"; import { connect } from "react-redux"; import clearError from "../../actions/error/clearError"; import clearErrorTimeoutHandler from "../../actions/error/clearErrorTimeoutHandler"; import setErrorTimeout from "../../actions/error/setErrorTimeoutHandler"; import { ErrorComponent } from "../../components/error"; import selectors from "../../data/selectors"; export var connectError = connect((state, ownProps) => { return { location: selectors.getLocation(state), hasError: ownProps.hasError || selectors.hasError(state), error: ownProps.error || selectors.getError(state), errorCode: ownProps.errorCode || selectors.getErrorCode(state), errorMessage: ownProps.errorMessage || selectors.getErrorMessage(state), errorTimeoutHandlerId: selectors.getErrorTimeoutHandlerId(state) }; }, (dispatch, ownProps) => { return { timedRedirect: () => { return new Promise(resolve => { var timeoutId = setTimeout(() => { if (window.location && window.location.pathname !== ownProps.redirectionLocation) { dispatch(clearError()); dispatch(push(ownProps.redirectionLocation)); } resolve(); }, ownProps.redirectionTimeout * 1000); dispatch(setErrorTimeout(timeoutId)); }); }, clearErrorTimeoutHandler }; }); export var ConnectedError = connectError(ErrorComponent); ConnectedError.propTypes = { redirectionLocation: PropTypes.string.isRequired, redirectionTimeout: PropTypes.number }; ConnectedError.defaultProps = { redirectionLocation: "/", redirectionTimeout: 10 }; export default ConnectedError;