Files
chatwoot/app/javascript/dashboard/store/modules/summaryReports.js
Shivam Mishra 35f06f30e7 feat: label reports overview (#11194)
Co-authored-by: Sivin Varghese <64252451+iamsivin@users.noreply.github.com>
Co-authored-by: Muhsin Keloth <muhsinkeramam@gmail.com>
2025-06-11 14:35:46 +05:30

116 lines
2.8 KiB
JavaScript

import SummaryReportsAPI from 'dashboard/api/summaryReports';
import camelcaseKeys from 'camelcase-keys';
const typeMap = {
inbox: {
flagKey: 'isFetchingInboxSummaryReports',
apiMethod: 'getInboxReports',
mutationKey: 'setInboxSummaryReport',
},
agent: {
flagKey: 'isFetchingAgentSummaryReports',
apiMethod: 'getAgentReports',
mutationKey: 'setAgentSummaryReport',
},
team: {
flagKey: 'isFetchingTeamSummaryReports',
apiMethod: 'getTeamReports',
mutationKey: 'setTeamSummaryReport',
},
label: {
flagKey: 'isFetchingLabelSummaryReports',
apiMethod: 'getLabelReports',
mutationKey: 'setLabelSummaryReport',
},
};
async function fetchSummaryReports(type, params, { commit }) {
const config = typeMap[type];
if (!config) return;
try {
commit('setUIFlags', { [config.flagKey]: true });
const response = await SummaryReportsAPI[config.apiMethod](params);
commit(config.mutationKey, camelcaseKeys(response.data, { deep: true }));
} catch (error) {
// Ignore error
} finally {
commit('setUIFlags', { [config.flagKey]: false });
}
}
export const initialState = {
inboxSummaryReports: [],
agentSummaryReports: [],
teamSummaryReports: [],
labelSummaryReports: [],
uiFlags: {
isFetchingInboxSummaryReports: false,
isFetchingAgentSummaryReports: false,
isFetchingTeamSummaryReports: false,
isFetchingLabelSummaryReports: false,
},
};
export const getters = {
getInboxSummaryReports(state) {
return state.inboxSummaryReports;
},
getAgentSummaryReports(state) {
return state.agentSummaryReports;
},
getTeamSummaryReports(state) {
return state.teamSummaryReports;
},
getLabelSummaryReports(state) {
return state.labelSummaryReports;
},
getUIFlags(state) {
return state.uiFlags;
},
};
export const actions = {
fetchInboxSummaryReports({ commit }, params) {
return fetchSummaryReports('inbox', params, { commit });
},
fetchAgentSummaryReports({ commit }, params) {
return fetchSummaryReports('agent', params, { commit });
},
fetchTeamSummaryReports({ commit }, params) {
return fetchSummaryReports('team', params, { commit });
},
fetchLabelSummaryReports({ commit }, params) {
return fetchSummaryReports('label', params, { commit });
},
};
export const mutations = {
setInboxSummaryReport(state, data) {
state.inboxSummaryReports = data;
},
setAgentSummaryReport(state, data) {
state.agentSummaryReports = data;
},
setTeamSummaryReport(state, data) {
state.teamSummaryReports = data;
},
setLabelSummaryReport(state, data) {
state.labelSummaryReports = data;
},
setUIFlags(state, uiFlag) {
state.uiFlags = { ...state.uiFlags, ...uiFlag };
},
};
export default {
namespaced: true,
state: initialState,
getters,
actions,
mutations,
};