@plusscommunities/pluss-maintenance-web 1.1.37-beta.4 → 1.1.37-beta.6
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 +547 -573
- package/dist/index.esm.js +549 -575
- package/dist/index.js +6724 -0
- package/dist/index.js.map +1 -0
- package/dist/index.umd.js +548 -574
- package/package.json +6 -2
- package/.babelrc +0 -3
- package/rollup.config.js +0 -59
- package/src/actions/JobsActions.js +0 -150
- package/src/actions/index.js +0 -1
- package/src/actions/types.js +0 -8
- package/src/apis/index.js +0 -10
- package/src/apis/maintenanceActions.js +0 -203
- package/src/apis/reactionActions.js +0 -46
- package/src/components/ActivityText.js +0 -57
- package/src/components/AnalyticsHub.js +0 -364
- package/src/components/Configuration.js +0 -392
- package/src/components/JobList.js +0 -1108
- package/src/components/JobTypes.js +0 -198
- package/src/components/PreviewFull.js +0 -33
- package/src/components/PreviewGrid.js +0 -29
- package/src/components/PreviewWidget.js +0 -35
- package/src/components/ViewFull.js +0 -25
- package/src/components/ViewWidget.js +0 -23
- package/src/feature.config.js +0 -127
- package/src/helper/index.js +0 -26
- package/src/images/forms/full.png +0 -0
- package/src/images/forms/fullNoTitle.png +0 -0
- package/src/images/forms/previewWidget.png +0 -0
- package/src/images/forms/widget.png +0 -0
- package/src/images/full.png +0 -0
- package/src/images/fullNoTitle.png +0 -0
- package/src/images/previewWidget.png +0 -0
- package/src/images/widget.png +0 -0
- package/src/index.js +0 -29
- package/src/maintenancePriority.json +0 -5
- package/src/maintenanceStatus.json +0 -20
- package/src/reducers/MaintenanceReducer.js +0 -49
- package/src/screens/AddJob.js +0 -1138
- package/src/screens/AddJobType.js +0 -865
- package/src/screens/Job.js +0 -1531
- package/src/screens/RequestsHub.js +0 -237
- package/src/values.config.a.js +0 -63
- package/src/values.config.default.js +0 -75
- package/src/values.config.enquiry.js +0 -76
- package/src/values.config.feedback.js +0 -74
- package/src/values.config.food.js +0 -74
- package/src/values.config.forms.js +0 -74
- package/src/values.config.js +0 -75
package/dist/index.cjs.js
CHANGED
|
@@ -6,12 +6,12 @@ var _defineProperty = require('@babel/runtime/helpers/defineProperty');
|
|
|
6
6
|
var React = require('react');
|
|
7
7
|
var reactRedux = require('react-redux');
|
|
8
8
|
var reactRouter = require('react-router');
|
|
9
|
-
var _ = require('lodash');
|
|
10
|
-
var moment = require('moment');
|
|
11
|
-
var FontAwesome = require('react-fontawesome');
|
|
12
9
|
var PlussCore = require('@plusscommunities/pluss-core-web');
|
|
13
10
|
var reactBootstrap = require('react-bootstrap');
|
|
14
11
|
var reactRouterDom = require('react-router-dom');
|
|
12
|
+
var FontAwesome = require('react-fontawesome');
|
|
13
|
+
var moment = require('moment');
|
|
14
|
+
var _ = require('lodash');
|
|
15
15
|
var Textarea = require('react-textarea-autosize');
|
|
16
16
|
var freeSolidSvgIcons = require('@fortawesome/free-solid-svg-icons');
|
|
17
17
|
|
|
@@ -37,10 +37,10 @@ function _interopNamespace(e) {
|
|
|
37
37
|
|
|
38
38
|
var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty);
|
|
39
39
|
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
40
|
-
var ___default = /*#__PURE__*/_interopDefaultLegacy(_);
|
|
41
|
-
var moment__default = /*#__PURE__*/_interopDefaultLegacy(moment);
|
|
42
|
-
var FontAwesome__default = /*#__PURE__*/_interopDefaultLegacy(FontAwesome);
|
|
43
40
|
var PlussCore__namespace = /*#__PURE__*/_interopNamespace(PlussCore);
|
|
41
|
+
var FontAwesome__default = /*#__PURE__*/_interopDefaultLegacy(FontAwesome);
|
|
42
|
+
var moment__default = /*#__PURE__*/_interopDefaultLegacy(moment);
|
|
43
|
+
var ___default = /*#__PURE__*/_interopDefaultLegacy(_);
|
|
44
44
|
var Textarea__default = /*#__PURE__*/_interopDefaultLegacy(Textarea);
|
|
45
45
|
|
|
46
46
|
const values = {
|
|
@@ -112,7 +112,13 @@ const values = {
|
|
|
112
112
|
hasHelpButton: true,
|
|
113
113
|
helpGuideURL: '',
|
|
114
114
|
stringConfigJobStatus: 'maintenanceJobStatus',
|
|
115
|
-
stringConfigHideSeen: 'maintenanceDisableSeen'
|
|
115
|
+
stringConfigHideSeen: 'maintenanceDisableSeen',
|
|
116
|
+
// Comment subscription notification preference
|
|
117
|
+
notificationPreference: {
|
|
118
|
+
key: 'maintenancerequestComments',
|
|
119
|
+
label: 'Maintenance comments',
|
|
120
|
+
permission: 'maintenanceTracking'
|
|
121
|
+
}
|
|
116
122
|
};
|
|
117
123
|
|
|
118
124
|
// import * as PlussCore from '../../pluss-core/src';
|
|
@@ -241,7 +247,8 @@ const FeatureConfig = {
|
|
|
241
247
|
init: environment => {
|
|
242
248
|
FeatureConfig.env = environment;
|
|
243
249
|
PlussCore__namespace.Config.init(environment);
|
|
244
|
-
}
|
|
250
|
+
},
|
|
251
|
+
notificationPreference: values.notificationPreference
|
|
245
252
|
};
|
|
246
253
|
|
|
247
254
|
const JOBS_LOADED = values.actionJobsLoaded;
|
|
@@ -251,15 +258,15 @@ const JOBS_TYPES_LOADED = values.actionJobsTypesLoaded;
|
|
|
251
258
|
const JOBS_STATUSES_LOADED = values.actionJobsStatusesLoaded;
|
|
252
259
|
const JOBS_HIDE_SEEN = values.actionJobsHideSeen;
|
|
253
260
|
|
|
254
|
-
function ownKeys$
|
|
255
|
-
function _objectSpread$
|
|
261
|
+
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; }
|
|
262
|
+
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; }
|
|
256
263
|
const {
|
|
257
|
-
Helper: Helper$
|
|
264
|
+
Helper: Helper$4,
|
|
258
265
|
Session: Session$9
|
|
259
266
|
} = PlussCore__namespace;
|
|
260
|
-
const maintenanceActions = {
|
|
267
|
+
const maintenanceActions$1 = {
|
|
261
268
|
getJobType: (site, typeId) => {
|
|
262
|
-
let url = Helper$
|
|
269
|
+
let url = Helper$4.getUrl(values.serviceKey, 'getjobtype');
|
|
263
270
|
return Session$9.authedFunction({
|
|
264
271
|
method: 'POST',
|
|
265
272
|
url,
|
|
@@ -270,7 +277,7 @@ const maintenanceActions = {
|
|
|
270
277
|
});
|
|
271
278
|
},
|
|
272
279
|
getJobTypes: (site, id) => {
|
|
273
|
-
let url = Helper$
|
|
280
|
+
let url = Helper$4.getUrl(values.serviceKey, 'getjobtypes');
|
|
274
281
|
return Session$9.authedFunction({
|
|
275
282
|
method: 'POST',
|
|
276
283
|
url,
|
|
@@ -280,7 +287,7 @@ const maintenanceActions = {
|
|
|
280
287
|
});
|
|
281
288
|
},
|
|
282
289
|
getJob: (site, id) => {
|
|
283
|
-
let url = Helper$
|
|
290
|
+
let url = Helper$4.getUrl(values.serviceKey, 'getJob');
|
|
284
291
|
return Session$9.authedFunction({
|
|
285
292
|
method: 'POST',
|
|
286
293
|
url,
|
|
@@ -291,7 +298,7 @@ const maintenanceActions = {
|
|
|
291
298
|
});
|
|
292
299
|
},
|
|
293
300
|
getJobByJobId: (site, jobId) => {
|
|
294
|
-
let url = Helper$
|
|
301
|
+
let url = Helper$4.getUrl(values.serviceKey, 'getJob');
|
|
295
302
|
return Session$9.authedFunction({
|
|
296
303
|
method: 'POST',
|
|
297
304
|
url,
|
|
@@ -306,7 +313,7 @@ const maintenanceActions = {
|
|
|
306
313
|
let type = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
|
|
307
314
|
return Session$9.authedFunction({
|
|
308
315
|
method: 'POST',
|
|
309
|
-
url: Helper$
|
|
316
|
+
url: Helper$4.getUrl(values.serviceKey, 'getJobs'),
|
|
310
317
|
data: {
|
|
311
318
|
site,
|
|
312
319
|
status,
|
|
@@ -314,7 +321,7 @@ const maintenanceActions = {
|
|
|
314
321
|
}
|
|
315
322
|
});
|
|
316
323
|
},
|
|
317
|
-
getJobs2: (site, status, type, lastKey) => {
|
|
324
|
+
getJobs2: (site, status, type, priority, assignee, startTime, endTime, search, lastKey) => {
|
|
318
325
|
const query = {
|
|
319
326
|
site
|
|
320
327
|
};
|
|
@@ -324,37 +331,57 @@ const maintenanceActions = {
|
|
|
324
331
|
if (type) {
|
|
325
332
|
query.type = type;
|
|
326
333
|
}
|
|
334
|
+
if (priority) {
|
|
335
|
+
query.priority = priority;
|
|
336
|
+
}
|
|
337
|
+
if (assignee) {
|
|
338
|
+
query.assignee = assignee;
|
|
339
|
+
}
|
|
340
|
+
if (startTime) {
|
|
341
|
+
query.startTime = startTime;
|
|
342
|
+
}
|
|
343
|
+
if (endTime) {
|
|
344
|
+
query.endTime = endTime;
|
|
345
|
+
}
|
|
346
|
+
if (search) {
|
|
347
|
+
query.search = search;
|
|
348
|
+
}
|
|
327
349
|
if (lastKey) {
|
|
328
350
|
query.lastKey = JSON.stringify(lastKey);
|
|
329
351
|
}
|
|
330
352
|
return Session$9.authedFunction({
|
|
331
353
|
method: 'GET',
|
|
332
|
-
url: Helper$
|
|
354
|
+
url: Helper$4.getUrl(values.serviceKey, 'get/requests', query)
|
|
333
355
|
});
|
|
334
356
|
},
|
|
357
|
+
/**
|
|
358
|
+
* @deprecated Use getJobs2 with pagination instead.
|
|
359
|
+
* This method recursively fetches ALL pages which can be slow for large datasets.
|
|
360
|
+
* Only use for CSV export where all data is needed.
|
|
361
|
+
*/
|
|
335
362
|
getJobsRecursive: function (site, status, type, lastKey) {
|
|
336
363
|
let jobs = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : [];
|
|
337
|
-
return new Promise(resolve => {
|
|
338
|
-
maintenanceActions.getJobs2(site, status, type, lastKey).then(jobRes => {
|
|
364
|
+
return new Promise((resolve, reject) => {
|
|
365
|
+
maintenanceActions$1.getJobs2(site, status, type, undefined, undefined, undefined, undefined, undefined, lastKey).then(jobRes => {
|
|
339
366
|
const newJobs = [...jobs, ...jobRes.data.Items];
|
|
340
367
|
if (!jobRes.data.LastKey) {
|
|
341
368
|
return resolve(newJobs);
|
|
342
369
|
}
|
|
343
|
-
|
|
344
|
-
});
|
|
370
|
+
maintenanceActions$1.getJobsRecursive(site, status, type, jobRes.data.LastKey, newJobs).then(resolve).catch(reject);
|
|
371
|
+
}).catch(reject);
|
|
345
372
|
});
|
|
346
373
|
},
|
|
347
374
|
createJob: job => {
|
|
348
375
|
return Session$9.authedFunction({
|
|
349
376
|
method: 'POST',
|
|
350
|
-
url: Helper$
|
|
351
|
-
data: _objectSpread$
|
|
377
|
+
url: Helper$4.getUrl(values.serviceKey, 'sendMaintenance'),
|
|
378
|
+
data: _objectSpread$7({}, job)
|
|
352
379
|
});
|
|
353
380
|
},
|
|
354
381
|
editJob: (job, site) => {
|
|
355
382
|
return Session$9.authedFunction({
|
|
356
383
|
method: 'POST',
|
|
357
|
-
url: Helper$
|
|
384
|
+
url: Helper$4.getUrl(values.serviceKey, 'editJob'),
|
|
358
385
|
data: {
|
|
359
386
|
job,
|
|
360
387
|
site
|
|
@@ -364,7 +391,7 @@ const maintenanceActions = {
|
|
|
364
391
|
deleteJob: (site, id) => {
|
|
365
392
|
return Session$9.authedFunction({
|
|
366
393
|
method: 'POST',
|
|
367
|
-
url: Helper$
|
|
394
|
+
url: Helper$4.getUrl(values.serviceKey, 'requests/remove'),
|
|
368
395
|
data: {
|
|
369
396
|
site,
|
|
370
397
|
id
|
|
@@ -374,7 +401,7 @@ const maintenanceActions = {
|
|
|
374
401
|
editJobStatus: (id, status) => {
|
|
375
402
|
return Session$9.authedFunction({
|
|
376
403
|
method: 'POST',
|
|
377
|
-
url: Helper$
|
|
404
|
+
url: Helper$4.getUrl(values.serviceKey, 'editJobStatus'),
|
|
378
405
|
data: {
|
|
379
406
|
id,
|
|
380
407
|
status
|
|
@@ -384,7 +411,7 @@ const maintenanceActions = {
|
|
|
384
411
|
editJobPriority: (id, priority) => {
|
|
385
412
|
return Session$9.authedFunction({
|
|
386
413
|
method: 'POST',
|
|
387
|
-
url: Helper$
|
|
414
|
+
url: Helper$4.getUrl(values.serviceKey, 'update/priority'),
|
|
388
415
|
data: {
|
|
389
416
|
id,
|
|
390
417
|
priority
|
|
@@ -394,7 +421,7 @@ const maintenanceActions = {
|
|
|
394
421
|
assignJob: (jobId, userId) => {
|
|
395
422
|
return Session$9.authedFunction({
|
|
396
423
|
method: 'POST',
|
|
397
|
-
url: Helper$
|
|
424
|
+
url: Helper$4.getUrl(values.serviceKey, 'update/assign'),
|
|
398
425
|
data: {
|
|
399
426
|
id: jobId,
|
|
400
427
|
userId
|
|
@@ -404,7 +431,7 @@ const maintenanceActions = {
|
|
|
404
431
|
getAssignees: site => {
|
|
405
432
|
return Session$9.authedFunction({
|
|
406
433
|
method: 'GET',
|
|
407
|
-
url: Helper$
|
|
434
|
+
url: Helper$4.getUrl(values.serviceKey, 'get/assignees', {
|
|
408
435
|
site
|
|
409
436
|
})
|
|
410
437
|
});
|
|
@@ -412,7 +439,7 @@ const maintenanceActions = {
|
|
|
412
439
|
addNote: (jobId, note, attachments, images) => {
|
|
413
440
|
return Session$9.authedFunction({
|
|
414
441
|
method: 'POST',
|
|
415
|
-
url: Helper$
|
|
442
|
+
url: Helper$4.getUrl(values.serviceKey, 'requests/note'),
|
|
416
443
|
data: {
|
|
417
444
|
id: jobId,
|
|
418
445
|
note,
|
|
@@ -425,7 +452,7 @@ const maintenanceActions = {
|
|
|
425
452
|
editNote: (jobId, noteId, note, attachments, images) => {
|
|
426
453
|
return Session$9.authedFunction({
|
|
427
454
|
method: 'POST',
|
|
428
|
-
url: Helper$
|
|
455
|
+
url: Helper$4.getUrl(values.serviceKey, 'requests/note'),
|
|
429
456
|
data: {
|
|
430
457
|
id: jobId,
|
|
431
458
|
note,
|
|
@@ -439,7 +466,7 @@ const maintenanceActions = {
|
|
|
439
466
|
deleteNote: (jobId, noteId) => {
|
|
440
467
|
return Session$9.authedFunction({
|
|
441
468
|
method: 'POST',
|
|
442
|
-
url: Helper$
|
|
469
|
+
url: Helper$4.getUrl(values.serviceKey, 'requests/note'),
|
|
443
470
|
data: {
|
|
444
471
|
id: jobId,
|
|
445
472
|
noteId,
|
|
@@ -459,7 +486,7 @@ const maintenanceActions = {
|
|
|
459
486
|
};
|
|
460
487
|
return Session$9.authedFunction({
|
|
461
488
|
method: 'POST',
|
|
462
|
-
url: Helper$
|
|
489
|
+
url: Helper$4.getUrl(values.serviceKey, 'createJobType'),
|
|
463
490
|
data
|
|
464
491
|
});
|
|
465
492
|
},
|
|
@@ -477,14 +504,14 @@ const maintenanceActions = {
|
|
|
477
504
|
if (hasCustomFields && customFields) data.customFields = customFields;
|
|
478
505
|
return Session$9.authedFunction({
|
|
479
506
|
method: 'POST',
|
|
480
|
-
url: Helper$
|
|
507
|
+
url: Helper$4.getUrl(values.serviceKey, 'editJobType'),
|
|
481
508
|
data
|
|
482
509
|
});
|
|
483
510
|
},
|
|
484
511
|
deleteJobType: (site, id) => {
|
|
485
512
|
return Session$9.authedFunction({
|
|
486
513
|
method: 'POST',
|
|
487
|
-
url: Helper$
|
|
514
|
+
url: Helper$4.getUrl(values.serviceKey, 'deleteJobType'),
|
|
488
515
|
data: {
|
|
489
516
|
site,
|
|
490
517
|
id
|
|
@@ -494,7 +521,7 @@ const maintenanceActions = {
|
|
|
494
521
|
getExternalSync: jobId => {
|
|
495
522
|
return Session$9.authedFunction({
|
|
496
523
|
method: 'GET',
|
|
497
|
-
url: Helper$
|
|
524
|
+
url: Helper$4.getUrl(values.serviceKey, 'get/externalsync', {
|
|
498
525
|
id: jobId
|
|
499
526
|
})
|
|
500
527
|
});
|
|
@@ -502,7 +529,7 @@ const maintenanceActions = {
|
|
|
502
529
|
retrySync: jobId => {
|
|
503
530
|
return Session$9.authedFunction({
|
|
504
531
|
method: 'POST',
|
|
505
|
-
url: Helper$
|
|
532
|
+
url: Helper$4.getUrl(values.serviceKey, 'update/retrysync'),
|
|
506
533
|
data: {
|
|
507
534
|
id: jobId
|
|
508
535
|
}
|
|
@@ -511,7 +538,7 @@ const maintenanceActions = {
|
|
|
511
538
|
};
|
|
512
539
|
|
|
513
540
|
const {
|
|
514
|
-
Helper: Helper$
|
|
541
|
+
Helper: Helper$3,
|
|
515
542
|
Session: Session$8
|
|
516
543
|
} = PlussCore__namespace;
|
|
517
544
|
const reactionActions = {
|
|
@@ -529,7 +556,7 @@ const reactionActions = {
|
|
|
529
556
|
}
|
|
530
557
|
return Session$8.authedFunction({
|
|
531
558
|
method: 'POST',
|
|
532
|
-
url: Helper$
|
|
559
|
+
url: Helper$3.getUrl('reactions', 'comments/add'),
|
|
533
560
|
data
|
|
534
561
|
});
|
|
535
562
|
},
|
|
@@ -552,7 +579,7 @@ const reactionActions = {
|
|
|
552
579
|
}
|
|
553
580
|
return Session$8.authedFunction({
|
|
554
581
|
method: 'GET',
|
|
555
|
-
url: Helper$
|
|
582
|
+
url: Helper$3.getUrl('reactions', 'comments/get', query)
|
|
556
583
|
});
|
|
557
584
|
}
|
|
558
585
|
};
|
|
@@ -585,30 +612,6 @@ var jobStatusOptions = [
|
|
|
585
612
|
}
|
|
586
613
|
];
|
|
587
614
|
|
|
588
|
-
const {
|
|
589
|
-
Helper: Helper$4
|
|
590
|
-
} = PlussCore__namespace;
|
|
591
|
-
const jobsUpdate = (site, isdashboard) => {
|
|
592
|
-
return dispatch => {
|
|
593
|
-
if (isdashboard) dispatch({
|
|
594
|
-
type: JOBS_LOADING
|
|
595
|
-
});
|
|
596
|
-
maintenanceActions.getJobsRecursive(site).then(res => {
|
|
597
|
-
const currentSite = Helper$4.readStorageWithCookie('site');
|
|
598
|
-
if (!___default["default"].isEmpty(res) && res[0].site === currentSite) {
|
|
599
|
-
dispatch({
|
|
600
|
-
type: JOBS_LOADED,
|
|
601
|
-
payload: res
|
|
602
|
-
});
|
|
603
|
-
} else {
|
|
604
|
-
dispatch({
|
|
605
|
-
type: JOBS_LOADED,
|
|
606
|
-
payload: []
|
|
607
|
-
});
|
|
608
|
-
}
|
|
609
|
-
});
|
|
610
|
-
};
|
|
611
|
-
};
|
|
612
615
|
const jobsLoaded = events => {
|
|
613
616
|
return {
|
|
614
617
|
type: JOBS_LOADED,
|
|
@@ -746,8 +749,8 @@ const getJobPriority = priority => {
|
|
|
746
749
|
return priorityOption || getDefaultPriority();
|
|
747
750
|
};
|
|
748
751
|
|
|
749
|
-
function ownKeys$
|
|
750
|
-
function _objectSpread$
|
|
752
|
+
function ownKeys$6(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; }
|
|
753
|
+
function _objectSpread$6(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$6(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$6(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
751
754
|
const {
|
|
752
755
|
Session: Session$7,
|
|
753
756
|
Components: Components$7,
|
|
@@ -755,7 +758,155 @@ const {
|
|
|
755
758
|
} = PlussCore__namespace;
|
|
756
759
|
class JobList extends React.Component {
|
|
757
760
|
constructor(props) {
|
|
761
|
+
var _this;
|
|
758
762
|
super(props);
|
|
763
|
+
_this = this;
|
|
764
|
+
_defineProperty__default["default"](this, "getAssignees", async () => {
|
|
765
|
+
try {
|
|
766
|
+
const res = await maintenanceActions$1.getAssignees(this.props.auth.site);
|
|
767
|
+
this.setState({
|
|
768
|
+
assignees: res.data.Users
|
|
769
|
+
});
|
|
770
|
+
} catch (error) {
|
|
771
|
+
console.error('getAssignees', error);
|
|
772
|
+
}
|
|
773
|
+
});
|
|
774
|
+
/**
|
|
775
|
+
* Build server-side filter params from current filter state.
|
|
776
|
+
* Translates UI filter selections into API query parameters.
|
|
777
|
+
*/
|
|
778
|
+
_defineProperty__default["default"](this, "buildFilterParams", () => {
|
|
779
|
+
const {
|
|
780
|
+
selectedStatusFilter,
|
|
781
|
+
selectedTypeFilter,
|
|
782
|
+
selectedPriorityFilter,
|
|
783
|
+
selectedUserFilter,
|
|
784
|
+
selectedTimeFilterStart,
|
|
785
|
+
selectedTimeFilterEnd,
|
|
786
|
+
searchTerm
|
|
787
|
+
} = this.state;
|
|
788
|
+
const {
|
|
789
|
+
statusTypes
|
|
790
|
+
} = this.props;
|
|
791
|
+
const params = {};
|
|
792
|
+
|
|
793
|
+
// Status filter: translate "All Incomplete" into the actual incomplete statuses
|
|
794
|
+
if (selectedStatusFilter) {
|
|
795
|
+
if (selectedStatusFilter === STATUS_IMCOMPLETE) {
|
|
796
|
+
// Exclude completed statuses - pass all non-completed status texts
|
|
797
|
+
const incompleteStatuses = statusTypes.filter(s => s.category !== STATUS_COMPLETED).map(s => s.text);
|
|
798
|
+
if (incompleteStatuses.length > 0) {
|
|
799
|
+
params.status = incompleteStatuses.join(',');
|
|
800
|
+
}
|
|
801
|
+
} else {
|
|
802
|
+
params.status = selectedStatusFilter;
|
|
803
|
+
}
|
|
804
|
+
}
|
|
805
|
+
if (selectedTypeFilter) {
|
|
806
|
+
params.type = selectedTypeFilter;
|
|
807
|
+
}
|
|
808
|
+
if (selectedPriorityFilter) {
|
|
809
|
+
params.priority = selectedPriorityFilter;
|
|
810
|
+
}
|
|
811
|
+
if (selectedUserFilter) {
|
|
812
|
+
params.assignee = selectedUserFilter;
|
|
813
|
+
}
|
|
814
|
+
if (selectedTimeFilterStart) {
|
|
815
|
+
params.startTime = selectedTimeFilterStart;
|
|
816
|
+
}
|
|
817
|
+
if (selectedTimeFilterEnd) {
|
|
818
|
+
params.endTime = selectedTimeFilterEnd;
|
|
819
|
+
}
|
|
820
|
+
if (searchTerm) {
|
|
821
|
+
params.search = searchTerm;
|
|
822
|
+
}
|
|
823
|
+
return params;
|
|
824
|
+
});
|
|
825
|
+
/**
|
|
826
|
+
* Monotonically increasing ID used to ignore stale fetch results.
|
|
827
|
+
* When a filter changes, fetchJobs() increments this counter. Any
|
|
828
|
+
* in-flight fetch checks the counter before applying results —
|
|
829
|
+
* if it doesn't match, the results are discarded.
|
|
830
|
+
*/
|
|
831
|
+
_defineProperty__default["default"](this, "_fetchId", 0);
|
|
832
|
+
/**
|
|
833
|
+
* Fetch a single page from the server using the given lastKey.
|
|
834
|
+
*/
|
|
835
|
+
_defineProperty__default["default"](this, "fetchPage", async function () {
|
|
836
|
+
let lastKey = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
|
|
837
|
+
const {
|
|
838
|
+
auth
|
|
839
|
+
} = _this.props;
|
|
840
|
+
const filters = _this.buildFilterParams();
|
|
841
|
+
return maintenanceActions$1.getJobs2(auth.site, filters.status, filters.type, filters.priority, filters.assignee, filters.startTime, filters.endTime, filters.search, lastKey);
|
|
842
|
+
});
|
|
843
|
+
/**
|
|
844
|
+
* Fetch the first page and render immediately.
|
|
845
|
+
*/
|
|
846
|
+
_defineProperty__default["default"](this, "fetchJobs", async () => {
|
|
847
|
+
const fetchId = ++this._fetchId;
|
|
848
|
+
this.setState({
|
|
849
|
+
loading: true,
|
|
850
|
+
loadingMore: false
|
|
851
|
+
}, async () => {
|
|
852
|
+
try {
|
|
853
|
+
const res = await this.fetchPage(null);
|
|
854
|
+
if (this._fetchId !== fetchId) return;
|
|
855
|
+
const items = res.data.Items || [];
|
|
856
|
+
const lastKey = res.data.LastKey || null;
|
|
857
|
+
this.setState({
|
|
858
|
+
jobs: items,
|
|
859
|
+
lastKey,
|
|
860
|
+
hasMore: !!lastKey,
|
|
861
|
+
loading: false
|
|
862
|
+
});
|
|
863
|
+
this.props.jobsLoaded(items);
|
|
864
|
+
this.setRequesters(items);
|
|
865
|
+
} catch (error) {
|
|
866
|
+
if (this._fetchId !== fetchId) return;
|
|
867
|
+
console.error('fetchJobs', error);
|
|
868
|
+
this.setState({
|
|
869
|
+
loading: false
|
|
870
|
+
});
|
|
871
|
+
}
|
|
872
|
+
});
|
|
873
|
+
});
|
|
874
|
+
/**
|
|
875
|
+
* Load the next batch of jobs when the user clicks "Load More".
|
|
876
|
+
*/
|
|
877
|
+
_defineProperty__default["default"](this, "loadMore", async () => {
|
|
878
|
+
const fetchId = ++this._fetchId;
|
|
879
|
+
const {
|
|
880
|
+
lastKey,
|
|
881
|
+
jobs
|
|
882
|
+
} = this.state;
|
|
883
|
+
this.setState({
|
|
884
|
+
loadingMore: true
|
|
885
|
+
}, async () => {
|
|
886
|
+
try {
|
|
887
|
+
const res = await this.fetchPage(lastKey);
|
|
888
|
+
if (this._fetchId !== fetchId) return;
|
|
889
|
+
const items = res.data.Items || [];
|
|
890
|
+
const newLastKey = res.data.LastKey || null;
|
|
891
|
+
const updatedJobs = [...jobs, ...items];
|
|
892
|
+
this.setState({
|
|
893
|
+
jobs: updatedJobs,
|
|
894
|
+
lastKey: newLastKey,
|
|
895
|
+
hasMore: !!newLastKey,
|
|
896
|
+
loadingMore: false
|
|
897
|
+
});
|
|
898
|
+
if (items.length > 0) {
|
|
899
|
+
this.props.jobsLoaded(items);
|
|
900
|
+
}
|
|
901
|
+
} catch (error) {
|
|
902
|
+
if (this._fetchId !== fetchId) return;
|
|
903
|
+
console.error('loadMore', error);
|
|
904
|
+
this.setState({
|
|
905
|
+
loadingMore: false
|
|
906
|
+
});
|
|
907
|
+
}
|
|
908
|
+
});
|
|
909
|
+
});
|
|
759
910
|
_defineProperty__default["default"](this, "setRequesters", jobs => {
|
|
760
911
|
const requesters = ___default["default"].orderBy(___default["default"].uniqBy(jobs.map(j => ({
|
|
761
912
|
id: j.userID,
|
|
@@ -766,30 +917,6 @@ class JobList extends React.Component {
|
|
|
766
917
|
requesters
|
|
767
918
|
});
|
|
768
919
|
});
|
|
769
|
-
_defineProperty__default["default"](this, "getJobs", async () => {
|
|
770
|
-
const {
|
|
771
|
-
auth
|
|
772
|
-
} = this.props;
|
|
773
|
-
try {
|
|
774
|
-
const res = await maintenanceActions.getJobsRecursive(auth.site);
|
|
775
|
-
if (!___default["default"].isEmpty(res) && res[0].site === auth.site) {
|
|
776
|
-
this.setRequesters(res);
|
|
777
|
-
this.props.jobsLoaded(res);
|
|
778
|
-
}
|
|
779
|
-
} catch (error) {
|
|
780
|
-
console.error('getJobs', error);
|
|
781
|
-
}
|
|
782
|
-
});
|
|
783
|
-
_defineProperty__default["default"](this, "getAssignees", async () => {
|
|
784
|
-
try {
|
|
785
|
-
const res = await maintenanceActions.getAssignees(this.props.auth.site);
|
|
786
|
-
this.setState({
|
|
787
|
-
assignees: res.data.Users
|
|
788
|
-
});
|
|
789
|
-
} catch (error) {
|
|
790
|
-
console.error('getAssignees', error);
|
|
791
|
-
}
|
|
792
|
-
});
|
|
793
920
|
_defineProperty__default["default"](this, "sortByCol", col => {
|
|
794
921
|
const {
|
|
795
922
|
sortColumn,
|
|
@@ -809,9 +936,12 @@ class JobList extends React.Component {
|
|
|
809
936
|
_defineProperty__default["default"](this, "onRemoveRequest", async request => {
|
|
810
937
|
if (window.confirm(values.textAreYouSureYouWantToDelete)) {
|
|
811
938
|
this.props.removeJob(request.id);
|
|
939
|
+
// Remove from local state immediately
|
|
940
|
+
this.setState(prevState => ({
|
|
941
|
+
jobs: prevState.jobs.filter(j => j.id !== request.id)
|
|
942
|
+
}));
|
|
812
943
|
try {
|
|
813
|
-
await maintenanceActions.deleteJob(this.props.auth.site, request.id);
|
|
814
|
-
this.getJobs();
|
|
944
|
+
await maintenanceActions$1.deleteJob(this.props.auth.site, request.id);
|
|
815
945
|
} catch (error) {
|
|
816
946
|
console.log('onRemoveRequest', error);
|
|
817
947
|
alert('Something went wrong with the request. Please try again.');
|
|
@@ -830,20 +960,20 @@ class JobList extends React.Component {
|
|
|
830
960
|
});
|
|
831
961
|
_defineProperty__default["default"](this, "selectTypeFilter", filter => {
|
|
832
962
|
this.setState({
|
|
833
|
-
selectedTypeFilter: filter
|
|
834
|
-
});
|
|
963
|
+
selectedTypeFilter: filter || null
|
|
964
|
+
}, () => this.fetchJobs());
|
|
835
965
|
this.closeFilter();
|
|
836
966
|
});
|
|
837
967
|
_defineProperty__default["default"](this, "selectPriorityFilter", filter => {
|
|
838
968
|
this.setState({
|
|
839
|
-
selectedPriorityFilter: filter
|
|
840
|
-
});
|
|
969
|
+
selectedPriorityFilter: filter || null
|
|
970
|
+
}, () => this.fetchJobs());
|
|
841
971
|
this.closeFilter();
|
|
842
972
|
});
|
|
843
973
|
_defineProperty__default["default"](this, "selectStatusFilter", filter => {
|
|
844
974
|
this.setState({
|
|
845
|
-
selectedStatusFilter: filter
|
|
846
|
-
});
|
|
975
|
+
selectedStatusFilter: filter || null
|
|
976
|
+
}, () => this.fetchJobs());
|
|
847
977
|
this.closeFilter();
|
|
848
978
|
});
|
|
849
979
|
_defineProperty__default["default"](this, "timeFilterChanged", selectedTimeFilter => {
|
|
@@ -887,7 +1017,7 @@ class JobList extends React.Component {
|
|
|
887
1017
|
selectedTimeFilterStart: startTime,
|
|
888
1018
|
selectedTimeFilterEnd: endTime,
|
|
889
1019
|
selectedTimeFilterText: text
|
|
890
|
-
});
|
|
1020
|
+
}, () => this.fetchJobs());
|
|
891
1021
|
this.closeFilter();
|
|
892
1022
|
});
|
|
893
1023
|
_defineProperty__default["default"](this, "removeTimeFilter", () => {
|
|
@@ -895,7 +1025,7 @@ class JobList extends React.Component {
|
|
|
895
1025
|
selectedTimeFilterStart: null,
|
|
896
1026
|
selectedTimeFilterEnd: null,
|
|
897
1027
|
selectedTimeFilterText: null
|
|
898
|
-
});
|
|
1028
|
+
}, () => this.fetchJobs());
|
|
899
1029
|
});
|
|
900
1030
|
_defineProperty__default["default"](this, "onHandleChange", event => {
|
|
901
1031
|
var stateChange = {};
|
|
@@ -911,7 +1041,7 @@ class JobList extends React.Component {
|
|
|
911
1041
|
this.setState({
|
|
912
1042
|
selectedUserFilter: null,
|
|
913
1043
|
selectedUserFilterText: null
|
|
914
|
-
});
|
|
1044
|
+
}, () => this.fetchJobs());
|
|
915
1045
|
});
|
|
916
1046
|
_defineProperty__default["default"](this, "saveUserFilter", () => {
|
|
917
1047
|
if (!this.state.selectedAssignee) {
|
|
@@ -921,7 +1051,7 @@ class JobList extends React.Component {
|
|
|
921
1051
|
selectedUserFilter: this.state.selectedAssignee.id,
|
|
922
1052
|
selectedUserFilterText: this.state.selectedAssignee.displayName,
|
|
923
1053
|
selectedAssignee: null
|
|
924
|
-
});
|
|
1054
|
+
}, () => this.fetchJobs());
|
|
925
1055
|
}
|
|
926
1056
|
this.closeFilter();
|
|
927
1057
|
});
|
|
@@ -934,7 +1064,7 @@ class JobList extends React.Component {
|
|
|
934
1064
|
this.setState({
|
|
935
1065
|
selectedRequesterFilter: null,
|
|
936
1066
|
selectedRequesterFilterText: null
|
|
937
|
-
});
|
|
1067
|
+
}, () => this.fetchJobs());
|
|
938
1068
|
});
|
|
939
1069
|
_defineProperty__default["default"](this, "saveRequesterFilter", () => {
|
|
940
1070
|
if (!this.state.selectedRequester) {
|
|
@@ -944,7 +1074,7 @@ class JobList extends React.Component {
|
|
|
944
1074
|
selectedRequesterFilter: this.state.selectedRequester.id,
|
|
945
1075
|
selectedRequesterFilterText: this.state.selectedRequester.displayName,
|
|
946
1076
|
selectedRequester: null
|
|
947
|
-
});
|
|
1077
|
+
}, () => this.fetchJobs());
|
|
948
1078
|
}
|
|
949
1079
|
this.closeFilter();
|
|
950
1080
|
});
|
|
@@ -955,85 +1085,47 @@ class JobList extends React.Component {
|
|
|
955
1085
|
lastSearch: thisSearchTime
|
|
956
1086
|
});
|
|
957
1087
|
setTimeout(() => {
|
|
958
|
-
// delayed setter to avoid
|
|
1088
|
+
// delayed setter to avoid searching on every keypress
|
|
959
1089
|
if (this.state.lastSearch === thisSearchTime) {
|
|
960
1090
|
this.setState({
|
|
961
1091
|
searchTerm: this.state.search
|
|
962
|
-
});
|
|
1092
|
+
}, () => this.fetchJobs());
|
|
963
1093
|
}
|
|
964
1094
|
}, 500);
|
|
965
1095
|
});
|
|
1096
|
+
/**
|
|
1097
|
+
* Get the source array for rendering.
|
|
1098
|
+
* With server-side filtering, this is simply the local jobs array
|
|
1099
|
+
* sorted by the user's selected sort column.
|
|
1100
|
+
* The requester filter still applies client-side since the backend
|
|
1101
|
+
* doesn't have a requester/userID filter param.
|
|
1102
|
+
*/
|
|
966
1103
|
_defineProperty__default["default"](this, "getSource", () => {
|
|
967
|
-
let source = this.
|
|
1104
|
+
let source = this.state.jobs;
|
|
968
1105
|
|
|
969
|
-
//
|
|
970
|
-
|
|
971
|
-
source = ___default["default"].filter(source, r => {
|
|
972
|
-
return r.createdUnix >= this.state.selectedTimeFilterStart && r.createdUnix <= this.state.selectedTimeFilterEnd;
|
|
973
|
-
});
|
|
974
|
-
}
|
|
975
|
-
|
|
976
|
-
// filter by type
|
|
977
|
-
if (this.state.selectedTypeFilter) {
|
|
978
|
-
source = ___default["default"].filter(source, r => {
|
|
979
|
-
return r.type === this.state.selectedTypeFilter;
|
|
980
|
-
});
|
|
981
|
-
}
|
|
1106
|
+
// Filter out deleted items
|
|
1107
|
+
source = ___default["default"].filter(source, ev => ev != null && !ev.Deleted);
|
|
982
1108
|
|
|
983
|
-
// filter
|
|
984
|
-
if (this.state.selectedPriorityFilter) {
|
|
985
|
-
const defaultPriority = getDefaultPriority().name;
|
|
986
|
-
source = ___default["default"].filter(source, r => {
|
|
987
|
-
return r.priority === this.state.selectedPriorityFilter || this.state.selectedPriorityFilter === defaultPriority && ___default["default"].isNil(r.priority);
|
|
988
|
-
});
|
|
989
|
-
}
|
|
990
|
-
|
|
991
|
-
// filter by status
|
|
992
|
-
if (this.state.selectedStatusFilter) {
|
|
993
|
-
const {
|
|
994
|
-
statusTypes
|
|
995
|
-
} = this.props;
|
|
996
|
-
const defaultStatus = statusTypes.find(s => s.category === STATUS_NOT_ACTIONED);
|
|
997
|
-
source = ___default["default"].filter(source, r => {
|
|
998
|
-
const status = statusTypes.find(s => s.text === r.status) || defaultStatus;
|
|
999
|
-
if (this.state.selectedStatusFilter === STATUS_IMCOMPLETE) {
|
|
1000
|
-
return status.category !== STATUS_COMPLETED;
|
|
1001
|
-
}
|
|
1002
|
-
return status.text === this.state.selectedStatusFilter;
|
|
1003
|
-
});
|
|
1004
|
-
}
|
|
1005
|
-
if (this.state.selectedUserFilter) {
|
|
1006
|
-
source = ___default["default"].filter(source, r => {
|
|
1007
|
-
return r.AssigneeId === this.state.selectedUserFilter;
|
|
1008
|
-
});
|
|
1009
|
-
}
|
|
1109
|
+
// Requester filter still client-side (no backend param for userID filtering)
|
|
1010
1110
|
if (this.state.selectedRequesterFilter) {
|
|
1011
1111
|
source = ___default["default"].filter(source, r => {
|
|
1012
1112
|
return r.userID === this.state.selectedRequesterFilter;
|
|
1013
1113
|
});
|
|
1014
1114
|
}
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
if (r.title && r.title.toLowerCase().indexOf(this.state.searchTerm.toLowerCase()) > -1) {
|
|
1024
|
-
return true;
|
|
1115
|
+
|
|
1116
|
+
// Skip sorting while auto-fill is appending results to avoid jumpiness.
|
|
1117
|
+
// Sort is re-applied when the user clicks a column header or when
|
|
1118
|
+
// auto-fill completes.
|
|
1119
|
+
if (!this.state.loadingMore) {
|
|
1120
|
+
source = ___default["default"].sortBy(source, event => {
|
|
1121
|
+
if (this.state.sortColumn === 'assigned') {
|
|
1122
|
+
return event.Assignee ? event.Assignee.displayName : 'Unassigned';
|
|
1025
1123
|
}
|
|
1026
|
-
return
|
|
1124
|
+
if (this.state.sortColumn !== 'createdUnix') return event[this.state.sortColumn];
|
|
1125
|
+
return event.createdUnix;
|
|
1027
1126
|
});
|
|
1127
|
+
if (this.state.sortDesc) source.reverse();
|
|
1028
1128
|
}
|
|
1029
|
-
source = ___default["default"].sortBy(source, event => {
|
|
1030
|
-
if (this.state.sortColumn === 'assigned') {
|
|
1031
|
-
return event.Assignee ? event.Assignee.displayName : 'Unassigned';
|
|
1032
|
-
}
|
|
1033
|
-
if (this.state.sortColumn !== 'createdUnix') return event[this.state.sortColumn];
|
|
1034
|
-
return event.createdUnix;
|
|
1035
|
-
});
|
|
1036
|
-
if (this.state.sortDesc) source.reverse();
|
|
1037
1129
|
return source;
|
|
1038
1130
|
});
|
|
1039
1131
|
_defineProperty__default["default"](this, "getCustomFieldValue", field => {
|
|
@@ -1113,7 +1205,7 @@ class JobList extends React.Component {
|
|
|
1113
1205
|
});
|
|
1114
1206
|
const customFieldValues = this.getCustomFields(r, customColumns);
|
|
1115
1207
|
const priority = r.priority || defaultPriority;
|
|
1116
|
-
return _objectSpread$
|
|
1208
|
+
return _objectSpread$6(_objectSpread$6(_objectSpread$6({}, r), customFieldValues), {}, {
|
|
1117
1209
|
notes,
|
|
1118
1210
|
progressTime,
|
|
1119
1211
|
completedTime,
|
|
@@ -1145,13 +1237,60 @@ class JobList extends React.Component {
|
|
|
1145
1237
|
exportCsvOpen: false
|
|
1146
1238
|
});
|
|
1147
1239
|
});
|
|
1240
|
+
_defineProperty__default["default"](this, "hasActiveFilters", () => {
|
|
1241
|
+
const {
|
|
1242
|
+
selectedTypeFilter,
|
|
1243
|
+
selectedPriorityFilter,
|
|
1244
|
+
selectedStatusFilter,
|
|
1245
|
+
selectedTimeFilterStart,
|
|
1246
|
+
selectedUserFilter,
|
|
1247
|
+
selectedRequesterFilter,
|
|
1248
|
+
searchTerm
|
|
1249
|
+
} = this.state;
|
|
1250
|
+
return !!(selectedTypeFilter || selectedPriorityFilter || selectedStatusFilter || selectedTimeFilterStart || selectedUserFilter || selectedRequesterFilter || searchTerm);
|
|
1251
|
+
});
|
|
1252
|
+
_defineProperty__default["default"](this, "clearAllFilters", () => {
|
|
1253
|
+
this.setState({
|
|
1254
|
+
selectedTypeFilter: null,
|
|
1255
|
+
selectedPriorityFilter: null,
|
|
1256
|
+
selectedStatusFilter: null,
|
|
1257
|
+
selectedTimeFilterStart: null,
|
|
1258
|
+
selectedTimeFilterEnd: null,
|
|
1259
|
+
selectedTimeFilterText: null,
|
|
1260
|
+
selectedUserFilter: null,
|
|
1261
|
+
selectedUserFilterText: null,
|
|
1262
|
+
selectedRequesterFilter: null,
|
|
1263
|
+
selectedRequesterFilterText: null,
|
|
1264
|
+
search: '',
|
|
1265
|
+
searchTerm: ''
|
|
1266
|
+
}, () => this.fetchJobs());
|
|
1267
|
+
});
|
|
1148
1268
|
this.state = {
|
|
1149
|
-
showCompleted: false,
|
|
1150
1269
|
sortColumn: 'createdUnix',
|
|
1151
1270
|
sortDesc: true,
|
|
1152
1271
|
selectedTimeFilter: Analytics$2.getAnalyticsFilterOptions()[1],
|
|
1153
1272
|
assignees: [],
|
|
1154
|
-
requesters: []
|
|
1273
|
+
requesters: [],
|
|
1274
|
+
// Server-side pagination state
|
|
1275
|
+
jobs: [],
|
|
1276
|
+
lastKey: null,
|
|
1277
|
+
hasMore: false,
|
|
1278
|
+
loading: false,
|
|
1279
|
+
loadingMore: false,
|
|
1280
|
+
// Filters (applied to server-side queries)
|
|
1281
|
+
selectedTypeFilter: null,
|
|
1282
|
+
selectedPriorityFilter: null,
|
|
1283
|
+
selectedStatusFilter: null,
|
|
1284
|
+
selectedTimeFilterStart: null,
|
|
1285
|
+
selectedTimeFilterEnd: null,
|
|
1286
|
+
selectedTimeFilterText: null,
|
|
1287
|
+
selectedUserFilter: null,
|
|
1288
|
+
selectedUserFilterText: null,
|
|
1289
|
+
selectedRequesterFilter: null,
|
|
1290
|
+
selectedRequesterFilterText: null,
|
|
1291
|
+
search: '',
|
|
1292
|
+
searchTerm: '',
|
|
1293
|
+
lastSearch: null
|
|
1155
1294
|
};
|
|
1156
1295
|
this.exportColumns = [{
|
|
1157
1296
|
label: 'Select All',
|
|
@@ -1211,7 +1350,7 @@ class JobList extends React.Component {
|
|
|
1211
1350
|
}
|
|
1212
1351
|
componentDidMount() {
|
|
1213
1352
|
this.props.jobStatusesUpdate(this.props.auth.site);
|
|
1214
|
-
this.
|
|
1353
|
+
this.fetchJobs();
|
|
1215
1354
|
this.getAssignees();
|
|
1216
1355
|
}
|
|
1217
1356
|
renderFilterPopup() {
|
|
@@ -1225,7 +1364,7 @@ class JobList extends React.Component {
|
|
|
1225
1364
|
minWidth: 400,
|
|
1226
1365
|
hasPadding: true,
|
|
1227
1366
|
onClose: this.closeFilter
|
|
1228
|
-
}, ___default["default"].sortBy(___default["default"].uniq(this.
|
|
1367
|
+
}, ___default["default"].sortBy(___default["default"].uniq(this.state.jobs.map(r => r.type)), t => t.toLowerCase()).map(type => {
|
|
1229
1368
|
return /*#__PURE__*/React__default["default"].createElement(Components$7.Tag, {
|
|
1230
1369
|
key: type,
|
|
1231
1370
|
onClick: () => {
|
|
@@ -1416,7 +1555,7 @@ class JobList extends React.Component {
|
|
|
1416
1555
|
const status = ev.status && statusTypes.find(s => s.text === ev.status) || defaultStatus;
|
|
1417
1556
|
const priority = getJobPriority(ev.priority);
|
|
1418
1557
|
return /*#__PURE__*/React__default["default"].createElement("tr", {
|
|
1419
|
-
key: index
|
|
1558
|
+
key: ev.id || index
|
|
1420
1559
|
}, /*#__PURE__*/React__default["default"].createElement("td", null, ev.jobId), /*#__PURE__*/React__default["default"].createElement("td", {
|
|
1421
1560
|
className: "table-TitleColumn"
|
|
1422
1561
|
}, /*#__PURE__*/React__default["default"].createElement(reactRouterDom.Link, {
|
|
@@ -1497,8 +1636,28 @@ class JobList extends React.Component {
|
|
|
1497
1636
|
if (col !== this.state.sortColumn) return '';
|
|
1498
1637
|
return ' table--columnActive';
|
|
1499
1638
|
}
|
|
1639
|
+
renderLoading() {
|
|
1640
|
+
return /*#__PURE__*/React__default["default"].createElement("div", {
|
|
1641
|
+
className: "flex flex-center-row",
|
|
1642
|
+
style: {
|
|
1643
|
+
padding: 40
|
|
1644
|
+
}
|
|
1645
|
+
}, /*#__PURE__*/React__default["default"].createElement(FontAwesome__default["default"], {
|
|
1646
|
+
style: {
|
|
1647
|
+
fontSize: 32,
|
|
1648
|
+
color: PlussCore.Colours.COLOUR_DUSK_LIGHT
|
|
1649
|
+
},
|
|
1650
|
+
name: "spinner fa-pulse fa-fw"
|
|
1651
|
+
}), /*#__PURE__*/React__default["default"].createElement("span", {
|
|
1652
|
+
className: "marginLeft-16 fontRegular fontSize-14",
|
|
1653
|
+
style: {
|
|
1654
|
+
color: PlussCore.Colours.TEXT_MID
|
|
1655
|
+
}
|
|
1656
|
+
}, "Loading ", values.textTitleRequests, "\u2026"));
|
|
1657
|
+
}
|
|
1500
1658
|
renderEmpty() {
|
|
1501
1659
|
const title = this.props.strings["".concat(values.featureKey, "_textTitleRequests")] || values.textTitleRequests;
|
|
1660
|
+
const hasFilters = this.hasActiveFilters();
|
|
1502
1661
|
return /*#__PURE__*/React__default["default"].createElement("div", {
|
|
1503
1662
|
style: {
|
|
1504
1663
|
display: 'flex',
|
|
@@ -1510,7 +1669,22 @@ class JobList extends React.Component {
|
|
|
1510
1669
|
}
|
|
1511
1670
|
}, /*#__PURE__*/React__default["default"].createElement("div", {
|
|
1512
1671
|
className: "emptyState"
|
|
1513
|
-
}), /*#__PURE__*/React__default["default"].createElement("div", {
|
|
1672
|
+
}), hasFilters ? /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement("div", {
|
|
1673
|
+
className: "marginTop-32",
|
|
1674
|
+
style: {
|
|
1675
|
+
maxWidth: 500,
|
|
1676
|
+
textAlign: 'center'
|
|
1677
|
+
}
|
|
1678
|
+
}, /*#__PURE__*/React__default["default"].createElement("span", {
|
|
1679
|
+
className: "fontRegular fontSize-13"
|
|
1680
|
+
}, "No ", title.toLowerCase(), " match your current filters.")), /*#__PURE__*/React__default["default"].createElement("div", {
|
|
1681
|
+
className: "marginTop-16"
|
|
1682
|
+
}, /*#__PURE__*/React__default["default"].createElement(Components$7.Button, {
|
|
1683
|
+
inline: true,
|
|
1684
|
+
buttonType: "tertiary",
|
|
1685
|
+
onClick: this.clearAllFilters,
|
|
1686
|
+
isActive: true
|
|
1687
|
+
}, "Clear All Filters"))) : /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement("div", {
|
|
1514
1688
|
className: "marginTop-32",
|
|
1515
1689
|
style: {
|
|
1516
1690
|
maxWidth: 500,
|
|
@@ -1526,11 +1700,66 @@ class JobList extends React.Component {
|
|
|
1526
1700
|
maxWidth: 500,
|
|
1527
1701
|
textAlign: 'center'
|
|
1528
1702
|
}
|
|
1529
|
-
}, values.textEmptyExample));
|
|
1703
|
+
}, values.textEmptyExample)));
|
|
1704
|
+
}
|
|
1705
|
+
renderLoadMore() {
|
|
1706
|
+
const {
|
|
1707
|
+
hasMore,
|
|
1708
|
+
loadingMore
|
|
1709
|
+
} = this.state;
|
|
1710
|
+
if (!hasMore && !loadingMore) return null;
|
|
1711
|
+
|
|
1712
|
+
// During background auto-fill, show a subtle spinner without a button
|
|
1713
|
+
if (loadingMore) {
|
|
1714
|
+
return /*#__PURE__*/React__default["default"].createElement("div", {
|
|
1715
|
+
className: "flex flex-center-row",
|
|
1716
|
+
style: {
|
|
1717
|
+
padding: '16px 0'
|
|
1718
|
+
}
|
|
1719
|
+
}, /*#__PURE__*/React__default["default"].createElement(FontAwesome__default["default"], {
|
|
1720
|
+
name: "spinner fa-pulse fa-fw",
|
|
1721
|
+
style: {
|
|
1722
|
+
fontSize: 16,
|
|
1723
|
+
color: PlussCore.Colours.TEXT_MID,
|
|
1724
|
+
marginRight: 8
|
|
1725
|
+
}
|
|
1726
|
+
}), /*#__PURE__*/React__default["default"].createElement("span", {
|
|
1727
|
+
className: "fontRegular fontSize-13",
|
|
1728
|
+
style: {
|
|
1729
|
+
color: PlussCore.Colours.TEXT_MID
|
|
1730
|
+
}
|
|
1731
|
+
}, "Loading more results\u2026"));
|
|
1732
|
+
}
|
|
1733
|
+
return /*#__PURE__*/React__default["default"].createElement("div", {
|
|
1734
|
+
style: {
|
|
1735
|
+
margin: '24px 0 40px 0',
|
|
1736
|
+
position: 'relative',
|
|
1737
|
+
top: -16
|
|
1738
|
+
}
|
|
1739
|
+
}, /*#__PURE__*/React__default["default"].createElement(Components$7.Button, {
|
|
1740
|
+
buttonType: "primary",
|
|
1741
|
+
onClick: this.loadMore,
|
|
1742
|
+
isActive: true,
|
|
1743
|
+
style: {
|
|
1744
|
+
width: '100%'
|
|
1745
|
+
}
|
|
1746
|
+
}, "Load More Results", /*#__PURE__*/React__default["default"].createElement(FontAwesome__default["default"], {
|
|
1747
|
+
name: "plus",
|
|
1748
|
+
style: {
|
|
1749
|
+
marginLeft: 8
|
|
1750
|
+
}
|
|
1751
|
+
})));
|
|
1530
1752
|
}
|
|
1531
1753
|
renderContent() {
|
|
1532
|
-
|
|
1533
|
-
|
|
1754
|
+
const {
|
|
1755
|
+
loading,
|
|
1756
|
+
loadingMore,
|
|
1757
|
+
jobs
|
|
1758
|
+
} = this.state;
|
|
1759
|
+
if (loading) return this.renderLoading();
|
|
1760
|
+
if (___default["default"].isEmpty(jobs) && !loadingMore) return this.renderEmpty();
|
|
1761
|
+
if (___default["default"].isEmpty(jobs)) return this.renderLoading();
|
|
1762
|
+
return /*#__PURE__*/React__default["default"].createElement("div", null, /*#__PURE__*/React__default["default"].createElement(reactBootstrap.Table, {
|
|
1534
1763
|
className: "plussTable",
|
|
1535
1764
|
striped: true,
|
|
1536
1765
|
bordered: true,
|
|
@@ -1613,7 +1842,7 @@ class JobList extends React.Component {
|
|
|
1613
1842
|
style: {
|
|
1614
1843
|
width: 50
|
|
1615
1844
|
}
|
|
1616
|
-
}))), /*#__PURE__*/React__default["default"].createElement("tbody", null, this.renderRequests()));
|
|
1845
|
+
}))), /*#__PURE__*/React__default["default"].createElement("tbody", null, this.renderRequests())), this.renderLoadMore());
|
|
1617
1846
|
}
|
|
1618
1847
|
renderFilters() {
|
|
1619
1848
|
let typeFilter = /*#__PURE__*/React__default["default"].createElement(Components$7.Tag, {
|
|
@@ -1662,13 +1891,9 @@ class JobList extends React.Component {
|
|
|
1662
1891
|
typeFilter = /*#__PURE__*/React__default["default"].createElement(Components$7.Tag, {
|
|
1663
1892
|
className: "marginRight-10",
|
|
1664
1893
|
onClick: () => {
|
|
1665
|
-
this.openFilter('type');
|
|
1666
|
-
},
|
|
1667
|
-
rightIcon: "close",
|
|
1668
|
-
rightClick: e => {
|
|
1669
|
-
e.stopPropagation();
|
|
1670
1894
|
this.selectTypeFilter();
|
|
1671
1895
|
},
|
|
1896
|
+
rightIcon: "close",
|
|
1672
1897
|
text: this.state.selectedTypeFilter
|
|
1673
1898
|
});
|
|
1674
1899
|
}
|
|
@@ -1676,13 +1901,9 @@ class JobList extends React.Component {
|
|
|
1676
1901
|
priorityFilter = /*#__PURE__*/React__default["default"].createElement(Components$7.Tag, {
|
|
1677
1902
|
className: "marginRight-10",
|
|
1678
1903
|
onClick: () => {
|
|
1679
|
-
this.openFilter('priority');
|
|
1680
|
-
},
|
|
1681
|
-
rightIcon: "close",
|
|
1682
|
-
rightClick: e => {
|
|
1683
|
-
e.stopPropagation();
|
|
1684
1904
|
this.selectPriorityFilter();
|
|
1685
1905
|
},
|
|
1906
|
+
rightIcon: "close",
|
|
1686
1907
|
text: this.state.selectedPriorityFilter
|
|
1687
1908
|
});
|
|
1688
1909
|
}
|
|
@@ -1690,13 +1911,9 @@ class JobList extends React.Component {
|
|
|
1690
1911
|
statusFilter = /*#__PURE__*/React__default["default"].createElement(Components$7.Tag, {
|
|
1691
1912
|
className: "marginRight-10",
|
|
1692
1913
|
onClick: () => {
|
|
1693
|
-
this.openFilter('status');
|
|
1694
|
-
},
|
|
1695
|
-
rightIcon: "close",
|
|
1696
|
-
rightClick: e => {
|
|
1697
|
-
e.stopPropagation();
|
|
1698
1914
|
this.selectStatusFilter();
|
|
1699
1915
|
},
|
|
1916
|
+
rightIcon: "close",
|
|
1700
1917
|
text: this.state.selectedStatusFilter
|
|
1701
1918
|
});
|
|
1702
1919
|
}
|
|
@@ -1718,13 +1935,9 @@ class JobList extends React.Component {
|
|
|
1718
1935
|
userFilter = /*#__PURE__*/React__default["default"].createElement(Components$7.Tag, {
|
|
1719
1936
|
className: "marginRight-10",
|
|
1720
1937
|
onClick: () => {
|
|
1721
|
-
this.openFilter('user');
|
|
1722
|
-
},
|
|
1723
|
-
rightIcon: "close",
|
|
1724
|
-
rightClick: e => {
|
|
1725
|
-
e.stopPropagation();
|
|
1726
1938
|
this.removeUserFilter();
|
|
1727
1939
|
},
|
|
1940
|
+
rightIcon: "close",
|
|
1728
1941
|
text: this.state.selectedUserFilterText
|
|
1729
1942
|
});
|
|
1730
1943
|
}
|
|
@@ -1732,13 +1945,9 @@ class JobList extends React.Component {
|
|
|
1732
1945
|
requesterFilter = /*#__PURE__*/React__default["default"].createElement(Components$7.Tag, {
|
|
1733
1946
|
className: "marginRight-10",
|
|
1734
1947
|
onClick: () => {
|
|
1735
|
-
this.openFilter('requester');
|
|
1736
|
-
},
|
|
1737
|
-
rightIcon: "close",
|
|
1738
|
-
rightClick: e => {
|
|
1739
|
-
e.stopPropagation();
|
|
1740
1948
|
this.removeRequesterFilter();
|
|
1741
1949
|
},
|
|
1950
|
+
rightIcon: "close",
|
|
1742
1951
|
text: this.state.selectedRequesterFilterText
|
|
1743
1952
|
});
|
|
1744
1953
|
}
|
|
@@ -1816,7 +2025,7 @@ class JobTypes extends React.Component {
|
|
|
1816
2025
|
super(props);
|
|
1817
2026
|
_defineProperty__default["default"](this, "getJobTypes", async () => {
|
|
1818
2027
|
try {
|
|
1819
|
-
const res = await maintenanceActions.getJobTypes(this.props.auth.site);
|
|
2028
|
+
const res = await maintenanceActions$1.getJobTypes(this.props.auth.site);
|
|
1820
2029
|
if (res.data != null) this.props.jobTypesLoaded(res.data);
|
|
1821
2030
|
} catch (error) {
|
|
1822
2031
|
console.error('getJobTypes', error);
|
|
@@ -1841,7 +2050,7 @@ class JobTypes extends React.Component {
|
|
|
1841
2050
|
_defineProperty__default["default"](this, "onRemoveJobType", async ev => {
|
|
1842
2051
|
if (!window.confirm("Are you sure you want to delete ".concat(ev.typeName, "?"))) return;
|
|
1843
2052
|
try {
|
|
1844
|
-
await maintenanceActions.deleteJobType(this.props.auth.site, ev.id);
|
|
2053
|
+
await maintenanceActions$1.deleteJobType(this.props.auth.site, ev.id);
|
|
1845
2054
|
const index = ___default["default"].findIndex(this.state.jobList, job => {
|
|
1846
2055
|
return job != null && job.id === ev.id;
|
|
1847
2056
|
});
|
|
@@ -2046,12 +2255,12 @@ var JobTypes$1 = reactRedux.connect(mapStateToProps$6, {
|
|
|
2046
2255
|
jobTypesUpdate
|
|
2047
2256
|
})(reactRouter.withRouter(JobTypes));
|
|
2048
2257
|
|
|
2049
|
-
function ownKeys$
|
|
2050
|
-
function _objectSpread$
|
|
2258
|
+
function ownKeys$5(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; }
|
|
2259
|
+
function _objectSpread$5(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$5(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$5(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
2051
2260
|
const {
|
|
2052
2261
|
Session: Session$5,
|
|
2053
2262
|
Components: Components$5,
|
|
2054
|
-
Colours: Colours$
|
|
2263
|
+
Colours: Colours$2
|
|
2055
2264
|
} = PlussCore__namespace;
|
|
2056
2265
|
class Configuration extends React.Component {
|
|
2057
2266
|
constructor(props) {
|
|
@@ -2242,43 +2451,43 @@ class Configuration extends React.Component {
|
|
|
2242
2451
|
return /*#__PURE__*/React__default["default"].createElement("div", null, /*#__PURE__*/React__default["default"].createElement("p", {
|
|
2243
2452
|
className: "fontMedium fontSize-36 text-dark"
|
|
2244
2453
|
}, "Statuses"), /*#__PURE__*/React__default["default"].createElement("div", {
|
|
2245
|
-
style: styles$
|
|
2454
|
+
style: styles$5.statusCategoryHeading
|
|
2246
2455
|
}, /*#__PURE__*/React__default["default"].createElement("span", {
|
|
2247
2456
|
className: "fontMedium fontSize-16 text-bold"
|
|
2248
2457
|
}, "Status Category")), statusTypes.map((status, index) => {
|
|
2249
2458
|
return /*#__PURE__*/React__default["default"].createElement("div", {
|
|
2250
2459
|
key: "".concat(status.text, "_").concat(index),
|
|
2251
|
-
style: styles$
|
|
2460
|
+
style: styles$5.statusTypeContainer
|
|
2252
2461
|
}, /*#__PURE__*/React__default["default"].createElement("div", {
|
|
2253
2462
|
key: status.text,
|
|
2254
2463
|
className: "statusLabel",
|
|
2255
|
-
style: _objectSpread$
|
|
2464
|
+
style: _objectSpread$5(_objectSpread$5({}, styles$5.statusTextContainer), {}, {
|
|
2256
2465
|
backgroundColor: status.color
|
|
2257
2466
|
})
|
|
2258
2467
|
}, /*#__PURE__*/React__default["default"].createElement("span", {
|
|
2259
2468
|
className: "statusLabel_text"
|
|
2260
2469
|
}, status.text)), /*#__PURE__*/React__default["default"].createElement("div", {
|
|
2261
|
-
style: styles$
|
|
2470
|
+
style: styles$5.statusCategoryContainer
|
|
2262
2471
|
}, /*#__PURE__*/React__default["default"].createElement("span", {
|
|
2263
2472
|
className: "fontMedium fontSize-16 text-dark"
|
|
2264
2473
|
}, status.category)), /*#__PURE__*/React__default["default"].createElement(FontAwesome__default["default"], {
|
|
2265
|
-
style: _objectSpread$
|
|
2474
|
+
style: _objectSpread$5(_objectSpread$5({}, styles$5.statusIcon), {}, {
|
|
2266
2475
|
visibility: index === 0 ? 'hidden' : 'visible'
|
|
2267
2476
|
}),
|
|
2268
2477
|
name: 'arrow-up',
|
|
2269
2478
|
onClick: () => this.onMoveStatus(index, true)
|
|
2270
2479
|
}), /*#__PURE__*/React__default["default"].createElement(FontAwesome__default["default"], {
|
|
2271
|
-
style: _objectSpread$
|
|
2480
|
+
style: _objectSpread$5(_objectSpread$5({}, styles$5.statusIcon), {}, {
|
|
2272
2481
|
visibility: index === statusTypes.length - 1 ? 'hidden' : 'visible'
|
|
2273
2482
|
}),
|
|
2274
2483
|
name: 'arrow-down',
|
|
2275
2484
|
onClick: () => this.onMoveStatus(index, false)
|
|
2276
2485
|
}), /*#__PURE__*/React__default["default"].createElement(FontAwesome__default["default"], {
|
|
2277
|
-
style: _objectSpread$
|
|
2486
|
+
style: _objectSpread$5({}, styles$5.statusIcon),
|
|
2278
2487
|
name: "pencil",
|
|
2279
2488
|
onClick: () => this.onEditStatus(index)
|
|
2280
2489
|
}), /*#__PURE__*/React__default["default"].createElement(FontAwesome__default["default"], {
|
|
2281
|
-
style: _objectSpread$
|
|
2490
|
+
style: _objectSpread$5({}, styles$5.statusIcon),
|
|
2282
2491
|
name: "minus-circle",
|
|
2283
2492
|
onClick: () => this.onDeleteStatus(index)
|
|
2284
2493
|
}));
|
|
@@ -2327,8 +2536,8 @@ class Configuration extends React.Component {
|
|
|
2327
2536
|
renderSuccess() {
|
|
2328
2537
|
if (!this.state.success) return null;
|
|
2329
2538
|
return /*#__PURE__*/React__default["default"].createElement("span", {
|
|
2330
|
-
style: _objectSpread$
|
|
2331
|
-
color: Colours$
|
|
2539
|
+
style: _objectSpread$5(_objectSpread$5({}, styles$5.savedText), {}, {
|
|
2540
|
+
color: Colours$2.COLOUR_GREEN
|
|
2332
2541
|
})
|
|
2333
2542
|
}, "Saved");
|
|
2334
2543
|
}
|
|
@@ -2444,7 +2653,7 @@ class Configuration extends React.Component {
|
|
|
2444
2653
|
}, this.renderSubmit(), this.renderSuccess()), this.renderNewStatusPopup());
|
|
2445
2654
|
}
|
|
2446
2655
|
}
|
|
2447
|
-
const styles$
|
|
2656
|
+
const styles$5 = {
|
|
2448
2657
|
statusCategoryHeading: {
|
|
2449
2658
|
marginLeft: 130,
|
|
2450
2659
|
width: 160,
|
|
@@ -2469,7 +2678,7 @@ const styles$6 = {
|
|
|
2469
2678
|
fontSize: 20,
|
|
2470
2679
|
padding: 5,
|
|
2471
2680
|
marginLeft: 10,
|
|
2472
|
-
color: Colours$
|
|
2681
|
+
color: Colours$2.COLOUR_BRANDING_ACTION,
|
|
2473
2682
|
visibility: 'visible'
|
|
2474
2683
|
},
|
|
2475
2684
|
savedText: {
|
|
@@ -2503,52 +2712,6 @@ const {
|
|
|
2503
2712
|
class RequestsHub extends React.Component {
|
|
2504
2713
|
constructor(props) {
|
|
2505
2714
|
super(props);
|
|
2506
|
-
_defineProperty__default["default"](this, "setData", () => {
|
|
2507
|
-
const allList = [];
|
|
2508
|
-
this.state.allList.forEach(ev => {
|
|
2509
|
-
if (ev != null && !ev.Deleted) allList.push(ev);
|
|
2510
|
-
});
|
|
2511
|
-
const upcoming = ___default["default"].filter(allList, ev => {
|
|
2512
|
-
if (!ev) return false;
|
|
2513
|
-
if (ev.status && ev.status === 'Completed') return false;
|
|
2514
|
-
return true;
|
|
2515
|
-
});
|
|
2516
|
-
const completed = ___default["default"].filter(allList, ev => {
|
|
2517
|
-
if (!ev) return false;
|
|
2518
|
-
if (ev.status && ev.status === 'Completed') return true;
|
|
2519
|
-
return false;
|
|
2520
|
-
});
|
|
2521
|
-
|
|
2522
|
-
// console.log('setData', upcoming, completed);
|
|
2523
|
-
this.setState({
|
|
2524
|
-
allList,
|
|
2525
|
-
upcoming,
|
|
2526
|
-
completed
|
|
2527
|
-
});
|
|
2528
|
-
});
|
|
2529
|
-
_defineProperty__default["default"](this, "getData", () => {
|
|
2530
|
-
const {
|
|
2531
|
-
auth
|
|
2532
|
-
} = this.props;
|
|
2533
|
-
this.setState({
|
|
2534
|
-
loadingAll: true
|
|
2535
|
-
}, async () => {
|
|
2536
|
-
try {
|
|
2537
|
-
const res = await maintenanceActions.getJobsRecursive(auth.site);
|
|
2538
|
-
this.setState({
|
|
2539
|
-
loadingAll: false
|
|
2540
|
-
});
|
|
2541
|
-
if (!___default["default"].isEmpty(res) && res[0].site === auth.site) {
|
|
2542
|
-
this.props.jobsLoaded(res);
|
|
2543
|
-
}
|
|
2544
|
-
} catch (error) {
|
|
2545
|
-
console.error('getData', error);
|
|
2546
|
-
this.setState({
|
|
2547
|
-
loadingAll: false
|
|
2548
|
-
});
|
|
2549
|
-
}
|
|
2550
|
-
});
|
|
2551
|
-
});
|
|
2552
2715
|
_defineProperty__default["default"](this, "onAddNew", () => {
|
|
2553
2716
|
const {
|
|
2554
2717
|
auth
|
|
@@ -2575,38 +2738,10 @@ class RequestsHub extends React.Component {
|
|
|
2575
2738
|
_defineProperty__default["default"](this, "getSideBarSectionColour", id => this.state.selectedSection === id ? {
|
|
2576
2739
|
backgroundColor: '#fff'
|
|
2577
2740
|
} : {});
|
|
2578
|
-
_defineProperty__default["default"](this, "renderStats", (stat, loading) => loading ? /*#__PURE__*/React__default["default"].createElement(FontAwesome__default["default"], {
|
|
2579
|
-
style: styles$5.spinner,
|
|
2580
|
-
name: "spinner fa-pulse fa-fw"
|
|
2581
|
-
}) : stat);
|
|
2582
2741
|
this.state = {
|
|
2583
|
-
selectedSection: 'all'
|
|
2584
|
-
location: '',
|
|
2585
|
-
loadingAll: false,
|
|
2586
|
-
loadingSubmissions: false,
|
|
2587
|
-
submissionEntries: [],
|
|
2588
|
-
allList: [],
|
|
2589
|
-
completed: [],
|
|
2590
|
-
upcoming: [],
|
|
2591
|
-
now: moment__default["default"].utc(),
|
|
2592
|
-
onlyFuture: true,
|
|
2593
|
-
search: ''
|
|
2742
|
+
selectedSection: 'all'
|
|
2594
2743
|
};
|
|
2595
2744
|
}
|
|
2596
|
-
UNSAFE_componentWillMount() {
|
|
2597
|
-
this.updateProps(this.props);
|
|
2598
|
-
}
|
|
2599
|
-
componentDidMount() {
|
|
2600
|
-
this.getData();
|
|
2601
|
-
}
|
|
2602
|
-
UNSAFE_componentWillReceiveProps(nextProps) {
|
|
2603
|
-
if (!___default["default"].isEqual(this.props.jobs, nextProps.jobs)) this.updateProps(nextProps);
|
|
2604
|
-
}
|
|
2605
|
-
updateProps(props) {
|
|
2606
|
-
this.setState({
|
|
2607
|
-
allList: props.jobs
|
|
2608
|
-
}, this.setData);
|
|
2609
|
-
}
|
|
2610
2745
|
renderLeftBar() {
|
|
2611
2746
|
const sectionItems = [];
|
|
2612
2747
|
if (this.canAddNew()) {
|
|
@@ -2676,9 +2811,7 @@ class RequestsHub extends React.Component {
|
|
|
2676
2811
|
} else if (this.state.selectedSection === 'config') {
|
|
2677
2812
|
return /*#__PURE__*/React__default["default"].createElement(Configuration$1, null);
|
|
2678
2813
|
}
|
|
2679
|
-
return /*#__PURE__*/React__default["default"].createElement(JobList$1,
|
|
2680
|
-
source: this.state.allList
|
|
2681
|
-
});
|
|
2814
|
+
return /*#__PURE__*/React__default["default"].createElement(JobList$1, null);
|
|
2682
2815
|
}
|
|
2683
2816
|
render() {
|
|
2684
2817
|
return /*#__PURE__*/React__default["default"].createElement("div", {
|
|
@@ -2690,50 +2823,24 @@ class RequestsHub extends React.Component {
|
|
|
2690
2823
|
}, this.renderRight())));
|
|
2691
2824
|
}
|
|
2692
2825
|
}
|
|
2693
|
-
const styles$5 = {
|
|
2694
|
-
sideBarTitleSection: {
|
|
2695
|
-
lineHeight: '40px',
|
|
2696
|
-
marginTop: 30,
|
|
2697
|
-
marginBottom: 30,
|
|
2698
|
-
paddingLeft: 24,
|
|
2699
|
-
paddingRight: 24
|
|
2700
|
-
},
|
|
2701
|
-
sideBarSection: {
|
|
2702
|
-
weight: '100%',
|
|
2703
|
-
minWidth: 200,
|
|
2704
|
-
padding: 32,
|
|
2705
|
-
paddingLeft: 24,
|
|
2706
|
-
cursor: 'pointer',
|
|
2707
|
-
display: 'flex',
|
|
2708
|
-
flexDirection: 'column',
|
|
2709
|
-
justifyContent: 'center'
|
|
2710
|
-
},
|
|
2711
|
-
spinner: {
|
|
2712
|
-
fontSize: 32,
|
|
2713
|
-
color: FeatureConfig.env.colourBrandingOff
|
|
2714
|
-
}
|
|
2715
|
-
};
|
|
2716
2826
|
const mapStateToProps$4 = state => {
|
|
2717
2827
|
const {
|
|
2718
2828
|
auth
|
|
2719
2829
|
} = state;
|
|
2720
2830
|
return {
|
|
2721
|
-
jobs: state[values.reducerKey].jobs,
|
|
2722
2831
|
auth,
|
|
2723
2832
|
strings: state.strings && state.strings.config || {}
|
|
2724
2833
|
};
|
|
2725
2834
|
};
|
|
2726
|
-
var RequestsHub$1 = reactRedux.connect(mapStateToProps$4
|
|
2727
|
-
jobsLoaded
|
|
2728
|
-
})(reactRouter.withRouter(RequestsHub));
|
|
2835
|
+
var RequestsHub$1 = reactRedux.connect(mapStateToProps$4)(reactRouter.withRouter(RequestsHub));
|
|
2729
2836
|
|
|
2730
|
-
function ownKeys$
|
|
2731
|
-
function _objectSpread$
|
|
2837
|
+
function ownKeys$4(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; }
|
|
2838
|
+
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; }
|
|
2732
2839
|
const {
|
|
2733
2840
|
Apis: Apis$1,
|
|
2734
|
-
Helper: Helper$
|
|
2841
|
+
Helper: Helper$2,
|
|
2735
2842
|
Session: Session$3,
|
|
2736
|
-
Colours: Colours$
|
|
2843
|
+
Colours: Colours$1,
|
|
2737
2844
|
Components: Components$3
|
|
2738
2845
|
} = PlussCore__namespace;
|
|
2739
2846
|
const IMAGE_SIZE_NOTE = 72;
|
|
@@ -2742,7 +2849,7 @@ class Job extends React.Component {
|
|
|
2742
2849
|
super(props);
|
|
2743
2850
|
_defineProperty__default["default"](this, "getJob", async () => {
|
|
2744
2851
|
try {
|
|
2745
|
-
const res = await maintenanceActions.getJob(this.props.auth.site, this.state.jobId);
|
|
2852
|
+
const res = await maintenanceActions$1.getJob(this.props.auth.site, this.state.jobId);
|
|
2746
2853
|
this.setState({
|
|
2747
2854
|
updating: false
|
|
2748
2855
|
});
|
|
@@ -2754,7 +2861,7 @@ class Job extends React.Component {
|
|
|
2754
2861
|
});
|
|
2755
2862
|
_defineProperty__default["default"](this, "getAssignees", async () => {
|
|
2756
2863
|
try {
|
|
2757
|
-
const res = await maintenanceActions.getAssignees(this.props.auth.site);
|
|
2864
|
+
const res = await maintenanceActions$1.getAssignees(this.props.auth.site);
|
|
2758
2865
|
this.setState({
|
|
2759
2866
|
assignees: res.data.Users
|
|
2760
2867
|
});
|
|
@@ -2767,7 +2874,7 @@ class Job extends React.Component {
|
|
|
2767
2874
|
this.setState({
|
|
2768
2875
|
loadingExternalSync: true
|
|
2769
2876
|
});
|
|
2770
|
-
const res = await maintenanceActions.getExternalSync(this.state.jobId);
|
|
2877
|
+
const res = await maintenanceActions$1.getExternalSync(this.state.jobId);
|
|
2771
2878
|
this.setState({
|
|
2772
2879
|
externalSync: res.data,
|
|
2773
2880
|
loadingExternalSync: false
|
|
@@ -2792,7 +2899,7 @@ class Job extends React.Component {
|
|
|
2792
2899
|
retrySyncError: null
|
|
2793
2900
|
});
|
|
2794
2901
|
try {
|
|
2795
|
-
await maintenanceActions.retrySync(job.id);
|
|
2902
|
+
await maintenanceActions$1.retrySync(job.id);
|
|
2796
2903
|
// Refresh job data to get updated history
|
|
2797
2904
|
await this.getJob();
|
|
2798
2905
|
this.setState({
|
|
@@ -2815,7 +2922,7 @@ class Job extends React.Component {
|
|
|
2815
2922
|
let statusType = statusTypes.find(s => s.text === status);
|
|
2816
2923
|
if (!statusType) {
|
|
2817
2924
|
const defaultStatus = statusTypes.find(s => s.category === STATUS_NOT_ACTIONED);
|
|
2818
|
-
statusType = _objectSpread$
|
|
2925
|
+
statusType = _objectSpread$4(_objectSpread$4({}, defaultStatus), {}, {
|
|
2819
2926
|
text: status
|
|
2820
2927
|
});
|
|
2821
2928
|
}
|
|
@@ -2958,7 +3065,7 @@ class Job extends React.Component {
|
|
|
2958
3065
|
// Method to handle user assignment
|
|
2959
3066
|
_defineProperty__default["default"](this, "onAssignUser", async userId => {
|
|
2960
3067
|
try {
|
|
2961
|
-
const res = await maintenanceActions.assignJob(this.state.jobId, userId);
|
|
3068
|
+
const res = await maintenanceActions$1.assignJob(this.state.jobId, userId);
|
|
2962
3069
|
this.getJob();
|
|
2963
3070
|
} catch (err) {
|
|
2964
3071
|
console.error("onAssignUser", err);
|
|
@@ -2970,12 +3077,12 @@ class Job extends React.Component {
|
|
|
2970
3077
|
this.setState({
|
|
2971
3078
|
submittingNote: true
|
|
2972
3079
|
});
|
|
2973
|
-
const res = await (this.state.editingNote ? maintenanceActions.editNote(this.state.jobId, this.state.editingNote, this.state.noteInput, this.state.noteAttachments.map(a => {
|
|
3080
|
+
const res = await (this.state.editingNote ? maintenanceActions$1.editNote(this.state.jobId, this.state.editingNote, this.state.noteInput, this.state.noteAttachments.map(a => {
|
|
2974
3081
|
return {
|
|
2975
3082
|
Title: a.Title,
|
|
2976
3083
|
Source: a.Source
|
|
2977
3084
|
};
|
|
2978
|
-
}), this.state.noteImages) : maintenanceActions.addNote(this.state.jobId, this.state.noteInput, this.state.noteAttachments.map(a => {
|
|
3085
|
+
}), this.state.noteImages) : maintenanceActions$1.addNote(this.state.jobId, this.state.noteInput, this.state.noteAttachments.map(a => {
|
|
2979
3086
|
return {
|
|
2980
3087
|
Title: a.Title,
|
|
2981
3088
|
Source: a.Source
|
|
@@ -3003,9 +3110,9 @@ class Job extends React.Component {
|
|
|
3003
3110
|
});
|
|
3004
3111
|
return;
|
|
3005
3112
|
}
|
|
3006
|
-
maintenanceActions.deleteNote(this.state.jobId, n.Id);
|
|
3113
|
+
maintenanceActions$1.deleteNote(this.state.jobId, n.Id);
|
|
3007
3114
|
const newNotes = ___default["default"].filter(this.state.job.Notes, note => note.Id !== n.Id);
|
|
3008
|
-
const newJob = _objectSpread$
|
|
3115
|
+
const newJob = _objectSpread$4({}, this.state.job);
|
|
3009
3116
|
newJob.Notes = newNotes;
|
|
3010
3117
|
this.setState({
|
|
3011
3118
|
job: newJob,
|
|
@@ -3041,7 +3148,7 @@ class Job extends React.Component {
|
|
|
3041
3148
|
seen: true,
|
|
3042
3149
|
status: job.status || "Unassigned"
|
|
3043
3150
|
};
|
|
3044
|
-
await maintenanceActions.editJob(update, auth.site);
|
|
3151
|
+
await maintenanceActions$1.editJob(update, auth.site);
|
|
3045
3152
|
} catch (error) {
|
|
3046
3153
|
this.setState({
|
|
3047
3154
|
updating: false
|
|
@@ -3089,13 +3196,13 @@ class Job extends React.Component {
|
|
|
3089
3196
|
});
|
|
3090
3197
|
_defineProperty__default["default"](this, "onSelectPriority", async priority => {
|
|
3091
3198
|
this.setState({
|
|
3092
|
-
job: _objectSpread$
|
|
3199
|
+
job: _objectSpread$4(_objectSpread$4({}, this.state.job), {}, {
|
|
3093
3200
|
priority
|
|
3094
3201
|
}),
|
|
3095
3202
|
priorityChangerOpen: false
|
|
3096
3203
|
});
|
|
3097
3204
|
try {
|
|
3098
|
-
const res = await maintenanceActions.editJobPriority(this.state.job.id, priority);
|
|
3205
|
+
const res = await maintenanceActions$1.editJobPriority(this.state.job.id, priority);
|
|
3099
3206
|
const {
|
|
3100
3207
|
job
|
|
3101
3208
|
} = res.data;
|
|
@@ -3114,13 +3221,13 @@ class Job extends React.Component {
|
|
|
3114
3221
|
});
|
|
3115
3222
|
_defineProperty__default["default"](this, "onSelectStatus", async status => {
|
|
3116
3223
|
this.setState({
|
|
3117
|
-
job: _objectSpread$
|
|
3224
|
+
job: _objectSpread$4(_objectSpread$4({}, this.state.job), {}, {
|
|
3118
3225
|
status: status
|
|
3119
3226
|
}),
|
|
3120
3227
|
statusChangerOpen: false
|
|
3121
3228
|
});
|
|
3122
3229
|
try {
|
|
3123
|
-
const res = await maintenanceActions.editJobStatus(this.state.job.id, status);
|
|
3230
|
+
const res = await maintenanceActions$1.editJobStatus(this.state.job.id, status);
|
|
3124
3231
|
const {
|
|
3125
3232
|
job
|
|
3126
3233
|
} = res.data;
|
|
@@ -3133,7 +3240,7 @@ class Job extends React.Component {
|
|
|
3133
3240
|
}
|
|
3134
3241
|
});
|
|
3135
3242
|
this.state = {
|
|
3136
|
-
jobId: Helper$
|
|
3243
|
+
jobId: Helper$2.safeReadParams(props, "jobId") ? props.match.params.jobId : null,
|
|
3137
3244
|
job: null,
|
|
3138
3245
|
showingSelector: false,
|
|
3139
3246
|
updating: false,
|
|
@@ -3336,7 +3443,7 @@ class Job extends React.Component {
|
|
|
3336
3443
|
}, /*#__PURE__*/React__default["default"].createElement("div", {
|
|
3337
3444
|
className: "imageGrid_image",
|
|
3338
3445
|
style: {
|
|
3339
|
-
backgroundImage: "url('".concat(Helper$
|
|
3446
|
+
backgroundImage: "url('".concat(Helper$2.get1400(image), "')"),
|
|
3340
3447
|
width: size,
|
|
3341
3448
|
height: size
|
|
3342
3449
|
}
|
|
@@ -3533,7 +3640,7 @@ class Job extends React.Component {
|
|
|
3533
3640
|
}, /*#__PURE__*/React__default["default"].createElement("div", {
|
|
3534
3641
|
className: "maintenanceNote_top"
|
|
3535
3642
|
}, this.props.auth && this.props.auth.user && this.props.auth.user.Id === note.User.id && /*#__PURE__*/React__default["default"].createElement(Components$3.SVGIcon, {
|
|
3536
|
-
colour: Colours$
|
|
3643
|
+
colour: Colours$1.COLOUR_DUSK_LIGHT,
|
|
3537
3644
|
icon: "more15",
|
|
3538
3645
|
className: "maintenanceNote_moreIcon",
|
|
3539
3646
|
onClick: () => this.onOpenNoteMenu(index)
|
|
@@ -3551,7 +3658,7 @@ class Job extends React.Component {
|
|
|
3551
3658
|
}]
|
|
3552
3659
|
})), /*#__PURE__*/React__default["default"].createElement("p", {
|
|
3553
3660
|
className: "maintenanceNote_text"
|
|
3554
|
-
}, Helper$
|
|
3661
|
+
}, 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));
|
|
3555
3662
|
}
|
|
3556
3663
|
renderAssignment() {
|
|
3557
3664
|
const {
|
|
@@ -3584,7 +3691,7 @@ class Job extends React.Component {
|
|
|
3584
3691
|
}, moment__default["default"].utc(e.timestamp).local().format("D MMM YYYY h:mma")), /*#__PURE__*/React__default["default"].createElement("div", {
|
|
3585
3692
|
className: "statusLabel statusLabel-large statusLabel-full",
|
|
3586
3693
|
style: {
|
|
3587
|
-
backgroundColor: Colours$
|
|
3694
|
+
backgroundColor: Colours$1.COLOUR_DUSK
|
|
3588
3695
|
}
|
|
3589
3696
|
}, /*#__PURE__*/React__default["default"].createElement("span", {
|
|
3590
3697
|
className: "statusLabel_text"
|
|
@@ -3592,7 +3699,7 @@ class Job extends React.Component {
|
|
|
3592
3699
|
}
|
|
3593
3700
|
renderExternalSyncEntry(e, i) {
|
|
3594
3701
|
const isSuccess = e.EntryType === "ExternalIDSet";
|
|
3595
|
-
const backgroundColor = isSuccess ? Colours$
|
|
3702
|
+
const backgroundColor = isSuccess ? Colours$1.COLOUR_GREEN : Colours$1.COLOUR_RED; // Green for success, red for failure
|
|
3596
3703
|
|
|
3597
3704
|
return /*#__PURE__*/React__default["default"].createElement("div", {
|
|
3598
3705
|
className: "ticketHistoryEntry",
|
|
@@ -3652,7 +3759,7 @@ class Job extends React.Component {
|
|
|
3652
3759
|
return /*#__PURE__*/React__default["default"].createElement(FontAwesome__default["default"], {
|
|
3653
3760
|
style: {
|
|
3654
3761
|
fontSize: 20,
|
|
3655
|
-
color: Colours$
|
|
3762
|
+
color: Colours$1.COLOUR_DUSK_LIGHT,
|
|
3656
3763
|
marginLeft: 8
|
|
3657
3764
|
},
|
|
3658
3765
|
name: "spinner fa-pulse fa-fw"
|
|
@@ -3662,7 +3769,7 @@ class Job extends React.Component {
|
|
|
3662
3769
|
className: "statusLabel pointer",
|
|
3663
3770
|
onClick: this.onRetrySync,
|
|
3664
3771
|
style: {
|
|
3665
|
-
backgroundColor: Colours$
|
|
3772
|
+
backgroundColor: Colours$1.COLOUR_RED,
|
|
3666
3773
|
marginLeft: 8
|
|
3667
3774
|
}
|
|
3668
3775
|
}, /*#__PURE__*/React__default["default"].createElement("span", {
|
|
@@ -3683,7 +3790,7 @@ class Job extends React.Component {
|
|
|
3683
3790
|
className: "userStatusIcon",
|
|
3684
3791
|
name: "times-circle",
|
|
3685
3792
|
style: {
|
|
3686
|
-
color: Colours$
|
|
3793
|
+
color: Colours$1.COLOUR_RED
|
|
3687
3794
|
}
|
|
3688
3795
|
}), " ", retrySyncError);
|
|
3689
3796
|
}
|
|
@@ -3696,7 +3803,7 @@ class Job extends React.Component {
|
|
|
3696
3803
|
className: "userStatusIcon",
|
|
3697
3804
|
name: "check-circle",
|
|
3698
3805
|
style: {
|
|
3699
|
-
color: Colours$
|
|
3806
|
+
color: Colours$1.COLOUR_GREEN
|
|
3700
3807
|
}
|
|
3701
3808
|
}), " ", "Sync retry initiated. Check back shortly for results.");
|
|
3702
3809
|
}
|
|
@@ -3709,7 +3816,7 @@ class Job extends React.Component {
|
|
|
3709
3816
|
className: "userStatusIcon",
|
|
3710
3817
|
name: "times-circle",
|
|
3711
3818
|
style: {
|
|
3712
|
-
color: Colours$
|
|
3819
|
+
color: Colours$1.COLOUR_RED
|
|
3713
3820
|
}
|
|
3714
3821
|
}), " ", "External sync failed. Use the retry button to attempt again.");
|
|
3715
3822
|
}
|
|
@@ -3753,11 +3860,11 @@ class Job extends React.Component {
|
|
|
3753
3860
|
} = this.state;
|
|
3754
3861
|
if (!job || !job.history) return null;
|
|
3755
3862
|
const source = ___default["default"].sortBy([...job.history.map(e => {
|
|
3756
|
-
return _objectSpread$
|
|
3863
|
+
return _objectSpread$4(_objectSpread$4({}, e), {}, {
|
|
3757
3864
|
EntryType: e.EntryType || "status"
|
|
3758
3865
|
});
|
|
3759
3866
|
}), ...(job.Notes || []).map(e => {
|
|
3760
|
-
return _objectSpread$
|
|
3867
|
+
return _objectSpread$4(_objectSpread$4({}, e), {}, {
|
|
3761
3868
|
timestamp: e.Timestamp,
|
|
3762
3869
|
EntryType: "note"
|
|
3763
3870
|
});
|
|
@@ -3906,7 +4013,7 @@ class Job extends React.Component {
|
|
|
3906
4013
|
onClick: () => {
|
|
3907
4014
|
this.onSelectAssignee();
|
|
3908
4015
|
},
|
|
3909
|
-
colour: Colours$
|
|
4016
|
+
colour: Colours$1.COLOUR_DUSK
|
|
3910
4017
|
})
|
|
3911
4018
|
}));
|
|
3912
4019
|
} else {
|
|
@@ -3980,14 +4087,14 @@ var Job$1 = reactRedux.connect(mapStateToProps$3, {
|
|
|
3980
4087
|
jobStatusesUpdate
|
|
3981
4088
|
})(reactRouter.withRouter(Job));
|
|
3982
4089
|
|
|
3983
|
-
function ownKeys$
|
|
3984
|
-
function _objectSpread$
|
|
4090
|
+
function ownKeys$3(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; }
|
|
4091
|
+
function _objectSpread$3(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$3(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$3(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
3985
4092
|
const {
|
|
3986
4093
|
Actions,
|
|
3987
4094
|
Components: Components$2,
|
|
3988
|
-
Helper: Helper$
|
|
4095
|
+
Helper: Helper$1,
|
|
3989
4096
|
Session: Session$2,
|
|
3990
|
-
Colours
|
|
4097
|
+
Colours,
|
|
3991
4098
|
Apis
|
|
3992
4099
|
} = PlussCore__namespace;
|
|
3993
4100
|
class AddJob extends React.Component {
|
|
@@ -3997,7 +4104,7 @@ class AddJob extends React.Component {
|
|
|
3997
4104
|
_this = this;
|
|
3998
4105
|
_defineProperty__default["default"](this, "getJob", async () => {
|
|
3999
4106
|
try {
|
|
4000
|
-
const res = await maintenanceActions.getJob(this.props.auth.site, this.state.jobId);
|
|
4107
|
+
const res = await maintenanceActions$1.getJob(this.props.auth.site, this.state.jobId);
|
|
4001
4108
|
res.data.location = res.data.site;
|
|
4002
4109
|
const {
|
|
4003
4110
|
userID,
|
|
@@ -4006,7 +4113,7 @@ class AddJob extends React.Component {
|
|
|
4006
4113
|
type,
|
|
4007
4114
|
customFields
|
|
4008
4115
|
} = res.data;
|
|
4009
|
-
this.setState(_objectSpread$
|
|
4116
|
+
this.setState(_objectSpread$3(_objectSpread$3({}, res.data), {}, {
|
|
4010
4117
|
prevType: type,
|
|
4011
4118
|
prevCustomFileds: customFields,
|
|
4012
4119
|
type,
|
|
@@ -4031,7 +4138,7 @@ class AddJob extends React.Component {
|
|
|
4031
4138
|
});
|
|
4032
4139
|
_defineProperty__default["default"](this, "getJobTypes", async () => {
|
|
4033
4140
|
try {
|
|
4034
|
-
const res = await maintenanceActions.getJobTypes(this.props.auth.site);
|
|
4141
|
+
const res = await maintenanceActions$1.getJobTypes(this.props.auth.site);
|
|
4035
4142
|
this.setState({
|
|
4036
4143
|
types: res.data
|
|
4037
4144
|
});
|
|
@@ -4254,7 +4361,7 @@ class AddJob extends React.Component {
|
|
|
4254
4361
|
event.target.value = "";
|
|
4255
4362
|
});
|
|
4256
4363
|
_defineProperty__default["default"](this, "onToggleDatePicker", qId => {
|
|
4257
|
-
const showDate = _objectSpread$
|
|
4364
|
+
const showDate = _objectSpread$3({}, this.state.showDate);
|
|
4258
4365
|
showDate[qId] = !showDate[qId];
|
|
4259
4366
|
this.setState({
|
|
4260
4367
|
showDate
|
|
@@ -4291,7 +4398,7 @@ class AddJob extends React.Component {
|
|
|
4291
4398
|
customFields: this.state.customFields
|
|
4292
4399
|
};
|
|
4293
4400
|
if (this.state.id != null) {
|
|
4294
|
-
maintenanceActions.editJob(job, this.props.auth.site).then(res => {
|
|
4401
|
+
maintenanceActions$1.editJob(job, this.props.auth.site).then(res => {
|
|
4295
4402
|
this.setState({
|
|
4296
4403
|
success: true,
|
|
4297
4404
|
updating: false
|
|
@@ -4305,12 +4412,12 @@ class AddJob extends React.Component {
|
|
|
4305
4412
|
});
|
|
4306
4413
|
} else {
|
|
4307
4414
|
// Create New Job
|
|
4308
|
-
maintenanceActions.createJob(job).then(res => {
|
|
4415
|
+
maintenanceActions$1.createJob(job).then(res => {
|
|
4309
4416
|
this.setState({
|
|
4310
4417
|
success: true,
|
|
4311
4418
|
updating: false
|
|
4312
4419
|
});
|
|
4313
|
-
|
|
4420
|
+
// JobList fetches fresh data on mount — no action needed here
|
|
4314
4421
|
}).catch(res => {
|
|
4315
4422
|
this.setState({
|
|
4316
4423
|
updating: false
|
|
@@ -4343,7 +4450,7 @@ class AddJob extends React.Component {
|
|
|
4343
4450
|
if (___default["default"].isNil(answer) || ___default["default"].isEmpty(answer)) return true;
|
|
4344
4451
|
switch (type) {
|
|
4345
4452
|
case "email":
|
|
4346
|
-
return Helper$
|
|
4453
|
+
return Helper$1.isEmail(answer);
|
|
4347
4454
|
case "date":
|
|
4348
4455
|
return moment__default["default"](answer, "YYYY-MM-DD", true).isValid();
|
|
4349
4456
|
case "time":
|
|
@@ -4364,7 +4471,7 @@ class AddJob extends React.Component {
|
|
|
4364
4471
|
this.customImageInputs = {};
|
|
4365
4472
|
this.customDocumentInputs = {};
|
|
4366
4473
|
this.state = {
|
|
4367
|
-
jobId: Helper$
|
|
4474
|
+
jobId: Helper$1.safeReadParams(this.props, "jobId") ? this.props.match.params.jobId : null,
|
|
4368
4475
|
job: null,
|
|
4369
4476
|
showingSelector: false,
|
|
4370
4477
|
updating: false,
|
|
@@ -4716,7 +4823,7 @@ class AddJob extends React.Component {
|
|
|
4716
4823
|
return /*#__PURE__*/React__default["default"].createElement("p", {
|
|
4717
4824
|
className: "visitorSignIn_text-staticText",
|
|
4718
4825
|
key: fieldId
|
|
4719
|
-
}, Helper$
|
|
4826
|
+
}, Helper$1.toParagraphed(field.label, {
|
|
4720
4827
|
marginTop: 10
|
|
4721
4828
|
}));
|
|
4722
4829
|
case "date":
|
|
@@ -4735,7 +4842,7 @@ class AddJob extends React.Component {
|
|
|
4735
4842
|
alwaysShowLabel: true,
|
|
4736
4843
|
readOnly: true,
|
|
4737
4844
|
rightContent: !___default["default"].isEmpty(field.answer) && /*#__PURE__*/React__default["default"].createElement(Components$2.SVGIcon, {
|
|
4738
|
-
colour: Colours
|
|
4845
|
+
colour: Colours.COLOUR_DUSK_LIGHT,
|
|
4739
4846
|
icon: "close",
|
|
4740
4847
|
className: "timepicker_clear",
|
|
4741
4848
|
onClick: () => this.onChangeDateAnswer(fieldId, undefined, false)
|
|
@@ -4768,7 +4875,7 @@ class AddJob extends React.Component {
|
|
|
4768
4875
|
}
|
|
4769
4876
|
}),
|
|
4770
4877
|
rightContent: !___default["default"].isEmpty(field.answer) && /*#__PURE__*/React__default["default"].createElement(Components$2.SVGIcon, {
|
|
4771
|
-
colour: Colours
|
|
4878
|
+
colour: Colours.COLOUR_DUSK_LIGHT,
|
|
4772
4879
|
icon: "close",
|
|
4773
4880
|
className: "timepicker_clear",
|
|
4774
4881
|
onClick: () => this.onChangeTimeAnswer(fieldId, undefined)
|
|
@@ -4971,11 +5078,10 @@ const mapStateToProps$2 = state => {
|
|
|
4971
5078
|
return {
|
|
4972
5079
|
auth,
|
|
4973
5080
|
strings: state.strings && state.strings.config || {},
|
|
4974
|
-
optionOnlyForResidents: Helper$
|
|
5081
|
+
optionOnlyForResidents: Helper$1.getSiteSettingFromState(state, values.optionOnlyForResidents)
|
|
4975
5082
|
};
|
|
4976
5083
|
};
|
|
4977
5084
|
var AddJob$1 = reactRedux.connect(mapStateToProps$2, {
|
|
4978
|
-
jobsUpdate,
|
|
4979
5085
|
jobsLoaded,
|
|
4980
5086
|
addRecentlyCreated: Actions.addRecentlyCreated
|
|
4981
5087
|
})(reactRouter.withRouter(AddJob));
|
|
@@ -4983,7 +5089,7 @@ var AddJob$1 = reactRedux.connect(mapStateToProps$2, {
|
|
|
4983
5089
|
const {
|
|
4984
5090
|
Components: Components$1,
|
|
4985
5091
|
Session: Session$1,
|
|
4986
|
-
Helper
|
|
5092
|
+
Helper
|
|
4987
5093
|
} = PlussCore__namespace;
|
|
4988
5094
|
const DEFAULT_FIELD = {
|
|
4989
5095
|
type: 'text',
|
|
@@ -4997,7 +5103,7 @@ class AddJobType extends React.Component {
|
|
|
4997
5103
|
super(props);
|
|
4998
5104
|
_defineProperty__default["default"](this, "getJobType", async () => {
|
|
4999
5105
|
try {
|
|
5000
|
-
const res = await maintenanceActions.getJobType(this.props.auth.site, this.state.jobTypeId);
|
|
5106
|
+
const res = await maintenanceActions$1.getJobType(this.props.auth.site, this.state.jobTypeId);
|
|
5001
5107
|
const {
|
|
5002
5108
|
typeName,
|
|
5003
5109
|
email,
|
|
@@ -5026,7 +5132,7 @@ class AddJobType extends React.Component {
|
|
|
5026
5132
|
const {
|
|
5027
5133
|
jobTypeEmail
|
|
5028
5134
|
} = this.state;
|
|
5029
|
-
return !___default["default"].isEmpty(jobTypeEmail) && Helper
|
|
5135
|
+
return !___default["default"].isEmpty(jobTypeEmail) && Helper.isEmail(jobTypeEmail);
|
|
5030
5136
|
});
|
|
5031
5137
|
_defineProperty__default["default"](this, "isJobTypeValid", () => {
|
|
5032
5138
|
const {
|
|
@@ -5169,9 +5275,9 @@ class AddJobType extends React.Component {
|
|
|
5169
5275
|
}, async () => {
|
|
5170
5276
|
try {
|
|
5171
5277
|
if (jobTypeId) {
|
|
5172
|
-
await maintenanceActions.editJobType(site, jobTypeId, jobTypeName, jobTypeEmail, jobTypeDescription, jobTypeLevel, hasCustomFields, customFields);
|
|
5278
|
+
await maintenanceActions$1.editJobType(site, jobTypeId, jobTypeName, jobTypeEmail, jobTypeDescription, jobTypeLevel, hasCustomFields, customFields);
|
|
5173
5279
|
} else {
|
|
5174
|
-
await maintenanceActions.addJobType(site, jobTypeName, jobTypeEmail, jobTypeDescription, jobTypeLevel, hasCustomFields, customFields);
|
|
5280
|
+
await maintenanceActions$1.addJobType(site, jobTypeName, jobTypeEmail, jobTypeDescription, jobTypeLevel, hasCustomFields, customFields);
|
|
5175
5281
|
}
|
|
5176
5282
|
this.props.jobTypesUpdate(site);
|
|
5177
5283
|
this.setState({
|
|
@@ -5228,7 +5334,7 @@ class AddJobType extends React.Component {
|
|
|
5228
5334
|
}];
|
|
5229
5335
|
this.state = {
|
|
5230
5336
|
loading: false,
|
|
5231
|
-
jobTypeId: Helper
|
|
5337
|
+
jobTypeId: Helper.safeReadParams(this.props, 'jobTypeId') ? this.props.match.params.jobTypeId : null,
|
|
5232
5338
|
jobTypeName: '',
|
|
5233
5339
|
jobTypeEmail: '',
|
|
5234
5340
|
jobTypeDescription: '',
|
|
@@ -5793,14 +5899,10 @@ var AddJobType$1 = reactRedux.connect(mapStateToProps$1, {
|
|
|
5793
5899
|
jobTypesUpdate
|
|
5794
5900
|
})(reactRouter.withRouter(AddJobType));
|
|
5795
5901
|
|
|
5796
|
-
function ownKeys$3(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; }
|
|
5797
|
-
function _objectSpread$3(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$3(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$3(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
5798
5902
|
const {
|
|
5799
5903
|
Analytics: Analytics$1,
|
|
5800
5904
|
Session,
|
|
5801
|
-
Components
|
|
5802
|
-
Helper,
|
|
5803
|
-
Colours
|
|
5905
|
+
Components
|
|
5804
5906
|
} = PlussCore__namespace;
|
|
5805
5907
|
const getInitialState = () => ({
|
|
5806
5908
|
requests: 0,
|
|
@@ -5820,21 +5922,10 @@ const AnalyticsHub = _ref => {
|
|
|
5820
5922
|
auth,
|
|
5821
5923
|
prevText,
|
|
5822
5924
|
dayCount,
|
|
5823
|
-
strings
|
|
5824
|
-
userType,
|
|
5825
|
-
userCategory,
|
|
5826
|
-
selectedSites
|
|
5925
|
+
strings
|
|
5827
5926
|
} = _ref;
|
|
5828
5927
|
const [analyticsData, setAnalyticsData] = React.useState(getInitialState());
|
|
5829
5928
|
const [isExportOpen, setIsExportOpen] = React.useState(false);
|
|
5830
|
-
const [failedSites, setFailedSites] = React.useState([]);
|
|
5831
|
-
const [comparisonData, setComparisonData] = React.useState({
|
|
5832
|
-
requests: [],
|
|
5833
|
-
completedRequests: [],
|
|
5834
|
-
comments: [],
|
|
5835
|
-
isLoading: true
|
|
5836
|
-
});
|
|
5837
|
-
const comparisonMode = selectedSites && selectedSites.length > 1;
|
|
5838
5929
|
const hasAccess = Session.validateAccess(auth.site, values.permissionMaintenanceTracking, auth);
|
|
5839
5930
|
if (!hasAccess) {
|
|
5840
5931
|
return null;
|
|
@@ -5846,130 +5937,50 @@ const AnalyticsHub = _ref => {
|
|
|
5846
5937
|
return strings.sideNav[key];
|
|
5847
5938
|
})();
|
|
5848
5939
|
const exportColumns = [{
|
|
5849
|
-
label:
|
|
5850
|
-
key:
|
|
5851
|
-
},
|
|
5852
|
-
label:
|
|
5853
|
-
key:
|
|
5854
|
-
}] : []), {
|
|
5855
|
-
label: "Start Date",
|
|
5856
|
-
key: "startDate"
|
|
5940
|
+
label: 'Select All',
|
|
5941
|
+
key: ''
|
|
5942
|
+
}, {
|
|
5943
|
+
label: 'Start Date',
|
|
5944
|
+
key: 'startDate'
|
|
5857
5945
|
}, {
|
|
5858
|
-
label:
|
|
5859
|
-
key:
|
|
5946
|
+
label: 'End Date',
|
|
5947
|
+
key: 'endDate'
|
|
5860
5948
|
}, {
|
|
5861
5949
|
label: "".concat(values.textSingularName, "s"),
|
|
5862
|
-
key:
|
|
5950
|
+
key: 'requests'
|
|
5863
5951
|
}, {
|
|
5864
5952
|
label: "Completed ".concat(values.textSingularName, "s"),
|
|
5865
|
-
key:
|
|
5953
|
+
key: 'completedRequests'
|
|
5866
5954
|
}, {
|
|
5867
|
-
label:
|
|
5868
|
-
key:
|
|
5955
|
+
label: 'Comments',
|
|
5956
|
+
key: 'comments'
|
|
5869
5957
|
}];
|
|
5870
5958
|
React.useEffect(() => {
|
|
5871
5959
|
getData();
|
|
5872
|
-
}, [startTime, endTime
|
|
5960
|
+
}, [startTime, endTime]);
|
|
5873
5961
|
const getData = async () => {
|
|
5874
|
-
|
|
5875
|
-
|
|
5876
|
-
|
|
5877
|
-
|
|
5878
|
-
|
|
5879
|
-
|
|
5880
|
-
|
|
5881
|
-
|
|
5882
|
-
|
|
5883
|
-
|
|
5884
|
-
|
|
5885
|
-
|
|
5886
|
-
|
|
5887
|
-
|
|
5888
|
-
userCategory
|
|
5889
|
-
});
|
|
5890
|
-
return data;
|
|
5891
|
-
});
|
|
5892
|
-
const roles = auth.user.Roles;
|
|
5893
|
-
const failed = Object.entries(multiSiteResultsObj).filter(_ref2 => {
|
|
5894
|
-
let [, data] = _ref2;
|
|
5895
|
-
return data === null;
|
|
5896
|
-
}).map(_ref3 => {
|
|
5897
|
-
let [site] = _ref3;
|
|
5898
|
-
return Helper.getSiteNameFromRoles(site, roles);
|
|
5899
|
-
});
|
|
5900
|
-
setFailedSites(failed);
|
|
5901
|
-
const multiSiteResults = Object.entries(multiSiteResultsObj).filter(_ref4 => {
|
|
5902
|
-
let [, data] = _ref4;
|
|
5903
|
-
return data !== null;
|
|
5904
|
-
}).map(_ref5 => {
|
|
5905
|
-
let [site, data] = _ref5;
|
|
5906
|
-
return {
|
|
5907
|
-
site,
|
|
5908
|
-
data
|
|
5909
|
-
};
|
|
5910
|
-
});
|
|
5911
|
-
const buildComparison = (activityKey, countType) => multiSiteResults.map(result => ({
|
|
5912
|
-
name: Helper.getSiteNameFromRoles(result.site, roles),
|
|
5913
|
-
value: Analytics$1.countActivities(result.data, activityKey, countType)
|
|
5914
|
-
}));
|
|
5915
|
-
setComparisonData({
|
|
5916
|
-
requests: buildComparison("Request", "total"),
|
|
5917
|
-
completedRequests: buildComparison("RequestCompleted", "unique"),
|
|
5918
|
-
comments: buildComparison("Comment", "total"),
|
|
5919
|
-
isLoading: false
|
|
5920
|
-
});
|
|
5921
|
-
} else {
|
|
5922
|
-
setAnalyticsData(getInitialState());
|
|
5923
|
-
const site = selectedSites && selectedSites.length === 1 ? selectedSites[0] : auth.site;
|
|
5924
|
-
const timeDifference = endTime - startTime;
|
|
5925
|
-
const [currentStatsResponse, prevStatsResponse] = await Promise.all([analyticsActions.getAggregateEntityStats(site, values.analyticsKey, startTime, endTime, true, {
|
|
5926
|
-
userType,
|
|
5927
|
-
userCategory
|
|
5928
|
-
}), analyticsActions.getAggregateEntityStats(site, values.analyticsKey, startTime - timeDifference, startTime, true, {
|
|
5929
|
-
userType,
|
|
5930
|
-
userCategory
|
|
5931
|
-
})]);
|
|
5932
|
-
const data = {
|
|
5933
|
-
requests: Analytics$1.countActivities(currentStatsResponse.data, "Request", "total"),
|
|
5934
|
-
prevRequests: Analytics$1.countActivities(prevStatsResponse.data, "Request", "total"),
|
|
5935
|
-
completedRequests: Analytics$1.countActivities(currentStatsResponse.data, "RequestCompleted", "unique"),
|
|
5936
|
-
prevCompletedRequests: Analytics$1.countActivities(prevStatsResponse.data, "RequestCompleted", "unique"),
|
|
5937
|
-
comments: Analytics$1.countActivities(currentStatsResponse.data, "Comment", "total"),
|
|
5938
|
-
prevComments: Analytics$1.countActivities(prevStatsResponse.data, "Comment", "total"),
|
|
5939
|
-
isLoading: false
|
|
5940
|
-
};
|
|
5941
|
-
setAnalyticsData(data);
|
|
5942
|
-
}
|
|
5943
|
-
} catch (err) {
|
|
5944
|
-
if (comparisonMode) {
|
|
5945
|
-
setComparisonData(prev => _objectSpread$3(_objectSpread$3({}, prev), {}, {
|
|
5946
|
-
isLoading: false
|
|
5947
|
-
}));
|
|
5948
|
-
} else {
|
|
5949
|
-
setAnalyticsData(prev => _objectSpread$3(_objectSpread$3({}, prev), {}, {
|
|
5950
|
-
isLoading: false
|
|
5951
|
-
}));
|
|
5952
|
-
}
|
|
5953
|
-
}
|
|
5962
|
+
setAnalyticsData(getInitialState());
|
|
5963
|
+
// Load analytics data here using startTime and endTime
|
|
5964
|
+
const timeDifference = endTime - startTime;
|
|
5965
|
+
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)]);
|
|
5966
|
+
const data = {
|
|
5967
|
+
requests: Analytics$1.countActivities(currentStatsResponse.data, 'Request', 'total'),
|
|
5968
|
+
prevRequests: Analytics$1.countActivities(prevStatsResponse.data, 'Request', 'total'),
|
|
5969
|
+
completedRequests: Analytics$1.countActivities(currentStatsResponse.data, 'RequestCompleted', 'unique'),
|
|
5970
|
+
prevCompletedRequests: Analytics$1.countActivities(prevStatsResponse.data, 'RequestCompleted', 'unique'),
|
|
5971
|
+
comments: Analytics$1.countActivities(currentStatsResponse.data, 'Comment', 'total'),
|
|
5972
|
+
prevComments: Analytics$1.countActivities(prevStatsResponse.data, 'Comment', 'total'),
|
|
5973
|
+
isLoading: false
|
|
5974
|
+
};
|
|
5975
|
+
setAnalyticsData(data);
|
|
5954
5976
|
};
|
|
5955
5977
|
const isReadyToOpenCSV = () => {
|
|
5956
|
-
return
|
|
5978
|
+
return !analyticsData.isLoading;
|
|
5957
5979
|
};
|
|
5958
5980
|
const getExportSource = () => {
|
|
5959
|
-
if (comparisonMode) {
|
|
5960
|
-
const sites = comparisonData.requests || [];
|
|
5961
|
-
return sites.map((site, i) => ({
|
|
5962
|
-
site: site.name,
|
|
5963
|
-
startDate: moment__default["default"](startTime + 1).format("D-MM-YYYY"),
|
|
5964
|
-
endDate: moment__default["default"](endTime).format("D-MM-YYYY"),
|
|
5965
|
-
requests: site.value,
|
|
5966
|
-
completedRequests: comparisonData.completedRequests[i] && comparisonData.completedRequests[i].value || 0,
|
|
5967
|
-
comments: comparisonData.comments[i] && comparisonData.comments[i].value || 0
|
|
5968
|
-
}));
|
|
5969
|
-
}
|
|
5970
5981
|
return [{
|
|
5971
|
-
startDate: moment__default["default"](startTime + 1).format(
|
|
5972
|
-
endDate: moment__default["default"](endTime).format(
|
|
5982
|
+
startDate: moment__default["default"](startTime + 1).format('D-MM-YYYY'),
|
|
5983
|
+
endDate: moment__default["default"](endTime).format('D-MM-YYYY'),
|
|
5973
5984
|
requests: analyticsData.requests,
|
|
5974
5985
|
completedRequests: analyticsData.completedRequests,
|
|
5975
5986
|
comments: analyticsData.comments
|
|
@@ -5980,14 +5991,13 @@ const AnalyticsHub = _ref => {
|
|
|
5980
5991
|
return null;
|
|
5981
5992
|
}
|
|
5982
5993
|
const source = getExportSource();
|
|
5983
|
-
const filterSuffix = [userType, userCategory].filter(Boolean).map(f => f.toLowerCase().replace(/\s+/g, "-")).join("_");
|
|
5984
5994
|
return /*#__PURE__*/React__default["default"].createElement(Components.ExportCsvPopup, {
|
|
5985
5995
|
onClose: () => {
|
|
5986
5996
|
setIsExportOpen(false);
|
|
5987
5997
|
},
|
|
5988
5998
|
columns: exportColumns,
|
|
5989
5999
|
source: source,
|
|
5990
|
-
filename: "".concat(values.analyticsKey, "
|
|
6000
|
+
filename: "".concat(values.analyticsKey, "analytics_").concat(source[0].startDate, "_").concat(source[0].endDate, ".csv")
|
|
5991
6001
|
});
|
|
5992
6002
|
};
|
|
5993
6003
|
return /*#__PURE__*/React__default["default"].createElement("div", {
|
|
@@ -6004,69 +6014,33 @@ const AnalyticsHub = _ref => {
|
|
|
6004
6014
|
},
|
|
6005
6015
|
isActive: isReadyToOpenCSV(),
|
|
6006
6016
|
leftIcon: "file-code-o"
|
|
6007
|
-
}, "Export CSV")),
|
|
6008
|
-
type: "help",
|
|
6009
|
-
style: {
|
|
6010
|
-
color: Colours.COLOUR_RED,
|
|
6011
|
-
marginTop: 8
|
|
6012
|
-
}
|
|
6013
|
-
}, "Data unavailable for: ", failedSites.join(", ")), /*#__PURE__*/React__default["default"].createElement("div", {
|
|
6017
|
+
}, "Export CSV")), /*#__PURE__*/React__default["default"].createElement("div", {
|
|
6014
6018
|
className: "analyticsSection dashboardSection_content"
|
|
6015
|
-
}, (
|
|
6016
|
-
|
|
6017
|
-
|
|
6018
|
-
|
|
6019
|
-
|
|
6020
|
-
|
|
6021
|
-
|
|
6022
|
-
|
|
6023
|
-
|
|
6024
|
-
|
|
6025
|
-
|
|
6026
|
-
|
|
6027
|
-
|
|
6028
|
-
|
|
6029
|
-
|
|
6030
|
-
|
|
6031
|
-
|
|
6032
|
-
|
|
6033
|
-
|
|
6034
|
-
|
|
6035
|
-
|
|
6036
|
-
|
|
6037
|
-
|
|
6038
|
-
|
|
6039
|
-
|
|
6040
|
-
viewGraphLink: "/chart?entity=".concat(values.analyticsKey, "&startTime=").concat(startTime, "&endTime=").concat(endTime, "&key=Comment&countType=total&dayCount=").concat(dayCount).concat(chartSuffix),
|
|
6041
|
-
isLoading: comparisonData.isLoading
|
|
6042
|
-
}));
|
|
6043
|
-
}
|
|
6044
|
-
return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(Components.StatBox, {
|
|
6045
|
-
title: "".concat(featureTitle, " Requests"),
|
|
6046
|
-
icon: freeSolidSvgIcons.faWrench,
|
|
6047
|
-
value: analyticsData.requests,
|
|
6048
|
-
previousValue: analyticsData.prevRequests,
|
|
6049
|
-
prevText: prevText,
|
|
6050
|
-
viewGraphLink: "/chart?entity=".concat(values.analyticsKey, "&startTime=").concat(startTime, "&endTime=").concat(endTime, "&key=Request&countType=total&dayCount=").concat(dayCount).concat(chartSuffix),
|
|
6051
|
-
isLoading: analyticsData.isLoading
|
|
6052
|
-
}), /*#__PURE__*/React__default["default"].createElement(Components.StatBox, {
|
|
6053
|
-
title: "Completed ".concat(featureTitle, " Requests"),
|
|
6054
|
-
icon: freeSolidSvgIcons.faCircleCheck,
|
|
6055
|
-
value: analyticsData.completedRequests,
|
|
6056
|
-
previousValue: analyticsData.prevCompletedRequests,
|
|
6057
|
-
prevText: prevText,
|
|
6058
|
-
viewGraphLink: "/chart?entity=".concat(values.analyticsKey, "&startTime=").concat(startTime, "&endTime=").concat(endTime, "&key=RequestCompleted&countType=unique&dayCount=").concat(dayCount).concat(chartSuffix),
|
|
6059
|
-
isLoading: analyticsData.isLoading
|
|
6060
|
-
}), /*#__PURE__*/React__default["default"].createElement(Components.StatBox, {
|
|
6061
|
-
title: "".concat(featureTitle, " Comments"),
|
|
6062
|
-
icon: freeSolidSvgIcons.faComment,
|
|
6063
|
-
value: analyticsData.comments,
|
|
6064
|
-
previousValue: analyticsData.prevComments,
|
|
6065
|
-
prevText: prevText,
|
|
6066
|
-
viewGraphLink: "/chart?entity=".concat(values.analyticsKey, "&startTime=").concat(startTime, "&endTime=").concat(endTime, "&key=Comment&countType=total&dayCount=").concat(dayCount).concat(chartSuffix),
|
|
6067
|
-
isLoading: analyticsData.isLoading
|
|
6068
|
-
}));
|
|
6069
|
-
})()));
|
|
6019
|
+
}, /*#__PURE__*/React__default["default"].createElement(Components.StatBox, {
|
|
6020
|
+
title: "".concat(featureTitle, " Requests"),
|
|
6021
|
+
icon: freeSolidSvgIcons.faWrench,
|
|
6022
|
+
value: analyticsData.requests,
|
|
6023
|
+
previousValue: analyticsData.prevRequests,
|
|
6024
|
+
prevText: prevText,
|
|
6025
|
+
viewGraphLink: "/chart?entity=".concat(values.analyticsKey, "&startTime=").concat(startTime, "&endTime=").concat(endTime, "&key=Request&countType=total&dayCount=").concat(dayCount),
|
|
6026
|
+
isLoading: analyticsData.isLoading
|
|
6027
|
+
}), /*#__PURE__*/React__default["default"].createElement(Components.StatBox, {
|
|
6028
|
+
title: "Completed ".concat(featureTitle, " Requests"),
|
|
6029
|
+
icon: freeSolidSvgIcons.faCircleCheck,
|
|
6030
|
+
value: analyticsData.completedRequests,
|
|
6031
|
+
previousValue: analyticsData.prevCompletedRequests,
|
|
6032
|
+
prevText: prevText,
|
|
6033
|
+
viewGraphLink: "/chart?entity=".concat(values.analyticsKey, "&startTime=").concat(startTime, "&endTime=").concat(endTime, "&key=RequestCompleted&countType=unique&dayCount=").concat(dayCount),
|
|
6034
|
+
isLoading: analyticsData.isLoading
|
|
6035
|
+
}), /*#__PURE__*/React__default["default"].createElement(Components.StatBox, {
|
|
6036
|
+
title: "".concat(featureTitle, " Comments"),
|
|
6037
|
+
icon: freeSolidSvgIcons.faComment,
|
|
6038
|
+
value: analyticsData.comments,
|
|
6039
|
+
previousValue: analyticsData.prevComments,
|
|
6040
|
+
prevText: prevText,
|
|
6041
|
+
viewGraphLink: "/chart?entity=".concat(values.analyticsKey, "&startTime=").concat(startTime, "&endTime=").concat(endTime, "&key=Comment&countType=total&dayCount=").concat(dayCount),
|
|
6042
|
+
isLoading: analyticsData.isLoading
|
|
6043
|
+
})));
|
|
6070
6044
|
};
|
|
6071
6045
|
const mapStateToProps = state => {
|
|
6072
6046
|
const {
|