index.js 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  1. const getGQL = url =>
  2. (query, variables) =>
  3. fetch(url , {
  4. method: 'POST',
  5. headers: {
  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. let gql = getGQL("/graphql")
  12. let log = async(login, password) => {
  13. let query = `query login($login:String!, $password:String!) {
  14. login(login: $login, password: $password)
  15. }`
  16. let variables = {"login":login, "password":password}
  17. let token = await gql(query, variables)
  18. localStorage.authToken = token.data.login
  19. console.log(token)
  20. return token.data.login
  21. }
  22. let reg = async(login, password) => {
  23. let query = `mutation reg($login:String!, $password:String!) {
  24. createUser(
  25. login: $login,
  26. password: $password
  27. ){
  28. _id
  29. }}`
  30. let variables = {"login":login, "password":password}
  31. let res = await gql(query, variables)
  32. return res
  33. }
  34. export const actionAuthLogout = () => ({type: 'LOGOUT'})
  35. const actionAuthLogin = token => ({type: 'LOGIN', token})
  36. const actionLogin = (login, password) => actionPromise("login", log(login, password))
  37. const actionReg = (login, password) => actionPromise("reg", reg(login, password))
  38. export const actionFullLogin = (login, password) => async(dispatch) => {
  39. let result = await dispatch(actionLogin(login, password))
  40. if (result !== null){
  41. dispatch(actionAuthLogin(result))
  42. } else {
  43. alert ('That user doesn’t exist!')
  44. localStorage.clear()
  45. }
  46. }
  47. export const actionFullRegister = (login, password) => async(dispatch) => {
  48. let result = await dispatch(actionReg(login, password))
  49. if(result?.data?.createUser !== null) {
  50. dispatch(actionFullLogin(login, password))
  51. } else {
  52. alert('Such a user already exists!')
  53. }
  54. }
  55. // let ChangePass = async(login, password, newPassword) => {
  56. // let query = `mutation changePass($login:String!, $password:String!, $newPassword:String!) {
  57. // changePassword(
  58. // login: $login,
  59. // password: $password,
  60. // newPassword: $newPassword
  61. // ){
  62. // _id
  63. // }`
  64. // let variables = {"login":login, "password":password, "newPassword":newPassword}
  65. // let res = await gql(query, variables)
  66. // return res
  67. // }
  68. // export const actionchangePass = (login, password, newPassword) => actionPromise("changePass", ChangePass(login, password, newPassword))
  69. let SnippetUpsert = async (title, description, files) => {
  70. let query = `mutation SnippetUpsert($snippet:SnippetInput) {
  71. SnippetUpsert(snippet:$snippet){
  72. _id
  73. }
  74. }`
  75. let variables = { snippet: { title, description, files:files }};
  76. let res = await gql(query, variables)
  77. return res
  78. }
  79. export const actionSnippetUpsert = (title, description, files) => actionPromise("SnippetUpsert", SnippetUpsert(title, description, files))
  80. const UserFind = async (_id) => {
  81. let query = `UserFind(query:'[{}])' {
  82. UserFind(query:$query) {
  83. _id login avatar{
  84. url
  85. }
  86. }
  87. }`
  88. let variables = { query: JSON.stringify([{ _id }])}
  89. let res = await gql(query, variables)
  90. return res
  91. }
  92. export const actionUserFind = (_id) => actionPromise("UserFind", UserFind(_id))
  93. export const imgFind = async () => {
  94. return await gql(`query ImageFind{
  95. ImageFind(query:"[{}]"){
  96. url owner{
  97. nick
  98. }
  99. }
  100. }`)
  101. }
  102. export const actionImgFind = () => async (dispatch) => {
  103. return await dispatch(actionPromise("img", imgFind()));
  104. }
  105. const setAva = async (idUser, id) => {
  106. let query = `mutation setAvatar($idUser:String , $idAvatar:ID){
  107. UserUpsert(user:{_id: $idUser, avatar: {_id: $idAvatar}}){
  108. _id, avatar{
  109. url
  110. }
  111. }
  112. }`
  113. let variables = { idUser: idUser, idAvatar: id }
  114. let res = await gql(query, variables)
  115. return res
  116. }
  117. export const actionSetAva = (idUser, id) => actionPromise("setAva", setAva(idUser, id))
  118. const actionPending = name => ({type: 'PROMISE', status: 'PENDING', name})
  119. const actionResolved = (name, payload) => ({type: 'PROMISE', status: 'RESOLVED', name, payload})
  120. const actionRejected = (name, error) => ({type: 'PROMISE', status: 'REJECTED', name, error})
  121. const actionPromise = (name, promise) =>
  122. async dispatch => {
  123. dispatch(actionPending(name))
  124. try{
  125. let payload = await promise
  126. dispatch(actionResolved(name, payload))
  127. return payload
  128. }
  129. catch(error){
  130. dispatch(actionRejected(name, error))
  131. }
  132. }
  133. let up = async(file) => {
  134. let formData = new FormData()
  135. formData.append('photo', file)
  136. return fetch('/upload', {
  137. method: "POST",
  138. headers: localStorage.authToken ? {Authorization: 'Bearer ' + localStorage.authToken} : {},
  139. body: formData
  140. }).then(res => res.json())
  141. }
  142. export const actionUploadFile = (file) => actionPromise("upload", up(file))
  143. export const actionFullAvatar = (file) => async (dispatch) => {
  144. let result = await dispatch(actionUploadFile(file));
  145. await dispatch(actionSetAva(result._id));
  146. await dispatch(actionUserFind());
  147. }
  148. // const snippetByOwner = async (id) => {
  149. // let query = `query snippetFind($query:String){
  150. // SnippetFind(query:$query){
  151. // owner{
  152. // _id
  153. // }
  154. // title description _id files {
  155. // type text name
  156. // }
  157. // }
  158. // }`;
  159. // let variables = {
  160. // query: JSON.stringify([{___owner: id } , {sort:[{_id: -1}]}])
  161. // };
  162. // let res = gql(query, variables);
  163. // return res;
  164. // }
  165. // const snippetById = async(id) => {
  166. // let query = `query snippetFind($query:String){
  167. // SnippetFind(query:$query){
  168. // owner{
  169. // _id
  170. // }
  171. // title description _id files {
  172. // type text name
  173. // }
  174. // }
  175. // }`;
  176. // let variables = {
  177. // query: JSON.stringify([{_id: id }])
  178. // };
  179. // let res = gql(query, variables);
  180. // return res;
  181. // }
  182. // let snippetAdd = async (title, description, files , idSnippet) => {
  183. // let query = `mutation newSnippet($snippet:SnippetInput) {
  184. // SnippetUpsert(snippet:$snippet){
  185. // _id
  186. // }
  187. // }`;
  188. // let qVariables = { snippet: { title, description, files } ,_id: idSnippet };
  189. // let res = await gql(query, qVariables);
  190. // return res;
  191. // };
  192. // export const actionSnippetAdd =
  193. // (title, description, files , idSnippet) => async (dispatch) => {
  194. // return await dispatch(
  195. // actionPromise("addSnippet",
  196. // snippetAdd(title, description, files , idSnippet))
  197. // );
  198. // };
  199. // export const actionSnippetFindByOwner =
  200. // (id) => async (dispatch) => {
  201. // return await dispatch(
  202. // actionPromise("findSnippet",
  203. // snippetByOwner(id))
  204. // );
  205. // };
  206. // export const actionSnippetById =
  207. // (id) => async (dispatch) => {
  208. // return await dispatch(
  209. // actionPromise("findSnippetById",
  210. // snippetById(id))
  211. // );
  212. // };