Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 
 

82 строки
2.0 KiB

  1. import './App.scss';
  2. import 'bootstrap/dist/css/bootstrap.css';
  3. import React, { Component, Fragment } from 'react';
  4. import { connect } from 'react-redux';
  5. import { BrowserRouter } from 'react-router-dom';
  6. import Router from './Router';
  7. import ScrollToTop from './shared/components/ScrollToTop';
  8. import { AppState } from './store';
  9. import { fetchUser, logHelloWorld } from './store/auth/actions';
  10. import { INITIAL_AUTH_STATE } from './store/auth/reducers';
  11. import { AuthState } from './store/auth/types';
  12. interface AppProps {
  13. auth: AuthState;
  14. logHelloWorld: typeof logHelloWorld;
  15. fetchUser: any // Thunk Methods must be set to type any
  16. }
  17. interface AppComponentState {
  18. loaded: boolean;
  19. loading: boolean;
  20. }
  21. class App extends Component<AppProps,AppComponentState> {
  22. static defaultprops = { auth: INITIAL_AUTH_STATE }
  23. state = {
  24. loading: true,
  25. loaded: false,
  26. }
  27. UNSAFE_componentWillMount() {
  28. this.props.logHelloWorld();
  29. this.props.fetchUser('Fake User Id');
  30. }
  31. componentDidMount() {
  32. window.addEventListener('load', () => {
  33. this.setState({ loading: false });
  34. setTimeout(() => this.setState({ loaded: true }), 500);
  35. });
  36. }
  37. render() {
  38. const { loaded, loading } = this.state;
  39. return (
  40. <BrowserRouter>
  41. <ScrollToTop>
  42. <Fragment>
  43. {!loaded
  44. && (
  45. <div className={`load${loading ? '' : ' loaded'}`}>
  46. <div className="load__icon-wrap">
  47. <svg className="load__icon">
  48. <path fill="#4ce1b6" d="M12,4V2A10,10 0 0,0 2,12H4A8,8 0 0,1 12,4Z" />
  49. </svg>
  50. </div>
  51. </div>
  52. )
  53. }
  54. <div>
  55. <Router />
  56. </div>
  57. </Fragment>
  58. </ScrollToTop>
  59. </BrowserRouter>
  60. );
  61. }
  62. }
  63. const mapStateToProps = (state: AppState) => ({
  64. auth: state.auth
  65. });
  66. const mapDispathToProps = {
  67. logHelloWorld,
  68. fetchUser
  69. }
  70. export default connect(mapStateToProps, mapDispathToProps)(App);