index.js 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. import store from "../reducers"
  2. const getGQL = url =>
  3. (query, variables={}) => fetch(url, {
  4. method: 'POST',
  5. headers: {
  6. //Accept: "application/json",
  7. "Content-Type": "application/json",
  8. ...(localStorage.authToken ? {Authorization: "Bearer " + localStorage.authToken } : {})
  9. },
  10. body: JSON.stringify({query, variables})
  11. }).then(res => res.json())
  12. let gql = getGQL("/graphql")
  13. export const actionPending = name => ({type: "PROMISE" ,status:"PENDING", name})
  14. export const actionResolved = (name,payload) => ({type: "PROMISE" ,status:"RESOLVED", name,payload})
  15. export const actionRejected = (name,error) => ({type: "PROMISE" ,status:"REJECTED", name,error})
  16. export const actionPromise = (name, promise) =>
  17. async dispatch => {
  18. dispatch(actionPending(name))
  19. try {
  20. let payload = await promise
  21. dispatch(actionResolved(name , payload))
  22. return payload
  23. }
  24. catch(error){
  25. dispatch(actionRejected(name , error))
  26. }
  27. }
  28. let log = async(login , password) => {
  29. let query = ` query log($l:String!,$p:String!) {
  30. login(login:$l,password:$p)
  31. }`
  32. let qVariables = {
  33. "l": login,
  34. "p": password
  35. }
  36. let result = await gql(query,qVariables)
  37. return result
  38. }
  39. let reg = async(login,password) => {
  40. let query = `mutation reg($l:String! , $p:String!) {
  41. createUser(login:$l,password:$p){
  42. _id login
  43. }
  44. }`
  45. let qVariables = {
  46. "l": login,
  47. "p": password
  48. }
  49. let result = await gql(query,qVariables)
  50. return result
  51. }
  52. export const actionAuthLogin = token => ({type:'LOGIN', token})
  53. export const actionAuthLogout = () => ({type:'LOGOUT'})
  54. export const actionFullLogin = (login , password) => async dispatch => {
  55. let result = await dispatch(actionPromise("login",log(login,password)))
  56. console.log(result)
  57. if (result?.data?.login !== null){
  58. dispatch(actionAuthLogin(result.data.login))
  59. }
  60. else {
  61. alert ('такого пользователя не существует')
  62. }
  63. }
  64. export const actionRegister = (login,password) => async dispatch => {
  65. return await dispatch (actionPromise('register' , reg(login,password)))
  66. }
  67. export const actionFullRegister = (login,password) => async dispatch => {
  68. let result = await dispatch (actionRegister(login,password))
  69. if (result?.data?.createUser !== null) {
  70. await dispatch (actionFullLogin(login,password))
  71. }
  72. else {
  73. alert("Такой пользователь уже есть")
  74. }
  75. }
  76. export const imgFind = async() => {
  77. return await gql(`query fhbg{
  78. ImageFind(query:"[{}]"){
  79. url owner{
  80. nick
  81. }
  82. }
  83. }`)
  84. }
  85. const userFind = async(id) => {
  86. let query = `query userOne {
  87. UserFindOne(query:"[{\"_id\":\"6151892f68554b3e33cd8134\"}]"){
  88. _id avatar{
  89. url
  90. }
  91. }
  92. }`
  93. let qVariables = {id}
  94. let res = await gql(query,qVariables)
  95. console.log(res)
  96. return res
  97. }
  98. let ava = async (idUser , id) => {
  99. let query = `mutation setAvatar{
  100. UserUpsert(user:{_id: "6151892f68554b3e33cd8134", avatar: {_id: "61518b0b68554b3e33cd813c"}}){
  101. _id, avatar{
  102. _id
  103. }
  104. }
  105. }`
  106. let qVariables = {idUser , id}
  107. let res = await gql(query, qVariables)
  108. return res
  109. }
  110. export const actionImgFind = () => async dispatch => {
  111. return await dispatch(actionPromise('img'),imgFind())
  112. }
  113. export const actionFindUser = () => async dispatch => {
  114. return await dispatch (actionPromise('findUser'), userFind(store.getState().auth.payload.sub.id) )
  115. }
  116. export const actionSetAvatar = (idUser , id) => async dispatch => {
  117. return await dispatch (actionPromise('setAvatar') , ava(idUser , id))
  118. }
  119. export const actionUploadFile = (files) => async dispatch => {
  120. let fd = new FormData()
  121. fd.append('photo' , files)
  122. return await dispatch (actionPromise('upload', fetch('/upload', {
  123. method: "POST",
  124. headers: localStorage.authToken ? {Authorization: 'Bearer ' + localStorage.authToken} : {},
  125. body: fd
  126. }).then(res => res.json())))
  127. }
  128. export const actionFullAvatar = (idUser , id) => async dispatch => {
  129. let result = await dispatch (actionUploadFile())
  130. await dispatch (actionSetAvatar(idUser,id))
  131. }