676796ddc7
* feat: Add reports about live agent load
199 lines
5.8 KiB
JavaScript
199 lines
5.8 KiB
JavaScript
/* eslint no-console: 0 */
|
|
/* eslint no-param-reassign: 0 */
|
|
/* eslint no-shadow: 0 */
|
|
import * as types from '../mutation-types';
|
|
import Report from '../../api/reports';
|
|
import Vue from 'vue';
|
|
|
|
import { downloadCsvFile } from '../../helper/downloadCsvFile';
|
|
|
|
const state = {
|
|
fetchingStatus: false,
|
|
reportData: [],
|
|
accountReport: {
|
|
isFetching: false,
|
|
data: [],
|
|
},
|
|
accountSummary: {
|
|
avg_first_response_time: 0,
|
|
avg_resolution_time: 0,
|
|
conversations_count: 0,
|
|
incoming_messages_count: 0,
|
|
outgoing_messages_count: 0,
|
|
resolutions_count: 0,
|
|
previous: {},
|
|
},
|
|
overview: {
|
|
uiFlags: {
|
|
isFetchingAccountConversationMetric: false,
|
|
isFetchingAgentConversationMetric: false,
|
|
},
|
|
accountConversationMetric: {},
|
|
agentConversationMetric: [],
|
|
},
|
|
};
|
|
|
|
const getters = {
|
|
getAccountReports(_state) {
|
|
return _state.accountReport;
|
|
},
|
|
getAccountSummary(_state) {
|
|
return _state.accountSummary;
|
|
},
|
|
getAccountConversationMetric(_state) {
|
|
return _state.overview.accountConversationMetric;
|
|
},
|
|
getAgentConversationMetric(_state) {
|
|
return _state.overview.agentConversationMetric;
|
|
},
|
|
getOverviewUIFlags($state) {
|
|
return $state.overview.uiFlags;
|
|
},
|
|
};
|
|
|
|
export const actions = {
|
|
fetchAccountReport({ commit }, reportObj) {
|
|
commit(types.default.TOGGLE_ACCOUNT_REPORT_LOADING, true);
|
|
Report.getReports(
|
|
reportObj.metric,
|
|
reportObj.from,
|
|
reportObj.to,
|
|
reportObj.type,
|
|
reportObj.id,
|
|
reportObj.groupBy,
|
|
reportObj.businessHours
|
|
).then(accountReport => {
|
|
let { data } = accountReport;
|
|
data = data.filter(
|
|
el =>
|
|
reportObj.to - el.timestamp > 0 && el.timestamp - reportObj.from >= 0
|
|
);
|
|
commit(types.default.SET_ACCOUNT_REPORTS, data);
|
|
commit(types.default.TOGGLE_ACCOUNT_REPORT_LOADING, false);
|
|
});
|
|
},
|
|
fetchAccountSummary({ commit }, reportObj) {
|
|
Report.getSummary(
|
|
reportObj.from,
|
|
reportObj.to,
|
|
reportObj.type,
|
|
reportObj.id,
|
|
reportObj.groupBy,
|
|
reportObj.businessHours
|
|
)
|
|
.then(accountSummary => {
|
|
commit(types.default.SET_ACCOUNT_SUMMARY, accountSummary.data);
|
|
})
|
|
.catch(() => {
|
|
commit(types.default.TOGGLE_ACCOUNT_REPORT_LOADING, false);
|
|
});
|
|
},
|
|
fetchAccountConversationMetric({ commit }, reportObj) {
|
|
commit(types.default.TOGGLE_ACCOUNT_CONVERSATION_METRIC_LOADING, true);
|
|
Report.getConversationMetric(reportObj.type)
|
|
.then(accountConversationMetric => {
|
|
commit(
|
|
types.default.SET_ACCOUNT_CONVERSATION_METRIC,
|
|
accountConversationMetric.data
|
|
);
|
|
commit(types.default.TOGGLE_ACCOUNT_CONVERSATION_METRIC_LOADING, false);
|
|
})
|
|
.catch(() => {
|
|
commit(types.default.TOGGLE_ACCOUNT_CONVERSATION_METRIC_LOADING, false);
|
|
});
|
|
},
|
|
fetchAgentConversationMetric({ commit }, reportObj) {
|
|
commit(types.default.TOGGLE_AGENT_CONVERSATION_METRIC_LOADING, true);
|
|
Report.getConversationMetric(reportObj.type, reportObj.page)
|
|
.then(agentConversationMetric => {
|
|
commit(
|
|
types.default.SET_AGENT_CONVERSATION_METRIC,
|
|
agentConversationMetric.data
|
|
);
|
|
commit(types.default.TOGGLE_AGENT_CONVERSATION_METRIC_LOADING, false);
|
|
})
|
|
.catch(() => {
|
|
commit(types.default.TOGGLE_AGENT_CONVERSATION_METRIC_LOADING, false);
|
|
});
|
|
},
|
|
updateReportAgentStatus({ commit }, data) {
|
|
commit(types.default.UPDATE_REPORT_AGENTS_STATUS, data);
|
|
},
|
|
downloadAgentReports(_, reportObj) {
|
|
return Report.getAgentReports(reportObj.from, reportObj.to)
|
|
.then(response => {
|
|
downloadCsvFile(reportObj.fileName, response.data);
|
|
})
|
|
.catch(error => {
|
|
console.error(error);
|
|
});
|
|
},
|
|
downloadLabelReports(_, reportObj) {
|
|
return Report.getLabelReports(reportObj.from, reportObj.to)
|
|
.then(response => {
|
|
downloadCsvFile(reportObj.fileName, response.data);
|
|
})
|
|
.catch(error => {
|
|
console.error(error);
|
|
});
|
|
},
|
|
downloadInboxReports(_, reportObj) {
|
|
return Report.getInboxReports(reportObj.from, reportObj.to)
|
|
.then(response => {
|
|
downloadCsvFile(reportObj.fileName, response.data);
|
|
})
|
|
.catch(error => {
|
|
console.error(error);
|
|
});
|
|
},
|
|
downloadTeamReports(_, reportObj) {
|
|
return Report.getTeamReports(reportObj.from, reportObj.to)
|
|
.then(response => {
|
|
downloadCsvFile(reportObj.fileName, response.data);
|
|
})
|
|
.catch(error => {
|
|
console.error(error);
|
|
});
|
|
},
|
|
};
|
|
|
|
const mutations = {
|
|
[types.default.SET_ACCOUNT_REPORTS](_state, accountReport) {
|
|
_state.accountReport.data = accountReport;
|
|
},
|
|
[types.default.TOGGLE_ACCOUNT_REPORT_LOADING](_state, flag) {
|
|
_state.accountReport.isFetching = flag;
|
|
},
|
|
[types.default.SET_ACCOUNT_SUMMARY](_state, summaryData) {
|
|
_state.accountSummary = summaryData;
|
|
},
|
|
[types.default.SET_ACCOUNT_CONVERSATION_METRIC](_state, metricData) {
|
|
_state.overview.accountConversationMetric = metricData;
|
|
},
|
|
[types.default.TOGGLE_ACCOUNT_CONVERSATION_METRIC_LOADING](_state, flag) {
|
|
_state.overview.uiFlags.isFetchingAccountConversationMetric = flag;
|
|
},
|
|
[types.default.SET_AGENT_CONVERSATION_METRIC](_state, metricData) {
|
|
_state.overview.agentConversationMetric = metricData;
|
|
},
|
|
[types.default.TOGGLE_AGENT_CONVERSATION_METRIC_LOADING](_state, flag) {
|
|
_state.overview.uiFlags.isFetchingAgentConversationMetric = flag;
|
|
},
|
|
[types.default.UPDATE_REPORT_AGENTS_STATUS](_state, data) {
|
|
_state.overview.agentConversationMetric.forEach((element, index) => {
|
|
const availabilityStatus = data[element.id];
|
|
Vue.set(
|
|
_state.overview.agentConversationMetric[index],
|
|
'availability',
|
|
availabilityStatus || 'offline'
|
|
);
|
|
});
|
|
},
|
|
};
|
|
|
|
export default {
|
|
state,
|
|
getters,
|
|
actions,
|
|
mutations,
|
|
};
|