@plusscommunities/pluss-maintenance-web-a 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: "maintenanceA",
|
|
18
17
|
aliases: ["maintenanceTrackingA", "maintenanceTypesA", "maintenancerequestA"],
|
|
19
18
|
serviceKey: "maintenanceA",
|
|
@@ -81,7 +80,7 @@ var values = {
|
|
|
81
80
|
};
|
|
82
81
|
|
|
83
82
|
// import * as PlussCore from '../../pluss-core/src';
|
|
84
|
-
|
|
83
|
+
const FeatureConfig = {
|
|
85
84
|
key: values.featureKey,
|
|
86
85
|
aliases: values.aliases,
|
|
87
86
|
singularName: values.textSingularName,
|
|
@@ -219,22 +218,22 @@ var FeatureConfig = {
|
|
|
219
218
|
notificationPreference: values.notificationPreference
|
|
220
219
|
};
|
|
221
220
|
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
221
|
+
const JOBS_LOADED = values.actionJobsLoaded;
|
|
222
|
+
const JOBS_LOADING = values.actionJobsLoading;
|
|
223
|
+
const JOBS_REMOVED = values.actionJobsRemoved;
|
|
224
|
+
const JOBS_TYPES_LOADED = values.actionJobsTypesLoaded;
|
|
225
|
+
const JOBS_STATUSES_LOADED = values.actionJobsStatusesLoaded;
|
|
226
|
+
const JOBS_HIDE_SEEN = values.actionJobsHideSeen;
|
|
228
227
|
|
|
229
228
|
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; }
|
|
230
229
|
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; }
|
|
231
|
-
|
|
230
|
+
const {
|
|
232
231
|
Helper: Helper$6,
|
|
233
232
|
Session: Session$9
|
|
234
233
|
} = PlussCore;
|
|
235
|
-
|
|
234
|
+
const maintenanceActions = {
|
|
236
235
|
getJobType: (site, typeId) => {
|
|
237
|
-
|
|
236
|
+
let url = Helper$6.getUrl(values.serviceKey, "getjobtype");
|
|
238
237
|
return Session$9.authedFunction({
|
|
239
238
|
method: "POST",
|
|
240
239
|
url,
|
|
@@ -245,7 +244,7 @@ var maintenanceActions = {
|
|
|
245
244
|
});
|
|
246
245
|
},
|
|
247
246
|
getJobTypes: (site, id) => {
|
|
248
|
-
|
|
247
|
+
let url = Helper$6.getUrl(values.serviceKey, "getjobtypes");
|
|
249
248
|
return Session$9.authedFunction({
|
|
250
249
|
method: "POST",
|
|
251
250
|
url,
|
|
@@ -255,7 +254,7 @@ var maintenanceActions = {
|
|
|
255
254
|
});
|
|
256
255
|
},
|
|
257
256
|
getJob: (site, id) => {
|
|
258
|
-
|
|
257
|
+
let url = Helper$6.getUrl(values.serviceKey, "getJob");
|
|
259
258
|
return Session$9.authedFunction({
|
|
260
259
|
method: "POST",
|
|
261
260
|
url,
|
|
@@ -266,7 +265,7 @@ var maintenanceActions = {
|
|
|
266
265
|
});
|
|
267
266
|
},
|
|
268
267
|
getJobByJobId: (site, jobId) => {
|
|
269
|
-
|
|
268
|
+
let url = Helper$6.getUrl(values.serviceKey, "getJob");
|
|
270
269
|
return Session$9.authedFunction({
|
|
271
270
|
method: "POST",
|
|
272
271
|
url,
|
|
@@ -276,9 +275,9 @@ var maintenanceActions = {
|
|
|
276
275
|
}
|
|
277
276
|
});
|
|
278
277
|
},
|
|
279
|
-
getJobs: function
|
|
280
|
-
|
|
281
|
-
|
|
278
|
+
getJobs: function (site) {
|
|
279
|
+
let status = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "";
|
|
280
|
+
let type = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "";
|
|
282
281
|
return Session$9.authedFunction({
|
|
283
282
|
method: "POST",
|
|
284
283
|
url: Helper$6.getUrl(values.serviceKey, "getJobs"),
|
|
@@ -290,7 +289,7 @@ var maintenanceActions = {
|
|
|
290
289
|
});
|
|
291
290
|
},
|
|
292
291
|
getJobs2: (site, status, type, lastKey) => {
|
|
293
|
-
|
|
292
|
+
const query = {
|
|
294
293
|
site
|
|
295
294
|
};
|
|
296
295
|
if (status) {
|
|
@@ -307,11 +306,11 @@ var maintenanceActions = {
|
|
|
307
306
|
url: Helper$6.getUrl(values.serviceKey, "get/requests", query)
|
|
308
307
|
});
|
|
309
308
|
},
|
|
310
|
-
getJobsRecursive: function
|
|
311
|
-
|
|
309
|
+
getJobsRecursive: function (site, status, type, lastKey) {
|
|
310
|
+
let jobs = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : [];
|
|
312
311
|
return new Promise(resolve => {
|
|
313
312
|
maintenanceActions.getJobs2(site, status, type, lastKey).then(jobRes => {
|
|
314
|
-
|
|
313
|
+
const newJobs = [...jobs, ...jobRes.data.Items];
|
|
315
314
|
if (!jobRes.data.LastKey) {
|
|
316
315
|
return resolve(newJobs);
|
|
317
316
|
}
|
|
@@ -423,7 +422,7 @@ var maintenanceActions = {
|
|
|
423
422
|
});
|
|
424
423
|
},
|
|
425
424
|
addJobType: (site, name, email, description, level, hasCustomFields, customFields) => {
|
|
426
|
-
|
|
425
|
+
const data = {
|
|
427
426
|
site,
|
|
428
427
|
name,
|
|
429
428
|
email,
|
|
@@ -439,7 +438,7 @@ var maintenanceActions = {
|
|
|
439
438
|
});
|
|
440
439
|
},
|
|
441
440
|
editJobType: (site, id, name, email, description, level, hasCustomFields, customFields) => {
|
|
442
|
-
|
|
441
|
+
const data = {
|
|
443
442
|
site,
|
|
444
443
|
id,
|
|
445
444
|
name,
|
|
@@ -485,13 +484,13 @@ var maintenanceActions = {
|
|
|
485
484
|
}
|
|
486
485
|
};
|
|
487
486
|
|
|
488
|
-
|
|
487
|
+
const {
|
|
489
488
|
Helper: Helper$5,
|
|
490
489
|
Session: Session$8
|
|
491
490
|
} = PlussCore;
|
|
492
|
-
|
|
491
|
+
const reactionActions = {
|
|
493
492
|
addComment: (entityId, entityType, entityName, site, comment, image, parentId) => {
|
|
494
|
-
|
|
493
|
+
const data = {
|
|
495
494
|
entityId,
|
|
496
495
|
entityType,
|
|
497
496
|
entityName,
|
|
@@ -518,7 +517,7 @@ var reactionActions = {
|
|
|
518
517
|
// });
|
|
519
518
|
// },
|
|
520
519
|
getComments: (entityId, entityType, minTime) => {
|
|
521
|
-
|
|
520
|
+
const query = {
|
|
522
521
|
entityId,
|
|
523
522
|
entityType
|
|
524
523
|
};
|
|
@@ -532,12 +531,12 @@ var reactionActions = {
|
|
|
532
531
|
}
|
|
533
532
|
};
|
|
534
533
|
|
|
535
|
-
|
|
534
|
+
const {
|
|
536
535
|
Apis: Apis$2
|
|
537
536
|
} = PlussCore;
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
537
|
+
const analyticsActions = Apis$2.analyticsActions;
|
|
538
|
+
const userActions = Apis$2.userActions;
|
|
539
|
+
const stringActions = Apis$2.stringActions;
|
|
541
540
|
|
|
542
541
|
var jobStatusOptions = [
|
|
543
542
|
{
|
|
@@ -560,16 +559,16 @@ var jobStatusOptions = [
|
|
|
560
559
|
}
|
|
561
560
|
];
|
|
562
561
|
|
|
563
|
-
|
|
562
|
+
const {
|
|
564
563
|
Helper: Helper$4
|
|
565
564
|
} = PlussCore;
|
|
566
|
-
|
|
565
|
+
const jobsUpdate = (site, isdashboard) => {
|
|
567
566
|
return dispatch => {
|
|
568
567
|
if (isdashboard) dispatch({
|
|
569
568
|
type: JOBS_LOADING
|
|
570
569
|
});
|
|
571
570
|
maintenanceActions.getJobsRecursive(site).then(res => {
|
|
572
|
-
|
|
571
|
+
const currentSite = Helper$4.readStorageWithCookie("site");
|
|
573
572
|
if (!_.isEmpty(res) && res[0].site === currentSite) {
|
|
574
573
|
dispatch({
|
|
575
574
|
type: JOBS_LOADED,
|
|
@@ -584,19 +583,19 @@ var jobsUpdate = (site, isdashboard) => {
|
|
|
584
583
|
});
|
|
585
584
|
};
|
|
586
585
|
};
|
|
587
|
-
|
|
586
|
+
const jobsLoaded = events => {
|
|
588
587
|
return {
|
|
589
588
|
type: JOBS_LOADED,
|
|
590
589
|
payload: events
|
|
591
590
|
};
|
|
592
591
|
};
|
|
593
|
-
|
|
592
|
+
const removeJob = id => {
|
|
594
593
|
return {
|
|
595
594
|
type: JOBS_REMOVED,
|
|
596
595
|
payload: id
|
|
597
596
|
};
|
|
598
597
|
};
|
|
599
|
-
|
|
598
|
+
const jobTypesUpdate = site => {
|
|
600
599
|
return dispatch => {
|
|
601
600
|
maintenanceActions.getJobTypes(site).then(res => {
|
|
602
601
|
dispatch({
|
|
@@ -606,14 +605,14 @@ var jobTypesUpdate = site => {
|
|
|
606
605
|
});
|
|
607
606
|
};
|
|
608
607
|
};
|
|
609
|
-
|
|
608
|
+
const jobTypesLoaded = events => {
|
|
610
609
|
return {
|
|
611
610
|
type: JOBS_TYPES_LOADED,
|
|
612
611
|
payload: events
|
|
613
612
|
};
|
|
614
613
|
};
|
|
615
|
-
|
|
616
|
-
|
|
614
|
+
const jobStatusesUpdate = function (site) {
|
|
615
|
+
let callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
|
|
617
616
|
return dispatch => {
|
|
618
617
|
stringActions.getString(site, values.stringConfigJobStatus).then(res => {
|
|
619
618
|
dispatch({
|
|
@@ -630,14 +629,14 @@ var jobStatusesUpdate = function jobStatusesUpdate(site) {
|
|
|
630
629
|
});
|
|
631
630
|
};
|
|
632
631
|
};
|
|
633
|
-
|
|
632
|
+
const jobStatusesLoaded = statuses => {
|
|
634
633
|
return {
|
|
635
634
|
type: JOBS_STATUSES_LOADED,
|
|
636
635
|
payload: statuses
|
|
637
636
|
};
|
|
638
637
|
};
|
|
639
|
-
|
|
640
|
-
|
|
638
|
+
const jobHideSeenUpdate = function (site) {
|
|
639
|
+
let callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
|
|
641
640
|
return dispatch => {
|
|
642
641
|
stringActions.getString(site, values.stringConfigHideSeen).then(res => {
|
|
643
642
|
dispatch({
|
|
@@ -654,7 +653,7 @@ var jobHideSeenUpdate = function jobHideSeenUpdate(site) {
|
|
|
654
653
|
});
|
|
655
654
|
};
|
|
656
655
|
};
|
|
657
|
-
|
|
656
|
+
const jobHideSeenLoaded = hide => {
|
|
658
657
|
return {
|
|
659
658
|
type: JOBS_HIDE_SEEN,
|
|
660
659
|
payload: hide
|
|
@@ -710,31 +709,29 @@ var jobPriorityOptions = [
|
|
|
710
709
|
}
|
|
711
710
|
];
|
|
712
711
|
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
712
|
+
const STATUS_IMCOMPLETE = "All Incomplete";
|
|
713
|
+
const STATUS_NOT_ACTIONED = "Not Actioned";
|
|
714
|
+
const STATUS_IN_PROGRESS = "In Progress";
|
|
715
|
+
const STATUS_COMPLETED = "Completed";
|
|
716
|
+
const getDefaultPriority = () => jobPriorityOptions.find(p => p.default);
|
|
717
|
+
const getJobPriority = priority => {
|
|
718
|
+
let priorityOption = null;
|
|
720
719
|
if (priority) priorityOption = jobPriorityOptions.find(p => p.name === priority);
|
|
721
720
|
return priorityOption || getDefaultPriority();
|
|
722
721
|
};
|
|
723
722
|
|
|
724
723
|
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; }
|
|
725
724
|
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; }
|
|
726
|
-
|
|
725
|
+
const {
|
|
727
726
|
Session: Session$7,
|
|
728
727
|
Components: Components$7,
|
|
729
728
|
Analytics: Analytics$2
|
|
730
729
|
} = PlussCore;
|
|
731
730
|
class JobList extends Component {
|
|
732
731
|
constructor(props) {
|
|
733
|
-
var _this;
|
|
734
732
|
super(props);
|
|
735
|
-
_this = this;
|
|
736
733
|
_defineProperty(this, "setRequesters", jobs => {
|
|
737
|
-
|
|
734
|
+
const requesters = _.orderBy(_.uniqBy(jobs.map(j => ({
|
|
738
735
|
id: j.userID,
|
|
739
736
|
displayName: j.userName,
|
|
740
737
|
profilePic: j.userProfilePic
|
|
@@ -743,32 +740,32 @@ class JobList extends Component {
|
|
|
743
740
|
requesters
|
|
744
741
|
});
|
|
745
742
|
});
|
|
746
|
-
_defineProperty(this, "getJobs",
|
|
747
|
-
|
|
743
|
+
_defineProperty(this, "getJobs", async () => {
|
|
744
|
+
const {
|
|
748
745
|
auth
|
|
749
|
-
} =
|
|
746
|
+
} = this.props;
|
|
750
747
|
try {
|
|
751
|
-
|
|
748
|
+
const res = await maintenanceActions.getJobsRecursive(auth.site);
|
|
752
749
|
if (!_.isEmpty(res) && res[0].site === auth.site) {
|
|
753
|
-
|
|
754
|
-
|
|
750
|
+
this.setRequesters(res);
|
|
751
|
+
this.props.jobsLoaded(res);
|
|
755
752
|
}
|
|
756
753
|
} catch (error) {
|
|
757
754
|
console.error("getJobs", error);
|
|
758
755
|
}
|
|
759
|
-
})
|
|
760
|
-
_defineProperty(this, "getAssignees",
|
|
756
|
+
});
|
|
757
|
+
_defineProperty(this, "getAssignees", async () => {
|
|
761
758
|
try {
|
|
762
|
-
|
|
763
|
-
|
|
759
|
+
const res = await maintenanceActions.getAssignees(this.props.auth.site);
|
|
760
|
+
this.setState({
|
|
764
761
|
assignees: res.data.Users
|
|
765
762
|
});
|
|
766
763
|
} catch (error) {
|
|
767
764
|
console.error("getAssignees", error);
|
|
768
765
|
}
|
|
769
|
-
})
|
|
766
|
+
});
|
|
770
767
|
_defineProperty(this, "sortByCol", col => {
|
|
771
|
-
|
|
768
|
+
const {
|
|
772
769
|
sortColumn,
|
|
773
770
|
sortDesc
|
|
774
771
|
} = this.state;
|
|
@@ -783,23 +780,18 @@ class JobList extends Component {
|
|
|
783
780
|
});
|
|
784
781
|
}
|
|
785
782
|
});
|
|
786
|
-
_defineProperty(this, "onRemoveRequest",
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
alert("Something went wrong with the request. Please try again.");
|
|
796
|
-
}
|
|
783
|
+
_defineProperty(this, "onRemoveRequest", async request => {
|
|
784
|
+
if (window.confirm(values.textAreYouSureYouWantToDelete)) {
|
|
785
|
+
this.props.removeJob(request.id);
|
|
786
|
+
try {
|
|
787
|
+
await maintenanceActions.deleteJob(this.props.auth.site, request.id);
|
|
788
|
+
this.getJobs();
|
|
789
|
+
} catch (error) {
|
|
790
|
+
console.log("onRemoveRequest", error);
|
|
791
|
+
alert("Something went wrong with the request. Please try again.");
|
|
797
792
|
}
|
|
798
|
-
}
|
|
799
|
-
|
|
800
|
-
return _ref3.apply(this, arguments);
|
|
801
|
-
};
|
|
802
|
-
}());
|
|
793
|
+
}
|
|
794
|
+
});
|
|
803
795
|
_defineProperty(this, "openFilter", filter => {
|
|
804
796
|
this.setState({
|
|
805
797
|
filterOpen: filter
|
|
@@ -852,15 +844,15 @@ class JobList extends Component {
|
|
|
852
844
|
if (!this.isValidTimeFilter()) {
|
|
853
845
|
return;
|
|
854
846
|
}
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
847
|
+
let startTime = 0;
|
|
848
|
+
let endTime = moment().endOf("d").valueOf();
|
|
849
|
+
let text = "";
|
|
858
850
|
if (this.state.selectedTimeFilter.dayCount > 0) {
|
|
859
851
|
startTime = moment().add(-this.state.selectedTimeFilter.dayCount, "d").startOf("d").valueOf();
|
|
860
852
|
text = this.state.selectedTimeFilter.text;
|
|
861
853
|
} else {
|
|
862
|
-
|
|
863
|
-
|
|
854
|
+
const startDate = moment(this.state.timeFilterStart).startOf("d");
|
|
855
|
+
const endDate = moment(this.state.timeFilterEnd).endOf("d");
|
|
864
856
|
startTime = startDate.valueOf();
|
|
865
857
|
endTime = endDate.valueOf();
|
|
866
858
|
text = "".concat(startDate.format("DD/MM/YYYY"), " to ").concat(endDate.format("DD/MM/YYYY"));
|
|
@@ -931,7 +923,7 @@ class JobList extends Component {
|
|
|
931
923
|
this.closeFilter();
|
|
932
924
|
});
|
|
933
925
|
_defineProperty(this, "onHandleSearchChange", event => {
|
|
934
|
-
|
|
926
|
+
const thisSearchTime = moment().valueOf();
|
|
935
927
|
this.setState({
|
|
936
928
|
search: event.target.value,
|
|
937
929
|
lastSearch: thisSearchTime
|
|
@@ -946,7 +938,7 @@ class JobList extends Component {
|
|
|
946
938
|
}, 500);
|
|
947
939
|
});
|
|
948
940
|
_defineProperty(this, "getSource", () => {
|
|
949
|
-
|
|
941
|
+
let source = this.props.source;
|
|
950
942
|
|
|
951
943
|
// filter by time
|
|
952
944
|
if (this.state.selectedTimeFilterStart && this.state.selectedTimeFilterEnd) {
|
|
@@ -964,7 +956,7 @@ class JobList extends Component {
|
|
|
964
956
|
|
|
965
957
|
// filter by priority
|
|
966
958
|
if (this.state.selectedPriorityFilter) {
|
|
967
|
-
|
|
959
|
+
const defaultPriority = getDefaultPriority().name;
|
|
968
960
|
source = _.filter(source, r => {
|
|
969
961
|
return r.priority === this.state.selectedPriorityFilter || this.state.selectedPriorityFilter === defaultPriority && _.isNil(r.priority);
|
|
970
962
|
});
|
|
@@ -972,12 +964,12 @@ class JobList extends Component {
|
|
|
972
964
|
|
|
973
965
|
// filter by status
|
|
974
966
|
if (this.state.selectedStatusFilter) {
|
|
975
|
-
|
|
967
|
+
const {
|
|
976
968
|
statusTypes
|
|
977
969
|
} = this.props;
|
|
978
|
-
|
|
970
|
+
const defaultStatus = statusTypes.find(s => s.category === STATUS_NOT_ACTIONED);
|
|
979
971
|
source = _.filter(source, r => {
|
|
980
|
-
|
|
972
|
+
const status = statusTypes.find(s => s.text === r.status) || defaultStatus;
|
|
981
973
|
if (this.state.selectedStatusFilter === STATUS_IMCOMPLETE) {
|
|
982
974
|
return status.category !== STATUS_COMPLETED;
|
|
983
975
|
}
|
|
@@ -1033,18 +1025,18 @@ class JobList extends Component {
|
|
|
1033
1025
|
}
|
|
1034
1026
|
});
|
|
1035
1027
|
_defineProperty(this, "getCustomFields", (job, customColumns) => {
|
|
1036
|
-
|
|
1028
|
+
const {
|
|
1037
1029
|
customFields,
|
|
1038
1030
|
type
|
|
1039
1031
|
} = job;
|
|
1040
|
-
|
|
1032
|
+
const customValues = {};
|
|
1041
1033
|
if (customFields && Array.isArray(customFields)) {
|
|
1042
1034
|
customFields.forEach(field => {
|
|
1043
1035
|
// Exclude un-exportable fields
|
|
1044
1036
|
if (["image", "document", "staticTitle", "staticText"].includes(field.type)) return;
|
|
1045
|
-
|
|
1037
|
+
const fieldKey = "".concat(_.camelCase(type), ".").concat(_.camelCase(field.label));
|
|
1046
1038
|
// Build custom columns
|
|
1047
|
-
|
|
1039
|
+
const exists = customColumns.find(c => c.key === fieldKey);
|
|
1048
1040
|
if (!exists) {
|
|
1049
1041
|
customColumns.push({
|
|
1050
1042
|
label: field.label,
|
|
@@ -1058,20 +1050,20 @@ class JobList extends Component {
|
|
|
1058
1050
|
return customValues;
|
|
1059
1051
|
});
|
|
1060
1052
|
_defineProperty(this, "getExportSource", () => {
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
|
|
1053
|
+
const customColumns = [];
|
|
1054
|
+
const defaultPriority = getDefaultPriority().name;
|
|
1055
|
+
const source = this.getSource().map(r => {
|
|
1056
|
+
const history = r.history || [];
|
|
1057
|
+
const progressEntry = _.find(history, e => {
|
|
1066
1058
|
return e.status !== "Unassigned";
|
|
1067
1059
|
});
|
|
1068
|
-
|
|
1060
|
+
const completedEntry = _.find(history, e => {
|
|
1069
1061
|
return e.status === "Completed";
|
|
1070
1062
|
});
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1063
|
+
let progressTime = null;
|
|
1064
|
+
let completedTime = null;
|
|
1065
|
+
let progressDuration = null;
|
|
1066
|
+
let completedDuration = null;
|
|
1075
1067
|
if (progressEntry) {
|
|
1076
1068
|
progressTime = moment.utc(progressEntry.timestamp).format();
|
|
1077
1069
|
progressDuration = moment.utc(progressEntry.timestamp).unix() - moment.utc(r.createdTime).unix();
|
|
@@ -1080,7 +1072,7 @@ class JobList extends Component {
|
|
|
1080
1072
|
completedTime = moment.utc(completedEntry.timestamp).format();
|
|
1081
1073
|
completedDuration = moment.utc(completedEntry.timestamp).unix() - moment.utc(r.createdTime).unix();
|
|
1082
1074
|
}
|
|
1083
|
-
|
|
1075
|
+
let notes = "";
|
|
1084
1076
|
(r.Notes || []).forEach((note, index) => {
|
|
1085
1077
|
if (index > 0) {
|
|
1086
1078
|
notes += "\n\n";
|
|
@@ -1093,8 +1085,8 @@ class JobList extends Component {
|
|
|
1093
1085
|
}
|
|
1094
1086
|
notes += note.Note;
|
|
1095
1087
|
});
|
|
1096
|
-
|
|
1097
|
-
|
|
1088
|
+
const customFieldValues = this.getCustomFields(r, customColumns);
|
|
1089
|
+
const priority = r.priority || defaultPriority;
|
|
1098
1090
|
return _objectSpread$7(_objectSpread$7(_objectSpread$7({}, r), customFieldValues), {}, {
|
|
1099
1091
|
notes,
|
|
1100
1092
|
progressTime,
|
|
@@ -1106,8 +1098,8 @@ class JobList extends Component {
|
|
|
1106
1098
|
});
|
|
1107
1099
|
|
|
1108
1100
|
// Compose revised columns list with custom fields
|
|
1109
|
-
|
|
1110
|
-
|
|
1101
|
+
const index = this.exportColumns.findIndex(c => c.key === "notes");
|
|
1102
|
+
const columns = [...this.exportColumns.slice(0, index), ...customColumns, ...this.exportColumns.slice(index)];
|
|
1111
1103
|
return {
|
|
1112
1104
|
columns,
|
|
1113
1105
|
source
|
|
@@ -1237,7 +1229,7 @@ class JobList extends Component {
|
|
|
1237
1229
|
});
|
|
1238
1230
|
}
|
|
1239
1231
|
if (this.state.filterOpen === "status") {
|
|
1240
|
-
|
|
1232
|
+
const {
|
|
1241
1233
|
statusTypes
|
|
1242
1234
|
} = this.props;
|
|
1243
1235
|
return /*#__PURE__*/jsx(Components$7.Popup, {
|
|
@@ -1283,7 +1275,7 @@ class JobList extends Component {
|
|
|
1283
1275
|
});
|
|
1284
1276
|
}
|
|
1285
1277
|
if (this.state.filterOpen === "user") {
|
|
1286
|
-
|
|
1278
|
+
let userContent = null;
|
|
1287
1279
|
if (this.state.selectedAssignee) {
|
|
1288
1280
|
userContent = /*#__PURE__*/jsx("div", {
|
|
1289
1281
|
children: /*#__PURE__*/jsx(Components$7.UserListing, {
|
|
@@ -1338,9 +1330,9 @@ class JobList extends Component {
|
|
|
1338
1330
|
});
|
|
1339
1331
|
}
|
|
1340
1332
|
if (this.state.filterOpen === "requester") {
|
|
1341
|
-
|
|
1333
|
+
let userContent = null;
|
|
1342
1334
|
if (this.state.selectedRequester) {
|
|
1343
|
-
|
|
1335
|
+
userContent = /*#__PURE__*/jsx("div", {
|
|
1344
1336
|
children: /*#__PURE__*/jsx(Components$7.UserListing, {
|
|
1345
1337
|
user: this.state.selectedRequester,
|
|
1346
1338
|
rightContent: /*#__PURE__*/jsx(Icon, {
|
|
@@ -1354,7 +1346,7 @@ class JobList extends Component {
|
|
|
1354
1346
|
}, this.state.selectedRequester.id)
|
|
1355
1347
|
});
|
|
1356
1348
|
} else {
|
|
1357
|
-
|
|
1349
|
+
userContent = /*#__PURE__*/jsxs("div", {
|
|
1358
1350
|
children: [/*#__PURE__*/jsx(Components$7.GenericInput, {
|
|
1359
1351
|
id: "requesterSearch",
|
|
1360
1352
|
type: "text"
|
|
@@ -1389,22 +1381,22 @@ class JobList extends Component {
|
|
|
1389
1381
|
text: "Select",
|
|
1390
1382
|
isActive: true
|
|
1391
1383
|
}],
|
|
1392
|
-
children:
|
|
1384
|
+
children: userContent
|
|
1393
1385
|
});
|
|
1394
1386
|
}
|
|
1395
1387
|
return null;
|
|
1396
1388
|
}
|
|
1397
1389
|
renderRequests() {
|
|
1398
|
-
|
|
1390
|
+
const {
|
|
1399
1391
|
statusTypes
|
|
1400
1392
|
} = this.props;
|
|
1401
|
-
|
|
1393
|
+
const defaultStatus = statusTypes.find(s => s.category === STATUS_NOT_ACTIONED);
|
|
1402
1394
|
return this.getSource().map((ev, index) => {
|
|
1403
1395
|
if (!ev) {
|
|
1404
1396
|
return null;
|
|
1405
1397
|
}
|
|
1406
|
-
|
|
1407
|
-
|
|
1398
|
+
const status = ev.status && statusTypes.find(s => s.text === ev.status) || defaultStatus;
|
|
1399
|
+
const priority = getJobPriority(ev.priority);
|
|
1408
1400
|
return /*#__PURE__*/jsxs("tr", {
|
|
1409
1401
|
children: [/*#__PURE__*/jsx("td", {
|
|
1410
1402
|
children: ev.jobId
|
|
@@ -1497,7 +1489,7 @@ class JobList extends Component {
|
|
|
1497
1489
|
});
|
|
1498
1490
|
}
|
|
1499
1491
|
renderSort(col) {
|
|
1500
|
-
|
|
1492
|
+
const {
|
|
1501
1493
|
sortColumn,
|
|
1502
1494
|
sortDesc
|
|
1503
1495
|
} = this.state;
|
|
@@ -1514,7 +1506,7 @@ class JobList extends Component {
|
|
|
1514
1506
|
return " table--columnActive";
|
|
1515
1507
|
}
|
|
1516
1508
|
renderEmpty() {
|
|
1517
|
-
|
|
1509
|
+
const title = this.props.strings["".concat(values.featureKey, "_textTitleRequests")] || values.textTitleRequests;
|
|
1518
1510
|
return /*#__PURE__*/jsxs("div", {
|
|
1519
1511
|
style: {
|
|
1520
1512
|
display: "flex",
|
|
@@ -1653,42 +1645,42 @@ class JobList extends Component {
|
|
|
1653
1645
|
});
|
|
1654
1646
|
}
|
|
1655
1647
|
renderFilters() {
|
|
1656
|
-
|
|
1648
|
+
let typeFilter = /*#__PURE__*/jsx(Components$7.Tag, {
|
|
1657
1649
|
className: "marginRight-10",
|
|
1658
1650
|
onClick: () => {
|
|
1659
1651
|
this.openFilter("type");
|
|
1660
1652
|
},
|
|
1661
1653
|
text: values.textJobType
|
|
1662
1654
|
});
|
|
1663
|
-
|
|
1655
|
+
let statusFilter = /*#__PURE__*/jsx(Components$7.Tag, {
|
|
1664
1656
|
className: "marginRight-10",
|
|
1665
1657
|
onClick: () => {
|
|
1666
1658
|
this.openFilter("status");
|
|
1667
1659
|
},
|
|
1668
1660
|
text: "Status"
|
|
1669
1661
|
});
|
|
1670
|
-
|
|
1662
|
+
let priorityFilter = /*#__PURE__*/jsx(Components$7.Tag, {
|
|
1671
1663
|
className: "marginRight-10",
|
|
1672
1664
|
onClick: () => {
|
|
1673
1665
|
this.openFilter("priority");
|
|
1674
1666
|
},
|
|
1675
1667
|
text: "Priority"
|
|
1676
1668
|
});
|
|
1677
|
-
|
|
1669
|
+
let timeFilter = /*#__PURE__*/jsx(Components$7.Tag, {
|
|
1678
1670
|
className: "marginRight-10",
|
|
1679
1671
|
onClick: () => {
|
|
1680
1672
|
this.openFilter("time");
|
|
1681
1673
|
},
|
|
1682
1674
|
text: "Time"
|
|
1683
1675
|
});
|
|
1684
|
-
|
|
1676
|
+
let userFilter = /*#__PURE__*/jsx(Components$7.Tag, {
|
|
1685
1677
|
className: "marginRight-10",
|
|
1686
1678
|
onClick: () => {
|
|
1687
1679
|
this.openFilter("user");
|
|
1688
1680
|
},
|
|
1689
1681
|
text: "Assigned To"
|
|
1690
1682
|
});
|
|
1691
|
-
|
|
1683
|
+
let requesterFilter = /*#__PURE__*/jsx(Components$7.Tag, {
|
|
1692
1684
|
className: "marginRight-10",
|
|
1693
1685
|
onClick: () => {
|
|
1694
1686
|
this.openFilter("requester");
|
|
@@ -1814,7 +1806,7 @@ class JobList extends Component {
|
|
|
1814
1806
|
if (!this.state.exportCsvOpen) {
|
|
1815
1807
|
return null;
|
|
1816
1808
|
}
|
|
1817
|
-
|
|
1809
|
+
const {
|
|
1818
1810
|
columns,
|
|
1819
1811
|
source
|
|
1820
1812
|
} = this.getExportSource();
|
|
@@ -1834,8 +1826,8 @@ class JobList extends Component {
|
|
|
1834
1826
|
});
|
|
1835
1827
|
}
|
|
1836
1828
|
}
|
|
1837
|
-
|
|
1838
|
-
|
|
1829
|
+
const mapStateToProps$7 = state => {
|
|
1830
|
+
const {
|
|
1839
1831
|
auth
|
|
1840
1832
|
} = state;
|
|
1841
1833
|
return {
|
|
@@ -1851,27 +1843,25 @@ var JobList$1 = connect(mapStateToProps$7, {
|
|
|
1851
1843
|
jobStatusesUpdate
|
|
1852
1844
|
})(withRouter(JobList));
|
|
1853
1845
|
|
|
1854
|
-
|
|
1846
|
+
const {
|
|
1855
1847
|
Session: Session$6,
|
|
1856
1848
|
Components: Components$6
|
|
1857
1849
|
} = PlussCore;
|
|
1858
1850
|
class JobTypes extends Component {
|
|
1859
1851
|
constructor(props) {
|
|
1860
|
-
var _this;
|
|
1861
1852
|
super(props);
|
|
1862
|
-
|
|
1863
|
-
_defineProperty(this, "getJobTypes", /*#__PURE__*/_asyncToGenerator(function* () {
|
|
1853
|
+
_defineProperty(this, "getJobTypes", async () => {
|
|
1864
1854
|
try {
|
|
1865
|
-
|
|
1866
|
-
if (res.data != null)
|
|
1855
|
+
const res = await maintenanceActions.getJobTypes(this.props.auth.site);
|
|
1856
|
+
if (res.data != null) this.props.jobTypesLoaded(res.data);
|
|
1867
1857
|
} catch (error) {
|
|
1868
1858
|
console.error("getJobTypes", error);
|
|
1869
1859
|
} finally {
|
|
1870
|
-
|
|
1860
|
+
this.setState({
|
|
1871
1861
|
loading: false
|
|
1872
1862
|
});
|
|
1873
1863
|
}
|
|
1874
|
-
})
|
|
1864
|
+
});
|
|
1875
1865
|
_defineProperty(this, "sortByCol", col => {
|
|
1876
1866
|
if (this.state.sortColumn === col) {
|
|
1877
1867
|
this.setState({
|
|
@@ -1884,28 +1874,23 @@ class JobTypes extends Component {
|
|
|
1884
1874
|
});
|
|
1885
1875
|
}
|
|
1886
1876
|
});
|
|
1887
|
-
_defineProperty(this, "onRemoveJobType",
|
|
1888
|
-
|
|
1889
|
-
|
|
1890
|
-
|
|
1891
|
-
|
|
1892
|
-
|
|
1893
|
-
|
|
1894
|
-
|
|
1895
|
-
|
|
1896
|
-
|
|
1897
|
-
|
|
1898
|
-
_this.props.jobTypesLoaded(newJobTypes);
|
|
1899
|
-
}
|
|
1900
|
-
} catch (error) {
|
|
1901
|
-
console.error("onRemoveJobType", error);
|
|
1902
|
-
alert("Something went wrong with the request. Please try again.");
|
|
1877
|
+
_defineProperty(this, "onRemoveJobType", async ev => {
|
|
1878
|
+
if (!window.confirm("Are you sure you want to delete ".concat(ev.typeName, "?"))) return;
|
|
1879
|
+
try {
|
|
1880
|
+
await maintenanceActions.deleteJobType(this.props.auth.site, ev.id);
|
|
1881
|
+
const index = _.findIndex(this.state.jobList, job => {
|
|
1882
|
+
return job != null && job.id === ev.id;
|
|
1883
|
+
});
|
|
1884
|
+
if (index > -1) {
|
|
1885
|
+
const newJobTypes = [...this.state.jobList];
|
|
1886
|
+
newJobTypes[index].Deleted = true;
|
|
1887
|
+
this.props.jobTypesLoaded(newJobTypes);
|
|
1903
1888
|
}
|
|
1904
|
-
})
|
|
1905
|
-
|
|
1906
|
-
|
|
1907
|
-
}
|
|
1908
|
-
}
|
|
1889
|
+
} catch (error) {
|
|
1890
|
+
console.error("onRemoveJobType", error);
|
|
1891
|
+
alert("Something went wrong with the request. Please try again.");
|
|
1892
|
+
}
|
|
1893
|
+
});
|
|
1909
1894
|
this.state = {
|
|
1910
1895
|
jobList: [],
|
|
1911
1896
|
sortColumn: "name",
|
|
@@ -1929,7 +1914,7 @@ class JobTypes extends Component {
|
|
|
1929
1914
|
});
|
|
1930
1915
|
}
|
|
1931
1916
|
renderList() {
|
|
1932
|
-
|
|
1917
|
+
let source = _.sortBy(this.state.jobList, this.state.sortColumn);
|
|
1933
1918
|
if (this.state.sortDesc) source.reverse();
|
|
1934
1919
|
source = _.filter(source, ev => {
|
|
1935
1920
|
if (!ev) return false;
|
|
@@ -2064,7 +2049,7 @@ class JobTypes extends Component {
|
|
|
2064
2049
|
return this.renderView();
|
|
2065
2050
|
}
|
|
2066
2051
|
renderJobTypes() {
|
|
2067
|
-
|
|
2052
|
+
const {
|
|
2068
2053
|
jobList,
|
|
2069
2054
|
loading
|
|
2070
2055
|
} = this.state;
|
|
@@ -2116,8 +2101,8 @@ class JobTypes extends Component {
|
|
|
2116
2101
|
});
|
|
2117
2102
|
}
|
|
2118
2103
|
}
|
|
2119
|
-
|
|
2120
|
-
|
|
2104
|
+
const mapStateToProps$6 = state => {
|
|
2105
|
+
const {
|
|
2121
2106
|
auth
|
|
2122
2107
|
} = state;
|
|
2123
2108
|
return {
|
|
@@ -2132,7 +2117,7 @@ var JobTypes$1 = connect(mapStateToProps$6, {
|
|
|
2132
2117
|
|
|
2133
2118
|
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; }
|
|
2134
2119
|
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; }
|
|
2135
|
-
|
|
2120
|
+
const {
|
|
2136
2121
|
Session: Session$5,
|
|
2137
2122
|
Components: Components$5,
|
|
2138
2123
|
Colours: Colours$3
|
|
@@ -2149,9 +2134,9 @@ class Configuration extends Component {
|
|
|
2149
2134
|
return true;
|
|
2150
2135
|
});
|
|
2151
2136
|
_defineProperty(this, "onMoveStatus", function (index) {
|
|
2152
|
-
|
|
2137
|
+
let up = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
2153
2138
|
if (_this.state.fetchingStatusTypes) return;
|
|
2154
|
-
|
|
2139
|
+
const statusTypes = _.cloneDeep(_this.state.statusTypes);
|
|
2155
2140
|
if (up && index > 0) {
|
|
2156
2141
|
// Moving up
|
|
2157
2142
|
[statusTypes[index - 1], statusTypes[index]] = [statusTypes[index], statusTypes[index - 1]];
|
|
@@ -2167,7 +2152,7 @@ class Configuration extends Component {
|
|
|
2167
2152
|
});
|
|
2168
2153
|
_defineProperty(this, "onEditStatus", index => {
|
|
2169
2154
|
if (this.state.fetchingStatusTypes) return;
|
|
2170
|
-
|
|
2155
|
+
const status = this.state.statusTypes[index];
|
|
2171
2156
|
this.setState({
|
|
2172
2157
|
showWarnings: false,
|
|
2173
2158
|
showStatusPopup: true,
|
|
@@ -2179,14 +2164,14 @@ class Configuration extends Component {
|
|
|
2179
2164
|
});
|
|
2180
2165
|
_defineProperty(this, "onDeleteStatus", index => {
|
|
2181
2166
|
if (this.state.fetchingStatusTypes) return;
|
|
2182
|
-
|
|
2167
|
+
const statusTypes = _.cloneDeep(this.state.statusTypes);
|
|
2183
2168
|
statusTypes.splice(index, 1);
|
|
2184
2169
|
this.setState({
|
|
2185
2170
|
statusTypes
|
|
2186
2171
|
});
|
|
2187
2172
|
});
|
|
2188
2173
|
_defineProperty(this, "onAddStatus", () => {
|
|
2189
|
-
|
|
2174
|
+
const defaultStatus = this.props.statusTypes.find(s => s.category === STATUS_NOT_ACTIONED);
|
|
2190
2175
|
this.setState({
|
|
2191
2176
|
showWarnings: false,
|
|
2192
2177
|
showStatusPopup: true,
|
|
@@ -2197,13 +2182,13 @@ class Configuration extends Component {
|
|
|
2197
2182
|
});
|
|
2198
2183
|
});
|
|
2199
2184
|
_defineProperty(this, "onSaveStatus", () => {
|
|
2200
|
-
|
|
2185
|
+
const {
|
|
2201
2186
|
selectedStatusIndex,
|
|
2202
2187
|
statusLabel,
|
|
2203
2188
|
statusCategory,
|
|
2204
2189
|
statusColour
|
|
2205
2190
|
} = this.state;
|
|
2206
|
-
|
|
2191
|
+
const statusTypes = _.cloneDeep(this.state.statusTypes);
|
|
2207
2192
|
if (selectedStatusIndex < 0) {
|
|
2208
2193
|
statusTypes.push({
|
|
2209
2194
|
text: statusLabel,
|
|
@@ -2212,7 +2197,7 @@ class Configuration extends Component {
|
|
|
2212
2197
|
category: statusCategory
|
|
2213
2198
|
});
|
|
2214
2199
|
} else {
|
|
2215
|
-
|
|
2200
|
+
const status = statusTypes[selectedStatusIndex];
|
|
2216
2201
|
status.text = statusLabel;
|
|
2217
2202
|
status.color = statusColour;
|
|
2218
2203
|
status.category = statusCategory;
|
|
@@ -2244,30 +2229,30 @@ class Configuration extends Component {
|
|
|
2244
2229
|
this.setState({
|
|
2245
2230
|
success: false,
|
|
2246
2231
|
submitting: true
|
|
2247
|
-
},
|
|
2232
|
+
}, async () => {
|
|
2248
2233
|
try {
|
|
2249
|
-
|
|
2234
|
+
const {
|
|
2250
2235
|
statusTypes,
|
|
2251
2236
|
hideSeen
|
|
2252
|
-
} =
|
|
2253
|
-
|
|
2254
|
-
|
|
2255
|
-
|
|
2256
|
-
|
|
2257
|
-
|
|
2237
|
+
} = this.state;
|
|
2238
|
+
await stringActions.setString(this.props.auth.site, values.stringConfigJobStatus, statusTypes);
|
|
2239
|
+
await stringActions.setString(this.props.auth.site, values.stringConfigHideSeen, hideSeen);
|
|
2240
|
+
this.props.jobStatusesLoaded(statusTypes);
|
|
2241
|
+
this.props.jobHideSeenLoaded(hideSeen);
|
|
2242
|
+
this.setState({
|
|
2258
2243
|
success: true
|
|
2259
2244
|
});
|
|
2260
2245
|
} catch (error) {
|
|
2261
2246
|
console.log("onSaveConfig - error", error);
|
|
2262
|
-
|
|
2247
|
+
this.setState({
|
|
2263
2248
|
success: false
|
|
2264
2249
|
});
|
|
2265
2250
|
} finally {
|
|
2266
|
-
|
|
2251
|
+
this.setState({
|
|
2267
2252
|
submitting: false
|
|
2268
2253
|
});
|
|
2269
2254
|
}
|
|
2270
|
-
})
|
|
2255
|
+
});
|
|
2271
2256
|
});
|
|
2272
2257
|
this.state = {
|
|
2273
2258
|
success: false,
|
|
@@ -2301,15 +2286,15 @@ class Configuration extends Component {
|
|
|
2301
2286
|
}
|
|
2302
2287
|
}
|
|
2303
2288
|
validateForm() {
|
|
2304
|
-
|
|
2289
|
+
const {
|
|
2305
2290
|
submitting,
|
|
2306
2291
|
statusTypes
|
|
2307
2292
|
} = this.state;
|
|
2308
2293
|
if (submitting) return false;
|
|
2309
2294
|
|
|
2310
2295
|
// Validate statuses
|
|
2311
|
-
|
|
2312
|
-
|
|
2296
|
+
const statusesValid = statusTypes.map(status => {
|
|
2297
|
+
const {
|
|
2313
2298
|
text,
|
|
2314
2299
|
category,
|
|
2315
2300
|
color
|
|
@@ -2320,7 +2305,7 @@ class Configuration extends Component {
|
|
|
2320
2305
|
return true;
|
|
2321
2306
|
}
|
|
2322
2307
|
renderStatuses() {
|
|
2323
|
-
|
|
2308
|
+
const {
|
|
2324
2309
|
statusTypes
|
|
2325
2310
|
} = this.state;
|
|
2326
2311
|
return /*#__PURE__*/jsxs("div", {
|
|
@@ -2432,7 +2417,7 @@ class Configuration extends Component {
|
|
|
2432
2417
|
});
|
|
2433
2418
|
}
|
|
2434
2419
|
renderNewStatusPopup() {
|
|
2435
|
-
|
|
2420
|
+
const {
|
|
2436
2421
|
submitting,
|
|
2437
2422
|
showStatusPopup,
|
|
2438
2423
|
showWarnings,
|
|
@@ -2442,7 +2427,7 @@ class Configuration extends Component {
|
|
|
2442
2427
|
statusColour
|
|
2443
2428
|
} = this.state;
|
|
2444
2429
|
if (!showStatusPopup) return null;
|
|
2445
|
-
|
|
2430
|
+
const canSave = !submitting && this.isStatusValid(statusLabel, statusCategory, statusColour);
|
|
2446
2431
|
return /*#__PURE__*/jsxs(Components$5.Popup, {
|
|
2447
2432
|
maxWidth: 800,
|
|
2448
2433
|
minWidth: 450,
|
|
@@ -2551,7 +2536,7 @@ class Configuration extends Component {
|
|
|
2551
2536
|
});
|
|
2552
2537
|
}
|
|
2553
2538
|
}
|
|
2554
|
-
|
|
2539
|
+
const styles$6 = {
|
|
2555
2540
|
statusCategoryHeading: {
|
|
2556
2541
|
marginLeft: 130,
|
|
2557
2542
|
width: 160,
|
|
@@ -2585,8 +2570,8 @@ var styles$6 = {
|
|
|
2585
2570
|
marginLeft: 15
|
|
2586
2571
|
}
|
|
2587
2572
|
};
|
|
2588
|
-
|
|
2589
|
-
|
|
2573
|
+
const mapStateToProps$5 = state => {
|
|
2574
|
+
const {
|
|
2590
2575
|
auth
|
|
2591
2576
|
} = state;
|
|
2592
2577
|
return {
|
|
@@ -2602,27 +2587,25 @@ var Configuration$1 = connect(mapStateToProps$5, {
|
|
|
2602
2587
|
jobHideSeenLoaded
|
|
2603
2588
|
})(withRouter(Configuration));
|
|
2604
2589
|
|
|
2605
|
-
|
|
2590
|
+
const {
|
|
2606
2591
|
Components: Components$4,
|
|
2607
2592
|
Session: Session$4,
|
|
2608
2593
|
Urls
|
|
2609
2594
|
} = PlussCore;
|
|
2610
2595
|
class RequestsHub extends Component {
|
|
2611
2596
|
constructor(props) {
|
|
2612
|
-
var _this;
|
|
2613
2597
|
super(props);
|
|
2614
|
-
_this = this;
|
|
2615
2598
|
_defineProperty(this, "setData", () => {
|
|
2616
|
-
|
|
2599
|
+
const allList = [];
|
|
2617
2600
|
this.state.allList.forEach(ev => {
|
|
2618
2601
|
if (ev != null && !ev.Deleted) allList.push(ev);
|
|
2619
2602
|
});
|
|
2620
|
-
|
|
2603
|
+
const upcoming = _.filter(allList, ev => {
|
|
2621
2604
|
if (!ev) return false;
|
|
2622
2605
|
if (ev.status && ev.status === "Completed") return false;
|
|
2623
2606
|
return true;
|
|
2624
2607
|
});
|
|
2625
|
-
|
|
2608
|
+
const completed = _.filter(allList, ev => {
|
|
2626
2609
|
if (!ev) return false;
|
|
2627
2610
|
if (ev.status && ev.status === "Completed") return true;
|
|
2628
2611
|
return false;
|
|
@@ -2636,30 +2619,30 @@ class RequestsHub extends Component {
|
|
|
2636
2619
|
});
|
|
2637
2620
|
});
|
|
2638
2621
|
_defineProperty(this, "getData", () => {
|
|
2639
|
-
|
|
2622
|
+
const {
|
|
2640
2623
|
auth
|
|
2641
2624
|
} = this.props;
|
|
2642
2625
|
this.setState({
|
|
2643
2626
|
loadingAll: true
|
|
2644
|
-
},
|
|
2627
|
+
}, async () => {
|
|
2645
2628
|
try {
|
|
2646
|
-
|
|
2647
|
-
|
|
2629
|
+
const res = await maintenanceActions.getJobsRecursive(auth.site);
|
|
2630
|
+
this.setState({
|
|
2648
2631
|
loadingAll: false
|
|
2649
2632
|
});
|
|
2650
2633
|
if (!_.isEmpty(res) && res[0].site === auth.site) {
|
|
2651
|
-
|
|
2634
|
+
this.props.jobsLoaded(res);
|
|
2652
2635
|
}
|
|
2653
2636
|
} catch (error) {
|
|
2654
2637
|
console.error("getData", error);
|
|
2655
|
-
|
|
2638
|
+
this.setState({
|
|
2656
2639
|
loadingAll: false
|
|
2657
2640
|
});
|
|
2658
2641
|
}
|
|
2659
|
-
})
|
|
2642
|
+
});
|
|
2660
2643
|
});
|
|
2661
2644
|
_defineProperty(this, "onAddNew", () => {
|
|
2662
|
-
|
|
2645
|
+
const {
|
|
2663
2646
|
auth
|
|
2664
2647
|
} = this.props;
|
|
2665
2648
|
if (Session$4.validateAccess(auth.site, values.permissionMaintenanceTracking, auth)) {
|
|
@@ -2667,7 +2650,7 @@ class RequestsHub extends Component {
|
|
|
2667
2650
|
}
|
|
2668
2651
|
});
|
|
2669
2652
|
_defineProperty(this, "onAddRequestType", () => {
|
|
2670
|
-
|
|
2653
|
+
const {
|
|
2671
2654
|
auth
|
|
2672
2655
|
} = this.props;
|
|
2673
2656
|
if (Session$4.validateAccess(auth.site, values.permissionMaintenanceTypes, auth)) {
|
|
@@ -2675,7 +2658,7 @@ class RequestsHub extends Component {
|
|
|
2675
2658
|
}
|
|
2676
2659
|
});
|
|
2677
2660
|
_defineProperty(this, "canAddNew", isClass => {
|
|
2678
|
-
|
|
2661
|
+
const {
|
|
2679
2662
|
auth
|
|
2680
2663
|
} = this.props;
|
|
2681
2664
|
if (Session$4.validateAccess(auth.site, values.permissionMaintenanceTracking, auth)) return isClass ? "" : true;
|
|
@@ -2719,7 +2702,7 @@ class RequestsHub extends Component {
|
|
|
2719
2702
|
}, this.setData);
|
|
2720
2703
|
}
|
|
2721
2704
|
renderLeftBar() {
|
|
2722
|
-
|
|
2705
|
+
const sectionItems = [];
|
|
2723
2706
|
if (this.canAddNew()) {
|
|
2724
2707
|
sectionItems.push({
|
|
2725
2708
|
type: "newButton",
|
|
@@ -2767,7 +2750,7 @@ class RequestsHub extends Component {
|
|
|
2767
2750
|
}
|
|
2768
2751
|
});
|
|
2769
2752
|
}
|
|
2770
|
-
|
|
2753
|
+
const helpGuide = values.hasHelpButton ? {
|
|
2771
2754
|
text: "Help with ".concat(values.textTitleRequests),
|
|
2772
2755
|
url: values.helpGuideURL || Urls.HelpGuide.Maintenance
|
|
2773
2756
|
} : null;
|
|
@@ -2804,7 +2787,7 @@ class RequestsHub extends Component {
|
|
|
2804
2787
|
});
|
|
2805
2788
|
}
|
|
2806
2789
|
}
|
|
2807
|
-
|
|
2790
|
+
const styles$5 = {
|
|
2808
2791
|
sideBarTitleSection: {
|
|
2809
2792
|
lineHeight: "40px",
|
|
2810
2793
|
marginTop: 30,
|
|
@@ -2827,8 +2810,8 @@ var styles$5 = {
|
|
|
2827
2810
|
color: FeatureConfig.env.colourBrandingOff
|
|
2828
2811
|
}
|
|
2829
2812
|
};
|
|
2830
|
-
|
|
2831
|
-
|
|
2813
|
+
const mapStateToProps$4 = state => {
|
|
2814
|
+
const {
|
|
2832
2815
|
auth
|
|
2833
2816
|
} = state;
|
|
2834
2817
|
return {
|
|
@@ -2843,48 +2826,46 @@ var RequestsHub$1 = connect(mapStateToProps$4, {
|
|
|
2843
2826
|
|
|
2844
2827
|
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; }
|
|
2845
2828
|
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; }
|
|
2846
|
-
|
|
2829
|
+
const {
|
|
2847
2830
|
Apis: Apis$1,
|
|
2848
2831
|
Helper: Helper$3,
|
|
2849
2832
|
Session: Session$3,
|
|
2850
2833
|
Colours: Colours$2,
|
|
2851
2834
|
Components: Components$3
|
|
2852
2835
|
} = PlussCore;
|
|
2853
|
-
|
|
2836
|
+
const IMAGE_SIZE_NOTE = 72;
|
|
2854
2837
|
class Job extends Component {
|
|
2855
2838
|
constructor(props) {
|
|
2856
|
-
var _this;
|
|
2857
2839
|
super(props);
|
|
2858
|
-
|
|
2859
|
-
_defineProperty(this, "getJob", /*#__PURE__*/_asyncToGenerator(function* () {
|
|
2840
|
+
_defineProperty(this, "getJob", async () => {
|
|
2860
2841
|
try {
|
|
2861
|
-
|
|
2862
|
-
|
|
2842
|
+
const res = await maintenanceActions.getJob(this.props.auth.site, this.state.jobId);
|
|
2843
|
+
this.setState({
|
|
2863
2844
|
updating: false
|
|
2864
2845
|
});
|
|
2865
2846
|
res.data.location = res.data.site;
|
|
2866
|
-
|
|
2847
|
+
this.setJob(res.data);
|
|
2867
2848
|
} catch (error) {
|
|
2868
2849
|
console.error("getJob", error);
|
|
2869
2850
|
}
|
|
2870
|
-
})
|
|
2871
|
-
_defineProperty(this, "getAssignees",
|
|
2851
|
+
});
|
|
2852
|
+
_defineProperty(this, "getAssignees", async () => {
|
|
2872
2853
|
try {
|
|
2873
|
-
|
|
2874
|
-
|
|
2854
|
+
const res = await maintenanceActions.getAssignees(this.props.auth.site);
|
|
2855
|
+
this.setState({
|
|
2875
2856
|
assignees: res.data.Users
|
|
2876
2857
|
});
|
|
2877
2858
|
} catch (error) {
|
|
2878
2859
|
console.error("getAssignees", error);
|
|
2879
2860
|
}
|
|
2880
|
-
})
|
|
2881
|
-
_defineProperty(this, "getExternalSync",
|
|
2861
|
+
});
|
|
2862
|
+
_defineProperty(this, "getExternalSync", async () => {
|
|
2882
2863
|
try {
|
|
2883
|
-
|
|
2864
|
+
this.setState({
|
|
2884
2865
|
loadingExternalSync: true
|
|
2885
2866
|
});
|
|
2886
|
-
|
|
2887
|
-
|
|
2867
|
+
const res = await maintenanceActions.getExternalSync(this.state.jobId);
|
|
2868
|
+
this.setState({
|
|
2888
2869
|
externalSync: res.data,
|
|
2889
2870
|
loadingExternalSync: false
|
|
2890
2871
|
});
|
|
@@ -2893,44 +2874,44 @@ class Job extends Component {
|
|
|
2893
2874
|
if (error && error.response && error.response.status !== 404) {
|
|
2894
2875
|
console.error("getExternalSync", error);
|
|
2895
2876
|
}
|
|
2896
|
-
|
|
2877
|
+
this.setState({
|
|
2897
2878
|
loadingExternalSync: false
|
|
2898
2879
|
});
|
|
2899
2880
|
}
|
|
2900
|
-
})
|
|
2901
|
-
_defineProperty(this, "onRetrySync",
|
|
2902
|
-
|
|
2881
|
+
});
|
|
2882
|
+
_defineProperty(this, "onRetrySync", async () => {
|
|
2883
|
+
const {
|
|
2903
2884
|
job
|
|
2904
|
-
} =
|
|
2905
|
-
if (!job ||
|
|
2906
|
-
|
|
2885
|
+
} = this.state;
|
|
2886
|
+
if (!job || this.state.retryingSync) return;
|
|
2887
|
+
this.setState({
|
|
2907
2888
|
retryingSync: true,
|
|
2908
2889
|
retrySyncError: null
|
|
2909
2890
|
});
|
|
2910
2891
|
try {
|
|
2911
|
-
|
|
2892
|
+
await maintenanceActions.retrySync(job.id);
|
|
2912
2893
|
// Refresh job data to get updated history
|
|
2913
|
-
|
|
2914
|
-
|
|
2894
|
+
await this.getJob();
|
|
2895
|
+
this.setState({
|
|
2915
2896
|
retryingSync: false,
|
|
2916
2897
|
retrySyncInitiated: true
|
|
2917
2898
|
});
|
|
2918
2899
|
} catch (error) {
|
|
2919
2900
|
console.error("onRetrySync", error);
|
|
2920
|
-
|
|
2921
|
-
|
|
2901
|
+
const errorMessage = error && error.response && error.response.data && error.response.data.error || "Failed to retry sync. Please try again.";
|
|
2902
|
+
this.setState({
|
|
2922
2903
|
retryingSync: false,
|
|
2923
2904
|
retrySyncError: errorMessage
|
|
2924
2905
|
});
|
|
2925
2906
|
}
|
|
2926
|
-
})
|
|
2907
|
+
});
|
|
2927
2908
|
_defineProperty(this, "getStatusType", status => {
|
|
2928
|
-
|
|
2909
|
+
const {
|
|
2929
2910
|
statusTypes
|
|
2930
2911
|
} = this.props;
|
|
2931
|
-
|
|
2912
|
+
let statusType = statusTypes.find(s => s.text === status);
|
|
2932
2913
|
if (!statusType) {
|
|
2933
|
-
|
|
2914
|
+
const defaultStatus = statusTypes.find(s => s.category === STATUS_NOT_ACTIONED);
|
|
2934
2915
|
statusType = _objectSpread$5(_objectSpread$5({}, defaultStatus), {}, {
|
|
2935
2916
|
text: status
|
|
2936
2917
|
});
|
|
@@ -2952,7 +2933,7 @@ class Job extends Component {
|
|
|
2952
2933
|
isEmpty: true
|
|
2953
2934
|
}];
|
|
2954
2935
|
}
|
|
2955
|
-
|
|
2936
|
+
let needToMarkSeen = false;
|
|
2956
2937
|
if (!job.seen) {
|
|
2957
2938
|
job.seen = true;
|
|
2958
2939
|
needToMarkSeen = true;
|
|
@@ -2966,7 +2947,7 @@ class Job extends Component {
|
|
|
2966
2947
|
});
|
|
2967
2948
|
_defineProperty(this, "editJob", () => {});
|
|
2968
2949
|
_defineProperty(this, "isReadyToSaveNote", () => {
|
|
2969
|
-
|
|
2950
|
+
const {
|
|
2970
2951
|
noteAttachments,
|
|
2971
2952
|
noteInput,
|
|
2972
2953
|
noteImages
|
|
@@ -2981,7 +2962,7 @@ class Job extends Component {
|
|
|
2981
2962
|
});
|
|
2982
2963
|
});
|
|
2983
2964
|
_defineProperty(this, "onCloseAddNote", () => {
|
|
2984
|
-
|
|
2965
|
+
const newState = {
|
|
2985
2966
|
addNoteOpen: false,
|
|
2986
2967
|
editingNote: null
|
|
2987
2968
|
};
|
|
@@ -3004,10 +2985,10 @@ class Job extends Component {
|
|
|
3004
2985
|
}
|
|
3005
2986
|
});
|
|
3006
2987
|
_defineProperty(this, "onHandlePDFFileChange", event => {
|
|
3007
|
-
|
|
2988
|
+
const file = event.target.files[0];
|
|
3008
2989
|
if (!file || this.state.uploadingNoteAttachment) return;
|
|
3009
|
-
|
|
3010
|
-
|
|
2990
|
+
const noteAttachments = [...this.state.noteAttachments];
|
|
2991
|
+
const newAttachment = {
|
|
3011
2992
|
Uploading: true,
|
|
3012
2993
|
Title: file.name
|
|
3013
2994
|
};
|
|
@@ -3031,9 +3012,9 @@ class Job extends Component {
|
|
|
3031
3012
|
event.target.value = "";
|
|
3032
3013
|
});
|
|
3033
3014
|
_defineProperty(this, "onRemoveAttachment", a => {
|
|
3034
|
-
|
|
3015
|
+
const index = this.state.noteAttachments.indexOf(a);
|
|
3035
3016
|
if (index > -1) {
|
|
3036
|
-
|
|
3017
|
+
const newAttachments = [...this.state.noteAttachments];
|
|
3037
3018
|
newAttachments.splice(index, 1);
|
|
3038
3019
|
this.setState({
|
|
3039
3020
|
noteAttachments: newAttachments
|
|
@@ -3055,54 +3036,49 @@ class Job extends Component {
|
|
|
3055
3036
|
selectedAssignee: user
|
|
3056
3037
|
});
|
|
3057
3038
|
});
|
|
3058
|
-
_defineProperty(this, "onConfirmAssignee",
|
|
3059
|
-
|
|
3039
|
+
_defineProperty(this, "onConfirmAssignee", async () => {
|
|
3040
|
+
this.setState({
|
|
3060
3041
|
confirmingAssignee: true
|
|
3061
3042
|
});
|
|
3062
3043
|
try {
|
|
3063
|
-
if (
|
|
3064
|
-
|
|
3044
|
+
if (this.state.selectedAssignee) {
|
|
3045
|
+
await this.onAssignUser(this.state.selectedAssignee.id);
|
|
3065
3046
|
}
|
|
3066
|
-
|
|
3047
|
+
this.onCloseSelectAssignee();
|
|
3067
3048
|
} catch (error) {
|
|
3068
3049
|
console.error("onConfirmAssignee", error);
|
|
3069
3050
|
}
|
|
3070
|
-
|
|
3051
|
+
this.setState({
|
|
3071
3052
|
confirmingAssignee: false
|
|
3072
3053
|
});
|
|
3073
|
-
})
|
|
3054
|
+
});
|
|
3074
3055
|
// Method to handle user assignment
|
|
3075
|
-
_defineProperty(this, "onAssignUser",
|
|
3076
|
-
|
|
3077
|
-
|
|
3078
|
-
|
|
3079
|
-
|
|
3080
|
-
|
|
3081
|
-
|
|
3082
|
-
|
|
3083
|
-
|
|
3084
|
-
|
|
3085
|
-
return _ref6.apply(this, arguments);
|
|
3086
|
-
};
|
|
3087
|
-
}());
|
|
3088
|
-
_defineProperty(this, "onConfirmAddNote", /*#__PURE__*/_asyncToGenerator(function* () {
|
|
3089
|
-
if (!_this.isReadyToSaveNote()) return;
|
|
3056
|
+
_defineProperty(this, "onAssignUser", async userId => {
|
|
3057
|
+
try {
|
|
3058
|
+
const res = await maintenanceActions.assignJob(this.state.jobId, userId);
|
|
3059
|
+
this.getJob();
|
|
3060
|
+
} catch (err) {
|
|
3061
|
+
console.error("onAssignUser", err);
|
|
3062
|
+
}
|
|
3063
|
+
});
|
|
3064
|
+
_defineProperty(this, "onConfirmAddNote", async () => {
|
|
3065
|
+
if (!this.isReadyToSaveNote()) return;
|
|
3090
3066
|
try {
|
|
3091
|
-
|
|
3067
|
+
this.setState({
|
|
3092
3068
|
submittingNote: true
|
|
3093
3069
|
});
|
|
3094
|
-
|
|
3070
|
+
const res = await (this.state.editingNote ? maintenanceActions.editNote(this.state.jobId, this.state.editingNote, this.state.noteInput, this.state.noteAttachments.map(a => {
|
|
3095
3071
|
return {
|
|
3096
3072
|
Title: a.Title,
|
|
3097
3073
|
Source: a.Source
|
|
3098
3074
|
};
|
|
3099
|
-
}),
|
|
3075
|
+
}), this.state.noteImages) : maintenanceActions.addNote(this.state.jobId, this.state.noteInput, this.state.noteAttachments.map(a => {
|
|
3100
3076
|
return {
|
|
3101
3077
|
Title: a.Title,
|
|
3102
3078
|
Source: a.Source
|
|
3103
3079
|
};
|
|
3104
|
-
}),
|
|
3105
|
-
|
|
3080
|
+
}), this.state.noteImages));
|
|
3081
|
+
this.setState({
|
|
3106
3082
|
job: res.data.job,
|
|
3107
3083
|
submittingNote: false,
|
|
3108
3084
|
addNoteOpen: false,
|
|
@@ -3111,12 +3087,12 @@ class Job extends Component {
|
|
|
3111
3087
|
noteImages: [],
|
|
3112
3088
|
editingNote: null
|
|
3113
3089
|
}, () => {
|
|
3114
|
-
|
|
3090
|
+
this.props.jobsLoaded([this.state.job]);
|
|
3115
3091
|
});
|
|
3116
3092
|
} catch (err) {
|
|
3117
3093
|
console.error("onConfirmAddNote", err);
|
|
3118
3094
|
}
|
|
3119
|
-
})
|
|
3095
|
+
});
|
|
3120
3096
|
_defineProperty(this, "onDeleteNote", n => {
|
|
3121
3097
|
if (!window.confirm(values.textAreYouSureYouWantToDeleteNote)) {
|
|
3122
3098
|
this.setState({
|
|
@@ -3125,8 +3101,8 @@ class Job extends Component {
|
|
|
3125
3101
|
return;
|
|
3126
3102
|
}
|
|
3127
3103
|
maintenanceActions.deleteNote(this.state.jobId, n.Id);
|
|
3128
|
-
|
|
3129
|
-
|
|
3104
|
+
const newNotes = _.filter(this.state.job.Notes, note => note.Id !== n.Id);
|
|
3105
|
+
const newJob = _objectSpread$5({}, this.state.job);
|
|
3130
3106
|
newJob.Notes = newNotes;
|
|
3131
3107
|
this.setState({
|
|
3132
3108
|
job: newJob,
|
|
@@ -3144,10 +3120,10 @@ class Job extends Component {
|
|
|
3144
3120
|
}, this.checkSetImage);
|
|
3145
3121
|
});
|
|
3146
3122
|
_defineProperty(this, "markSeen", () => {
|
|
3147
|
-
|
|
3123
|
+
const {
|
|
3148
3124
|
job
|
|
3149
3125
|
} = this.state;
|
|
3150
|
-
|
|
3126
|
+
const {
|
|
3151
3127
|
auth
|
|
3152
3128
|
} = this.props;
|
|
3153
3129
|
// Must have maintenance permission and not the requester
|
|
@@ -3155,22 +3131,22 @@ class Job extends Component {
|
|
|
3155
3131
|
if (auth.user.Id === job.userID) return;
|
|
3156
3132
|
this.setState({
|
|
3157
3133
|
updating: true
|
|
3158
|
-
},
|
|
3134
|
+
}, async () => {
|
|
3159
3135
|
try {
|
|
3160
|
-
|
|
3136
|
+
const update = {
|
|
3161
3137
|
id: job.id,
|
|
3162
3138
|
seen: true,
|
|
3163
3139
|
status: job.status || "Unassigned"
|
|
3164
3140
|
};
|
|
3165
|
-
|
|
3141
|
+
await maintenanceActions.editJob(update, auth.site);
|
|
3166
3142
|
} catch (error) {
|
|
3167
|
-
|
|
3143
|
+
this.setState({
|
|
3168
3144
|
updating: false
|
|
3169
3145
|
});
|
|
3170
3146
|
console.log("markSeen error", error);
|
|
3171
3147
|
alert("Something went wrong with the request. Please try again.");
|
|
3172
3148
|
}
|
|
3173
|
-
})
|
|
3149
|
+
});
|
|
3174
3150
|
});
|
|
3175
3151
|
_defineProperty(this, "getComments", () => {
|
|
3176
3152
|
reactionActions.getComments(this.state.jobId, values.commentKey, 0).then(res => {
|
|
@@ -3179,25 +3155,25 @@ class Job extends Component {
|
|
|
3179
3155
|
});
|
|
3180
3156
|
});
|
|
3181
3157
|
});
|
|
3182
|
-
_defineProperty(this, "onAddComment",
|
|
3183
|
-
|
|
3158
|
+
_defineProperty(this, "onAddComment", async () => {
|
|
3159
|
+
const {
|
|
3184
3160
|
commentInput,
|
|
3185
3161
|
jobId,
|
|
3186
3162
|
job,
|
|
3187
3163
|
comments
|
|
3188
|
-
} =
|
|
3164
|
+
} = this.state;
|
|
3189
3165
|
try {
|
|
3190
|
-
|
|
3166
|
+
this.setState({
|
|
3191
3167
|
commentInput: ""
|
|
3192
3168
|
});
|
|
3193
|
-
|
|
3194
|
-
|
|
3169
|
+
const res = await reactionActions.addComment(jobId, values.commentKey, job.title, job.site, commentInput);
|
|
3170
|
+
this.setState({
|
|
3195
3171
|
comments: [...comments, res.data]
|
|
3196
3172
|
});
|
|
3197
3173
|
} catch (error) {
|
|
3198
3174
|
console.error("onAddComment", error);
|
|
3199
3175
|
}
|
|
3200
|
-
})
|
|
3176
|
+
});
|
|
3201
3177
|
_defineProperty(this, "onHandleChange", event => {
|
|
3202
3178
|
var stateChange = {};
|
|
3203
3179
|
stateChange[event.target.getAttribute("id")] = event.target.value;
|
|
@@ -3208,61 +3184,51 @@ class Job extends Component {
|
|
|
3208
3184
|
priorityChangerOpen: !this.state.priorityChangerOpen
|
|
3209
3185
|
});
|
|
3210
3186
|
});
|
|
3211
|
-
_defineProperty(this, "onSelectPriority",
|
|
3212
|
-
|
|
3213
|
-
|
|
3214
|
-
|
|
3215
|
-
|
|
3216
|
-
|
|
3217
|
-
priorityChangerOpen: false
|
|
3218
|
-
});
|
|
3219
|
-
try {
|
|
3220
|
-
var res = yield maintenanceActions.editJobPriority(_this.state.job.id, priority);
|
|
3221
|
-
var {
|
|
3222
|
-
job
|
|
3223
|
-
} = res.data;
|
|
3224
|
-
_this.props.jobsLoaded([job]);
|
|
3225
|
-
_this.setState({
|
|
3226
|
-
job
|
|
3227
|
-
});
|
|
3228
|
-
} catch (error) {
|
|
3229
|
-
console.error("onSelectPriority", error);
|
|
3230
|
-
}
|
|
3187
|
+
_defineProperty(this, "onSelectPriority", async priority => {
|
|
3188
|
+
this.setState({
|
|
3189
|
+
job: _objectSpread$5(_objectSpread$5({}, this.state.job), {}, {
|
|
3190
|
+
priority
|
|
3191
|
+
}),
|
|
3192
|
+
priorityChangerOpen: false
|
|
3231
3193
|
});
|
|
3232
|
-
|
|
3233
|
-
|
|
3234
|
-
|
|
3235
|
-
|
|
3194
|
+
try {
|
|
3195
|
+
const res = await maintenanceActions.editJobPriority(this.state.job.id, priority);
|
|
3196
|
+
const {
|
|
3197
|
+
job
|
|
3198
|
+
} = res.data;
|
|
3199
|
+
this.props.jobsLoaded([job]);
|
|
3200
|
+
this.setState({
|
|
3201
|
+
job
|
|
3202
|
+
});
|
|
3203
|
+
} catch (error) {
|
|
3204
|
+
console.error("onSelectPriority", error);
|
|
3205
|
+
}
|
|
3206
|
+
});
|
|
3236
3207
|
_defineProperty(this, "onToggleStatusChanger", () => {
|
|
3237
3208
|
this.setState({
|
|
3238
3209
|
statusChangerOpen: !this.state.statusChangerOpen
|
|
3239
3210
|
});
|
|
3240
3211
|
});
|
|
3241
|
-
_defineProperty(this, "onSelectStatus",
|
|
3242
|
-
|
|
3243
|
-
|
|
3244
|
-
|
|
3245
|
-
|
|
3246
|
-
|
|
3247
|
-
statusChangerOpen: false
|
|
3248
|
-
});
|
|
3249
|
-
try {
|
|
3250
|
-
var res = yield maintenanceActions.editJobStatus(_this.state.job.id, status);
|
|
3251
|
-
var {
|
|
3252
|
-
job
|
|
3253
|
-
} = res.data;
|
|
3254
|
-
_this.props.jobsLoaded([job]);
|
|
3255
|
-
_this.setState({
|
|
3256
|
-
job
|
|
3257
|
-
});
|
|
3258
|
-
} catch (error) {
|
|
3259
|
-
console.error("onSelectStatus", error);
|
|
3260
|
-
}
|
|
3212
|
+
_defineProperty(this, "onSelectStatus", async status => {
|
|
3213
|
+
this.setState({
|
|
3214
|
+
job: _objectSpread$5(_objectSpread$5({}, this.state.job), {}, {
|
|
3215
|
+
status: status
|
|
3216
|
+
}),
|
|
3217
|
+
statusChangerOpen: false
|
|
3261
3218
|
});
|
|
3262
|
-
|
|
3263
|
-
|
|
3264
|
-
|
|
3265
|
-
|
|
3219
|
+
try {
|
|
3220
|
+
const res = await maintenanceActions.editJobStatus(this.state.job.id, status);
|
|
3221
|
+
const {
|
|
3222
|
+
job
|
|
3223
|
+
} = res.data;
|
|
3224
|
+
this.props.jobsLoaded([job]);
|
|
3225
|
+
this.setState({
|
|
3226
|
+
job
|
|
3227
|
+
});
|
|
3228
|
+
} catch (error) {
|
|
3229
|
+
console.error("onSelectStatus", error);
|
|
3230
|
+
}
|
|
3231
|
+
});
|
|
3266
3232
|
this.state = {
|
|
3267
3233
|
jobId: Helper$3.safeReadParams(props, "jobId") ? props.match.params.jobId : null,
|
|
3268
3234
|
job: null,
|
|
@@ -3324,15 +3290,15 @@ class Job extends Component {
|
|
|
3324
3290
|
});
|
|
3325
3291
|
}
|
|
3326
3292
|
renderPriorityLabel() {
|
|
3327
|
-
|
|
3293
|
+
const {
|
|
3328
3294
|
auth
|
|
3329
3295
|
} = this.props;
|
|
3330
3296
|
if (!Session$3.validateAccess(auth.site, values.permissionMaintenanceTracking, auth)) return null;
|
|
3331
|
-
|
|
3297
|
+
const {
|
|
3332
3298
|
job
|
|
3333
3299
|
} = this.state;
|
|
3334
3300
|
if (!job) return null;
|
|
3335
|
-
|
|
3301
|
+
const selectedPriority = getJobPriority(job.priority);
|
|
3336
3302
|
return /*#__PURE__*/jsxs("div", {
|
|
3337
3303
|
className: "statusLabel marginTop-5 pointer",
|
|
3338
3304
|
onClick: this.onTogglePriorityChanger,
|
|
@@ -3347,8 +3313,8 @@ class Job extends Component {
|
|
|
3347
3313
|
}
|
|
3348
3314
|
renderStatusLabel() {
|
|
3349
3315
|
if (!this.state.job.status) return null;
|
|
3350
|
-
|
|
3351
|
-
|
|
3316
|
+
const statusType = this.getStatusType(this.state.job.status);
|
|
3317
|
+
const {
|
|
3352
3318
|
auth
|
|
3353
3319
|
} = this.props;
|
|
3354
3320
|
if (Session$3.validateAccess(auth.site, values.permissionMaintenanceTracking, auth)) {
|
|
@@ -3376,7 +3342,7 @@ class Job extends Component {
|
|
|
3376
3342
|
});
|
|
3377
3343
|
}
|
|
3378
3344
|
renderNotesButton() {
|
|
3379
|
-
|
|
3345
|
+
const {
|
|
3380
3346
|
auth
|
|
3381
3347
|
} = this.props;
|
|
3382
3348
|
if (!Session$3.validateAccess(auth.site, values.permissionMaintenanceTracking, auth)) return null;
|
|
@@ -3394,7 +3360,7 @@ class Job extends Component {
|
|
|
3394
3360
|
});
|
|
3395
3361
|
}
|
|
3396
3362
|
renderAssignButton() {
|
|
3397
|
-
|
|
3363
|
+
const {
|
|
3398
3364
|
auth
|
|
3399
3365
|
} = this.props;
|
|
3400
3366
|
if (!Session$3.validateAccess(auth.site, values.permissionMaintenanceTracking, auth)) return null;
|
|
@@ -3413,7 +3379,7 @@ class Job extends Component {
|
|
|
3413
3379
|
}
|
|
3414
3380
|
renderStatusChanger() {
|
|
3415
3381
|
if (!this.state.statusChangerOpen) return null;
|
|
3416
|
-
|
|
3382
|
+
const {
|
|
3417
3383
|
statusTypes
|
|
3418
3384
|
} = this.props;
|
|
3419
3385
|
return /*#__PURE__*/jsx("div", {
|
|
@@ -3473,8 +3439,8 @@ class Job extends Component {
|
|
|
3473
3439
|
});
|
|
3474
3440
|
}
|
|
3475
3441
|
renderImageGrid(images) {
|
|
3476
|
-
|
|
3477
|
-
|
|
3442
|
+
let size = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;
|
|
3443
|
+
const imagesToUse = images && images.length > 0 ? images : [];
|
|
3478
3444
|
return /*#__PURE__*/jsx("div", {
|
|
3479
3445
|
className: "imageGrid",
|
|
3480
3446
|
children: imagesToUse.map((image, i) => {
|
|
@@ -3495,7 +3461,7 @@ class Job extends Component {
|
|
|
3495
3461
|
});
|
|
3496
3462
|
}
|
|
3497
3463
|
renderDocumentGrid(documents) {
|
|
3498
|
-
|
|
3464
|
+
const documentsToUse = documents && documents.length > 0 ? documents : [];
|
|
3499
3465
|
return /*#__PURE__*/jsx("div", {
|
|
3500
3466
|
className: "documentGrid",
|
|
3501
3467
|
children: documentsToUse.map((doc, index) => /*#__PURE__*/jsx(Components$3.Attachment, {
|
|
@@ -3507,7 +3473,7 @@ class Job extends Component {
|
|
|
3507
3473
|
}
|
|
3508
3474
|
renderImages() {
|
|
3509
3475
|
if (_.isEmpty(this.state.job.image) && _.isEmpty(this.state.job.images)) return null;
|
|
3510
|
-
|
|
3476
|
+
const imagesToUse = _.isEmpty(this.state.job.image) ? this.state.job.images : [this.state.job.image];
|
|
3511
3477
|
return /*#__PURE__*/jsxs("div", {
|
|
3512
3478
|
className: "padding-60 paddingVertical-40 bottomDivideBorder",
|
|
3513
3479
|
children: [/*#__PURE__*/jsx(Components$3.Text, {
|
|
@@ -3518,15 +3484,15 @@ class Job extends Component {
|
|
|
3518
3484
|
});
|
|
3519
3485
|
}
|
|
3520
3486
|
renderCustomFields() {
|
|
3521
|
-
|
|
3487
|
+
const {
|
|
3522
3488
|
job
|
|
3523
3489
|
} = this.state;
|
|
3524
|
-
|
|
3490
|
+
const {
|
|
3525
3491
|
customFields
|
|
3526
3492
|
} = job;
|
|
3527
|
-
|
|
3528
|
-
|
|
3529
|
-
|
|
3493
|
+
const labelClass = "fieldLabel";
|
|
3494
|
+
const answerClass = "fontRegular fontSize-16 text-dark marginTop-5";
|
|
3495
|
+
const renderAnswer = field => {
|
|
3530
3496
|
switch (field.type) {
|
|
3531
3497
|
case "date":
|
|
3532
3498
|
return /*#__PURE__*/jsx("div", {
|
|
@@ -3576,10 +3542,10 @@ class Job extends Component {
|
|
|
3576
3542
|
}
|
|
3577
3543
|
renderInner() {
|
|
3578
3544
|
if (this.state.job == null) return null;
|
|
3579
|
-
|
|
3545
|
+
const {
|
|
3580
3546
|
customFields
|
|
3581
3547
|
} = this.state.job;
|
|
3582
|
-
|
|
3548
|
+
const hasCustomFields = customFields && customFields.length > 0;
|
|
3583
3549
|
return /*#__PURE__*/jsxs("div", {
|
|
3584
3550
|
iconStyle: {
|
|
3585
3551
|
paddingBottom: 40
|
|
@@ -3680,10 +3646,10 @@ class Job extends Component {
|
|
|
3680
3646
|
});
|
|
3681
3647
|
}
|
|
3682
3648
|
renderHistoryEntry(e, i) {
|
|
3683
|
-
|
|
3649
|
+
const {
|
|
3684
3650
|
job
|
|
3685
3651
|
} = this.state;
|
|
3686
|
-
|
|
3652
|
+
const entryToUse = e || {
|
|
3687
3653
|
timestamp: job.createdTime,
|
|
3688
3654
|
status: "Unassigned",
|
|
3689
3655
|
user: {
|
|
@@ -3692,7 +3658,7 @@ class Job extends Component {
|
|
|
3692
3658
|
profilePic: job.userProfilePic
|
|
3693
3659
|
}
|
|
3694
3660
|
};
|
|
3695
|
-
|
|
3661
|
+
const statusType = this.getStatusType(entryToUse.status);
|
|
3696
3662
|
return /*#__PURE__*/jsxs("div", {
|
|
3697
3663
|
className: "ticketHistoryEntry",
|
|
3698
3664
|
children: [/*#__PURE__*/jsx("p", {
|
|
@@ -3756,7 +3722,7 @@ class Job extends Component {
|
|
|
3756
3722
|
}, index);
|
|
3757
3723
|
}
|
|
3758
3724
|
renderAssignment() {
|
|
3759
|
-
|
|
3725
|
+
const {
|
|
3760
3726
|
job
|
|
3761
3727
|
} = this.state;
|
|
3762
3728
|
if (!job) return null;
|
|
@@ -3804,8 +3770,8 @@ class Job extends Component {
|
|
|
3804
3770
|
}, i);
|
|
3805
3771
|
}
|
|
3806
3772
|
renderExternalSyncEntry(e, i) {
|
|
3807
|
-
|
|
3808
|
-
|
|
3773
|
+
const isSuccess = e.EntryType === "ExternalIDSet";
|
|
3774
|
+
const backgroundColor = isSuccess ? Colours$2.COLOUR_GREEN : Colours$2.COLOUR_RED; // Green for success, red for failure
|
|
3809
3775
|
|
|
3810
3776
|
return /*#__PURE__*/jsxs("div", {
|
|
3811
3777
|
className: "ticketHistoryEntry",
|
|
@@ -3825,7 +3791,7 @@ class Job extends Component {
|
|
|
3825
3791
|
}, i);
|
|
3826
3792
|
}
|
|
3827
3793
|
renderPriority() {
|
|
3828
|
-
|
|
3794
|
+
const {
|
|
3829
3795
|
auth
|
|
3830
3796
|
} = this.props;
|
|
3831
3797
|
if (!Session$3.validateAccess(auth.site, values.permissionMaintenanceTracking, auth)) return null;
|
|
@@ -3842,20 +3808,20 @@ class Job extends Component {
|
|
|
3842
3808
|
});
|
|
3843
3809
|
}
|
|
3844
3810
|
hasSyncFailureWithoutSuccess() {
|
|
3845
|
-
|
|
3811
|
+
const {
|
|
3846
3812
|
job
|
|
3847
3813
|
} = this.state;
|
|
3848
3814
|
if (!job || !job.history) return false;
|
|
3849
|
-
|
|
3850
|
-
|
|
3851
|
-
|
|
3815
|
+
const history = job.history || [];
|
|
3816
|
+
const hasSuccess = history.some(entry => entry.EntryType === "ExternalIDSet");
|
|
3817
|
+
const hasFailure = history.some(entry => entry.EntryType === "ExternalIDSetFailed");
|
|
3852
3818
|
return hasFailure && !hasSuccess;
|
|
3853
3819
|
}
|
|
3854
3820
|
renderRetrySyncButton() {
|
|
3855
|
-
|
|
3821
|
+
const {
|
|
3856
3822
|
auth
|
|
3857
3823
|
} = this.props;
|
|
3858
|
-
|
|
3824
|
+
const {
|
|
3859
3825
|
retryingSync,
|
|
3860
3826
|
retrySyncInitiated
|
|
3861
3827
|
} = this.state;
|
|
@@ -3893,7 +3859,7 @@ class Job extends Component {
|
|
|
3893
3859
|
});
|
|
3894
3860
|
}
|
|
3895
3861
|
renderExternalSyncStatus() {
|
|
3896
|
-
|
|
3862
|
+
const {
|
|
3897
3863
|
retrySyncError,
|
|
3898
3864
|
retrySyncInitiated
|
|
3899
3865
|
} = this.state;
|
|
@@ -3942,14 +3908,14 @@ class Job extends Component {
|
|
|
3942
3908
|
return null;
|
|
3943
3909
|
}
|
|
3944
3910
|
renderExternalSync() {
|
|
3945
|
-
|
|
3911
|
+
const {
|
|
3946
3912
|
externalSync,
|
|
3947
3913
|
loadingExternalSync
|
|
3948
3914
|
} = this.state;
|
|
3949
3915
|
|
|
3950
3916
|
// Check if we should show this section at all
|
|
3951
|
-
|
|
3952
|
-
|
|
3917
|
+
const hasExternalSyncData = externalSync && !loadingExternalSync;
|
|
3918
|
+
const hasSyncFailure = this.hasSyncFailureWithoutSuccess();
|
|
3953
3919
|
|
|
3954
3920
|
// Show section if we have sync data OR if there's a failure that can be retried
|
|
3955
3921
|
if (!hasExternalSyncData && !hasSyncFailure) return null;
|
|
@@ -3989,11 +3955,11 @@ class Job extends Component {
|
|
|
3989
3955
|
});
|
|
3990
3956
|
}
|
|
3991
3957
|
renderOverview() {
|
|
3992
|
-
|
|
3958
|
+
const {
|
|
3993
3959
|
job
|
|
3994
3960
|
} = this.state;
|
|
3995
3961
|
if (!job || !job.history) return null;
|
|
3996
|
-
|
|
3962
|
+
const source = _.sortBy([...job.history.map(e => {
|
|
3997
3963
|
return _objectSpread$5(_objectSpread$5({}, e), {}, {
|
|
3998
3964
|
EntryType: e.EntryType || "status"
|
|
3999
3965
|
});
|
|
@@ -4131,8 +4097,8 @@ class Job extends Component {
|
|
|
4131
4097
|
children: "Add Attachment"
|
|
4132
4098
|
})]
|
|
4133
4099
|
}), /*#__PURE__*/jsx(Components$3.ImageInput, {
|
|
4134
|
-
ref:
|
|
4135
|
-
this.imageInput =
|
|
4100
|
+
ref: ref => {
|
|
4101
|
+
this.imageInput = ref;
|
|
4136
4102
|
},
|
|
4137
4103
|
multiple: true,
|
|
4138
4104
|
refreshCallback: images => {
|
|
@@ -4144,7 +4110,7 @@ class Job extends Component {
|
|
|
4144
4110
|
});
|
|
4145
4111
|
}
|
|
4146
4112
|
renderUsers() {
|
|
4147
|
-
|
|
4113
|
+
let content = null;
|
|
4148
4114
|
if (this.state.confirmingAssignee) {
|
|
4149
4115
|
content = /*#__PURE__*/jsx("div", {
|
|
4150
4116
|
className: "flex flex-center-row",
|
|
@@ -4238,8 +4204,8 @@ class Job extends Component {
|
|
|
4238
4204
|
});
|
|
4239
4205
|
}
|
|
4240
4206
|
}
|
|
4241
|
-
|
|
4242
|
-
|
|
4207
|
+
const mapStateToProps$3 = state => {
|
|
4208
|
+
const {
|
|
4243
4209
|
auth
|
|
4244
4210
|
} = state;
|
|
4245
4211
|
return {
|
|
@@ -4254,7 +4220,7 @@ var Job$1 = connect(mapStateToProps$3, {
|
|
|
4254
4220
|
|
|
4255
4221
|
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; }
|
|
4256
4222
|
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; }
|
|
4257
|
-
|
|
4223
|
+
const {
|
|
4258
4224
|
Actions,
|
|
4259
4225
|
Components: Components$2,
|
|
4260
4226
|
Helper: Helper$2,
|
|
@@ -4267,18 +4233,18 @@ class AddJob extends Component {
|
|
|
4267
4233
|
var _this;
|
|
4268
4234
|
super(props);
|
|
4269
4235
|
_this = this;
|
|
4270
|
-
_defineProperty(this, "getJob",
|
|
4236
|
+
_defineProperty(this, "getJob", async () => {
|
|
4271
4237
|
try {
|
|
4272
|
-
|
|
4238
|
+
const res = await maintenanceActions.getJob(this.props.auth.site, this.state.jobId);
|
|
4273
4239
|
res.data.location = res.data.site;
|
|
4274
|
-
|
|
4240
|
+
const {
|
|
4275
4241
|
userID,
|
|
4276
4242
|
userName,
|
|
4277
4243
|
userProfilePic,
|
|
4278
4244
|
type,
|
|
4279
4245
|
customFields
|
|
4280
4246
|
} = res.data;
|
|
4281
|
-
|
|
4247
|
+
this.setState(_objectSpread$4(_objectSpread$4({}, res.data), {}, {
|
|
4282
4248
|
prevType: type,
|
|
4283
4249
|
prevCustomFileds: customFields,
|
|
4284
4250
|
type,
|
|
@@ -4289,39 +4255,39 @@ class AddJob extends Component {
|
|
|
4289
4255
|
profilePic: userProfilePic
|
|
4290
4256
|
}
|
|
4291
4257
|
}));
|
|
4292
|
-
|
|
4258
|
+
this.checkSetImages(this.imageInput, res.data.images);
|
|
4293
4259
|
if (customFields) {
|
|
4294
4260
|
customFields.forEach((field, index) => {
|
|
4295
4261
|
if (field.type === "image" && field.answer) {
|
|
4296
|
-
|
|
4262
|
+
this.checkSetImages(this.customImageInputs[index], field.answer);
|
|
4297
4263
|
}
|
|
4298
4264
|
});
|
|
4299
4265
|
}
|
|
4300
4266
|
} catch (error) {
|
|
4301
4267
|
console.error("getJob", error);
|
|
4302
4268
|
}
|
|
4303
|
-
})
|
|
4304
|
-
_defineProperty(this, "getJobTypes",
|
|
4269
|
+
});
|
|
4270
|
+
_defineProperty(this, "getJobTypes", async () => {
|
|
4305
4271
|
try {
|
|
4306
|
-
|
|
4307
|
-
|
|
4272
|
+
const res = await maintenanceActions.getJobTypes(this.props.auth.site);
|
|
4273
|
+
this.setState({
|
|
4308
4274
|
types: res.data
|
|
4309
4275
|
});
|
|
4310
|
-
|
|
4276
|
+
this.getDefaultJob();
|
|
4311
4277
|
} catch (error) {
|
|
4312
4278
|
console.error("getJobTypes", error);
|
|
4313
4279
|
}
|
|
4314
|
-
})
|
|
4315
|
-
_defineProperty(this, "getUsers",
|
|
4280
|
+
});
|
|
4281
|
+
_defineProperty(this, "getUsers", async () => {
|
|
4316
4282
|
try {
|
|
4317
|
-
|
|
4283
|
+
const res = await userActions.fetchUsers(this.props.auth.site);
|
|
4318
4284
|
if (res.userFetchFail) return;
|
|
4319
4285
|
if (res.data != null && !_.isEmpty(res.data.results.Items)) {
|
|
4320
|
-
|
|
4321
|
-
if (
|
|
4286
|
+
let items = res.data.results.Items;
|
|
4287
|
+
if (this.props.optionOnlyForResidents) {
|
|
4322
4288
|
items = _.filter(items, u => u.category === "resident");
|
|
4323
4289
|
}
|
|
4324
|
-
|
|
4290
|
+
this.setState({
|
|
4325
4291
|
users: _.sortBy(items, u => {
|
|
4326
4292
|
return (u.displayName || "").toLowerCase();
|
|
4327
4293
|
})
|
|
@@ -4330,15 +4296,15 @@ class AddJob extends Component {
|
|
|
4330
4296
|
} catch (error) {
|
|
4331
4297
|
console.error("getUsers", error);
|
|
4332
4298
|
}
|
|
4333
|
-
})
|
|
4299
|
+
});
|
|
4334
4300
|
_defineProperty(this, "getDefaultJob", () => {
|
|
4335
|
-
|
|
4301
|
+
const {
|
|
4336
4302
|
types,
|
|
4337
4303
|
jobId
|
|
4338
4304
|
} = this.state;
|
|
4339
4305
|
if (jobId == null) {
|
|
4340
4306
|
if (types.length !== 0) {
|
|
4341
|
-
|
|
4307
|
+
const defaultType = types[0];
|
|
4342
4308
|
this.setState({
|
|
4343
4309
|
type: defaultType.typeName,
|
|
4344
4310
|
customFields: defaultType.hasCustomFields && defaultType.customFields.length > 0 ? defaultType.customFields : []
|
|
@@ -4351,15 +4317,15 @@ class AddJob extends Component {
|
|
|
4351
4317
|
}
|
|
4352
4318
|
});
|
|
4353
4319
|
_defineProperty(this, "onSelectType", (key, e) => {
|
|
4354
|
-
|
|
4320
|
+
const {
|
|
4355
4321
|
types,
|
|
4356
4322
|
prevType,
|
|
4357
4323
|
prevCustomFileds
|
|
4358
4324
|
} = this.state;
|
|
4359
|
-
|
|
4325
|
+
const selectedType = types.find(t => t.typeName === key);
|
|
4360
4326
|
// If selected type had previously saved custom fields, use the previous version
|
|
4361
|
-
|
|
4362
|
-
|
|
4327
|
+
const hasPrevCustomFields = prevType === selectedType.typeName && prevCustomFileds && prevCustomFileds.length > 0;
|
|
4328
|
+
const update = {
|
|
4363
4329
|
type: selectedType.typeName,
|
|
4364
4330
|
customFields: hasPrevCustomFields ? prevCustomFileds : selectedType.hasCustomFields ? selectedType.customFields : []
|
|
4365
4331
|
};
|
|
@@ -4384,7 +4350,7 @@ class AddJob extends Component {
|
|
|
4384
4350
|
});
|
|
4385
4351
|
});
|
|
4386
4352
|
_defineProperty(this, "onSelectUser", user => {
|
|
4387
|
-
|
|
4353
|
+
const update = {
|
|
4388
4354
|
selectedUser: user,
|
|
4389
4355
|
userID: user.userId,
|
|
4390
4356
|
userName: user.displayName,
|
|
@@ -4402,7 +4368,7 @@ class AddJob extends Component {
|
|
|
4402
4368
|
// Fetch in background to avoid blocking UI
|
|
4403
4369
|
userActions.fetchUser(this.props.auth.site, user.userId).then(response => {
|
|
4404
4370
|
if (response.data && response.data.user) {
|
|
4405
|
-
|
|
4371
|
+
const contactUpdate = {};
|
|
4406
4372
|
// Auto-populate phone and room from user profile
|
|
4407
4373
|
if (response.data.user.phoneNumber) {
|
|
4408
4374
|
contactUpdate.phone = response.data.user.phoneNumber;
|
|
@@ -4422,7 +4388,7 @@ class AddJob extends Component {
|
|
|
4422
4388
|
});
|
|
4423
4389
|
});
|
|
4424
4390
|
_defineProperty(this, "onUnselectUser", () => {
|
|
4425
|
-
|
|
4391
|
+
const update = {
|
|
4426
4392
|
selectedUser: null,
|
|
4427
4393
|
userID: "",
|
|
4428
4394
|
userName: "",
|
|
@@ -4435,78 +4401,78 @@ class AddJob extends Component {
|
|
|
4435
4401
|
this.setState(update);
|
|
4436
4402
|
});
|
|
4437
4403
|
_defineProperty(this, "onChangeAnswer", (qId, answer) => {
|
|
4438
|
-
|
|
4404
|
+
const update = {
|
|
4439
4405
|
customFields: _.cloneDeep(this.state.customFields)
|
|
4440
4406
|
};
|
|
4441
|
-
|
|
4407
|
+
const field = update.customFields[qId];
|
|
4442
4408
|
field.answer = answer;
|
|
4443
4409
|
if (field.isTitle) update.title = field.answer;
|
|
4444
4410
|
this.setState(update);
|
|
4445
4411
|
});
|
|
4446
4412
|
_defineProperty(this, "onChangeToggleAnswer", (qId, answer) => {
|
|
4447
|
-
|
|
4413
|
+
const update = {
|
|
4448
4414
|
customFields: _.cloneDeep(this.state.customFields)
|
|
4449
4415
|
};
|
|
4450
|
-
|
|
4416
|
+
const field = update.customFields[qId];
|
|
4451
4417
|
field.answer = field.answer === answer ? undefined : answer;
|
|
4452
4418
|
if (field.isTitle) update.title = field.answer;
|
|
4453
4419
|
this.setState(update);
|
|
4454
4420
|
});
|
|
4455
4421
|
_defineProperty(this, "onChangeCheckboxAnswer", (qId, answer) => {
|
|
4456
|
-
|
|
4422
|
+
const update = {
|
|
4457
4423
|
customFields: _.cloneDeep(this.state.customFields)
|
|
4458
4424
|
};
|
|
4459
|
-
|
|
4425
|
+
const field = update.customFields[qId];
|
|
4460
4426
|
field.answer = _.xor(field.answer || [], [answer]);
|
|
4461
4427
|
if (field.isTitle) update.title = field.answer.join(", ");
|
|
4462
4428
|
this.setState(update);
|
|
4463
4429
|
});
|
|
4464
4430
|
_defineProperty(this, "onChangeDateAnswer", function (qId, answer) {
|
|
4465
|
-
|
|
4466
|
-
|
|
4431
|
+
let togglePicker = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
|
|
4432
|
+
const update = {
|
|
4467
4433
|
customFields: _.cloneDeep(_this.state.customFields)
|
|
4468
4434
|
};
|
|
4469
|
-
|
|
4435
|
+
const field = update.customFields[qId];
|
|
4470
4436
|
field.answer = answer;
|
|
4471
4437
|
if (field.isTitle) update.title = moment(field.answer, "YYYY-MM-DD").format("DD-MMM-YYYY");
|
|
4472
4438
|
_this.setState(update);
|
|
4473
4439
|
if (togglePicker) _this.onToggleDatePicker(qId);
|
|
4474
4440
|
});
|
|
4475
4441
|
_defineProperty(this, "onChangeTimeAnswer", (qId, answer) => {
|
|
4476
|
-
|
|
4442
|
+
const update = {
|
|
4477
4443
|
customFields: _.cloneDeep(this.state.customFields)
|
|
4478
4444
|
};
|
|
4479
|
-
|
|
4445
|
+
const field = update.customFields[qId];
|
|
4480
4446
|
field.answer = answer;
|
|
4481
4447
|
if (field.isTitle) update.title = moment(field.answer, "HH:mm").format("h:mm a");
|
|
4482
4448
|
this.setState(update);
|
|
4483
4449
|
});
|
|
4484
4450
|
_defineProperty(this, "onChangeImageAnswer", (qId, answer) => {
|
|
4485
|
-
|
|
4451
|
+
const update = {
|
|
4486
4452
|
customFields: _.cloneDeep(this.state.customFields)
|
|
4487
4453
|
};
|
|
4488
|
-
|
|
4454
|
+
const field = update.customFields[qId];
|
|
4489
4455
|
field.answer = answer;
|
|
4490
4456
|
this.setState(update);
|
|
4491
4457
|
});
|
|
4492
4458
|
_defineProperty(this, "onRemoveDocumentAnswer", (qId, document) => {
|
|
4493
|
-
|
|
4459
|
+
const update = {
|
|
4494
4460
|
customFields: _.cloneDeep(this.state.customFields)
|
|
4495
4461
|
};
|
|
4496
|
-
|
|
4462
|
+
const field = update.customFields[qId];
|
|
4497
4463
|
field.answer = _.filter(field.answer, d => d.url !== document.url);
|
|
4498
4464
|
this.setState(update);
|
|
4499
4465
|
});
|
|
4500
4466
|
_defineProperty(this, "onHandlePDFFileChange", (event, qId) => {
|
|
4501
|
-
|
|
4467
|
+
const file = event.target.files[0];
|
|
4502
4468
|
if (!file) return;
|
|
4503
|
-
|
|
4469
|
+
const update = {
|
|
4504
4470
|
customFields: _.cloneDeep(this.state.customFields)
|
|
4505
4471
|
};
|
|
4506
|
-
|
|
4507
|
-
|
|
4508
|
-
|
|
4509
|
-
|
|
4472
|
+
const field = update.customFields[qId];
|
|
4473
|
+
const attachments = field.answer || [];
|
|
4474
|
+
const [name, ext] = file.name.split(".");
|
|
4475
|
+
const newAttachment = {
|
|
4510
4476
|
uploading: true,
|
|
4511
4477
|
name,
|
|
4512
4478
|
ext: ext.toLowerCase()
|
|
@@ -4526,7 +4492,7 @@ class AddJob extends Component {
|
|
|
4526
4492
|
event.target.value = "";
|
|
4527
4493
|
});
|
|
4528
4494
|
_defineProperty(this, "onToggleDatePicker", qId => {
|
|
4529
|
-
|
|
4495
|
+
const showDate = _objectSpread$4({}, this.state.showDate);
|
|
4530
4496
|
showDate[qId] = !showDate[qId];
|
|
4531
4497
|
this.setState({
|
|
4532
4498
|
showDate
|
|
@@ -4546,7 +4512,7 @@ class AddJob extends Component {
|
|
|
4546
4512
|
this.setState({
|
|
4547
4513
|
updating: true
|
|
4548
4514
|
});
|
|
4549
|
-
|
|
4515
|
+
const job = {
|
|
4550
4516
|
id: this.state.id,
|
|
4551
4517
|
userID: this.state.userID,
|
|
4552
4518
|
userName: this.state.userName,
|
|
@@ -4592,13 +4558,13 @@ class AddJob extends Component {
|
|
|
4592
4558
|
}
|
|
4593
4559
|
});
|
|
4594
4560
|
_defineProperty(this, "isFieldValid", field => {
|
|
4595
|
-
|
|
4561
|
+
const {
|
|
4596
4562
|
mandatory,
|
|
4597
4563
|
type,
|
|
4598
4564
|
answer
|
|
4599
4565
|
} = field;
|
|
4600
4566
|
if (["staticTitle", "staticText"].includes(type)) return true;
|
|
4601
|
-
|
|
4567
|
+
const checkMandatory = () => {
|
|
4602
4568
|
if (!mandatory) return true;
|
|
4603
4569
|
switch (type) {
|
|
4604
4570
|
case "yn":
|
|
@@ -4611,7 +4577,7 @@ class AddJob extends Component {
|
|
|
4611
4577
|
return !_.isNil(answer) && !_.isEmpty(answer);
|
|
4612
4578
|
}
|
|
4613
4579
|
};
|
|
4614
|
-
|
|
4580
|
+
const checkFormat = () => {
|
|
4615
4581
|
if (_.isNil(answer) || _.isEmpty(answer)) return true;
|
|
4616
4582
|
switch (type) {
|
|
4617
4583
|
case "email":
|
|
@@ -4624,12 +4590,12 @@ class AddJob extends Component {
|
|
|
4624
4590
|
return true;
|
|
4625
4591
|
}
|
|
4626
4592
|
};
|
|
4627
|
-
|
|
4593
|
+
const valid = checkMandatory() && checkFormat();
|
|
4628
4594
|
return valid;
|
|
4629
4595
|
});
|
|
4630
4596
|
_defineProperty(this, "getFieldContainerClass", function () {
|
|
4631
|
-
|
|
4632
|
-
|
|
4597
|
+
let isValid = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
|
|
4598
|
+
const showError = _this.state.showWarnings && !isValid;
|
|
4633
4599
|
return "genericInputContainer ".concat(isValid ? "genericInput-valid" : "", " ").concat(showError ? "genericInput-error" : "").trim();
|
|
4634
4600
|
});
|
|
4635
4601
|
this.imageInput = null;
|
|
@@ -4688,25 +4654,18 @@ class AddJob extends Component {
|
|
|
4688
4654
|
}, 100);
|
|
4689
4655
|
}
|
|
4690
4656
|
}
|
|
4691
|
-
|
|
4692
|
-
|
|
4693
|
-
types
|
|
4694
|
-
type
|
|
4657
|
+
getTypeOptions() {
|
|
4658
|
+
const {
|
|
4659
|
+
types
|
|
4695
4660
|
} = this.state;
|
|
4696
|
-
return types.map(ev => {
|
|
4697
|
-
|
|
4698
|
-
|
|
4699
|
-
|
|
4700
|
-
active: type === ev.typeName,
|
|
4701
|
-
children: ev.typeName
|
|
4702
|
-
}, ev.typeName);
|
|
4703
|
-
}
|
|
4704
|
-
return null;
|
|
4705
|
-
});
|
|
4661
|
+
return types.filter(Boolean).map(ev => ({
|
|
4662
|
+
Key: ev.typeName,
|
|
4663
|
+
Title: ev.typeName
|
|
4664
|
+
}));
|
|
4706
4665
|
}
|
|
4707
4666
|
renderSuccess() {
|
|
4708
4667
|
if (!this.state.success) return null;
|
|
4709
|
-
|
|
4668
|
+
const title = this.props.strings["".concat(values.featureKey, "_textTitleRequests")] || values.textTitleRequests;
|
|
4710
4669
|
return /*#__PURE__*/jsx(Components$2.SuccessPopup, {
|
|
4711
4670
|
text: "".concat(values.textEntityName, " has been ").concat(this.state.id != null ? "edited" : "added"),
|
|
4712
4671
|
buttons: [{
|
|
@@ -4719,12 +4678,12 @@ class AddJob extends Component {
|
|
|
4719
4678
|
});
|
|
4720
4679
|
}
|
|
4721
4680
|
validateCustomFields() {
|
|
4722
|
-
|
|
4681
|
+
const {
|
|
4723
4682
|
customFields
|
|
4724
4683
|
} = this.state;
|
|
4725
4684
|
if (!customFields || customFields.length === 0) return true;
|
|
4726
4685
|
return customFields.every(field => {
|
|
4727
|
-
|
|
4686
|
+
const isValid = this.isFieldValid(field);
|
|
4728
4687
|
return isValid;
|
|
4729
4688
|
});
|
|
4730
4689
|
}
|
|
@@ -4764,11 +4723,11 @@ class AddJob extends Component {
|
|
|
4764
4723
|
});
|
|
4765
4724
|
}
|
|
4766
4725
|
renderSelectUser() {
|
|
4767
|
-
|
|
4726
|
+
const {
|
|
4768
4727
|
showWarnings,
|
|
4769
4728
|
selectedUser
|
|
4770
4729
|
} = this.state;
|
|
4771
|
-
|
|
4730
|
+
const isValid = !_.isNil(selectedUser);
|
|
4772
4731
|
return /*#__PURE__*/jsxs("div", {
|
|
4773
4732
|
className: this.getFieldContainerClass(isValid),
|
|
4774
4733
|
children: [/*#__PURE__*/jsxs("div", {
|
|
@@ -4838,8 +4797,8 @@ class AddJob extends Component {
|
|
|
4838
4797
|
className: "marginBottom-4",
|
|
4839
4798
|
children: "Images"
|
|
4840
4799
|
}), /*#__PURE__*/jsx(Components$2.ImageInput, {
|
|
4841
|
-
ref:
|
|
4842
|
-
this.imageInput =
|
|
4800
|
+
ref: ref => {
|
|
4801
|
+
this.imageInput = ref;
|
|
4843
4802
|
},
|
|
4844
4803
|
multiple: true,
|
|
4845
4804
|
refreshCallback: images => {
|
|
@@ -5078,14 +5037,14 @@ class AddJob extends Component {
|
|
|
5078
5037
|
className: "marginBottom-4",
|
|
5079
5038
|
children: field.label
|
|
5080
5039
|
}), /*#__PURE__*/jsx(Components$2.ImageInput, {
|
|
5081
|
-
ref:
|
|
5040
|
+
ref: ref => this.customImageInputs[fieldId] = ref,
|
|
5082
5041
|
multiple: true,
|
|
5083
5042
|
refreshCallback: images => this.onChangeImageAnswer(fieldId, images)
|
|
5084
5043
|
})]
|
|
5085
5044
|
})]
|
|
5086
5045
|
}, fieldId);
|
|
5087
5046
|
case "document":
|
|
5088
|
-
|
|
5047
|
+
const documents = field.answer || [];
|
|
5089
5048
|
return /*#__PURE__*/jsxs("div", {
|
|
5090
5049
|
className: this.getFieldContainerClass(this.isFieldValid(field)),
|
|
5091
5050
|
style: styles$4.fieldContainer,
|
|
@@ -5130,7 +5089,7 @@ class AddJob extends Component {
|
|
|
5130
5089
|
}
|
|
5131
5090
|
}
|
|
5132
5091
|
renderCustomFields() {
|
|
5133
|
-
|
|
5092
|
+
const {
|
|
5134
5093
|
customFields
|
|
5135
5094
|
} = this.state;
|
|
5136
5095
|
if (!customFields || customFields.length === 0) return null;
|
|
@@ -5141,7 +5100,7 @@ class AddJob extends Component {
|
|
|
5141
5100
|
});
|
|
5142
5101
|
}
|
|
5143
5102
|
renderMain() {
|
|
5144
|
-
|
|
5103
|
+
const {
|
|
5145
5104
|
customFields
|
|
5146
5105
|
} = this.state;
|
|
5147
5106
|
return /*#__PURE__*/jsx("div", {
|
|
@@ -5179,29 +5138,20 @@ class AddJob extends Component {
|
|
|
5179
5138
|
showError: () => {
|
|
5180
5139
|
return this.state.showWarnings && _.isEmpty(this.state.room);
|
|
5181
5140
|
}
|
|
5182
|
-
}), /*#__PURE__*/
|
|
5183
|
-
|
|
5141
|
+
}), /*#__PURE__*/jsx(Components$2.DropdownInput, {
|
|
5142
|
+
label: values.textJobType,
|
|
5143
|
+
value: this.state.type,
|
|
5144
|
+
options: this.getTypeOptions(),
|
|
5145
|
+
onSelect: this.onSelectType,
|
|
5146
|
+
style: {
|
|
5184
5147
|
marginBottom: 15
|
|
5185
|
-
}
|
|
5186
|
-
children: [/*#__PURE__*/jsx(Components$2.Text, {
|
|
5187
|
-
type: "formLabel",
|
|
5188
|
-
children: values.textJobType
|
|
5189
|
-
}), /*#__PURE__*/jsx(DropdownButton, {
|
|
5190
|
-
style: {
|
|
5191
|
-
minWidth: 80
|
|
5192
|
-
},
|
|
5193
|
-
bsStyle: "default",
|
|
5194
|
-
title: this.state.type,
|
|
5195
|
-
id: "typeSelect",
|
|
5196
|
-
onSelect: this.onSelectType,
|
|
5197
|
-
children: this.renderTypeOptions()
|
|
5198
|
-
})]
|
|
5148
|
+
}
|
|
5199
5149
|
}), !_.isEmpty(customFields) || values.forceCustomFields ? this.renderCustomFields() : this.renderDefaultFields()]
|
|
5200
5150
|
})
|
|
5201
5151
|
});
|
|
5202
5152
|
}
|
|
5203
5153
|
renderUserFilterPopup() {
|
|
5204
|
-
|
|
5154
|
+
const {
|
|
5205
5155
|
userFilterOpen,
|
|
5206
5156
|
userSearch,
|
|
5207
5157
|
users
|
|
@@ -5241,7 +5191,7 @@ class AddJob extends Component {
|
|
|
5241
5191
|
});
|
|
5242
5192
|
}
|
|
5243
5193
|
render() {
|
|
5244
|
-
|
|
5194
|
+
const {
|
|
5245
5195
|
success
|
|
5246
5196
|
} = this.state;
|
|
5247
5197
|
return /*#__PURE__*/jsxs(Components$2.OverlayPage, {
|
|
@@ -5259,7 +5209,7 @@ class AddJob extends Component {
|
|
|
5259
5209
|
});
|
|
5260
5210
|
}
|
|
5261
5211
|
}
|
|
5262
|
-
|
|
5212
|
+
const styles$4 = {
|
|
5263
5213
|
userLabelContainer: {
|
|
5264
5214
|
display: "flex",
|
|
5265
5215
|
flexDirection: "row",
|
|
@@ -5273,8 +5223,8 @@ var styles$4 = {
|
|
|
5273
5223
|
alignItems: "center"
|
|
5274
5224
|
}
|
|
5275
5225
|
};
|
|
5276
|
-
|
|
5277
|
-
|
|
5226
|
+
const mapStateToProps$2 = state => {
|
|
5227
|
+
const {
|
|
5278
5228
|
auth
|
|
5279
5229
|
} = state;
|
|
5280
5230
|
return {
|
|
@@ -5289,12 +5239,12 @@ var AddJob$1 = connect(mapStateToProps$2, {
|
|
|
5289
5239
|
addRecentlyCreated: Actions.addRecentlyCreated
|
|
5290
5240
|
})(withRouter(AddJob));
|
|
5291
5241
|
|
|
5292
|
-
|
|
5242
|
+
const {
|
|
5293
5243
|
Components: Components$1,
|
|
5294
5244
|
Session: Session$1,
|
|
5295
5245
|
Helper: Helper$1
|
|
5296
5246
|
} = PlussCore;
|
|
5297
|
-
|
|
5247
|
+
const DEFAULT_FIELD = {
|
|
5298
5248
|
type: "text",
|
|
5299
5249
|
label: "",
|
|
5300
5250
|
mandatory: false,
|
|
@@ -5303,13 +5253,11 @@ var DEFAULT_FIELD = {
|
|
|
5303
5253
|
};
|
|
5304
5254
|
class AddJobType extends Component {
|
|
5305
5255
|
constructor(props) {
|
|
5306
|
-
var _this;
|
|
5307
5256
|
super(props);
|
|
5308
|
-
|
|
5309
|
-
_defineProperty(this, "getJobType", /*#__PURE__*/_asyncToGenerator(function* () {
|
|
5257
|
+
_defineProperty(this, "getJobType", async () => {
|
|
5310
5258
|
try {
|
|
5311
|
-
|
|
5312
|
-
|
|
5259
|
+
const res = await maintenanceActions.getJobType(this.props.auth.site, this.state.jobTypeId);
|
|
5260
|
+
const {
|
|
5313
5261
|
typeName,
|
|
5314
5262
|
email,
|
|
5315
5263
|
description,
|
|
@@ -5317,7 +5265,7 @@ class AddJobType extends Component {
|
|
|
5317
5265
|
hasCustomFields,
|
|
5318
5266
|
customFields
|
|
5319
5267
|
} = res.data;
|
|
5320
|
-
|
|
5268
|
+
this.setState({
|
|
5321
5269
|
jobTypeName: typeName,
|
|
5322
5270
|
jobTypeEmail: email,
|
|
5323
5271
|
jobTypeDescription: description,
|
|
@@ -5328,19 +5276,19 @@ class AddJobType extends Component {
|
|
|
5328
5276
|
} catch (error) {
|
|
5329
5277
|
console.error("getJobType", error);
|
|
5330
5278
|
}
|
|
5331
|
-
})
|
|
5279
|
+
});
|
|
5332
5280
|
_defineProperty(this, "getFieldTypeTitle", type => {
|
|
5333
|
-
|
|
5281
|
+
const fieldType = this.fieldTypes.find(f => f.Key === type);
|
|
5334
5282
|
return fieldType ? fieldType.Title : "";
|
|
5335
5283
|
});
|
|
5336
5284
|
_defineProperty(this, "validateEmail", () => {
|
|
5337
|
-
|
|
5285
|
+
const {
|
|
5338
5286
|
jobTypeEmail
|
|
5339
5287
|
} = this.state;
|
|
5340
5288
|
return !_.isEmpty(jobTypeEmail) && Helper$1.isEmail(jobTypeEmail);
|
|
5341
5289
|
});
|
|
5342
5290
|
_defineProperty(this, "isJobTypeValid", () => {
|
|
5343
|
-
|
|
5291
|
+
const {
|
|
5344
5292
|
jobTypeName,
|
|
5345
5293
|
jobTypeDescription
|
|
5346
5294
|
} = this.state;
|
|
@@ -5356,7 +5304,7 @@ class AddJobType extends Component {
|
|
|
5356
5304
|
this.setState(stateChange);
|
|
5357
5305
|
});
|
|
5358
5306
|
_defineProperty(this, "onFieldTypeChanged", (fieldIndex, key) => {
|
|
5359
|
-
|
|
5307
|
+
const customFields = [...this.state.customFields];
|
|
5360
5308
|
if (customFields[fieldIndex].type === key) return;
|
|
5361
5309
|
customFields[fieldIndex] = _.cloneDeep(DEFAULT_FIELD);
|
|
5362
5310
|
customFields[fieldIndex].type = key;
|
|
@@ -5365,21 +5313,21 @@ class AddJobType extends Component {
|
|
|
5365
5313
|
});
|
|
5366
5314
|
});
|
|
5367
5315
|
_defineProperty(this, "onFieldLabelChanged", (fieldIndex, event) => {
|
|
5368
|
-
|
|
5316
|
+
const customFields = [...this.state.customFields];
|
|
5369
5317
|
customFields[fieldIndex].label = event.target.value;
|
|
5370
5318
|
this.setState({
|
|
5371
5319
|
customFields
|
|
5372
5320
|
});
|
|
5373
5321
|
});
|
|
5374
5322
|
_defineProperty(this, "onFieldPlaceHolderChanged", (fieldIndex, event) => {
|
|
5375
|
-
|
|
5323
|
+
const customFields = [...this.state.customFields];
|
|
5376
5324
|
customFields[fieldIndex].placeHolder = event.target.value;
|
|
5377
5325
|
this.setState({
|
|
5378
5326
|
customFields
|
|
5379
5327
|
});
|
|
5380
5328
|
});
|
|
5381
5329
|
_defineProperty(this, "onFieldMandatoryChanged", fieldIndex => {
|
|
5382
|
-
|
|
5330
|
+
const customFields = [...this.state.customFields];
|
|
5383
5331
|
customFields[fieldIndex].mandatory = !customFields[fieldIndex].mandatory;
|
|
5384
5332
|
if (!customFields[fieldIndex].mandatory) {
|
|
5385
5333
|
// If a field is not mandatory, it cannot be a title field
|
|
@@ -5390,7 +5338,7 @@ class AddJobType extends Component {
|
|
|
5390
5338
|
});
|
|
5391
5339
|
});
|
|
5392
5340
|
_defineProperty(this, "onFieldIsTitleChanged", fieldIndex => {
|
|
5393
|
-
|
|
5341
|
+
const customFields = [...this.state.customFields];
|
|
5394
5342
|
customFields[fieldIndex].isTitle = !customFields[fieldIndex].isTitle;
|
|
5395
5343
|
if (customFields[fieldIndex].isTitle) {
|
|
5396
5344
|
// If a field is title field, force mandatory
|
|
@@ -5401,33 +5349,33 @@ class AddJobType extends Component {
|
|
|
5401
5349
|
});
|
|
5402
5350
|
});
|
|
5403
5351
|
_defineProperty(this, "onFieldOptionChanged", (fieldIndex, optionIndex, event) => {
|
|
5404
|
-
|
|
5405
|
-
|
|
5352
|
+
const customFields = [...this.state.customFields];
|
|
5353
|
+
const prevValue = customFields[fieldIndex].values[optionIndex];
|
|
5406
5354
|
customFields[fieldIndex].values[optionIndex] = event.target.value;
|
|
5407
5355
|
// Change corresponding validation if exists
|
|
5408
|
-
|
|
5409
|
-
|
|
5356
|
+
const validations = customFields[fieldIndex].validation;
|
|
5357
|
+
let validation = validations ? validations.find(val => val.value === prevValue) : null;
|
|
5410
5358
|
if (validation) validation.value = event.target.value;
|
|
5411
5359
|
this.setState({
|
|
5412
5360
|
customFields
|
|
5413
5361
|
});
|
|
5414
5362
|
});
|
|
5415
5363
|
_defineProperty(this, "onAddNewOption", fieldIndex => {
|
|
5416
|
-
|
|
5364
|
+
const customFields = [...this.state.customFields];
|
|
5417
5365
|
customFields[fieldIndex].values.push("");
|
|
5418
5366
|
this.setState({
|
|
5419
5367
|
customFields
|
|
5420
5368
|
});
|
|
5421
5369
|
});
|
|
5422
5370
|
_defineProperty(this, "onRemoveOption", (fieldIndex, optionIndex) => {
|
|
5423
|
-
|
|
5371
|
+
const customFields = [...this.state.customFields];
|
|
5424
5372
|
customFields[fieldIndex].values.splice(optionIndex, 1);
|
|
5425
5373
|
this.setState({
|
|
5426
5374
|
customFields
|
|
5427
5375
|
});
|
|
5428
5376
|
});
|
|
5429
5377
|
_defineProperty(this, "onAddNewField", () => {
|
|
5430
|
-
|
|
5378
|
+
const customFields = [...this.state.customFields];
|
|
5431
5379
|
customFields.push(_.cloneDeep(DEFAULT_FIELD));
|
|
5432
5380
|
this.setState({
|
|
5433
5381
|
customFields
|
|
@@ -5435,17 +5383,17 @@ class AddJobType extends Component {
|
|
|
5435
5383
|
});
|
|
5436
5384
|
_defineProperty(this, "onMoveFieldPrev", fieldIndex => {
|
|
5437
5385
|
if (fieldIndex === 0) return;
|
|
5438
|
-
|
|
5439
|
-
|
|
5386
|
+
const customFields = [...this.state.customFields];
|
|
5387
|
+
const item = customFields.splice(fieldIndex, 1)[0];
|
|
5440
5388
|
customFields.splice(fieldIndex - 1, 0, item);
|
|
5441
5389
|
this.setState({
|
|
5442
5390
|
customFields
|
|
5443
5391
|
});
|
|
5444
5392
|
});
|
|
5445
5393
|
_defineProperty(this, "onMoveFieldNext", fieldIndex => {
|
|
5446
|
-
|
|
5394
|
+
const customFields = [...this.state.customFields];
|
|
5447
5395
|
if (fieldIndex > customFields.length - 1) return;
|
|
5448
|
-
|
|
5396
|
+
const item = customFields.splice(fieldIndex, 1)[0];
|
|
5449
5397
|
customFields.splice(fieldIndex + 1, 0, item);
|
|
5450
5398
|
this.setState({
|
|
5451
5399
|
customFields
|
|
@@ -5455,10 +5403,10 @@ class AddJobType extends Component {
|
|
|
5455
5403
|
window.history.back();
|
|
5456
5404
|
});
|
|
5457
5405
|
_defineProperty(this, "onSave", () => {
|
|
5458
|
-
|
|
5406
|
+
const {
|
|
5459
5407
|
site
|
|
5460
5408
|
} = this.props.auth;
|
|
5461
|
-
|
|
5409
|
+
const {
|
|
5462
5410
|
submitting,
|
|
5463
5411
|
jobTypeId,
|
|
5464
5412
|
jobTypeName,
|
|
@@ -5477,26 +5425,26 @@ class AddJobType extends Component {
|
|
|
5477
5425
|
}
|
|
5478
5426
|
this.setState({
|
|
5479
5427
|
submitting: true
|
|
5480
|
-
},
|
|
5428
|
+
}, async () => {
|
|
5481
5429
|
try {
|
|
5482
5430
|
if (jobTypeId) {
|
|
5483
|
-
|
|
5431
|
+
await maintenanceActions.editJobType(site, jobTypeId, jobTypeName, jobTypeEmail, jobTypeDescription, jobTypeLevel, hasCustomFields, customFields);
|
|
5484
5432
|
} else {
|
|
5485
|
-
|
|
5433
|
+
await maintenanceActions.addJobType(site, jobTypeName, jobTypeEmail, jobTypeDescription, jobTypeLevel, hasCustomFields, customFields);
|
|
5486
5434
|
}
|
|
5487
|
-
|
|
5488
|
-
|
|
5435
|
+
this.props.jobTypesUpdate(site);
|
|
5436
|
+
this.setState({
|
|
5489
5437
|
submitting: false,
|
|
5490
5438
|
success: true
|
|
5491
5439
|
});
|
|
5492
5440
|
} catch (error) {
|
|
5493
5441
|
console.error("onSave", error);
|
|
5494
|
-
|
|
5442
|
+
this.setState({
|
|
5495
5443
|
submitting: false
|
|
5496
5444
|
});
|
|
5497
5445
|
alert("Something went wrong with the request. Please try again.");
|
|
5498
5446
|
}
|
|
5499
|
-
})
|
|
5447
|
+
});
|
|
5500
5448
|
});
|
|
5501
5449
|
this.fieldTypes = [{
|
|
5502
5450
|
Title: "Text Input",
|
|
@@ -5557,7 +5505,7 @@ class AddJobType extends Component {
|
|
|
5557
5505
|
if (this.state.jobTypeId) this.getJobType();
|
|
5558
5506
|
}
|
|
5559
5507
|
validateCustomFields() {
|
|
5560
|
-
|
|
5508
|
+
const {
|
|
5561
5509
|
submitting,
|
|
5562
5510
|
hasCustomFields,
|
|
5563
5511
|
customFields
|
|
@@ -5565,13 +5513,13 @@ class AddJobType extends Component {
|
|
|
5565
5513
|
if (submitting) return false;
|
|
5566
5514
|
|
|
5567
5515
|
// Validate custom fields
|
|
5568
|
-
|
|
5516
|
+
const warnings = [];
|
|
5569
5517
|
if (hasCustomFields) {
|
|
5570
|
-
|
|
5571
|
-
|
|
5572
|
-
|
|
5518
|
+
let missingLabel = false;
|
|
5519
|
+
let hasMandatoryField = false;
|
|
5520
|
+
let titleFieldCount = 0;
|
|
5573
5521
|
customFields.forEach(field => {
|
|
5574
|
-
|
|
5522
|
+
const {
|
|
5575
5523
|
type,
|
|
5576
5524
|
label,
|
|
5577
5525
|
values,
|
|
@@ -5603,7 +5551,7 @@ class AddJobType extends Component {
|
|
|
5603
5551
|
return warnings.length === 0;
|
|
5604
5552
|
}
|
|
5605
5553
|
onRemoveField(fieldIndex) {
|
|
5606
|
-
|
|
5554
|
+
const customFields = [...this.state.customFields];
|
|
5607
5555
|
if (customFields.length < 2) return;
|
|
5608
5556
|
customFields.splice(fieldIndex, 1);
|
|
5609
5557
|
this.setState({
|
|
@@ -5611,7 +5559,7 @@ class AddJobType extends Component {
|
|
|
5611
5559
|
});
|
|
5612
5560
|
}
|
|
5613
5561
|
renderBaseForm() {
|
|
5614
|
-
|
|
5562
|
+
const {
|
|
5615
5563
|
success,
|
|
5616
5564
|
jobTypeId,
|
|
5617
5565
|
showWarnings,
|
|
@@ -5810,7 +5758,7 @@ class AddJobType extends Component {
|
|
|
5810
5758
|
});
|
|
5811
5759
|
}
|
|
5812
5760
|
renderFieldMultiple(field, fieldIndex) {
|
|
5813
|
-
|
|
5761
|
+
const {
|
|
5814
5762
|
customFields
|
|
5815
5763
|
} = this.state;
|
|
5816
5764
|
return /*#__PURE__*/jsxs("div", {
|
|
@@ -5881,7 +5829,7 @@ class AddJobType extends Component {
|
|
|
5881
5829
|
});
|
|
5882
5830
|
}
|
|
5883
5831
|
renderFieldCheckbox(field, fieldIndex) {
|
|
5884
|
-
|
|
5832
|
+
const {
|
|
5885
5833
|
customFields
|
|
5886
5834
|
} = this.state;
|
|
5887
5835
|
return /*#__PURE__*/jsxs("div", {
|
|
@@ -5976,10 +5924,10 @@ class AddJobType extends Component {
|
|
|
5976
5924
|
});
|
|
5977
5925
|
}
|
|
5978
5926
|
renderField(field, fieldIndex) {
|
|
5979
|
-
|
|
5927
|
+
const {
|
|
5980
5928
|
customFields
|
|
5981
5929
|
} = this.state;
|
|
5982
|
-
|
|
5930
|
+
const renderFieldContent = () => {
|
|
5983
5931
|
switch (field.type) {
|
|
5984
5932
|
case "text":
|
|
5985
5933
|
case "email":
|
|
@@ -6063,7 +6011,7 @@ class AddJobType extends Component {
|
|
|
6063
6011
|
}, fieldIndex);
|
|
6064
6012
|
}
|
|
6065
6013
|
renderCustomForm() {
|
|
6066
|
-
|
|
6014
|
+
const {
|
|
6067
6015
|
success,
|
|
6068
6016
|
hasCustomFields,
|
|
6069
6017
|
customFields
|
|
@@ -6098,7 +6046,7 @@ class AddJobType extends Component {
|
|
|
6098
6046
|
});
|
|
6099
6047
|
}
|
|
6100
6048
|
renderWarnings() {
|
|
6101
|
-
|
|
6049
|
+
const {
|
|
6102
6050
|
showWarnings,
|
|
6103
6051
|
warnings
|
|
6104
6052
|
} = this.state;
|
|
@@ -6120,7 +6068,7 @@ class AddJobType extends Component {
|
|
|
6120
6068
|
});
|
|
6121
6069
|
}
|
|
6122
6070
|
renderSuccess() {
|
|
6123
|
-
|
|
6071
|
+
const {
|
|
6124
6072
|
success,
|
|
6125
6073
|
jobTypeId
|
|
6126
6074
|
} = this.state;
|
|
@@ -6161,7 +6109,7 @@ class AddJobType extends Component {
|
|
|
6161
6109
|
});
|
|
6162
6110
|
}
|
|
6163
6111
|
render() {
|
|
6164
|
-
|
|
6112
|
+
const {
|
|
6165
6113
|
success
|
|
6166
6114
|
} = this.state;
|
|
6167
6115
|
return /*#__PURE__*/jsxs(Components$1.OverlayPage, {
|
|
@@ -6180,8 +6128,8 @@ class AddJobType extends Component {
|
|
|
6180
6128
|
});
|
|
6181
6129
|
}
|
|
6182
6130
|
}
|
|
6183
|
-
|
|
6184
|
-
|
|
6131
|
+
const mapStateToProps$1 = state => {
|
|
6132
|
+
const {
|
|
6185
6133
|
auth
|
|
6186
6134
|
} = state;
|
|
6187
6135
|
return {
|
|
@@ -6195,14 +6143,14 @@ var AddJobType$1 = connect(mapStateToProps$1, {
|
|
|
6195
6143
|
|
|
6196
6144
|
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; }
|
|
6197
6145
|
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; }
|
|
6198
|
-
|
|
6146
|
+
const {
|
|
6199
6147
|
Analytics: Analytics$1,
|
|
6200
6148
|
Session,
|
|
6201
6149
|
Components,
|
|
6202
6150
|
Helper,
|
|
6203
6151
|
Colours
|
|
6204
6152
|
} = PlussCore;
|
|
6205
|
-
|
|
6153
|
+
const getInitialState = () => ({
|
|
6206
6154
|
requests: 0,
|
|
6207
6155
|
prevRequests: 0,
|
|
6208
6156
|
completedRequests: 0,
|
|
@@ -6213,8 +6161,8 @@ var getInitialState = () => ({
|
|
|
6213
6161
|
});
|
|
6214
6162
|
|
|
6215
6163
|
// AnalyticsHub Component
|
|
6216
|
-
|
|
6217
|
-
|
|
6164
|
+
const AnalyticsHub = _ref => {
|
|
6165
|
+
let {
|
|
6218
6166
|
startTime,
|
|
6219
6167
|
endTime,
|
|
6220
6168
|
auth,
|
|
@@ -6225,27 +6173,27 @@ var AnalyticsHub = _ref => {
|
|
|
6225
6173
|
userCategory,
|
|
6226
6174
|
selectedSites
|
|
6227
6175
|
} = _ref;
|
|
6228
|
-
|
|
6229
|
-
|
|
6230
|
-
|
|
6231
|
-
|
|
6176
|
+
const [analyticsData, setAnalyticsData] = useState(getInitialState());
|
|
6177
|
+
const [isExportOpen, setIsExportOpen] = useState(false);
|
|
6178
|
+
const [failedSites, setFailedSites] = useState([]);
|
|
6179
|
+
const [comparisonData, setComparisonData] = useState({
|
|
6232
6180
|
requests: [],
|
|
6233
6181
|
completedRequests: [],
|
|
6234
6182
|
comments: [],
|
|
6235
6183
|
isLoading: true
|
|
6236
6184
|
});
|
|
6237
|
-
|
|
6238
|
-
|
|
6185
|
+
const comparisonMode = selectedSites && selectedSites.length > 1;
|
|
6186
|
+
const hasAccess = Session.validateAccess(auth.site, values.permissionMaintenanceTracking, auth);
|
|
6239
6187
|
if (!hasAccess) {
|
|
6240
6188
|
return null;
|
|
6241
6189
|
}
|
|
6242
|
-
|
|
6190
|
+
const featureTitle = (key => {
|
|
6243
6191
|
if (!strings || !strings.sideNav || !strings.sideNav[key]) {
|
|
6244
6192
|
return values.textMenuTitle;
|
|
6245
6193
|
}
|
|
6246
6194
|
return strings.sideNav[key];
|
|
6247
6195
|
})();
|
|
6248
|
-
|
|
6196
|
+
const exportColumns = [{
|
|
6249
6197
|
label: "Select All",
|
|
6250
6198
|
key: ""
|
|
6251
6199
|
}, ...(comparisonMode ? [{
|
|
@@ -6270,104 +6218,94 @@ var AnalyticsHub = _ref => {
|
|
|
6270
6218
|
useEffect(() => {
|
|
6271
6219
|
getData();
|
|
6272
6220
|
}, [startTime, endTime, userType, userCategory, selectedSites]);
|
|
6273
|
-
|
|
6274
|
-
|
|
6275
|
-
|
|
6276
|
-
|
|
6277
|
-
|
|
6278
|
-
|
|
6279
|
-
|
|
6280
|
-
|
|
6281
|
-
|
|
6282
|
-
|
|
6283
|
-
|
|
6284
|
-
|
|
6285
|
-
|
|
6286
|
-
|
|
6287
|
-
data
|
|
6288
|
-
} = yield analyticsActions.getAggregateEntityStats(site, values.analyticsKey, startTime, endTime, true, {
|
|
6289
|
-
userType,
|
|
6290
|
-
userCategory
|
|
6291
|
-
});
|
|
6292
|
-
return data;
|
|
6293
|
-
});
|
|
6294
|
-
return function (_x) {
|
|
6295
|
-
return _ref3.apply(this, arguments);
|
|
6296
|
-
};
|
|
6297
|
-
}());
|
|
6298
|
-
var roles = auth.user.Roles;
|
|
6299
|
-
var failed = Object.entries(multiSiteResultsObj).filter(_ref4 => {
|
|
6300
|
-
var [, data] = _ref4;
|
|
6301
|
-
return data === null;
|
|
6302
|
-
}).map(_ref5 => {
|
|
6303
|
-
var [site] = _ref5;
|
|
6304
|
-
return Helper.getSiteNameFromRoles(site, roles);
|
|
6305
|
-
});
|
|
6306
|
-
setFailedSites(failed);
|
|
6307
|
-
var multiSiteResults = Object.entries(multiSiteResultsObj).filter(_ref6 => {
|
|
6308
|
-
var [, data] = _ref6;
|
|
6309
|
-
return data !== null;
|
|
6310
|
-
}).map(_ref7 => {
|
|
6311
|
-
var [site, data] = _ref7;
|
|
6312
|
-
return {
|
|
6313
|
-
site,
|
|
6314
|
-
data
|
|
6315
|
-
};
|
|
6316
|
-
});
|
|
6317
|
-
var buildComparison = (activityKey, countType) => multiSiteResults.map(result => ({
|
|
6318
|
-
name: Helper.getSiteNameFromRoles(result.site, roles),
|
|
6319
|
-
value: Analytics$1.countActivities(result.data, activityKey, countType)
|
|
6320
|
-
}));
|
|
6321
|
-
setComparisonData({
|
|
6322
|
-
requests: buildComparison("Request", "total"),
|
|
6323
|
-
completedRequests: buildComparison("RequestCompleted", "unique"),
|
|
6324
|
-
comments: buildComparison("Comment", "total"),
|
|
6325
|
-
isLoading: false
|
|
6326
|
-
});
|
|
6327
|
-
} else {
|
|
6328
|
-
setAnalyticsData(getInitialState());
|
|
6329
|
-
var site = selectedSites && selectedSites.length === 1 ? selectedSites[0] : auth.site;
|
|
6330
|
-
var timeDifference = endTime - startTime;
|
|
6331
|
-
var [currentStatsResponse, prevStatsResponse] = yield Promise.all([analyticsActions.getAggregateEntityStats(site, values.analyticsKey, startTime, endTime, true, {
|
|
6332
|
-
userType,
|
|
6333
|
-
userCategory
|
|
6334
|
-
}), analyticsActions.getAggregateEntityStats(site, values.analyticsKey, startTime - timeDifference, startTime, true, {
|
|
6221
|
+
const getData = async () => {
|
|
6222
|
+
try {
|
|
6223
|
+
setFailedSites([]);
|
|
6224
|
+
if (comparisonMode) {
|
|
6225
|
+
setComparisonData({
|
|
6226
|
+
requests: [],
|
|
6227
|
+
completedRequests: [],
|
|
6228
|
+
comments: [],
|
|
6229
|
+
isLoading: true
|
|
6230
|
+
});
|
|
6231
|
+
const multiSiteResultsObj = await Analytics$1.fetchMultiSiteData(selectedSites, async site => {
|
|
6232
|
+
const {
|
|
6233
|
+
data
|
|
6234
|
+
} = await analyticsActions.getAggregateEntityStats(site, values.analyticsKey, startTime, endTime, true, {
|
|
6335
6235
|
userType,
|
|
6336
6236
|
userCategory
|
|
6337
|
-
})
|
|
6338
|
-
|
|
6339
|
-
|
|
6340
|
-
|
|
6341
|
-
|
|
6342
|
-
|
|
6343
|
-
|
|
6344
|
-
|
|
6345
|
-
|
|
6237
|
+
});
|
|
6238
|
+
return data;
|
|
6239
|
+
});
|
|
6240
|
+
const roles = auth.user.Roles;
|
|
6241
|
+
const failed = Object.entries(multiSiteResultsObj).filter(_ref2 => {
|
|
6242
|
+
let [, data] = _ref2;
|
|
6243
|
+
return data === null;
|
|
6244
|
+
}).map(_ref3 => {
|
|
6245
|
+
let [site] = _ref3;
|
|
6246
|
+
return Helper.getSiteNameFromRoles(site, roles);
|
|
6247
|
+
});
|
|
6248
|
+
setFailedSites(failed);
|
|
6249
|
+
const multiSiteResults = Object.entries(multiSiteResultsObj).filter(_ref4 => {
|
|
6250
|
+
let [, data] = _ref4;
|
|
6251
|
+
return data !== null;
|
|
6252
|
+
}).map(_ref5 => {
|
|
6253
|
+
let [site, data] = _ref5;
|
|
6254
|
+
return {
|
|
6255
|
+
site,
|
|
6256
|
+
data
|
|
6346
6257
|
};
|
|
6347
|
-
|
|
6348
|
-
|
|
6349
|
-
|
|
6350
|
-
|
|
6351
|
-
|
|
6352
|
-
|
|
6353
|
-
|
|
6354
|
-
|
|
6355
|
-
|
|
6356
|
-
|
|
6357
|
-
|
|
6358
|
-
|
|
6258
|
+
});
|
|
6259
|
+
const buildComparison = (activityKey, countType) => multiSiteResults.map(result => ({
|
|
6260
|
+
name: Helper.getSiteNameFromRoles(result.site, roles),
|
|
6261
|
+
value: Analytics$1.countActivities(result.data, activityKey, countType)
|
|
6262
|
+
}));
|
|
6263
|
+
setComparisonData({
|
|
6264
|
+
requests: buildComparison("Request", "total"),
|
|
6265
|
+
completedRequests: buildComparison("RequestCompleted", "unique"),
|
|
6266
|
+
comments: buildComparison("Comment", "total"),
|
|
6267
|
+
isLoading: false
|
|
6268
|
+
});
|
|
6269
|
+
} else {
|
|
6270
|
+
setAnalyticsData(getInitialState());
|
|
6271
|
+
const site = selectedSites && selectedSites.length === 1 ? selectedSites[0] : auth.site;
|
|
6272
|
+
const timeDifference = endTime - startTime;
|
|
6273
|
+
const [currentStatsResponse, prevStatsResponse] = await Promise.all([analyticsActions.getAggregateEntityStats(site, values.analyticsKey, startTime, endTime, true, {
|
|
6274
|
+
userType,
|
|
6275
|
+
userCategory
|
|
6276
|
+
}), analyticsActions.getAggregateEntityStats(site, values.analyticsKey, startTime - timeDifference, startTime, true, {
|
|
6277
|
+
userType,
|
|
6278
|
+
userCategory
|
|
6279
|
+
})]);
|
|
6280
|
+
const data = {
|
|
6281
|
+
requests: Analytics$1.countActivities(currentStatsResponse.data, "Request", "total"),
|
|
6282
|
+
prevRequests: Analytics$1.countActivities(prevStatsResponse.data, "Request", "total"),
|
|
6283
|
+
completedRequests: Analytics$1.countActivities(currentStatsResponse.data, "RequestCompleted", "unique"),
|
|
6284
|
+
prevCompletedRequests: Analytics$1.countActivities(prevStatsResponse.data, "RequestCompleted", "unique"),
|
|
6285
|
+
comments: Analytics$1.countActivities(currentStatsResponse.data, "Comment", "total"),
|
|
6286
|
+
prevComments: Analytics$1.countActivities(prevStatsResponse.data, "Comment", "total"),
|
|
6287
|
+
isLoading: false
|
|
6288
|
+
};
|
|
6289
|
+
setAnalyticsData(data);
|
|
6359
6290
|
}
|
|
6360
|
-
})
|
|
6361
|
-
|
|
6362
|
-
|
|
6363
|
-
|
|
6364
|
-
|
|
6365
|
-
|
|
6291
|
+
} catch (err) {
|
|
6292
|
+
if (comparisonMode) {
|
|
6293
|
+
setComparisonData(prev => _objectSpread$3(_objectSpread$3({}, prev), {}, {
|
|
6294
|
+
isLoading: false
|
|
6295
|
+
}));
|
|
6296
|
+
} else {
|
|
6297
|
+
setAnalyticsData(prev => _objectSpread$3(_objectSpread$3({}, prev), {}, {
|
|
6298
|
+
isLoading: false
|
|
6299
|
+
}));
|
|
6300
|
+
}
|
|
6301
|
+
}
|
|
6302
|
+
};
|
|
6303
|
+
const isReadyToOpenCSV = () => {
|
|
6366
6304
|
return comparisonMode ? !comparisonData.isLoading : !analyticsData.isLoading;
|
|
6367
6305
|
};
|
|
6368
|
-
|
|
6306
|
+
const getExportSource = () => {
|
|
6369
6307
|
if (comparisonMode) {
|
|
6370
|
-
|
|
6308
|
+
const sites = comparisonData.requests || [];
|
|
6371
6309
|
return sites.map((site, i) => ({
|
|
6372
6310
|
site: site.name,
|
|
6373
6311
|
startDate: moment(startTime + 1).format("D-MM-YYYY"),
|
|
@@ -6385,12 +6323,12 @@ var AnalyticsHub = _ref => {
|
|
|
6385
6323
|
comments: analyticsData.comments
|
|
6386
6324
|
}];
|
|
6387
6325
|
};
|
|
6388
|
-
|
|
6326
|
+
const csvPopup = () => {
|
|
6389
6327
|
if (!isExportOpen) {
|
|
6390
6328
|
return null;
|
|
6391
6329
|
}
|
|
6392
|
-
|
|
6393
|
-
|
|
6330
|
+
const source = getExportSource();
|
|
6331
|
+
const filterSuffix = [userType, userCategory].filter(Boolean).map(f => f.toLowerCase().replace(/\s+/g, "-")).join("_");
|
|
6394
6332
|
return /*#__PURE__*/jsx(Components.ExportCsvPopup, {
|
|
6395
6333
|
onClose: () => {
|
|
6396
6334
|
setIsExportOpen(false);
|
|
@@ -6428,7 +6366,7 @@ var AnalyticsHub = _ref => {
|
|
|
6428
6366
|
}), /*#__PURE__*/jsx("div", {
|
|
6429
6367
|
className: "analyticsSection dashboardSection_content",
|
|
6430
6368
|
children: (() => {
|
|
6431
|
-
|
|
6369
|
+
const chartSuffix = [selectedSites && selectedSites.length > 0 ? "&sites=".concat(selectedSites.join(",")) : "", userType ? "&userType=".concat(encodeURIComponent(userType)) : "", userCategory ? "&userCategory=".concat(encodeURIComponent(userCategory)) : ""].join("");
|
|
6432
6370
|
if (comparisonMode) {
|
|
6433
6371
|
return /*#__PURE__*/jsxs("div", {
|
|
6434
6372
|
style: {
|
|
@@ -6488,8 +6426,8 @@ var AnalyticsHub = _ref => {
|
|
|
6488
6426
|
})]
|
|
6489
6427
|
});
|
|
6490
6428
|
};
|
|
6491
|
-
|
|
6492
|
-
|
|
6429
|
+
const mapStateToProps = state => {
|
|
6430
|
+
const {
|
|
6493
6431
|
auth
|
|
6494
6432
|
} = state;
|
|
6495
6433
|
return {
|
|
@@ -6497,11 +6435,11 @@ var mapStateToProps = state => {
|
|
|
6497
6435
|
strings: state.strings && state.strings.config || {}
|
|
6498
6436
|
};
|
|
6499
6437
|
};
|
|
6500
|
-
|
|
6438
|
+
const toExport = connect(mapStateToProps, {})(AnalyticsHub);
|
|
6501
6439
|
|
|
6502
6440
|
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; }
|
|
6503
6441
|
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; }
|
|
6504
|
-
|
|
6442
|
+
const INITIAL_STATE = {
|
|
6505
6443
|
jobs: [],
|
|
6506
6444
|
jobtypes: [],
|
|
6507
6445
|
jobstatuses: jobStatusOptions,
|
|
@@ -6509,15 +6447,15 @@ var INITIAL_STATE = {
|
|
|
6509
6447
|
hideSeen: false
|
|
6510
6448
|
};
|
|
6511
6449
|
var MaintenanceReducer = (function () {
|
|
6512
|
-
|
|
6513
|
-
|
|
6450
|
+
let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : INITIAL_STATE;
|
|
6451
|
+
let action = arguments.length > 1 ? arguments[1] : undefined;
|
|
6514
6452
|
switch (action.type) {
|
|
6515
6453
|
case JOBS_LOADING:
|
|
6516
6454
|
return _objectSpread$2(_objectSpread$2({}, state), {}, {
|
|
6517
6455
|
loading: true
|
|
6518
6456
|
});
|
|
6519
6457
|
case JOBS_LOADED:
|
|
6520
|
-
|
|
6458
|
+
const result = _.unionWith(action.payload, state.jobs, (v1, v2) => {
|
|
6521
6459
|
return v1 != null && v2 != null && v1.id === v2.id;
|
|
6522
6460
|
});
|
|
6523
6461
|
return _objectSpread$2(_objectSpread$2({}, state), {}, {
|
|
@@ -6527,11 +6465,11 @@ var MaintenanceReducer = (function () {
|
|
|
6527
6465
|
loading: false
|
|
6528
6466
|
});
|
|
6529
6467
|
case JOBS_REMOVED:
|
|
6530
|
-
|
|
6468
|
+
const index = _.findIndex(state.jobs, event => {
|
|
6531
6469
|
return event != null && event.id === action.payload;
|
|
6532
6470
|
});
|
|
6533
6471
|
if (index > -1) {
|
|
6534
|
-
|
|
6472
|
+
const newJobs = [...state.jobs];
|
|
6535
6473
|
newJobs.splice(index, 1);
|
|
6536
6474
|
return _objectSpread$2(_objectSpread$2({}, state), {}, {
|
|
6537
6475
|
jobs: newJobs
|
|
@@ -6539,14 +6477,14 @@ var MaintenanceReducer = (function () {
|
|
|
6539
6477
|
}
|
|
6540
6478
|
return state;
|
|
6541
6479
|
case JOBS_TYPES_LOADED:
|
|
6542
|
-
|
|
6480
|
+
const jobtypes = _.unionWith(action.payload, state.jobtypes, (v1, v2) => {
|
|
6543
6481
|
return v1 != null && v2 != null && v1.id === v2.id;
|
|
6544
6482
|
});
|
|
6545
6483
|
return _objectSpread$2(_objectSpread$2({}, state), {}, {
|
|
6546
6484
|
jobtypes
|
|
6547
6485
|
});
|
|
6548
6486
|
case JOBS_STATUSES_LOADED:
|
|
6549
|
-
|
|
6487
|
+
const jobstatuses = _.orderBy(action.payload, "order", "asc");
|
|
6550
6488
|
return _objectSpread$2(_objectSpread$2({}, state), {}, {
|
|
6551
6489
|
jobstatuses
|
|
6552
6490
|
});
|
|
@@ -6561,7 +6499,7 @@ var MaintenanceReducer = (function () {
|
|
|
6561
6499
|
|
|
6562
6500
|
class ActivityText extends Component {
|
|
6563
6501
|
render() {
|
|
6564
|
-
|
|
6502
|
+
const {
|
|
6565
6503
|
data,
|
|
6566
6504
|
classes,
|
|
6567
6505
|
clickableClasses,
|
|
@@ -6637,7 +6575,7 @@ var img$3 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAxwAAAGGCAYAAADxZYcEA
|
|
|
6637
6575
|
|
|
6638
6576
|
class ViewWidget extends Component {
|
|
6639
6577
|
render() {
|
|
6640
|
-
|
|
6578
|
+
let src = img$3;
|
|
6641
6579
|
return /*#__PURE__*/jsx("img", {
|
|
6642
6580
|
style: styles$3.image,
|
|
6643
6581
|
src: src,
|
|
@@ -6645,7 +6583,7 @@ class ViewWidget extends Component {
|
|
|
6645
6583
|
});
|
|
6646
6584
|
}
|
|
6647
6585
|
}
|
|
6648
|
-
|
|
6586
|
+
const styles$3 = {
|
|
6649
6587
|
image: {
|
|
6650
6588
|
width: 80
|
|
6651
6589
|
}
|
|
@@ -6655,7 +6593,7 @@ var img$2 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAmAAAASICAYAAAC0rHMFA
|
|
|
6655
6593
|
|
|
6656
6594
|
class ViewFull extends Component {
|
|
6657
6595
|
render() {
|
|
6658
|
-
|
|
6596
|
+
let src = img$2;
|
|
6659
6597
|
return /*#__PURE__*/jsx("img", {
|
|
6660
6598
|
style: styles$2.image,
|
|
6661
6599
|
src: src,
|
|
@@ -6663,7 +6601,7 @@ class ViewFull extends Component {
|
|
|
6663
6601
|
});
|
|
6664
6602
|
}
|
|
6665
6603
|
}
|
|
6666
|
-
|
|
6604
|
+
const styles$2 = {
|
|
6667
6605
|
image: {
|
|
6668
6606
|
width: "100%",
|
|
6669
6607
|
height: "100%",
|
|
@@ -6677,12 +6615,12 @@ function ownKeys$1(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymb
|
|
|
6677
6615
|
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; }
|
|
6678
6616
|
class PreviewWidget extends Component {
|
|
6679
6617
|
render() {
|
|
6680
|
-
|
|
6618
|
+
const {
|
|
6681
6619
|
backgroundColor,
|
|
6682
6620
|
widgetTitle,
|
|
6683
6621
|
titleClassName
|
|
6684
6622
|
} = this.props;
|
|
6685
|
-
|
|
6623
|
+
let src = img$1;
|
|
6686
6624
|
return /*#__PURE__*/jsxs("div", {
|
|
6687
6625
|
style: styles$1.container,
|
|
6688
6626
|
children: [/*#__PURE__*/jsx("img", {
|
|
@@ -6699,7 +6637,7 @@ class PreviewWidget extends Component {
|
|
|
6699
6637
|
});
|
|
6700
6638
|
}
|
|
6701
6639
|
}
|
|
6702
|
-
|
|
6640
|
+
const styles$1 = {
|
|
6703
6641
|
container: {
|
|
6704
6642
|
position: "relative"
|
|
6705
6643
|
},
|
|
@@ -6714,12 +6652,12 @@ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbol
|
|
|
6714
6652
|
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; }
|
|
6715
6653
|
class PreviewFull extends Component {
|
|
6716
6654
|
render() {
|
|
6717
|
-
|
|
6655
|
+
const {
|
|
6718
6656
|
backgroundColor,
|
|
6719
6657
|
widgetTitle,
|
|
6720
6658
|
titleClassName
|
|
6721
6659
|
} = this.props;
|
|
6722
|
-
|
|
6660
|
+
let src = img;
|
|
6723
6661
|
return /*#__PURE__*/jsxs("div", {
|
|
6724
6662
|
style: styles.container,
|
|
6725
6663
|
children: [/*#__PURE__*/jsx("p", {
|
|
@@ -6735,7 +6673,7 @@ class PreviewFull extends Component {
|
|
|
6735
6673
|
});
|
|
6736
6674
|
}
|
|
6737
6675
|
}
|
|
6738
|
-
|
|
6676
|
+
const styles = {
|
|
6739
6677
|
container: {
|
|
6740
6678
|
position: "relative"
|
|
6741
6679
|
},
|
|
@@ -6744,11 +6682,11 @@ var styles = {
|
|
|
6744
6682
|
}
|
|
6745
6683
|
};
|
|
6746
6684
|
|
|
6747
|
-
|
|
6748
|
-
|
|
6685
|
+
const SVG_PATH = values.svgPathGridIcon;
|
|
6686
|
+
const SVG_VIEWBOX = values.svgPathGridIconViewBox ;
|
|
6749
6687
|
class PreviewGrid extends Component {
|
|
6750
6688
|
render() {
|
|
6751
|
-
|
|
6689
|
+
const {
|
|
6752
6690
|
colour
|
|
6753
6691
|
} = this.props;
|
|
6754
6692
|
if (Array.isArray(SVG_PATH)) {
|
|
@@ -6775,20 +6713,20 @@ class PreviewGrid extends Component {
|
|
|
6775
6713
|
}
|
|
6776
6714
|
}
|
|
6777
6715
|
|
|
6778
|
-
|
|
6779
|
-
|
|
6716
|
+
const Reducers = (() => {
|
|
6717
|
+
const reducers = {};
|
|
6780
6718
|
reducers[values.reducerKey] = MaintenanceReducer;
|
|
6781
6719
|
return reducers;
|
|
6782
6720
|
})();
|
|
6783
|
-
|
|
6784
|
-
|
|
6721
|
+
const Screens = (() => {
|
|
6722
|
+
const screens = {};
|
|
6785
6723
|
screens[values.screenRequestsHub] = RequestsHub$1;
|
|
6786
6724
|
screens[values.screenJob] = Job$1;
|
|
6787
6725
|
screens[values.screenAddJob] = AddJob$1;
|
|
6788
6726
|
screens[values.screenAddJobType] = AddJobType$1;
|
|
6789
6727
|
return screens;
|
|
6790
6728
|
})();
|
|
6791
|
-
|
|
6729
|
+
const Analytics = [toExport];
|
|
6792
6730
|
|
|
6793
6731
|
export { ActivityText, Analytics, FeatureConfig as Config, PreviewFull, PreviewGrid, PreviewWidget, Reducers, Screens, ViewFull, ViewWidget };
|
|
6794
6732
|
//# sourceMappingURL=index.js.map
|