App.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. import './App.scss';
  2. import React, {useState,useEffect, useMemo, useRef} from 'react';
  3. import 'bootstrap/dist/css/bootstrap.min.css';
  4. import {Router, Route, Link, Redirect, Switch} from 'react-router-dom';
  5. import createHistory from "history/createBrowserHistory";
  6. //import thunk from 'redux-thunk';
  7. import {Provider, connect} from 'react-redux';
  8. //import {createStore, combineReducers, applyMiddleware} from 'redux';
  9. import { store } from './store/store';
  10. import { actionAllPlaylists } from './store/promiseReducer';
  11. import { actionFullSetPlaylist } from './store/playerReducer';
  12. import {LoginForm, RegisterForm} from './components/authorization'
  13. import {CreatePlaylist} from './components/createPlaylist'
  14. import { Header } from './components/header';
  15. import { UserPage, UsersPlaylistsAll } from './components/userPage';
  16. import {PlaylistById} from './components/playlistById';
  17. let history = createHistory()
  18. store.subscribe(() => console.log(store.getState()));
  19. store.dispatch(actionAllPlaylists());
  20. const Playlist = ({playlist: {id, user_id, name, photo, description} = {}}) =>
  21. <div className="col-sm-3">
  22. <Link className="card" to= {`/playlist/${id}`} onClick={() => store.dispatch(actionFullSetPlaylist({id, user_id, name, photo, description}) )}>
  23. <img src={photo} className="card-img-top" alt="..."/>
  24. <div className="card-body">
  25. <h5 className="card-title"> {name}</h5>
  26. <p className="card-text">{description? description : '.' }</p>
  27. <button className="btn btn-primary" >Go somewhere</button>
  28. </div>
  29. </Link>
  30. </div>
  31. const PlaylistsAll = ({playlists= []}) =>
  32. <div className='RootCategories row'>
  33. {playlists.map((playlist, i) => <Playlist key={i} playlist={playlist}/>)}
  34. </div>
  35. const СAllPlaylists = connect(state => ({playlists: state.promise.allPlaylists?.payload?.playlists?.data || []}), )(PlaylistsAll);
  36. const CPlaylistById = connect(state => ({playlist: state.promise.plstById?.payload || {}}), )(PlaylistById);
  37. //const СUserPlaylists = connect(state => ({playlists: state.promise.usersPlaylists?.payload?.playlists?.data || []}), )(UsersPlaylistsAll);
  38. const Aside = ({children}) =>
  39. <div>
  40. <Header/>
  41. <СAllPlaylists/>
  42. </div>
  43. const Main = ({children}) =>
  44. <main className='bg-dark text-white'>
  45. <Router history = {createHistory()}>
  46. <Content>
  47. <Switch>
  48. {store.getState().auth?.token && <Redirect from='/login' to={'/user'} exact />}
  49. <Route path={'/login'} component={LoginForm} />
  50. <Route path={'/register'} component={RegisterForm}/>
  51. <Route path={'/allplaylists'} component={Aside}/>
  52. <Route path={'/playlist'} component={CPlaylistById} />
  53. <Route path={'/create'} component={CreatePlaylist} />
  54. <Route path={'/user'} component={UserPage} />
  55. {/* <Route path={'/'} component={Header} /> */}
  56. </Switch>
  57. {/* {children} */}
  58. </Content>
  59. </Router>
  60. </main>
  61. const Content = ({children}) =>
  62. <section className='Content'>
  63. {children}
  64. </section>
  65. function App() {
  66. return (
  67. <Router history={history}>
  68. <Provider store ={store}>
  69. {/* <Header/> */}
  70. <Main/>
  71. </Provider>
  72. </Router>
  73. );
  74. }
  75. const Footer = ({children}) =>
  76. <footer>
  77. {/* <Logo/> */}
  78. {children}
  79. </footer>
  80. export default App;