index.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. import { states } from "../App";
  2. export const skipValue = 30;
  3. export const jwtDecode = (token) => {
  4. try {
  5. let arrToken = token.split(".");
  6. let base64Token = atob(arrToken[1]);
  7. return JSON.parse(base64Token);
  8. } catch (e) {
  9. console.log("Error JWT: " + e);
  10. }
  11. };
  12. export const getGQL =
  13. (url) =>
  14. async (query, variables = {}, skip = false) => {
  15. let obj = await fetch(url, {
  16. method: "POST",
  17. headers: {
  18. "Content-Type": "application/json",
  19. ...(localStorage.authToken && !skip
  20. ? { Authorization: "Bearer " + localStorage.authToken }
  21. : {}),
  22. },
  23. body: JSON.stringify({ query, variables }),
  24. });
  25. let a = await obj.json();
  26. if (!a.data && a.errors) throw new Error(JSON.stringify(a.errors));
  27. return a.data[Object.keys(a.data)[0]];
  28. };
  29. export const backURL = "http://player.asmer.fs.a-level.com.ua";
  30. export const gql = getGQL(backURL + "/graphql");
  31. export function validateEmail(email) {
  32. return /[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/.test(
  33. email.toLowerCase()
  34. );
  35. }
  36. export function validatePassword(password) {
  37. return /^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9]).{6,}/.test(password);
  38. }
  39. export function validateNickname(nick) {
  40. return /^[a-z0-9_-]{3,8}$/.test(nick);
  41. }
  42. export const delay = (ms) => new Promise((ok) => setTimeout(() => ok(ms), ms));
  43. export const queries = {
  44. "/profile/:_id": (match) => ({
  45. name: `${
  46. match.params._id === states?.auth?.payload?.sub?.id
  47. ? "myUser"
  48. : "anotherUser"
  49. }`,
  50. query: `query findUser($q:String){
  51. UserFindOne(query:$q){
  52. _id login nick createdAt avatar {
  53. _id url
  54. }
  55. }
  56. }
  57. `,
  58. variables: { q: JSON.stringify([{ ___owner: match.params._id }]) },
  59. }),
  60. "/myplaylist/:_id": (match) => ({
  61. name: "playlistTracks",
  62. query: `query playlistTracks($q:String) {
  63. PlaylistFindOne(query:$q) {
  64. _id name tracks {_id url originalFileName} owner {_id login}
  65. }
  66. }`,
  67. variables: { q: JSON.stringify([{ _id: match.params._id }]) },
  68. }),
  69. };
  70. // export const useLocalStoredState = (defaultState, localStorageName) => {
  71. // let payload;
  72. // try {
  73. // payload = JSON.parse(localStorage[localStorageName]);
  74. // } catch {
  75. // payload = defaultState;
  76. // }
  77. // const [state, setState] = useState(payload);
  78. // return [
  79. // state,
  80. // (newState) => {
  81. // setState(newState);
  82. // localStorage.setItem(localStorageName, newState);
  83. // },
  84. // ];
  85. // };
  86. // export const useProxyState = (defaultState) => {
  87. // const [state, setState] = useState(defaultState);
  88. // return new Proxy(state, {
  89. // get(obj, key) {
  90. // return obj[key];
  91. // },
  92. // set(obj, key, value) {
  93. // setState({ ...obj, [key]: value });
  94. // return true;
  95. // },
  96. // });
  97. // };