|
@@ -17,7 +17,10 @@ import {
|
|
actionFindFollowing,
|
|
actionFindFollowing,
|
|
actionAddLike,
|
|
actionAddLike,
|
|
actionDeleteLike,
|
|
actionDeleteLike,
|
|
- actionUpdateProfile
|
|
|
|
|
|
+ actionUpdateProfile,
|
|
|
|
+ actionSearchUser,
|
|
|
|
+ actionSearchPost,
|
|
|
|
+ actionSearchComment
|
|
} from "./action"
|
|
} from "./action"
|
|
|
|
|
|
|
|
|
|
@@ -58,68 +61,133 @@ export const actionFullRegistration = (login, password) =>
|
|
// Разлогин и последующая полна очистка localStorage
|
|
// Разлогин и последующая полна очистка localStorage
|
|
export const actionFullLogout = () =>
|
|
export const actionFullLogout = () =>
|
|
async dispatch => {
|
|
async dispatch => {
|
|
- await dispatch(actionAuthLogout())
|
|
|
|
- return {}
|
|
|
|
|
|
+ const res = await dispatch(actionAuthLogout())
|
|
|
|
+
|
|
|
|
+ return res
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
// Запрос юзера (данные о пользователе + количество его постов + все его посты(100 шт))
|
|
// Запрос юзера (данные о пользователе + количество его постов + все его посты(100 шт))
|
|
-export const actionFullUserFindOne = _id =>
|
|
|
|
- async dispatch => {
|
|
|
|
|
|
+// export const actionFullUserFindOne = _id =>
|
|
|
|
+// async dispatch => {
|
|
|
|
|
|
- // запрашиваем информацию о пользователе
|
|
|
|
- await dispatch(actionFindUserOne(_id, 'UserFindOne'))
|
|
|
|
|
|
+// // запрашиваем информацию о пользователе
|
|
|
|
+// await dispatch(actionFindUserOne(_id, 'UserFindOne'))
|
|
|
|
|
|
- // парсим счетчик, сколько постов у юзера
|
|
|
|
- dispatch(actionPostsCount(_id, 'UserPostsCount'))
|
|
|
|
|
|
+// // парсим счетчик, сколько постов у юзера
|
|
|
|
+// dispatch(actionPostsCount(_id, 'UserPostsCount'))
|
|
|
|
|
|
- // запрашиваем список постов для юзера
|
|
|
|
- dispatch(actionFeedFindOne([_id], -1, 100, 'UserFeed'))
|
|
|
|
|
|
+// // запрашиваем список постов для юзера
|
|
|
|
+// dispatch(actionFeedFindOne([_id], -1, 100, 'UserFeed'))
|
|
|
|
+// }
|
|
|
|
+export const actionFullUserFindOne = _id =>
|
|
|
|
+ dispatch => {
|
|
|
|
+ const requestsAboutUser = [
|
|
|
|
+ actionFindUserOne(_id, 'UserFindOne'),
|
|
|
|
+ actionPostsCount(_id, 'UserPostsCount'),
|
|
|
|
+ actionFeedFindOne([_id], -1, 100, 'UserFeed')
|
|
|
|
+ ]
|
|
|
|
+
|
|
|
|
+ return Promise.all(requestsAboutUser.map(item => dispatch(item)))
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
// Запрос AboutMe для главной
|
|
// Запрос AboutMe для главной
|
|
|
|
+// export const actionAboutMe = () =>
|
|
|
|
+// async (dispatch, getState) => {
|
|
|
|
+// const myId = getState()?.auth?.payload?.sub?.id
|
|
|
|
+
|
|
|
|
+// // диспатчим запрос AboutMe (о себе)
|
|
|
|
+// const myData = await dispatch(actionFindUserOne(myId, 'AboutMe'))
|
|
|
|
+
|
|
|
|
+// // собираем список id моих подписок
|
|
|
|
+// let followingList = []
|
|
|
|
+// if (myData?.following) {
|
|
|
|
+// followingList = (myData.following).map(user => user?._id)
|
|
|
|
+// }
|
|
|
|
+
|
|
|
|
+// // собираем id моих подписок и подписчиков
|
|
|
|
+// const podpisotaList = []
|
|
|
|
+// for (const key in myData) {
|
|
|
|
+// if (key === 'following' || key === 'followers') {
|
|
|
|
+// for (const item of myData[key]) {
|
|
|
|
+// if (!podpisotaList.includes(item._id)) {
|
|
|
|
+// podpisotaList.push(item._id)
|
|
|
|
+// }
|
|
|
|
+// }
|
|
|
|
+// }
|
|
|
|
+// }
|
|
|
|
+
|
|
|
|
+// // шлем все запросы на меня одновременно
|
|
|
|
+// const requestsAboutMe = [
|
|
|
|
+// actionPostsCount(myId, 'MyPostsCount'),
|
|
|
|
+// actionFeedFindOne(followingList, -1, 10, 'MyFeed'),
|
|
|
|
+// actionFindFollowers(podpisotaList),
|
|
|
|
+// actionFindFollowing(podpisotaList)
|
|
|
|
+// ]
|
|
|
|
+
|
|
|
|
+// Promise.all(requestsAboutMe.map(item => dispatch(item)))
|
|
|
|
+
|
|
|
|
+// // парсим счетчик, сколько постов у меня
|
|
|
|
+// // dispatch(actionPostsCount(myId, 'MyPostsCount'))
|
|
|
|
+// // диспатчим ленту моих постов (первый параметр - список id, второй - это сортировка постов от новых)
|
|
|
|
+// // dispatch(actionFeedFindOne(followingList, -1, 10, 'MyFeed'))
|
|
|
|
+// // диспатчим список для рекомендаций
|
|
|
|
+// // await Promise.all([dispatch(actionFindFollowers(podpisotaList)), dispatch(actionFindFollowing(podpisotaList))])
|
|
|
|
+// }
|
|
export const actionAboutMe = () =>
|
|
export const actionAboutMe = () =>
|
|
async (dispatch, getState) => {
|
|
async (dispatch, getState) => {
|
|
const myId = getState()?.auth?.payload?.sub?.id
|
|
const myId = getState()?.auth?.payload?.sub?.id
|
|
|
|
|
|
// диспатчим запрос AboutMe (о себе)
|
|
// диспатчим запрос AboutMe (о себе)
|
|
- const userData = await dispatch(actionFindUserOne(myId, 'AboutMe'))
|
|
|
|
|
|
+ await dispatch(actionFindUserOne(myId, 'AboutMe'))
|
|
|
|
+ .then(myData => {
|
|
|
|
+ // собираем список id моих подписок
|
|
|
|
+ let followingList = []
|
|
|
|
+ if (myData?.following) {
|
|
|
|
+ followingList = myData.following.map(user => user?._id)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // собираем id моих подписок и подписчиков
|
|
|
|
+ const podpisotaList = []
|
|
|
|
+ for (const key in myData) {
|
|
|
|
+ if (key === 'following' || key === 'followers') {
|
|
|
|
+ for (const item of myData[key]) {
|
|
|
|
+ if (!podpisotaList.includes(item._id)) {
|
|
|
|
+ podpisotaList.push(item._id)
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // шлем все запросы на меня одновременно, только после выполнения dispatch(actionFindUserOne(myId, 'AboutMe'))
|
|
|
|
+ const requestsAboutMe = [
|
|
|
|
+ actionPostsCount(myId, 'MyPostsCount'),
|
|
|
|
+ actionFeedFindOne(followingList, -1, 10, 'MyFeed'),
|
|
|
|
+ actionFindFollowers(podpisotaList),
|
|
|
|
+ actionFindFollowing(podpisotaList)
|
|
|
|
+ ]
|
|
|
|
+
|
|
|
|
+ return Promise.all(requestsAboutMe.map(item => dispatch(item)))
|
|
|
|
+ })
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
|
|
- // парсим счетчик, сколько постов у меня
|
|
|
|
- dispatch(actionPostsCount(myId, 'MyPostsCount'))
|
|
|
|
|
|
|
|
- let followingList = []
|
|
|
|
- // проверяем, есть ли вообще подписчики и если да, парсим их
|
|
|
|
- if (userData?.following) {
|
|
|
|
- // получаем id всех подписок
|
|
|
|
- followingList = (userData.following).map(user => user?._id)
|
|
|
|
- }
|
|
|
|
|
|
|
|
- // запрашиваем формирование ленты моих постов (первый параметр - список id, второй - это сортировка постов от новых)
|
|
|
|
- dispatch(actionFeedFindOne(followingList, -1, 10, 'MyFeed'))
|
|
|
|
|
|
|
|
|
|
|
|
- // =====================================
|
|
|
|
- // собираем id подписок и подписчиков
|
|
|
|
- // console.log(33, userData)
|
|
|
|
- const podpisotaList = []
|
|
|
|
|
|
|
|
- for (const key in userData) {
|
|
|
|
- if (key === 'following' || key === 'followers') {
|
|
|
|
- for (const item of userData[key]) {
|
|
|
|
- if (!podpisotaList.includes(item._id)) {
|
|
|
|
- podpisotaList.push(item._id);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
|
|
|
|
- // диспатчим список для рекомендаций
|
|
|
|
- await Promise.all([dispatch(actionFindFollowers(podpisotaList)), dispatch(actionFindFollowing(podpisotaList))])
|
|
|
|
- }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -141,6 +209,10 @@ export const actionDownloadFeed = (skip) =>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
// запрос на загрузку картинок на бек
|
|
// запрос на загрузку картинок на бек
|
|
function fileUpload(file) {
|
|
function fileUpload(file) {
|
|
const formData = new FormData()
|
|
const formData = new FormData()
|
|
@@ -167,7 +239,10 @@ export const actionFilesUpload = files => actionPromise('PROMISE', 'FilesUpload'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-// Создание поста и последующий переход на него
|
|
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+// запрос на создание поста и последующий переход на него
|
|
export const actionFullCreatePost = (params) =>
|
|
export const actionFullCreatePost = (params) =>
|
|
async dispatch => {
|
|
async dispatch => {
|
|
const newPost = await dispatch(actionCreatePost(params))
|
|
const newPost = await dispatch(actionCreatePost(params))
|
|
@@ -186,14 +261,11 @@ export const actionFullFindCommentsPostOne = id =>
|
|
async dispatch => {
|
|
async dispatch => {
|
|
const comments = await dispatch(actionFindCommentsPostOne(id))
|
|
const comments = await dispatch(actionFindCommentsPostOne(id))
|
|
|
|
|
|
- // console.log('comments: ', comments)
|
|
|
|
|
|
+ return comments
|
|
|
|
+ }
|
|
|
|
|
|
- // const res = commentsTreeConstructor(comments)
|
|
|
|
|
|
|
|
- // console.log('result: ', res)
|
|
|
|
|
|
|
|
- // return res
|
|
|
|
- }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -202,8 +274,6 @@ export const actionFullAddComment = (nameOfPromise, params, id) =>
|
|
async dispatch => {
|
|
async dispatch => {
|
|
const newComment = await dispatch(actionAddComment(nameOfPromise, params))
|
|
const newComment = await dispatch(actionAddComment(nameOfPromise, params))
|
|
|
|
|
|
-
|
|
|
|
- console.log('comment_id: ', id)
|
|
|
|
if (typeof newComment._id === 'string') {
|
|
if (typeof newComment._id === 'string') {
|
|
dispatch(actionFullFindCommentsPostOne(id))
|
|
dispatch(actionFullFindCommentsPostOne(id))
|
|
}
|
|
}
|
|
@@ -221,9 +291,10 @@ export const actionFullAddLike = params =>
|
|
// обновляем данные поста с бека, если лайк был для поста
|
|
// обновляем данные поста с бека, если лайк был для поста
|
|
if (res?.post) {
|
|
if (res?.post) {
|
|
dispatch(actionFindPostOne(res?.post?._id))
|
|
dispatch(actionFindPostOne(res?.post?._id))
|
|
|
|
+ dispatch(actionAboutMe())
|
|
}
|
|
}
|
|
|
|
|
|
-
|
|
|
|
|
|
+ // обновляем данные с бека, если лайк был для комментария
|
|
if (res?.comment) {
|
|
if (res?.comment) {
|
|
dispatch(actionFullFindCommentsPostOne(res?.comment?.post?._id))
|
|
dispatch(actionFullFindCommentsPostOne(res?.comment?.post?._id))
|
|
}
|
|
}
|
|
@@ -233,17 +304,18 @@ export const actionFullAddLike = params =>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-// удаление лайка с последующим удаление к определенной сущности и последующим обновление определенной сущности
|
|
|
|
|
|
+// удаление лайка с последующим обновлением определенной сущности
|
|
export const actionFullDeleteLike = params =>
|
|
export const actionFullDeleteLike = params =>
|
|
async dispatch => {
|
|
async dispatch => {
|
|
const res = await dispatch(actionDeleteLike(params))
|
|
const res = await dispatch(actionDeleteLike(params))
|
|
|
|
|
|
-
|
|
|
|
- // обновляем данные комментариев к посту с бека, если лайк был для поста
|
|
|
|
|
|
+ // обновляем данные поста с бека, если лайк был для поста
|
|
if (res?.post) {
|
|
if (res?.post) {
|
|
dispatch(actionFindPostOne(res.post._id))
|
|
dispatch(actionFindPostOne(res.post._id))
|
|
|
|
+ dispatch(actionAboutMe())
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ // обновляем данные с бека, если лайк был для комментария
|
|
if (res?.comment) {
|
|
if (res?.comment) {
|
|
dispatch(actionFullFindCommentsPostOne(res?.comment?.post?._id))
|
|
dispatch(actionFullFindCommentsPostOne(res?.comment?.post?._id))
|
|
}
|
|
}
|
|
@@ -253,13 +325,76 @@ export const actionFullDeleteLike = params =>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-// запрос на обновление профиля и последующая отправка запрос обо мне на бек
|
|
|
|
-export const actionFullUpdateProfile = params =>
|
|
|
|
|
|
+// запрос на обновление моего профиля и последующая отправка запроса обо мне на бек
|
|
|
|
+// export const actionFullUpdateProfile = params =>
|
|
|
|
+export const actionFullUpdateProfile = (params, id) =>
|
|
async dispatch => {
|
|
async dispatch => {
|
|
const res = await dispatch(actionUpdateProfile(params))
|
|
const res = await dispatch(actionUpdateProfile(params))
|
|
|
|
|
|
|
|
+ if (res._id) {
|
|
|
|
+ dispatch(actionAboutMe())
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // нужно, чтоб обновлялась инфа на моем профиле, если он открыт как обычный юзер
|
|
|
|
+ if (res._id == id) {
|
|
|
|
+ dispatch(actionFullUserFindOne(id))
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+// запрос на подписку/отписку на странице пользователя
|
|
|
|
+export const actionUserPageSubscribing = (params, id) =>
|
|
|
|
+ async dispatch => {
|
|
|
|
+ const res = await dispatch(actionUpdateProfile(params))
|
|
|
|
|
|
if (res._id) {
|
|
if (res._id) {
|
|
dispatch(actionAboutMe())
|
|
dispatch(actionAboutMe())
|
|
|
|
+ dispatch(actionFullUserFindOne(id))
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+// запрос на поиск элементов
|
|
|
|
+export const actionFullSEarch = param =>
|
|
|
|
+ async dispatch => {
|
|
|
|
+
|
|
|
|
+ // создаем список сущностей, которые нам нужны
|
|
|
|
+ const variables = {
|
|
|
|
+ user: ['login', 'nick'],
|
|
|
|
+ post: ['title', 'text'],
|
|
|
|
+ comment: ['text']
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ // массив для акшонов
|
|
|
|
+ let searchPromises = []
|
|
|
|
+
|
|
|
|
+ // перебираем variables
|
|
|
|
+ for (const [key, variable] of Object.entries(variables)) {
|
|
|
|
+ if (key.toLowerCase() === 'user') {
|
|
|
|
+ for (const item of variable) {
|
|
|
|
+ searchPromises.push(actionSearchUser([{ item: param }]))
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (key.toLowerCase() === 'post') {
|
|
|
|
+ for (const item of variable) {
|
|
|
|
+ searchPromises.push(actionSearchPost([{ item: param }]))
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (key.toLowerCase() === 'comment') {
|
|
|
|
+ for (const item of variable) {
|
|
|
|
+ searchPromises.push(actionSearchComment([{ item: param }]))
|
|
|
|
+ }
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ console.log('searchPromises: ', searchPromises)
|
|
|
|
+
|
|
|
|
+ // запускаем все акшоны
|
|
|
|
+ Promise.all(searchPromises.map(item => dispatch(item)))
|
|
|
|
+
|
|
|
|
+
|
|
}
|
|
}
|