Ivan Asmer 5 jaren geleden
bovenliggende
commit
d86fc1fa56
4 gewijzigde bestanden met toevoegingen van 69 en 32 verwijderingen
  1. 1 1
      package.json
  2. 11 22
      src/App.js
  3. 26 6
      src/actions/index.js
  4. 31 3
      src/reducers/index.js

+ 1 - 1
package.json

@@ -34,5 +34,5 @@
       "last 1 safari version"
     ]
   },
-  "proxy": "http://localhost:4000/"
+  "proxy": "http://localhost:5002/"
 }

+ 11 - 22
src/App.js

@@ -13,13 +13,6 @@ import {actionPosts, actionLogin} from './actions'
 
 const history = createHistory()
 
-const SearchField = connect(null, {onChange: actionSearch})(({onChange}) => {
-    const [text, setText] = useState('')
-    return (
-        <input value={text} onChange={e => (setText(e.target.value), onChange(e.target.value))}/>
-    )
-})
-
 const Post = ({post}) =>
 <div>
     <h2>{post.title}</h2>
@@ -40,29 +33,25 @@ const PageMain = () =>
     <CPostFeed />
 </>
 
-const LoginForm = ({onLogin}) =>
-<>
-    <input type='text' />
-    <input type='password' />
-    <button onClick={() => onLogin('admin', '123')}>Login</button>
-</>
-
+const LoginForm = ({onLogin}) => {
+    const [login, setLogin] = useState("")
+    const [password, setPassword] = useState("")
+    return (
+            <div>
+                <input type='text' value={login} onChange={e => setLogin(e.target.value)} />
+                <input type='password' value={password} onChange={e => setPassword(e.target.value)} />
+                <button onClick={() => onLogin(login, password)}>Login</button>
+            </div>
+        )
+}
 const CLoginForm = connect(null, {onLogin: actionLogin})(LoginForm)
 
 
-
-const SearchResult = connect(s => (console.log(s), ({payload: s.searchResult && 
-                                                              s.searchResult.payload && 
-                                                              s.searchResult.payload.payload && 
-                                                              s.searchResult.payload.payload.GoodFind})))(({payload}) => <h1>{console.log(payload)}{payload && payload.map(({_id, name}) => <div>{name}</div>)}</h1>)
-
 store.dispatch(actionPosts())
 
 export default () => {
     return (
         <Provider store={store}>
-            <SearchField />
-            <SearchResult />
             <CLoginForm />
             <Router history={history}>
                 <Route path="/" component={PageMain} />

+ 26 - 6
src/actions/index.js

@@ -14,13 +14,15 @@ export const actionPromise = (name, promise) => {
 
     return async dispatch => {
         dispatch(actionPending())
+        let payload
         try {
-            let payload = await promise
+            payload = await promise
             dispatch(actionResolved(payload))
         }
         catch (e){
             dispatch(actionRejected(e))
         }
+        return payload;
     }
 }
 
@@ -33,9 +35,27 @@ export const actionPosts = () => {
 }
 
 
-export const actionLogin = (login,password) => {
-    console.log(login, password)
-    return actionPromise('posts', gql.request(`query login($login: String!, $password: String!){
-          login(username: $login, password: $password)
-        }`, {login, password}))
+export const actionLogin = (login,password) => 
+    async dispatch => {
+        console.log(login, password)
+        let result = await dispatch(actionPromise('login', gql.request(`query login($login: String!, $password: String!){
+              login(username: $login, password: $password)
+            }`, {login, password})))
+        if (result){
+            dispatch(actionAuthLogin(result.login))
+        }
+    }
+
+
+export const actionAuthLogin = (jwt) => ({
+    type: "LOGIN",
+    jwt
+})
+
+
+export const actionAuthLogout = () => {
+    history.push('/')
+    return {
+        type: "LOGOUT",
+    }
 }

+ 31 - 3
src/reducers/index.js

@@ -1,5 +1,6 @@
 import {createStore, applyMiddleware, combineReducers} from 'redux';
 import thunk from 'redux-thunk';
+import { actionAuthLogin } from '../actions'
 
 
 const reducers = {
@@ -15,13 +16,40 @@ const reducers = {
         }
         return state;
     },
-    //auth(){ //....
-
-    //}
+    auth(state, action){ //....
+        if (state === undefined){
+            //добавить в action token из localStorage, и проимитировать LOGIN (action.type = 'LOGIN')
+            return {}
+        }
+        if (action.type === 'LOGIN'){
+            console.log('ЛОГИН')
+            //+localStorage
+            //jwt_decode
+//            return {token: action.jwt, payload: jwt_decode(action.jwt)}
+        }
+        if (action.type === 'LOGOUT'){
+            console.log('ЛОГАУТ')
+            //-localStorage
+            //вернуть пустой объект
+            return {}
+        }
+        return state
+    }
 }
+//{
+//    promise: {}
+//}
 
 let store = createStore(combineReducers(reducers), applyMiddleware(thunk))
 
+store.subscribe(() => console.log(store.getState()))
+//store.subscribe(() => {
+    //const state = store.getState()
+    //if (state.promise && state.promise.login && state.promise.login.payload){
+        //store.dispatch(actionAuthLogin(state.promise.login.payload.login))
+    //}
+//})
+
 const delay = ms => new Promise(ok => setTimeout(() => ok(ms), ms))