diff --git a/app/javascript/dashboard/i18n/locale/en/report.json b/app/javascript/dashboard/i18n/locale/en/report.json index c9ac00f7f..a77fb6ed7 100644 --- a/app/javascript/dashboard/i18n/locale/en/report.json +++ b/app/javascript/dashboard/i18n/locale/en/report.json @@ -476,6 +476,17 @@ "STATUS": "Status" } }, + "TEAM_CONVERSATIONS": { + "HEADER": "Conversations by teams", + "LOADING_MESSAGE": "Loading team metrics...", + "NO_TEAMS": "There is no data available", + "TABLE_HEADER": { + "AGENT": "Team", + "OPEN": "Open", + "UNATTENDED": "Unattended", + "STATUS": "Status" + } + }, "AGENT_STATUS": { "HEADER": "Agent status", "ONLINE": "Online", diff --git a/app/javascript/dashboard/routes/dashboard/settings/reports/LiveReports.vue b/app/javascript/dashboard/routes/dashboard/settings/reports/LiveReports.vue index 6ccb4351d..f2d6caa52 100644 --- a/app/javascript/dashboard/routes/dashboard/settings/reports/LiveReports.vue +++ b/app/javascript/dashboard/routes/dashboard/settings/reports/LiveReports.vue @@ -6,6 +6,7 @@ import { OVERVIEW_METRICS } from './constants'; import ReportHeader from './components/ReportHeader.vue'; import HeatmapContainer from './components/HeatmapContainer.vue'; import AgentLiveReportContainer from './components/AgentLiveReportContainer.vue'; +import TeamLiveReportContainer from './components/TeamLiveReportContainer.vue'; export const FETCH_INTERVAL = 60000; export default { @@ -15,6 +16,7 @@ export default { MetricCard, HeatmapContainer, AgentLiveReportContainer, + TeamLiveReportContainer, }, data() { return { @@ -127,5 +129,6 @@ export default { + diff --git a/app/javascript/dashboard/routes/dashboard/settings/reports/components/TeamLiveReportContainer.vue b/app/javascript/dashboard/routes/dashboard/settings/reports/components/TeamLiveReportContainer.vue new file mode 100644 index 000000000..c72d0dd96 --- /dev/null +++ b/app/javascript/dashboard/routes/dashboard/settings/reports/components/TeamLiveReportContainer.vue @@ -0,0 +1,36 @@ + + + diff --git a/app/javascript/dashboard/routes/dashboard/settings/reports/components/overview/TeamTable.vue b/app/javascript/dashboard/routes/dashboard/settings/reports/components/overview/TeamTable.vue new file mode 100644 index 000000000..e0918297c --- /dev/null +++ b/app/javascript/dashboard/routes/dashboard/settings/reports/components/overview/TeamTable.vue @@ -0,0 +1,115 @@ + + + diff --git a/app/javascript/dashboard/store/modules/reports.js b/app/javascript/dashboard/store/modules/reports.js index 4d3430daa..c11d6e924 100644 --- a/app/javascript/dashboard/store/modules/reports.js +++ b/app/javascript/dashboard/store/modules/reports.js @@ -55,10 +55,12 @@ const state = { isFetchingAccountConversationMetric: false, isFetchingAccountConversationsHeatmap: false, isFetchingAgentConversationMetric: false, + isFetchingTeamConversationMetric: false, }, accountConversationMetric: {}, accountConversationHeatmap: [], agentConversationMetric: [], + teamConversationMetric: [], }, }; @@ -81,6 +83,9 @@ const getters = { getAgentConversationMetric(_state) { return _state.overview.agentConversationMetric; }, + getTeamConversationMetric(_state) { + return _state.overview.teamConversationMetric; + }, getOverviewUIFlags($state) { return $state.overview.uiFlags; }, @@ -175,6 +180,18 @@ export const actions = { commit(types.default.TOGGLE_AGENT_CONVERSATION_METRIC_LOADING, false); }); }, + fetchTeamConversationMetric({ commit }) { + commit(types.default.TOGGLE_TEAM_CONVERSATION_METRIC_LOADING, true); + liveReports + .getGroupedConversations({ groupBy: 'team_id' }) + .then(teamMetric => { + commit(types.default.SET_TEAM_CONVERSATION_METRIC, teamMetric.data); + commit(types.default.TOGGLE_TEAM_CONVERSATION_METRIC_LOADING, false); + }) + .catch(() => { + commit(types.default.TOGGLE_TEAM_CONVERSATION_METRIC_LOADING, false); + }); + }, downloadAgentReports(_, reportObj) { return Report.getAgentReports(reportObj) .then(response => { @@ -280,6 +297,12 @@ const mutations = { [types.default.TOGGLE_AGENT_CONVERSATION_METRIC_LOADING](_state, flag) { _state.overview.uiFlags.isFetchingAgentConversationMetric = flag; }, + [types.default.SET_TEAM_CONVERSATION_METRIC](_state, metricData) { + _state.overview.teamConversationMetric = metricData; + }, + [types.default.TOGGLE_TEAM_CONVERSATION_METRIC_LOADING](_state, flag) { + _state.overview.uiFlags.isFetchingTeamConversationMetric = flag; + }, }; export default { diff --git a/app/javascript/dashboard/store/mutation-types.js b/app/javascript/dashboard/store/mutation-types.js index 7416ca9a3..f041376ac 100644 --- a/app/javascript/dashboard/store/mutation-types.js +++ b/app/javascript/dashboard/store/mutation-types.js @@ -335,4 +335,8 @@ export default { SET_SLA_REPORTS: 'SET_SLA_REPORTS', SET_SLA_REPORTS_METRICS: 'SET_SLA_REPORTS_METRICS', SET_SLA_REPORTS_META: 'SET_SLA_REPORTS_META', + + SET_TEAM_CONVERSATION_METRIC: 'SET_TEAM_CONVERSATION_METRIC', + TOGGLE_TEAM_CONVERSATION_METRIC_LOADING: + 'TOGGLE_TEAM_CONVERSATION_METRIC_LOADING', };