mfdok43 2 yıl önce
ebeveyn
işleme
61dc0ef210

+ 37 - 17
src/actions/index.js

@@ -248,26 +248,29 @@ export const actionUploadImage = (file) => {
 export const actionFullUploadTracks = (file) =>
     ({type:'FULL_UPLOAD', file})
 
-// export function* fullUploadTracksWorker (action) {
-//     const {file} = action
-//     yield put (actionUploadImage(file))
-//     yield put (actionSetTrackToPlaylist())
-// }
-//
-// export function* fullUploadTracksWatcher () {
-//     yield takeEvery ('FULL_UPLOAD',fullUploadTracksWorker)
-// }
-//
-export const actionSetTrackToPlaylist = (file) =>
-    ({type:'SET_TRACK_TO_PLAYLIST', file})
+export function* fullUploadTracksWorker (action) {
+    const {file} = action
+    let { route } = yield select()
+    let playlistId = route.params?._id;
+    if (file) {
+        let result = yield call(promiseWorker,actionUploadTrack(file));
+        let trackId = result?._id
+        yield put(actionSetTrackToPlaylist(playlistId, trackId))
+    }
+    yield put(actionAboutMe())
+}
+
+export function* fullUploadTracksWatcher () {
+    yield takeEvery ('FULL_UPLOAD',fullUploadTracksWorker)
+}
+
+
+export const actionSetTrackToPlaylist = (playlistId,trackId) =>
+    ({type:'SET_TRACK_TO_PLAYLIST', playlistId,trackId})
 
 
 export function* setTrackToPlaylistWorker (action) {
-    const {file} = action
-    let result = yield call(promiseWorker,actionUploadTrack(file));
-    let trackId = result._id;
-    let { route } = yield select();
-    let playlistId = route.params?._id
+    const {playlistId,trackId} = action
     yield call(
         promiseWorker,actionPromise('createPlaylist', gql(`mutation p($playlist:PlaylistInput) {
          PlaylistUpsert(playlist:$playlist) {
@@ -285,6 +288,23 @@ export function* setTrackToPlaylistWatcher() {
 
 
 
+// export function* setTrackToPlaylistWorker (action) {
+//     const {file} = action
+//     let result = yield call(promiseWorker,actionUploadTrack(file));
+//     let trackId = result._id;
+//     let { route } = yield select();
+//     let playlistId = route.params?._id
+//     yield call(
+//         promiseWorker,actionPromise('createPlaylist', gql(`mutation p($playlist:PlaylistInput) {
+//          PlaylistUpsert(playlist:$playlist) {
+//          _id
+//          }
+//       }`, {playlist: {_id: playlistId,tracks:{_id: trackId }}}))
+//     );
+//     yield put(actionAboutMe());
+// };
+
+
 
 
 

+ 5 - 3
src/pages/header/header-build.js

@@ -11,6 +11,8 @@ import {actionFullLogin, gql} from "../../actions";
 import {takeEvery, select, call,put} from "redux-saga/effects";
 import {promiseWorker} from "../../reducers/promiseReducer";
 import {CTrackSearch} from "../search";
+import {CProtectedRoute} from "../../reducers/routeReducer";
+import {Aside} from "../main";
 
 
 export const actionSetUserPassword = (password) =>
@@ -55,9 +57,9 @@ export const Header = () =>
         <Link to={`/mymusic`}> <h2>Моя музыка</h2></Link>
         <h2><CTrackSearch /></h2>
         <Switch>
-            <Route path="/login" component={CLoginForm}/>
-            <Route path="/registration" component={CRegForm}/>
-            <Route path='*' component={CLoginButtons} />
+            <CProtectedRoute roles={["anon", "user"]} path="/login" component={CLoginForm}/>
+            <CProtectedRoute roles={["anon", "user"]} path="/registration" component={CRegForm}/>
+            <CProtectedRoute roles={["anon", "user"]} path='*' component={CLoginButtons} exact/>
         </Switch>
     </header>
 

+ 2 - 3
src/pages/trackdropzone.js

@@ -1,6 +1,6 @@
 import {useCallback} from "react";
 import {store} from "../reducers";
-import {actionSetTrackToPlaylist, actionUploadTrack} from "../actions";
+import {actionFullUploadTracks} from "../actions";
 import {useDropzone} from "react-dropzone";
 import {connect} from "react-redux";
 
@@ -8,7 +8,6 @@ function TrackDropZone({ onLoad }) {
     const onDrop = useCallback((acceptedFiles) => {
         // Do something with the files
         onLoad(acceptedFiles[0]);
-        store.dispatch(actionSetTrackToPlaylist(acceptedFiles[0]))
     }, []);
     const { getRootProps, getInputProps, isDragActive } = useDropzone({ onDrop });
 
@@ -27,4 +26,4 @@ function TrackDropZone({ onLoad }) {
 }
 
 
-export const CTrackDropZone = connect (null, {onLoad: actionUploadTrack}) (TrackDropZone)
+export const CTrackDropZone = connect (null, {onLoad: actionFullUploadTracks}) (TrackDropZone)

+ 4 - 1
src/reducers/routeReducer.js

@@ -4,6 +4,7 @@ import {takeEvery, call} from 'redux-saga/effects';
 import {queries} from "../actions";
 import {connect}   from 'react-redux';
 import {Route, Redirect} from 'react-router-dom';
+import {useEffect} from "react";
 
 export function routeReducer(state={}, {type, match}) {
     if (type === 'ROUTE') {
@@ -26,7 +27,9 @@ export function* routeWatcher() {
 
 const RRoute = ({ action, component:Component, ...routeProps}) => {
     const WrapperComponent = (componentProps) => {
-        action(componentProps.match)
+        useEffect(() =>{
+            action(componentProps.match)
+        })
         return <Component {...componentProps} />
     }
     return <Route {...routeProps} component={WrapperComponent} />

+ 3 - 2
src/reducers/store.js

@@ -12,9 +12,10 @@ import {
     actionAboutMe,
     playlistFindByOwnerWatcher,
     setTrackToPlaylistWatcher,
-    // fullUploadTracksWatcher,
+    fullUploadTracksWatcher,
     actionFindMyTracks,
 } from "../actions";
+
 import {localStoredReducer} from "./localStoredReducer";
 import createSagaMiddleware from 'redux-saga';
 import {all} from 'redux-saga/effects';
@@ -46,7 +47,7 @@ function* rootSaga(){
          routeWatcher(),
           playlistFindByOwnerWatcher(),
           setTrackToPlaylistWatcher(),
-        // fullUploadTracksWatcher(),
+         fullUploadTracksWatcher(),
          // setUserPasswordWatcher(),
     ])
 }