index.js 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. const getGQL = url =>
  2. (query, variables) => fetch(url, {
  3. method: 'POST',
  4. headers: {
  5. "Content-Type": "application/json",
  6. ...(localStorage.authToken ? {"Authorization": "Bearer " + localStorage.authToken} : {})
  7. },
  8. body: JSON.stringify({query, variables})
  9. }).then(res => res.json())
  10. .then(data => {
  11. if (data.data){
  12. return Object.values(data.data)[0]
  13. }
  14. else throw new Error(JSON.stringify(data.errors))
  15. })
  16. const backendURL = 'http://hipstagram.asmer.fs.a-level.com.ua';
  17. const gql = getGQL(backendURL + '/graphql');
  18. export const actionPromise = (name,promise) =>{
  19. const actionPending = name => ({name,type:"PROMISE",status:'PENDING'})
  20. const actionFulfiled = (name,payload) =>({name,type:"PROMISE",status:'FULFILLED',payload})
  21. const actionRejected = (name,error) => ({name,type:"PROMISE",status:'REJECTED',error})
  22. return async dispatch => {
  23. dispatch(actionPending(name))
  24. try{
  25. let payload = await promise
  26. dispatch(actionFulfiled(name,payload))
  27. return payload
  28. }
  29. catch(e){
  30. dispatch(actionRejected(name,e))
  31. }
  32. }
  33. }
  34. export const actionAuthLogin = (tokennn) =>({type:'AUTH_LOGIN',token:tokennn})
  35. export const actionAuthLogout= () => ({type: 'AUTH_LOGOUT'})
  36. export const actionFullRegister = (Login,password) =>
  37. actionPromise('fullRegister', gql(`mutation register($Login:String,$password:String){
  38. UserUpsert(user:{login:$Login,password:$password}){
  39. _id login
  40. }
  41. }`,{Login: Login, password: password}))
  42. export const actionFullLogin = (login,password) => async (dispatch) => {
  43. const tokennn = await dispatch(
  44. actionPromise('fullLogin', gql(`query login($login:String!,$password:String!){
  45. login(login:$login,password:$password)
  46. }`,{login:login,password:password}))
  47. );
  48. await dispatch(actionAuthLogin(tokennn));
  49. }