anukattoju

Untitled

Aug 7th, 2018
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.97 KB | None | 0 0
  1. import React, { Component } from 'react';
  2.  
  3. import Modal from '../../components/UI/Modal/Modal';
  4. import Aux from '../_Aux/_Aux';
  5.  
  6. const withErrorHandler = (WrappedComponent, axios) => {
  7. return class extends Component {
  8. state = {
  9. error: null
  10. }
  11.  
  12. componentWillMount() {
  13. this.reqInterceptor = axios.interceptors.request.use(req => {
  14. this.setState({ error: null });
  15. return req;
  16. });
  17. this.resInterceptor = axios.interceptors.response.use(res => res, error => {
  18. this.setState({ error: error });
  19. });
  20. }
  21.  
  22. componentWillUnmount() {
  23. axios.interceptors.request.eject(this.reqInterceptor);
  24. axios.interceptors.response.eject(this.resInterceptor);
  25. }
  26.  
  27. errorConfirmedHandler = () => {
  28. this.setState({ error: null });
  29. }
  30.  
  31. componentDidUpdate() {
  32. const error = { ...this.state.error };
  33. if (this.isNotEmpty(error)
  34. && this.isNotEmpty(error.response)
  35. && this.isNotEmpty(error.response.status)) {
  36. const statusCode = error.response.status;
  37. if (Number.isInteger(statusCode) && statusCode === 401) {
  38. this.props.history.replace('/');
  39. }
  40. }
  41. }
  42.  
  43. isNotEmpty = (data) => {
  44. return data !== undefined && data !== null;
  45. }
  46.  
  47. render() {
  48. return (
  49. <Aux>
  50. <Modal
  51. show={this.state.error}
  52. modalClosed={this.errorConfirmedHandler}>
  53. {this.state.error ? this.state.error.message : null}
  54. </Modal>
  55. <WrappedComponent {...this.props} style={{ color: 'Red' }} />
  56. </Aux>
  57. );
  58. }
  59. }
  60. }
  61.  
  62. export default withErrorHandler;
Advertisement
Add Comment
Please, Sign In to add comment