userPage.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. import React, {useEffect} from 'react';
  2. import {Link} from 'react-router-dom';
  3. import {connect} from 'react-redux';
  4. import { actionUsersPlaylists } from '../store/promiseReducer';
  5. import { actionFullSetPlaylist } from '../store/playerReducer';
  6. import { store } from '../store/store';
  7. import image from '../images/card.png';
  8. import Modal from 'react-bootstrap/Modal';
  9. // import Button from 'react-bootstrap/Button';
  10. import {CreatePlaylist} from './createPlaylist'
  11. const Playlist = ({playlist = {}}) =>
  12. <div className="col-sm-3 p-1">
  13. <Link className="card" to= {`/playlist/${playlist.id}`}
  14. // onClick={() => store.dispatch(actionFullSetPlaylist({playlist}) )}
  15. >
  16. <img src={playlist.photo || image} className="card-img-top" alt="..." height={'150px'}/>
  17. <div className="card-body">
  18. <h5 className="card-title"> {playlist.name}</h5>
  19. <p className="card-text">{playlist.description? playlist.description : '.' }</p>
  20. </div>
  21. </Link>
  22. </div>
  23. export const UsersPlaylistsAll = ({playlists= []}) => {
  24. const [modalShow, setModalShow] = React.useState(false);
  25. return (
  26. <>
  27. <div className='RootCategories row'>
  28. <div className="col-sm-3 border border-white d-flex align-items-center justify-content-center" onClick={() => setModalShow(true)}>
  29. <h3>Create new Playlist</h3>
  30. </div>
  31. <MyVerticallyCenteredModal
  32. show={modalShow}
  33. onHide={() => setModalShow(false)}
  34. />
  35. {playlists.map((playlist, i) => <Playlist key={i} playlist={playlist}/>)}
  36. </div>
  37. </>)
  38. }
  39. const СUsersPlaylists = connect(state => ({playlists: state.promise.usersPlaylists?.payload?.playlists|| []}), )(UsersPlaylistsAll);
  40. function MyVerticallyCenteredModal(props) {
  41. return (
  42. <Modal
  43. {...props}
  44. size="lg"
  45. aria-labelledby="contained-modal-title-vcenter"
  46. centered
  47. >
  48. {/* <Modal.Header closeButton> */}
  49. {/* <Modal.Title id="contained-modal-title-vcenter">
  50. Create new Playlist
  51. </Modal.Title> */}
  52. {/*</Modal.Header> */}
  53. <Modal.Body >
  54. <CreatePlaylist props={props}/>
  55. </Modal.Body>
  56. {/* <Modal.Footer>
  57. <Button variant="outline-danger" onClick={props.onHide}>Create</Button>
  58. </Modal.Footer> */}
  59. </Modal>
  60. );
  61. }
  62. export const UserPage = () => {
  63. let id = store.getState().auth?.user?.id;
  64. const getAnswer = async () => {
  65. await store.dispatch(actionUsersPlaylists(id));
  66. };
  67. useEffect(() => {
  68. getAnswer();
  69. }, []);
  70. return(<>
  71. <div className='d-flex container align-items-center justify-content-center'>
  72. <div className=''>
  73. <img className='m-4' alt='...' src={store.getState().auth?.user?.avatar || image} width='150px'/>
  74. </div>
  75. <div className=''>
  76. <h3>{store.getState().auth?.user?.name}</h3>
  77. <Link to={'/editprofile'} >Edit Profile</Link>
  78. </div>
  79. </div>
  80. <h3>My playlists:</h3>
  81. <СUsersPlaylists/>
  82. </>)
  83. }