2020-12-03 04:22:51 +00:00
|
|
|
import { Map as ImmutableMap, List as ImmutableList, toJS } from 'immutable'
|
|
|
|
import noop from 'lodash.noop'
|
2020-11-25 21:22:37 +00:00
|
|
|
import api from '../api'
|
|
|
|
import { me } from '../initial_state'
|
2020-12-03 04:22:51 +00:00
|
|
|
import { importFetchedChatMessages } from './importer'
|
2020-11-25 21:22:37 +00:00
|
|
|
|
2020-12-03 04:22:51 +00:00
|
|
|
export const CHAT_MESSAGES_SEND_REQUEST = 'CHAT_MESSAGES_SEND_REQUEST'
|
|
|
|
export const CHAT_MESSAGES_SEND_SUCCESS = 'CHAT_MESSAGES_SEND_SUCCESS'
|
|
|
|
export const CHAT_MESSAGES_SEND_FAIL = 'CHAT_MESSAGES_SEND_FAIL'
|
2020-11-25 21:22:37 +00:00
|
|
|
|
2020-12-03 04:22:51 +00:00
|
|
|
export const CHAT_MESSAGES_DELETE_REQUEST = 'CHAT_MESSAGES_DELETE_REQUEST'
|
|
|
|
export const CHAT_MESSAGES_DELETE_SUCCESS = 'CHAT_MESSAGES_DELETE_SUCCESS'
|
|
|
|
export const CHAT_MESSAGES_DELETE_FAIL = 'CHAT_MESSAGES_DELETE_FAIL'
|
2020-11-25 21:22:37 +00:00
|
|
|
|
2020-12-10 16:51:45 +00:00
|
|
|
export const CHAT_MESSAGES_PURGE_REQUEST = 'CHAT_MESSAGES_PURGE_REQUEST'
|
|
|
|
export const CHAT_MESSAGES_PURGE_SUCCESS = 'CHAT_MESSAGES_PURGE_SUCCESS'
|
|
|
|
export const CHAT_MESSAGES_PURGE_FAIL = 'CHAT_MESSAGES_PURGE_FAIL'
|
|
|
|
|
2020-11-25 21:22:37 +00:00
|
|
|
/**
|
|
|
|
*
|
|
|
|
*/
|
2020-12-03 04:22:51 +00:00
|
|
|
export const sendChatMessage = (text = '', chatConversationId) => (dispatch, getState) => {
|
|
|
|
if (!me || !chatConversationId) return
|
|
|
|
if (text.length === 0) return
|
2020-11-25 21:22:37 +00:00
|
|
|
|
2020-12-03 22:13:11 +00:00
|
|
|
dispatch(sendChatMessageRequest(chatConversationId))
|
2020-11-25 21:22:37 +00:00
|
|
|
|
2020-12-03 04:22:51 +00:00
|
|
|
api(getState).post('/api/v1/chat_messages', {
|
2020-11-25 21:22:37 +00:00
|
|
|
text,
|
2020-12-03 04:22:51 +00:00
|
|
|
chat_conversation_id: chatConversationId,
|
2020-11-25 21:22:37 +00:00
|
|
|
}, {
|
2020-12-03 04:22:51 +00:00
|
|
|
// headers: {
|
|
|
|
// 'Idempotency-Key': getState().getIn(['chat_compose`', 'idempotencyKey']),
|
|
|
|
// },
|
2020-11-25 21:22:37 +00:00
|
|
|
}).then((response) => {
|
2020-12-03 04:22:51 +00:00
|
|
|
dispatch(importFetchedChatMessages([response.data]))
|
2020-12-03 22:13:11 +00:00
|
|
|
dispatch(sendChatMessageSuccess(response.data))
|
2020-11-25 21:22:37 +00:00
|
|
|
}).catch((error) => {
|
2020-12-03 22:13:11 +00:00
|
|
|
dispatch(sendChatMessageFail(error))
|
2020-11-25 21:22:37 +00:00
|
|
|
})
|
|
|
|
}
|
|
|
|
|
2020-12-03 22:13:11 +00:00
|
|
|
const sendChatMessageRequest = (chatConversationId) => ({
|
2020-12-03 04:22:51 +00:00
|
|
|
type: CHAT_MESSAGES_SEND_REQUEST,
|
2020-12-03 22:13:11 +00:00
|
|
|
chatConversationId,
|
2020-11-25 21:22:37 +00:00
|
|
|
})
|
|
|
|
|
2020-12-03 22:13:11 +00:00
|
|
|
export const sendChatMessageSuccess = (chatMessage) => ({
|
2020-12-03 04:22:51 +00:00
|
|
|
type: CHAT_MESSAGES_SEND_SUCCESS,
|
|
|
|
chatMessage,
|
2020-11-25 21:22:37 +00:00
|
|
|
})
|
|
|
|
|
2020-12-03 22:13:11 +00:00
|
|
|
const sendChatMessageFail = (error) => ({
|
2020-12-03 04:22:51 +00:00
|
|
|
type: CHAT_MESSAGES_SEND_FAIL,
|
2020-12-08 04:39:13 +00:00
|
|
|
showToast: true,
|
2020-11-25 21:22:37 +00:00
|
|
|
error,
|
|
|
|
})
|
|
|
|
|
|
|
|
/**
|
|
|
|
*
|
|
|
|
*/
|
2020-12-03 22:13:11 +00:00
|
|
|
export const deleteChatMessage = (chatMessageId) => (dispatch, getState) => {
|
2020-12-03 04:22:51 +00:00
|
|
|
if (!me || !chatMessageId) return
|
2020-11-25 21:22:37 +00:00
|
|
|
|
2020-12-03 22:13:11 +00:00
|
|
|
dispatch(deleteChatMessageRequest(chatMessageId))
|
2020-11-25 21:22:37 +00:00
|
|
|
|
2020-12-03 04:22:51 +00:00
|
|
|
api(getState).delete(`/api/v1/chat_messages/${chatMessageId}`, {}, {
|
|
|
|
// headers: {
|
|
|
|
// 'Idempotency-Key': getState().getIn(['chat_compose', 'idempotencyKey']),
|
|
|
|
// },
|
2020-11-25 21:22:37 +00:00
|
|
|
}).then((response) => {
|
2020-12-03 22:13:11 +00:00
|
|
|
dispatch(deleteChatMessageSuccess(response.data))
|
2020-11-25 21:22:37 +00:00
|
|
|
}).catch((error) => {
|
2020-12-03 22:13:11 +00:00
|
|
|
dispatch(deleteChatMessageFail(error))
|
2020-11-25 21:22:37 +00:00
|
|
|
})
|
|
|
|
}
|
|
|
|
|
2020-12-03 22:13:11 +00:00
|
|
|
const deleteChatMessageRequest = (chatMessageId) => ({
|
2020-12-03 04:22:51 +00:00
|
|
|
type: CHAT_MESSAGES_DELETE_REQUEST,
|
|
|
|
chatMessageId,
|
2020-11-25 21:22:37 +00:00
|
|
|
})
|
|
|
|
|
2020-12-03 22:13:11 +00:00
|
|
|
const deleteChatMessageSuccess = () => ({
|
2020-12-03 04:22:51 +00:00
|
|
|
type: CHAT_MESSAGES_DELETE_SUCCESS,
|
2020-12-08 04:39:13 +00:00
|
|
|
showToast: true,
|
2020-11-25 21:22:37 +00:00
|
|
|
})
|
|
|
|
|
2020-12-03 22:13:11 +00:00
|
|
|
const deleteChatMessageFail = (error) => ({
|
2020-12-03 04:22:51 +00:00
|
|
|
type: CHAT_MESSAGES_DELETE_FAIL,
|
2020-12-08 04:39:13 +00:00
|
|
|
showToast: true,
|
2020-11-25 21:22:37 +00:00
|
|
|
error,
|
2020-12-10 16:51:45 +00:00
|
|
|
})
|
|
|
|
|
|
|
|
/**
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
export const purgeChatMessages = (chatConversationId) => (dispatch, getState) => {
|
|
|
|
if (!me || !chatConversationId) return
|
|
|
|
|
|
|
|
dispatch(deleteChatMessagesRequest(chatConversationId))
|
|
|
|
|
|
|
|
api(getState).delete(`/api/v1/chat_conversations/${chatConversationId}/messages/destroy_all`).then((response) => {
|
|
|
|
dispatch(deleteChatMessagesSuccess(response.data))
|
|
|
|
}).catch((error) => {
|
|
|
|
dispatch(deleteChatMessagesFail(error))
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
const deleteChatMessagesRequest = () => ({
|
|
|
|
type: CHAT_MESSAGES_PURGE_REQUEST,
|
|
|
|
})
|
|
|
|
|
|
|
|
const deleteChatMessagesSuccess = (chatConversationId) => ({
|
|
|
|
type: CHAT_MESSAGES_PURGE_SUCCESS,
|
|
|
|
chatConversationId,
|
|
|
|
showToast: true,
|
|
|
|
})
|
|
|
|
|
|
|
|
const deleteChatMessagesFail = (error) => ({
|
|
|
|
type: CHAT_MESSAGES_PURGE_FAIL,
|
|
|
|
showToast: true,
|
|
|
|
error,
|
2020-11-25 21:22:37 +00:00
|
|
|
})
|