AddTrack.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. //try to do dropzone, open Programming/hw/project/src/components/DropZone and check code
  2. //MyPlaylists && playerActions && AddTrack
  3. import React, { useState, useEffect, useRef, useCallback } from "react";
  4. import { useDropzone } from "react-dropzone";
  5. import {
  6. addTrackToPlaylist,
  7. deleteTrackFromPlaylist,
  8. // AddTrackFromLibToPlaylist
  9. } from "../actions/playerActions";
  10. import { connect } from "react-redux";
  11. import { Spin } from "antd";
  12. import "../styles/library.css";
  13. const AddTrack = ({
  14. myPlaylist,
  15. addTrackToPlaylist,
  16. deleteTrackFromPlaylist,
  17. // AddTrackFromLibToPlaylist,
  18. // playlistId,
  19. // playlist,
  20. // form
  21. // setCurrentTrack, currentTrack
  22. }) => {
  23. // const onDrop = useCallback(acceptedFiles => {
  24. // // Do something with the files
  25. // console.log(acceptedFiles)
  26. // }, [])
  27. // const {getRootProps, getInputProps} = useDropzone({onDrop})
  28. // console.log('currentTrack in AddTrack: ', currentTrack);
  29. let ref = useRef();
  30. const [isLoading, setIsLoading] = useState(false);
  31. //let formData = new FormData();
  32. const onDrop = useCallback((acceptedFiles) => {
  33. console.log(acceptedFiles)
  34. acceptedFiles.map((file) => {
  35. // function Upload(playlistId, playlist, form) {
  36. // setIsLoading(true);
  37. // let arrTracks = [];
  38. // playlist.tracks &&
  39. // playlist.tracks.map((item) => arrTracks.push({ ["_id"]: item._id }));
  40. // // }
  41. let formData = new FormData();
  42. formData.append("track", file);
  43. // Upload(playlistId, playlist, formData)
  44. // fetch("/track", {
  45. // method: "POST",
  46. // headers: localStorage.authToken
  47. // ? { Authorization: "Bearer " + localStorage.authToken }
  48. // : {},
  49. // //body: new FormData(form),
  50. // body: formData,
  51. // })
  52. // .then((res) => res.json()) //у чего есть then? у promise.
  53. // .then(async (track) => {
  54. // console.log("track: ", track);
  55. // await addTrackToPlaylist(playlistId, arrTracks, track._id);
  56. // setIsLoading(false);
  57. // });
  58. // }
  59. });
  60. })
  61. // }
  62. function Upload(playlistId, playlist, formData) {
  63. setIsLoading(true);
  64. let arrTracks = [];
  65. playlist.tracks &&
  66. playlist.tracks.map((item) => arrTracks.push({ ["_id"]: item._id }));
  67. fetch("/track", {
  68. method: "POST",
  69. headers: localStorage.authToken
  70. ? { Authorization: "Bearer " + localStorage.authToken }
  71. : {},
  72. //body: new FormData(form),
  73. body: formData,
  74. })
  75. .then((res) => res.json()) //у чего есть then? у promise.
  76. .then(async (track) => {
  77. console.log("track: ", track);
  78. await addTrackToPlaylist(playlistId, arrTracks, track._id);
  79. setIsLoading(false);
  80. });
  81. console.log("arrTracks in upload: ", arrTracks);
  82. }
  83. const { getRootProps, getInputProps } = useDropzone({ onDrop });
  84. return (
  85. <div className="my_tracks">
  86. <h2>My tracks in playlist {myPlaylist.name}</h2>
  87. <ul>
  88. {myPlaylist &&
  89. myPlaylist.tracks &&
  90. myPlaylist.tracks.map((track, index) => (
  91. <li key={index.toString()}>
  92. {track.originalFileName}
  93. <span
  94. className="adding-track"
  95. onClick={() => {
  96. console.log(index);
  97. deleteTrackFromPlaylist(
  98. localStorage.lastPLaylist,
  99. myPlaylist,
  100. index
  101. );
  102. }}
  103. >
  104. x
  105. </span>
  106. </li>
  107. ))}
  108. </ul>
  109. {/* <div classMane={"add"} {...getRootProps()}> */}
  110. <div className={"main__description__dropzone"} {...getRootProps()}>
  111. <h2>Add track</h2>
  112. {/* <Spin className="" spinning={isLoading} /> */}
  113. <input {...getInputProps()} />+
  114. </div>
  115. {/* </div> */}
  116. </div>
  117. );
  118. };
  119. const mapStateToProps = (state) => ({
  120. // newTrack: state.player.newTrack,
  121. });
  122. const mapDispatchtoProps = (dispatch) => ({
  123. addTrackToPlaylist: (idPlaylist, arrTracks, idTrack) =>
  124. dispatch(addTrackToPlaylist(idPlaylist, arrTracks, idTrack)),
  125. deleteTrackFromPlaylist: (idPlaylist, playlist, currentIndex) =>
  126. dispatch(deleteTrackFromPlaylist(idPlaylist, playlist, currentIndex)),
  127. });
  128. export default connect(mapStateToProps, mapDispatchtoProps)(AddTrack);