|
@@ -38,32 +38,31 @@ function getGql(endpoint) {
|
|
|
const gql = getGql(url)
|
|
|
|
|
|
// акшоны для promiseReducer
|
|
|
-export const actionPending = nameOfPromise => ({ nameOfPromise, type: 'PROMISE', status: 'PENDING' })
|
|
|
-export const actionFulfilled = (nameOfPromise, payload) => ({ nameOfPromise, type: 'PROMISE', status: 'FULFILLED', payload })
|
|
|
-export const actionRejected = (nameOfPromise, error) => ({ nameOfPromise, type: 'PROMISE', status: 'REJECTED', error })
|
|
|
+export const actionPending = (type, nameOfPromise) => ({ nameOfPromise, type, status: 'PENDING' })
|
|
|
+export const actionFulfilled = (type, nameOfPromise, payload) => ({ nameOfPromise, type: type, status: 'FULFILLED', payload })
|
|
|
+export const actionRejected = (type, nameOfPromise, error) => ({ nameOfPromise, type: type, status: 'REJECTED', error })
|
|
|
|
|
|
-export const actionPromise = (nameOfPromise, promise) =>
|
|
|
+export const actionPromise = (type, nameOfPromise, promise) =>
|
|
|
async dispatch => {
|
|
|
- dispatch(actionPending(nameOfPromise)) //сигнализируем redux, что промис начался
|
|
|
+ dispatch(actionPending(type, nameOfPromise)) //сигнализируем redux, что промис начался
|
|
|
try {
|
|
|
const payload = await promise //ожидаем промиса
|
|
|
- dispatch(actionFulfilled(nameOfPromise, payload)) //сигнализируем redux, что промис успешно выполнен
|
|
|
+ dispatch(actionFulfilled(type, nameOfPromise, payload)) //сигнализируем redux, что промис успешно выполнен
|
|
|
return payload //в месте запуска store.dispatch с этим thunk можно так же получить результат промиса
|
|
|
}
|
|
|
catch (error) {
|
|
|
- dispatch(actionRejected(nameOfPromise, error)) //в случае ошибки - сигнализируем redux, что промис несложился
|
|
|
+ dispatch(actionRejected(type, nameOfPromise, error)) //в случае ошибки - сигнализируем redux, что промис несложился
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-
|
|
|
// =============================================================
|
|
|
// Запросы на бек
|
|
|
|
|
|
// Запрос на регистрацию пользователя
|
|
|
-export const actionRegistration = (login, password) => actionPromise('Registration', gql(`mutation Registration($login:String!, $password:String!) {
|
|
|
+export const actionRegistration = (login, password) => actionPromise('PROMISE', 'Registration', gql(`mutation Registration($login:String!, $password:String!) {
|
|
|
createUser(login:$login, password:$password) {
|
|
|
_id login
|
|
|
}
|
|
@@ -74,8 +73,10 @@ export const actionRegistration = (login, password) => actionPromise('Registrati
|
|
|
|
|
|
)
|
|
|
|
|
|
+
|
|
|
+
|
|
|
// Запрос на логинизацию пользователя
|
|
|
-export const actionLogin = (login, password) => actionPromise('Login', gql(`query Login($login: String!, $password: String!) {
|
|
|
+export const actionLogin = (login, password) => actionPromise('PROMISE', 'Login', gql(`query Login($login: String!, $password: String!) {
|
|
|
login(login: $login, password: $password)
|
|
|
}`, {
|
|
|
login,
|
|
@@ -83,14 +84,18 @@ login(login: $login, password: $password)
|
|
|
}))
|
|
|
|
|
|
|
|
|
+
|
|
|
+
|
|
|
// акшон для логинизации в authReduser
|
|
|
const actionAuthLogin = token => ({ type: 'AUTH_LOGIN', token })
|
|
|
// акшон для раззлогинивания
|
|
|
export const actionAuthLogout = () => ({ type: 'AUTH_LOGOUT' })
|
|
|
|
|
|
|
|
|
+
|
|
|
+
|
|
|
// запрос на изменение пароля юзера
|
|
|
-export const actionPassChange = (loginChange, passwordChange, passwordNew) => actionPromise('PassChange', gql(`mutation PasswordChange($loginChange: String!, $passwordChange: String!, $passwordNew: String!) {
|
|
|
+export const actionPassChange = (loginChange, passwordChange, passwordNew) => actionPromise('PROMISE', 'PassChange', gql(`mutation PasswordChange($loginChange: String!, $passwordChange: String!, $passwordNew: String!) {
|
|
|
changePassword(
|
|
|
login: $loginChange, password: $passwordChange, newPassword: $passwordNew
|
|
|
) {
|
|
@@ -104,8 +109,10 @@ export const actionPassChange = (loginChange, passwordChange, passwordNew) => ac
|
|
|
}))
|
|
|
|
|
|
|
|
|
+
|
|
|
+
|
|
|
// запрос на поиск конкретного поста
|
|
|
-export const actionFindPostOne = _id => actionPromise('PostFindOne', gql(`query OnePostFind ($postOne: String){
|
|
|
+export const actionFindPostOne = _id => actionPromise('PROMISE', 'PostFindOne', gql(`query OnePostFind ($postOne: String){
|
|
|
PostFindOne (query: $postOne) {
|
|
|
_id createdAt title text likesCount
|
|
|
images {
|
|
@@ -136,7 +143,7 @@ export const actionFindPostOne = _id => actionPromise('PostFindOne', gql(`query
|
|
|
}))
|
|
|
|
|
|
// запрос на поиск конкретного юзера(folowwing - это те, на кого я подписан. followers - те, кто на меня подписан)
|
|
|
-// export const actionFindUserOne = (_id, promiseName = 'UserFindOne') => actionPromise(promiseName, gql(`query OneUserFind ($userOne: String) {
|
|
|
+// export const actionFindUserOne = (_id, promiseName = 'UserFindOne') => actionPromise('PROMISE', promiseName, gql(`query OneUserFind ($userOne: String) {
|
|
|
// UserFindOne(query: $userOne) {
|
|
|
// _id createdAt login nick
|
|
|
// avatar {
|
|
@@ -152,7 +159,10 @@ export const actionFindPostOne = _id => actionPromise('PostFindOne', gql(`query
|
|
|
// }`, {
|
|
|
// userOne: JSON.stringify([{ _id }])
|
|
|
// }))
|
|
|
-export const actionFindUserOne = (_id, promiseName = 'UserFindOne') => actionPromise(promiseName, gql(`query OneUserFind ($userOne: String) {
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+export const actionFindUserOne = (_id, promiseName = 'UserFindOne') => actionPromise('PROMISE', promiseName, gql(`query OneUserFind ($userOne: String) {
|
|
|
UserFindOne(query: $userOne) {
|
|
|
_id createdAt login nick
|
|
|
avatar {
|
|
@@ -169,8 +179,10 @@ export const actionFindUserOne = (_id, promiseName = 'UserFindOne') => actionPro
|
|
|
userOne: JSON.stringify([{ _id }])
|
|
|
}))
|
|
|
|
|
|
+
|
|
|
+
|
|
|
// запрос на поиск всех постов на беке (нигде не должен использоваться)
|
|
|
-export const actionfindPosts = () => actionPromise('PostsFind', gql(`query AllPostsFind ($allPosts: String){
|
|
|
+export const actionfindPosts = () => actionPromise('PROMISE', 'PostsFind', gql(`query AllPostsFind ($allPosts: String){
|
|
|
PostFind(query: $allPosts){
|
|
|
_id createdAt title text likesCount
|
|
|
images {
|
|
@@ -185,8 +197,30 @@ 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){
|
|
|
+// export const actionFeedFindOne = (arr, sortOne, limitOne, promiseName = 'Feed') => actionPromise('PROMISE', promiseName, gql(`query FeedFindOne ($feedOne: String){
|
|
|
+// PostFind(query: $feedOne){
|
|
|
+// _id createdAt title text likesCount owner{
|
|
|
+// _id login avatar{
|
|
|
+// url
|
|
|
+// }
|
|
|
+// }
|
|
|
+// comments {
|
|
|
+// _id
|
|
|
+// }
|
|
|
+// images{
|
|
|
+// url
|
|
|
+// }
|
|
|
+// }
|
|
|
+// }`, {
|
|
|
+// // вот тут прописал limit - количество постов, которые отображаются в ленте
|
|
|
+// feedOne: JSON.stringify([{ ___owner: { $in: arr } }, { sort: [{ _id: sortOne }], limit: [limitOne] }])
|
|
|
+// }))
|
|
|
+
|
|
|
+//================= вот это тоже нужно будет удалить после тестов =====================
|
|
|
+export const actionFeedFindOne = (arr, sortOne, limitOne, promiseName = 'Feed', skipOne = 0) => actionPromise('FEED', promiseName, gql(`query FeedFindOne ($feedOne: String){
|
|
|
PostFind(query: $feedOne){
|
|
|
_id createdAt title text likesCount owner{
|
|
|
_id login avatar{
|
|
@@ -201,16 +235,82 @@ export const actionFeedFindOne = (arr, sortOne, promiseName = 'Feed') => actionP
|
|
|
}
|
|
|
}
|
|
|
}`, {
|
|
|
- feedOne: JSON.stringify([{ ___owner: { $in: arr } }, { sort: [{ _id: sortOne }] }])
|
|
|
+ // вот тут прописал limit - количество постов, которые отображаются в ленте
|
|
|
+ feedOne: JSON.stringify([{ ___owner: { $in: arr } }, { sort: [{ _id: sortOne }], limit: [limitOne], skip: [skipOne] }])
|
|
|
}))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+// запрос ленты с пропуском определенного количества постов.комментов
|
|
|
+// export const actionFeedFindOneSkip = (arr, sortOne, skipOne, limitOne, promiseName = 'Feed') => actionPromise('FEED', promiseName, gql(`query FeedFindOne ($feedOne: String){
|
|
|
+// PostFind(query: $feedOne){
|
|
|
+// _id createdAt title text likesCount owner{
|
|
|
+// _id login avatar{
|
|
|
+// url
|
|
|
+// }
|
|
|
+// }
|
|
|
+// comments {
|
|
|
+// _id
|
|
|
+// }
|
|
|
+// images{
|
|
|
+// url
|
|
|
+// }
|
|
|
+// }
|
|
|
+// }`, {
|
|
|
+// // вот тут прописал limit - количество постов, которые отображаются в ленте
|
|
|
+// feedOne: JSON.stringify([{ ___owner: { $in: arr } }, { sort: [{ _id: sortOne }], skip: [skipOne], limit: [limitOne] }])
|
|
|
+// }))
|
|
|
+
|
|
|
+// ====================== и это удалить после теста ====================
|
|
|
+export const actionFeedFindOneSkip = (arr, sortOne, skipOne, limitOne, promiseName = 'Feed') => actionPromise('FEED', promiseName, gql(`query FeedFindOne ($feedOne: String){
|
|
|
+ PostFind(query: $feedOne){
|
|
|
+ _id createdAt title text likesCount owner{
|
|
|
+ _id login avatar{
|
|
|
+ url
|
|
|
+ }
|
|
|
+ }
|
|
|
+ comments {
|
|
|
+ _id
|
|
|
+ }
|
|
|
+ images{
|
|
|
+ url
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }`, {
|
|
|
+ // вот тут прописал limit - количество постов, которые отображаются в ленте
|
|
|
+ feedOne: JSON.stringify([{ ___owner: { $in: arr } }, { sort: [{ _id: sortOne }], skip: [skipOne], limit: [limitOne] }])
|
|
|
+}))
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+// запрос на подсчет количества постов юзера
|
|
|
+export const actionPostsCount = (id, promiseName) => actionPromise('PROMISE', promiseName, gql(`query PostsCount ($postsCount: String){
|
|
|
+ PostCount(query: $postsCount)
|
|
|
+}`, {
|
|
|
+ postsCount: JSON.stringify([{ ___owner: id }])
|
|
|
+})
|
|
|
+
|
|
|
+)
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
// =========================================
|
|
|
// Thunk-и
|
|
|
|
|
|
-
|
|
|
// Thunk логин и последующую логинизацию в authReduser
|
|
|
export const actionFullLogin = (login, password) =>
|
|
|
async dispatch => {
|
|
@@ -228,6 +328,10 @@ export const actionFullLogin = (login, password) =>
|
|
|
}
|
|
|
|
|
|
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
// Thunk на регистрацию и последующую логинизацию
|
|
|
export const actionFullRegistration = (login, password) =>
|
|
|
async dispatch => {
|
|
@@ -253,15 +357,28 @@ export const actionFullLogout = () =>
|
|
|
}
|
|
|
|
|
|
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
// Thunk для страницы юзера (диспатчим запрос на юзера и на ленту его постов)
|
|
|
-export const actionFullUserFindOne = (id) =>
|
|
|
+export const actionFullUserFindOne = _id =>
|
|
|
async dispatch => {
|
|
|
- const test = await dispatch(actionFindUserOne(id, 'UserFind'))
|
|
|
- console.log('test: ', test)
|
|
|
- dispatch(actionFeedFindOne([id], -1, 'UserFeed'))
|
|
|
+
|
|
|
+ // запрашиваем информацию о пользователе
|
|
|
+ await dispatch(actionFindUserOne(_id, 'UserFindOne'))
|
|
|
+
|
|
|
+ // парсим счетчик, сколько постов у юзера
|
|
|
+ dispatch(actionPostsCount(_id, 'UserPostsCount'))
|
|
|
+
|
|
|
+ // запрашиваем список постов для юзера
|
|
|
+ dispatch(actionFeedFindOne([_id], -1, 100, 'UserFeed'))
|
|
|
}
|
|
|
|
|
|
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
// запрос AboutMe для главной страницы (лента моих постов и мои данные)
|
|
|
export const actionAboutMe = () =>
|
|
|
async (dispatch, getState) => {
|
|
@@ -270,21 +387,41 @@ export const actionAboutMe = () =>
|
|
|
// диспатчим запрос AboutMe (о себе)
|
|
|
const userData = await dispatch(actionFindUserOne(myId, 'AboutMe'))
|
|
|
|
|
|
- // парсим все мои посты
|
|
|
- dispatch(actionFeedFindOne([myId], -1, 'MyPosts'))
|
|
|
+ // парсим счетчик, сколько постов у меня
|
|
|
+ dispatch(actionPostsCount(myId, 'MyPostsCount'))
|
|
|
|
|
|
+ let followingList = []
|
|
|
// проверяем, есть ли вообще подписчики и если да, парсим их
|
|
|
if (userData?.following) {
|
|
|
// получаем id всех подписок
|
|
|
- const followingList = (userData.following).map(user => user?._id)
|
|
|
+ followingList = (userData.following).map(user => user?._id)
|
|
|
+ }
|
|
|
+
|
|
|
+ // запрашиваем формирование ленты моих постов (первый параметр - список id, второй - это сортировка постов от новых)
|
|
|
+ dispatch(actionFeedFindOne(followingList, -1, 10, 'MyFeed'))
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
|
|
|
- // запрашиваем формирование ленты моих постов (первый параметр - список id, второй - это сортировка постов от новых)
|
|
|
- dispatch(actionFeedFindOne(followingList, -1, 'MyFeed'))
|
|
|
|
|
|
+// ================= на удаление (начало)=====================
|
|
|
+
|
|
|
+export const actionDownloadFeed = (skip) =>
|
|
|
+ async (dispatch, getState) => {
|
|
|
+
|
|
|
+ console.log('скипаем: ', skip)
|
|
|
+ const followingList = (getState()?.promise?.AboutMe?.payload?.following).map(user => user._id)
|
|
|
+
|
|
|
+ if (followingList) {
|
|
|
+ const result = await dispatch(actionFeedFindOne(followingList, -1, 10, 'AddFeed', skip))
|
|
|
+
|
|
|
+ return result
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
+// ================= на удаление(конец) =====================
|
|
|
+
|
|
|
|
|
|
|
|
|
// запрос на загрузку картинок на бек
|
|
@@ -307,14 +444,18 @@ function filesUpload(files) {
|
|
|
return Promise.all(files.map(fileUpload))
|
|
|
}
|
|
|
|
|
|
-export const actionFilesUpload = (files) => actionPromise('FilesUpload',
|
|
|
+export const actionFilesUpload = (files) => actionPromise('PROMISE', 'FilesUpload',
|
|
|
filesUpload(files)
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
// запрос на создание поста
|
|
|
-export const actionCreatePost = (params) => actionPromise('CreatePost', gql(
|
|
|
+export const actionCreatePost = (params) => actionPromise('PROMISE', 'CreatePost', gql(
|
|
|
`mutation CreatePost($createNewPost: PostInput){
|
|
|
PostUpsert(post: $createNewPost){
|
|
|
_id
|
|
@@ -323,6 +464,14 @@ export const actionCreatePost = (params) => actionPromise('CreatePost', gql(
|
|
|
createNewPost: params
|
|
|
}))
|
|
|
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
// санк для создания поста и последующего перехода на его страницу
|
|
|
export const actionFullCreatePost = (params) =>
|
|
|
async dispatch => {
|