feat: Add support for bulk action for Captain FAQs (#10905)

Co-authored-by: Pranav <pranav@chatwoot.com>
Co-authored-by: Pranav <pranavrajs@gmail.com>
This commit is contained in:
Sivin Varghese
2025-02-28 06:35:33 +05:30
committed by GitHub
parent a8febc00d3
commit 6eecd84b22
17 changed files with 680 additions and 31 deletions

View File

@@ -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;
},
}),
});

View File

@@ -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);
},
}),
});

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,
});