123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255 |
- const getGQL = url =>
- (query, variables) =>
- fetch(url , {
- method: 'POST',
- headers: {
- "content-type": "application/json",
- ...(localStorage.authToken ? { Authorization: "Bearer " + localStorage.authToken } : {})
- },
- body: JSON.stringify({query, variables})
- }).then(res => res.json())
- let gql = getGQL("/graphql")
- let log = async(login, password) => {
- let query = `query login($login:String!, $password:String!) {
- login(login: $login, password: $password)
- }`
- let variables = {"login":login, "password":password}
- let token = await gql(query, variables)
- localStorage.authToken = token.data.login
- console.log(token)
- return token.data.login
- }
- let reg = async(login, password) => {
- let query = `mutation reg($login:String!, $password:String!) {
- createUser(
- login: $login,
- password: $password
- ){
- _id
- }}`
-
- let variables = {"login":login, "password":password}
- let res = await gql(query, variables)
- return res
- }
- export const actionAuthLogout = () => ({type: 'LOGOUT'})
- const actionAuthLogin = token => ({type: 'LOGIN', token})
- const actionLogin = (login, password) => actionPromise("login", log(login, password))
- const actionReg = (login, password) => actionPromise("reg", reg(login, password))
- export const actionFullLogin = (login, password) => async(dispatch) => {
- let result = await dispatch(actionLogin(login, password))
- if (result !== null){
- dispatch(actionAuthLogin(result))
- } else {
- alert ('That user doesn’t exist!')
- localStorage.clear()
- }
- }
- export const actionFullRegister = (login, password) => async(dispatch) => {
- let result = await dispatch(actionReg(login, password))
- if(result?.data?.createUser !== null) {
- dispatch(actionFullLogin(login, password))
- } else {
- alert('Such a user already exists!')
- }
- }
- // let ChangePass = async(login, password, newPassword) => {
- // let query = `mutation changePass($login:String!, $password:String!, $newPassword:String!) {
- // changePassword(
- // login: $login,
- // password: $password,
- // newPassword: $newPassword
- // ){
- // _id
- // }`
- // let variables = {"login":login, "password":password, "newPassword":newPassword}
- // let res = await gql(query, variables)
- // return res
- // }
- // export const actionchangePass = (login, password, newPassword) => actionPromise("changePass", ChangePass(login, password, newPassword))
- let SnippetUpsert = async (title, description, files) => {
- let query = `mutation SnippetUpsert($snippet:SnippetInput) {
- SnippetUpsert(snippet:$snippet){
- _id
- }
- }`
-
- let variables = { snippet: { title, description, files:files }};
-
- let res = await gql(query, variables)
- return res
- }
- export const actionSnippetUpsert = (title, description, files) => actionPromise("SnippetUpsert", SnippetUpsert(title, description, files))
- const UserFind = async (_id) => {
- let query = `UserFind(query:'[{}])' {
- UserFind(query:$query) {
- _id login avatar{
- url
- }
- }
- }`
- let variables = { query: JSON.stringify([{ _id }])}
- let res = await gql(query, variables)
- return res
- }
- export const actionUserFind = (_id) => actionPromise("UserFind", UserFind(_id))
- export const imgFind = async () => {
- return await gql(`query ImageFind{
- ImageFind(query:"[{}]"){
- url owner{
- nick
- }
- }
- }`)
- }
- export const actionImgFind = () => async (dispatch) => {
- return await dispatch(actionPromise("img", imgFind()));
- }
- const setAva = async (idUser, id) => {
- let query = `mutation setAvatar($idUser:String , $idAvatar:ID){
- UserUpsert(user:{_id: $idUser, avatar: {_id: $idAvatar}}){
- _id, avatar{
- url
- }
- }
- }`
- let variables = { idUser: idUser, idAvatar: id }
-
- let res = await gql(query, variables)
- return res
- }
- export const actionSetAva = (idUser, id) => actionPromise("setAva", setAva(idUser, id))
- const actionPending = name => ({type: 'PROMISE', status: 'PENDING', name})
- const actionResolved = (name, payload) => ({type: 'PROMISE', status: 'RESOLVED', name, payload})
- const actionRejected = (name, error) => ({type: 'PROMISE', status: 'REJECTED', name, error})
- const actionPromise = (name, promise) =>
- async dispatch => {
- dispatch(actionPending(name))
- try{
- let payload = await promise
- dispatch(actionResolved(name, payload))
- return payload
- }
- catch(error){
- dispatch(actionRejected(name, error))
- }
- }
- let up = async(file) => {
- let formData = new FormData()
- formData.append('photo', file)
- return fetch('/upload', {
- method: "POST",
- headers: localStorage.authToken ? {Authorization: 'Bearer ' + localStorage.authToken} : {},
- body: formData
- }).then(res => res.json())
- }
- export const actionUploadFile = (file) => actionPromise("upload", up(file))
- export const actionFullAvatar = (file) => async (dispatch) => {
- let result = await dispatch(actionUploadFile(file));
- await dispatch(actionSetAva(result._id));
- await dispatch(actionUserFind());
- }
-
- // const snippetByOwner = async (id) => {
- // let query = `query snippetFind($query:String){
- // SnippetFind(query:$query){
- // owner{
- // _id
- // }
- // title description _id files {
- // type text name
- // }
- // }
- // }`;
- // let variables = {
- // query: JSON.stringify([{___owner: id } , {sort:[{_id: -1}]}])
- // };
-
- // let res = gql(query, variables);
- // return res;
- // }
-
- // const snippetById = async(id) => {
- // let query = `query snippetFind($query:String){
- // SnippetFind(query:$query){
- // owner{
- // _id
- // }
- // title description _id files {
- // type text name
- // }
- // }
- // }`;
- // let variables = {
- // query: JSON.stringify([{_id: id }])
- // };
-
- // let res = gql(query, variables);
- // return res;
- // }
-
- // let snippetAdd = async (title, description, files , idSnippet) => {
- // let query = `mutation newSnippet($snippet:SnippetInput) {
- // SnippetUpsert(snippet:$snippet){
- // _id
- // }
- // }`;
-
- // let qVariables = { snippet: { title, description, files } ,_id: idSnippet };
-
- // let res = await gql(query, qVariables);
- // return res;
- // };
- // export const actionSnippetAdd =
- // (title, description, files , idSnippet) => async (dispatch) => {
- // return await dispatch(
- // actionPromise("addSnippet",
- // snippetAdd(title, description, files , idSnippet))
- // );
- // };
-
- // export const actionSnippetFindByOwner =
- // (id) => async (dispatch) => {
- // return await dispatch(
- // actionPromise("findSnippet",
- // snippetByOwner(id))
- // );
- // };
- // export const actionSnippetById =
- // (id) => async (dispatch) => {
- // return await dispatch(
- // actionPromise("findSnippetById",
- // snippetById(id))
- // );
- // };
|