index.js 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. import {actionPromise} from '../reducers'
  2. import {actionAuthLogin, actionAuthLogout} from '../reducers'
  3. import {store} from "../reducers";
  4. import {connect} from "react-redux";
  5. const getGQL = url =>
  6. async (query, variables = {}) => {
  7. let obj = await fetch(url, {
  8. method: 'POST',
  9. headers: {
  10. "Content-Type": "application/json",
  11. Authorization: localStorage.authToken ? 'Bearer ' + localStorage.authToken : {},
  12. },
  13. body: JSON.stringify({ query, variables })
  14. })
  15. let a = await obj.json()
  16. if (!a.data && a.errors)
  17. throw new Error(JSON.stringify(a.errors))
  18. return a.data[Object.keys(a.data)[0]]
  19. }
  20. export const backURL = 'http://player.asmer.fs.a-level.com.ua'
  21. export const gql = getGQL(backURL + '/graphql');
  22. export const actionLogin = (login, password) => {
  23. return actionPromise(
  24. "login",
  25. gql(
  26. `query log($login:String!, $password:String!) {
  27. login(login:$login, password:$password)
  28. }`,
  29. {login, password }
  30. )
  31. );
  32. };
  33. export const actionFullLogin = (login, password) =>
  34. async function i(dispatch) {
  35. let token = await dispatch(actionLogin(login, password));
  36. if (token) {
  37. dispatch(actionAuthLogin(token));
  38. dispatch(actionAboutMe())
  39. }
  40. }
  41. export const actionFullReg = (login, password) =>
  42. async function a(dispatch) {
  43. try {
  44. await dispatch(actionReg(login, password));
  45. } catch (e) {
  46. return 0;
  47. }
  48. await dispatch(actionFullLogin(login, password));
  49. }
  50. export const actionReg = (login, password) => {
  51. return actionPromise(
  52. "reg",
  53. gql(
  54. `mutation reg($l: String!, $p: String!){
  55. createUser(login: $l, password:$p){
  56. _id login
  57. }
  58. }`,
  59. { l: login, p: password }
  60. )
  61. );
  62. };
  63. export const actionUserFind = () => actionPromise('userFind', gql(`query {
  64. UserFind(query: "[{}]"){
  65. _id login
  66. }
  67. }`))
  68. export const actionTrackFindByOwner = (_id) => actionPromise('trackFindByOwner1', gql(`query trackFindByOwner($q: String){
  69. TrackFind(query: $q){
  70. _id url originalFileName
  71. }
  72. }`, { q: JSON.stringify([{ ___owner: _id }]) }))
  73. export const actionFindMyTracks = () =>
  74. actionPromise('findMyTracks1', gql(`query findMyTracks($q: String){
  75. TrackFind(query: $q){
  76. _id url originalFileName
  77. }
  78. }`, { q: JSON.stringify([{ ___owner: "61cda244e9472933a6785efc" }]) }))
  79. // const CactionFindMyTracks = connect (state => ({myId: state.auth?.payload.sub.id}))(actionFindMyTracks)
  80. export const actionUserFindOne = (_id, name = "userFindOne") =>
  81. actionPromise(
  82. name,
  83. gql(
  84. `query userFindOne($myid: String) {
  85. UserFindOne(query: $myid) {
  86. _id createdAt login nick avatar {url}
  87. }
  88. }`,
  89. { myid: JSON.stringify([{ _id }]) }
  90. )
  91. );
  92. export const actionAboutMe = () => async (dispatch, getState) => {
  93. let { auth } = getState();
  94. let id = auth?.payload?.sub.id;
  95. if (id) {
  96. await dispatch(actionUserFindOne(id, "aboutMe"));
  97. }
  98. };
  99. export const actionUploadImage = (file) => {
  100. let fd = new FormData();
  101. fd.append("photo", file);
  102. return actionPromise(
  103. "uploadFile",
  104. fetch('http://player.asmer.fs.a-level.com.ua/upload', {
  105. method: "POST",
  106. headers: localStorage.authToken
  107. ? { Authorization: "Bearer " + localStorage.authToken }
  108. : {},
  109. body: fd,
  110. }).then((res) => res.json())
  111. );
  112. };
  113. export const actionUploadTrack = (file) => {
  114. let fd = new FormData();
  115. fd.append("track", file);
  116. return actionPromise(
  117. "uploadFile",
  118. fetch('http://player.asmer.fs.a-level.com.ua/track', {
  119. method: "POST",
  120. headers: localStorage.authToken
  121. ? { Authorization: "Bearer " + localStorage.authToken }
  122. : {},
  123. body: fd,
  124. }).then((res) => res.json())
  125. );
  126. };
  127. export const actionSetAvatar = (file) => async (dispatch, getState) => {
  128. let result = await dispatch(actionUploadImage(file));
  129. let { auth } = getState();
  130. let imageId = result._id;
  131. let userId = auth?.payload?.sub?.id;
  132. await dispatch(
  133. actionPromise(
  134. "setAvatar",
  135. gql(
  136. `mutation setAva($userId: String, $imageId: ID){
  137. UserUpsert(user:{_id: $userId, avatar: {_id: $imageId}}){_id}}`,
  138. { userId: userId, imageId: imageId }
  139. )
  140. )
  141. );
  142. await dispatch(actionAboutMe());
  143. };
  144. store.dispatch(actionAboutMe())