|
@@ -1,4 +1,5 @@
|
|
|
import { store } from "."
|
|
|
+import { useGetState } from 'react-redux';
|
|
|
|
|
|
const url = 'http://hipstagram.node.ed.asmer.org.ua/graphql'
|
|
|
|
|
@@ -53,6 +54,8 @@ export const actionPromise = (nameOfPromise, promise) =>
|
|
|
}
|
|
|
|
|
|
// =============================================================
|
|
|
+// Запросы на бек
|
|
|
+
|
|
|
// запрос на поиск конкретного поста
|
|
|
export const actionFindPostOne = _id => actionPromise('PostFindOne', gql(`query OnePostFind ($postOne: String){
|
|
|
PostFindOne (query: $postOne) {
|
|
@@ -84,8 +87,23 @@ export const actionFindPostOne = _id => actionPromise('PostFindOne', gql(`query
|
|
|
postOne: JSON.stringify([{ _id }])
|
|
|
}))
|
|
|
|
|
|
-
|
|
|
-// запрос на поиск конкретного юзера
|
|
|
+// запрос на поиск конкретного юзера(folowwing - это те, на кого я подписан. followers - те, кто на меня подписан)
|
|
|
+// export const actionFindUserOne = (_id, promiseName = 'UserFindOne') => actionPromise(promiseName, 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 }])
|
|
|
+// }))
|
|
|
export const actionFindUserOne = (_id, promiseName = 'UserFindOne') => actionPromise(promiseName, gql(`query OneUserFind ($userOne: String) {
|
|
|
UserFindOne(query: $userOne) {
|
|
|
_id createdAt login nick
|
|
@@ -96,15 +114,14 @@ export const actionFindUserOne = (_id, promiseName = 'UserFindOne') => actionPro
|
|
|
_id login nick avatar {_id url}
|
|
|
}
|
|
|
following {
|
|
|
- _id login nick avatar {_id url}
|
|
|
+ _id
|
|
|
}
|
|
|
}
|
|
|
}`, {
|
|
|
userOne: JSON.stringify([{ _id }])
|
|
|
}))
|
|
|
|
|
|
-
|
|
|
-// запрос на поиск всех постов
|
|
|
+// запрос на поиск всех постов на беке (нигде не должен использоваться)
|
|
|
export const actionfindPosts = () => actionPromise('PostsFind', gql(`query AllPostsFind ($allPosts: String){
|
|
|
PostFind(query: $allPosts){
|
|
|
_id createdAt title text likesCount
|
|
@@ -120,14 +137,27 @@ export const actionfindPosts = () => actionPromise('PostsFind', gql(`query AllPo
|
|
|
allPosts: JSON.stringify([{}])
|
|
|
}))
|
|
|
|
|
|
+// Запрос на поиск ленты постов для юзера
|
|
|
+export const actionFeedFindOne = (arr, sortOne, promiseName = 'Feed') => actionPromise(promiseName, gql(`query FeedFindOne ($feedOne: String){
|
|
|
+ PostFind(query: $feedOne){
|
|
|
+ _id createdAt title text likesCount owner{
|
|
|
+ _id login avatar{
|
|
|
+ url
|
|
|
+ }
|
|
|
+ }
|
|
|
+ comments {
|
|
|
+ _id
|
|
|
+ }
|
|
|
+ images{
|
|
|
+ url
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }`, {
|
|
|
+ feedOne: JSON.stringify([{ ___owner: { $in: arr } }, { sort: [{ _id: sortOne }] }])
|
|
|
+}))
|
|
|
|
|
|
-// =================
|
|
|
-// акшон для логинизации
|
|
|
-const actionAuthLogin = token => ({ type: 'AUTH_LOGIN', token })
|
|
|
-// акшон для раззлогинивания
|
|
|
-const actionAuthLogout = () => ({ type: 'AUTH_LOGOUT' })
|
|
|
|
|
|
-// Запрос на логин
|
|
|
+// Запрос на логинизацию пользователя
|
|
|
export const actionLogin = (login, password) => actionPromise('Login', gql(`query Login($login: String!, $password: String!) {
|
|
|
login(login: $login, password: $password)
|
|
|
}`, {
|
|
@@ -135,7 +165,17 @@ login(login: $login, password: $password)
|
|
|
password
|
|
|
}))
|
|
|
|
|
|
-// Запрос на логин и последующую логинизацию в authReduser (thunk)
|
|
|
+
|
|
|
+// акшон для логинизации в authReduser
|
|
|
+const actionAuthLogin = token => ({ type: 'AUTH_LOGIN', token })
|
|
|
+// акшон для раззлогинивания
|
|
|
+const actionAuthLogout = () => ({ type: 'AUTH_LOGOUT' })
|
|
|
+
|
|
|
+
|
|
|
+// =========================================
|
|
|
+// Thunk-и
|
|
|
+
|
|
|
+// Thunk логин и последующую логинизацию в authReduser
|
|
|
export const actionFullLogin = (login, password) =>
|
|
|
async dispatch => {
|
|
|
const token = await dispatch(actionLogin(login, password))
|
|
@@ -154,70 +194,35 @@ export const actionFullLogin = (login, password) =>
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-// ========================
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-// Запрос на поиск ленты постов
|
|
|
-export const actionFeedFindOne = (arr, sortOne) => actionPromise('Feed', gql(`query FeedFindOne ($feedOne: String){
|
|
|
- PostFind(query: $feedOne){
|
|
|
- _id createdAt title text likesCount owner{
|
|
|
- _id login avatar{
|
|
|
- url
|
|
|
- }
|
|
|
- }
|
|
|
- comments {
|
|
|
- _id
|
|
|
- }
|
|
|
- images{
|
|
|
- url
|
|
|
- }
|
|
|
- }
|
|
|
- }`, {
|
|
|
- feedOne: JSON.stringify([{ ___owner: { $in: arr } }, { sort: [{ _id: sortOne }] }])
|
|
|
-}))
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
// =============================
|
|
|
-// Запрос для создания страницы юзера
|
|
|
-export const actionFullUserFindOne = _id =>
|
|
|
+// Thunk для страницы юзера (диспатчим запрос на юзера и на ленту его постов)
|
|
|
+export const actionFullUserFindOne = (id) =>
|
|
|
async dispatch => {
|
|
|
- await dispatch(actionFindUserOne(_id))
|
|
|
- dispatch(actionFeedFindOne([_id], -1))
|
|
|
+ const test = await dispatch(actionFindUserOne(id, 'UserFind'))
|
|
|
+ console.log('test: ', test)
|
|
|
+ dispatch(actionFeedFindOne([id], -1, 'UserFeed'))
|
|
|
}
|
|
|
// ==============================
|
|
|
|
|
|
|
|
|
|
|
|
-// запрос для главной страницы ленты
|
|
|
-export const actionFeedFind = (id, sort) =>
|
|
|
+// запрос AboutMe для главной страницы (лента моих постов и мои данные)
|
|
|
+export const actionAboutMe = () =>
|
|
|
async (dispatch, getState) => {
|
|
|
- const userData = await dispatch(actionFindUserOne(id))
|
|
|
- console.log('userData: ', userData)
|
|
|
+ const myId = getState()?.auth?.payload?.sub?.id
|
|
|
|
|
|
- // собираем список подписчиков
|
|
|
- let followingList = []
|
|
|
+ // диспатчим запрос AboutMe (о себе)
|
|
|
+ const userData = await dispatch(actionFindUserOne(myId, 'AboutMe'))
|
|
|
|
|
|
- for (const item of userData.following)
|
|
|
- for (const [key, value] of Object.entries(item)) {
|
|
|
- if (key === '_id') {
|
|
|
- followingList.push(value)
|
|
|
- }
|
|
|
- }
|
|
|
- console.log('followingList: ', followingList)
|
|
|
+ // парсим все мои посты
|
|
|
+ dispatch(actionFeedFindOne([myId], -1, 'MyPosts'))
|
|
|
+
|
|
|
+ // получаем id всех подписок
|
|
|
+ const followingList = (userData?.following).map(user => user?._id)
|
|
|
|
|
|
- // console.log(666, store.getState().promise?.Feed?.status !== 'FULFILLED')
|
|
|
+ // запрашиваем формирование ленты моих постов (первый параметр - список id, второй - это сортировка постов от новых)
|
|
|
+ dispatch(actionFeedFindOne(followingList, -1, 'MyFeed'))
|
|
|
|
|
|
- // if (store.getState().promise?.Feed?.status !== 'FULFILLED') {
|
|
|
- dispatch(actionFeedFindOne(followingList, sort))
|
|
|
- // }
|
|
|
}
|
|
|
|
|
|
|
|
@@ -264,7 +269,7 @@ export const actionCreatePost = (params) => actionPromise('CreatePost', gql(
|
|
|
export const actionFullCreatePost = (params) =>
|
|
|
async dispatch => {
|
|
|
const newPost = await dispatch(actionCreatePost(params))
|
|
|
- console.log('Тут нужный резульата: ', newPost)
|
|
|
+ // console.log('Тут нужный резульата: ', newPost)
|
|
|
|
|
|
if (newPost) {
|
|
|
dispatch(actionFindPostOne(newPost._id))
|