@plusscommunities/pluss-maintenance-app 6.0.6-auth.0 → 6.1.2-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/module/actions/types.js +4 -3
- package/dist/module/actions/types.js.map +1 -1
- package/dist/module/apis/{maintenanceActions.js → generalActions.js} +51 -33
- package/dist/module/apis/generalActions.js.map +1 -0
- package/dist/module/apis/index.js +1 -1
- package/dist/module/apis/index.js.map +1 -1
- package/dist/module/components/FilterPopupMenu.js +12 -48
- package/dist/module/components/FilterPopupMenu.js.map +1 -1
- package/dist/module/components/MaintenanceList.js +19 -52
- package/dist/module/components/MaintenanceList.js.map +1 -1
- package/dist/module/components/MaintenanceListItem.js +17 -15
- package/dist/module/components/MaintenanceListItem.js.map +1 -1
- package/dist/module/components/MaintenanceWidgetItem.js +9 -4
- package/dist/module/components/MaintenanceWidgetItem.js.map +1 -1
- package/dist/module/components/StatusSelectorPopup.js +1 -2
- package/dist/module/components/StatusSelectorPopup.js.map +1 -1
- package/dist/module/components/WidgetSmall.js +10 -7
- package/dist/module/components/WidgetSmall.js.map +1 -1
- package/dist/module/feature.config.js +18 -33
- package/dist/module/feature.config.js.map +1 -1
- package/dist/module/helper.js +2 -10
- package/dist/module/helper.js.map +1 -1
- package/dist/module/index.js +15 -10
- package/dist/module/index.js.map +1 -1
- package/dist/module/reducers/JobsReducer.js +2 -2
- package/dist/module/reducers/JobsReducer.js.map +1 -1
- package/dist/module/screens/JobTypePicker.js +2 -2
- package/dist/module/screens/MaintenancePage.js +9 -5
- package/dist/module/screens/MaintenancePage.js.map +1 -1
- package/dist/module/screens/RequestDetail.js +44 -145
- package/dist/module/screens/RequestDetail.js.map +1 -1
- package/dist/module/screens/RequestNotes.js +8 -7
- package/dist/module/screens/RequestNotes.js.map +1 -1
- package/dist/module/screens/ServiceRequest.js +12 -9
- package/dist/module/screens/ServiceRequest.js.map +1 -1
- package/dist/module/values.config.a.js +28 -0
- package/dist/module/values.config.a.js.map +1 -0
- package/dist/module/values.config.b.js +28 -0
- package/dist/module/values.config.b.js.map +1 -0
- package/dist/module/values.config.c.js +28 -0
- package/dist/module/values.config.c.js.map +1 -0
- package/dist/module/values.config.d.js +28 -0
- package/dist/module/values.config.d.js.map +1 -0
- package/dist/module/values.config.default.js +28 -0
- package/dist/module/values.config.default.js.map +1 -0
- package/dist/module/values.config.js +28 -0
- package/dist/module/values.config.js.map +1 -0
- package/package.json +13 -9
- package/src/actions/types.js +5 -3
- package/src/apis/{maintenanceActions.js → generalActions.js} +50 -30
- package/src/apis/index.js +1 -1
- package/src/components/FilterPopupMenu.js +7 -39
- package/src/components/MaintenanceList.js +21 -59
- package/src/components/MaintenanceListItem.js +10 -13
- package/src/components/MaintenanceWidgetItem.js +3 -2
- package/src/components/StatusSelectorPopup.js +1 -2
- package/src/components/WidgetSmall.js +8 -5
- package/src/feature.config.js +18 -30
- package/src/helper.js +2 -11
- package/src/index.js +15 -8
- package/src/screens/MaintenancePage.js +5 -4
- package/src/screens/RequestDetail.js +19 -135
- package/src/screens/RequestNotes.js +6 -5
- package/src/screens/ServiceRequest.js +8 -6
- package/src/values.config.a.js +28 -0
- package/src/values.config.b.js +28 -0
- package/src/values.config.c.js +28 -0
- package/src/values.config.d.js +28 -0
- package/src/values.config.default.js +28 -0
- package/src/values.config.js +28 -0
- package/dist/module/apis/maintenanceActions.js.map +0 -1
@@ -5,12 +5,13 @@ import { Icon } from 'react-native-elements';
|
|
5
5
|
import _ from 'lodash';
|
6
6
|
import moment from 'moment';
|
7
7
|
import { connect } from 'react-redux';
|
8
|
-
import {
|
8
|
+
import { generalActions } from '../apis';
|
9
9
|
import { jobAdded } from '../actions';
|
10
10
|
import StatusSelectorPopup from '../components/StatusSelectorPopup';
|
11
11
|
import { jobStatusOptions, getJobStatusProps } from '../helper';
|
12
12
|
import { Services } from '../feature.config';
|
13
13
|
import { Colours, Helper, Components, Config } from '../core.config';
|
14
|
+
import { values } from '../values.config';
|
14
15
|
|
15
16
|
class RequestDetail extends Component {
|
16
17
|
constructor(props) {
|
@@ -24,14 +25,13 @@ class RequestDetail extends Component {
|
|
24
25
|
expectedDate: null,
|
25
26
|
expectedDateText: '',
|
26
27
|
seen: false,
|
27
|
-
showMore:
|
28
|
+
showMore: false,
|
28
29
|
showStatusPopup: false,
|
29
30
|
loading: false,
|
30
31
|
showFullscreenVideo: false,
|
31
32
|
currentVideoUrl: '',
|
32
33
|
galleryOpen: false,
|
33
34
|
showMessages: false,
|
34
|
-
assignees: [],
|
35
35
|
};
|
36
36
|
|
37
37
|
this.scrollView = React.createRef();
|
@@ -40,9 +40,7 @@ class RequestDetail extends Component {
|
|
40
40
|
}
|
41
41
|
|
42
42
|
componentDidMount() {
|
43
|
-
this.getJob();
|
44
43
|
this.updateJobState();
|
45
|
-
this.getAssignees();
|
46
44
|
}
|
47
45
|
|
48
46
|
componentDidUpdate(prevProps) {
|
@@ -51,38 +49,6 @@ class RequestDetail extends Component {
|
|
51
49
|
}
|
52
50
|
}
|
53
51
|
|
54
|
-
getJob = async () => {
|
55
|
-
console.log('getting job');
|
56
|
-
this.setState({ loading: true }, async () => {
|
57
|
-
try {
|
58
|
-
const res = await maintenanceActions.getJob(this.props.job.site, this.props.job.id);
|
59
|
-
this.props.jobAdded(res.data);
|
60
|
-
console.log('got the job');
|
61
|
-
} catch (error) {
|
62
|
-
console.log('getJob error', error.toString());
|
63
|
-
// check for 403 or 404 error
|
64
|
-
if (error.response.status === 403 || error.response.status === 404) {
|
65
|
-
this.setState({
|
66
|
-
forbidden: true,
|
67
|
-
});
|
68
|
-
}
|
69
|
-
console.log('getJob error', error);
|
70
|
-
} finally {
|
71
|
-
this.setState({ loading: false });
|
72
|
-
}
|
73
|
-
});
|
74
|
-
};
|
75
|
-
|
76
|
-
getAssignees = async () => {
|
77
|
-
if (!this.hasPermission()) return;
|
78
|
-
try {
|
79
|
-
const res = await maintenanceActions.getAssignees(this.props.user.site);
|
80
|
-
this.setState({ assignees: res.data.Users });
|
81
|
-
} catch (error) {
|
82
|
-
console.log('getAssignees error', error);
|
83
|
-
}
|
84
|
-
};
|
85
|
-
|
86
52
|
updateJobState() {
|
87
53
|
const job = _.find(this.props.jobs, j => j.id === this.props.job.id) || this.props.job;
|
88
54
|
const newState = { job, status: job.status };
|
@@ -108,7 +74,7 @@ class RequestDetail extends Component {
|
|
108
74
|
this.setState({ loading: true }, async () => {
|
109
75
|
try {
|
110
76
|
const updated = { id: job.id, seen: true, status: job.status || 'Unassigned' };
|
111
|
-
const res = await
|
77
|
+
const res = await generalActions.editJob(updated, user.site);
|
112
78
|
// console.log('markSeen updated');
|
113
79
|
this.props.jobAdded(res.data.job);
|
114
80
|
this.setState({ loading: false, seen: true });
|
@@ -130,7 +96,7 @@ class RequestDetail extends Component {
|
|
130
96
|
.utc()
|
131
97
|
.toISOString();
|
132
98
|
}
|
133
|
-
const res = await
|
99
|
+
const res = await generalActions.editJob(updated, user.site);
|
134
100
|
this.props.jobAdded(res.data.job);
|
135
101
|
} catch (error) {
|
136
102
|
console.log('updateJob error', error);
|
@@ -143,7 +109,7 @@ class RequestDetail extends Component {
|
|
143
109
|
updateJobStatus = () => {
|
144
110
|
this.setState({ loading: true }, async () => {
|
145
111
|
try {
|
146
|
-
const res = await
|
112
|
+
const res = await generalActions.editJobStatus(this.props.job.id, this.state.status);
|
147
113
|
this.props.jobAdded(res.data.job);
|
148
114
|
} catch (error) {
|
149
115
|
console.log('updateJobStatus error', error);
|
@@ -172,7 +138,7 @@ class RequestDetail extends Component {
|
|
172
138
|
};
|
173
139
|
|
174
140
|
openStaffNotes = () => {
|
175
|
-
Services.navigation.navigate(
|
141
|
+
Services.navigation.navigate(values.screenRequestNotes, { job: this.state.job });
|
176
142
|
};
|
177
143
|
|
178
144
|
onOpenDatePicker = () => {
|
@@ -216,7 +182,7 @@ class RequestDetail extends Component {
|
|
216
182
|
onCommentAdded = () => {
|
217
183
|
this.setState({ loading: true }, async () => {
|
218
184
|
try {
|
219
|
-
const job = await
|
185
|
+
const job = await generalActions.getJob(this.props.user.site, this.props.job.id);
|
220
186
|
// console.log('onCommentAdded', job?.data);
|
221
187
|
this.props.jobAdded(job.data);
|
222
188
|
} catch (error) {
|
@@ -228,15 +194,8 @@ class RequestDetail extends Component {
|
|
228
194
|
};
|
229
195
|
|
230
196
|
hasPermission = () => {
|
231
|
-
const { job } = this.state;
|
232
197
|
const { permissions } = this.props.user;
|
233
|
-
|
234
|
-
return true;
|
235
|
-
}
|
236
|
-
if (_.includes(permissions, 'maintenanceAssignment')) {
|
237
|
-
return job.AssigneeId === this.props.user.Id;
|
238
|
-
}
|
239
|
-
return false;
|
198
|
+
return _.includes(permissions, values.permissionMaintenanceTracking);
|
240
199
|
};
|
241
200
|
|
242
201
|
toggleFullscreenVideo = url => {
|
@@ -257,32 +216,6 @@ class RequestDetail extends Component {
|
|
257
216
|
});
|
258
217
|
}
|
259
218
|
|
260
|
-
onOpenAssigneePicker = () => {
|
261
|
-
const options = this.state.assignees.map(a => {
|
262
|
-
return { key: a.id, name: a.displayName };
|
263
|
-
});
|
264
|
-
Services.navigation.navigate('optionSelector', {
|
265
|
-
options,
|
266
|
-
selection: this.state.job.AssigneeId,
|
267
|
-
title: 'Assign request',
|
268
|
-
onSelect: this.onSelectAssignee,
|
269
|
-
});
|
270
|
-
};
|
271
|
-
|
272
|
-
onSelectAssignee = assignee => {
|
273
|
-
this.setState({ loading: true }, async () => {
|
274
|
-
try {
|
275
|
-
console.log('onSelectAssignee', this.props.job.id, assignee.key);
|
276
|
-
const res = await maintenanceActions.assignJob(this.props.job.id, assignee.key);
|
277
|
-
this.props.jobAdded(res.data.job);
|
278
|
-
} catch (error) {
|
279
|
-
console.log('onSelectAssignee error', error);
|
280
|
-
} finally {
|
281
|
-
this.setState({ loading: false });
|
282
|
-
}
|
283
|
-
});
|
284
|
-
};
|
285
|
-
|
286
219
|
renderLoading() {
|
287
220
|
return <Components.LoadingIndicator visible={this.state.loading} />;
|
288
221
|
}
|
@@ -296,13 +229,10 @@ class RequestDetail extends Component {
|
|
296
229
|
return (
|
297
230
|
<View style={{ ...Helper.getShadowStyle() }}>
|
298
231
|
<View style={styles.jobTitleContainer}>
|
299
|
-
{job.jobId ? <Text style={[styles.jobIdText, { color: this.props.colourBrandingMain }]}>{`Job #${job.jobId}`}</Text> : null}
|
300
232
|
<Text style={styles.jobTitleText}>{job.title}</Text>
|
301
233
|
<View style={styles.jobTypeSeenContainer}>
|
302
234
|
<View style={[styles.jobTypeContainer, { backgroundColor: Colours.hexToRGBAstring(this.props.colourBrandingMain, 0.2) }]}>
|
303
|
-
<Text style={[styles.jobTypeText, { color: this.props.colourBrandingMain }]}
|
304
|
-
{job.type}
|
305
|
-
</Text>
|
235
|
+
<Text style={[styles.jobTypeText, { color: this.props.colourBrandingMain }]}>{job.type}</Text>
|
306
236
|
</View>
|
307
237
|
{showSeen && this.state.seen && (
|
308
238
|
<View style={styles.jobSeenContainer}>
|
@@ -320,7 +250,7 @@ class RequestDetail extends Component {
|
|
320
250
|
</View>
|
321
251
|
</View>
|
322
252
|
)}
|
323
|
-
|
253
|
+
<View style={styles.textSectionInner}>
|
324
254
|
<Text style={styles.textSectionLabel}>Expected Date</Text>
|
325
255
|
<TouchableOpacity onPress={this.onOpenDatePicker}>
|
326
256
|
<View style={styles.textSectionTextContainer}>
|
@@ -332,13 +262,14 @@ class RequestDetail extends Component {
|
|
332
262
|
/>
|
333
263
|
</View>
|
334
264
|
</TouchableOpacity>
|
335
|
-
</View>
|
265
|
+
</View>
|
336
266
|
</View>
|
337
267
|
<View style={styles.jobStatusExpectedContainer}>
|
338
268
|
<View style={styles.jobStatusOuterContainer}>
|
339
269
|
<Text style={styles.jobStatusHeading}>STATUS</Text>
|
340
270
|
<TouchableOpacity onPress={canEdit ? this.onOpenStatusPicker : null}>
|
341
271
|
<View style={[styles.jobStatusContainer, { backgroundColor: statusColor }]}>
|
272
|
+
<Icon name="wrench" type="font-awesome" iconStyle={styles.jobStatusIcon} />
|
342
273
|
<Text style={styles.jobStatusText}>{statusText}</Text>
|
343
274
|
</View>
|
344
275
|
</TouchableOpacity>
|
@@ -419,42 +350,6 @@ class RequestDetail extends Component {
|
|
419
350
|
);
|
420
351
|
}
|
421
352
|
|
422
|
-
renderAssignee() {
|
423
|
-
const { job } = this.state;
|
424
|
-
if (!this.hasPermission() && !job.Assignee) return null;
|
425
|
-
|
426
|
-
const content = (
|
427
|
-
<View>
|
428
|
-
<Text style={styles.locationLabel}>Assigned To</Text>
|
429
|
-
<View>
|
430
|
-
{job.Assignee && (
|
431
|
-
<View style={styles.profileContainer}>
|
432
|
-
<Components.ProfilePic ProfilePic={job.Assignee.profilePic} Diameter={40} />
|
433
|
-
<View style={styles.nameContainer}>
|
434
|
-
<Text style={styles.nameText}>{job.Assignee.displayName}</Text>
|
435
|
-
</View>
|
436
|
-
</View>
|
437
|
-
)}
|
438
|
-
</View>
|
439
|
-
</View>
|
440
|
-
);
|
441
|
-
|
442
|
-
if (this.hasPermission()) {
|
443
|
-
return (
|
444
|
-
<Components.FormCardSectionOptionLauncher
|
445
|
-
onPress={this.onOpenAssigneePicker}
|
446
|
-
title="Assigned To"
|
447
|
-
value={job.Assignee ? job.Assignee.displayName : 'Unassigned'}
|
448
|
-
textStyle={styles.detailsText}
|
449
|
-
sectionStyle={styles.detailsSection}
|
450
|
-
>
|
451
|
-
{content}
|
452
|
-
</Components.FormCardSectionOptionLauncher>
|
453
|
-
);
|
454
|
-
}
|
455
|
-
return content;
|
456
|
-
}
|
457
|
-
|
458
353
|
rendeDetails() {
|
459
354
|
const { job } = this.state;
|
460
355
|
|
@@ -504,8 +399,8 @@ class RequestDetail extends Component {
|
|
504
399
|
ref={this.commentSection}
|
505
400
|
commentReply={this.commentReply}
|
506
401
|
scrollView={this.scrollView}
|
507
|
-
adminPermission=
|
508
|
-
entityType=
|
402
|
+
adminPermission={values.permissionMaintenanceTracking}
|
403
|
+
entityType={values.featureKey}
|
509
404
|
entityId={this.props.job.id}
|
510
405
|
entityName={this.props.job.title}
|
511
406
|
site={this.state.job.site || this.state.job.location}
|
@@ -542,7 +437,7 @@ class RequestDetail extends Component {
|
|
542
437
|
ref={this.commentReply}
|
543
438
|
commentSection={this.commentSection}
|
544
439
|
scrollView={this.scrollView}
|
545
|
-
entityType=
|
440
|
+
entityType={values.featureKey}
|
546
441
|
entityId={this.props.job.id}
|
547
442
|
entityName={this.props.job.title}
|
548
443
|
site={this.state.job.site || this.state.job.location}
|
@@ -558,9 +453,6 @@ class RequestDetail extends Component {
|
|
558
453
|
}
|
559
454
|
|
560
455
|
render() {
|
561
|
-
if (this.state.forbidden) {
|
562
|
-
return <Components.Forbidden />;
|
563
|
-
}
|
564
456
|
return (
|
565
457
|
<KeyboardAvoidingView behavior={Platform.OS === 'ios' && 'padding'} style={styles.container}>
|
566
458
|
<Components.Header leftIcon="angle-left" onPressLeft={this.onPressBack} text={Config.env.strings.MAINTENANCE_REQUEST_DETAILS} />
|
@@ -568,7 +460,6 @@ class RequestDetail extends Component {
|
|
568
460
|
<ScrollView ref={this.scrollView} contentContainerStyle={{ paddingBottom: 26 }} style={{ height: '100%' }}>
|
569
461
|
<View style={styles.innerContainer}>
|
570
462
|
{this.renderTop()}
|
571
|
-
{this.renderAssignee()}
|
572
463
|
{this.rendeDetails()}
|
573
464
|
{this.renderMessages()}
|
574
465
|
</View>
|
@@ -601,11 +492,6 @@ const styles = StyleSheet.create({
|
|
601
492
|
paddingVertical: 14,
|
602
493
|
paddingHorizontal: 12,
|
603
494
|
},
|
604
|
-
jobIdText: {
|
605
|
-
fontFamily: 'sf-medium',
|
606
|
-
fontSize: 12,
|
607
|
-
marginBottom: 4,
|
608
|
-
},
|
609
495
|
jobTitleText: {
|
610
496
|
fontFamily: 'sf-semibold',
|
611
497
|
fontSize: 20,
|
@@ -617,9 +503,8 @@ const styles = StyleSheet.create({
|
|
617
503
|
alignItems: 'center',
|
618
504
|
},
|
619
505
|
jobTypeContainer: {
|
620
|
-
|
621
|
-
|
622
|
-
maxWidth: 140,
|
506
|
+
height: 20,
|
507
|
+
width: 80,
|
623
508
|
borderRadius: 4,
|
624
509
|
justifyContent: 'center',
|
625
510
|
},
|
@@ -627,7 +512,6 @@ const styles = StyleSheet.create({
|
|
627
512
|
fontFamily: 'sf-semibold',
|
628
513
|
fontSize: 12,
|
629
514
|
textAlign: 'center',
|
630
|
-
maxWidth: '100%',
|
631
515
|
},
|
632
516
|
jobSeenContainer: {
|
633
517
|
flexDirection: 'row',
|
@@ -837,7 +721,7 @@ const mapStateToProps = state => {
|
|
837
721
|
return {
|
838
722
|
user: state.user,
|
839
723
|
colourBrandingMain: Colours.getMainBrandingColourFromState(state),
|
840
|
-
jobs: state.
|
724
|
+
jobs: state[values.reducerKey].jobs,
|
841
725
|
};
|
842
726
|
};
|
843
727
|
|
@@ -5,10 +5,11 @@ import { Icon } from 'react-native-elements';
|
|
5
5
|
import _ from 'lodash';
|
6
6
|
import moment from 'moment';
|
7
7
|
import { jobAdded } from '../actions';
|
8
|
-
import {
|
8
|
+
import { generalActions } from '../apis';
|
9
9
|
import { getBottomSpace } from 'react-native-iphone-x-helper';
|
10
10
|
import { Services } from '../feature.config';
|
11
11
|
import { Components, Colours, Helper } from '../core.config';
|
12
|
+
import { values } from '../values.config';
|
12
13
|
|
13
14
|
class RequestNotes extends Component {
|
14
15
|
constructor(props) {
|
@@ -61,7 +62,7 @@ class RequestNotes extends Component {
|
|
61
62
|
};
|
62
63
|
|
63
64
|
onPressConfirmDelete = () => {
|
64
|
-
|
65
|
+
generalActions.deleteNote(this.props.job.id, this.state.noteToDelete.Id);
|
65
66
|
const newNotes = _.filter(this.state.job.Notes, note => {
|
66
67
|
return note.Id !== this.state.noteToDelete.Id;
|
67
68
|
});
|
@@ -126,7 +127,7 @@ class RequestNotes extends Component {
|
|
126
127
|
try {
|
127
128
|
this.setState({ submittingNote: true });
|
128
129
|
const res = await (this.state.editingNote
|
129
|
-
?
|
130
|
+
? generalActions.editNote(
|
130
131
|
this.props.job.id,
|
131
132
|
this.state.editingNote,
|
132
133
|
this.state.noteInput,
|
@@ -137,7 +138,7 @@ class RequestNotes extends Component {
|
|
137
138
|
};
|
138
139
|
}),
|
139
140
|
)
|
140
|
-
:
|
141
|
+
: generalActions.addNote(
|
141
142
|
this.props.job.id,
|
142
143
|
this.state.noteInput,
|
143
144
|
this.state.noteAttachments.map(a => {
|
@@ -408,7 +409,7 @@ const mapStateToProps = state => {
|
|
408
409
|
user: state.user,
|
409
410
|
colourBrandingMain: Colours.getMainBrandingColourFromState(state),
|
410
411
|
colourBrandingLight: Colours.getLightBrandingColourFromState(state),
|
411
|
-
jobs: state.
|
412
|
+
jobs: state[values.reducerKey].jobs,
|
412
413
|
};
|
413
414
|
};
|
414
415
|
|
@@ -16,9 +16,10 @@ import _ from 'lodash';
|
|
16
16
|
import { Icon } from 'react-native-elements';
|
17
17
|
import { connect } from 'react-redux';
|
18
18
|
import { jobAdded } from '../actions';
|
19
|
-
import {
|
19
|
+
import { generalActions } from '../apis';
|
20
20
|
import { Services } from '../feature.config';
|
21
21
|
import { Components, Colours, Helper, Config } from '../core.config';
|
22
|
+
import { values } from '../values.config';
|
22
23
|
|
23
24
|
const PHOTO_SIZE = (Dimensions.get('window').width - 64) / 3;
|
24
25
|
|
@@ -143,7 +144,7 @@ class MaintenanceRequest extends Component {
|
|
143
144
|
}
|
144
145
|
|
145
146
|
onPressType() {
|
146
|
-
Services.navigation.navigate(
|
147
|
+
Services.navigation.navigate(values.screenJobTypePicker, {
|
147
148
|
currentType: this.state.type,
|
148
149
|
types: this.state.types,
|
149
150
|
onSelectType: this.pickType.bind(this),
|
@@ -179,7 +180,7 @@ class MaintenanceRequest extends Component {
|
|
179
180
|
|
180
181
|
getJobTypes() {
|
181
182
|
const self = this;
|
182
|
-
|
183
|
+
generalActions
|
183
184
|
.getJobTypes(Helper.getSite(this.props.site))
|
184
185
|
.then(res => {
|
185
186
|
self.setState({
|
@@ -227,7 +228,7 @@ class MaintenanceRequest extends Component {
|
|
227
228
|
return img.url;
|
228
229
|
});
|
229
230
|
|
230
|
-
|
231
|
+
generalActions
|
231
232
|
.sendMaintenanceRequest(
|
232
233
|
this.props.uid,
|
233
234
|
this.state.userName,
|
@@ -268,7 +269,7 @@ class MaintenanceRequest extends Component {
|
|
268
269
|
|
269
270
|
refreshRequest = async id => {
|
270
271
|
try {
|
271
|
-
const job = await
|
272
|
+
const job = await generalActions.getJob(Helper.getSite(this.props.site), id);
|
272
273
|
// console.log('refreshRequest', job?.data);
|
273
274
|
this.props.jobAdded(job.data);
|
274
275
|
} catch (error) {
|
@@ -614,7 +615,7 @@ class MaintenanceRequest extends Component {
|
|
614
615
|
<Components.Header
|
615
616
|
leftIcon="angle-left"
|
616
617
|
onPressLeft={this.onPressBack.bind(this)}
|
617
|
-
text={
|
618
|
+
text={this.props.strings[`${values.featureKey}_textFeatureTitle`] || values.textFeatureTitle}
|
618
619
|
rightText={this.state.submitting || this.state.success ? null : 'Done'}
|
619
620
|
onPressRight={this.submitRequest.bind(this)}
|
620
621
|
absoluteRight
|
@@ -740,6 +741,7 @@ const mapStateToProps = state => {
|
|
740
741
|
unit,
|
741
742
|
phoneNumber,
|
742
743
|
colourBrandingMain: Colours.getMainBrandingColourFromState(state),
|
744
|
+
strings: state.strings?.config || {},
|
743
745
|
};
|
744
746
|
};
|
745
747
|
|
@@ -0,0 +1,28 @@
|
|
1
|
+
const values = {
|
2
|
+
featureKey: 'maintenanceA',
|
3
|
+
aliases: ['maintenanceRequestA'],
|
4
|
+
reducerKey: 'jobsA',
|
5
|
+
serviceKey: 'maintenanceA',
|
6
|
+
updateKey: 'jobsA',
|
7
|
+
actionJobsLoaded: 'JOBS_LOADEDA',
|
8
|
+
actionJobAdded: 'JOB_ADDEDA',
|
9
|
+
actionJobsAdded: 'JOBS_ADDEDA',
|
10
|
+
screenMaintenance: 'maintenanceA',
|
11
|
+
screenRequestDetail: 'requestDetailA',
|
12
|
+
screenServiceRequest: 'serviceRequestA',
|
13
|
+
screenJobTypePicker: 'jobTypePickerA',
|
14
|
+
screenRequestNotes: 'requestNotesA',
|
15
|
+
permissionMaintenanceTracking: 'maintenanceTrackingA',
|
16
|
+
iconGridMenu: 'maintenance',
|
17
|
+
iconAddMenu: 'request',
|
18
|
+
iconKioskAction: 'wrench',
|
19
|
+
orderAddMenu: 5,
|
20
|
+
orderMoreMenu: 4,
|
21
|
+
orderKioskAction: 1,
|
22
|
+
textFeatureTitle: 'Request A',
|
23
|
+
textAddMenuTitle: 'Request A',
|
24
|
+
textMoreMenuTitle: 'Request A',
|
25
|
+
textKioskActionTitle: 'Request A',
|
26
|
+
};
|
27
|
+
|
28
|
+
export { values };
|
@@ -0,0 +1,28 @@
|
|
1
|
+
const values = {
|
2
|
+
featureKey: 'maintenanceB',
|
3
|
+
aliases: ['maintenanceRequestB'],
|
4
|
+
reducerKey: 'jobsB',
|
5
|
+
serviceKey: 'maintenanceB',
|
6
|
+
updateKey: 'jobsB',
|
7
|
+
actionJobsLoaded: 'JOBS_LOADEDB',
|
8
|
+
actionJobAdded: 'JOB_ADDEDB',
|
9
|
+
actionJobsAdded: 'JOBS_ADDEDB',
|
10
|
+
screenMaintenance: 'maintenanceB',
|
11
|
+
screenRequestDetail: 'requestDetailB',
|
12
|
+
screenServiceRequest: 'serviceRequestB',
|
13
|
+
screenJobTypePicker: 'jobTypePickerB',
|
14
|
+
screenRequestNotes: 'requestNotesB',
|
15
|
+
permissionMaintenanceTracking: 'maintenanceTrackingB',
|
16
|
+
iconGridMenu: 'maintenance',
|
17
|
+
iconAddMenu: 'request',
|
18
|
+
iconKioskAction: 'wrench',
|
19
|
+
orderAddMenu: 5,
|
20
|
+
orderMoreMenu: 4,
|
21
|
+
orderKioskAction: 1,
|
22
|
+
textFeatureTitle: 'Request B',
|
23
|
+
textAddMenuTitle: 'Request B',
|
24
|
+
textMoreMenuTitle: 'Request B',
|
25
|
+
textKioskActionTitle: 'Request B',
|
26
|
+
};
|
27
|
+
|
28
|
+
export { values };
|
@@ -0,0 +1,28 @@
|
|
1
|
+
const values = {
|
2
|
+
featureKey: 'maintenanceC',
|
3
|
+
aliases: ['maintenanceRequestC'],
|
4
|
+
reducerKey: 'jobsC',
|
5
|
+
serviceKey: 'maintenanceC',
|
6
|
+
updateKey: 'jobsC',
|
7
|
+
actionJobsLoaded: 'JOBS_LOADEDC',
|
8
|
+
actionJobAdded: 'JOB_ADDEDC',
|
9
|
+
actionJobsAdded: 'JOBS_ADDEDC',
|
10
|
+
screenMaintenance: 'maintenanceC',
|
11
|
+
screenRequestDetail: 'requestDetailC',
|
12
|
+
screenServiceRequest: 'serviceRequestC',
|
13
|
+
screenJobTypePicker: 'jobTypePickerC',
|
14
|
+
screenRequestNotes: 'requestNotesC',
|
15
|
+
permissionMaintenanceTracking: 'maintenanceTrackingC',
|
16
|
+
iconGridMenu: 'maintenance',
|
17
|
+
iconAddMenu: 'request',
|
18
|
+
iconKioskAction: 'wrench',
|
19
|
+
orderAddMenu: 5,
|
20
|
+
orderMoreMenu: 4,
|
21
|
+
orderKioskAction: 1,
|
22
|
+
textFeatureTitle: 'Request C',
|
23
|
+
textAddMenuTitle: 'Request C',
|
24
|
+
textMoreMenuTitle: 'Request C',
|
25
|
+
textKioskActionTitle: 'Request C',
|
26
|
+
};
|
27
|
+
|
28
|
+
export { values };
|
@@ -0,0 +1,28 @@
|
|
1
|
+
const values = {
|
2
|
+
featureKey: 'maintenanceD',
|
3
|
+
aliases: ['maintenanceRequestD'],
|
4
|
+
reducerKey: 'jobsD',
|
5
|
+
serviceKey: 'maintenanceD',
|
6
|
+
updateKey: 'jobsD',
|
7
|
+
actionJobsLoaded: 'JOBS_LOADEDD',
|
8
|
+
actionJobAdded: 'JOB_ADDEDD',
|
9
|
+
actionJobsAdded: 'JOBS_ADDEDD',
|
10
|
+
screenMaintenance: 'maintenanceD',
|
11
|
+
screenRequestDetail: 'requestDetailD',
|
12
|
+
screenServiceRequest: 'serviceRequestD',
|
13
|
+
screenJobTypePicker: 'jobTypePickerD',
|
14
|
+
screenRequestNotes: 'requestNotesD',
|
15
|
+
permissionMaintenanceTracking: 'maintenanceTrackingD',
|
16
|
+
iconGridMenu: 'maintenance',
|
17
|
+
iconAddMenu: 'request',
|
18
|
+
iconKioskAction: 'wrench',
|
19
|
+
orderAddMenu: 5,
|
20
|
+
orderMoreMenu: 4,
|
21
|
+
orderKioskAction: 1,
|
22
|
+
textFeatureTitle: 'Request D',
|
23
|
+
textAddMenuTitle: 'Request D',
|
24
|
+
textMoreMenuTitle: 'Request D',
|
25
|
+
textKioskActionTitle: 'Request D',
|
26
|
+
};
|
27
|
+
|
28
|
+
export { values };
|
@@ -0,0 +1,28 @@
|
|
1
|
+
const values = {
|
2
|
+
featureKey: 'maintenance',
|
3
|
+
aliases: ['maintenanceRequest'],
|
4
|
+
reducerKey: 'jobs',
|
5
|
+
serviceKey: 'maintenance',
|
6
|
+
updateKey: 'jobs',
|
7
|
+
actionJobsLoaded: 'JOBS_LOADED',
|
8
|
+
actionJobAdded: 'JOB_ADDED',
|
9
|
+
actionJobsAdded: 'JOBS_ADDED',
|
10
|
+
screenMaintenance: 'maintenance',
|
11
|
+
screenRequestDetail: 'requestDetail',
|
12
|
+
screenServiceRequest: 'serviceRequest',
|
13
|
+
screenJobTypePicker: 'jobTypePicker',
|
14
|
+
screenRequestNotes: 'requestNotes',
|
15
|
+
permissionMaintenanceTracking: 'maintenanceTracking',
|
16
|
+
iconGridMenu: 'maintenance',
|
17
|
+
iconAddMenu: 'request',
|
18
|
+
iconKioskAction: 'wrench',
|
19
|
+
orderAddMenu: 5,
|
20
|
+
orderMoreMenu: 4,
|
21
|
+
orderKioskAction: 1,
|
22
|
+
textFeatureTitle: 'Request',
|
23
|
+
textAddMenuTitle: 'Request',
|
24
|
+
textMoreMenuTitle: 'Request',
|
25
|
+
textKioskActionTitle: 'Request',
|
26
|
+
};
|
27
|
+
|
28
|
+
export { values };
|
@@ -0,0 +1,28 @@
|
|
1
|
+
const values = {
|
2
|
+
featureKey: 'maintenance',
|
3
|
+
aliases: ['maintenanceRequest'],
|
4
|
+
reducerKey: 'jobs',
|
5
|
+
serviceKey: 'maintenance',
|
6
|
+
updateKey: 'jobs',
|
7
|
+
actionJobsLoaded: 'JOBS_LOADED',
|
8
|
+
actionJobAdded: 'JOB_ADDED',
|
9
|
+
actionJobsAdded: 'JOBS_ADDED',
|
10
|
+
screenMaintenance: 'maintenance',
|
11
|
+
screenRequestDetail: 'requestDetail',
|
12
|
+
screenServiceRequest: 'serviceRequest',
|
13
|
+
screenJobTypePicker: 'jobTypePicker',
|
14
|
+
screenRequestNotes: 'requestNotes',
|
15
|
+
permissionMaintenanceTracking: 'maintenanceTracking',
|
16
|
+
iconGridMenu: 'maintenance',
|
17
|
+
iconAddMenu: 'request',
|
18
|
+
iconKioskAction: 'wrench',
|
19
|
+
orderAddMenu: 5,
|
20
|
+
orderMoreMenu: 4,
|
21
|
+
orderKioskAction: 1,
|
22
|
+
textFeatureTitle: 'Request',
|
23
|
+
textAddMenuTitle: 'Request',
|
24
|
+
textMoreMenuTitle: 'Request',
|
25
|
+
textKioskActionTitle: 'Request',
|
26
|
+
};
|
27
|
+
|
28
|
+
export { values };
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"names":["Helper","Session","maintenanceActions","getJob","site","id","authedFunction","method","url","getUrl","data","getJobByJobId","jobId","getJobs","status","type","getJobs2","lastKey","query","JSON","stringify","getJobsRecursive","jobs","Promise","resolve","then","jobRes","newJobs","Items","LastKey","sendMaintenanceRequest","userID","userName","phone","room","title","description","date","images","location","isHome","homeText","request","editJob","job","editJobStatus","assignJob","userId","getAssignees","addNote","note","attachments","action","editNote","noteId","deleteNote","getJobTypes"],"sources":["maintenanceActions.js"],"sourcesContent":["import { Helper, Session } from '../core.config';\n\nexport const maintenanceActions = {\n getJob: (site, id) => {\n return Session.authedFunction({\n method: 'POST',\n url: Helper.getUrl('maintenance', 'getJob'),\n data: { site, id },\n });\n },\n getJobByJobId: (site, jobId) => {\n return Session.authedFunction({\n method: 'POST',\n url: Helper.getUrl('maintenance', 'getJob'),\n data: { site, jobId },\n });\n },\n getJobs: (site, status = '', type = '') => {\n return Session.authedFunction({\n method: 'POST',\n url: Helper.getUrl('maintenance', 'getJobs'),\n data: { site, status, type },\n });\n },\n getJobs2: (site, status, type, lastKey) => {\n const query = { site };\n if (status) {\n query.status = status;\n }\n if (type) {\n query.type = type;\n }\n if (lastKey) {\n query.lastKey = JSON.stringify(lastKey);\n }\n return Session.authedFunction({\n method: 'GET',\n url: Helper.getUrl('maintenance', 'get/requests', query),\n });\n },\n getJobsRecursive: (site, status, type, lastKey, jobs = []) => {\n return new Promise(resolve => {\n maintenanceActions.getJobs2(site, status, type, lastKey).then(jobRes => {\n const newJobs = [...jobs, ...jobRes.data.Items];\n if (!jobRes.data.LastKey) {\n return resolve(newJobs);\n }\n return resolve(maintenanceActions.getJobsRecursive(site, status, type, jobRes.data.LastKey, newJobs));\n });\n });\n },\n sendMaintenanceRequest: (userID, userName, phone, room, title, description, date, type, images, location, isHome, homeText) => {\n const request = {\n method: 'POST',\n url: Helper.getUrl('maintenance', 'sendMaintenance'),\n data: {\n userID,\n userName,\n phone,\n room,\n title,\n description,\n date,\n type,\n images,\n location,\n isHome,\n homeText,\n },\n };\n return Session.authedFunction(request);\n },\n editJob: (job, site) => {\n return Session.authedFunction({\n method: 'POST',\n url: Helper.getUrl('maintenance', 'editJob'),\n data: { job, site },\n });\n },\n editJobStatus: (id, status) => {\n return Session.authedFunction({\n method: 'POST',\n url: Helper.getUrl('maintenance', 'editJobStatus'),\n data: { id, status },\n });\n },\n assignJob: (jobId, userId) => {\n return Session.authedFunction({\n method: 'POST',\n url: Helper.getUrl('maintenance', 'update/assign'),\n data: {\n id: jobId,\n userId,\n },\n });\n },\n getAssignees: site => {\n return Session.authedFunction({\n method: 'GET',\n url: Helper.getUrl('maintenance', 'get/assignees', { site }),\n });\n },\n addNote: (jobId, note, attachments) => {\n return Session.authedFunction({\n method: 'POST',\n url: Helper.getUrl('maintenance', 'requests/note'),\n data: {\n id: jobId,\n note,\n attachments,\n action: 'AddNote',\n },\n });\n },\n editNote: (jobId, noteId, note, attachments) => {\n return Session.authedFunction({\n method: 'POST',\n url: Helper.getUrl('maintenance', 'requests/note'),\n data: {\n id: jobId,\n note,\n attachments,\n noteId,\n action: 'EditNote',\n },\n });\n },\n deleteNote: (jobId, noteId) => {\n return Session.authedFunction({\n method: 'POST',\n url: Helper.getUrl('maintenance', 'requests/note'),\n data: {\n id: jobId,\n noteId,\n action: 'DeleteNote',\n },\n });\n },\n getJobTypes: async site => {\n const url = Helper.getUrl('maintenance', 'getjobtypes');\n return Session.authedFunction({\n method: 'POST',\n url,\n data: { site },\n });\n },\n};\n"],"mappings":"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","ignoreList":[]}
|