index.js 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. const getGQL = url =>
  2. (query, variables={}) => fetch(url, {
  3. method: 'POST',
  4. headers: {
  5. //Accept: "application/json",
  6. "Content-Type": "application/json",
  7. ...(localStorage.authToken ? {Authorization: "Bearer " + localStorage.authToken } : {})
  8. },
  9. body: JSON.stringify({query, variables})
  10. }).then(res => res.json())
  11. export const actionPending = name => ({type: 'PROMISE', status: 'PENDING', name})
  12. export const actionResolved = (name, payload) => ({type: 'PROMISE', status: 'RESOLVED', name, payload})
  13. export const actionRejected = (name, error) => ({type: 'PROMISE', status: 'REJECTED', name, error})
  14. let shopGQL = getGQL('/graphql')
  15. export const actionPromise = (name, promise) =>
  16. async dispatch => {
  17. dispatch(actionPending(name))
  18. try{
  19. let payload = await promise
  20. dispatch(actionResolved(name, payload))
  21. return payload
  22. }
  23. catch(error){
  24. dispatch(actionRejected(name, error))
  25. }
  26. }
  27. const actionAuthLogin = token => ({type:'LOGIN', token})
  28. export const actionAuthLogout = () => ({type:"LOGOUT"})
  29. let log = async (login, password) => {
  30. let query = `query log($l: String!, $p: String!) {
  31. login(login: $l, password: $p)
  32. }`
  33. let variables = {
  34. "l": login,
  35. "p": password
  36. }
  37. let token = await shopGQL(query, variables)
  38. console.log(token)
  39. return token.data.login
  40. }
  41. const actionLogin = (login, password) => actionPromise("login", log(login, password))
  42. export const actionFullLogin = (login, password) => {
  43. return async (dispatch) => {
  44. let result = await dispatch(actionLogin(login, password))
  45. if(result)
  46. dispatch(actionAuthLogin(result))
  47. window.location.reload();
  48. }
  49. }
  50. const actionRegister = (login,password) =>
  51. actionPromise('reg',shopGQL(`mutation reg($login: String!, $password: String!){
  52. createUser(login:$login, password: $password){
  53. _id login
  54. }
  55. }`,{login,password}))
  56. const actionAvaAdd = (ava,user) =>
  57. actionPromise('ava',shopGQL(`mutation setAvatar{
  58. UserUpsert(user:{_id: "myid", avatar: {_id: "image id from fetch"}}){
  59. _id, avatar{
  60. _id
  61. }
  62. }
  63. }`,{ava,user}))
  64. export const actionFullRegister = (login,password) =>
  65. async dispatch => {
  66. let payload = await dispatch(actionRegister(login,password))
  67. if(payload.data.createUser != null){
  68. await dispatch(actionFullLogin(login,password))
  69. // await dispatch(actionAvaAdd(avatar,_id))
  70. }
  71. else {
  72. console.log("exiciting user")
  73. }
  74. }
  75. export const actionTypeAd = () =>
  76. actionPromise('AdFind', shopGQL(`
  77. query Ad($query:String){
  78. AdFind(query:$query){
  79. _id
  80. title
  81. description
  82. price
  83. images {
  84. url
  85. }
  86. }
  87. }
  88. `, {query: JSON.stringify([{}])}))
  89. export const actionTypeAdOne = (id) =>
  90. actionPromise('AdFindOne',shopGQL(`
  91. query Ad($query:String){
  92. AdFindOne(query:$query){
  93. _id
  94. title
  95. description
  96. price
  97. images {
  98. url
  99. }
  100. }
  101. }`,{query: JSON.stringify([{_id:id}])}))
  102. // export const actionUploadFile = (file) =>{
  103. // let fd = new FormData
  104. // fd.append('photo', file)
  105. // return actionPromise('forma', fetch('/upload', {
  106. // method: "POST",
  107. // headers: localStorage.authToken ? {Authorization: 'Bearer ' + localStorage.authToken} : {},
  108. // body: fd
  109. // }).then(res => res.json()))
  110. // }
  111. export const actionUpLoadAva = (ava,user) =>
  112. async dispatch => {
  113. const formData = new FormData();
  114. formData.set("avatar", ava);
  115. let sendData = await dispatch(actionPromise('send', fetch(`/upload`,
  116. {
  117. method: 'POST',
  118. headers: localStorage.authToken ? { Authorization: 'Bearer ' + localStorage.authToken } : {},
  119. body: formData
  120. })))
  121. let responce = await dispatch(actionPromise('sendData', sendData.json()))
  122. console.log(user)
  123. let AddAva = dispatch(actionFullRegister(responce._id,user))
  124. console.log(AddAva)
  125. }