|
@@ -1,13 +1,13 @@
|
|
// ==============================================================================
|
|
// ==============================================================================
|
|
// создание promiseReducer
|
|
// создание promiseReducer
|
|
function promiseReducer(state = {}, { type, status, payload, error, nameOfPromise }) {
|
|
function promiseReducer(state = {}, { type, status, payload, error, nameOfPromise }) {
|
|
- if (type === 'PROMISE') {
|
|
|
|
- return {
|
|
|
|
- ...state,
|
|
|
|
- [nameOfPromise]: { status, payload, error }
|
|
|
|
- }
|
|
|
|
|
|
+ if (type === 'PROMISE') {
|
|
|
|
+ return {
|
|
|
|
+ ...state,
|
|
|
|
+ [nameOfPromise]: { status, payload, error }
|
|
}
|
|
}
|
|
- return state
|
|
|
|
|
|
+ }
|
|
|
|
+ return state
|
|
}
|
|
}
|
|
|
|
|
|
// акшоны для promiseReducer
|
|
// акшоны для promiseReducer
|
|
@@ -15,48 +15,48 @@ const actionPending = nameOfPromise => ({ nameOfPromise, type: 'PROMISE', status
|
|
const actionFulfilled = (nameOfPromise, payload) => ({ nameOfPromise, type: 'PROMISE', status: 'FULFILLED', payload })
|
|
const actionFulfilled = (nameOfPromise, payload) => ({ nameOfPromise, type: 'PROMISE', status: 'FULFILLED', payload })
|
|
const actionRejected = (nameOfPromise, error) => ({ nameOfPromise, type: 'PROMISE', status: 'REJECTED', error })
|
|
const actionRejected = (nameOfPromise, error) => ({ nameOfPromise, type: 'PROMISE', status: 'REJECTED', error })
|
|
const actionPromise = (nameOfPromise, promise) =>
|
|
const actionPromise = (nameOfPromise, promise) =>
|
|
- async dispatch => {
|
|
|
|
- dispatch(actionPending(nameOfPromise)) //сигнализируем redux, что промис начался
|
|
|
|
- try {
|
|
|
|
- const payload = await promise //ожидаем промиса
|
|
|
|
- dispatch(actionFulfilled(nameOfPromise, payload)) //сигнализируем redux, что промис успешно выполнен
|
|
|
|
- return payload //в месте запуска store.dispatch с этим thunk можно так же получить результат промиса
|
|
|
|
- }
|
|
|
|
- catch (error) {
|
|
|
|
- dispatch(actionRejected(nameOfPromise, error)) //в случае ошибки - сигнализируем redux, что промис несложился
|
|
|
|
- }
|
|
|
|
|
|
+ async dispatch => {
|
|
|
|
+ dispatch(actionPending(nameOfPromise)) //сигнализируем redux, что промис начался
|
|
|
|
+ try {
|
|
|
|
+ const payload = await promise //ожидаем промиса
|
|
|
|
+ dispatch(actionFulfilled(nameOfPromise, payload)) //сигнализируем redux, что промис успешно выполнен
|
|
|
|
+ return payload //в месте запуска store.dispatch с этим thunk можно так же получить результат промиса
|
|
|
|
+ }
|
|
|
|
+ catch (error) {
|
|
|
|
+ dispatch(actionRejected(nameOfPromise, error)) //в случае ошибки - сигнализируем redux, что промис несложился
|
|
}
|
|
}
|
|
|
|
+ }
|
|
|
|
|
|
// =============================================================
|
|
// =============================================================
|
|
// функция getGql
|
|
// функция getGql
|
|
function getGql(endpoint) {
|
|
function getGql(endpoint) {
|
|
- return async function gql(query, variables = {}) {
|
|
|
|
|
|
+ return async function gql(query, variables = {}) {
|
|
|
|
|
|
- let headers = {
|
|
|
|
- 'Content-Type': 'application/json;charset=utf-8',
|
|
|
|
- 'Accept': 'application/json',
|
|
|
|
- }
|
|
|
|
- if (('authToken' in localStorage)) {
|
|
|
|
- headers.Authorization = 'Bearer ' + localStorage.authToken
|
|
|
|
- }
|
|
|
|
|
|
+ let headers = {
|
|
|
|
+ 'Content-Type': 'application/json;charset=utf-8',
|
|
|
|
+ 'Accept': 'application/json',
|
|
|
|
+ }
|
|
|
|
+ if (('authToken' in localStorage)) {
|
|
|
|
+ headers.Authorization = 'Bearer ' + localStorage.authToken
|
|
|
|
+ }
|
|
|
|
|
|
- let result = await fetch(endpoint, {
|
|
|
|
- method: 'POST',
|
|
|
|
- headers,
|
|
|
|
- body: JSON.stringify({
|
|
|
|
- query,
|
|
|
|
- variables
|
|
|
|
- })
|
|
|
|
- }).then(res => res.json())
|
|
|
|
|
|
+ let result = await fetch(endpoint, {
|
|
|
|
+ method: 'POST',
|
|
|
|
+ headers,
|
|
|
|
+ body: JSON.stringify({
|
|
|
|
+ query,
|
|
|
|
+ variables
|
|
|
|
+ })
|
|
|
|
+ }).then(res => res.json())
|
|
|
|
|
|
- if (('errors' in result) && !('data' in result)) {
|
|
|
|
- throw new Error(JSON.stringify(result.errors))
|
|
|
|
- }
|
|
|
|
|
|
+ if (('errors' in result) && !('data' in result)) {
|
|
|
|
+ throw new Error(JSON.stringify(result.errors))
|
|
|
|
+ }
|
|
|
|
|
|
- result = Object.values(result.data)[0]
|
|
|
|
|
|
+ result = Object.values(result.data)[0]
|
|
|
|
|
|
- return result
|
|
|
|
- }
|
|
|
|
|
|
+ return result
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
const gql = getGql('http://hipstagram.node.ed.asmer.org.ua/graphql')
|
|
const gql = getGql('http://hipstagram.node.ed.asmer.org.ua/graphql')
|
|
@@ -88,5 +88,23 @@ export const actionFindPostOne = _id => actionPromise('PostFindOne', gql(`query
|
|
|
|
|
|
}
|
|
}
|
|
}`, {
|
|
}`, {
|
|
- postOne: JSON.stringify([{ _id }])
|
|
|
|
|
|
+ postOne: JSON.stringify([{ _id }])
|
|
|
|
+}))
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+export const actionFindUserOne = _id => actionPromise('UserFindOne', gql(`query OneUserFind ($userOne: String) {
|
|
|
|
+ UserFindOne(query: $userOne) {
|
|
|
|
+ _id createdAt login nick
|
|
|
|
+ avatar {
|
|
|
|
+ _id url
|
|
|
|
+ }
|
|
|
|
+ followers {
|
|
|
|
+ _id login nick avatar {_id url}
|
|
|
|
+ }
|
|
|
|
+ following {
|
|
|
|
+ _id login nick avatar {_id url}
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+}`, {
|
|
|
|
+ userOne: JSON.stringify([{ _id }])
|
|
}))
|
|
}))
|