Merge branch 'develop' into live-agent-reports-controller

This commit is contained in:
Pranav
2025-03-10 21:14:55 -07:00
committed by GitHub
327 changed files with 7069 additions and 2155 deletions
@@ -0,0 +1,56 @@
import CaptainBulkActionsAPI from 'dashboard/api/captain/bulkActions';
import { createStore } from './storeFactory';
import { throwErrorMessage } from 'dashboard/store/utils/api';
export default createStore({
name: 'CaptainBulkAction',
API: CaptainBulkActionsAPI,
actions: mutations => ({
processBulkAction: async function processBulkAction(
{ commit },
{ type, actionType, ids }
) {
commit(mutations.SET_UI_FLAG, { isUpdating: true });
try {
const response = await CaptainBulkActionsAPI.create({
type: type,
ids,
fields: { status: actionType },
});
commit(mutations.SET_UI_FLAG, { isUpdating: false });
return response.data;
} catch (error) {
commit(mutations.SET_UI_FLAG, { isUpdating: false });
return throwErrorMessage(error);
}
},
handleBulkDelete: async function handleBulkDelete({ dispatch }, ids) {
const response = await dispatch('processBulkAction', {
type: 'AssistantResponse',
actionType: 'delete',
ids,
});
// Update the response store after successful API call
await dispatch('captainResponses/removeBulkResponses', ids, {
root: true,
});
return response;
},
handleBulkApprove: async function handleBulkApprove({ dispatch }, ids) {
const response = await dispatch('processBulkAction', {
type: 'AssistantResponse',
actionType: 'approve',
ids,
});
// Update response store after successful API call
await dispatch('captainResponses/updateBulkResponses', response, {
root: true,
});
return response;
},
}),
});
@@ -4,4 +4,29 @@ import { createStore } from './storeFactory';
export default createStore({
name: 'CaptainResponse',
API: CaptainResponseAPI,
actions: mutations => ({
removeBulkResponses: ({ commit, state }, ids) => {
const updatedRecords = state.records.filter(
record => !ids.includes(record.id)
);
commit(mutations.SET, updatedRecords);
},
updateBulkResponses: ({ commit, state }, approvedResponses) => {
// Create a map of updated responses for faster lookup
const updatedResponsesMap = approvedResponses.reduce((map, response) => {
map[response.id] = response;
return map;
}, {});
// Update existing records with updated data
const updatedRecords = state.records.map(record => {
if (updatedResponsesMap[record.id]) {
return updatedResponsesMap[record.id]; // Replace with the updated response
}
return record;
});
commit(mutations.SET, updatedRecords);
},
}),
});
+2
View File
@@ -50,6 +50,7 @@ import captainAssistants from './captain/assistant';
import captainDocuments from './captain/document';
import captainResponses from './captain/response';
import captainInboxes from './captain/inboxes';
import captainBulkActions from './captain/bulkActions';
const plugins = [];
export default createStore({
@@ -104,6 +105,7 @@ export default createStore({
captainDocuments,
captainResponses,
captainInboxes,
captainBulkActions,
},
plugins,
});
@@ -489,6 +489,15 @@ const actions = {
commit(types.SET_CONTEXT_MENU_CHAT_ID, chatId);
},
getInboxCaptainAssistantById: async ({ commit }, conversationId) => {
try {
const response = await ConversationApi.getInboxAssistant(conversationId);
commit(types.SET_INBOX_CAPTAIN_ASSISTANT, response.data);
} catch (error) {
// Handle error
}
},
...messageReadActions,
...messageTranslateActions,
};
@@ -108,6 +108,10 @@ const getters = {
getContextMenuChatId: _state => {
return _state.contextMenuChatId;
},
getCopilotAssistant: _state => {
return _state.copilotAssistant;
},
};
export default getters;
@@ -21,6 +21,7 @@ const state = {
conversationLastSeen: null,
syncConversationsMessages: {},
conversationFilters: {},
copilotAssistant: {},
};
// mutations
@@ -309,6 +310,9 @@ export const mutations = {
[types.UPDATE_CHAT_LIST_FILTERS](_state, data) {
_state.conversationFilters = { ..._state.conversationFilters, ...data };
},
[types.SET_INBOX_CAPTAIN_ASSISTANT](_state, data) {
_state.copilotAssistant = data.assistant;
},
};
export default {
@@ -687,4 +687,23 @@ describe('#addMentions', () => {
]);
});
});
describe('#getInboxCaptainAssistantById', () => {
it('fetches inbox assistant by id', async () => {
axios.get.mockResolvedValue({
data: {
id: 1,
name: 'Assistant',
description: 'Assistant description',
},
});
await actions.getInboxCaptainAssistantById({ commit }, 1);
expect(commit.mock.calls).toEqual([
[
types.SET_INBOX_CAPTAIN_ASSISTANT,
{ id: 1, name: 'Assistant', description: 'Assistant description' },
],
]);
});
});
});
@@ -308,4 +308,21 @@ describe('#getters', () => {
});
});
});
describe('#getCopilotAssistant', () => {
it('get copilot assistant', () => {
const state = {
copilotAssistant: {
id: 1,
name: 'Assistant',
description: 'Assistant description',
},
};
expect(getters.getCopilotAssistant(state)).toEqual({
id: 1,
name: 'Assistant',
description: 'Assistant description',
});
});
});
});
@@ -1,3 +1,4 @@
import { describe } from 'vitest';
import types from '../../../mutation-types';
import { mutations } from '../../conversations';
@@ -553,4 +554,19 @@ describe('#mutations', () => {
});
});
});
describe('#SET_INBOX_CAPTAIN_ASSISTANT', () => {
it('set inbox captain assistant', () => {
const state = { copilotAssistant: {} };
const data = {
assistant: {
id: 1,
name: 'Assistant',
description: 'Assistant description',
},
};
mutations[types.SET_INBOX_CAPTAIN_ASSISTANT](state, data);
expect(state.copilotAssistant).toEqual(data.assistant);
});
});
});
@@ -64,6 +64,9 @@ export default {
SET_CHAT_LIST_FILTERS: 'SET_CHAT_LIST_FILTERS',
UPDATE_CHAT_LIST_FILTERS: 'UPDATE_CHAT_LIST_FILTERS',
// Conversation inbox connected copilot assistant
SET_INBOX_CAPTAIN_ASSISTANT: 'SET_INBOX_CAPTAIN_ASSISTANT',
// Inboxes
SET_INBOXES_UI_FLAG: 'SET_INBOXES_UI_FLAG',
SET_INBOXES: 'SET_INBOXES',