@@ -102,6 +102,8 @@ const updateChartData = async (chartId, label, data) => {
102102
103103let timer ;
104104
105+ const getChartDepartment = ( department ) => department ?. _id ;
106+
105107const getDaterange = ( ) => {
106108 const today = moment ( new Date ( ) ) ;
107109 return {
@@ -110,8 +112,11 @@ const getDaterange = () => {
110112 } ;
111113} ;
112114
113- const loadConversationOverview = async ( { start, end } ) => {
114- const { totalizers } = await APIClient . v1 . get ( `livechat/analytics/dashboards/conversation-totalizers?start=${ start } &end=${ end } ` ) ;
115+ const parseAdditionalParams = ( options = { } , prefix = '' ) => `${ prefix } ${ Object . keys ( options ) . map ( ( key ) => `${ key } =${ options [ key ] } ` ) . join ( '&' ) } ` ;
116+
117+ const loadConversationOverview = async ( { start, end, ...options } ) => {
118+ const additionalParams = parseAdditionalParams ( options , '&' ) ;
119+ const { totalizers } = await APIClient . v1 . get ( `livechat/analytics/dashboards/conversation-totalizers?start=${ start } &end=${ end } ${ additionalParams } ` ) ;
115120 return totalizers ;
116121} ;
117122
@@ -121,8 +126,9 @@ const updateConversationOverview = async (totalizers) => {
121126 }
122127} ;
123128
124- const loadAgentsOverview = async ( { start, end } ) => {
125- const { totalizers } = await APIClient . v1 . get ( `livechat/analytics/dashboards/agents-productivity-totalizers?start=${ start } &end=${ end } ` ) ;
129+ const loadAgentsOverview = async ( { start, end, ...options } ) => {
130+ const additionalParams = parseAdditionalParams ( options , '&' ) ;
131+ const { totalizers } = await APIClient . v1 . get ( `livechat/analytics/dashboards/agents-productivity-totalizers?start=${ start } &end=${ end } ${ additionalParams } ` ) ;
126132 return totalizers ;
127133} ;
128134
@@ -131,8 +137,9 @@ const updateAgentsOverview = async (totalizers) => {
131137 templateInstance . agentsOverview . set ( totalizers ) ;
132138 }
133139} ;
134- const loadChatsOverview = async ( { start, end } ) => {
135- const { totalizers } = await APIClient . v1 . get ( `livechat/analytics/dashboards/chats-totalizers?start=${ start } &end=${ end } ` ) ;
140+ const loadChatsOverview = async ( { start, end, ...options } ) => {
141+ const additionalParams = parseAdditionalParams ( options , '&' ) ;
142+ const { totalizers } = await APIClient . v1 . get ( `livechat/analytics/dashboards/chats-totalizers?start=${ start } &end=${ end } ${ additionalParams } ` ) ;
136143 return totalizers ;
137144} ;
138145
@@ -142,8 +149,9 @@ const updateChatsOverview = async (totalizers) => {
142149 }
143150} ;
144151
145- const loadProductivityOverview = async ( { start, end } ) => {
146- const { totalizers } = await APIClient . v1 . get ( `livechat/analytics/dashboards/productivity-totalizers?start=${ start } &end=${ end } ` ) ;
152+ const loadProductivityOverview = async ( { start, end, ...options } ) => {
153+ const additionalParams = parseAdditionalParams ( options , '&' ) ;
154+ const { totalizers } = await APIClient . v1 . get ( `livechat/analytics/dashboards/productivity-totalizers?start=${ start } &end=${ end } ${ additionalParams } ` ) ;
147155 return totalizers ;
148156} ;
149157
@@ -153,27 +161,37 @@ const updateProductivityOverview = async (totalizers) => {
153161 }
154162} ;
155163
156- const loadChatsChartData = ( { start, end } ) => APIClient . v1 . get ( `livechat/analytics/dashboards/charts/chats?start=${ start } &end=${ end } ` ) ;
164+ const loadChatsChartData = ( { start, end, ...options } ) => {
165+ const additionalParams = parseAdditionalParams ( options , '&' ) ;
166+ return APIClient . v1 . get ( `livechat/analytics/dashboards/charts/chats?start=${ start } &end=${ end } ${ additionalParams } ` ) ;
167+ } ;
157168
158169const updateChatsChart = async ( { open, closed, queued } ) => {
159170 await updateChartData ( 'lc-chats-chart' , 'Open' , [ open ] ) ;
160171 await updateChartData ( 'lc-chats-chart' , 'Closed' , [ closed ] ) ;
161172 await updateChartData ( 'lc-chats-chart' , 'Queue' , [ queued ] ) ;
162173} ;
163174
164- const loadChatsPerAgentChartData = async ( { start, end } ) => {
165- const result = await APIClient . v1 . get ( `livechat/analytics/dashboards/charts/chats-per-agent?start=${ start } &end=${ end } ` ) ;
175+ const loadChatsPerAgentChartData = async ( { start, end, ...options } ) => {
176+ const additionalParams = parseAdditionalParams ( options , '&' ) ;
177+ const result = await APIClient . v1 . get ( `livechat/analytics/dashboards/charts/chats-per-agent?start=${ start } &end=${ end } ${ additionalParams } ` ) ;
166178 delete result . success ;
167179 return result ;
168180} ;
169181
170- const updateChatsPerAgentChart = ( agents ) => {
182+ const updateChatsPerAgentChart = async ( agents ) => {
183+ // this chart need to reset before new updates
184+ chartContexts [ 'lc-chats-per-agent-chart' ] = await initChart [ 'lc-chats-per-agent-chart' ] ( ) ;
185+
171186 Object
172187 . keys ( agents )
173188 . forEach ( ( agent ) => updateChartData ( 'lc-chats-per-agent-chart' , agent , [ agents [ agent ] . open , agents [ agent ] . closed ] ) ) ;
174189} ;
175190
176- const loadAgentsStatusChartData = ( ) => APIClient . v1 . get ( 'livechat/analytics/dashboards/charts/agents-status' ) ;
191+ const loadAgentsStatusChartData = ( { departmentId } ) => {
192+ const additionalParams = parseAdditionalParams ( { departmentId } , '?' ) ;
193+ return APIClient . v1 . get ( `livechat/analytics/dashboards/charts/agents-status${ additionalParams } ` ) ;
194+ } ;
177195
178196const updateAgentStatusChart = async ( statusData ) => {
179197 if ( ! statusData ) {
@@ -186,19 +204,26 @@ const updateAgentStatusChart = async (statusData) => {
186204 await updateChartData ( 'lc-agents-chart' , 'Busy' , [ statusData . busy ] ) ;
187205} ;
188206
189- const loadChatsPerDepartmentChartData = async ( { start, end } ) => {
190- const result = await APIClient . v1 . get ( `livechat/analytics/dashboards/charts/chats-per-department?start=${ start } &end=${ end } ` ) ;
207+ const loadChatsPerDepartmentChartData = async ( { start, end, ...options } ) => {
208+ const additionalParams = parseAdditionalParams ( options , '&' ) ;
209+ const result = await APIClient . v1 . get ( `livechat/analytics/dashboards/charts/chats-per-department?start=${ start } &end=${ end } ${ additionalParams } ` ) ;
191210 delete result . success ;
192211 return result ;
193212} ;
194213
195- const updateDepartmentsChart = ( departments ) => {
214+ const updateDepartmentsChart = async ( departments ) => {
215+ // this chart need to reset before new updates
216+ chartContexts [ 'lc-chats-per-dept-chart' ] = await initChart [ 'lc-chats-per-dept-chart' ] ( ) ;
217+
196218 Object
197219 . keys ( departments )
198220 . forEach ( ( department ) => updateChartData ( 'lc-chats-per-dept-chart' , department , [ departments [ department ] . open , departments [ department ] . closed ] ) ) ;
199221} ;
200222
201- const loadTimingsChartData = ( { start, end } ) => APIClient . v1 . get ( `livechat/analytics/dashboards/charts/timings?start=${ start } &end=${ end } ` ) ;
223+ const loadTimingsChartData = ( { start, end, ...options } ) => {
224+ const additionalParams = parseAdditionalParams ( options , '&' ) ;
225+ return APIClient . v1 . get ( `livechat/analytics/dashboards/charts/timings?start=${ start } &end=${ end } ${ additionalParams } ` ) ;
226+ } ;
202227
203228const updateTimingsChart = async ( timingsData ) => {
204229 const hour = moment ( new Date ( ) ) . format ( 'H' ) ;
@@ -229,9 +254,27 @@ Template.livechatRealTimeMonitoring.helpers({
229254 isLoading ( ) {
230255 return Template . instance ( ) . isLoading . get ( ) ;
231256 } ,
257+ departmentModifier ( ) {
258+ return ( filter , text = '' ) => {
259+ const f = filter . get ( ) ;
260+ return `${ f . length === 0 ? text : text . replace ( new RegExp ( filter . get ( ) , 'i' ) , ( part ) => `<strong>${ part } </strong>` ) } ` ;
261+ } ;
262+ } ,
263+ onClickTagDepartment ( ) {
264+ return Template . instance ( ) . onClickTagDepartment ;
265+ } ,
266+ selectedDepartments ( ) {
267+ return Template . instance ( ) . selectedDepartments . get ( ) ;
268+ } ,
269+ onSelectDepartments ( ) {
270+ return Template . instance ( ) . onSelectDepartments ;
271+ } ,
272+ hasDepartments ( ) {
273+ return Template . instance ( ) . hasDepartments . get ( ) ;
274+ } ,
232275} ) ;
233276
234- Template . livechatRealTimeMonitoring . onCreated ( function ( ) {
277+ Template . livechatRealTimeMonitoring . onCreated ( async function ( ) {
235278 templateInstance = Template . instance ( ) ;
236279 this . isLoading = new ReactiveVar ( false ) ;
237280 this . conversationsOverview = new ReactiveVar ( ) ;
@@ -240,22 +283,43 @@ Template.livechatRealTimeMonitoring.onCreated(function() {
240283 this . agentsOverview = new ReactiveVar ( ) ;
241284 this . conversationTotalizers = new ReactiveVar ( [ ] ) ;
242285 this . interval = new ReactiveVar ( 5 ) ;
286+ this . selectedDepartments = new ReactiveVar ( [ ] ) ;
287+ this . hasDepartments = new ReactiveVar ( false ) ;
288+
289+ this . onSelectDepartments = ( { item : department } ) => {
290+ department . text = department . name ;
291+ this . selectedDepartments . set ( [ department ] ) ;
292+ } ;
293+
294+ this . onClickTagDepartment = ( ) => {
295+ this . selectedDepartments . set ( [ ] ) ;
296+ } ;
297+
298+ const { departments } = await APIClient . v1 . get ( 'livechat/department?count=1' ) ;
299+ this . hasDepartments . set ( departments ?. length > 0 ) ;
243300} ) ;
244301
245302Template . livechatRealTimeMonitoring . onRendered ( async function ( ) {
246303 await initAllCharts ( ) ;
247304
248305 this . updateDashboard = async ( ) => {
306+ const [ department ] = this . selectedDepartments . get ( ) ;
307+ const departmentId = getChartDepartment ( department ) ;
249308 const daterange = getDaterange ( ) ;
250- updateConversationOverview ( await loadConversationOverview ( daterange ) ) ;
251- updateProductivityOverview ( await loadProductivityOverview ( daterange ) ) ;
252- updateChatsChart ( await loadChatsChartData ( daterange ) ) ;
253- updateChatsPerAgentChart ( await loadChatsPerAgentChartData ( daterange ) ) ;
254- updateAgentStatusChart ( await loadAgentsStatusChartData ( ) ) ;
255- updateDepartmentsChart ( await loadChatsPerDepartmentChartData ( daterange ) ) ;
256- updateTimingsChart ( await loadTimingsChartData ( daterange ) ) ;
257- updateAgentsOverview ( await loadAgentsOverview ( daterange ) ) ;
258- updateChatsOverview ( await loadChatsOverview ( daterange ) ) ;
309+ const filters = Object . assign (
310+ { ...daterange } ,
311+ departmentId && { departmentId } ,
312+ ) ;
313+
314+ updateConversationOverview ( await loadConversationOverview ( filters ) ) ;
315+ updateProductivityOverview ( await loadProductivityOverview ( filters ) ) ;
316+ updateChatsChart ( await loadChatsChartData ( filters ) ) ;
317+ updateChatsPerAgentChart ( await loadChatsPerAgentChartData ( filters ) ) ;
318+ updateAgentStatusChart ( await loadAgentsStatusChartData ( filters ) ) ;
319+ updateDepartmentsChart ( await loadChatsPerDepartmentChartData ( filters ) ) ;
320+ updateTimingsChart ( await loadTimingsChartData ( filters ) ) ;
321+ updateAgentsOverview ( await loadAgentsOverview ( filters ) ) ;
322+ updateChatsOverview ( await loadChatsOverview ( filters ) ) ;
259323 } ;
260324 this . autorun ( ( ) => {
261325 if ( timer ) {
0 commit comments