@plusscommunities/pluss-maintenance-web-forms 1.1.36 → 1.1.37-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs.js CHANGED
@@ -112,13 +112,7 @@ const values = {
112
112
  hasHelpButton: true,
113
113
  helpGuideURL: 'https://www.plusscommunities.com/forms-feature',
114
114
  stringConfigJobStatus: 'maintenanceJobStatusForms',
115
- stringConfigHideSeen: 'maintenanceDisableSeenForms',
116
- // Comment subscription notification preference
117
- notificationPreference: {
118
- key: 'maintenancerequestFormsComments',
119
- label: 'Forms comments',
120
- permission: 'maintenanceTrackingForms'
121
- }
115
+ stringConfigHideSeen: 'maintenanceDisableSeenForms'
122
116
  };
123
117
 
124
118
  // import * as PlussCore from '../../pluss-core/src';
@@ -241,8 +235,7 @@ const FeatureConfig = {
241
235
  init: environment => {
242
236
  FeatureConfig.env = environment;
243
237
  PlussCore__namespace.Config.init(environment);
244
- },
245
- notificationPreference: values.notificationPreference
238
+ }
246
239
  };
247
240
 
248
241
  const JOBS_LOADED = values.actionJobsLoaded;
@@ -255,12 +248,12 @@ const JOBS_HIDE_SEEN = values.actionJobsHideSeen;
255
248
  function ownKeys$7(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
256
249
  function _objectSpread$7(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$7(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$7(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
257
250
  const {
258
- Helper: Helper$5,
251
+ Helper: Helper$6,
259
252
  Session: Session$9
260
253
  } = PlussCore__namespace;
261
254
  const maintenanceActions = {
262
255
  getJobType: (site, typeId) => {
263
- let url = Helper$5.getUrl(values.serviceKey, 'getjobtype');
256
+ let url = Helper$6.getUrl(values.serviceKey, 'getjobtype');
264
257
  return Session$9.authedFunction({
265
258
  method: 'POST',
266
259
  url,
@@ -271,7 +264,7 @@ const maintenanceActions = {
271
264
  });
272
265
  },
273
266
  getJobTypes: (site, id) => {
274
- let url = Helper$5.getUrl(values.serviceKey, 'getjobtypes');
267
+ let url = Helper$6.getUrl(values.serviceKey, 'getjobtypes');
275
268
  return Session$9.authedFunction({
276
269
  method: 'POST',
277
270
  url,
@@ -281,7 +274,7 @@ const maintenanceActions = {
281
274
  });
282
275
  },
283
276
  getJob: (site, id) => {
284
- let url = Helper$5.getUrl(values.serviceKey, 'getJob');
277
+ let url = Helper$6.getUrl(values.serviceKey, 'getJob');
285
278
  return Session$9.authedFunction({
286
279
  method: 'POST',
287
280
  url,
@@ -292,7 +285,7 @@ const maintenanceActions = {
292
285
  });
293
286
  },
294
287
  getJobByJobId: (site, jobId) => {
295
- let url = Helper$5.getUrl(values.serviceKey, 'getJob');
288
+ let url = Helper$6.getUrl(values.serviceKey, 'getJob');
296
289
  return Session$9.authedFunction({
297
290
  method: 'POST',
298
291
  url,
@@ -307,7 +300,7 @@ const maintenanceActions = {
307
300
  let type = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
308
301
  return Session$9.authedFunction({
309
302
  method: 'POST',
310
- url: Helper$5.getUrl(values.serviceKey, 'getJobs'),
303
+ url: Helper$6.getUrl(values.serviceKey, 'getJobs'),
311
304
  data: {
312
305
  site,
313
306
  status,
@@ -330,7 +323,7 @@ const maintenanceActions = {
330
323
  }
331
324
  return Session$9.authedFunction({
332
325
  method: 'GET',
333
- url: Helper$5.getUrl(values.serviceKey, 'get/requests', query)
326
+ url: Helper$6.getUrl(values.serviceKey, 'get/requests', query)
334
327
  });
335
328
  },
336
329
  getJobsRecursive: function (site, status, type, lastKey) {
@@ -348,14 +341,14 @@ const maintenanceActions = {
348
341
  createJob: job => {
349
342
  return Session$9.authedFunction({
350
343
  method: 'POST',
351
- url: Helper$5.getUrl(values.serviceKey, 'sendMaintenance'),
344
+ url: Helper$6.getUrl(values.serviceKey, 'sendMaintenance'),
352
345
  data: _objectSpread$7({}, job)
353
346
  });
354
347
  },
355
348
  editJob: (job, site) => {
356
349
  return Session$9.authedFunction({
357
350
  method: 'POST',
358
- url: Helper$5.getUrl(values.serviceKey, 'editJob'),
351
+ url: Helper$6.getUrl(values.serviceKey, 'editJob'),
359
352
  data: {
360
353
  job,
361
354
  site
@@ -365,7 +358,7 @@ const maintenanceActions = {
365
358
  deleteJob: (site, id) => {
366
359
  return Session$9.authedFunction({
367
360
  method: 'POST',
368
- url: Helper$5.getUrl(values.serviceKey, 'requests/remove'),
361
+ url: Helper$6.getUrl(values.serviceKey, 'requests/remove'),
369
362
  data: {
370
363
  site,
371
364
  id
@@ -375,7 +368,7 @@ const maintenanceActions = {
375
368
  editJobStatus: (id, status) => {
376
369
  return Session$9.authedFunction({
377
370
  method: 'POST',
378
- url: Helper$5.getUrl(values.serviceKey, 'editJobStatus'),
371
+ url: Helper$6.getUrl(values.serviceKey, 'editJobStatus'),
379
372
  data: {
380
373
  id,
381
374
  status
@@ -385,7 +378,7 @@ const maintenanceActions = {
385
378
  editJobPriority: (id, priority) => {
386
379
  return Session$9.authedFunction({
387
380
  method: 'POST',
388
- url: Helper$5.getUrl(values.serviceKey, 'update/priority'),
381
+ url: Helper$6.getUrl(values.serviceKey, 'update/priority'),
389
382
  data: {
390
383
  id,
391
384
  priority
@@ -395,7 +388,7 @@ const maintenanceActions = {
395
388
  assignJob: (jobId, userId) => {
396
389
  return Session$9.authedFunction({
397
390
  method: 'POST',
398
- url: Helper$5.getUrl(values.serviceKey, 'update/assign'),
391
+ url: Helper$6.getUrl(values.serviceKey, 'update/assign'),
399
392
  data: {
400
393
  id: jobId,
401
394
  userId
@@ -405,7 +398,7 @@ const maintenanceActions = {
405
398
  getAssignees: site => {
406
399
  return Session$9.authedFunction({
407
400
  method: 'GET',
408
- url: Helper$5.getUrl(values.serviceKey, 'get/assignees', {
401
+ url: Helper$6.getUrl(values.serviceKey, 'get/assignees', {
409
402
  site
410
403
  })
411
404
  });
@@ -413,7 +406,7 @@ const maintenanceActions = {
413
406
  addNote: (jobId, note, attachments, images) => {
414
407
  return Session$9.authedFunction({
415
408
  method: 'POST',
416
- url: Helper$5.getUrl(values.serviceKey, 'requests/note'),
409
+ url: Helper$6.getUrl(values.serviceKey, 'requests/note'),
417
410
  data: {
418
411
  id: jobId,
419
412
  note,
@@ -426,7 +419,7 @@ const maintenanceActions = {
426
419
  editNote: (jobId, noteId, note, attachments, images) => {
427
420
  return Session$9.authedFunction({
428
421
  method: 'POST',
429
- url: Helper$5.getUrl(values.serviceKey, 'requests/note'),
422
+ url: Helper$6.getUrl(values.serviceKey, 'requests/note'),
430
423
  data: {
431
424
  id: jobId,
432
425
  note,
@@ -440,7 +433,7 @@ const maintenanceActions = {
440
433
  deleteNote: (jobId, noteId) => {
441
434
  return Session$9.authedFunction({
442
435
  method: 'POST',
443
- url: Helper$5.getUrl(values.serviceKey, 'requests/note'),
436
+ url: Helper$6.getUrl(values.serviceKey, 'requests/note'),
444
437
  data: {
445
438
  id: jobId,
446
439
  noteId,
@@ -460,7 +453,7 @@ const maintenanceActions = {
460
453
  };
461
454
  return Session$9.authedFunction({
462
455
  method: 'POST',
463
- url: Helper$5.getUrl(values.serviceKey, 'createJobType'),
456
+ url: Helper$6.getUrl(values.serviceKey, 'createJobType'),
464
457
  data
465
458
  });
466
459
  },
@@ -478,14 +471,14 @@ const maintenanceActions = {
478
471
  if (hasCustomFields && customFields) data.customFields = customFields;
479
472
  return Session$9.authedFunction({
480
473
  method: 'POST',
481
- url: Helper$5.getUrl(values.serviceKey, 'editJobType'),
474
+ url: Helper$6.getUrl(values.serviceKey, 'editJobType'),
482
475
  data
483
476
  });
484
477
  },
485
478
  deleteJobType: (site, id) => {
486
479
  return Session$9.authedFunction({
487
480
  method: 'POST',
488
- url: Helper$5.getUrl(values.serviceKey, 'deleteJobType'),
481
+ url: Helper$6.getUrl(values.serviceKey, 'deleteJobType'),
489
482
  data: {
490
483
  site,
491
484
  id
@@ -495,7 +488,7 @@ const maintenanceActions = {
495
488
  getExternalSync: jobId => {
496
489
  return Session$9.authedFunction({
497
490
  method: 'GET',
498
- url: Helper$5.getUrl(values.serviceKey, 'get/externalsync', {
491
+ url: Helper$6.getUrl(values.serviceKey, 'get/externalsync', {
499
492
  id: jobId
500
493
  })
501
494
  });
@@ -503,7 +496,7 @@ const maintenanceActions = {
503
496
  retrySync: jobId => {
504
497
  return Session$9.authedFunction({
505
498
  method: 'POST',
506
- url: Helper$5.getUrl(values.serviceKey, 'update/retrysync'),
499
+ url: Helper$6.getUrl(values.serviceKey, 'update/retrysync'),
507
500
  data: {
508
501
  id: jobId
509
502
  }
@@ -512,7 +505,7 @@ const maintenanceActions = {
512
505
  };
513
506
 
514
507
  const {
515
- Helper: Helper$4,
508
+ Helper: Helper$5,
516
509
  Session: Session$8
517
510
  } = PlussCore__namespace;
518
511
  const reactionActions = {
@@ -530,7 +523,7 @@ const reactionActions = {
530
523
  }
531
524
  return Session$8.authedFunction({
532
525
  method: 'POST',
533
- url: Helper$4.getUrl('reactions', 'comments/add'),
526
+ url: Helper$5.getUrl('reactions', 'comments/add'),
534
527
  data
535
528
  });
536
529
  },
@@ -553,7 +546,7 @@ const reactionActions = {
553
546
  }
554
547
  return Session$8.authedFunction({
555
548
  method: 'GET',
556
- url: Helper$4.getUrl('reactions', 'comments/get', query)
549
+ url: Helper$5.getUrl('reactions', 'comments/get', query)
557
550
  });
558
551
  }
559
552
  };
@@ -587,7 +580,7 @@ var jobStatusOptions = [
587
580
  ];
588
581
 
589
582
  const {
590
- Helper: Helper$3
583
+ Helper: Helper$4
591
584
  } = PlussCore__namespace;
592
585
  const jobsUpdate = (site, isdashboard) => {
593
586
  return dispatch => {
@@ -595,7 +588,7 @@ const jobsUpdate = (site, isdashboard) => {
595
588
  type: JOBS_LOADING
596
589
  });
597
590
  maintenanceActions.getJobsRecursive(site).then(res => {
598
- const currentSite = Helper$3.readStorageWithCookie('site');
591
+ const currentSite = Helper$4.readStorageWithCookie('site');
599
592
  if (!___default["default"].isEmpty(res) && res[0].site === currentSite) {
600
593
  dispatch({
601
594
  type: JOBS_LOADED,
@@ -2732,7 +2725,7 @@ function ownKeys$4(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymb
2732
2725
  function _objectSpread$4(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$4(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$4(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
2733
2726
  const {
2734
2727
  Apis: Apis$1,
2735
- Helper: Helper$2,
2728
+ Helper: Helper$3,
2736
2729
  Session: Session$3,
2737
2730
  Colours: Colours$1,
2738
2731
  Components: Components$3
@@ -3134,7 +3127,7 @@ class Job extends React.Component {
3134
3127
  }
3135
3128
  });
3136
3129
  this.state = {
3137
- jobId: Helper$2.safeReadParams(props, "jobId") ? props.match.params.jobId : null,
3130
+ jobId: Helper$3.safeReadParams(props, "jobId") ? props.match.params.jobId : null,
3138
3131
  job: null,
3139
3132
  showingSelector: false,
3140
3133
  updating: false,
@@ -3337,7 +3330,7 @@ class Job extends React.Component {
3337
3330
  }, /*#__PURE__*/React__default["default"].createElement("div", {
3338
3331
  className: "imageGrid_image",
3339
3332
  style: {
3340
- backgroundImage: "url('".concat(Helper$2.get1400(image), "')"),
3333
+ backgroundImage: "url('".concat(Helper$3.get1400(image), "')"),
3341
3334
  width: size,
3342
3335
  height: size
3343
3336
  }
@@ -3552,7 +3545,7 @@ class Job extends React.Component {
3552
3545
  }]
3553
3546
  })), /*#__PURE__*/React__default["default"].createElement("p", {
3554
3547
  className: "maintenanceNote_text"
3555
- }, Helper$2.toParagraphed(note.Note)), note.Attachments.map((a, i) => this.renderAttachment(a, i)), note.Images && note.Images.length > 0 ? this.renderImageGrid(note.Images, IMAGE_SIZE_NOTE) : null));
3548
+ }, Helper$3.toParagraphed(note.Note)), note.Attachments.map((a, i) => this.renderAttachment(a, i)), note.Images && note.Images.length > 0 ? this.renderImageGrid(note.Images, IMAGE_SIZE_NOTE) : null));
3556
3549
  }
3557
3550
  renderAssignment() {
3558
3551
  const {
@@ -3986,7 +3979,7 @@ function _objectSpread$3(e) { for (var r = 1; r < arguments.length; r++) { var t
3986
3979
  const {
3987
3980
  Actions,
3988
3981
  Components: Components$2,
3989
- Helper: Helper$1,
3982
+ Helper: Helper$2,
3990
3983
  Session: Session$2,
3991
3984
  Colours,
3992
3985
  Apis
@@ -4344,7 +4337,7 @@ class AddJob extends React.Component {
4344
4337
  if (___default["default"].isNil(answer) || ___default["default"].isEmpty(answer)) return true;
4345
4338
  switch (type) {
4346
4339
  case "email":
4347
- return Helper$1.isEmail(answer);
4340
+ return Helper$2.isEmail(answer);
4348
4341
  case "date":
4349
4342
  return moment__default["default"](answer, "YYYY-MM-DD", true).isValid();
4350
4343
  case "time":
@@ -4365,7 +4358,7 @@ class AddJob extends React.Component {
4365
4358
  this.customImageInputs = {};
4366
4359
  this.customDocumentInputs = {};
4367
4360
  this.state = {
4368
- jobId: Helper$1.safeReadParams(this.props, "jobId") ? this.props.match.params.jobId : null,
4361
+ jobId: Helper$2.safeReadParams(this.props, "jobId") ? this.props.match.params.jobId : null,
4369
4362
  job: null,
4370
4363
  showingSelector: false,
4371
4364
  updating: false,
@@ -4717,7 +4710,7 @@ class AddJob extends React.Component {
4717
4710
  return /*#__PURE__*/React__default["default"].createElement("p", {
4718
4711
  className: "visitorSignIn_text-staticText",
4719
4712
  key: fieldId
4720
- }, Helper$1.toParagraphed(field.label, {
4713
+ }, Helper$2.toParagraphed(field.label, {
4721
4714
  marginTop: 10
4722
4715
  }));
4723
4716
  case "date":
@@ -4972,7 +4965,7 @@ const mapStateToProps$2 = state => {
4972
4965
  return {
4973
4966
  auth,
4974
4967
  strings: state.strings && state.strings.config || {},
4975
- optionOnlyForResidents: Helper$1.getSiteSettingFromState(state, values.optionOnlyForResidents)
4968
+ optionOnlyForResidents: Helper$2.getSiteSettingFromState(state, values.optionOnlyForResidents)
4976
4969
  };
4977
4970
  };
4978
4971
  var AddJob$1 = reactRedux.connect(mapStateToProps$2, {
@@ -4984,7 +4977,7 @@ var AddJob$1 = reactRedux.connect(mapStateToProps$2, {
4984
4977
  const {
4985
4978
  Components: Components$1,
4986
4979
  Session: Session$1,
4987
- Helper
4980
+ Helper: Helper$1
4988
4981
  } = PlussCore__namespace;
4989
4982
  const DEFAULT_FIELD = {
4990
4983
  type: 'text',
@@ -5027,7 +5020,7 @@ class AddJobType extends React.Component {
5027
5020
  const {
5028
5021
  jobTypeEmail
5029
5022
  } = this.state;
5030
- return !___default["default"].isEmpty(jobTypeEmail) && Helper.isEmail(jobTypeEmail);
5023
+ return !___default["default"].isEmpty(jobTypeEmail) && Helper$1.isEmail(jobTypeEmail);
5031
5024
  });
5032
5025
  _defineProperty__default["default"](this, "isJobTypeValid", () => {
5033
5026
  const {
@@ -5229,7 +5222,7 @@ class AddJobType extends React.Component {
5229
5222
  }];
5230
5223
  this.state = {
5231
5224
  loading: false,
5232
- jobTypeId: Helper.safeReadParams(this.props, 'jobTypeId') ? this.props.match.params.jobTypeId : null,
5225
+ jobTypeId: Helper$1.safeReadParams(this.props, 'jobTypeId') ? this.props.match.params.jobTypeId : null,
5233
5226
  jobTypeName: '',
5234
5227
  jobTypeEmail: '',
5235
5228
  jobTypeDescription: '',
@@ -5781,7 +5774,8 @@ var AddJobType$1 = reactRedux.connect(mapStateToProps$1, {
5781
5774
  const {
5782
5775
  Analytics: Analytics$1,
5783
5776
  Session,
5784
- Components
5777
+ Components,
5778
+ Helper
5785
5779
  } = PlussCore__namespace;
5786
5780
  const getInitialState = () => ({
5787
5781
  requests: 0,
@@ -5801,10 +5795,20 @@ const AnalyticsHub = _ref => {
5801
5795
  auth,
5802
5796
  prevText,
5803
5797
  dayCount,
5804
- strings
5798
+ strings,
5799
+ userType,
5800
+ userCategory,
5801
+ selectedSites
5805
5802
  } = _ref;
5806
5803
  const [analyticsData, setAnalyticsData] = React.useState(getInitialState());
5807
5804
  const [isExportOpen, setIsExportOpen] = React.useState(false);
5805
+ const [comparisonData, setComparisonData] = React.useState({
5806
+ requests: [],
5807
+ completedRequests: [],
5808
+ comments: [],
5809
+ isLoading: true
5810
+ });
5811
+ const comparisonMode = selectedSites && selectedSites.length > 1;
5808
5812
  const hasAccess = Session.validateAccess(auth.site, values.permissionMaintenanceTracking, auth);
5809
5813
  if (!hasAccess) {
5810
5814
  return null;
@@ -5816,50 +5820,92 @@ const AnalyticsHub = _ref => {
5816
5820
  return strings.sideNav[key];
5817
5821
  })();
5818
5822
  const exportColumns = [{
5819
- label: 'Select All',
5820
- key: ''
5823
+ label: "Select All",
5824
+ key: ""
5821
5825
  }, {
5822
- label: 'Start Date',
5823
- key: 'startDate'
5826
+ label: "Start Date",
5827
+ key: "startDate"
5824
5828
  }, {
5825
- label: 'End Date',
5826
- key: 'endDate'
5829
+ label: "End Date",
5830
+ key: "endDate"
5827
5831
  }, {
5828
5832
  label: "".concat(values.textSingularName, "s"),
5829
- key: 'requests'
5833
+ key: "requests"
5830
5834
  }, {
5831
5835
  label: "Completed ".concat(values.textSingularName, "s"),
5832
- key: 'completedRequests'
5836
+ key: "completedRequests"
5833
5837
  }, {
5834
- label: 'Comments',
5835
- key: 'comments'
5838
+ label: "Comments",
5839
+ key: "comments"
5836
5840
  }];
5837
5841
  React.useEffect(() => {
5838
5842
  getData();
5839
- }, [startTime, endTime]);
5843
+ }, [startTime, endTime, userType, userCategory, selectedSites]);
5840
5844
  const getData = async () => {
5841
- setAnalyticsData(getInitialState());
5842
- // Load analytics data here using startTime and endTime
5843
- const timeDifference = endTime - startTime;
5844
- const [currentStatsResponse, prevStatsResponse] = await Promise.all([analyticsActions.getAggregateEntityStats(auth.site, values.analyticsKey, startTime, endTime, true), analyticsActions.getAggregateEntityStats(auth.site, values.analyticsKey, startTime - timeDifference, startTime, true)]);
5845
- const data = {
5846
- requests: Analytics$1.countActivities(currentStatsResponse.data, 'Request', 'total'),
5847
- prevRequests: Analytics$1.countActivities(prevStatsResponse.data, 'Request', 'total'),
5848
- completedRequests: Analytics$1.countActivities(currentStatsResponse.data, 'RequestCompleted', 'unique'),
5849
- prevCompletedRequests: Analytics$1.countActivities(prevStatsResponse.data, 'RequestCompleted', 'unique'),
5850
- comments: Analytics$1.countActivities(currentStatsResponse.data, 'Comment', 'total'),
5851
- prevComments: Analytics$1.countActivities(prevStatsResponse.data, 'Comment', 'total'),
5852
- isLoading: false
5853
- };
5854
- setAnalyticsData(data);
5845
+ if (comparisonMode) {
5846
+ setComparisonData({
5847
+ requests: [],
5848
+ completedRequests: [],
5849
+ comments: [],
5850
+ isLoading: true
5851
+ });
5852
+ const multiSiteResultsObj = await Analytics$1.fetchMultiSiteData(selectedSites, async site => {
5853
+ const {
5854
+ data
5855
+ } = await analyticsActions.getAggregateEntityStats(site, values.analyticsKey, startTime, endTime, true, {
5856
+ userType,
5857
+ userCategory
5858
+ });
5859
+ return data;
5860
+ });
5861
+ const multiSiteResults = Object.entries(multiSiteResultsObj).map(_ref2 => {
5862
+ let [site, data] = _ref2;
5863
+ return {
5864
+ site,
5865
+ data
5866
+ };
5867
+ });
5868
+ const roles = auth.user.Roles;
5869
+ const buildComparison = (activityKey, countType) => multiSiteResults.map(result => ({
5870
+ name: Helper.getSiteNameFromRoles(result.site, roles),
5871
+ value: Analytics$1.countActivities(result.data, activityKey, countType)
5872
+ }));
5873
+ setComparisonData({
5874
+ requests: buildComparison("Request", "total"),
5875
+ completedRequests: buildComparison("RequestCompleted", "unique"),
5876
+ comments: buildComparison("Comment", "total"),
5877
+ isLoading: false
5878
+ });
5879
+ } else {
5880
+ setAnalyticsData(getInitialState());
5881
+ const site = selectedSites && selectedSites.length === 1 ? selectedSites[0] : auth.site;
5882
+ const timeDifference = endTime - startTime;
5883
+ const [currentStatsResponse, prevStatsResponse] = await Promise.all([analyticsActions.getAggregateEntityStats(site, values.analyticsKey, startTime, endTime, true, {
5884
+ userType,
5885
+ userCategory
5886
+ }), analyticsActions.getAggregateEntityStats(site, values.analyticsKey, startTime - timeDifference, startTime, true, {
5887
+ userType,
5888
+ userCategory
5889
+ })]);
5890
+ const data = {
5891
+ requests: Analytics$1.countActivities(currentStatsResponse.data, "Request", "total"),
5892
+ prevRequests: Analytics$1.countActivities(prevStatsResponse.data, "Request", "total"),
5893
+ completedRequests: Analytics$1.countActivities(currentStatsResponse.data, "RequestCompleted", "unique"),
5894
+ prevCompletedRequests: Analytics$1.countActivities(prevStatsResponse.data, "RequestCompleted", "unique"),
5895
+ comments: Analytics$1.countActivities(currentStatsResponse.data, "Comment", "total"),
5896
+ prevComments: Analytics$1.countActivities(prevStatsResponse.data, "Comment", "total"),
5897
+ isLoading: false
5898
+ };
5899
+ setAnalyticsData(data);
5900
+ }
5855
5901
  };
5856
5902
  const isReadyToOpenCSV = () => {
5857
- return !analyticsData.isLoading;
5903
+ return comparisonMode ? !comparisonData.isLoading : !analyticsData.isLoading;
5858
5904
  };
5859
5905
  const getExportSource = () => {
5860
5906
  return [{
5861
- startDate: moment__default["default"](startTime + 1).format('D-MM-YYYY'),
5862
- endDate: moment__default["default"](endTime).format('D-MM-YYYY'),
5907
+ startDate: moment__default["default"](startTime + 1).format("D-MM-YYYY"),
5908
+ endDate: moment__default["default"](endTime).format("D-MM-YYYY"),
5863
5909
  requests: analyticsData.requests,
5864
5910
  completedRequests: analyticsData.completedRequests,
5865
5911
  comments: analyticsData.comments
@@ -5895,31 +5941,61 @@ const AnalyticsHub = _ref => {
5895
5941
  leftIcon: "file-code-o"
5896
5942
  }, "Export CSV")), /*#__PURE__*/React__default["default"].createElement("div", {
5897
5943
  className: "analyticsSection dashboardSection_content"
5898
- }, /*#__PURE__*/React__default["default"].createElement(Components.StatBox, {
5899
- title: "".concat(featureTitle, " Requests"),
5900
- icon: freeSolidSvgIcons.faWrench,
5901
- value: analyticsData.requests,
5902
- previousValue: analyticsData.prevRequests,
5903
- prevText: prevText,
5904
- viewGraphLink: "/chart?entity=".concat(values.analyticsKey, "&startTime=").concat(startTime, "&endTime=").concat(endTime, "&key=Request&countType=total&dayCount=").concat(dayCount),
5905
- isLoading: analyticsData.isLoading
5906
- }), /*#__PURE__*/React__default["default"].createElement(Components.StatBox, {
5907
- title: "Completed ".concat(featureTitle, " Requests"),
5908
- icon: freeSolidSvgIcons.faCircleCheck,
5909
- value: analyticsData.completedRequests,
5910
- previousValue: analyticsData.prevCompletedRequests,
5911
- prevText: prevText,
5912
- viewGraphLink: "/chart?entity=".concat(values.analyticsKey, "&startTime=").concat(startTime, "&endTime=").concat(endTime, "&key=RequestCompleted&countType=unique&dayCount=").concat(dayCount),
5913
- isLoading: analyticsData.isLoading
5914
- }), /*#__PURE__*/React__default["default"].createElement(Components.StatBox, {
5915
- title: "".concat(featureTitle, " Comments"),
5916
- icon: freeSolidSvgIcons.faComment,
5917
- value: analyticsData.comments,
5918
- previousValue: analyticsData.prevComments,
5919
- prevText: prevText,
5920
- viewGraphLink: "/chart?entity=".concat(values.analyticsKey, "&startTime=").concat(startTime, "&endTime=").concat(endTime, "&key=Comment&countType=total&dayCount=").concat(dayCount),
5921
- isLoading: analyticsData.isLoading
5922
- })));
5944
+ }, (() => {
5945
+ const chartSuffix = [selectedSites && selectedSites.length > 0 ? "&sites=".concat(selectedSites.join(",")) : "", userType ? "&userType=".concat(encodeURIComponent(userType)) : "", userCategory ? "&userCategory=".concat(encodeURIComponent(userCategory)) : ""].join("");
5946
+ if (comparisonMode) {
5947
+ return /*#__PURE__*/React__default["default"].createElement("div", {
5948
+ style: {
5949
+ display: "flex",
5950
+ flexDirection: "column",
5951
+ gap: 16
5952
+ }
5953
+ }, /*#__PURE__*/React__default["default"].createElement(Components.ComparisonStatBox, {
5954
+ title: "".concat(featureTitle, " Requests"),
5955
+ data: comparisonData.requests,
5956
+ prevText: prevText,
5957
+ viewGraphLink: "/chart?entity=".concat(values.analyticsKey, "&startTime=").concat(startTime, "&endTime=").concat(endTime, "&key=Request&countType=total&dayCount=").concat(dayCount).concat(chartSuffix),
5958
+ isLoading: comparisonData.isLoading
5959
+ }), /*#__PURE__*/React__default["default"].createElement(Components.ComparisonStatBox, {
5960
+ title: "Completed ".concat(featureTitle, " Requests"),
5961
+ data: comparisonData.completedRequests,
5962
+ prevText: prevText,
5963
+ viewGraphLink: "/chart?entity=".concat(values.analyticsKey, "&startTime=").concat(startTime, "&endTime=").concat(endTime, "&key=RequestCompleted&countType=unique&dayCount=").concat(dayCount).concat(chartSuffix),
5964
+ isLoading: comparisonData.isLoading
5965
+ }), /*#__PURE__*/React__default["default"].createElement(Components.ComparisonStatBox, {
5966
+ title: "".concat(featureTitle, " Comments"),
5967
+ data: comparisonData.comments,
5968
+ prevText: prevText,
5969
+ viewGraphLink: "/chart?entity=".concat(values.analyticsKey, "&startTime=").concat(startTime, "&endTime=").concat(endTime, "&key=Comment&countType=total&dayCount=").concat(dayCount).concat(chartSuffix),
5970
+ isLoading: comparisonData.isLoading
5971
+ }));
5972
+ }
5973
+ return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(Components.StatBox, {
5974
+ title: "".concat(featureTitle, " Requests"),
5975
+ icon: freeSolidSvgIcons.faWrench,
5976
+ value: analyticsData.requests,
5977
+ previousValue: analyticsData.prevRequests,
5978
+ prevText: prevText,
5979
+ viewGraphLink: "/chart?entity=".concat(values.analyticsKey, "&startTime=").concat(startTime, "&endTime=").concat(endTime, "&key=Request&countType=total&dayCount=").concat(dayCount).concat(chartSuffix),
5980
+ isLoading: analyticsData.isLoading
5981
+ }), /*#__PURE__*/React__default["default"].createElement(Components.StatBox, {
5982
+ title: "Completed ".concat(featureTitle, " Requests"),
5983
+ icon: freeSolidSvgIcons.faCircleCheck,
5984
+ value: analyticsData.completedRequests,
5985
+ previousValue: analyticsData.prevCompletedRequests,
5986
+ prevText: prevText,
5987
+ viewGraphLink: "/chart?entity=".concat(values.analyticsKey, "&startTime=").concat(startTime, "&endTime=").concat(endTime, "&key=RequestCompleted&countType=unique&dayCount=").concat(dayCount).concat(chartSuffix),
5988
+ isLoading: analyticsData.isLoading
5989
+ }), /*#__PURE__*/React__default["default"].createElement(Components.StatBox, {
5990
+ title: "".concat(featureTitle, " Comments"),
5991
+ icon: freeSolidSvgIcons.faComment,
5992
+ value: analyticsData.comments,
5993
+ previousValue: analyticsData.prevComments,
5994
+ prevText: prevText,
5995
+ viewGraphLink: "/chart?entity=".concat(values.analyticsKey, "&startTime=").concat(startTime, "&endTime=").concat(endTime, "&key=Comment&countType=total&dayCount=").concat(dayCount).concat(chartSuffix),
5996
+ isLoading: analyticsData.isLoading
5997
+ }));
5998
+ })()));
5923
5999
  };
5924
6000
  const mapStateToProps = state => {
5925
6001
  const {