@plusscommunities/pluss-maintenance-web 1.3.1-beta.0 → 1.3.3-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +629 -691
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import _asyncToGenerator from '@babel/runtime/helpers/asyncToGenerator';
|
|
2
1
|
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
3
2
|
import { Component, useState, useEffect } from 'react';
|
|
4
3
|
import { connect } from 'react-redux';
|
|
@@ -8,12 +7,12 @@ import moment from 'moment';
|
|
|
8
7
|
import { Icon } from '@plusscommunities/pluss-icons';
|
|
9
8
|
import * as PlussCore from '@plusscommunities/pluss-core-web';
|
|
10
9
|
import { PERMISSION_CATEGORIES, IMPORTANCE_LEVELS, Colours as Colours$4 } from '@plusscommunities/pluss-core-web';
|
|
11
|
-
import { Table
|
|
10
|
+
import { Table } from 'react-bootstrap';
|
|
12
11
|
import { Link } from 'react-router-dom';
|
|
13
12
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
14
13
|
import Textarea from 'react-textarea-autosize';
|
|
15
14
|
|
|
16
|
-
|
|
15
|
+
const values = {
|
|
17
16
|
featureKey: "maintenance",
|
|
18
17
|
aliases: ["maintenanceTracking", "maintenanceTypes", "maintenancerequest"],
|
|
19
18
|
serviceKey: "maintenance",
|
|
@@ -92,7 +91,7 @@ var values = {
|
|
|
92
91
|
};
|
|
93
92
|
|
|
94
93
|
// import * as PlussCore from '../../pluss-core/src';
|
|
95
|
-
|
|
94
|
+
const FeatureConfig = {
|
|
96
95
|
key: values.featureKey,
|
|
97
96
|
aliases: values.aliases,
|
|
98
97
|
singularName: values.textSingularName,
|
|
@@ -230,22 +229,22 @@ var FeatureConfig = {
|
|
|
230
229
|
notificationPreference: values.notificationPreference
|
|
231
230
|
};
|
|
232
231
|
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
232
|
+
const JOBS_LOADED = values.actionJobsLoaded;
|
|
233
|
+
const JOBS_LOADING = values.actionJobsLoading;
|
|
234
|
+
const JOBS_REMOVED = values.actionJobsRemoved;
|
|
235
|
+
const JOBS_TYPES_LOADED = values.actionJobsTypesLoaded;
|
|
236
|
+
const JOBS_STATUSES_LOADED = values.actionJobsStatusesLoaded;
|
|
237
|
+
const JOBS_HIDE_SEEN = values.actionJobsHideSeen;
|
|
239
238
|
|
|
240
239
|
function ownKeys$8(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; }
|
|
241
240
|
function _objectSpread$8(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$8(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$8(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
242
|
-
|
|
241
|
+
const {
|
|
243
242
|
Helper: Helper$6,
|
|
244
243
|
Session: Session$9
|
|
245
244
|
} = PlussCore;
|
|
246
|
-
|
|
245
|
+
const maintenanceActions = {
|
|
247
246
|
getJobType: (site, typeId) => {
|
|
248
|
-
|
|
247
|
+
let url = Helper$6.getUrl(values.serviceKey, "getjobtype");
|
|
249
248
|
return Session$9.authedFunction({
|
|
250
249
|
method: "POST",
|
|
251
250
|
url,
|
|
@@ -256,7 +255,7 @@ var maintenanceActions = {
|
|
|
256
255
|
});
|
|
257
256
|
},
|
|
258
257
|
getJobTypes: (site, id) => {
|
|
259
|
-
|
|
258
|
+
let url = Helper$6.getUrl(values.serviceKey, "getjobtypes");
|
|
260
259
|
return Session$9.authedFunction({
|
|
261
260
|
method: "POST",
|
|
262
261
|
url,
|
|
@@ -266,7 +265,7 @@ var maintenanceActions = {
|
|
|
266
265
|
});
|
|
267
266
|
},
|
|
268
267
|
getJob: (site, id) => {
|
|
269
|
-
|
|
268
|
+
let url = Helper$6.getUrl(values.serviceKey, "getJob");
|
|
270
269
|
return Session$9.authedFunction({
|
|
271
270
|
method: "POST",
|
|
272
271
|
url,
|
|
@@ -277,7 +276,7 @@ var maintenanceActions = {
|
|
|
277
276
|
});
|
|
278
277
|
},
|
|
279
278
|
getJobByJobId: (site, jobId) => {
|
|
280
|
-
|
|
279
|
+
let url = Helper$6.getUrl(values.serviceKey, "getJob");
|
|
281
280
|
return Session$9.authedFunction({
|
|
282
281
|
method: "POST",
|
|
283
282
|
url,
|
|
@@ -287,9 +286,9 @@ var maintenanceActions = {
|
|
|
287
286
|
}
|
|
288
287
|
});
|
|
289
288
|
},
|
|
290
|
-
getJobs: function
|
|
291
|
-
|
|
292
|
-
|
|
289
|
+
getJobs: function (site) {
|
|
290
|
+
let status = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "";
|
|
291
|
+
let type = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "";
|
|
293
292
|
return Session$9.authedFunction({
|
|
294
293
|
method: "POST",
|
|
295
294
|
url: Helper$6.getUrl(values.serviceKey, "getJobs"),
|
|
@@ -301,7 +300,7 @@ var maintenanceActions = {
|
|
|
301
300
|
});
|
|
302
301
|
},
|
|
303
302
|
getJobs2: (site, status, type, lastKey) => {
|
|
304
|
-
|
|
303
|
+
const query = {
|
|
305
304
|
site
|
|
306
305
|
};
|
|
307
306
|
if (status) {
|
|
@@ -318,11 +317,11 @@ var maintenanceActions = {
|
|
|
318
317
|
url: Helper$6.getUrl(values.serviceKey, "get/requests", query)
|
|
319
318
|
});
|
|
320
319
|
},
|
|
321
|
-
getJobsRecursive: function
|
|
322
|
-
|
|
320
|
+
getJobsRecursive: function (site, status, type, lastKey) {
|
|
321
|
+
let jobs = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : [];
|
|
323
322
|
return new Promise(resolve => {
|
|
324
323
|
maintenanceActions.getJobs2(site, status, type, lastKey).then(jobRes => {
|
|
325
|
-
|
|
324
|
+
const newJobs = [...jobs, ...jobRes.data.Items];
|
|
326
325
|
if (!jobRes.data.LastKey) {
|
|
327
326
|
return resolve(newJobs);
|
|
328
327
|
}
|
|
@@ -434,7 +433,7 @@ var maintenanceActions = {
|
|
|
434
433
|
});
|
|
435
434
|
},
|
|
436
435
|
addJobType: (site, name, email, description, level, hasCustomFields, customFields) => {
|
|
437
|
-
|
|
436
|
+
const data = {
|
|
438
437
|
site,
|
|
439
438
|
name,
|
|
440
439
|
email,
|
|
@@ -450,7 +449,7 @@ var maintenanceActions = {
|
|
|
450
449
|
});
|
|
451
450
|
},
|
|
452
451
|
editJobType: (site, id, name, email, description, level, hasCustomFields, customFields) => {
|
|
453
|
-
|
|
452
|
+
const data = {
|
|
454
453
|
site,
|
|
455
454
|
id,
|
|
456
455
|
name,
|
|
@@ -496,13 +495,13 @@ var maintenanceActions = {
|
|
|
496
495
|
}
|
|
497
496
|
};
|
|
498
497
|
|
|
499
|
-
|
|
498
|
+
const {
|
|
500
499
|
Helper: Helper$5,
|
|
501
500
|
Session: Session$8
|
|
502
501
|
} = PlussCore;
|
|
503
|
-
|
|
502
|
+
const reactionActions = {
|
|
504
503
|
addComment: (entityId, entityType, entityName, site, comment, image, parentId) => {
|
|
505
|
-
|
|
504
|
+
const data = {
|
|
506
505
|
entityId,
|
|
507
506
|
entityType,
|
|
508
507
|
entityName,
|
|
@@ -529,7 +528,7 @@ var reactionActions = {
|
|
|
529
528
|
// });
|
|
530
529
|
// },
|
|
531
530
|
getComments: (entityId, entityType, minTime) => {
|
|
532
|
-
|
|
531
|
+
const query = {
|
|
533
532
|
entityId,
|
|
534
533
|
entityType
|
|
535
534
|
};
|
|
@@ -543,12 +542,12 @@ var reactionActions = {
|
|
|
543
542
|
}
|
|
544
543
|
};
|
|
545
544
|
|
|
546
|
-
|
|
545
|
+
const {
|
|
547
546
|
Apis: Apis$2
|
|
548
547
|
} = PlussCore;
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
548
|
+
const analyticsActions = Apis$2.analyticsActions;
|
|
549
|
+
const userActions = Apis$2.userActions;
|
|
550
|
+
const stringActions = Apis$2.stringActions;
|
|
552
551
|
|
|
553
552
|
var jobStatusOptions = [
|
|
554
553
|
{
|
|
@@ -571,16 +570,16 @@ var jobStatusOptions = [
|
|
|
571
570
|
}
|
|
572
571
|
];
|
|
573
572
|
|
|
574
|
-
|
|
573
|
+
const {
|
|
575
574
|
Helper: Helper$4
|
|
576
575
|
} = PlussCore;
|
|
577
|
-
|
|
576
|
+
const jobsUpdate = (site, isdashboard) => {
|
|
578
577
|
return dispatch => {
|
|
579
578
|
if (isdashboard) dispatch({
|
|
580
579
|
type: JOBS_LOADING
|
|
581
580
|
});
|
|
582
581
|
maintenanceActions.getJobsRecursive(site).then(res => {
|
|
583
|
-
|
|
582
|
+
const currentSite = Helper$4.readStorageWithCookie("site");
|
|
584
583
|
if (!_.isEmpty(res) && res[0].site === currentSite) {
|
|
585
584
|
dispatch({
|
|
586
585
|
type: JOBS_LOADED,
|
|
@@ -595,19 +594,19 @@ var jobsUpdate = (site, isdashboard) => {
|
|
|
595
594
|
});
|
|
596
595
|
};
|
|
597
596
|
};
|
|
598
|
-
|
|
597
|
+
const jobsLoaded = events => {
|
|
599
598
|
return {
|
|
600
599
|
type: JOBS_LOADED,
|
|
601
600
|
payload: events
|
|
602
601
|
};
|
|
603
602
|
};
|
|
604
|
-
|
|
603
|
+
const removeJob = id => {
|
|
605
604
|
return {
|
|
606
605
|
type: JOBS_REMOVED,
|
|
607
606
|
payload: id
|
|
608
607
|
};
|
|
609
608
|
};
|
|
610
|
-
|
|
609
|
+
const jobTypesUpdate = site => {
|
|
611
610
|
return dispatch => {
|
|
612
611
|
maintenanceActions.getJobTypes(site).then(res => {
|
|
613
612
|
dispatch({
|
|
@@ -617,14 +616,14 @@ var jobTypesUpdate = site => {
|
|
|
617
616
|
});
|
|
618
617
|
};
|
|
619
618
|
};
|
|
620
|
-
|
|
619
|
+
const jobTypesLoaded = events => {
|
|
621
620
|
return {
|
|
622
621
|
type: JOBS_TYPES_LOADED,
|
|
623
622
|
payload: events
|
|
624
623
|
};
|
|
625
624
|
};
|
|
626
|
-
|
|
627
|
-
|
|
625
|
+
const jobStatusesUpdate = function (site) {
|
|
626
|
+
let callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
|
|
628
627
|
return dispatch => {
|
|
629
628
|
stringActions.getString(site, values.stringConfigJobStatus).then(res => {
|
|
630
629
|
dispatch({
|
|
@@ -641,14 +640,14 @@ var jobStatusesUpdate = function jobStatusesUpdate(site) {
|
|
|
641
640
|
});
|
|
642
641
|
};
|
|
643
642
|
};
|
|
644
|
-
|
|
643
|
+
const jobStatusesLoaded = statuses => {
|
|
645
644
|
return {
|
|
646
645
|
type: JOBS_STATUSES_LOADED,
|
|
647
646
|
payload: statuses
|
|
648
647
|
};
|
|
649
648
|
};
|
|
650
|
-
|
|
651
|
-
|
|
649
|
+
const jobHideSeenUpdate = function (site) {
|
|
650
|
+
let callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
|
|
652
651
|
return dispatch => {
|
|
653
652
|
stringActions.getString(site, values.stringConfigHideSeen).then(res => {
|
|
654
653
|
dispatch({
|
|
@@ -665,7 +664,7 @@ var jobHideSeenUpdate = function jobHideSeenUpdate(site) {
|
|
|
665
664
|
});
|
|
666
665
|
};
|
|
667
666
|
};
|
|
668
|
-
|
|
667
|
+
const jobHideSeenLoaded = hide => {
|
|
669
668
|
return {
|
|
670
669
|
type: JOBS_HIDE_SEEN,
|
|
671
670
|
payload: hide
|
|
@@ -721,31 +720,29 @@ var jobPriorityOptions = [
|
|
|
721
720
|
}
|
|
722
721
|
];
|
|
723
722
|
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
723
|
+
const STATUS_IMCOMPLETE = "All Incomplete";
|
|
724
|
+
const STATUS_NOT_ACTIONED = "Not Actioned";
|
|
725
|
+
const STATUS_IN_PROGRESS = "In Progress";
|
|
726
|
+
const STATUS_COMPLETED = "Completed";
|
|
727
|
+
const getDefaultPriority = () => jobPriorityOptions.find(p => p.default);
|
|
728
|
+
const getJobPriority = priority => {
|
|
729
|
+
let priorityOption = null;
|
|
731
730
|
if (priority) priorityOption = jobPriorityOptions.find(p => p.name === priority);
|
|
732
731
|
return priorityOption || getDefaultPriority();
|
|
733
732
|
};
|
|
734
733
|
|
|
735
734
|
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; }
|
|
736
735
|
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(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; }
|
|
737
|
-
|
|
736
|
+
const {
|
|
738
737
|
Session: Session$7,
|
|
739
738
|
Components: Components$7,
|
|
740
739
|
Analytics: Analytics$2
|
|
741
740
|
} = PlussCore;
|
|
742
741
|
class JobList extends Component {
|
|
743
742
|
constructor(props) {
|
|
744
|
-
var _this;
|
|
745
743
|
super(props);
|
|
746
|
-
_this = this;
|
|
747
744
|
_defineProperty(this, "setRequesters", jobs => {
|
|
748
|
-
|
|
745
|
+
const requesters = _.orderBy(_.uniqBy(jobs.map(j => ({
|
|
749
746
|
id: j.userID,
|
|
750
747
|
displayName: j.userName,
|
|
751
748
|
profilePic: j.userProfilePic
|
|
@@ -754,32 +751,32 @@ class JobList extends Component {
|
|
|
754
751
|
requesters
|
|
755
752
|
});
|
|
756
753
|
});
|
|
757
|
-
_defineProperty(this, "getJobs",
|
|
758
|
-
|
|
754
|
+
_defineProperty(this, "getJobs", async () => {
|
|
755
|
+
const {
|
|
759
756
|
auth
|
|
760
|
-
} =
|
|
757
|
+
} = this.props;
|
|
761
758
|
try {
|
|
762
|
-
|
|
759
|
+
const res = await maintenanceActions.getJobsRecursive(auth.site);
|
|
763
760
|
if (!_.isEmpty(res) && res[0].site === auth.site) {
|
|
764
|
-
|
|
765
|
-
|
|
761
|
+
this.setRequesters(res);
|
|
762
|
+
this.props.jobsLoaded(res);
|
|
766
763
|
}
|
|
767
764
|
} catch (error) {
|
|
768
765
|
console.error("getJobs", error);
|
|
769
766
|
}
|
|
770
|
-
})
|
|
771
|
-
_defineProperty(this, "getAssignees",
|
|
767
|
+
});
|
|
768
|
+
_defineProperty(this, "getAssignees", async () => {
|
|
772
769
|
try {
|
|
773
|
-
|
|
774
|
-
|
|
770
|
+
const res = await maintenanceActions.getAssignees(this.props.auth.site);
|
|
771
|
+
this.setState({
|
|
775
772
|
assignees: res.data.Users
|
|
776
773
|
});
|
|
777
774
|
} catch (error) {
|
|
778
775
|
console.error("getAssignees", error);
|
|
779
776
|
}
|
|
780
|
-
})
|
|
777
|
+
});
|
|
781
778
|
_defineProperty(this, "sortByCol", col => {
|
|
782
|
-
|
|
779
|
+
const {
|
|
783
780
|
sortColumn,
|
|
784
781
|
sortDesc
|
|
785
782
|
} = this.state;
|
|
@@ -794,23 +791,18 @@ class JobList extends Component {
|
|
|
794
791
|
});
|
|
795
792
|
}
|
|
796
793
|
});
|
|
797
|
-
_defineProperty(this, "onRemoveRequest",
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
alert("Something went wrong with the request. Please try again.");
|
|
807
|
-
}
|
|
794
|
+
_defineProperty(this, "onRemoveRequest", async request => {
|
|
795
|
+
if (window.confirm(values.textAreYouSureYouWantToDelete)) {
|
|
796
|
+
this.props.removeJob(request.id);
|
|
797
|
+
try {
|
|
798
|
+
await maintenanceActions.deleteJob(this.props.auth.site, request.id);
|
|
799
|
+
this.getJobs();
|
|
800
|
+
} catch (error) {
|
|
801
|
+
console.log("onRemoveRequest", error);
|
|
802
|
+
alert("Something went wrong with the request. Please try again.");
|
|
808
803
|
}
|
|
809
|
-
}
|
|
810
|
-
|
|
811
|
-
return _ref3.apply(this, arguments);
|
|
812
|
-
};
|
|
813
|
-
}());
|
|
804
|
+
}
|
|
805
|
+
});
|
|
814
806
|
_defineProperty(this, "openFilter", filter => {
|
|
815
807
|
this.setState({
|
|
816
808
|
filterOpen: filter
|
|
@@ -863,15 +855,15 @@ class JobList extends Component {
|
|
|
863
855
|
if (!this.isValidTimeFilter()) {
|
|
864
856
|
return;
|
|
865
857
|
}
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
858
|
+
let startTime = 0;
|
|
859
|
+
let endTime = moment().endOf("d").valueOf();
|
|
860
|
+
let text = "";
|
|
869
861
|
if (this.state.selectedTimeFilter.dayCount > 0) {
|
|
870
862
|
startTime = moment().add(-this.state.selectedTimeFilter.dayCount, "d").startOf("d").valueOf();
|
|
871
863
|
text = this.state.selectedTimeFilter.text;
|
|
872
864
|
} else {
|
|
873
|
-
|
|
874
|
-
|
|
865
|
+
const startDate = moment(this.state.timeFilterStart).startOf("d");
|
|
866
|
+
const endDate = moment(this.state.timeFilterEnd).endOf("d");
|
|
875
867
|
startTime = startDate.valueOf();
|
|
876
868
|
endTime = endDate.valueOf();
|
|
877
869
|
text = "".concat(startDate.format("DD/MM/YYYY"), " to ").concat(endDate.format("DD/MM/YYYY"));
|
|
@@ -942,7 +934,7 @@ class JobList extends Component {
|
|
|
942
934
|
this.closeFilter();
|
|
943
935
|
});
|
|
944
936
|
_defineProperty(this, "onHandleSearchChange", event => {
|
|
945
|
-
|
|
937
|
+
const thisSearchTime = moment().valueOf();
|
|
946
938
|
this.setState({
|
|
947
939
|
search: event.target.value,
|
|
948
940
|
lastSearch: thisSearchTime
|
|
@@ -957,7 +949,7 @@ class JobList extends Component {
|
|
|
957
949
|
}, 500);
|
|
958
950
|
});
|
|
959
951
|
_defineProperty(this, "getSource", () => {
|
|
960
|
-
|
|
952
|
+
let source = this.props.source;
|
|
961
953
|
|
|
962
954
|
// filter by time
|
|
963
955
|
if (this.state.selectedTimeFilterStart && this.state.selectedTimeFilterEnd) {
|
|
@@ -975,7 +967,7 @@ class JobList extends Component {
|
|
|
975
967
|
|
|
976
968
|
// filter by priority
|
|
977
969
|
if (this.state.selectedPriorityFilter) {
|
|
978
|
-
|
|
970
|
+
const defaultPriority = getDefaultPriority().name;
|
|
979
971
|
source = _.filter(source, r => {
|
|
980
972
|
return r.priority === this.state.selectedPriorityFilter || this.state.selectedPriorityFilter === defaultPriority && _.isNil(r.priority);
|
|
981
973
|
});
|
|
@@ -983,12 +975,12 @@ class JobList extends Component {
|
|
|
983
975
|
|
|
984
976
|
// filter by status
|
|
985
977
|
if (this.state.selectedStatusFilter) {
|
|
986
|
-
|
|
978
|
+
const {
|
|
987
979
|
statusTypes
|
|
988
980
|
} = this.props;
|
|
989
|
-
|
|
981
|
+
const defaultStatus = statusTypes.find(s => s.category === STATUS_NOT_ACTIONED);
|
|
990
982
|
source = _.filter(source, r => {
|
|
991
|
-
|
|
983
|
+
const status = statusTypes.find(s => s.text === r.status) || defaultStatus;
|
|
992
984
|
if (this.state.selectedStatusFilter === STATUS_IMCOMPLETE) {
|
|
993
985
|
return status.category !== STATUS_COMPLETED;
|
|
994
986
|
}
|
|
@@ -1044,18 +1036,18 @@ class JobList extends Component {
|
|
|
1044
1036
|
}
|
|
1045
1037
|
});
|
|
1046
1038
|
_defineProperty(this, "getCustomFields", (job, customColumns) => {
|
|
1047
|
-
|
|
1039
|
+
const {
|
|
1048
1040
|
customFields,
|
|
1049
1041
|
type
|
|
1050
1042
|
} = job;
|
|
1051
|
-
|
|
1043
|
+
const customValues = {};
|
|
1052
1044
|
if (customFields && Array.isArray(customFields)) {
|
|
1053
1045
|
customFields.forEach(field => {
|
|
1054
1046
|
// Exclude un-exportable fields
|
|
1055
1047
|
if (["image", "document", "staticTitle", "staticText"].includes(field.type)) return;
|
|
1056
|
-
|
|
1048
|
+
const fieldKey = "".concat(_.camelCase(type), ".").concat(_.camelCase(field.label));
|
|
1057
1049
|
// Build custom columns
|
|
1058
|
-
|
|
1050
|
+
const exists = customColumns.find(c => c.key === fieldKey);
|
|
1059
1051
|
if (!exists) {
|
|
1060
1052
|
customColumns.push({
|
|
1061
1053
|
label: field.label,
|
|
@@ -1069,20 +1061,20 @@ class JobList extends Component {
|
|
|
1069
1061
|
return customValues;
|
|
1070
1062
|
});
|
|
1071
1063
|
_defineProperty(this, "getExportSource", () => {
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1064
|
+
const customColumns = [];
|
|
1065
|
+
const defaultPriority = getDefaultPriority().name;
|
|
1066
|
+
const source = this.getSource().map(r => {
|
|
1067
|
+
const history = r.history || [];
|
|
1068
|
+
const progressEntry = _.find(history, e => {
|
|
1077
1069
|
return e.status !== "Unassigned";
|
|
1078
1070
|
});
|
|
1079
|
-
|
|
1071
|
+
const completedEntry = _.find(history, e => {
|
|
1080
1072
|
return e.status === "Completed";
|
|
1081
1073
|
});
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
|
|
1074
|
+
let progressTime = null;
|
|
1075
|
+
let completedTime = null;
|
|
1076
|
+
let progressDuration = null;
|
|
1077
|
+
let completedDuration = null;
|
|
1086
1078
|
if (progressEntry) {
|
|
1087
1079
|
progressTime = moment.utc(progressEntry.timestamp).format();
|
|
1088
1080
|
progressDuration = moment.utc(progressEntry.timestamp).unix() - moment.utc(r.createdTime).unix();
|
|
@@ -1091,7 +1083,7 @@ class JobList extends Component {
|
|
|
1091
1083
|
completedTime = moment.utc(completedEntry.timestamp).format();
|
|
1092
1084
|
completedDuration = moment.utc(completedEntry.timestamp).unix() - moment.utc(r.createdTime).unix();
|
|
1093
1085
|
}
|
|
1094
|
-
|
|
1086
|
+
let notes = "";
|
|
1095
1087
|
(r.Notes || []).forEach((note, index) => {
|
|
1096
1088
|
if (index > 0) {
|
|
1097
1089
|
notes += "\n\n";
|
|
@@ -1104,8 +1096,8 @@ class JobList extends Component {
|
|
|
1104
1096
|
}
|
|
1105
1097
|
notes += note.Note;
|
|
1106
1098
|
});
|
|
1107
|
-
|
|
1108
|
-
|
|
1099
|
+
const customFieldValues = this.getCustomFields(r, customColumns);
|
|
1100
|
+
const priority = r.priority || defaultPriority;
|
|
1109
1101
|
return _objectSpread$7(_objectSpread$7(_objectSpread$7({}, r), customFieldValues), {}, {
|
|
1110
1102
|
notes,
|
|
1111
1103
|
progressTime,
|
|
@@ -1117,8 +1109,8 @@ class JobList extends Component {
|
|
|
1117
1109
|
});
|
|
1118
1110
|
|
|
1119
1111
|
// Compose revised columns list with custom fields
|
|
1120
|
-
|
|
1121
|
-
|
|
1112
|
+
const index = this.exportColumns.findIndex(c => c.key === "notes");
|
|
1113
|
+
const columns = [...this.exportColumns.slice(0, index), ...customColumns, ...this.exportColumns.slice(index)];
|
|
1122
1114
|
return {
|
|
1123
1115
|
columns,
|
|
1124
1116
|
source
|
|
@@ -1248,7 +1240,7 @@ class JobList extends Component {
|
|
|
1248
1240
|
});
|
|
1249
1241
|
}
|
|
1250
1242
|
if (this.state.filterOpen === "status") {
|
|
1251
|
-
|
|
1243
|
+
const {
|
|
1252
1244
|
statusTypes
|
|
1253
1245
|
} = this.props;
|
|
1254
1246
|
return /*#__PURE__*/jsx(Components$7.Popup, {
|
|
@@ -1294,7 +1286,7 @@ class JobList extends Component {
|
|
|
1294
1286
|
});
|
|
1295
1287
|
}
|
|
1296
1288
|
if (this.state.filterOpen === "user") {
|
|
1297
|
-
|
|
1289
|
+
let userContent = null;
|
|
1298
1290
|
if (this.state.selectedAssignee) {
|
|
1299
1291
|
userContent = /*#__PURE__*/jsx("div", {
|
|
1300
1292
|
children: /*#__PURE__*/jsx(Components$7.UserListing, {
|
|
@@ -1349,9 +1341,9 @@ class JobList extends Component {
|
|
|
1349
1341
|
});
|
|
1350
1342
|
}
|
|
1351
1343
|
if (this.state.filterOpen === "requester") {
|
|
1352
|
-
|
|
1344
|
+
let userContent = null;
|
|
1353
1345
|
if (this.state.selectedRequester) {
|
|
1354
|
-
|
|
1346
|
+
userContent = /*#__PURE__*/jsx("div", {
|
|
1355
1347
|
children: /*#__PURE__*/jsx(Components$7.UserListing, {
|
|
1356
1348
|
user: this.state.selectedRequester,
|
|
1357
1349
|
rightContent: /*#__PURE__*/jsx(Icon, {
|
|
@@ -1365,7 +1357,7 @@ class JobList extends Component {
|
|
|
1365
1357
|
}, this.state.selectedRequester.id)
|
|
1366
1358
|
});
|
|
1367
1359
|
} else {
|
|
1368
|
-
|
|
1360
|
+
userContent = /*#__PURE__*/jsxs("div", {
|
|
1369
1361
|
children: [/*#__PURE__*/jsx(Components$7.GenericInput, {
|
|
1370
1362
|
id: "requesterSearch",
|
|
1371
1363
|
type: "text"
|
|
@@ -1400,22 +1392,22 @@ class JobList extends Component {
|
|
|
1400
1392
|
text: "Select",
|
|
1401
1393
|
isActive: true
|
|
1402
1394
|
}],
|
|
1403
|
-
children:
|
|
1395
|
+
children: userContent
|
|
1404
1396
|
});
|
|
1405
1397
|
}
|
|
1406
1398
|
return null;
|
|
1407
1399
|
}
|
|
1408
1400
|
renderRequests() {
|
|
1409
|
-
|
|
1401
|
+
const {
|
|
1410
1402
|
statusTypes
|
|
1411
1403
|
} = this.props;
|
|
1412
|
-
|
|
1404
|
+
const defaultStatus = statusTypes.find(s => s.category === STATUS_NOT_ACTIONED);
|
|
1413
1405
|
return this.getSource().map((ev, index) => {
|
|
1414
1406
|
if (!ev) {
|
|
1415
1407
|
return null;
|
|
1416
1408
|
}
|
|
1417
|
-
|
|
1418
|
-
|
|
1409
|
+
const status = ev.status && statusTypes.find(s => s.text === ev.status) || defaultStatus;
|
|
1410
|
+
const priority = getJobPriority(ev.priority);
|
|
1419
1411
|
return /*#__PURE__*/jsxs("tr", {
|
|
1420
1412
|
children: [/*#__PURE__*/jsx("td", {
|
|
1421
1413
|
children: ev.jobId
|
|
@@ -1508,7 +1500,7 @@ class JobList extends Component {
|
|
|
1508
1500
|
});
|
|
1509
1501
|
}
|
|
1510
1502
|
renderSort(col) {
|
|
1511
|
-
|
|
1503
|
+
const {
|
|
1512
1504
|
sortColumn,
|
|
1513
1505
|
sortDesc
|
|
1514
1506
|
} = this.state;
|
|
@@ -1525,7 +1517,7 @@ class JobList extends Component {
|
|
|
1525
1517
|
return " table--columnActive";
|
|
1526
1518
|
}
|
|
1527
1519
|
renderEmpty() {
|
|
1528
|
-
|
|
1520
|
+
const title = this.props.strings["".concat(values.featureKey, "_textTitleRequests")] || values.textTitleRequests;
|
|
1529
1521
|
return /*#__PURE__*/jsxs("div", {
|
|
1530
1522
|
style: {
|
|
1531
1523
|
display: "flex",
|
|
@@ -1664,42 +1656,42 @@ class JobList extends Component {
|
|
|
1664
1656
|
});
|
|
1665
1657
|
}
|
|
1666
1658
|
renderFilters() {
|
|
1667
|
-
|
|
1659
|
+
let typeFilter = /*#__PURE__*/jsx(Components$7.Tag, {
|
|
1668
1660
|
className: "marginRight-10",
|
|
1669
1661
|
onClick: () => {
|
|
1670
1662
|
this.openFilter("type");
|
|
1671
1663
|
},
|
|
1672
1664
|
text: values.textJobType
|
|
1673
1665
|
});
|
|
1674
|
-
|
|
1666
|
+
let statusFilter = /*#__PURE__*/jsx(Components$7.Tag, {
|
|
1675
1667
|
className: "marginRight-10",
|
|
1676
1668
|
onClick: () => {
|
|
1677
1669
|
this.openFilter("status");
|
|
1678
1670
|
},
|
|
1679
1671
|
text: "Status"
|
|
1680
1672
|
});
|
|
1681
|
-
|
|
1673
|
+
let priorityFilter = /*#__PURE__*/jsx(Components$7.Tag, {
|
|
1682
1674
|
className: "marginRight-10",
|
|
1683
1675
|
onClick: () => {
|
|
1684
1676
|
this.openFilter("priority");
|
|
1685
1677
|
},
|
|
1686
1678
|
text: "Priority"
|
|
1687
1679
|
});
|
|
1688
|
-
|
|
1680
|
+
let timeFilter = /*#__PURE__*/jsx(Components$7.Tag, {
|
|
1689
1681
|
className: "marginRight-10",
|
|
1690
1682
|
onClick: () => {
|
|
1691
1683
|
this.openFilter("time");
|
|
1692
1684
|
},
|
|
1693
1685
|
text: "Time"
|
|
1694
1686
|
});
|
|
1695
|
-
|
|
1687
|
+
let userFilter = /*#__PURE__*/jsx(Components$7.Tag, {
|
|
1696
1688
|
className: "marginRight-10",
|
|
1697
1689
|
onClick: () => {
|
|
1698
1690
|
this.openFilter("user");
|
|
1699
1691
|
},
|
|
1700
1692
|
text: "Assigned To"
|
|
1701
1693
|
});
|
|
1702
|
-
|
|
1694
|
+
let requesterFilter = /*#__PURE__*/jsx(Components$7.Tag, {
|
|
1703
1695
|
className: "marginRight-10",
|
|
1704
1696
|
onClick: () => {
|
|
1705
1697
|
this.openFilter("requester");
|
|
@@ -1825,7 +1817,7 @@ class JobList extends Component {
|
|
|
1825
1817
|
if (!this.state.exportCsvOpen) {
|
|
1826
1818
|
return null;
|
|
1827
1819
|
}
|
|
1828
|
-
|
|
1820
|
+
const {
|
|
1829
1821
|
columns,
|
|
1830
1822
|
source
|
|
1831
1823
|
} = this.getExportSource();
|
|
@@ -1845,8 +1837,8 @@ class JobList extends Component {
|
|
|
1845
1837
|
});
|
|
1846
1838
|
}
|
|
1847
1839
|
}
|
|
1848
|
-
|
|
1849
|
-
|
|
1840
|
+
const mapStateToProps$7 = state => {
|
|
1841
|
+
const {
|
|
1850
1842
|
auth
|
|
1851
1843
|
} = state;
|
|
1852
1844
|
return {
|
|
@@ -1862,27 +1854,25 @@ var JobList$1 = connect(mapStateToProps$7, {
|
|
|
1862
1854
|
jobStatusesUpdate
|
|
1863
1855
|
})(withRouter(JobList));
|
|
1864
1856
|
|
|
1865
|
-
|
|
1857
|
+
const {
|
|
1866
1858
|
Session: Session$6,
|
|
1867
1859
|
Components: Components$6
|
|
1868
1860
|
} = PlussCore;
|
|
1869
1861
|
class JobTypes extends Component {
|
|
1870
1862
|
constructor(props) {
|
|
1871
|
-
var _this;
|
|
1872
1863
|
super(props);
|
|
1873
|
-
|
|
1874
|
-
_defineProperty(this, "getJobTypes", /*#__PURE__*/_asyncToGenerator(function* () {
|
|
1864
|
+
_defineProperty(this, "getJobTypes", async () => {
|
|
1875
1865
|
try {
|
|
1876
|
-
|
|
1877
|
-
if (res.data != null)
|
|
1866
|
+
const res = await maintenanceActions.getJobTypes(this.props.auth.site);
|
|
1867
|
+
if (res.data != null) this.props.jobTypesLoaded(res.data);
|
|
1878
1868
|
} catch (error) {
|
|
1879
1869
|
console.error("getJobTypes", error);
|
|
1880
1870
|
} finally {
|
|
1881
|
-
|
|
1871
|
+
this.setState({
|
|
1882
1872
|
loading: false
|
|
1883
1873
|
});
|
|
1884
1874
|
}
|
|
1885
|
-
})
|
|
1875
|
+
});
|
|
1886
1876
|
_defineProperty(this, "sortByCol", col => {
|
|
1887
1877
|
if (this.state.sortColumn === col) {
|
|
1888
1878
|
this.setState({
|
|
@@ -1895,28 +1885,23 @@ class JobTypes extends Component {
|
|
|
1895
1885
|
});
|
|
1896
1886
|
}
|
|
1897
1887
|
});
|
|
1898
|
-
_defineProperty(this, "onRemoveJobType",
|
|
1899
|
-
|
|
1900
|
-
|
|
1901
|
-
|
|
1902
|
-
|
|
1903
|
-
|
|
1904
|
-
|
|
1905
|
-
|
|
1906
|
-
|
|
1907
|
-
|
|
1908
|
-
|
|
1909
|
-
_this.props.jobTypesLoaded(newJobTypes);
|
|
1910
|
-
}
|
|
1911
|
-
} catch (error) {
|
|
1912
|
-
console.error("onRemoveJobType", error);
|
|
1913
|
-
alert("Something went wrong with the request. Please try again.");
|
|
1888
|
+
_defineProperty(this, "onRemoveJobType", async ev => {
|
|
1889
|
+
if (!window.confirm("Are you sure you want to delete ".concat(ev.typeName, "?"))) return;
|
|
1890
|
+
try {
|
|
1891
|
+
await maintenanceActions.deleteJobType(this.props.auth.site, ev.id);
|
|
1892
|
+
const index = _.findIndex(this.state.jobList, job => {
|
|
1893
|
+
return job != null && job.id === ev.id;
|
|
1894
|
+
});
|
|
1895
|
+
if (index > -1) {
|
|
1896
|
+
const newJobTypes = [...this.state.jobList];
|
|
1897
|
+
newJobTypes[index].Deleted = true;
|
|
1898
|
+
this.props.jobTypesLoaded(newJobTypes);
|
|
1914
1899
|
}
|
|
1915
|
-
})
|
|
1916
|
-
|
|
1917
|
-
|
|
1918
|
-
}
|
|
1919
|
-
}
|
|
1900
|
+
} catch (error) {
|
|
1901
|
+
console.error("onRemoveJobType", error);
|
|
1902
|
+
alert("Something went wrong with the request. Please try again.");
|
|
1903
|
+
}
|
|
1904
|
+
});
|
|
1920
1905
|
this.state = {
|
|
1921
1906
|
jobList: [],
|
|
1922
1907
|
sortColumn: "name",
|
|
@@ -1940,7 +1925,7 @@ class JobTypes extends Component {
|
|
|
1940
1925
|
});
|
|
1941
1926
|
}
|
|
1942
1927
|
renderList() {
|
|
1943
|
-
|
|
1928
|
+
let source = _.sortBy(this.state.jobList, this.state.sortColumn);
|
|
1944
1929
|
if (this.state.sortDesc) source.reverse();
|
|
1945
1930
|
source = _.filter(source, ev => {
|
|
1946
1931
|
if (!ev) return false;
|
|
@@ -2075,7 +2060,7 @@ class JobTypes extends Component {
|
|
|
2075
2060
|
return this.renderView();
|
|
2076
2061
|
}
|
|
2077
2062
|
renderJobTypes() {
|
|
2078
|
-
|
|
2063
|
+
const {
|
|
2079
2064
|
jobList,
|
|
2080
2065
|
loading
|
|
2081
2066
|
} = this.state;
|
|
@@ -2127,8 +2112,8 @@ class JobTypes extends Component {
|
|
|
2127
2112
|
});
|
|
2128
2113
|
}
|
|
2129
2114
|
}
|
|
2130
|
-
|
|
2131
|
-
|
|
2115
|
+
const mapStateToProps$6 = state => {
|
|
2116
|
+
const {
|
|
2132
2117
|
auth
|
|
2133
2118
|
} = state;
|
|
2134
2119
|
return {
|
|
@@ -2143,7 +2128,7 @@ var JobTypes$1 = connect(mapStateToProps$6, {
|
|
|
2143
2128
|
|
|
2144
2129
|
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; }
|
|
2145
2130
|
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(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; }
|
|
2146
|
-
|
|
2131
|
+
const {
|
|
2147
2132
|
Session: Session$5,
|
|
2148
2133
|
Components: Components$5,
|
|
2149
2134
|
Colours: Colours$3
|
|
@@ -2160,9 +2145,9 @@ class Configuration extends Component {
|
|
|
2160
2145
|
return true;
|
|
2161
2146
|
});
|
|
2162
2147
|
_defineProperty(this, "onMoveStatus", function (index) {
|
|
2163
|
-
|
|
2148
|
+
let up = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
2164
2149
|
if (_this.state.fetchingStatusTypes) return;
|
|
2165
|
-
|
|
2150
|
+
const statusTypes = _.cloneDeep(_this.state.statusTypes);
|
|
2166
2151
|
if (up && index > 0) {
|
|
2167
2152
|
// Moving up
|
|
2168
2153
|
[statusTypes[index - 1], statusTypes[index]] = [statusTypes[index], statusTypes[index - 1]];
|
|
@@ -2178,7 +2163,7 @@ class Configuration extends Component {
|
|
|
2178
2163
|
});
|
|
2179
2164
|
_defineProperty(this, "onEditStatus", index => {
|
|
2180
2165
|
if (this.state.fetchingStatusTypes) return;
|
|
2181
|
-
|
|
2166
|
+
const status = this.state.statusTypes[index];
|
|
2182
2167
|
this.setState({
|
|
2183
2168
|
showWarnings: false,
|
|
2184
2169
|
showStatusPopup: true,
|
|
@@ -2190,14 +2175,14 @@ class Configuration extends Component {
|
|
|
2190
2175
|
});
|
|
2191
2176
|
_defineProperty(this, "onDeleteStatus", index => {
|
|
2192
2177
|
if (this.state.fetchingStatusTypes) return;
|
|
2193
|
-
|
|
2178
|
+
const statusTypes = _.cloneDeep(this.state.statusTypes);
|
|
2194
2179
|
statusTypes.splice(index, 1);
|
|
2195
2180
|
this.setState({
|
|
2196
2181
|
statusTypes
|
|
2197
2182
|
});
|
|
2198
2183
|
});
|
|
2199
2184
|
_defineProperty(this, "onAddStatus", () => {
|
|
2200
|
-
|
|
2185
|
+
const defaultStatus = this.props.statusTypes.find(s => s.category === STATUS_NOT_ACTIONED);
|
|
2201
2186
|
this.setState({
|
|
2202
2187
|
showWarnings: false,
|
|
2203
2188
|
showStatusPopup: true,
|
|
@@ -2208,13 +2193,13 @@ class Configuration extends Component {
|
|
|
2208
2193
|
});
|
|
2209
2194
|
});
|
|
2210
2195
|
_defineProperty(this, "onSaveStatus", () => {
|
|
2211
|
-
|
|
2196
|
+
const {
|
|
2212
2197
|
selectedStatusIndex,
|
|
2213
2198
|
statusLabel,
|
|
2214
2199
|
statusCategory,
|
|
2215
2200
|
statusColour
|
|
2216
2201
|
} = this.state;
|
|
2217
|
-
|
|
2202
|
+
const statusTypes = _.cloneDeep(this.state.statusTypes);
|
|
2218
2203
|
if (selectedStatusIndex < 0) {
|
|
2219
2204
|
statusTypes.push({
|
|
2220
2205
|
text: statusLabel,
|
|
@@ -2223,7 +2208,7 @@ class Configuration extends Component {
|
|
|
2223
2208
|
category: statusCategory
|
|
2224
2209
|
});
|
|
2225
2210
|
} else {
|
|
2226
|
-
|
|
2211
|
+
const status = statusTypes[selectedStatusIndex];
|
|
2227
2212
|
status.text = statusLabel;
|
|
2228
2213
|
status.color = statusColour;
|
|
2229
2214
|
status.category = statusCategory;
|
|
@@ -2255,30 +2240,30 @@ class Configuration extends Component {
|
|
|
2255
2240
|
this.setState({
|
|
2256
2241
|
success: false,
|
|
2257
2242
|
submitting: true
|
|
2258
|
-
},
|
|
2243
|
+
}, async () => {
|
|
2259
2244
|
try {
|
|
2260
|
-
|
|
2245
|
+
const {
|
|
2261
2246
|
statusTypes,
|
|
2262
2247
|
hideSeen
|
|
2263
|
-
} =
|
|
2264
|
-
|
|
2265
|
-
|
|
2266
|
-
|
|
2267
|
-
|
|
2268
|
-
|
|
2248
|
+
} = this.state;
|
|
2249
|
+
await stringActions.setString(this.props.auth.site, values.stringConfigJobStatus, statusTypes);
|
|
2250
|
+
await stringActions.setString(this.props.auth.site, values.stringConfigHideSeen, hideSeen);
|
|
2251
|
+
this.props.jobStatusesLoaded(statusTypes);
|
|
2252
|
+
this.props.jobHideSeenLoaded(hideSeen);
|
|
2253
|
+
this.setState({
|
|
2269
2254
|
success: true
|
|
2270
2255
|
});
|
|
2271
2256
|
} catch (error) {
|
|
2272
2257
|
console.log("onSaveConfig - error", error);
|
|
2273
|
-
|
|
2258
|
+
this.setState({
|
|
2274
2259
|
success: false
|
|
2275
2260
|
});
|
|
2276
2261
|
} finally {
|
|
2277
|
-
|
|
2262
|
+
this.setState({
|
|
2278
2263
|
submitting: false
|
|
2279
2264
|
});
|
|
2280
2265
|
}
|
|
2281
|
-
})
|
|
2266
|
+
});
|
|
2282
2267
|
});
|
|
2283
2268
|
this.state = {
|
|
2284
2269
|
success: false,
|
|
@@ -2312,15 +2297,15 @@ class Configuration extends Component {
|
|
|
2312
2297
|
}
|
|
2313
2298
|
}
|
|
2314
2299
|
validateForm() {
|
|
2315
|
-
|
|
2300
|
+
const {
|
|
2316
2301
|
submitting,
|
|
2317
2302
|
statusTypes
|
|
2318
2303
|
} = this.state;
|
|
2319
2304
|
if (submitting) return false;
|
|
2320
2305
|
|
|
2321
2306
|
// Validate statuses
|
|
2322
|
-
|
|
2323
|
-
|
|
2307
|
+
const statusesValid = statusTypes.map(status => {
|
|
2308
|
+
const {
|
|
2324
2309
|
text,
|
|
2325
2310
|
category,
|
|
2326
2311
|
color
|
|
@@ -2331,7 +2316,7 @@ class Configuration extends Component {
|
|
|
2331
2316
|
return true;
|
|
2332
2317
|
}
|
|
2333
2318
|
renderStatuses() {
|
|
2334
|
-
|
|
2319
|
+
const {
|
|
2335
2320
|
statusTypes
|
|
2336
2321
|
} = this.state;
|
|
2337
2322
|
return /*#__PURE__*/jsxs("div", {
|
|
@@ -2443,7 +2428,7 @@ class Configuration extends Component {
|
|
|
2443
2428
|
});
|
|
2444
2429
|
}
|
|
2445
2430
|
renderNewStatusPopup() {
|
|
2446
|
-
|
|
2431
|
+
const {
|
|
2447
2432
|
submitting,
|
|
2448
2433
|
showStatusPopup,
|
|
2449
2434
|
showWarnings,
|
|
@@ -2453,7 +2438,7 @@ class Configuration extends Component {
|
|
|
2453
2438
|
statusColour
|
|
2454
2439
|
} = this.state;
|
|
2455
2440
|
if (!showStatusPopup) return null;
|
|
2456
|
-
|
|
2441
|
+
const canSave = !submitting && this.isStatusValid(statusLabel, statusCategory, statusColour);
|
|
2457
2442
|
return /*#__PURE__*/jsxs(Components$5.Popup, {
|
|
2458
2443
|
maxWidth: 800,
|
|
2459
2444
|
minWidth: 450,
|
|
@@ -2562,7 +2547,7 @@ class Configuration extends Component {
|
|
|
2562
2547
|
});
|
|
2563
2548
|
}
|
|
2564
2549
|
}
|
|
2565
|
-
|
|
2550
|
+
const styles$6 = {
|
|
2566
2551
|
statusCategoryHeading: {
|
|
2567
2552
|
marginLeft: 130,
|
|
2568
2553
|
width: 160,
|
|
@@ -2596,8 +2581,8 @@ var styles$6 = {
|
|
|
2596
2581
|
marginLeft: 15
|
|
2597
2582
|
}
|
|
2598
2583
|
};
|
|
2599
|
-
|
|
2600
|
-
|
|
2584
|
+
const mapStateToProps$5 = state => {
|
|
2585
|
+
const {
|
|
2601
2586
|
auth
|
|
2602
2587
|
} = state;
|
|
2603
2588
|
return {
|
|
@@ -2613,27 +2598,25 @@ var Configuration$1 = connect(mapStateToProps$5, {
|
|
|
2613
2598
|
jobHideSeenLoaded
|
|
2614
2599
|
})(withRouter(Configuration));
|
|
2615
2600
|
|
|
2616
|
-
|
|
2601
|
+
const {
|
|
2617
2602
|
Components: Components$4,
|
|
2618
2603
|
Session: Session$4,
|
|
2619
2604
|
Urls
|
|
2620
2605
|
} = PlussCore;
|
|
2621
2606
|
class RequestsHub extends Component {
|
|
2622
2607
|
constructor(props) {
|
|
2623
|
-
var _this;
|
|
2624
2608
|
super(props);
|
|
2625
|
-
_this = this;
|
|
2626
2609
|
_defineProperty(this, "setData", () => {
|
|
2627
|
-
|
|
2610
|
+
const allList = [];
|
|
2628
2611
|
this.state.allList.forEach(ev => {
|
|
2629
2612
|
if (ev != null && !ev.Deleted) allList.push(ev);
|
|
2630
2613
|
});
|
|
2631
|
-
|
|
2614
|
+
const upcoming = _.filter(allList, ev => {
|
|
2632
2615
|
if (!ev) return false;
|
|
2633
2616
|
if (ev.status && ev.status === "Completed") return false;
|
|
2634
2617
|
return true;
|
|
2635
2618
|
});
|
|
2636
|
-
|
|
2619
|
+
const completed = _.filter(allList, ev => {
|
|
2637
2620
|
if (!ev) return false;
|
|
2638
2621
|
if (ev.status && ev.status === "Completed") return true;
|
|
2639
2622
|
return false;
|
|
@@ -2647,30 +2630,30 @@ class RequestsHub extends Component {
|
|
|
2647
2630
|
});
|
|
2648
2631
|
});
|
|
2649
2632
|
_defineProperty(this, "getData", () => {
|
|
2650
|
-
|
|
2633
|
+
const {
|
|
2651
2634
|
auth
|
|
2652
2635
|
} = this.props;
|
|
2653
2636
|
this.setState({
|
|
2654
2637
|
loadingAll: true
|
|
2655
|
-
},
|
|
2638
|
+
}, async () => {
|
|
2656
2639
|
try {
|
|
2657
|
-
|
|
2658
|
-
|
|
2640
|
+
const res = await maintenanceActions.getJobsRecursive(auth.site);
|
|
2641
|
+
this.setState({
|
|
2659
2642
|
loadingAll: false
|
|
2660
2643
|
});
|
|
2661
2644
|
if (!_.isEmpty(res) && res[0].site === auth.site) {
|
|
2662
|
-
|
|
2645
|
+
this.props.jobsLoaded(res);
|
|
2663
2646
|
}
|
|
2664
2647
|
} catch (error) {
|
|
2665
2648
|
console.error("getData", error);
|
|
2666
|
-
|
|
2649
|
+
this.setState({
|
|
2667
2650
|
loadingAll: false
|
|
2668
2651
|
});
|
|
2669
2652
|
}
|
|
2670
|
-
})
|
|
2653
|
+
});
|
|
2671
2654
|
});
|
|
2672
2655
|
_defineProperty(this, "onAddNew", () => {
|
|
2673
|
-
|
|
2656
|
+
const {
|
|
2674
2657
|
auth
|
|
2675
2658
|
} = this.props;
|
|
2676
2659
|
if (Session$4.validateAccess(auth.site, values.permissionMaintenanceTracking, auth)) {
|
|
@@ -2678,7 +2661,7 @@ class RequestsHub extends Component {
|
|
|
2678
2661
|
}
|
|
2679
2662
|
});
|
|
2680
2663
|
_defineProperty(this, "onAddRequestType", () => {
|
|
2681
|
-
|
|
2664
|
+
const {
|
|
2682
2665
|
auth
|
|
2683
2666
|
} = this.props;
|
|
2684
2667
|
if (Session$4.validateAccess(auth.site, values.permissionMaintenanceTypes, auth)) {
|
|
@@ -2686,7 +2669,7 @@ class RequestsHub extends Component {
|
|
|
2686
2669
|
}
|
|
2687
2670
|
});
|
|
2688
2671
|
_defineProperty(this, "canAddNew", isClass => {
|
|
2689
|
-
|
|
2672
|
+
const {
|
|
2690
2673
|
auth
|
|
2691
2674
|
} = this.props;
|
|
2692
2675
|
if (Session$4.validateAccess(auth.site, values.permissionMaintenanceTracking, auth)) return isClass ? "" : true;
|
|
@@ -2730,7 +2713,7 @@ class RequestsHub extends Component {
|
|
|
2730
2713
|
}, this.setData);
|
|
2731
2714
|
}
|
|
2732
2715
|
renderLeftBar() {
|
|
2733
|
-
|
|
2716
|
+
const sectionItems = [];
|
|
2734
2717
|
if (this.canAddNew()) {
|
|
2735
2718
|
sectionItems.push({
|
|
2736
2719
|
type: "newButton",
|
|
@@ -2778,7 +2761,7 @@ class RequestsHub extends Component {
|
|
|
2778
2761
|
}
|
|
2779
2762
|
});
|
|
2780
2763
|
}
|
|
2781
|
-
|
|
2764
|
+
const helpGuide = {
|
|
2782
2765
|
text: "Help with ".concat(values.textTitleRequests),
|
|
2783
2766
|
url: Urls.HelpGuide.Maintenance
|
|
2784
2767
|
} ;
|
|
@@ -2815,7 +2798,7 @@ class RequestsHub extends Component {
|
|
|
2815
2798
|
});
|
|
2816
2799
|
}
|
|
2817
2800
|
}
|
|
2818
|
-
|
|
2801
|
+
const styles$5 = {
|
|
2819
2802
|
sideBarTitleSection: {
|
|
2820
2803
|
lineHeight: "40px",
|
|
2821
2804
|
marginTop: 30,
|
|
@@ -2838,8 +2821,8 @@ var styles$5 = {
|
|
|
2838
2821
|
color: FeatureConfig.env.colourBrandingOff
|
|
2839
2822
|
}
|
|
2840
2823
|
};
|
|
2841
|
-
|
|
2842
|
-
|
|
2824
|
+
const mapStateToProps$4 = state => {
|
|
2825
|
+
const {
|
|
2843
2826
|
auth
|
|
2844
2827
|
} = state;
|
|
2845
2828
|
return {
|
|
@@ -2854,48 +2837,46 @@ var RequestsHub$1 = connect(mapStateToProps$4, {
|
|
|
2854
2837
|
|
|
2855
2838
|
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; }
|
|
2856
2839
|
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(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; }
|
|
2857
|
-
|
|
2840
|
+
const {
|
|
2858
2841
|
Apis: Apis$1,
|
|
2859
2842
|
Helper: Helper$3,
|
|
2860
2843
|
Session: Session$3,
|
|
2861
2844
|
Colours: Colours$2,
|
|
2862
2845
|
Components: Components$3
|
|
2863
2846
|
} = PlussCore;
|
|
2864
|
-
|
|
2847
|
+
const IMAGE_SIZE_NOTE = 72;
|
|
2865
2848
|
class Job extends Component {
|
|
2866
2849
|
constructor(props) {
|
|
2867
|
-
var _this;
|
|
2868
2850
|
super(props);
|
|
2869
|
-
|
|
2870
|
-
_defineProperty(this, "getJob", /*#__PURE__*/_asyncToGenerator(function* () {
|
|
2851
|
+
_defineProperty(this, "getJob", async () => {
|
|
2871
2852
|
try {
|
|
2872
|
-
|
|
2873
|
-
|
|
2853
|
+
const res = await maintenanceActions.getJob(this.props.auth.site, this.state.jobId);
|
|
2854
|
+
this.setState({
|
|
2874
2855
|
updating: false
|
|
2875
2856
|
});
|
|
2876
2857
|
res.data.location = res.data.site;
|
|
2877
|
-
|
|
2858
|
+
this.setJob(res.data);
|
|
2878
2859
|
} catch (error) {
|
|
2879
2860
|
console.error("getJob", error);
|
|
2880
2861
|
}
|
|
2881
|
-
})
|
|
2882
|
-
_defineProperty(this, "getAssignees",
|
|
2862
|
+
});
|
|
2863
|
+
_defineProperty(this, "getAssignees", async () => {
|
|
2883
2864
|
try {
|
|
2884
|
-
|
|
2885
|
-
|
|
2865
|
+
const res = await maintenanceActions.getAssignees(this.props.auth.site);
|
|
2866
|
+
this.setState({
|
|
2886
2867
|
assignees: res.data.Users
|
|
2887
2868
|
});
|
|
2888
2869
|
} catch (error) {
|
|
2889
2870
|
console.error("getAssignees", error);
|
|
2890
2871
|
}
|
|
2891
|
-
})
|
|
2892
|
-
_defineProperty(this, "getExternalSync",
|
|
2872
|
+
});
|
|
2873
|
+
_defineProperty(this, "getExternalSync", async () => {
|
|
2893
2874
|
try {
|
|
2894
|
-
|
|
2875
|
+
this.setState({
|
|
2895
2876
|
loadingExternalSync: true
|
|
2896
2877
|
});
|
|
2897
|
-
|
|
2898
|
-
|
|
2878
|
+
const res = await maintenanceActions.getExternalSync(this.state.jobId);
|
|
2879
|
+
this.setState({
|
|
2899
2880
|
externalSync: res.data,
|
|
2900
2881
|
loadingExternalSync: false
|
|
2901
2882
|
});
|
|
@@ -2904,44 +2885,44 @@ class Job extends Component {
|
|
|
2904
2885
|
if (error && error.response && error.response.status !== 404) {
|
|
2905
2886
|
console.error("getExternalSync", error);
|
|
2906
2887
|
}
|
|
2907
|
-
|
|
2888
|
+
this.setState({
|
|
2908
2889
|
loadingExternalSync: false
|
|
2909
2890
|
});
|
|
2910
2891
|
}
|
|
2911
|
-
})
|
|
2912
|
-
_defineProperty(this, "onRetrySync",
|
|
2913
|
-
|
|
2892
|
+
});
|
|
2893
|
+
_defineProperty(this, "onRetrySync", async () => {
|
|
2894
|
+
const {
|
|
2914
2895
|
job
|
|
2915
|
-
} =
|
|
2916
|
-
if (!job ||
|
|
2917
|
-
|
|
2896
|
+
} = this.state;
|
|
2897
|
+
if (!job || this.state.retryingSync) return;
|
|
2898
|
+
this.setState({
|
|
2918
2899
|
retryingSync: true,
|
|
2919
2900
|
retrySyncError: null
|
|
2920
2901
|
});
|
|
2921
2902
|
try {
|
|
2922
|
-
|
|
2903
|
+
await maintenanceActions.retrySync(job.id);
|
|
2923
2904
|
// Refresh job data to get updated history
|
|
2924
|
-
|
|
2925
|
-
|
|
2905
|
+
await this.getJob();
|
|
2906
|
+
this.setState({
|
|
2926
2907
|
retryingSync: false,
|
|
2927
2908
|
retrySyncInitiated: true
|
|
2928
2909
|
});
|
|
2929
2910
|
} catch (error) {
|
|
2930
2911
|
console.error("onRetrySync", error);
|
|
2931
|
-
|
|
2932
|
-
|
|
2912
|
+
const errorMessage = error && error.response && error.response.data && error.response.data.error || "Failed to retry sync. Please try again.";
|
|
2913
|
+
this.setState({
|
|
2933
2914
|
retryingSync: false,
|
|
2934
2915
|
retrySyncError: errorMessage
|
|
2935
2916
|
});
|
|
2936
2917
|
}
|
|
2937
|
-
})
|
|
2918
|
+
});
|
|
2938
2919
|
_defineProperty(this, "getStatusType", status => {
|
|
2939
|
-
|
|
2920
|
+
const {
|
|
2940
2921
|
statusTypes
|
|
2941
2922
|
} = this.props;
|
|
2942
|
-
|
|
2923
|
+
let statusType = statusTypes.find(s => s.text === status);
|
|
2943
2924
|
if (!statusType) {
|
|
2944
|
-
|
|
2925
|
+
const defaultStatus = statusTypes.find(s => s.category === STATUS_NOT_ACTIONED);
|
|
2945
2926
|
statusType = _objectSpread$5(_objectSpread$5({}, defaultStatus), {}, {
|
|
2946
2927
|
text: status
|
|
2947
2928
|
});
|
|
@@ -2963,7 +2944,7 @@ class Job extends Component {
|
|
|
2963
2944
|
isEmpty: true
|
|
2964
2945
|
}];
|
|
2965
2946
|
}
|
|
2966
|
-
|
|
2947
|
+
let needToMarkSeen = false;
|
|
2967
2948
|
if (!job.seen) {
|
|
2968
2949
|
job.seen = true;
|
|
2969
2950
|
needToMarkSeen = true;
|
|
@@ -2977,7 +2958,7 @@ class Job extends Component {
|
|
|
2977
2958
|
});
|
|
2978
2959
|
_defineProperty(this, "editJob", () => {});
|
|
2979
2960
|
_defineProperty(this, "isReadyToSaveNote", () => {
|
|
2980
|
-
|
|
2961
|
+
const {
|
|
2981
2962
|
noteAttachments,
|
|
2982
2963
|
noteInput,
|
|
2983
2964
|
noteImages
|
|
@@ -2992,7 +2973,7 @@ class Job extends Component {
|
|
|
2992
2973
|
});
|
|
2993
2974
|
});
|
|
2994
2975
|
_defineProperty(this, "onCloseAddNote", () => {
|
|
2995
|
-
|
|
2976
|
+
const newState = {
|
|
2996
2977
|
addNoteOpen: false,
|
|
2997
2978
|
editingNote: null
|
|
2998
2979
|
};
|
|
@@ -3015,10 +2996,10 @@ class Job extends Component {
|
|
|
3015
2996
|
}
|
|
3016
2997
|
});
|
|
3017
2998
|
_defineProperty(this, "onHandlePDFFileChange", event => {
|
|
3018
|
-
|
|
2999
|
+
const file = event.target.files[0];
|
|
3019
3000
|
if (!file || this.state.uploadingNoteAttachment) return;
|
|
3020
|
-
|
|
3021
|
-
|
|
3001
|
+
const noteAttachments = [...this.state.noteAttachments];
|
|
3002
|
+
const newAttachment = {
|
|
3022
3003
|
Uploading: true,
|
|
3023
3004
|
Title: file.name
|
|
3024
3005
|
};
|
|
@@ -3042,9 +3023,9 @@ class Job extends Component {
|
|
|
3042
3023
|
event.target.value = "";
|
|
3043
3024
|
});
|
|
3044
3025
|
_defineProperty(this, "onRemoveAttachment", a => {
|
|
3045
|
-
|
|
3026
|
+
const index = this.state.noteAttachments.indexOf(a);
|
|
3046
3027
|
if (index > -1) {
|
|
3047
|
-
|
|
3028
|
+
const newAttachments = [...this.state.noteAttachments];
|
|
3048
3029
|
newAttachments.splice(index, 1);
|
|
3049
3030
|
this.setState({
|
|
3050
3031
|
noteAttachments: newAttachments
|
|
@@ -3066,54 +3047,49 @@ class Job extends Component {
|
|
|
3066
3047
|
selectedAssignee: user
|
|
3067
3048
|
});
|
|
3068
3049
|
});
|
|
3069
|
-
_defineProperty(this, "onConfirmAssignee",
|
|
3070
|
-
|
|
3050
|
+
_defineProperty(this, "onConfirmAssignee", async () => {
|
|
3051
|
+
this.setState({
|
|
3071
3052
|
confirmingAssignee: true
|
|
3072
3053
|
});
|
|
3073
3054
|
try {
|
|
3074
|
-
if (
|
|
3075
|
-
|
|
3055
|
+
if (this.state.selectedAssignee) {
|
|
3056
|
+
await this.onAssignUser(this.state.selectedAssignee.id);
|
|
3076
3057
|
}
|
|
3077
|
-
|
|
3058
|
+
this.onCloseSelectAssignee();
|
|
3078
3059
|
} catch (error) {
|
|
3079
3060
|
console.error("onConfirmAssignee", error);
|
|
3080
3061
|
}
|
|
3081
|
-
|
|
3062
|
+
this.setState({
|
|
3082
3063
|
confirmingAssignee: false
|
|
3083
3064
|
});
|
|
3084
|
-
})
|
|
3065
|
+
});
|
|
3085
3066
|
// Method to handle user assignment
|
|
3086
|
-
_defineProperty(this, "onAssignUser",
|
|
3087
|
-
|
|
3088
|
-
|
|
3089
|
-
|
|
3090
|
-
|
|
3091
|
-
|
|
3092
|
-
|
|
3093
|
-
|
|
3094
|
-
|
|
3095
|
-
|
|
3096
|
-
return _ref6.apply(this, arguments);
|
|
3097
|
-
};
|
|
3098
|
-
}());
|
|
3099
|
-
_defineProperty(this, "onConfirmAddNote", /*#__PURE__*/_asyncToGenerator(function* () {
|
|
3100
|
-
if (!_this.isReadyToSaveNote()) return;
|
|
3067
|
+
_defineProperty(this, "onAssignUser", async userId => {
|
|
3068
|
+
try {
|
|
3069
|
+
const res = await maintenanceActions.assignJob(this.state.jobId, userId);
|
|
3070
|
+
this.getJob();
|
|
3071
|
+
} catch (err) {
|
|
3072
|
+
console.error("onAssignUser", err);
|
|
3073
|
+
}
|
|
3074
|
+
});
|
|
3075
|
+
_defineProperty(this, "onConfirmAddNote", async () => {
|
|
3076
|
+
if (!this.isReadyToSaveNote()) return;
|
|
3101
3077
|
try {
|
|
3102
|
-
|
|
3078
|
+
this.setState({
|
|
3103
3079
|
submittingNote: true
|
|
3104
3080
|
});
|
|
3105
|
-
|
|
3081
|
+
const res = await (this.state.editingNote ? maintenanceActions.editNote(this.state.jobId, this.state.editingNote, this.state.noteInput, this.state.noteAttachments.map(a => {
|
|
3106
3082
|
return {
|
|
3107
3083
|
Title: a.Title,
|
|
3108
3084
|
Source: a.Source
|
|
3109
3085
|
};
|
|
3110
|
-
}),
|
|
3086
|
+
}), this.state.noteImages) : maintenanceActions.addNote(this.state.jobId, this.state.noteInput, this.state.noteAttachments.map(a => {
|
|
3111
3087
|
return {
|
|
3112
3088
|
Title: a.Title,
|
|
3113
3089
|
Source: a.Source
|
|
3114
3090
|
};
|
|
3115
|
-
}),
|
|
3116
|
-
|
|
3091
|
+
}), this.state.noteImages));
|
|
3092
|
+
this.setState({
|
|
3117
3093
|
job: res.data.job,
|
|
3118
3094
|
submittingNote: false,
|
|
3119
3095
|
addNoteOpen: false,
|
|
@@ -3122,12 +3098,12 @@ class Job extends Component {
|
|
|
3122
3098
|
noteImages: [],
|
|
3123
3099
|
editingNote: null
|
|
3124
3100
|
}, () => {
|
|
3125
|
-
|
|
3101
|
+
this.props.jobsLoaded([this.state.job]);
|
|
3126
3102
|
});
|
|
3127
3103
|
} catch (err) {
|
|
3128
3104
|
console.error("onConfirmAddNote", err);
|
|
3129
3105
|
}
|
|
3130
|
-
})
|
|
3106
|
+
});
|
|
3131
3107
|
_defineProperty(this, "onDeleteNote", n => {
|
|
3132
3108
|
if (!window.confirm(values.textAreYouSureYouWantToDeleteNote)) {
|
|
3133
3109
|
this.setState({
|
|
@@ -3136,8 +3112,8 @@ class Job extends Component {
|
|
|
3136
3112
|
return;
|
|
3137
3113
|
}
|
|
3138
3114
|
maintenanceActions.deleteNote(this.state.jobId, n.Id);
|
|
3139
|
-
|
|
3140
|
-
|
|
3115
|
+
const newNotes = _.filter(this.state.job.Notes, note => note.Id !== n.Id);
|
|
3116
|
+
const newJob = _objectSpread$5({}, this.state.job);
|
|
3141
3117
|
newJob.Notes = newNotes;
|
|
3142
3118
|
this.setState({
|
|
3143
3119
|
job: newJob,
|
|
@@ -3155,10 +3131,10 @@ class Job extends Component {
|
|
|
3155
3131
|
}, this.checkSetImage);
|
|
3156
3132
|
});
|
|
3157
3133
|
_defineProperty(this, "markSeen", () => {
|
|
3158
|
-
|
|
3134
|
+
const {
|
|
3159
3135
|
job
|
|
3160
3136
|
} = this.state;
|
|
3161
|
-
|
|
3137
|
+
const {
|
|
3162
3138
|
auth
|
|
3163
3139
|
} = this.props;
|
|
3164
3140
|
// Must have maintenance permission and not the requester
|
|
@@ -3166,22 +3142,22 @@ class Job extends Component {
|
|
|
3166
3142
|
if (auth.user.Id === job.userID) return;
|
|
3167
3143
|
this.setState({
|
|
3168
3144
|
updating: true
|
|
3169
|
-
},
|
|
3145
|
+
}, async () => {
|
|
3170
3146
|
try {
|
|
3171
|
-
|
|
3147
|
+
const update = {
|
|
3172
3148
|
id: job.id,
|
|
3173
3149
|
seen: true,
|
|
3174
3150
|
status: job.status || "Unassigned"
|
|
3175
3151
|
};
|
|
3176
|
-
|
|
3152
|
+
await maintenanceActions.editJob(update, auth.site);
|
|
3177
3153
|
} catch (error) {
|
|
3178
|
-
|
|
3154
|
+
this.setState({
|
|
3179
3155
|
updating: false
|
|
3180
3156
|
});
|
|
3181
3157
|
console.log("markSeen error", error);
|
|
3182
3158
|
alert("Something went wrong with the request. Please try again.");
|
|
3183
3159
|
}
|
|
3184
|
-
})
|
|
3160
|
+
});
|
|
3185
3161
|
});
|
|
3186
3162
|
_defineProperty(this, "getComments", () => {
|
|
3187
3163
|
reactionActions.getComments(this.state.jobId, values.commentKey, 0).then(res => {
|
|
@@ -3190,25 +3166,25 @@ class Job extends Component {
|
|
|
3190
3166
|
});
|
|
3191
3167
|
});
|
|
3192
3168
|
});
|
|
3193
|
-
_defineProperty(this, "onAddComment",
|
|
3194
|
-
|
|
3169
|
+
_defineProperty(this, "onAddComment", async () => {
|
|
3170
|
+
const {
|
|
3195
3171
|
commentInput,
|
|
3196
3172
|
jobId,
|
|
3197
3173
|
job,
|
|
3198
3174
|
comments
|
|
3199
|
-
} =
|
|
3175
|
+
} = this.state;
|
|
3200
3176
|
try {
|
|
3201
|
-
|
|
3177
|
+
this.setState({
|
|
3202
3178
|
commentInput: ""
|
|
3203
3179
|
});
|
|
3204
|
-
|
|
3205
|
-
|
|
3180
|
+
const res = await reactionActions.addComment(jobId, values.commentKey, job.title, job.site, commentInput);
|
|
3181
|
+
this.setState({
|
|
3206
3182
|
comments: [...comments, res.data]
|
|
3207
3183
|
});
|
|
3208
3184
|
} catch (error) {
|
|
3209
3185
|
console.error("onAddComment", error);
|
|
3210
3186
|
}
|
|
3211
|
-
})
|
|
3187
|
+
});
|
|
3212
3188
|
_defineProperty(this, "onHandleChange", event => {
|
|
3213
3189
|
var stateChange = {};
|
|
3214
3190
|
stateChange[event.target.getAttribute("id")] = event.target.value;
|
|
@@ -3219,61 +3195,51 @@ class Job extends Component {
|
|
|
3219
3195
|
priorityChangerOpen: !this.state.priorityChangerOpen
|
|
3220
3196
|
});
|
|
3221
3197
|
});
|
|
3222
|
-
_defineProperty(this, "onSelectPriority",
|
|
3223
|
-
|
|
3224
|
-
|
|
3225
|
-
|
|
3226
|
-
|
|
3227
|
-
|
|
3228
|
-
priorityChangerOpen: false
|
|
3229
|
-
});
|
|
3230
|
-
try {
|
|
3231
|
-
var res = yield maintenanceActions.editJobPriority(_this.state.job.id, priority);
|
|
3232
|
-
var {
|
|
3233
|
-
job
|
|
3234
|
-
} = res.data;
|
|
3235
|
-
_this.props.jobsLoaded([job]);
|
|
3236
|
-
_this.setState({
|
|
3237
|
-
job
|
|
3238
|
-
});
|
|
3239
|
-
} catch (error) {
|
|
3240
|
-
console.error("onSelectPriority", error);
|
|
3241
|
-
}
|
|
3198
|
+
_defineProperty(this, "onSelectPriority", async priority => {
|
|
3199
|
+
this.setState({
|
|
3200
|
+
job: _objectSpread$5(_objectSpread$5({}, this.state.job), {}, {
|
|
3201
|
+
priority
|
|
3202
|
+
}),
|
|
3203
|
+
priorityChangerOpen: false
|
|
3242
3204
|
});
|
|
3243
|
-
|
|
3244
|
-
|
|
3245
|
-
|
|
3246
|
-
|
|
3205
|
+
try {
|
|
3206
|
+
const res = await maintenanceActions.editJobPriority(this.state.job.id, priority);
|
|
3207
|
+
const {
|
|
3208
|
+
job
|
|
3209
|
+
} = res.data;
|
|
3210
|
+
this.props.jobsLoaded([job]);
|
|
3211
|
+
this.setState({
|
|
3212
|
+
job
|
|
3213
|
+
});
|
|
3214
|
+
} catch (error) {
|
|
3215
|
+
console.error("onSelectPriority", error);
|
|
3216
|
+
}
|
|
3217
|
+
});
|
|
3247
3218
|
_defineProperty(this, "onToggleStatusChanger", () => {
|
|
3248
3219
|
this.setState({
|
|
3249
3220
|
statusChangerOpen: !this.state.statusChangerOpen
|
|
3250
3221
|
});
|
|
3251
3222
|
});
|
|
3252
|
-
_defineProperty(this, "onSelectStatus",
|
|
3253
|
-
|
|
3254
|
-
|
|
3255
|
-
|
|
3256
|
-
|
|
3257
|
-
|
|
3258
|
-
statusChangerOpen: false
|
|
3259
|
-
});
|
|
3260
|
-
try {
|
|
3261
|
-
var res = yield maintenanceActions.editJobStatus(_this.state.job.id, status);
|
|
3262
|
-
var {
|
|
3263
|
-
job
|
|
3264
|
-
} = res.data;
|
|
3265
|
-
_this.props.jobsLoaded([job]);
|
|
3266
|
-
_this.setState({
|
|
3267
|
-
job
|
|
3268
|
-
});
|
|
3269
|
-
} catch (error) {
|
|
3270
|
-
console.error("onSelectStatus", error);
|
|
3271
|
-
}
|
|
3223
|
+
_defineProperty(this, "onSelectStatus", async status => {
|
|
3224
|
+
this.setState({
|
|
3225
|
+
job: _objectSpread$5(_objectSpread$5({}, this.state.job), {}, {
|
|
3226
|
+
status: status
|
|
3227
|
+
}),
|
|
3228
|
+
statusChangerOpen: false
|
|
3272
3229
|
});
|
|
3273
|
-
|
|
3274
|
-
|
|
3275
|
-
|
|
3276
|
-
|
|
3230
|
+
try {
|
|
3231
|
+
const res = await maintenanceActions.editJobStatus(this.state.job.id, status);
|
|
3232
|
+
const {
|
|
3233
|
+
job
|
|
3234
|
+
} = res.data;
|
|
3235
|
+
this.props.jobsLoaded([job]);
|
|
3236
|
+
this.setState({
|
|
3237
|
+
job
|
|
3238
|
+
});
|
|
3239
|
+
} catch (error) {
|
|
3240
|
+
console.error("onSelectStatus", error);
|
|
3241
|
+
}
|
|
3242
|
+
});
|
|
3277
3243
|
this.state = {
|
|
3278
3244
|
jobId: Helper$3.safeReadParams(props, "jobId") ? props.match.params.jobId : null,
|
|
3279
3245
|
job: null,
|
|
@@ -3335,15 +3301,15 @@ class Job extends Component {
|
|
|
3335
3301
|
});
|
|
3336
3302
|
}
|
|
3337
3303
|
renderPriorityLabel() {
|
|
3338
|
-
|
|
3304
|
+
const {
|
|
3339
3305
|
auth
|
|
3340
3306
|
} = this.props;
|
|
3341
3307
|
if (!Session$3.validateAccess(auth.site, values.permissionMaintenanceTracking, auth)) return null;
|
|
3342
|
-
|
|
3308
|
+
const {
|
|
3343
3309
|
job
|
|
3344
3310
|
} = this.state;
|
|
3345
3311
|
if (!job) return null;
|
|
3346
|
-
|
|
3312
|
+
const selectedPriority = getJobPriority(job.priority);
|
|
3347
3313
|
return /*#__PURE__*/jsxs("div", {
|
|
3348
3314
|
className: "statusLabel marginTop-5 pointer",
|
|
3349
3315
|
onClick: this.onTogglePriorityChanger,
|
|
@@ -3358,8 +3324,8 @@ class Job extends Component {
|
|
|
3358
3324
|
}
|
|
3359
3325
|
renderStatusLabel() {
|
|
3360
3326
|
if (!this.state.job.status) return null;
|
|
3361
|
-
|
|
3362
|
-
|
|
3327
|
+
const statusType = this.getStatusType(this.state.job.status);
|
|
3328
|
+
const {
|
|
3363
3329
|
auth
|
|
3364
3330
|
} = this.props;
|
|
3365
3331
|
if (Session$3.validateAccess(auth.site, values.permissionMaintenanceTracking, auth)) {
|
|
@@ -3387,7 +3353,7 @@ class Job extends Component {
|
|
|
3387
3353
|
});
|
|
3388
3354
|
}
|
|
3389
3355
|
renderNotesButton() {
|
|
3390
|
-
|
|
3356
|
+
const {
|
|
3391
3357
|
auth
|
|
3392
3358
|
} = this.props;
|
|
3393
3359
|
if (!Session$3.validateAccess(auth.site, values.permissionMaintenanceTracking, auth)) return null;
|
|
@@ -3405,7 +3371,7 @@ class Job extends Component {
|
|
|
3405
3371
|
});
|
|
3406
3372
|
}
|
|
3407
3373
|
renderAssignButton() {
|
|
3408
|
-
|
|
3374
|
+
const {
|
|
3409
3375
|
auth
|
|
3410
3376
|
} = this.props;
|
|
3411
3377
|
if (!Session$3.validateAccess(auth.site, values.permissionMaintenanceTracking, auth)) return null;
|
|
@@ -3424,7 +3390,7 @@ class Job extends Component {
|
|
|
3424
3390
|
}
|
|
3425
3391
|
renderStatusChanger() {
|
|
3426
3392
|
if (!this.state.statusChangerOpen) return null;
|
|
3427
|
-
|
|
3393
|
+
const {
|
|
3428
3394
|
statusTypes
|
|
3429
3395
|
} = this.props;
|
|
3430
3396
|
return /*#__PURE__*/jsx("div", {
|
|
@@ -3484,8 +3450,8 @@ class Job extends Component {
|
|
|
3484
3450
|
});
|
|
3485
3451
|
}
|
|
3486
3452
|
renderImageGrid(images) {
|
|
3487
|
-
|
|
3488
|
-
|
|
3453
|
+
let size = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;
|
|
3454
|
+
const imagesToUse = images && images.length > 0 ? images : [];
|
|
3489
3455
|
return /*#__PURE__*/jsx("div", {
|
|
3490
3456
|
className: "imageGrid",
|
|
3491
3457
|
children: imagesToUse.map((image, i) => {
|
|
@@ -3506,7 +3472,7 @@ class Job extends Component {
|
|
|
3506
3472
|
});
|
|
3507
3473
|
}
|
|
3508
3474
|
renderDocumentGrid(documents) {
|
|
3509
|
-
|
|
3475
|
+
const documentsToUse = documents && documents.length > 0 ? documents : [];
|
|
3510
3476
|
return /*#__PURE__*/jsx("div", {
|
|
3511
3477
|
className: "documentGrid",
|
|
3512
3478
|
children: documentsToUse.map((doc, index) => /*#__PURE__*/jsx(Components$3.Attachment, {
|
|
@@ -3518,7 +3484,7 @@ class Job extends Component {
|
|
|
3518
3484
|
}
|
|
3519
3485
|
renderImages() {
|
|
3520
3486
|
if (_.isEmpty(this.state.job.image) && _.isEmpty(this.state.job.images)) return null;
|
|
3521
|
-
|
|
3487
|
+
const imagesToUse = _.isEmpty(this.state.job.image) ? this.state.job.images : [this.state.job.image];
|
|
3522
3488
|
return /*#__PURE__*/jsxs("div", {
|
|
3523
3489
|
className: "padding-60 paddingVertical-40 bottomDivideBorder",
|
|
3524
3490
|
children: [/*#__PURE__*/jsx(Components$3.Text, {
|
|
@@ -3529,15 +3495,15 @@ class Job extends Component {
|
|
|
3529
3495
|
});
|
|
3530
3496
|
}
|
|
3531
3497
|
renderCustomFields() {
|
|
3532
|
-
|
|
3498
|
+
const {
|
|
3533
3499
|
job
|
|
3534
3500
|
} = this.state;
|
|
3535
|
-
|
|
3501
|
+
const {
|
|
3536
3502
|
customFields
|
|
3537
3503
|
} = job;
|
|
3538
|
-
|
|
3539
|
-
|
|
3540
|
-
|
|
3504
|
+
const labelClass = "fieldLabel";
|
|
3505
|
+
const answerClass = "fontRegular fontSize-16 text-dark marginTop-5";
|
|
3506
|
+
const renderAnswer = field => {
|
|
3541
3507
|
switch (field.type) {
|
|
3542
3508
|
case "date":
|
|
3543
3509
|
return /*#__PURE__*/jsx("div", {
|
|
@@ -3587,10 +3553,10 @@ class Job extends Component {
|
|
|
3587
3553
|
}
|
|
3588
3554
|
renderInner() {
|
|
3589
3555
|
if (this.state.job == null) return null;
|
|
3590
|
-
|
|
3556
|
+
const {
|
|
3591
3557
|
customFields
|
|
3592
3558
|
} = this.state.job;
|
|
3593
|
-
|
|
3559
|
+
const hasCustomFields = customFields && customFields.length > 0;
|
|
3594
3560
|
return /*#__PURE__*/jsxs("div", {
|
|
3595
3561
|
iconStyle: {
|
|
3596
3562
|
paddingBottom: 40
|
|
@@ -3691,10 +3657,10 @@ class Job extends Component {
|
|
|
3691
3657
|
});
|
|
3692
3658
|
}
|
|
3693
3659
|
renderHistoryEntry(e, i) {
|
|
3694
|
-
|
|
3660
|
+
const {
|
|
3695
3661
|
job
|
|
3696
3662
|
} = this.state;
|
|
3697
|
-
|
|
3663
|
+
const entryToUse = e || {
|
|
3698
3664
|
timestamp: job.createdTime,
|
|
3699
3665
|
status: "Unassigned",
|
|
3700
3666
|
user: {
|
|
@@ -3703,7 +3669,7 @@ class Job extends Component {
|
|
|
3703
3669
|
profilePic: job.userProfilePic
|
|
3704
3670
|
}
|
|
3705
3671
|
};
|
|
3706
|
-
|
|
3672
|
+
const statusType = this.getStatusType(entryToUse.status);
|
|
3707
3673
|
return /*#__PURE__*/jsxs("div", {
|
|
3708
3674
|
className: "ticketHistoryEntry",
|
|
3709
3675
|
children: [/*#__PURE__*/jsx("p", {
|
|
@@ -3767,7 +3733,7 @@ class Job extends Component {
|
|
|
3767
3733
|
}, index);
|
|
3768
3734
|
}
|
|
3769
3735
|
renderAssignment() {
|
|
3770
|
-
|
|
3736
|
+
const {
|
|
3771
3737
|
job
|
|
3772
3738
|
} = this.state;
|
|
3773
3739
|
if (!job) return null;
|
|
@@ -3815,8 +3781,8 @@ class Job extends Component {
|
|
|
3815
3781
|
}, i);
|
|
3816
3782
|
}
|
|
3817
3783
|
renderExternalSyncEntry(e, i) {
|
|
3818
|
-
|
|
3819
|
-
|
|
3784
|
+
const isSuccess = e.EntryType === "ExternalIDSet";
|
|
3785
|
+
const backgroundColor = isSuccess ? Colours$2.COLOUR_GREEN : Colours$2.COLOUR_RED; // Green for success, red for failure
|
|
3820
3786
|
|
|
3821
3787
|
return /*#__PURE__*/jsxs("div", {
|
|
3822
3788
|
className: "ticketHistoryEntry",
|
|
@@ -3836,7 +3802,7 @@ class Job extends Component {
|
|
|
3836
3802
|
}, i);
|
|
3837
3803
|
}
|
|
3838
3804
|
renderPriority() {
|
|
3839
|
-
|
|
3805
|
+
const {
|
|
3840
3806
|
auth
|
|
3841
3807
|
} = this.props;
|
|
3842
3808
|
if (!Session$3.validateAccess(auth.site, values.permissionMaintenanceTracking, auth)) return null;
|
|
@@ -3853,20 +3819,20 @@ class Job extends Component {
|
|
|
3853
3819
|
});
|
|
3854
3820
|
}
|
|
3855
3821
|
hasSyncFailureWithoutSuccess() {
|
|
3856
|
-
|
|
3822
|
+
const {
|
|
3857
3823
|
job
|
|
3858
3824
|
} = this.state;
|
|
3859
3825
|
if (!job || !job.history) return false;
|
|
3860
|
-
|
|
3861
|
-
|
|
3862
|
-
|
|
3826
|
+
const history = job.history || [];
|
|
3827
|
+
const hasSuccess = history.some(entry => entry.EntryType === "ExternalIDSet");
|
|
3828
|
+
const hasFailure = history.some(entry => entry.EntryType === "ExternalIDSetFailed");
|
|
3863
3829
|
return hasFailure && !hasSuccess;
|
|
3864
3830
|
}
|
|
3865
3831
|
renderRetrySyncButton() {
|
|
3866
|
-
|
|
3832
|
+
const {
|
|
3867
3833
|
auth
|
|
3868
3834
|
} = this.props;
|
|
3869
|
-
|
|
3835
|
+
const {
|
|
3870
3836
|
retryingSync,
|
|
3871
3837
|
retrySyncInitiated
|
|
3872
3838
|
} = this.state;
|
|
@@ -3904,7 +3870,7 @@ class Job extends Component {
|
|
|
3904
3870
|
});
|
|
3905
3871
|
}
|
|
3906
3872
|
renderExternalSyncStatus() {
|
|
3907
|
-
|
|
3873
|
+
const {
|
|
3908
3874
|
retrySyncError,
|
|
3909
3875
|
retrySyncInitiated
|
|
3910
3876
|
} = this.state;
|
|
@@ -3953,14 +3919,14 @@ class Job extends Component {
|
|
|
3953
3919
|
return null;
|
|
3954
3920
|
}
|
|
3955
3921
|
renderExternalSync() {
|
|
3956
|
-
|
|
3922
|
+
const {
|
|
3957
3923
|
externalSync,
|
|
3958
3924
|
loadingExternalSync
|
|
3959
3925
|
} = this.state;
|
|
3960
3926
|
|
|
3961
3927
|
// Check if we should show this section at all
|
|
3962
|
-
|
|
3963
|
-
|
|
3928
|
+
const hasExternalSyncData = externalSync && !loadingExternalSync;
|
|
3929
|
+
const hasSyncFailure = this.hasSyncFailureWithoutSuccess();
|
|
3964
3930
|
|
|
3965
3931
|
// Show section if we have sync data OR if there's a failure that can be retried
|
|
3966
3932
|
if (!hasExternalSyncData && !hasSyncFailure) return null;
|
|
@@ -4000,11 +3966,11 @@ class Job extends Component {
|
|
|
4000
3966
|
});
|
|
4001
3967
|
}
|
|
4002
3968
|
renderOverview() {
|
|
4003
|
-
|
|
3969
|
+
const {
|
|
4004
3970
|
job
|
|
4005
3971
|
} = this.state;
|
|
4006
3972
|
if (!job || !job.history) return null;
|
|
4007
|
-
|
|
3973
|
+
const source = _.sortBy([...job.history.map(e => {
|
|
4008
3974
|
return _objectSpread$5(_objectSpread$5({}, e), {}, {
|
|
4009
3975
|
EntryType: e.EntryType || "status"
|
|
4010
3976
|
});
|
|
@@ -4142,8 +4108,8 @@ class Job extends Component {
|
|
|
4142
4108
|
children: "Add Attachment"
|
|
4143
4109
|
})]
|
|
4144
4110
|
}), /*#__PURE__*/jsx(Components$3.ImageInput, {
|
|
4145
|
-
ref:
|
|
4146
|
-
this.imageInput =
|
|
4111
|
+
ref: ref => {
|
|
4112
|
+
this.imageInput = ref;
|
|
4147
4113
|
},
|
|
4148
4114
|
multiple: true,
|
|
4149
4115
|
refreshCallback: images => {
|
|
@@ -4155,7 +4121,7 @@ class Job extends Component {
|
|
|
4155
4121
|
});
|
|
4156
4122
|
}
|
|
4157
4123
|
renderUsers() {
|
|
4158
|
-
|
|
4124
|
+
let content = null;
|
|
4159
4125
|
if (this.state.confirmingAssignee) {
|
|
4160
4126
|
content = /*#__PURE__*/jsx("div", {
|
|
4161
4127
|
className: "flex flex-center-row",
|
|
@@ -4249,8 +4215,8 @@ class Job extends Component {
|
|
|
4249
4215
|
});
|
|
4250
4216
|
}
|
|
4251
4217
|
}
|
|
4252
|
-
|
|
4253
|
-
|
|
4218
|
+
const mapStateToProps$3 = state => {
|
|
4219
|
+
const {
|
|
4254
4220
|
auth
|
|
4255
4221
|
} = state;
|
|
4256
4222
|
return {
|
|
@@ -4265,7 +4231,7 @@ var Job$1 = connect(mapStateToProps$3, {
|
|
|
4265
4231
|
|
|
4266
4232
|
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; }
|
|
4267
4233
|
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(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; }
|
|
4268
|
-
|
|
4234
|
+
const {
|
|
4269
4235
|
Actions,
|
|
4270
4236
|
Components: Components$2,
|
|
4271
4237
|
Helper: Helper$2,
|
|
@@ -4278,18 +4244,18 @@ class AddJob extends Component {
|
|
|
4278
4244
|
var _this;
|
|
4279
4245
|
super(props);
|
|
4280
4246
|
_this = this;
|
|
4281
|
-
_defineProperty(this, "getJob",
|
|
4247
|
+
_defineProperty(this, "getJob", async () => {
|
|
4282
4248
|
try {
|
|
4283
|
-
|
|
4249
|
+
const res = await maintenanceActions.getJob(this.props.auth.site, this.state.jobId);
|
|
4284
4250
|
res.data.location = res.data.site;
|
|
4285
|
-
|
|
4251
|
+
const {
|
|
4286
4252
|
userID,
|
|
4287
4253
|
userName,
|
|
4288
4254
|
userProfilePic,
|
|
4289
4255
|
type,
|
|
4290
4256
|
customFields
|
|
4291
4257
|
} = res.data;
|
|
4292
|
-
|
|
4258
|
+
this.setState(_objectSpread$4(_objectSpread$4({}, res.data), {}, {
|
|
4293
4259
|
prevType: type,
|
|
4294
4260
|
prevCustomFileds: customFields,
|
|
4295
4261
|
type,
|
|
@@ -4300,39 +4266,39 @@ class AddJob extends Component {
|
|
|
4300
4266
|
profilePic: userProfilePic
|
|
4301
4267
|
}
|
|
4302
4268
|
}));
|
|
4303
|
-
|
|
4269
|
+
this.checkSetImages(this.imageInput, res.data.images);
|
|
4304
4270
|
if (customFields) {
|
|
4305
4271
|
customFields.forEach((field, index) => {
|
|
4306
4272
|
if (field.type === "image" && field.answer) {
|
|
4307
|
-
|
|
4273
|
+
this.checkSetImages(this.customImageInputs[index], field.answer);
|
|
4308
4274
|
}
|
|
4309
4275
|
});
|
|
4310
4276
|
}
|
|
4311
4277
|
} catch (error) {
|
|
4312
4278
|
console.error("getJob", error);
|
|
4313
4279
|
}
|
|
4314
|
-
})
|
|
4315
|
-
_defineProperty(this, "getJobTypes",
|
|
4280
|
+
});
|
|
4281
|
+
_defineProperty(this, "getJobTypes", async () => {
|
|
4316
4282
|
try {
|
|
4317
|
-
|
|
4318
|
-
|
|
4283
|
+
const res = await maintenanceActions.getJobTypes(this.props.auth.site);
|
|
4284
|
+
this.setState({
|
|
4319
4285
|
types: res.data
|
|
4320
4286
|
});
|
|
4321
|
-
|
|
4287
|
+
this.getDefaultJob();
|
|
4322
4288
|
} catch (error) {
|
|
4323
4289
|
console.error("getJobTypes", error);
|
|
4324
4290
|
}
|
|
4325
|
-
})
|
|
4326
|
-
_defineProperty(this, "getUsers",
|
|
4291
|
+
});
|
|
4292
|
+
_defineProperty(this, "getUsers", async () => {
|
|
4327
4293
|
try {
|
|
4328
|
-
|
|
4294
|
+
const res = await userActions.fetchUsers(this.props.auth.site);
|
|
4329
4295
|
if (res.userFetchFail) return;
|
|
4330
4296
|
if (res.data != null && !_.isEmpty(res.data.results.Items)) {
|
|
4331
|
-
|
|
4332
|
-
if (
|
|
4297
|
+
let items = res.data.results.Items;
|
|
4298
|
+
if (this.props.optionOnlyForResidents) {
|
|
4333
4299
|
items = _.filter(items, u => u.category === "resident");
|
|
4334
4300
|
}
|
|
4335
|
-
|
|
4301
|
+
this.setState({
|
|
4336
4302
|
users: _.sortBy(items, u => {
|
|
4337
4303
|
return (u.displayName || "").toLowerCase();
|
|
4338
4304
|
})
|
|
@@ -4341,15 +4307,15 @@ class AddJob extends Component {
|
|
|
4341
4307
|
} catch (error) {
|
|
4342
4308
|
console.error("getUsers", error);
|
|
4343
4309
|
}
|
|
4344
|
-
})
|
|
4310
|
+
});
|
|
4345
4311
|
_defineProperty(this, "getDefaultJob", () => {
|
|
4346
|
-
|
|
4312
|
+
const {
|
|
4347
4313
|
types,
|
|
4348
4314
|
jobId
|
|
4349
4315
|
} = this.state;
|
|
4350
4316
|
if (jobId == null) {
|
|
4351
4317
|
if (types.length !== 0) {
|
|
4352
|
-
|
|
4318
|
+
const defaultType = types[0];
|
|
4353
4319
|
this.setState({
|
|
4354
4320
|
type: defaultType.typeName,
|
|
4355
4321
|
customFields: defaultType.hasCustomFields && defaultType.customFields.length > 0 ? defaultType.customFields : []
|
|
@@ -4362,15 +4328,15 @@ class AddJob extends Component {
|
|
|
4362
4328
|
}
|
|
4363
4329
|
});
|
|
4364
4330
|
_defineProperty(this, "onSelectType", (key, e) => {
|
|
4365
|
-
|
|
4331
|
+
const {
|
|
4366
4332
|
types,
|
|
4367
4333
|
prevType,
|
|
4368
4334
|
prevCustomFileds
|
|
4369
4335
|
} = this.state;
|
|
4370
|
-
|
|
4336
|
+
const selectedType = types.find(t => t.typeName === key);
|
|
4371
4337
|
// If selected type had previously saved custom fields, use the previous version
|
|
4372
|
-
|
|
4373
|
-
|
|
4338
|
+
const hasPrevCustomFields = prevType === selectedType.typeName && prevCustomFileds && prevCustomFileds.length > 0;
|
|
4339
|
+
const update = {
|
|
4374
4340
|
type: selectedType.typeName,
|
|
4375
4341
|
customFields: hasPrevCustomFields ? prevCustomFileds : selectedType.hasCustomFields ? selectedType.customFields : []
|
|
4376
4342
|
};
|
|
@@ -4395,7 +4361,7 @@ class AddJob extends Component {
|
|
|
4395
4361
|
});
|
|
4396
4362
|
});
|
|
4397
4363
|
_defineProperty(this, "onSelectUser", user => {
|
|
4398
|
-
|
|
4364
|
+
const update = {
|
|
4399
4365
|
selectedUser: user,
|
|
4400
4366
|
userID: user.userId,
|
|
4401
4367
|
userName: user.displayName,
|
|
@@ -4413,7 +4379,7 @@ class AddJob extends Component {
|
|
|
4413
4379
|
// Fetch in background to avoid blocking UI
|
|
4414
4380
|
userActions.fetchUser(this.props.auth.site, user.userId).then(response => {
|
|
4415
4381
|
if (response.data && response.data.user) {
|
|
4416
|
-
|
|
4382
|
+
const contactUpdate = {};
|
|
4417
4383
|
// Auto-populate phone and room from user profile
|
|
4418
4384
|
if (response.data.user.phoneNumber) {
|
|
4419
4385
|
contactUpdate.phone = response.data.user.phoneNumber;
|
|
@@ -4433,7 +4399,7 @@ class AddJob extends Component {
|
|
|
4433
4399
|
});
|
|
4434
4400
|
});
|
|
4435
4401
|
_defineProperty(this, "onUnselectUser", () => {
|
|
4436
|
-
|
|
4402
|
+
const update = {
|
|
4437
4403
|
selectedUser: null,
|
|
4438
4404
|
userID: "",
|
|
4439
4405
|
userName: "",
|
|
@@ -4446,78 +4412,78 @@ class AddJob extends Component {
|
|
|
4446
4412
|
this.setState(update);
|
|
4447
4413
|
});
|
|
4448
4414
|
_defineProperty(this, "onChangeAnswer", (qId, answer) => {
|
|
4449
|
-
|
|
4415
|
+
const update = {
|
|
4450
4416
|
customFields: _.cloneDeep(this.state.customFields)
|
|
4451
4417
|
};
|
|
4452
|
-
|
|
4418
|
+
const field = update.customFields[qId];
|
|
4453
4419
|
field.answer = answer;
|
|
4454
4420
|
if (field.isTitle) update.title = field.answer;
|
|
4455
4421
|
this.setState(update);
|
|
4456
4422
|
});
|
|
4457
4423
|
_defineProperty(this, "onChangeToggleAnswer", (qId, answer) => {
|
|
4458
|
-
|
|
4424
|
+
const update = {
|
|
4459
4425
|
customFields: _.cloneDeep(this.state.customFields)
|
|
4460
4426
|
};
|
|
4461
|
-
|
|
4427
|
+
const field = update.customFields[qId];
|
|
4462
4428
|
field.answer = field.answer === answer ? undefined : answer;
|
|
4463
4429
|
if (field.isTitle) update.title = field.answer;
|
|
4464
4430
|
this.setState(update);
|
|
4465
4431
|
});
|
|
4466
4432
|
_defineProperty(this, "onChangeCheckboxAnswer", (qId, answer) => {
|
|
4467
|
-
|
|
4433
|
+
const update = {
|
|
4468
4434
|
customFields: _.cloneDeep(this.state.customFields)
|
|
4469
4435
|
};
|
|
4470
|
-
|
|
4436
|
+
const field = update.customFields[qId];
|
|
4471
4437
|
field.answer = _.xor(field.answer || [], [answer]);
|
|
4472
4438
|
if (field.isTitle) update.title = field.answer.join(", ");
|
|
4473
4439
|
this.setState(update);
|
|
4474
4440
|
});
|
|
4475
4441
|
_defineProperty(this, "onChangeDateAnswer", function (qId, answer) {
|
|
4476
|
-
|
|
4477
|
-
|
|
4442
|
+
let togglePicker = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
|
|
4443
|
+
const update = {
|
|
4478
4444
|
customFields: _.cloneDeep(_this.state.customFields)
|
|
4479
4445
|
};
|
|
4480
|
-
|
|
4446
|
+
const field = update.customFields[qId];
|
|
4481
4447
|
field.answer = answer;
|
|
4482
4448
|
if (field.isTitle) update.title = moment(field.answer, "YYYY-MM-DD").format("DD-MMM-YYYY");
|
|
4483
4449
|
_this.setState(update);
|
|
4484
4450
|
if (togglePicker) _this.onToggleDatePicker(qId);
|
|
4485
4451
|
});
|
|
4486
4452
|
_defineProperty(this, "onChangeTimeAnswer", (qId, answer) => {
|
|
4487
|
-
|
|
4453
|
+
const update = {
|
|
4488
4454
|
customFields: _.cloneDeep(this.state.customFields)
|
|
4489
4455
|
};
|
|
4490
|
-
|
|
4456
|
+
const field = update.customFields[qId];
|
|
4491
4457
|
field.answer = answer;
|
|
4492
4458
|
if (field.isTitle) update.title = moment(field.answer, "HH:mm").format("h:mm a");
|
|
4493
4459
|
this.setState(update);
|
|
4494
4460
|
});
|
|
4495
4461
|
_defineProperty(this, "onChangeImageAnswer", (qId, answer) => {
|
|
4496
|
-
|
|
4462
|
+
const update = {
|
|
4497
4463
|
customFields: _.cloneDeep(this.state.customFields)
|
|
4498
4464
|
};
|
|
4499
|
-
|
|
4465
|
+
const field = update.customFields[qId];
|
|
4500
4466
|
field.answer = answer;
|
|
4501
4467
|
this.setState(update);
|
|
4502
4468
|
});
|
|
4503
4469
|
_defineProperty(this, "onRemoveDocumentAnswer", (qId, document) => {
|
|
4504
|
-
|
|
4470
|
+
const update = {
|
|
4505
4471
|
customFields: _.cloneDeep(this.state.customFields)
|
|
4506
4472
|
};
|
|
4507
|
-
|
|
4473
|
+
const field = update.customFields[qId];
|
|
4508
4474
|
field.answer = _.filter(field.answer, d => d.url !== document.url);
|
|
4509
4475
|
this.setState(update);
|
|
4510
4476
|
});
|
|
4511
4477
|
_defineProperty(this, "onHandlePDFFileChange", (event, qId) => {
|
|
4512
|
-
|
|
4478
|
+
const file = event.target.files[0];
|
|
4513
4479
|
if (!file) return;
|
|
4514
|
-
|
|
4480
|
+
const update = {
|
|
4515
4481
|
customFields: _.cloneDeep(this.state.customFields)
|
|
4516
4482
|
};
|
|
4517
|
-
|
|
4518
|
-
|
|
4519
|
-
|
|
4520
|
-
|
|
4483
|
+
const field = update.customFields[qId];
|
|
4484
|
+
const attachments = field.answer || [];
|
|
4485
|
+
const [name, ext] = file.name.split(".");
|
|
4486
|
+
const newAttachment = {
|
|
4521
4487
|
uploading: true,
|
|
4522
4488
|
name,
|
|
4523
4489
|
ext: ext.toLowerCase()
|
|
@@ -4537,7 +4503,7 @@ class AddJob extends Component {
|
|
|
4537
4503
|
event.target.value = "";
|
|
4538
4504
|
});
|
|
4539
4505
|
_defineProperty(this, "onToggleDatePicker", qId => {
|
|
4540
|
-
|
|
4506
|
+
const showDate = _objectSpread$4({}, this.state.showDate);
|
|
4541
4507
|
showDate[qId] = !showDate[qId];
|
|
4542
4508
|
this.setState({
|
|
4543
4509
|
showDate
|
|
@@ -4557,7 +4523,7 @@ class AddJob extends Component {
|
|
|
4557
4523
|
this.setState({
|
|
4558
4524
|
updating: true
|
|
4559
4525
|
});
|
|
4560
|
-
|
|
4526
|
+
const job = {
|
|
4561
4527
|
id: this.state.id,
|
|
4562
4528
|
userID: this.state.userID,
|
|
4563
4529
|
userName: this.state.userName,
|
|
@@ -4603,13 +4569,13 @@ class AddJob extends Component {
|
|
|
4603
4569
|
}
|
|
4604
4570
|
});
|
|
4605
4571
|
_defineProperty(this, "isFieldValid", field => {
|
|
4606
|
-
|
|
4572
|
+
const {
|
|
4607
4573
|
mandatory,
|
|
4608
4574
|
type,
|
|
4609
4575
|
answer
|
|
4610
4576
|
} = field;
|
|
4611
4577
|
if (["staticTitle", "staticText"].includes(type)) return true;
|
|
4612
|
-
|
|
4578
|
+
const checkMandatory = () => {
|
|
4613
4579
|
if (!mandatory) return true;
|
|
4614
4580
|
switch (type) {
|
|
4615
4581
|
case "yn":
|
|
@@ -4622,7 +4588,7 @@ class AddJob extends Component {
|
|
|
4622
4588
|
return !_.isNil(answer) && !_.isEmpty(answer);
|
|
4623
4589
|
}
|
|
4624
4590
|
};
|
|
4625
|
-
|
|
4591
|
+
const checkFormat = () => {
|
|
4626
4592
|
if (_.isNil(answer) || _.isEmpty(answer)) return true;
|
|
4627
4593
|
switch (type) {
|
|
4628
4594
|
case "email":
|
|
@@ -4635,12 +4601,12 @@ class AddJob extends Component {
|
|
|
4635
4601
|
return true;
|
|
4636
4602
|
}
|
|
4637
4603
|
};
|
|
4638
|
-
|
|
4604
|
+
const valid = checkMandatory() && checkFormat();
|
|
4639
4605
|
return valid;
|
|
4640
4606
|
});
|
|
4641
4607
|
_defineProperty(this, "getFieldContainerClass", function () {
|
|
4642
|
-
|
|
4643
|
-
|
|
4608
|
+
let isValid = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
|
|
4609
|
+
const showError = _this.state.showWarnings && !isValid;
|
|
4644
4610
|
return "genericInputContainer ".concat(isValid ? "genericInput-valid" : "", " ").concat(showError ? "genericInput-error" : "").trim();
|
|
4645
4611
|
});
|
|
4646
4612
|
this.imageInput = null;
|
|
@@ -4699,25 +4665,18 @@ class AddJob extends Component {
|
|
|
4699
4665
|
}, 100);
|
|
4700
4666
|
}
|
|
4701
4667
|
}
|
|
4702
|
-
|
|
4703
|
-
|
|
4704
|
-
types
|
|
4705
|
-
type
|
|
4668
|
+
getTypeOptions() {
|
|
4669
|
+
const {
|
|
4670
|
+
types
|
|
4706
4671
|
} = this.state;
|
|
4707
|
-
return types.map(ev => {
|
|
4708
|
-
|
|
4709
|
-
|
|
4710
|
-
|
|
4711
|
-
active: type === ev.typeName,
|
|
4712
|
-
children: ev.typeName
|
|
4713
|
-
}, ev.typeName);
|
|
4714
|
-
}
|
|
4715
|
-
return null;
|
|
4716
|
-
});
|
|
4672
|
+
return types.filter(Boolean).map(ev => ({
|
|
4673
|
+
Key: ev.typeName,
|
|
4674
|
+
Title: ev.typeName
|
|
4675
|
+
}));
|
|
4717
4676
|
}
|
|
4718
4677
|
renderSuccess() {
|
|
4719
4678
|
if (!this.state.success) return null;
|
|
4720
|
-
|
|
4679
|
+
const title = this.props.strings["".concat(values.featureKey, "_textTitleRequests")] || values.textTitleRequests;
|
|
4721
4680
|
return /*#__PURE__*/jsx(Components$2.SuccessPopup, {
|
|
4722
4681
|
text: "".concat(values.textEntityName, " has been ").concat(this.state.id != null ? "edited" : "added"),
|
|
4723
4682
|
buttons: [{
|
|
@@ -4730,12 +4689,12 @@ class AddJob extends Component {
|
|
|
4730
4689
|
});
|
|
4731
4690
|
}
|
|
4732
4691
|
validateCustomFields() {
|
|
4733
|
-
|
|
4692
|
+
const {
|
|
4734
4693
|
customFields
|
|
4735
4694
|
} = this.state;
|
|
4736
4695
|
if (!customFields || customFields.length === 0) return true;
|
|
4737
4696
|
return customFields.every(field => {
|
|
4738
|
-
|
|
4697
|
+
const isValid = this.isFieldValid(field);
|
|
4739
4698
|
return isValid;
|
|
4740
4699
|
});
|
|
4741
4700
|
}
|
|
@@ -4775,11 +4734,11 @@ class AddJob extends Component {
|
|
|
4775
4734
|
});
|
|
4776
4735
|
}
|
|
4777
4736
|
renderSelectUser() {
|
|
4778
|
-
|
|
4737
|
+
const {
|
|
4779
4738
|
showWarnings,
|
|
4780
4739
|
selectedUser
|
|
4781
4740
|
} = this.state;
|
|
4782
|
-
|
|
4741
|
+
const isValid = !_.isNil(selectedUser);
|
|
4783
4742
|
return /*#__PURE__*/jsxs("div", {
|
|
4784
4743
|
className: this.getFieldContainerClass(isValid),
|
|
4785
4744
|
children: [/*#__PURE__*/jsxs("div", {
|
|
@@ -4849,8 +4808,8 @@ class AddJob extends Component {
|
|
|
4849
4808
|
className: "marginBottom-4",
|
|
4850
4809
|
children: "Images"
|
|
4851
4810
|
}), /*#__PURE__*/jsx(Components$2.ImageInput, {
|
|
4852
|
-
ref:
|
|
4853
|
-
this.imageInput =
|
|
4811
|
+
ref: ref => {
|
|
4812
|
+
this.imageInput = ref;
|
|
4854
4813
|
},
|
|
4855
4814
|
multiple: true,
|
|
4856
4815
|
refreshCallback: images => {
|
|
@@ -5089,14 +5048,14 @@ class AddJob extends Component {
|
|
|
5089
5048
|
className: "marginBottom-4",
|
|
5090
5049
|
children: field.label
|
|
5091
5050
|
}), /*#__PURE__*/jsx(Components$2.ImageInput, {
|
|
5092
|
-
ref:
|
|
5051
|
+
ref: ref => this.customImageInputs[fieldId] = ref,
|
|
5093
5052
|
multiple: true,
|
|
5094
5053
|
refreshCallback: images => this.onChangeImageAnswer(fieldId, images)
|
|
5095
5054
|
})]
|
|
5096
5055
|
})]
|
|
5097
5056
|
}, fieldId);
|
|
5098
5057
|
case "document":
|
|
5099
|
-
|
|
5058
|
+
const documents = field.answer || [];
|
|
5100
5059
|
return /*#__PURE__*/jsxs("div", {
|
|
5101
5060
|
className: this.getFieldContainerClass(this.isFieldValid(field)),
|
|
5102
5061
|
style: styles$4.fieldContainer,
|
|
@@ -5141,7 +5100,7 @@ class AddJob extends Component {
|
|
|
5141
5100
|
}
|
|
5142
5101
|
}
|
|
5143
5102
|
renderCustomFields() {
|
|
5144
|
-
|
|
5103
|
+
const {
|
|
5145
5104
|
customFields
|
|
5146
5105
|
} = this.state;
|
|
5147
5106
|
if (!customFields || customFields.length === 0) return null;
|
|
@@ -5152,7 +5111,7 @@ class AddJob extends Component {
|
|
|
5152
5111
|
});
|
|
5153
5112
|
}
|
|
5154
5113
|
renderMain() {
|
|
5155
|
-
|
|
5114
|
+
const {
|
|
5156
5115
|
customFields
|
|
5157
5116
|
} = this.state;
|
|
5158
5117
|
return /*#__PURE__*/jsx("div", {
|
|
@@ -5190,29 +5149,20 @@ class AddJob extends Component {
|
|
|
5190
5149
|
showError: () => {
|
|
5191
5150
|
return this.state.showWarnings && _.isEmpty(this.state.room);
|
|
5192
5151
|
}
|
|
5193
|
-
}), /*#__PURE__*/
|
|
5194
|
-
|
|
5152
|
+
}), /*#__PURE__*/jsx(Components$2.DropdownInput, {
|
|
5153
|
+
label: values.textJobType,
|
|
5154
|
+
value: this.state.type,
|
|
5155
|
+
options: this.getTypeOptions(),
|
|
5156
|
+
onSelect: this.onSelectType,
|
|
5157
|
+
style: {
|
|
5195
5158
|
marginBottom: 15
|
|
5196
|
-
}
|
|
5197
|
-
children: [/*#__PURE__*/jsx(Components$2.Text, {
|
|
5198
|
-
type: "formLabel",
|
|
5199
|
-
children: values.textJobType
|
|
5200
|
-
}), /*#__PURE__*/jsx(DropdownButton, {
|
|
5201
|
-
style: {
|
|
5202
|
-
minWidth: 80
|
|
5203
|
-
},
|
|
5204
|
-
bsStyle: "default",
|
|
5205
|
-
title: this.state.type,
|
|
5206
|
-
id: "typeSelect",
|
|
5207
|
-
onSelect: this.onSelectType,
|
|
5208
|
-
children: this.renderTypeOptions()
|
|
5209
|
-
})]
|
|
5159
|
+
}
|
|
5210
5160
|
}), !_.isEmpty(customFields) || values.forceCustomFields ? this.renderCustomFields() : this.renderDefaultFields()]
|
|
5211
5161
|
})
|
|
5212
5162
|
});
|
|
5213
5163
|
}
|
|
5214
5164
|
renderUserFilterPopup() {
|
|
5215
|
-
|
|
5165
|
+
const {
|
|
5216
5166
|
userFilterOpen,
|
|
5217
5167
|
userSearch,
|
|
5218
5168
|
users
|
|
@@ -5252,7 +5202,7 @@ class AddJob extends Component {
|
|
|
5252
5202
|
});
|
|
5253
5203
|
}
|
|
5254
5204
|
render() {
|
|
5255
|
-
|
|
5205
|
+
const {
|
|
5256
5206
|
success
|
|
5257
5207
|
} = this.state;
|
|
5258
5208
|
return /*#__PURE__*/jsxs(Components$2.OverlayPage, {
|
|
@@ -5270,7 +5220,7 @@ class AddJob extends Component {
|
|
|
5270
5220
|
});
|
|
5271
5221
|
}
|
|
5272
5222
|
}
|
|
5273
|
-
|
|
5223
|
+
const styles$4 = {
|
|
5274
5224
|
userLabelContainer: {
|
|
5275
5225
|
display: "flex",
|
|
5276
5226
|
flexDirection: "row",
|
|
@@ -5284,8 +5234,8 @@ var styles$4 = {
|
|
|
5284
5234
|
alignItems: "center"
|
|
5285
5235
|
}
|
|
5286
5236
|
};
|
|
5287
|
-
|
|
5288
|
-
|
|
5237
|
+
const mapStateToProps$2 = state => {
|
|
5238
|
+
const {
|
|
5289
5239
|
auth
|
|
5290
5240
|
} = state;
|
|
5291
5241
|
return {
|
|
@@ -5300,12 +5250,12 @@ var AddJob$1 = connect(mapStateToProps$2, {
|
|
|
5300
5250
|
addRecentlyCreated: Actions.addRecentlyCreated
|
|
5301
5251
|
})(withRouter(AddJob));
|
|
5302
5252
|
|
|
5303
|
-
|
|
5253
|
+
const {
|
|
5304
5254
|
Components: Components$1,
|
|
5305
5255
|
Session: Session$1,
|
|
5306
5256
|
Helper: Helper$1
|
|
5307
5257
|
} = PlussCore;
|
|
5308
|
-
|
|
5258
|
+
const DEFAULT_FIELD = {
|
|
5309
5259
|
type: "text",
|
|
5310
5260
|
label: "",
|
|
5311
5261
|
mandatory: false,
|
|
@@ -5314,13 +5264,11 @@ var DEFAULT_FIELD = {
|
|
|
5314
5264
|
};
|
|
5315
5265
|
class AddJobType extends Component {
|
|
5316
5266
|
constructor(props) {
|
|
5317
|
-
var _this;
|
|
5318
5267
|
super(props);
|
|
5319
|
-
|
|
5320
|
-
_defineProperty(this, "getJobType", /*#__PURE__*/_asyncToGenerator(function* () {
|
|
5268
|
+
_defineProperty(this, "getJobType", async () => {
|
|
5321
5269
|
try {
|
|
5322
|
-
|
|
5323
|
-
|
|
5270
|
+
const res = await maintenanceActions.getJobType(this.props.auth.site, this.state.jobTypeId);
|
|
5271
|
+
const {
|
|
5324
5272
|
typeName,
|
|
5325
5273
|
email,
|
|
5326
5274
|
description,
|
|
@@ -5328,7 +5276,7 @@ class AddJobType extends Component {
|
|
|
5328
5276
|
hasCustomFields,
|
|
5329
5277
|
customFields
|
|
5330
5278
|
} = res.data;
|
|
5331
|
-
|
|
5279
|
+
this.setState({
|
|
5332
5280
|
jobTypeName: typeName,
|
|
5333
5281
|
jobTypeEmail: email,
|
|
5334
5282
|
jobTypeDescription: description,
|
|
@@ -5339,19 +5287,19 @@ class AddJobType extends Component {
|
|
|
5339
5287
|
} catch (error) {
|
|
5340
5288
|
console.error("getJobType", error);
|
|
5341
5289
|
}
|
|
5342
|
-
})
|
|
5290
|
+
});
|
|
5343
5291
|
_defineProperty(this, "getFieldTypeTitle", type => {
|
|
5344
|
-
|
|
5292
|
+
const fieldType = this.fieldTypes.find(f => f.Key === type);
|
|
5345
5293
|
return fieldType ? fieldType.Title : "";
|
|
5346
5294
|
});
|
|
5347
5295
|
_defineProperty(this, "validateEmail", () => {
|
|
5348
|
-
|
|
5296
|
+
const {
|
|
5349
5297
|
jobTypeEmail
|
|
5350
5298
|
} = this.state;
|
|
5351
5299
|
return !_.isEmpty(jobTypeEmail) && Helper$1.isEmail(jobTypeEmail);
|
|
5352
5300
|
});
|
|
5353
5301
|
_defineProperty(this, "isJobTypeValid", () => {
|
|
5354
|
-
|
|
5302
|
+
const {
|
|
5355
5303
|
jobTypeName,
|
|
5356
5304
|
jobTypeDescription
|
|
5357
5305
|
} = this.state;
|
|
@@ -5367,7 +5315,7 @@ class AddJobType extends Component {
|
|
|
5367
5315
|
this.setState(stateChange);
|
|
5368
5316
|
});
|
|
5369
5317
|
_defineProperty(this, "onFieldTypeChanged", (fieldIndex, key) => {
|
|
5370
|
-
|
|
5318
|
+
const customFields = [...this.state.customFields];
|
|
5371
5319
|
if (customFields[fieldIndex].type === key) return;
|
|
5372
5320
|
customFields[fieldIndex] = _.cloneDeep(DEFAULT_FIELD);
|
|
5373
5321
|
customFields[fieldIndex].type = key;
|
|
@@ -5376,21 +5324,21 @@ class AddJobType extends Component {
|
|
|
5376
5324
|
});
|
|
5377
5325
|
});
|
|
5378
5326
|
_defineProperty(this, "onFieldLabelChanged", (fieldIndex, event) => {
|
|
5379
|
-
|
|
5327
|
+
const customFields = [...this.state.customFields];
|
|
5380
5328
|
customFields[fieldIndex].label = event.target.value;
|
|
5381
5329
|
this.setState({
|
|
5382
5330
|
customFields
|
|
5383
5331
|
});
|
|
5384
5332
|
});
|
|
5385
5333
|
_defineProperty(this, "onFieldPlaceHolderChanged", (fieldIndex, event) => {
|
|
5386
|
-
|
|
5334
|
+
const customFields = [...this.state.customFields];
|
|
5387
5335
|
customFields[fieldIndex].placeHolder = event.target.value;
|
|
5388
5336
|
this.setState({
|
|
5389
5337
|
customFields
|
|
5390
5338
|
});
|
|
5391
5339
|
});
|
|
5392
5340
|
_defineProperty(this, "onFieldMandatoryChanged", fieldIndex => {
|
|
5393
|
-
|
|
5341
|
+
const customFields = [...this.state.customFields];
|
|
5394
5342
|
customFields[fieldIndex].mandatory = !customFields[fieldIndex].mandatory;
|
|
5395
5343
|
if (!customFields[fieldIndex].mandatory) {
|
|
5396
5344
|
// If a field is not mandatory, it cannot be a title field
|
|
@@ -5401,7 +5349,7 @@ class AddJobType extends Component {
|
|
|
5401
5349
|
});
|
|
5402
5350
|
});
|
|
5403
5351
|
_defineProperty(this, "onFieldIsTitleChanged", fieldIndex => {
|
|
5404
|
-
|
|
5352
|
+
const customFields = [...this.state.customFields];
|
|
5405
5353
|
customFields[fieldIndex].isTitle = !customFields[fieldIndex].isTitle;
|
|
5406
5354
|
if (customFields[fieldIndex].isTitle) {
|
|
5407
5355
|
// If a field is title field, force mandatory
|
|
@@ -5412,33 +5360,33 @@ class AddJobType extends Component {
|
|
|
5412
5360
|
});
|
|
5413
5361
|
});
|
|
5414
5362
|
_defineProperty(this, "onFieldOptionChanged", (fieldIndex, optionIndex, event) => {
|
|
5415
|
-
|
|
5416
|
-
|
|
5363
|
+
const customFields = [...this.state.customFields];
|
|
5364
|
+
const prevValue = customFields[fieldIndex].values[optionIndex];
|
|
5417
5365
|
customFields[fieldIndex].values[optionIndex] = event.target.value;
|
|
5418
5366
|
// Change corresponding validation if exists
|
|
5419
|
-
|
|
5420
|
-
|
|
5367
|
+
const validations = customFields[fieldIndex].validation;
|
|
5368
|
+
let validation = validations ? validations.find(val => val.value === prevValue) : null;
|
|
5421
5369
|
if (validation) validation.value = event.target.value;
|
|
5422
5370
|
this.setState({
|
|
5423
5371
|
customFields
|
|
5424
5372
|
});
|
|
5425
5373
|
});
|
|
5426
5374
|
_defineProperty(this, "onAddNewOption", fieldIndex => {
|
|
5427
|
-
|
|
5375
|
+
const customFields = [...this.state.customFields];
|
|
5428
5376
|
customFields[fieldIndex].values.push("");
|
|
5429
5377
|
this.setState({
|
|
5430
5378
|
customFields
|
|
5431
5379
|
});
|
|
5432
5380
|
});
|
|
5433
5381
|
_defineProperty(this, "onRemoveOption", (fieldIndex, optionIndex) => {
|
|
5434
|
-
|
|
5382
|
+
const customFields = [...this.state.customFields];
|
|
5435
5383
|
customFields[fieldIndex].values.splice(optionIndex, 1);
|
|
5436
5384
|
this.setState({
|
|
5437
5385
|
customFields
|
|
5438
5386
|
});
|
|
5439
5387
|
});
|
|
5440
5388
|
_defineProperty(this, "onAddNewField", () => {
|
|
5441
|
-
|
|
5389
|
+
const customFields = [...this.state.customFields];
|
|
5442
5390
|
customFields.push(_.cloneDeep(DEFAULT_FIELD));
|
|
5443
5391
|
this.setState({
|
|
5444
5392
|
customFields
|
|
@@ -5446,17 +5394,17 @@ class AddJobType extends Component {
|
|
|
5446
5394
|
});
|
|
5447
5395
|
_defineProperty(this, "onMoveFieldPrev", fieldIndex => {
|
|
5448
5396
|
if (fieldIndex === 0) return;
|
|
5449
|
-
|
|
5450
|
-
|
|
5397
|
+
const customFields = [...this.state.customFields];
|
|
5398
|
+
const item = customFields.splice(fieldIndex, 1)[0];
|
|
5451
5399
|
customFields.splice(fieldIndex - 1, 0, item);
|
|
5452
5400
|
this.setState({
|
|
5453
5401
|
customFields
|
|
5454
5402
|
});
|
|
5455
5403
|
});
|
|
5456
5404
|
_defineProperty(this, "onMoveFieldNext", fieldIndex => {
|
|
5457
|
-
|
|
5405
|
+
const customFields = [...this.state.customFields];
|
|
5458
5406
|
if (fieldIndex > customFields.length - 1) return;
|
|
5459
|
-
|
|
5407
|
+
const item = customFields.splice(fieldIndex, 1)[0];
|
|
5460
5408
|
customFields.splice(fieldIndex + 1, 0, item);
|
|
5461
5409
|
this.setState({
|
|
5462
5410
|
customFields
|
|
@@ -5466,10 +5414,10 @@ class AddJobType extends Component {
|
|
|
5466
5414
|
window.history.back();
|
|
5467
5415
|
});
|
|
5468
5416
|
_defineProperty(this, "onSave", () => {
|
|
5469
|
-
|
|
5417
|
+
const {
|
|
5470
5418
|
site
|
|
5471
5419
|
} = this.props.auth;
|
|
5472
|
-
|
|
5420
|
+
const {
|
|
5473
5421
|
submitting,
|
|
5474
5422
|
jobTypeId,
|
|
5475
5423
|
jobTypeName,
|
|
@@ -5488,26 +5436,26 @@ class AddJobType extends Component {
|
|
|
5488
5436
|
}
|
|
5489
5437
|
this.setState({
|
|
5490
5438
|
submitting: true
|
|
5491
|
-
},
|
|
5439
|
+
}, async () => {
|
|
5492
5440
|
try {
|
|
5493
5441
|
if (jobTypeId) {
|
|
5494
|
-
|
|
5442
|
+
await maintenanceActions.editJobType(site, jobTypeId, jobTypeName, jobTypeEmail, jobTypeDescription, jobTypeLevel, hasCustomFields, customFields);
|
|
5495
5443
|
} else {
|
|
5496
|
-
|
|
5444
|
+
await maintenanceActions.addJobType(site, jobTypeName, jobTypeEmail, jobTypeDescription, jobTypeLevel, hasCustomFields, customFields);
|
|
5497
5445
|
}
|
|
5498
|
-
|
|
5499
|
-
|
|
5446
|
+
this.props.jobTypesUpdate(site);
|
|
5447
|
+
this.setState({
|
|
5500
5448
|
submitting: false,
|
|
5501
5449
|
success: true
|
|
5502
5450
|
});
|
|
5503
5451
|
} catch (error) {
|
|
5504
5452
|
console.error("onSave", error);
|
|
5505
|
-
|
|
5453
|
+
this.setState({
|
|
5506
5454
|
submitting: false
|
|
5507
5455
|
});
|
|
5508
5456
|
alert("Something went wrong with the request. Please try again.");
|
|
5509
5457
|
}
|
|
5510
|
-
})
|
|
5458
|
+
});
|
|
5511
5459
|
});
|
|
5512
5460
|
this.fieldTypes = [{
|
|
5513
5461
|
Title: "Text Input",
|
|
@@ -5568,7 +5516,7 @@ class AddJobType extends Component {
|
|
|
5568
5516
|
if (this.state.jobTypeId) this.getJobType();
|
|
5569
5517
|
}
|
|
5570
5518
|
validateCustomFields() {
|
|
5571
|
-
|
|
5519
|
+
const {
|
|
5572
5520
|
submitting,
|
|
5573
5521
|
hasCustomFields,
|
|
5574
5522
|
customFields
|
|
@@ -5576,13 +5524,13 @@ class AddJobType extends Component {
|
|
|
5576
5524
|
if (submitting) return false;
|
|
5577
5525
|
|
|
5578
5526
|
// Validate custom fields
|
|
5579
|
-
|
|
5527
|
+
const warnings = [];
|
|
5580
5528
|
if (hasCustomFields) {
|
|
5581
|
-
|
|
5582
|
-
|
|
5583
|
-
|
|
5529
|
+
let missingLabel = false;
|
|
5530
|
+
let hasMandatoryField = false;
|
|
5531
|
+
let titleFieldCount = 0;
|
|
5584
5532
|
customFields.forEach(field => {
|
|
5585
|
-
|
|
5533
|
+
const {
|
|
5586
5534
|
type,
|
|
5587
5535
|
label,
|
|
5588
5536
|
values,
|
|
@@ -5614,7 +5562,7 @@ class AddJobType extends Component {
|
|
|
5614
5562
|
return warnings.length === 0;
|
|
5615
5563
|
}
|
|
5616
5564
|
onRemoveField(fieldIndex) {
|
|
5617
|
-
|
|
5565
|
+
const customFields = [...this.state.customFields];
|
|
5618
5566
|
if (customFields.length < 2) return;
|
|
5619
5567
|
customFields.splice(fieldIndex, 1);
|
|
5620
5568
|
this.setState({
|
|
@@ -5622,7 +5570,7 @@ class AddJobType extends Component {
|
|
|
5622
5570
|
});
|
|
5623
5571
|
}
|
|
5624
5572
|
renderBaseForm() {
|
|
5625
|
-
|
|
5573
|
+
const {
|
|
5626
5574
|
success,
|
|
5627
5575
|
jobTypeId,
|
|
5628
5576
|
showWarnings,
|
|
@@ -5821,7 +5769,7 @@ class AddJobType extends Component {
|
|
|
5821
5769
|
});
|
|
5822
5770
|
}
|
|
5823
5771
|
renderFieldMultiple(field, fieldIndex) {
|
|
5824
|
-
|
|
5772
|
+
const {
|
|
5825
5773
|
customFields
|
|
5826
5774
|
} = this.state;
|
|
5827
5775
|
return /*#__PURE__*/jsxs("div", {
|
|
@@ -5892,7 +5840,7 @@ class AddJobType extends Component {
|
|
|
5892
5840
|
});
|
|
5893
5841
|
}
|
|
5894
5842
|
renderFieldCheckbox(field, fieldIndex) {
|
|
5895
|
-
|
|
5843
|
+
const {
|
|
5896
5844
|
customFields
|
|
5897
5845
|
} = this.state;
|
|
5898
5846
|
return /*#__PURE__*/jsxs("div", {
|
|
@@ -5987,10 +5935,10 @@ class AddJobType extends Component {
|
|
|
5987
5935
|
});
|
|
5988
5936
|
}
|
|
5989
5937
|
renderField(field, fieldIndex) {
|
|
5990
|
-
|
|
5938
|
+
const {
|
|
5991
5939
|
customFields
|
|
5992
5940
|
} = this.state;
|
|
5993
|
-
|
|
5941
|
+
const renderFieldContent = () => {
|
|
5994
5942
|
switch (field.type) {
|
|
5995
5943
|
case "text":
|
|
5996
5944
|
case "email":
|
|
@@ -6074,7 +6022,7 @@ class AddJobType extends Component {
|
|
|
6074
6022
|
}, fieldIndex);
|
|
6075
6023
|
}
|
|
6076
6024
|
renderCustomForm() {
|
|
6077
|
-
|
|
6025
|
+
const {
|
|
6078
6026
|
success,
|
|
6079
6027
|
hasCustomFields,
|
|
6080
6028
|
customFields
|
|
@@ -6109,7 +6057,7 @@ class AddJobType extends Component {
|
|
|
6109
6057
|
});
|
|
6110
6058
|
}
|
|
6111
6059
|
renderWarnings() {
|
|
6112
|
-
|
|
6060
|
+
const {
|
|
6113
6061
|
showWarnings,
|
|
6114
6062
|
warnings
|
|
6115
6063
|
} = this.state;
|
|
@@ -6131,7 +6079,7 @@ class AddJobType extends Component {
|
|
|
6131
6079
|
});
|
|
6132
6080
|
}
|
|
6133
6081
|
renderSuccess() {
|
|
6134
|
-
|
|
6082
|
+
const {
|
|
6135
6083
|
success,
|
|
6136
6084
|
jobTypeId
|
|
6137
6085
|
} = this.state;
|
|
@@ -6172,7 +6120,7 @@ class AddJobType extends Component {
|
|
|
6172
6120
|
});
|
|
6173
6121
|
}
|
|
6174
6122
|
render() {
|
|
6175
|
-
|
|
6123
|
+
const {
|
|
6176
6124
|
success
|
|
6177
6125
|
} = this.state;
|
|
6178
6126
|
return /*#__PURE__*/jsxs(Components$1.OverlayPage, {
|
|
@@ -6191,8 +6139,8 @@ class AddJobType extends Component {
|
|
|
6191
6139
|
});
|
|
6192
6140
|
}
|
|
6193
6141
|
}
|
|
6194
|
-
|
|
6195
|
-
|
|
6142
|
+
const mapStateToProps$1 = state => {
|
|
6143
|
+
const {
|
|
6196
6144
|
auth
|
|
6197
6145
|
} = state;
|
|
6198
6146
|
return {
|
|
@@ -6206,14 +6154,14 @@ var AddJobType$1 = connect(mapStateToProps$1, {
|
|
|
6206
6154
|
|
|
6207
6155
|
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; }
|
|
6208
6156
|
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(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; }
|
|
6209
|
-
|
|
6157
|
+
const {
|
|
6210
6158
|
Analytics: Analytics$1,
|
|
6211
6159
|
Session,
|
|
6212
6160
|
Components,
|
|
6213
6161
|
Helper,
|
|
6214
6162
|
Colours
|
|
6215
6163
|
} = PlussCore;
|
|
6216
|
-
|
|
6164
|
+
const getInitialState = () => ({
|
|
6217
6165
|
requests: 0,
|
|
6218
6166
|
prevRequests: 0,
|
|
6219
6167
|
completedRequests: 0,
|
|
@@ -6224,8 +6172,8 @@ var getInitialState = () => ({
|
|
|
6224
6172
|
});
|
|
6225
6173
|
|
|
6226
6174
|
// AnalyticsHub Component
|
|
6227
|
-
|
|
6228
|
-
|
|
6175
|
+
const AnalyticsHub = _ref => {
|
|
6176
|
+
let {
|
|
6229
6177
|
startTime,
|
|
6230
6178
|
endTime,
|
|
6231
6179
|
auth,
|
|
@@ -6236,27 +6184,27 @@ var AnalyticsHub = _ref => {
|
|
|
6236
6184
|
userCategory,
|
|
6237
6185
|
selectedSites
|
|
6238
6186
|
} = _ref;
|
|
6239
|
-
|
|
6240
|
-
|
|
6241
|
-
|
|
6242
|
-
|
|
6187
|
+
const [analyticsData, setAnalyticsData] = useState(getInitialState());
|
|
6188
|
+
const [isExportOpen, setIsExportOpen] = useState(false);
|
|
6189
|
+
const [failedSites, setFailedSites] = useState([]);
|
|
6190
|
+
const [comparisonData, setComparisonData] = useState({
|
|
6243
6191
|
requests: [],
|
|
6244
6192
|
completedRequests: [],
|
|
6245
6193
|
comments: [],
|
|
6246
6194
|
isLoading: true
|
|
6247
6195
|
});
|
|
6248
|
-
|
|
6249
|
-
|
|
6196
|
+
const comparisonMode = selectedSites && selectedSites.length > 1;
|
|
6197
|
+
const hasAccess = Session.validateAccess(auth.site, values.permissionMaintenanceTracking, auth);
|
|
6250
6198
|
if (!hasAccess) {
|
|
6251
6199
|
return null;
|
|
6252
6200
|
}
|
|
6253
|
-
|
|
6201
|
+
const featureTitle = (key => {
|
|
6254
6202
|
if (!strings || !strings.sideNav || !strings.sideNav[key]) {
|
|
6255
6203
|
return values.textMenuTitle;
|
|
6256
6204
|
}
|
|
6257
6205
|
return strings.sideNav[key];
|
|
6258
6206
|
})();
|
|
6259
|
-
|
|
6207
|
+
const exportColumns = [{
|
|
6260
6208
|
label: "Select All",
|
|
6261
6209
|
key: ""
|
|
6262
6210
|
}, ...(comparisonMode ? [{
|
|
@@ -6281,104 +6229,94 @@ var AnalyticsHub = _ref => {
|
|
|
6281
6229
|
useEffect(() => {
|
|
6282
6230
|
getData();
|
|
6283
6231
|
}, [startTime, endTime, userType, userCategory, selectedSites]);
|
|
6284
|
-
|
|
6285
|
-
|
|
6286
|
-
|
|
6287
|
-
|
|
6288
|
-
|
|
6289
|
-
|
|
6290
|
-
|
|
6291
|
-
|
|
6292
|
-
|
|
6293
|
-
|
|
6294
|
-
|
|
6295
|
-
|
|
6296
|
-
|
|
6297
|
-
|
|
6298
|
-
data
|
|
6299
|
-
} = yield analyticsActions.getAggregateEntityStats(site, values.analyticsKey, startTime, endTime, true, {
|
|
6300
|
-
userType,
|
|
6301
|
-
userCategory
|
|
6302
|
-
});
|
|
6303
|
-
return data;
|
|
6304
|
-
});
|
|
6305
|
-
return function (_x) {
|
|
6306
|
-
return _ref3.apply(this, arguments);
|
|
6307
|
-
};
|
|
6308
|
-
}());
|
|
6309
|
-
var roles = auth.user.Roles;
|
|
6310
|
-
var failed = Object.entries(multiSiteResultsObj).filter(_ref4 => {
|
|
6311
|
-
var [, data] = _ref4;
|
|
6312
|
-
return data === null;
|
|
6313
|
-
}).map(_ref5 => {
|
|
6314
|
-
var [site] = _ref5;
|
|
6315
|
-
return Helper.getSiteNameFromRoles(site, roles);
|
|
6316
|
-
});
|
|
6317
|
-
setFailedSites(failed);
|
|
6318
|
-
var multiSiteResults = Object.entries(multiSiteResultsObj).filter(_ref6 => {
|
|
6319
|
-
var [, data] = _ref6;
|
|
6320
|
-
return data !== null;
|
|
6321
|
-
}).map(_ref7 => {
|
|
6322
|
-
var [site, data] = _ref7;
|
|
6323
|
-
return {
|
|
6324
|
-
site,
|
|
6325
|
-
data
|
|
6326
|
-
};
|
|
6327
|
-
});
|
|
6328
|
-
var buildComparison = (activityKey, countType) => multiSiteResults.map(result => ({
|
|
6329
|
-
name: Helper.getSiteNameFromRoles(result.site, roles),
|
|
6330
|
-
value: Analytics$1.countActivities(result.data, activityKey, countType)
|
|
6331
|
-
}));
|
|
6332
|
-
setComparisonData({
|
|
6333
|
-
requests: buildComparison("Request", "total"),
|
|
6334
|
-
completedRequests: buildComparison("RequestCompleted", "unique"),
|
|
6335
|
-
comments: buildComparison("Comment", "total"),
|
|
6336
|
-
isLoading: false
|
|
6337
|
-
});
|
|
6338
|
-
} else {
|
|
6339
|
-
setAnalyticsData(getInitialState());
|
|
6340
|
-
var site = selectedSites && selectedSites.length === 1 ? selectedSites[0] : auth.site;
|
|
6341
|
-
var timeDifference = endTime - startTime;
|
|
6342
|
-
var [currentStatsResponse, prevStatsResponse] = yield Promise.all([analyticsActions.getAggregateEntityStats(site, values.analyticsKey, startTime, endTime, true, {
|
|
6343
|
-
userType,
|
|
6344
|
-
userCategory
|
|
6345
|
-
}), analyticsActions.getAggregateEntityStats(site, values.analyticsKey, startTime - timeDifference, startTime, true, {
|
|
6232
|
+
const getData = async () => {
|
|
6233
|
+
try {
|
|
6234
|
+
setFailedSites([]);
|
|
6235
|
+
if (comparisonMode) {
|
|
6236
|
+
setComparisonData({
|
|
6237
|
+
requests: [],
|
|
6238
|
+
completedRequests: [],
|
|
6239
|
+
comments: [],
|
|
6240
|
+
isLoading: true
|
|
6241
|
+
});
|
|
6242
|
+
const multiSiteResultsObj = await Analytics$1.fetchMultiSiteData(selectedSites, async site => {
|
|
6243
|
+
const {
|
|
6244
|
+
data
|
|
6245
|
+
} = await analyticsActions.getAggregateEntityStats(site, values.analyticsKey, startTime, endTime, true, {
|
|
6346
6246
|
userType,
|
|
6347
6247
|
userCategory
|
|
6348
|
-
})
|
|
6349
|
-
|
|
6350
|
-
|
|
6351
|
-
|
|
6352
|
-
|
|
6353
|
-
|
|
6354
|
-
|
|
6355
|
-
|
|
6356
|
-
|
|
6248
|
+
});
|
|
6249
|
+
return data;
|
|
6250
|
+
});
|
|
6251
|
+
const roles = auth.user.Roles;
|
|
6252
|
+
const failed = Object.entries(multiSiteResultsObj).filter(_ref2 => {
|
|
6253
|
+
let [, data] = _ref2;
|
|
6254
|
+
return data === null;
|
|
6255
|
+
}).map(_ref3 => {
|
|
6256
|
+
let [site] = _ref3;
|
|
6257
|
+
return Helper.getSiteNameFromRoles(site, roles);
|
|
6258
|
+
});
|
|
6259
|
+
setFailedSites(failed);
|
|
6260
|
+
const multiSiteResults = Object.entries(multiSiteResultsObj).filter(_ref4 => {
|
|
6261
|
+
let [, data] = _ref4;
|
|
6262
|
+
return data !== null;
|
|
6263
|
+
}).map(_ref5 => {
|
|
6264
|
+
let [site, data] = _ref5;
|
|
6265
|
+
return {
|
|
6266
|
+
site,
|
|
6267
|
+
data
|
|
6357
6268
|
};
|
|
6358
|
-
|
|
6359
|
-
|
|
6360
|
-
|
|
6361
|
-
|
|
6362
|
-
|
|
6363
|
-
|
|
6364
|
-
|
|
6365
|
-
|
|
6366
|
-
|
|
6367
|
-
|
|
6368
|
-
|
|
6369
|
-
|
|
6269
|
+
});
|
|
6270
|
+
const buildComparison = (activityKey, countType) => multiSiteResults.map(result => ({
|
|
6271
|
+
name: Helper.getSiteNameFromRoles(result.site, roles),
|
|
6272
|
+
value: Analytics$1.countActivities(result.data, activityKey, countType)
|
|
6273
|
+
}));
|
|
6274
|
+
setComparisonData({
|
|
6275
|
+
requests: buildComparison("Request", "total"),
|
|
6276
|
+
completedRequests: buildComparison("RequestCompleted", "unique"),
|
|
6277
|
+
comments: buildComparison("Comment", "total"),
|
|
6278
|
+
isLoading: false
|
|
6279
|
+
});
|
|
6280
|
+
} else {
|
|
6281
|
+
setAnalyticsData(getInitialState());
|
|
6282
|
+
const site = selectedSites && selectedSites.length === 1 ? selectedSites[0] : auth.site;
|
|
6283
|
+
const timeDifference = endTime - startTime;
|
|
6284
|
+
const [currentStatsResponse, prevStatsResponse] = await Promise.all([analyticsActions.getAggregateEntityStats(site, values.analyticsKey, startTime, endTime, true, {
|
|
6285
|
+
userType,
|
|
6286
|
+
userCategory
|
|
6287
|
+
}), analyticsActions.getAggregateEntityStats(site, values.analyticsKey, startTime - timeDifference, startTime, true, {
|
|
6288
|
+
userType,
|
|
6289
|
+
userCategory
|
|
6290
|
+
})]);
|
|
6291
|
+
const data = {
|
|
6292
|
+
requests: Analytics$1.countActivities(currentStatsResponse.data, "Request", "total"),
|
|
6293
|
+
prevRequests: Analytics$1.countActivities(prevStatsResponse.data, "Request", "total"),
|
|
6294
|
+
completedRequests: Analytics$1.countActivities(currentStatsResponse.data, "RequestCompleted", "unique"),
|
|
6295
|
+
prevCompletedRequests: Analytics$1.countActivities(prevStatsResponse.data, "RequestCompleted", "unique"),
|
|
6296
|
+
comments: Analytics$1.countActivities(currentStatsResponse.data, "Comment", "total"),
|
|
6297
|
+
prevComments: Analytics$1.countActivities(prevStatsResponse.data, "Comment", "total"),
|
|
6298
|
+
isLoading: false
|
|
6299
|
+
};
|
|
6300
|
+
setAnalyticsData(data);
|
|
6370
6301
|
}
|
|
6371
|
-
})
|
|
6372
|
-
|
|
6373
|
-
|
|
6374
|
-
|
|
6375
|
-
|
|
6376
|
-
|
|
6302
|
+
} catch (err) {
|
|
6303
|
+
if (comparisonMode) {
|
|
6304
|
+
setComparisonData(prev => _objectSpread$3(_objectSpread$3({}, prev), {}, {
|
|
6305
|
+
isLoading: false
|
|
6306
|
+
}));
|
|
6307
|
+
} else {
|
|
6308
|
+
setAnalyticsData(prev => _objectSpread$3(_objectSpread$3({}, prev), {}, {
|
|
6309
|
+
isLoading: false
|
|
6310
|
+
}));
|
|
6311
|
+
}
|
|
6312
|
+
}
|
|
6313
|
+
};
|
|
6314
|
+
const isReadyToOpenCSV = () => {
|
|
6377
6315
|
return comparisonMode ? !comparisonData.isLoading : !analyticsData.isLoading;
|
|
6378
6316
|
};
|
|
6379
|
-
|
|
6317
|
+
const getExportSource = () => {
|
|
6380
6318
|
if (comparisonMode) {
|
|
6381
|
-
|
|
6319
|
+
const sites = comparisonData.requests || [];
|
|
6382
6320
|
return sites.map((site, i) => ({
|
|
6383
6321
|
site: site.name,
|
|
6384
6322
|
startDate: moment(startTime + 1).format("D-MM-YYYY"),
|
|
@@ -6396,12 +6334,12 @@ var AnalyticsHub = _ref => {
|
|
|
6396
6334
|
comments: analyticsData.comments
|
|
6397
6335
|
}];
|
|
6398
6336
|
};
|
|
6399
|
-
|
|
6337
|
+
const csvPopup = () => {
|
|
6400
6338
|
if (!isExportOpen) {
|
|
6401
6339
|
return null;
|
|
6402
6340
|
}
|
|
6403
|
-
|
|
6404
|
-
|
|
6341
|
+
const source = getExportSource();
|
|
6342
|
+
const filterSuffix = [userType, userCategory].filter(Boolean).map(f => f.toLowerCase().replace(/\s+/g, "-")).join("_");
|
|
6405
6343
|
return /*#__PURE__*/jsx(Components.ExportCsvPopup, {
|
|
6406
6344
|
onClose: () => {
|
|
6407
6345
|
setIsExportOpen(false);
|
|
@@ -6439,7 +6377,7 @@ var AnalyticsHub = _ref => {
|
|
|
6439
6377
|
}), /*#__PURE__*/jsx("div", {
|
|
6440
6378
|
className: "analyticsSection dashboardSection_content",
|
|
6441
6379
|
children: (() => {
|
|
6442
|
-
|
|
6380
|
+
const chartSuffix = [selectedSites && selectedSites.length > 0 ? "&sites=".concat(selectedSites.join(",")) : "", userType ? "&userType=".concat(encodeURIComponent(userType)) : "", userCategory ? "&userCategory=".concat(encodeURIComponent(userCategory)) : ""].join("");
|
|
6443
6381
|
if (comparisonMode) {
|
|
6444
6382
|
return /*#__PURE__*/jsxs("div", {
|
|
6445
6383
|
style: {
|
|
@@ -6499,8 +6437,8 @@ var AnalyticsHub = _ref => {
|
|
|
6499
6437
|
})]
|
|
6500
6438
|
});
|
|
6501
6439
|
};
|
|
6502
|
-
|
|
6503
|
-
|
|
6440
|
+
const mapStateToProps = state => {
|
|
6441
|
+
const {
|
|
6504
6442
|
auth
|
|
6505
6443
|
} = state;
|
|
6506
6444
|
return {
|
|
@@ -6508,11 +6446,11 @@ var mapStateToProps = state => {
|
|
|
6508
6446
|
strings: state.strings && state.strings.config || {}
|
|
6509
6447
|
};
|
|
6510
6448
|
};
|
|
6511
|
-
|
|
6449
|
+
const toExport = connect(mapStateToProps, {})(AnalyticsHub);
|
|
6512
6450
|
|
|
6513
6451
|
function ownKeys$2(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; }
|
|
6514
6452
|
function _objectSpread$2(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$2(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$2(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
6515
|
-
|
|
6453
|
+
const INITIAL_STATE = {
|
|
6516
6454
|
jobs: [],
|
|
6517
6455
|
jobtypes: [],
|
|
6518
6456
|
jobstatuses: jobStatusOptions,
|
|
@@ -6520,15 +6458,15 @@ var INITIAL_STATE = {
|
|
|
6520
6458
|
hideSeen: false
|
|
6521
6459
|
};
|
|
6522
6460
|
var MaintenanceReducer = (function () {
|
|
6523
|
-
|
|
6524
|
-
|
|
6461
|
+
let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : INITIAL_STATE;
|
|
6462
|
+
let action = arguments.length > 1 ? arguments[1] : undefined;
|
|
6525
6463
|
switch (action.type) {
|
|
6526
6464
|
case JOBS_LOADING:
|
|
6527
6465
|
return _objectSpread$2(_objectSpread$2({}, state), {}, {
|
|
6528
6466
|
loading: true
|
|
6529
6467
|
});
|
|
6530
6468
|
case JOBS_LOADED:
|
|
6531
|
-
|
|
6469
|
+
const result = _.unionWith(action.payload, state.jobs, (v1, v2) => {
|
|
6532
6470
|
return v1 != null && v2 != null && v1.id === v2.id;
|
|
6533
6471
|
});
|
|
6534
6472
|
return _objectSpread$2(_objectSpread$2({}, state), {}, {
|
|
@@ -6538,11 +6476,11 @@ var MaintenanceReducer = (function () {
|
|
|
6538
6476
|
loading: false
|
|
6539
6477
|
});
|
|
6540
6478
|
case JOBS_REMOVED:
|
|
6541
|
-
|
|
6479
|
+
const index = _.findIndex(state.jobs, event => {
|
|
6542
6480
|
return event != null && event.id === action.payload;
|
|
6543
6481
|
});
|
|
6544
6482
|
if (index > -1) {
|
|
6545
|
-
|
|
6483
|
+
const newJobs = [...state.jobs];
|
|
6546
6484
|
newJobs.splice(index, 1);
|
|
6547
6485
|
return _objectSpread$2(_objectSpread$2({}, state), {}, {
|
|
6548
6486
|
jobs: newJobs
|
|
@@ -6550,14 +6488,14 @@ var MaintenanceReducer = (function () {
|
|
|
6550
6488
|
}
|
|
6551
6489
|
return state;
|
|
6552
6490
|
case JOBS_TYPES_LOADED:
|
|
6553
|
-
|
|
6491
|
+
const jobtypes = _.unionWith(action.payload, state.jobtypes, (v1, v2) => {
|
|
6554
6492
|
return v1 != null && v2 != null && v1.id === v2.id;
|
|
6555
6493
|
});
|
|
6556
6494
|
return _objectSpread$2(_objectSpread$2({}, state), {}, {
|
|
6557
6495
|
jobtypes
|
|
6558
6496
|
});
|
|
6559
6497
|
case JOBS_STATUSES_LOADED:
|
|
6560
|
-
|
|
6498
|
+
const jobstatuses = _.orderBy(action.payload, "order", "asc");
|
|
6561
6499
|
return _objectSpread$2(_objectSpread$2({}, state), {}, {
|
|
6562
6500
|
jobstatuses
|
|
6563
6501
|
});
|
|
@@ -6572,7 +6510,7 @@ var MaintenanceReducer = (function () {
|
|
|
6572
6510
|
|
|
6573
6511
|
class ActivityText extends Component {
|
|
6574
6512
|
render() {
|
|
6575
|
-
|
|
6513
|
+
const {
|
|
6576
6514
|
data,
|
|
6577
6515
|
classes,
|
|
6578
6516
|
clickableClasses,
|
|
@@ -6648,7 +6586,7 @@ var img$3 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAxwAAAGGCAYAAADxZYcEA
|
|
|
6648
6586
|
|
|
6649
6587
|
class ViewWidget extends Component {
|
|
6650
6588
|
render() {
|
|
6651
|
-
|
|
6589
|
+
let src = img$3;
|
|
6652
6590
|
return /*#__PURE__*/jsx("img", {
|
|
6653
6591
|
style: styles$3.image,
|
|
6654
6592
|
src: src,
|
|
@@ -6656,7 +6594,7 @@ class ViewWidget extends Component {
|
|
|
6656
6594
|
});
|
|
6657
6595
|
}
|
|
6658
6596
|
}
|
|
6659
|
-
|
|
6597
|
+
const styles$3 = {
|
|
6660
6598
|
image: {
|
|
6661
6599
|
width: 80
|
|
6662
6600
|
}
|
|
@@ -6666,7 +6604,7 @@ var img$2 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAmAAAASICAYAAAC0rHMFA
|
|
|
6666
6604
|
|
|
6667
6605
|
class ViewFull extends Component {
|
|
6668
6606
|
render() {
|
|
6669
|
-
|
|
6607
|
+
let src = img$2;
|
|
6670
6608
|
return /*#__PURE__*/jsx("img", {
|
|
6671
6609
|
style: styles$2.image,
|
|
6672
6610
|
src: src,
|
|
@@ -6674,7 +6612,7 @@ class ViewFull extends Component {
|
|
|
6674
6612
|
});
|
|
6675
6613
|
}
|
|
6676
6614
|
}
|
|
6677
|
-
|
|
6615
|
+
const styles$2 = {
|
|
6678
6616
|
image: {
|
|
6679
6617
|
width: "100%",
|
|
6680
6618
|
height: "100%",
|
|
@@ -6688,12 +6626,12 @@ function ownKeys$1(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymb
|
|
|
6688
6626
|
function _objectSpread$1(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
6689
6627
|
class PreviewWidget extends Component {
|
|
6690
6628
|
render() {
|
|
6691
|
-
|
|
6629
|
+
const {
|
|
6692
6630
|
backgroundColor,
|
|
6693
6631
|
widgetTitle,
|
|
6694
6632
|
titleClassName
|
|
6695
6633
|
} = this.props;
|
|
6696
|
-
|
|
6634
|
+
let src = img$1;
|
|
6697
6635
|
return /*#__PURE__*/jsxs("div", {
|
|
6698
6636
|
style: styles$1.container,
|
|
6699
6637
|
children: [/*#__PURE__*/jsx("img", {
|
|
@@ -6710,7 +6648,7 @@ class PreviewWidget extends Component {
|
|
|
6710
6648
|
});
|
|
6711
6649
|
}
|
|
6712
6650
|
}
|
|
6713
|
-
|
|
6651
|
+
const styles$1 = {
|
|
6714
6652
|
container: {
|
|
6715
6653
|
position: "relative"
|
|
6716
6654
|
},
|
|
@@ -6725,12 +6663,12 @@ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbol
|
|
|
6725
6663
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
6726
6664
|
class PreviewFull extends Component {
|
|
6727
6665
|
render() {
|
|
6728
|
-
|
|
6666
|
+
const {
|
|
6729
6667
|
backgroundColor,
|
|
6730
6668
|
widgetTitle,
|
|
6731
6669
|
titleClassName
|
|
6732
6670
|
} = this.props;
|
|
6733
|
-
|
|
6671
|
+
let src = img;
|
|
6734
6672
|
return /*#__PURE__*/jsxs("div", {
|
|
6735
6673
|
style: styles.container,
|
|
6736
6674
|
children: [/*#__PURE__*/jsx("p", {
|
|
@@ -6746,7 +6684,7 @@ class PreviewFull extends Component {
|
|
|
6746
6684
|
});
|
|
6747
6685
|
}
|
|
6748
6686
|
}
|
|
6749
|
-
|
|
6687
|
+
const styles = {
|
|
6750
6688
|
container: {
|
|
6751
6689
|
position: "relative"
|
|
6752
6690
|
},
|
|
@@ -6755,11 +6693,11 @@ var styles = {
|
|
|
6755
6693
|
}
|
|
6756
6694
|
};
|
|
6757
6695
|
|
|
6758
|
-
|
|
6759
|
-
|
|
6696
|
+
const SVG_PATH = values.svgPathGridIcon;
|
|
6697
|
+
const SVG_VIEWBOX = values.svgPathGridIconViewBox ;
|
|
6760
6698
|
class PreviewGrid extends Component {
|
|
6761
6699
|
render() {
|
|
6762
|
-
|
|
6700
|
+
const {
|
|
6763
6701
|
colour
|
|
6764
6702
|
} = this.props;
|
|
6765
6703
|
if (Array.isArray(SVG_PATH)) {
|
|
@@ -6786,20 +6724,20 @@ class PreviewGrid extends Component {
|
|
|
6786
6724
|
}
|
|
6787
6725
|
}
|
|
6788
6726
|
|
|
6789
|
-
|
|
6790
|
-
|
|
6727
|
+
const Reducers = (() => {
|
|
6728
|
+
const reducers = {};
|
|
6791
6729
|
reducers[values.reducerKey] = MaintenanceReducer;
|
|
6792
6730
|
return reducers;
|
|
6793
6731
|
})();
|
|
6794
|
-
|
|
6795
|
-
|
|
6732
|
+
const Screens = (() => {
|
|
6733
|
+
const screens = {};
|
|
6796
6734
|
screens[values.screenRequestsHub] = RequestsHub$1;
|
|
6797
6735
|
screens[values.screenJob] = Job$1;
|
|
6798
6736
|
screens[values.screenAddJob] = AddJob$1;
|
|
6799
6737
|
screens[values.screenAddJobType] = AddJobType$1;
|
|
6800
6738
|
return screens;
|
|
6801
6739
|
})();
|
|
6802
|
-
|
|
6740
|
+
const Analytics = [toExport];
|
|
6803
6741
|
|
|
6804
6742
|
export { ActivityText, Analytics, FeatureConfig as Config, PreviewFull, PreviewGrid, PreviewWidget, Reducers, Screens, ViewFull, ViewWidget };
|
|
6805
6743
|
//# sourceMappingURL=index.js.map
|