mirror of
				https://github.com/lingble/chatwoot.git
				synced 2025-10-30 18:47:51 +00:00 
			
		
		
		
	 c0e905b5d8
			
		
	
	c0e905b5d8
	
	
	
		
			
			* fix: Search improvements and bug fixes * Resets tab to all on search * Fix index bug with tabs --------- Co-authored-by: Sivin Varghese <64252451+iamsivin@users.noreply.github.com>
		
			
				
	
	
		
			158 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			158 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| import SearchAPI from '../../api/search';
 | |
| import types from '../mutation-types';
 | |
| export const initialState = {
 | |
|   records: [],
 | |
|   contactRecords: [],
 | |
|   conversationRecords: [],
 | |
|   messageRecords: [],
 | |
|   uiFlags: {
 | |
|     isFetching: false,
 | |
|     isSearchCompleted: false,
 | |
|     contact: { isFetching: false },
 | |
|     conversation: { isFetching: false },
 | |
|     message: { isFetching: false },
 | |
|   },
 | |
| };
 | |
| 
 | |
| export const getters = {
 | |
|   getConversations(state) {
 | |
|     return state.records;
 | |
|   },
 | |
|   getContactRecords(state) {
 | |
|     return state.contactRecords;
 | |
|   },
 | |
|   getConversationRecords(state) {
 | |
|     return state.conversationRecords;
 | |
|   },
 | |
|   getMessageRecords(state) {
 | |
|     return state.messageRecords;
 | |
|   },
 | |
|   getUIFlags(state) {
 | |
|     return state.uiFlags;
 | |
|   },
 | |
| };
 | |
| 
 | |
| export const actions = {
 | |
|   async get({ commit }, { q }) {
 | |
|     commit(types.SEARCH_CONVERSATIONS_SET, []);
 | |
|     if (!q) {
 | |
|       return;
 | |
|     }
 | |
|     commit(types.SEARCH_CONVERSATIONS_SET_UI_FLAG, { isFetching: true });
 | |
|     try {
 | |
|       const {
 | |
|         data: { payload },
 | |
|       } = await SearchAPI.get({ q });
 | |
|       commit(types.SEARCH_CONVERSATIONS_SET, payload);
 | |
|     } catch (error) {
 | |
|       // Ignore error
 | |
|     } finally {
 | |
|       commit(types.SEARCH_CONVERSATIONS_SET_UI_FLAG, {
 | |
|         isFetching: false,
 | |
|       });
 | |
|     }
 | |
|   },
 | |
|   async fullSearch({ commit, dispatch }, { q }) {
 | |
|     if (!q) {
 | |
|       return;
 | |
|     }
 | |
|     commit(types.FULL_SEARCH_SET_UI_FLAG, {
 | |
|       isFetching: true,
 | |
|       isSearchCompleted: false,
 | |
|     });
 | |
|     try {
 | |
|       await Promise.all([
 | |
|         dispatch('contactSearch', { q }),
 | |
|         dispatch('conversationSearch', { q }),
 | |
|         dispatch('messageSearch', { q }),
 | |
|       ]);
 | |
|     } catch (error) {
 | |
|       // Ignore error
 | |
|     } finally {
 | |
|       commit(types.FULL_SEARCH_SET_UI_FLAG, {
 | |
|         isFetching: false,
 | |
|         isSearchCompleted: true,
 | |
|       });
 | |
|     }
 | |
|   },
 | |
|   async contactSearch({ commit }, { q }) {
 | |
|     commit(types.CONTACT_SEARCH_SET, []);
 | |
|     commit(types.CONTACT_SEARCH_SET_UI_FLAG, { isFetching: true });
 | |
|     try {
 | |
|       const { data } = await SearchAPI.contacts({ q });
 | |
|       commit(types.CONTACT_SEARCH_SET, data.payload.contacts);
 | |
|     } catch (error) {
 | |
|       // Ignore error
 | |
|     } finally {
 | |
|       commit(types.CONTACT_SEARCH_SET_UI_FLAG, { isFetching: false });
 | |
|     }
 | |
|   },
 | |
|   async conversationSearch({ commit }, { q }) {
 | |
|     commit(types.CONVERSATION_SEARCH_SET, []);
 | |
|     commit(types.CONVERSATION_SEARCH_SET_UI_FLAG, { isFetching: true });
 | |
|     try {
 | |
|       const { data } = await SearchAPI.conversations({ q });
 | |
|       commit(types.CONVERSATION_SEARCH_SET, data.payload.conversations);
 | |
|     } catch (error) {
 | |
|       // Ignore error
 | |
|     } finally {
 | |
|       commit(types.CONVERSATION_SEARCH_SET_UI_FLAG, { isFetching: false });
 | |
|     }
 | |
|   },
 | |
|   async messageSearch({ commit }, { q }) {
 | |
|     commit(types.MESSAGE_SEARCH_SET, []);
 | |
|     commit(types.MESSAGE_SEARCH_SET_UI_FLAG, { isFetching: true });
 | |
|     try {
 | |
|       const { data } = await SearchAPI.messages({ q });
 | |
|       commit(types.MESSAGE_SEARCH_SET, data.payload.messages);
 | |
|     } catch (error) {
 | |
|       // Ignore error
 | |
|     } finally {
 | |
|       commit(types.MESSAGE_SEARCH_SET_UI_FLAG, { isFetching: false });
 | |
|     }
 | |
|   },
 | |
|   async clearSearchResults({ commit }) {
 | |
|     commit(types.MESSAGE_SEARCH_SET, []);
 | |
|     commit(types.CONVERSATION_SEARCH_SET, []);
 | |
|     commit(types.CONTACT_SEARCH_SET, []);
 | |
|   },
 | |
| };
 | |
| 
 | |
| export const mutations = {
 | |
|   [types.SEARCH_CONVERSATIONS_SET](state, records) {
 | |
|     state.records = records;
 | |
|   },
 | |
|   [types.CONTACT_SEARCH_SET](state, records) {
 | |
|     state.contactRecords = records;
 | |
|   },
 | |
|   [types.CONVERSATION_SEARCH_SET](state, records) {
 | |
|     state.conversationRecords = records;
 | |
|   },
 | |
|   [types.MESSAGE_SEARCH_SET](state, records) {
 | |
|     state.messageRecords = records;
 | |
|   },
 | |
|   [types.SEARCH_CONVERSATIONS_SET_UI_FLAG](state, uiFlags) {
 | |
|     state.uiFlags = { ...state.uiFlags, ...uiFlags };
 | |
|   },
 | |
|   [types.FULL_SEARCH_SET_UI_FLAG](state, uiFlags) {
 | |
|     state.uiFlags = { ...state.uiFlags, ...uiFlags };
 | |
|   },
 | |
|   [types.CONTACT_SEARCH_SET_UI_FLAG](state, uiFlags) {
 | |
|     state.uiFlags.contact = { ...state.uiFlags.contact, ...uiFlags };
 | |
|   },
 | |
|   [types.CONVERSATION_SEARCH_SET_UI_FLAG](state, uiFlags) {
 | |
|     state.uiFlags.conversation = { ...state.uiFlags.conversation, ...uiFlags };
 | |
|   },
 | |
|   [types.MESSAGE_SEARCH_SET_UI_FLAG](state, uiFlags) {
 | |
|     state.uiFlags.message = { ...state.uiFlags.message, ...uiFlags };
 | |
|   },
 | |
| };
 | |
| 
 | |
| export default {
 | |
|   namespaced: true,
 | |
|   state: initialState,
 | |
|   getters,
 | |
|   actions,
 | |
|   mutations,
 | |
| };
 |