my-playlist-tracks-actions.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. import {call, put, select, takeEvery} from "redux-saga/effects";
  2. import {actionPromise, promiseWorker} from "../reducers/promiseReducer";
  3. import {backURL, gql} from "./index";
  4. import {actionAboutMe} from "./index";
  5. import {actionPlaylistFindByOwner} from "./index";
  6. export const actionCreatePlaylist = (name) =>
  7. ({type:'CREATE_PLAYLIST', name})
  8. export function* createPlaylistWorker (action) {
  9. let {name} = action
  10. yield call(promiseWorker,actionPromise('createPlaylist', gql(`mutation p($playlist:PlaylistInput) {
  11. PlaylistUpsert(playlist:$playlist) {
  12. _id
  13. }
  14. }`, {playlist: {name}})))
  15. yield put (actionPlaylistFindByOwner())
  16. }
  17. export function* createPlaylistWatcher() {
  18. yield takeEvery ('CREATE_PLAYLIST',createPlaylistWorker)
  19. }
  20. export const actionUploadTrackToPlaylist = (array) => {
  21. let fd = new FormData();
  22. fd.append("track", array);
  23. return actionPromise(
  24. "uploadFile",
  25. fetch(backURL+'/track', {
  26. method: "POST",
  27. headers: localStorage.authToken
  28. ? { Authorization: "Bearer " + localStorage.authToken }
  29. : {},
  30. body: fd,
  31. }).then((res) => res.json())
  32. );
  33. };
  34. export const actionFullUploadPlaylists = (array=[]) =>
  35. ({type:'FULL_UPLOAD', array})
  36. export function* fullUploadPlaylistsWorker (action) {
  37. const {array} = action
  38. console.log(array,'eeeeeeeee')
  39. let { route } = yield select()
  40. let playlistId = route.params?._id;
  41. let arr = []
  42. for (let i=0; i<array.length; i++) {
  43. if ('_id' in array[i]) {
  44. arr.push({_id:array[i]._id})
  45. }else {
  46. let result = yield call(promiseWorker,actionUploadTrackToPlaylist(array[i]));
  47. let trackId = result?._id
  48. arr.push({_id: trackId})
  49. }
  50. }
  51. yield put(actionSetTrackToPlaylist(playlistId, arr))
  52. yield put(actionAboutMe())
  53. }
  54. export function* fullUploadPlaylistsWatcher () {
  55. yield takeEvery ('FULL_UPLOAD',fullUploadPlaylistsWorker)
  56. }
  57. export const actionSetTrackToPlaylist = (playlistId,arr) =>
  58. ({type:'SET_TRACK_TO_PLAYLIST', playlistId,arr})
  59. export function* setTrackToPlaylistWorker (action) {
  60. const {playlistId,arr} = action
  61. yield call(
  62. promiseWorker,actionPromise('createPlaylist', gql(`mutation p($playlist:PlaylistInput) {
  63. PlaylistUpsert(playlist:$playlist) {
  64. _id
  65. }
  66. }`, {playlist: {_id: playlistId,tracks: arr}}))
  67. );
  68. console.log(playlistId,arr,'4topolu4')
  69. yield put (actionPlaylistById(playlistId))
  70. yield put(actionAboutMe());
  71. };
  72. export function* setTrackToPlaylistWatcher() {
  73. yield takeEvery ('SET_TRACK_TO_PLAYLIST', setTrackToPlaylistWorker)
  74. }
  75. export const actionPlaylistById = (_id) =>
  76. ({type:'PLAYLIST_BY_ID', _id})
  77. export function* playlistByIdWorker (action) {
  78. let {_id} = action
  79. yield call(promiseWorker,actionPromise('playlistById', gql(`query playlistById($q: String){
  80. PlaylistFindOne(query: $q){
  81. _id name owner {login} tracks {_id url originalFileName}
  82. }
  83. }`, { q: JSON.stringify([{ _id: _id}]) } )))
  84. }
  85. export function* playlistByIdWatcher() {
  86. yield takeEvery ('PLAYLIST_BY_ID',playlistByIdWorker)
  87. }