hashtag in top of tag feed, scroll to comment, chat blocking, muting, filtering
This commit is contained in:
mgabdev
2020-12-21 18:30:46 -05:00
parent ee91809e8d
commit 67d94858dc
39 changed files with 576 additions and 179 deletions

View File

@@ -123,7 +123,7 @@ export const fetchChatMessengerBlocks = () => (dispatch, getState) => {
dispatch(fetchChatMessengerBlocksRequest())
api(getState).get('/api/v1/chat_conversation_accounts/blocked_chat_accounts').then(response => {
api(getState).get('/api/v1/chat_conversations/blocked_chat_accounts').then(response => {
const next = getLinks(response).refs.find(link => link.rel === 'next')
dispatch(importFetchedAccounts(response.data))
dispatch(fetchChatMessengerBlocksSuccess(response.data, next ? next.uri : null))

View File

@@ -1,4 +1,5 @@
import api, { getLinks } from '../api'
import debounce from 'lodash.debounce'
import { importFetchedAccounts } from './importer'
import { me } from '../initial_state'
@@ -12,7 +13,9 @@ export const CHAT_CONVERSATIONS_APPROVED_EXPAND_REQUEST = 'CHAT_CONVERSATIONS_AP
export const CHAT_CONVERSATIONS_APPROVED_EXPAND_SUCCESS = 'CHAT_CONVERSATIONS_APPROVED_EXPAND_SUCCESS'
export const CHAT_CONVERSATIONS_APPROVED_EXPAND_FAIL = 'CHAT_CONVERSATIONS_APPROVED_EXPAND_FAIL'
export const CHAT_CONVERSATION_APPROVED_UNREAD_COUNT_FETCH_SUCCESS = 'CHAT_CONVERSATIONS_APPROVED_EXPAND_FAIL'
export const CHAT_CONVERSATION_APPROVED_UNREAD_COUNT_FETCH_SUCCESS = 'CHAT_CONVERSATION_APPROVED_UNREAD_COUNT_FETCH_SUCCESS'
export const CHAT_CONVERSATION_APPROVED_SEARCH_FETCH_SUCCESS = 'CHAT_CONVERSATION_APPROVED_SEARCH_FETCH_SUCCESS'
//
@@ -38,6 +41,16 @@ export const CHAT_CONVERSATIONS_REQUESTED_EXPAND_FAIL = 'CHAT_CONVERSATIONS_R
//
export const CHAT_CONVERSATIONS_MUTED_FETCH_REQUEST = 'CHAT_CONVERSATIONS_MUTED_FETCH_REQUEST'
export const CHAT_CONVERSATIONS_MUTED_FETCH_SUCCESS = 'CHAT_CONVERSATIONS_MUTED_FETCH_SUCCESS'
export const CHAT_CONVERSATIONS_MUTED_FETCH_FAIL = 'CHAT_CONVERSATIONS_MUTED_FETCH_FAIL'
export const CHAT_CONVERSATIONS_MUTED_EXPAND_REQUEST = 'CHAT_CONVERSATIONS_MUTED_EXPAND_REQUEST'
export const CHAT_CONVERSATIONS_MUTED_EXPAND_SUCCESS = 'CHAT_CONVERSATIONS_MUTED_EXPAND_SUCCESS'
export const CHAT_CONVERSATIONS_MUTED_EXPAND_FAIL = 'CHAT_CONVERSATIONS_MUTED_EXPAND_FAIL'
//
export const CHAT_CONVERSATION_REQUEST_APPROVE_SUCCESS = 'CHAT_CONVERSATION_REQUEST_APPROVE_SUCCESS'
export const CHAT_CONVERSATION_REQUEST_APPROVE_FAIL = 'CHAT_CONVERSATION_REQUEST_APPROVE_FAIL'
@@ -215,6 +228,83 @@ export const expandChatConversationRequestedFail = (error) => ({
error,
})
/**
* @description Fetch paginated muted chat conversations, import accounts and set chat converations
*/
export const fetchChatConversationMuted = () => (dispatch, getState) => {
if (!me) return
dispatch(fetchChatConversationMutedRequest())
api(getState).get('/api/v1/chat_conversations/muted_conversations').then((response) => {
const next = getLinks(response).refs.find(link => link.rel === 'next')
const conversationsAccounts = [].concat.apply([], response.data.map((c) => c.other_accounts))
// const conversationsChatMessages = response.data.map((c) => c.last_chat_message)
dispatch(importFetchedAccounts(conversationsAccounts))
// dispatch(importFetchedChatMessages(conversationsChatMessages))
dispatch(fetchChatConversationMutedSuccess(response.data, next ? next.uri : null))
}).catch((error) => {
dispatch(fetchChatConversationMutedFail(error))
})
}
export const fetchChatConversationMutedRequest = () => ({
type: CHAT_CONVERSATIONS_MUTED_FETCH_REQUEST,
})
export const fetchChatConversationMutedSuccess = (chatConversations, next) => ({
type: CHAT_CONVERSATIONS_MUTED_FETCH_SUCCESS,
chatConversations,
next,
})
export const fetchChatConversationMutedFail = (error) => ({
type: CHAT_CONVERSATIONS_MUTED_FETCH_FAIL,
showToast: true,
error,
})
/**
* @description Expand paginated muted chat conversations, import accounts and set chat converations
*/
export const expandChatConversationMuted = () => (dispatch, getState) => {
if (!me) return
const url = getState().getIn(['chat_conversations', 'muted', 'next'])
const isLoading = getState().getIn(['chat_conversations', 'muted', 'isLoading'])
if (url === null || isLoading) return
dispatch(expandChatConversationMutedRequest())
api(getState).get(url).then(response => {
const next = getLinks(response).refs.find(link => link.rel === 'next')
const conversationsAccounts = [].concat.apply([], response.data.map((c) => c.other_accounts))
// const conversationsChatMessages = response.data.map((c) => c.last_chat_message)
dispatch(importFetchedAccounts(conversationsAccounts))
// dispatch(importFetchedChatMessages(conversationsChatMessages))
dispatch(expandChatConversationMutedSuccess(response.data, next ? next.uri : null))
}).catch(error => dispatch(expandChatConversationMutedFail(error)))
}
export const expandChatConversationMutedRequest = () => ({
type: CHAT_CONVERSATIONS_MUTED_EXPAND_REQUEST,
})
export const expandChatConversationMutedSuccess = (chatConversations, next) => ({
type: CHAT_CONVERSATIONS_MUTED_EXPAND_SUCCESS,
chatConversations,
next,
})
export const expandChatConversationMutedFail = (error) => ({
type: CHAT_CONVERSATIONS_MUTED_EXPAND_FAIL,
showToast: true,
error,
})
/**
* @description Create a chat conversation with given accountId. May fail because of blocks.
* @param {String} accountId
@@ -227,6 +317,7 @@ export const createChatConversation = (accountId) => (dispatch, getState) => {
api(getState).post('/api/v1/chat_conversation', { account_id: accountId }).then((response) => {
dispatch(createChatConversationSuccess(response.data))
}).catch((error) => {
console.log("error:", error)
dispatch(createChatConversationFail(error))
})
}
@@ -414,3 +505,40 @@ export const setChatConversationExpirationFail = (error) => ({
error,
})
/**
*
*/
export const fetchChatConversationAccountSuggestions = (query) => (dispatch, getState) => {
if (!query) return
debouncedFetchChatConversationAccountSuggestions(query, dispatch, getState)
}
export const debouncedFetchChatConversationAccountSuggestions = debounce((query, dispatch, getState) => {
if (!query) return
api(getState).get('/api/v1/accounts/search', {
params: {
q: query,
resolve: false,
limit: 4,
},
}).then((response) => {
// const next = getLinks(response).refs.find(link => link.rel === 'next')
// const conversationsAccounts = [].concat.apply([], response.data.map((c) => c.other_accounts))
dispatch(importFetchedAccounts(response.data))
// dispatch(importFetchedAccounts(conversationsAccounts))
// dispatch(importFetchedChatMessages(conversationsChatMessages))
// dispatch(fetchChatConversationsSuccess(response.data, next ? next.uri : null))
dispatch(fetchChatConversationAccountSuggestionsSuccess(response.data))
}).catch((error) => {
//
})
}, 650, { leading: true })
const fetchChatConversationAccountSuggestionsSuccess = (chatConversations) => ({
type: CHAT_CONVERSATION_APPROVED_SEARCH_FETCH_SUCCESS,
chatConversations,
})

View File

@@ -5,11 +5,11 @@ import { me } from '../initial_state'
export const CHAT_SETTING_CHANGE = 'CHAT_SETTING_CHANGE'
export const CHAT_SETTING_SAVE = 'CHAT_SETTING_SAVE'
export const changeChatSetting = (path, value) => (dispatch) => {
export const changeChatSetting = (path, checked) => (dispatch) => {
dispatch({
type: CHAT_SETTING_CHANGE,
path,
value,
checked,
})
dispatch(saveChatSettings())

View File

@@ -0,0 +1,29 @@
import api from '../api'
export const HASHTAG_FETCH_REQUEST = 'HASHTAG_FETCH_REQUEST'
export const HASHTAG_FETCH_SUCCESS = 'HASHTAG_FETCH_SUCCESS'
export const HASHTAG_FETCH_FAIL = 'HASHTAG_FETCH_FAIL'
export const fetchHashtag = (tag) => (dispatch, getState) => {
if (!tag) return
dispatch(fetchHashtagRequest())
api(getState).get(`/api/v1/hashtags/${tag.toLowerCase()}`)
.then(({ data }) => dispatch(fetchHashtagSuccess(data)))
.catch(err => dispatch(fetchHashtagFail(err)))
}
export const fetchHashtagRequest = () => ({
type: HASHTAG_FETCH_REQUEST,
})
export const fetchHashtagSuccess = (hashtag) => ({
type: HASHTAG_FETCH_SUCCESS,
hashtag,
})
export const fetchHashtagFail = error => ({
type: HASHTAG_FETCH_FAIL,
error,
})

View File

@@ -84,6 +84,8 @@ export const connectChatMessagesStream = (accountId) => {
onReceive (data) {
if (!data['event'] || !data['payload']) return
if (data.event === 'notification') {
// : todo :
//Play sound
dispatch(manageIncomingChatMessage(JSON.parse(data.payload)))
}
},