mirror of
				https://github.com/lingble/chatwoot.git
				synced 2025-10-30 18:47:51 +00:00 
			
		
		
		
	 1a4faab381
			
		
	
	1a4faab381
	
	
	
		
			
			* feat: Creates cc bcc input component for reply box * Adds email inputs for cc and bcc * Cleans storybook code * Fixes eslint issues * Update app/javascript/dashboard/components/widgets/conversation/stories/ReplyEmailHead.stories.js Co-authored-by: Muhsin Keloth <muhsinkeramam@gmail.com> * Review fixes * Update app/javascript/dashboard/components/widgets/conversation/stories/ReplyEmailHead.stories.js Co-authored-by: Muhsin Keloth <muhsinkeramam@gmail.com> * Update app/javascript/dashboard/components/widgets/conversation/stories/ReplyEmailHead.stories.js Co-authored-by: Muhsin Keloth <muhsinkeramam@gmail.com> * Update app/javascript/dashboard/components/widgets/conversation/stories/ReplyEmailHead.stories.js Co-authored-by: Muhsin Keloth <muhsinkeramam@gmail.com> Co-authored-by: Muhsin Keloth <muhsinkeramam@gmail.com>
		
			
				
	
	
		
			113 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			113 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| import {
 | |
|   createConversationAPI,
 | |
|   sendMessageAPI,
 | |
|   getMessagesAPI,
 | |
|   sendAttachmentAPI,
 | |
|   toggleTyping,
 | |
|   setUserLastSeenAt,
 | |
| } from 'widget/api/conversation';
 | |
| import { refreshActionCableConnector } from '../../../helpers/actionCable';
 | |
| 
 | |
| import { createTemporaryMessage, getNonDeletedMessages } from './helpers';
 | |
| 
 | |
| export const actions = {
 | |
|   createConversation: async ({ commit, dispatch }, params) => {
 | |
|     commit('setConversationUIFlag', { isCreating: true });
 | |
|     try {
 | |
|       const { data } = await createConversationAPI(params);
 | |
|       const {
 | |
|         contact: { pubsub_token: pubsubToken },
 | |
|         messages,
 | |
|       } = data;
 | |
|       const [message = {}] = messages;
 | |
|       commit('pushMessageToConversation', message);
 | |
|       refreshActionCableConnector(pubsubToken);
 | |
|       dispatch('conversationAttributes/getAttributes', {}, { root: true });
 | |
|     } catch (error) {
 | |
|       // Ignore error
 | |
|     } finally {
 | |
|       commit('setConversationUIFlag', { isCreating: false });
 | |
|     }
 | |
|   },
 | |
|   sendMessage: async ({ commit }, params) => {
 | |
|     const { content } = params;
 | |
|     commit('pushMessageToConversation', createTemporaryMessage({ content }));
 | |
|     await sendMessageAPI(content);
 | |
|   },
 | |
| 
 | |
|   sendAttachment: async ({ commit }, params) => {
 | |
|     const {
 | |
|       attachment: { thumbUrl, fileType },
 | |
|     } = params;
 | |
|     const attachment = {
 | |
|       thumb_url: thumbUrl,
 | |
|       data_url: thumbUrl,
 | |
|       file_type: fileType,
 | |
|       status: 'in_progress',
 | |
|     };
 | |
|     const tempMessage = createTemporaryMessage({
 | |
|       attachments: [attachment],
 | |
|     });
 | |
|     commit('pushMessageToConversation', tempMessage);
 | |
|     try {
 | |
|       const { data } = await sendAttachmentAPI(params);
 | |
|       commit('updateAttachmentMessageStatus', {
 | |
|         message: data,
 | |
|         tempId: tempMessage.id,
 | |
|       });
 | |
|     } catch (error) {
 | |
|       // Show error
 | |
|     }
 | |
|   },
 | |
|   fetchOldConversations: async ({ commit }, { before } = {}) => {
 | |
|     try {
 | |
|       commit('setConversationListLoading', true);
 | |
|       const { data } = await getMessagesAPI({ before });
 | |
|       const formattedMessages = getNonDeletedMessages({ messages: data });
 | |
|       commit('setMessagesInConversation', formattedMessages);
 | |
|       commit('setConversationListLoading', false);
 | |
|     } catch (error) {
 | |
|       commit('setConversationListLoading', false);
 | |
|     }
 | |
|   },
 | |
| 
 | |
|   clearConversations: ({ commit }) => {
 | |
|     commit('clearConversations');
 | |
|   },
 | |
| 
 | |
|   addOrUpdateMessage: async ({ commit }, data) => {
 | |
|     const { id, content_attributes } = data;
 | |
|     if (content_attributes && content_attributes.deleted) {
 | |
|       commit('deleteMessage', id);
 | |
|       return;
 | |
|     }
 | |
|     commit('pushMessageToConversation', data);
 | |
|   },
 | |
| 
 | |
|   toggleAgentTyping({ commit }, data) {
 | |
|     commit('toggleAgentTypingStatus', data);
 | |
|   },
 | |
| 
 | |
|   toggleUserTyping: async (_, data) => {
 | |
|     try {
 | |
|       await toggleTyping(data);
 | |
|     } catch (error) {
 | |
|       // IgnoreError
 | |
|     }
 | |
|   },
 | |
| 
 | |
|   setUserLastSeen: async ({ commit, getters: appGetters }) => {
 | |
|     if (!appGetters.getConversationSize) {
 | |
|       return;
 | |
|     }
 | |
| 
 | |
|     const lastSeen = Date.now() / 1000;
 | |
|     try {
 | |
|       commit('setMetaUserLastSeenAt', lastSeen);
 | |
|       await setUserLastSeenAt({ lastSeen });
 | |
|     } catch (error) {
 | |
|       // IgnoreError
 | |
|     }
 | |
|   },
 | |
| };
 |