|
@@ -0,0 +1,114 @@
|
|
|
|
+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
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+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
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+// actions
|
|
|
|
+
|
|
|
|
+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))
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+// export const actionchangePass = (login, password, newPassword) => actionPromise("changePass", changePass(login, password, newPassword))
|
|
|
|
+const actionAuthLogin = token => ({type: 'LOGIN', token})
|
|
|
|
+// const actionAuthLogout = () => ({type: 'LOGOUT'})
|
|
|
|
+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 ('Такой пользователь не существует')
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+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('Такой пользователь уже существует!')
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+let up = async(file) => {
|
|
|
|
+ let formData = new FormData();
|
|
|
|
+ formData.append('photo', file)
|
|
|
|
+ fetch('/upload', {
|
|
|
|
+ method: "POST",
|
|
|
|
+ headers: localStorage.authToken ? {Authorization: 'Bearer ' + localStorage.authToken} : {},
|
|
|
|
+ body: formData
|
|
|
|
+ })
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+export const actionUploadFile = (file) => actionPromise("upload", up(file))
|