@plusscommunities/pluss-maintenance-app 6.0.10 → 6.0.12-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.
Files changed (67) hide show
  1. package/dist/module/actions/JobActions.js +44 -1
  2. package/dist/module/actions/JobActions.js.map +1 -1
  3. package/dist/module/actions/types.js +3 -0
  4. package/dist/module/actions/types.js.map +1 -1
  5. package/dist/module/apis/index.js +2 -0
  6. package/dist/module/apis/index.js.map +1 -1
  7. package/dist/module/apis/maintenanceActions.js +21 -6
  8. package/dist/module/apis/maintenanceActions.js.map +1 -1
  9. package/dist/module/components/FilterPopupMenu.js +34 -18
  10. package/dist/module/components/FilterPopupMenu.js.map +1 -1
  11. package/dist/module/components/MaintenanceList.js +47 -56
  12. package/dist/module/components/MaintenanceList.js.map +1 -1
  13. package/dist/module/components/MaintenanceListItem.js +39 -26
  14. package/dist/module/components/MaintenanceListItem.js.map +1 -1
  15. package/dist/module/components/MaintenanceWidgetItem.js +12 -12
  16. package/dist/module/components/MaintenanceWidgetItem.js.map +1 -1
  17. package/dist/module/components/PrioritySelectorPopup.js +82 -0
  18. package/dist/module/components/PrioritySelectorPopup.js.map +1 -0
  19. package/dist/module/components/StatusSelectorPopup.js +9 -14
  20. package/dist/module/components/StatusSelectorPopup.js.map +1 -1
  21. package/dist/module/components/WidgetSmall.js +7 -3
  22. package/dist/module/components/WidgetSmall.js.map +1 -1
  23. package/dist/module/helper.js +39 -25
  24. package/dist/module/helper.js.map +1 -1
  25. package/dist/module/reducers/JobsReducer.js +31 -2
  26. package/dist/module/reducers/JobsReducer.js.map +1 -1
  27. package/dist/module/screens/RequestDetail.js +92 -20
  28. package/dist/module/screens/RequestDetail.js.map +1 -1
  29. package/dist/module/screens/RequestNotes.js +335 -19
  30. package/dist/module/screens/RequestNotes.js.map +1 -1
  31. package/dist/module/values.config.a.js +7 -1
  32. package/dist/module/values.config.a.js.map +1 -1
  33. package/dist/module/values.config.default.js +7 -1
  34. package/dist/module/values.config.default.js.map +1 -1
  35. package/dist/module/values.config.forms.js +7 -1
  36. package/dist/module/values.config.forms.js.map +1 -1
  37. package/dist/module/values.config.js +7 -1
  38. package/dist/module/values.config.js.map +1 -1
  39. package/package.json +1 -1
  40. package/src/actions/JobActions.js +53 -1
  41. package/src/actions/types.js +4 -0
  42. package/src/apis/index.js +4 -0
  43. package/src/apis/maintenanceActions.js +18 -6
  44. package/src/components/FilterPopupMenu.js +40 -21
  45. package/src/components/MaintenanceList.js +38 -47
  46. package/src/components/MaintenanceListItem.js +35 -21
  47. package/src/components/MaintenanceWidgetItem.js +16 -12
  48. package/src/components/PrioritySelectorPopup.js +79 -0
  49. package/src/components/StatusSelectorPopup.js +8 -14
  50. package/src/components/WidgetSmall.js +5 -3
  51. package/src/helper.js +50 -21
  52. package/src/reducers/JobsReducer.js +25 -1
  53. package/src/screens/RequestDetail.js +91 -28
  54. package/src/screens/RequestNotes.js +348 -28
  55. package/src/values.config.a.js +6 -0
  56. package/src/values.config.default.js +6 -0
  57. package/src/values.config.forms.js +6 -0
  58. package/src/values.config.js +6 -0
  59. package/dist/module/values.config.b.js +0 -30
  60. package/dist/module/values.config.b.js.map +0 -1
  61. package/dist/module/values.config.c.js +0 -30
  62. package/dist/module/values.config.c.js.map +0 -1
  63. package/dist/module/values.config.d.js +0 -30
  64. package/dist/module/values.config.d.js.map +0 -1
  65. package/src/values.config.b.js +0 -30
  66. package/src/values.config.c.js +0 -30
  67. package/src/values.config.d.js +0 -30
@@ -2,7 +2,7 @@ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object
2
2
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
3
3
  function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
4
4
  import React, { Component } from 'react';
5
- import { ScrollView, View, Text, TouchableOpacity, Modal, KeyboardAvoidingView, Platform } from 'react-native';
5
+ import { ScrollView, View, Text, TouchableOpacity, Modal, KeyboardAvoidingView, Platform, FlatList, Dimensions, ImageBackground, Keyboard } from 'react-native';
6
6
  import { connect } from 'react-redux';
7
7
  import { Icon } from 'react-native-elements';
8
8
  import _ from 'lodash';
@@ -13,6 +13,7 @@ import { getBottomSpace } from 'react-native-iphone-x-helper';
13
13
  import { Services } from '../feature.config';
14
14
  import { Components, Colours, Helper } from '../core.config';
15
15
  import { values } from '../values.config';
16
+ const PHOTO_SIZE = (Dimensions.get('window').width - 64) / 3;
16
17
  class RequestNotes extends Component {
17
18
  constructor(props) {
18
19
  super(props);
@@ -56,12 +57,10 @@ class RequestNotes extends Component {
56
57
  });
57
58
  });
58
59
  _defineProperty(this, "isReadyToSaveNote", () => {
59
- if (_.some(this.state.noteAttachments, n => {
60
- return n.Uploading;
61
- })) {
62
- return false;
63
- }
64
- return !_.isEmpty(this.state.noteInput) || !_.isEmpty(this.state.noteAttachments);
60
+ const uploadingAttachments = _.some(this.state.noteAttachments, n => n.Uploading);
61
+ const uploadingImages = _.some(this.state.noteImages, n => n.uploading);
62
+ if (uploadingAttachments || uploadingImages) return false;
63
+ return !_.isEmpty(this.state.noteInput) || !_.isEmpty(this.state.noteAttachments) || !_.isEmpty(this.state.noteImages.filter(img => !img.add));
65
64
  });
66
65
  _defineProperty(this, "openAddNote", () => {
67
66
  this.setState({
@@ -77,12 +76,20 @@ class RequestNotes extends Component {
77
76
  if (!!this.state.editingNote) {
78
77
  newState.noteInput = '';
79
78
  newState.noteAttachments = [];
79
+ newState.noteImages = [];
80
80
  }
81
81
  this.setState(newState);
82
82
  });
83
83
  _defineProperty(this, "openEditNote", n => {
84
+ const noteImages = [...(n.Images || []).map(i => ({
85
+ url: i,
86
+ thumbNailUrl: Helper.getThumb300(i)
87
+ })), {
88
+ add: true
89
+ }];
84
90
  this.setState({
85
91
  noteAttachments: n.Attachments || [],
92
+ noteImages,
86
93
  noteInput: n.Note || '',
87
94
  addNoteOpen: true,
88
95
  editingNote: n.Id,
@@ -97,23 +104,24 @@ class RequestNotes extends Component {
97
104
  this.setState({
98
105
  submittingNote: true
99
106
  });
100
- const res = await (this.state.editingNote ? maintenanceActions.editNote(this.props.job.id, this.state.editingNote, this.state.noteInput, this.state.noteAttachments.map(a => {
101
- return {
102
- Title: a.Title,
103
- Source: a.Source
104
- };
105
- })) : maintenanceActions.addNote(this.props.job.id, this.state.noteInput, this.state.noteAttachments.map(a => {
107
+ const attachments = this.state.noteAttachments.filter(a => !a.add).map(a => {
106
108
  return {
107
109
  Title: a.Title,
108
110
  Source: a.Source
109
111
  };
110
- })));
112
+ });
113
+ const images = this.state.noteImages.filter(img => !img.add).map(img => img.url);
114
+ const res = await (this.state.editingNote ? maintenanceActions.editNote(this.props.job.id, this.state.editingNote, this.state.noteInput, attachments, images) : maintenanceActions.addNote(this.props.job.id, this.state.noteInput, attachments, images));
111
115
  this.setState({
112
116
  job: res.data.job,
113
117
  submittingNote: false,
114
118
  addNoteOpen: false,
115
119
  noteInput: '',
116
120
  noteAttachments: [],
121
+ noteImages: [{
122
+ add: true
123
+ }],
124
+ uploadingImage: false,
117
125
  editingNote: null
118
126
  }, () => {
119
127
  this.props.jobAdded(res.data.job);
@@ -123,17 +131,154 @@ class RequestNotes extends Component {
123
131
  console.log('error');
124
132
  console.log(err);
125
133
  this.setState({
126
- submittingNote: false
134
+ submittingNote: false,
135
+ uploadingImage: false
127
136
  });
128
137
  }
129
138
  });
139
+ _defineProperty(this, "setImages", (noteImages, uploadingImage = false, callback = null) => {
140
+ this.setState({
141
+ noteImages,
142
+ uploadingImage
143
+ }, callback);
144
+ });
145
+ _defineProperty(this, "getImages", () => {
146
+ const {
147
+ noteImages
148
+ } = this.state;
149
+ const imagesList = _.cloneDeep(noteImages);
150
+ if (!imagesList || !Array.isArray(imagesList) || imagesList.length === 0) {
151
+ return [{
152
+ add: true
153
+ }];
154
+ }
155
+ return imagesList;
156
+ });
157
+ _defineProperty(this, "getImageUrls", () => {
158
+ const imagesList = this.getImages();
159
+ return _.filter(imagesList, img => {
160
+ return !img.uploading && !img.add;
161
+ }).map(img => {
162
+ return img.url;
163
+ });
164
+ });
165
+ _defineProperty(this, "waitForThumbnails", () => {
166
+ if (this.checkThumb) return;
167
+ this.checkThumb = setInterval(async () => {
168
+ const imagesList = this.getImages();
169
+ const imagesUpdate = [];
170
+ await Promise.all(imagesList.map(image => {
171
+ return new Promise(async resolve => {
172
+ const newImage = {
173
+ ...image
174
+ };
175
+ imagesUpdate.push(newImage);
176
+ if (newImage.url && !newImage.thumbNailExists) {
177
+ newImage.uploading = false;
178
+ newImage.allowRetry = false;
179
+ newImage.thumbNailExists = await Helper.imageExists(newImage.thumbNailUrl);
180
+ resolve(newImage.thumbNailExists);
181
+ }
182
+ resolve(true);
183
+ });
184
+ }));
185
+ const thumbnailsExist = imagesUpdate.every(image => !image.url || image.thumbNailExists);
186
+ if (thumbnailsExist) {
187
+ clearInterval(this.checkThumb);
188
+ this.checkThumb = null;
189
+ this.setImages(imagesUpdate);
190
+ }
191
+ }, 2000);
192
+ });
193
+ _defineProperty(this, "removeImage", index => {
194
+ const imagesUpdate = this.getImages();
195
+ imagesUpdate.splice(index, 1);
196
+ this.setImages(imagesUpdate);
197
+ });
198
+ _defineProperty(this, "showUploadMenu", () => {
199
+ Keyboard.dismiss();
200
+ const {
201
+ uploadingImage,
202
+ submittingNote
203
+ } = this.state;
204
+ if (uploadingImage || submittingNote) return;
205
+ this.imageUploader.showUploadMenu();
206
+ });
207
+ _defineProperty(this, "toggleFullscreenVideo", url => {
208
+ if (typeof url !== 'string') url = '';
209
+ this.setState({
210
+ showFullscreenVideo: url.length > 0,
211
+ currentVideoUrl: url
212
+ });
213
+ });
214
+ _defineProperty(this, "onUploadStarted", (uploadUri, imageUri) => {
215
+ const imagesUpdate = this.getImages();
216
+ imagesUpdate.splice(imagesUpdate.length - 1, 0, {
217
+ uploading: true,
218
+ uploadProgress: '0%',
219
+ uploadUri,
220
+ imageUri,
221
+ allowRetry: true
222
+ });
223
+ this.setImages(imagesUpdate, true);
224
+ });
225
+ _defineProperty(this, "onUploadProgress", progress => {
226
+ const imagesUpdate = this.getImages();
227
+ imagesUpdate.map(img => {
228
+ if (img.uploadUri === progress.uri) {
229
+ img.uploadProgress = progress.percentage;
230
+ img.uploading = true;
231
+ img.allowRetry = true;
232
+ }
233
+ });
234
+ this.setImages(imagesUpdate, true);
235
+ });
236
+ _defineProperty(this, "onUploadSuccess", async (uri, uploadUri) => {
237
+ const imagesUpdate = this.getImages();
238
+ imagesUpdate.map(img => {
239
+ if (img.uploadUri === uploadUri && img.uploading) {
240
+ img.url = uri.replace('/general/', '/general1400/');
241
+ img.thumbNailExists = false;
242
+ img.thumbNailUrl = Helper.getThumb300(img.url);
243
+ img.allowRetry = true;
244
+ }
245
+ });
246
+ this.setImages(imagesUpdate, false, () => this.waitForThumbnails());
247
+ });
248
+ _defineProperty(this, "onUploadFailed", uploadUri => {
249
+ const imagesUpdate = this.getImages();
250
+ imagesUpdate.map(img => {
251
+ if (img.uploadUri === uploadUri) {
252
+ img.uploading = true; // Requried for retry
253
+ img.uploadProgress = '';
254
+ img.allowRetry = true;
255
+ }
256
+ });
257
+ this.setImages(imagesUpdate);
258
+ });
259
+ _defineProperty(this, "onLibrarySelected", uri => {
260
+ const imagesUpdate = this.getImages();
261
+ imagesUpdate.splice(imagesUpdate.length - 1, 0, {
262
+ uploading: false,
263
+ allowRetry: false,
264
+ url: Helper.get1400(uri),
265
+ thumbNailExists: true,
266
+ thumbNailUrl: Helper.getThumb300(uri)
267
+ });
268
+ this.setImages(imagesUpdate);
269
+ });
130
270
  this.state = {
131
271
  job: {},
132
272
  selectedPDF: null,
133
273
  noteAttachments: [],
134
274
  noteInput: '',
135
- addNoteOpen: false
275
+ addNoteOpen: false,
276
+ noteImages: [{
277
+ add: true
278
+ }],
279
+ uploadingImage: false
136
280
  };
281
+ this.checkThumb = null;
137
282
  }
138
283
  componentDidMount() {
139
284
  this.updateJobState();
@@ -143,6 +288,9 @@ class RequestNotes extends Component {
143
288
  this.updateJobState();
144
289
  }
145
290
  }
291
+ componentWillUnmount() {
292
+ clearInterval(this.checkThumb);
293
+ }
146
294
  updateJobState() {
147
295
  const job = _.find(this.props.jobs, j => j.id === this.props.job.id) || this.props.job;
148
296
  this.setState({
@@ -240,6 +388,108 @@ class RequestNotes extends Component {
240
388
  large: true
241
389
  }, "Save");
242
390
  }
391
+ renderUploadMenu() {
392
+ return /*#__PURE__*/React.createElement(Components.ImageUploader, {
393
+ ref: ref => this.imageUploader = ref,
394
+ onUploadStarted: this.onUploadStarted,
395
+ onUploadSuccess: this.onUploadSuccess,
396
+ onUploadFailed: this.onUploadFailed,
397
+ onUploadProgress: this.onUploadProgress,
398
+ onLibrarySelected: this.onLibrarySelected,
399
+ size: {
400
+ width: 1400
401
+ },
402
+ quality: 0.8,
403
+ fileName: 'serviceNoteImage',
404
+ popupTitle: 'Upload Image',
405
+ userId: this.props.user.uid,
406
+ allowsEditing: false,
407
+ multiple: true,
408
+ hideLibrary: true
409
+ });
410
+ }
411
+ renderImage(item, index) {
412
+ const isVideoUrl = Helper.isVideo(item.url);
413
+ const imagesList = this.getImages();
414
+ if (item.add) {
415
+ return /*#__PURE__*/React.createElement(TouchableOpacity, {
416
+ activeOpacity: 0.8,
417
+ onPress: () => this.showUploadMenu()
418
+ }, /*#__PURE__*/React.createElement(View, {
419
+ style: [styles.imageContainer, imagesList.length > 1 && styles.imageContainerNotEmpty, index % 3 === 0 && {
420
+ marginLeft: 0
421
+ }, index > 2 && {
422
+ marginTop: 8
423
+ }]
424
+ }, /*#__PURE__*/React.createElement(View, {
425
+ style: styles.imageCircle
426
+ }, /*#__PURE__*/React.createElement(Icon, {
427
+ name: "camera",
428
+ type: "font-awesome",
429
+ iconStyle: styles.addImageIcon
430
+ }))));
431
+ }
432
+ return /*#__PURE__*/React.createElement(View, {
433
+ style: [styles.imageContainer, imagesList.length > 1 && styles.imageContainerNotEmpty, index % 3 === 0 && {
434
+ marginLeft: 0
435
+ }, index > 2 && {
436
+ marginTop: 8
437
+ }]
438
+ }, item.uploading ? /*#__PURE__*/React.createElement(Components.ImageUploadProgress, {
439
+ uploader: this.imageUploader,
440
+ image: item,
441
+ color: this.props.colourBrandingMain
442
+ }) : /*#__PURE__*/React.createElement(ImageBackground, {
443
+ style: styles.imageBackground,
444
+ source: Helper.getImageSource(item.thumbNailExists ? item.thumbNailUrl : item.url || item)
445
+ }, isVideoUrl && /*#__PURE__*/React.createElement(View, {
446
+ style: styles.imagePlayContainer
447
+ }, /*#__PURE__*/React.createElement(TouchableOpacity, {
448
+ onPress: this.toggleFullscreenVideo.bind(this, item.url)
449
+ }, /*#__PURE__*/React.createElement(Icon, {
450
+ name: "play",
451
+ type: "font-awesome",
452
+ iconStyle: styles.imageControlIcon
453
+ }))), /*#__PURE__*/React.createElement(TouchableOpacity, {
454
+ style: styles.removeImage,
455
+ onPress: () => this.removeImage(index)
456
+ }, /*#__PURE__*/React.createElement(Icon, {
457
+ name: "remove",
458
+ type: "font-awesome",
459
+ iconStyle: styles.imageControlIcon,
460
+ style: styles.removeImage
461
+ }))));
462
+ }
463
+ renderImageList() {
464
+ const imagesList = this.getImages();
465
+ return /*#__PURE__*/React.createElement(View, {
466
+ style: styles.imageListContainer
467
+ }, /*#__PURE__*/React.createElement(FlatList, {
468
+ keyboardShouldPersistTaps: "always",
469
+ enableEmptySections: true,
470
+ data: imagesList,
471
+ renderItem: ({
472
+ item,
473
+ index
474
+ }) => this.renderImage(item, index),
475
+ keyExtractor: (item, index) => index,
476
+ numColumns: 3,
477
+ scrollEnabled: false
478
+ }));
479
+ }
480
+ renderVideoPlayerPopup() {
481
+ const {
482
+ showFullscreenVideo,
483
+ currentVideoUrl
484
+ } = this.state;
485
+ if (!currentVideoUrl) return;
486
+ return /*#__PURE__*/React.createElement(Components.VideoPopup, {
487
+ uri: currentVideoUrl,
488
+ visible: showFullscreenVideo,
489
+ showFullscreenButton: false,
490
+ onClose: this.toggleFullscreenVideo
491
+ });
492
+ }
243
493
  renderAdd() {
244
494
  return /*#__PURE__*/React.createElement(Modal, {
245
495
  animationType: "slide",
@@ -247,7 +497,7 @@ class RequestNotes extends Component {
247
497
  }, /*#__PURE__*/React.createElement(KeyboardAvoidingView, {
248
498
  style: styles.container,
249
499
  behavior: Platform.OS === 'ios' && 'padding'
250
- }, /*#__PURE__*/React.createElement(Components.Header, {
500
+ }, this.renderUploadMenu(), /*#__PURE__*/React.createElement(Components.Header, {
251
501
  leftText: "Cancel",
252
502
  onPressLeft: this.closeAddNote,
253
503
  text: ""
@@ -277,12 +527,12 @@ class RequestNotes extends Component {
277
527
  }), /*#__PURE__*/React.createElement(Components.GenericInputSection, {
278
528
  label: "Attachments",
279
529
  sectionStyle: styles.inputSection
280
- }, this.state.editingNote ? (this.state.noteAttachments || []).map((a, i) => this.renderAttachment(a, i)) : /*#__PURE__*/React.createElement(Components.TextStyle, {
530
+ }, this.renderImageList(), this.state.editingNote ? (this.state.noteAttachments || []).map((a, i) => this.renderAttachment(a, i)) : /*#__PURE__*/React.createElement(Components.TextStyle, {
281
531
  type: "body",
282
532
  style: styles.attachmentInfo
283
533
  }, "PDFs can only be attached to notes from the Community Manager."))), /*#__PURE__*/React.createElement(View, {
284
534
  style: styles.popupFooter
285
- }, this.renderFooterContent())));
535
+ }, this.renderFooterContent()), this.renderVideoPlayerPopup()));
286
536
  }
287
537
  render() {
288
538
  return /*#__PURE__*/React.createElement(View, {
@@ -374,6 +624,72 @@ const styles = {
374
624
  },
375
625
  attachmentInfo: {
376
626
  marginTop: 8
627
+ },
628
+ imageListContainer: {
629
+ marginVertical: 8
630
+ },
631
+ imageContainer: {
632
+ width: PHOTO_SIZE,
633
+ height: PHOTO_SIZE,
634
+ borderStyle: 'dashed',
635
+ justifyContent: 'center',
636
+ alignItems: 'center',
637
+ borderWidth: 1,
638
+ borderColor: Colours.LINEGREY,
639
+ backgroundColor: Colours.BOXGREY,
640
+ borderRadius: 4,
641
+ marginLeft: 8
642
+ },
643
+ imageContainerNotEmpty: {
644
+ borderWidth: 1,
645
+ borderColor: Colours.LINEGREY,
646
+ backgroundColor: '#fff',
647
+ borderStyle: 'dashed'
648
+ },
649
+ imageBackground: {
650
+ flex: 1,
651
+ height: '100%',
652
+ width: '100%',
653
+ borderRadius: 4
654
+ },
655
+ imageCircle: {
656
+ width: 90,
657
+ height: 90,
658
+ borderRadius: 45,
659
+ backgroundColor: Colours.PINKISH_GREY,
660
+ justifyContent: 'center'
661
+ },
662
+ addImageIcon: {
663
+ color: '#fff',
664
+ fontSize: 32
665
+ },
666
+ imagePlayContainer: {
667
+ position: 'absolute',
668
+ top: 0,
669
+ left: 0,
670
+ right: 0,
671
+ bottom: 0,
672
+ alignItems: 'center',
673
+ justifyContent: 'center'
674
+ },
675
+ imageControlIcon: {
676
+ color: '#fff',
677
+ fontSize: 20,
678
+ textShadowColor: 'rgba(0,0,0,0.3)',
679
+ textShadowOffset: {
680
+ width: 2,
681
+ height: 2
682
+ }
683
+ },
684
+ removeImage: {
685
+ position: 'absolute',
686
+ top: 0,
687
+ right: 0,
688
+ padding: 4,
689
+ width: 40,
690
+ height: 40,
691
+ alignItems: 'center',
692
+ justifyContent: 'center'
377
693
  }
378
694
  };
379
695
  const mapStateToProps = state => {
@@ -1 +1 @@
1
- {"version":3,"names":["React","Component","ScrollView","View","Text","TouchableOpacity","Modal","KeyboardAvoidingView","Platform","connect","Icon","_","moment","jobAdded","maintenanceActions","getBottomSpace","Services","Components","Colours","Helper","values","RequestNotes","constructor","props","_defineProperty","navigation","goBack","a","setState","selectedPDF","n","noteToDelete","deleteNote","job","id","state","Id","newNotes","filter","Notes","note","newJob","onChange","some","noteAttachments","Uploading","isEmpty","noteInput","addNoteOpen","editingNote","newState","Attachments","Note","noteMenuOpen","isReadyToSaveNote","submittingNote","res","editNote","map","Title","Source","addNote","data","err","console","log","componentDidMount","updateJobState","componentDidUpdate","prevProps","jobs","find","j","renderAttachment","i","createElement","Attachment","onPress","onOpenAttachment","key","title","renderNote","style","styles","noteContainer","noteContainerTop","ProfilePic","Diameter","User","profilePic","noteContainerTopRight","user","uid","onPressDeleteNote","noteContainerButtonContainer","backgroundColor","colourBrandingMain","name","type","iconStyle","noteContainerButtonIcon","openEditNote","noteContainerTopFill","noteContainerName","displayName","noteContainerText","noteTimestamp","utc","Timestamp","local","format","TIMESTAMP_FORMAT","renderNotes","renderPDF","PDFPopup","source","onClose","onCloseAttachment","pdfCount","renderNoteDeleteConfirm","ConfirmPopup","visible","onConfirm","onPressConfirmDelete","onCancel","onPressCancelDelete","text","renderFooterContent","Spinner","InlineButton","color","confirmAddNote","fillTouchable","large","renderAdd","animationType","container","behavior","OS","Header","leftText","onPressLeft","closeAddNote","scrollContainer","contentContainerStyle","innerContainer","TextStyle","GenericInputSection","label","placeholder","value","onChangeText","isValid","autoCapitalize","minHeight","autoCorrect","multiline","autoGrow","required","squaredCorners","sectionStyle","inputSection","attachmentInfo","popupFooter","render","leftIcon","onPressBack","AddButton","openAddNote","flex","position","padding","paddingHorizontal","paddingBottom","getShadowStyle","marginBottom","flexDirection","alignItems","marginRight","fontFamily","fontSize","TEXT_DARKEST","marginTop","TEXT_LIGHT","width","height","borderRadius","justifyContent","marginLeft","sectionHeading","mapStateToProps","getMainBrandingColourFromState","colourBrandingLight","getLightBrandingColourFromState","reducerKey"],"sources":["RequestNotes.js"],"sourcesContent":["import React, { Component } from 'react';\nimport { ScrollView, View, Text, TouchableOpacity, Modal, KeyboardAvoidingView, Platform } from 'react-native';\nimport { connect } from 'react-redux';\nimport { Icon } from 'react-native-elements';\nimport _ from 'lodash';\nimport moment from 'moment';\nimport { jobAdded } from '../actions';\nimport { maintenanceActions } from '../apis';\nimport { getBottomSpace } from 'react-native-iphone-x-helper';\nimport { Services } from '../feature.config';\nimport { Components, Colours, Helper } from '../core.config';\nimport { values } from '../values.config';\n\nclass RequestNotes extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n job: {},\n selectedPDF: null,\n noteAttachments: [],\n noteInput: '',\n addNoteOpen: false,\n };\n }\n\n componentDidMount() {\n this.updateJobState();\n }\n\n componentDidUpdate(prevProps) {\n if (prevProps.jobs !== this.props.jobs) {\n this.updateJobState();\n }\n }\n\n updateJobState() {\n const job = _.find(this.props.jobs, j => j.id === this.props.job.id) || this.props.job;\n this.setState({ job });\n }\n\n onPressBack = () => {\n Services.navigation.goBack();\n };\n\n onOpenAttachment = a => {\n this.setState({\n selectedPDF: a,\n });\n };\n\n onCloseAttachment = () => {\n this.setState({\n selectedPDF: null,\n });\n };\n\n onPressDeleteNote = n => {\n this.setState({\n noteToDelete: n,\n });\n };\n\n onPressConfirmDelete = () => {\n maintenanceActions.deleteNote(this.props.job.id, this.state.noteToDelete.Id);\n const newNotes = _.filter(this.state.job.Notes, note => {\n return note.Id !== this.state.noteToDelete.Id;\n });\n const newJob = { ...this.props.job };\n newJob.Notes = newNotes;\n this.props.jobAdded(newJob);\n this.props.onChange && this.props.onChange();\n this.setState({\n job: newJob,\n noteToDelete: null,\n });\n };\n\n onPressCancelDelete = () => {\n this.setState({ noteToDelete: null });\n };\n\n isReadyToSaveNote = () => {\n if (\n _.some(this.state.noteAttachments, n => {\n return n.Uploading;\n })\n ) {\n return false;\n }\n return !_.isEmpty(this.state.noteInput) || !_.isEmpty(this.state.noteAttachments);\n };\n\n openAddNote = () => {\n this.setState({\n addNoteOpen: true,\n editingNote: null,\n });\n };\n\n closeAddNote = () => {\n const newState = {\n addNoteOpen: false,\n editingNote: null,\n };\n if (!!this.state.editingNote) {\n newState.noteInput = '';\n newState.noteAttachments = [];\n }\n this.setState(newState);\n };\n\n openEditNote = n => {\n this.setState({\n noteAttachments: n.Attachments || [],\n noteInput: n.Note || '',\n addNoteOpen: true,\n editingNote: n.Id,\n noteMenuOpen: null,\n });\n };\n\n confirmAddNote = async () => {\n if (!this.isReadyToSaveNote()) {\n return;\n }\n\n try {\n this.setState({ submittingNote: true });\n const res = await (this.state.editingNote\n ? maintenanceActions.editNote(\n this.props.job.id,\n this.state.editingNote,\n this.state.noteInput,\n this.state.noteAttachments.map(a => {\n return {\n Title: a.Title,\n Source: a.Source,\n };\n }),\n )\n : maintenanceActions.addNote(\n this.props.job.id,\n this.state.noteInput,\n this.state.noteAttachments.map(a => {\n return {\n Title: a.Title,\n Source: a.Source,\n };\n }),\n ));\n this.setState(\n {\n job: res.data.job,\n submittingNote: false,\n addNoteOpen: false,\n noteInput: '',\n noteAttachments: [],\n editingNote: null,\n },\n () => {\n this.props.jobAdded(res.data.job);\n this.props.onChange && this.props.onChange();\n },\n );\n } catch (err) {\n console.log('error');\n console.log(err);\n this.setState({\n submittingNote: false,\n });\n }\n };\n\n renderAttachment(a, i) {\n return (\n <Components.Attachment\n onPress={() => {\n this.onOpenAttachment(a);\n }}\n key={i}\n title={a.Title}\n />\n );\n }\n\n renderNote(n) {\n return (\n <View style={styles.noteContainer} key={n.Id}>\n <View style={styles.noteContainerTop}>\n <Components.ProfilePic Diameter={30} ProfilePic={n.User.profilePic} style={styles.profilePic} />\n <View style={styles.noteContainerTopRight}>\n {this.props.user.uid === n.User.id && (\n <TouchableOpacity\n onPress={() => {\n this.onPressDeleteNote(n);\n }}\n >\n <View style={[styles.noteContainerButtonContainer, { backgroundColor: this.props.colourBrandingMain }]}>\n <Icon name=\"trash\" type=\"font-awesome\" iconStyle={styles.noteContainerButtonIcon} />\n </View>\n </TouchableOpacity>\n )}\n {this.props.user.uid === n.User.id && (\n <TouchableOpacity\n onPress={() => {\n this.openEditNote(n);\n }}\n >\n <View style={[styles.noteContainerButtonContainer, { backgroundColor: this.props.colourBrandingMain }]}>\n <Icon name=\"pencil\" type=\"font-awesome\" iconStyle={styles.noteContainerButtonIcon} />\n </View>\n </TouchableOpacity>\n )}\n <View style={styles.noteContainerTopFill}>\n <Text style={styles.noteContainerName}>{n.User.displayName}</Text>\n </View>\n </View>\n </View>\n <Text style={styles.noteContainerText}>{n.Note}</Text>\n {(n.Attachments || []).map((a, i) => this.renderAttachment(a, i))}\n <Text style={styles.noteTimestamp}>\n {moment\n .utc(n.Timestamp)\n .local()\n .format(Helper.TIMESTAMP_FORMAT)}\n </Text>\n </View>\n );\n }\n\n renderNotes() {\n return (this.state.job.Notes || []).map((n, i) => {\n return this.renderNote(n, i);\n });\n }\n\n renderPDF() {\n if (_.isEmpty(this.state.selectedPDF)) {\n return null;\n }\n return (\n <Components.PDFPopup\n source={this.state.selectedPDF.Source}\n onClose={this.onCloseAttachment}\n title={this.state.selectedPDF.Title}\n pdfCount={1}\n />\n );\n }\n\n renderNoteDeleteConfirm() {\n return (\n <Components.ConfirmPopup\n visible={!!this.state.noteToDelete}\n onConfirm={this.onPressConfirmDelete}\n onCancel={this.onPressCancelDelete}\n onClose={this.onPressCancelDelete}\n text=\"Are you sure you want to delete this note?\"\n />\n );\n }\n\n renderFooterContent() {\n if (this.state.submittingNote) {\n return <Components.Spinner />;\n }\n return (\n <Components.InlineButton color={this.props.colourBrandingMain} onPress={this.confirmAddNote} fillTouchable large>\n Save\n </Components.InlineButton>\n );\n }\n\n renderAdd() {\n return (\n <Modal animationType=\"slide\" visible={this.state.addNoteOpen}>\n <KeyboardAvoidingView style={styles.container} behavior={Platform.OS === 'ios' && 'padding'}>\n <Components.Header leftText=\"Cancel\" onPressLeft={this.closeAddNote} text=\"\" />\n <ScrollView style={styles.scrollContainer} contentContainerStyle={styles.innerContainer}>\n <Components.TextStyle type=\"pageHeading\">Add Staff Note</Components.TextStyle>\n <Components.GenericInputSection\n label=\"Content\"\n placeholder=\"Insert your notes here...\"\n value={this.state.noteInput}\n onChangeText={noteInput => this.setState({ noteInput })}\n isValid={() => {\n return !_.isEmpty(this.state.noteInput);\n }}\n autoCapitalize=\"sentences\"\n minHeight={135}\n autoCorrect\n multiline\n autoGrow\n required\n squaredCorners\n sectionStyle={styles.inputSection}\n />\n <Components.GenericInputSection label=\"Attachments\" sectionStyle={styles.inputSection}>\n {this.state.editingNote ? (\n (this.state.noteAttachments || []).map((a, i) => this.renderAttachment(a, i))\n ) : (\n <Components.TextStyle type=\"body\" style={styles.attachmentInfo}>\n PDFs can only be attached to notes from the Community Manager.\n </Components.TextStyle>\n )}\n </Components.GenericInputSection>\n </ScrollView>\n <View style={styles.popupFooter}>{this.renderFooterContent()}</View>\n </KeyboardAvoidingView>\n </Modal>\n );\n }\n\n render() {\n return (\n <View style={styles.container}>\n {this.renderPDF()}\n {this.renderNoteDeleteConfirm()}\n {this.renderAdd()}\n <Components.Header leftIcon=\"angle-left\" onPressLeft={this.onPressBack} text=\"Staff Notes\" />\n <ScrollView style={styles.scrollContainer} contentContainerStyle={styles.innerContainer}>\n {this.renderNotes()}\n </ScrollView>\n <Components.AddButton onPress={this.openAddNote} />\n </View>\n );\n }\n}\n\nconst styles = {\n container: {\n flex: 1,\n position: 'relative',\n backgroundColor: '#fff',\n },\n scrollContainer: {\n flex: 1,\n },\n innerContainer: {\n padding: 16,\n },\n popupFooter: {\n paddingHorizontal: 16,\n paddingBottom: getBottomSpace() + 16,\n },\n noteContainer: {\n ...Helper.getShadowStyle(),\n padding: 8,\n marginBottom: 16,\n },\n noteContainerTop: {\n flexDirection: 'row',\n alignItems: 'center',\n },\n profilePic: {\n marginRight: 8,\n },\n noteContainerTopFill: {\n flex: 1,\n },\n noteContainerName: {\n fontFamily: 'sf-semibold',\n fontSize: 13,\n color: Colours.TEXT_DARKEST,\n },\n noteContainerText: {\n marginTop: 8,\n fontFamily: 'sf-regular',\n fontSize: 13,\n color: Colours.TEXT_DARKEST,\n },\n noteTimestamp: {\n marginTop: 8,\n fontFamily: 'sf-semibold',\n fontSize: 11,\n color: Colours.TEXT_LIGHT,\n },\n noteContainerTopRight: {\n flex: 1,\n flexDirection: 'row-reverse',\n alignItems: 'center',\n },\n noteContainerButtonContainer: {\n width: 24,\n height: 24,\n borderRadius: 12,\n alignItems: 'center',\n justifyContent: 'center',\n marginLeft: 8,\n },\n noteContainerButtonIcon: {\n fontSize: 13,\n color: '#fff',\n },\n inputSection: {\n marginTop: 24,\n },\n sectionHeading: {\n fontFamily: 'qs-bold',\n fontSize: 24,\n color: Colours.TEXT_DARKEST,\n },\n attachmentInfo: {\n marginTop: 8,\n },\n};\n\nconst mapStateToProps = state => {\n return {\n user: state.user,\n colourBrandingMain: Colours.getMainBrandingColourFromState(state),\n colourBrandingLight: Colours.getLightBrandingColourFromState(state),\n jobs: state[values.reducerKey].jobs,\n };\n};\n\nexport default connect(mapStateToProps, { jobAdded })(RequestNotes);\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","Component","ScrollView","View","Text","TouchableOpacity","Modal","KeyboardAvoidingView","Platform","FlatList","Dimensions","ImageBackground","Keyboard","connect","Icon","_","moment","jobAdded","maintenanceActions","getBottomSpace","Services","Components","Colours","Helper","values","PHOTO_SIZE","get","width","RequestNotes","constructor","props","_defineProperty","navigation","goBack","a","setState","selectedPDF","n","noteToDelete","deleteNote","job","id","state","Id","newNotes","filter","Notes","note","newJob","onChange","uploadingAttachments","some","noteAttachments","Uploading","uploadingImages","noteImages","uploading","isEmpty","noteInput","img","add","addNoteOpen","editingNote","newState","Images","map","i","url","thumbNailUrl","getThumb300","Attachments","Note","noteMenuOpen","isReadyToSaveNote","submittingNote","attachments","Title","Source","images","res","editNote","addNote","data","uploadingImage","err","console","log","callback","imagesList","cloneDeep","Array","isArray","length","getImages","checkThumb","setInterval","imagesUpdate","Promise","all","image","resolve","newImage","push","thumbNailExists","allowRetry","imageExists","thumbnailsExist","every","clearInterval","setImages","index","splice","dismiss","imageUploader","showUploadMenu","showFullscreenVideo","currentVideoUrl","uploadUri","imageUri","uploadProgress","progress","uri","percentage","replace","waitForThumbnails","get1400","componentDidMount","updateJobState","componentDidUpdate","prevProps","jobs","componentWillUnmount","find","j","renderAttachment","createElement","Attachment","onPress","onOpenAttachment","key","title","renderNote","style","styles","noteContainer","noteContainerTop","ProfilePic","Diameter","User","profilePic","noteContainerTopRight","user","uid","onPressDeleteNote","noteContainerButtonContainer","backgroundColor","colourBrandingMain","name","type","iconStyle","noteContainerButtonIcon","openEditNote","noteContainerTopFill","noteContainerName","displayName","noteContainerText","noteTimestamp","utc","Timestamp","local","format","TIMESTAMP_FORMAT","renderNotes","renderPDF","PDFPopup","source","onClose","onCloseAttachment","pdfCount","renderNoteDeleteConfirm","ConfirmPopup","visible","onConfirm","onPressConfirmDelete","onCancel","onPressCancelDelete","text","renderFooterContent","Spinner","InlineButton","color","confirmAddNote","fillTouchable","large","renderUploadMenu","ImageUploader","ref","onUploadStarted","onUploadSuccess","onUploadFailed","onUploadProgress","onLibrarySelected","size","quality","fileName","popupTitle","userId","allowsEditing","multiple","hideLibrary","renderImage","item","isVideoUrl","isVideo","activeOpacity","imageContainer","imageContainerNotEmpty","marginLeft","marginTop","imageCircle","addImageIcon","ImageUploadProgress","uploader","imageBackground","getImageSource","imagePlayContainer","toggleFullscreenVideo","bind","imageControlIcon","removeImage","renderImageList","imageListContainer","keyboardShouldPersistTaps","enableEmptySections","renderItem","keyExtractor","numColumns","scrollEnabled","renderVideoPlayerPopup","VideoPopup","showFullscreenButton","renderAdd","animationType","container","behavior","OS","Header","leftText","onPressLeft","closeAddNote","scrollContainer","contentContainerStyle","innerContainer","TextStyle","GenericInputSection","label","placeholder","value","onChangeText","isValid","autoCapitalize","minHeight","autoCorrect","multiline","autoGrow","required","squaredCorners","sectionStyle","inputSection","attachmentInfo","popupFooter","render","leftIcon","onPressBack","AddButton","openAddNote","flex","position","padding","paddingHorizontal","paddingBottom","getShadowStyle","marginBottom","flexDirection","alignItems","marginRight","fontFamily","fontSize","TEXT_DARKEST","TEXT_LIGHT","height","borderRadius","justifyContent","sectionHeading","marginVertical","borderStyle","borderWidth","borderColor","LINEGREY","BOXGREY","PINKISH_GREY","top","left","right","bottom","textShadowColor","textShadowOffset","mapStateToProps","getMainBrandingColourFromState","colourBrandingLight","getLightBrandingColourFromState","reducerKey"],"sources":["RequestNotes.js"],"sourcesContent":["import React, { Component } from 'react';\nimport { ScrollView, View, Text, TouchableOpacity, Modal, KeyboardAvoidingView, Platform, FlatList, Dimensions, ImageBackground, Keyboard } from 'react-native';\nimport { connect } from 'react-redux';\nimport { Icon } from 'react-native-elements';\nimport _ from 'lodash';\nimport moment from 'moment';\nimport { jobAdded } from '../actions';\nimport { maintenanceActions } from '../apis';\nimport { getBottomSpace } from 'react-native-iphone-x-helper';\nimport { Services } from '../feature.config';\nimport { Components, Colours, Helper } from '../core.config';\nimport { values } from '../values.config';\n\nconst PHOTO_SIZE = (Dimensions.get('window').width - 64) / 3;\n\nclass RequestNotes extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n job: {},\n selectedPDF: null,\n noteAttachments: [],\n noteInput: '',\n addNoteOpen: false,\n noteImages: [{ add: true }],\n uploadingImage: false,\n };\n this.checkThumb = null;\n }\n\n componentDidMount() {\n this.updateJobState();\n }\n\n componentDidUpdate(prevProps) {\n if (prevProps.jobs !== this.props.jobs) {\n this.updateJobState();\n }\n }\n\n componentWillUnmount() {\n clearInterval(this.checkThumb);\n }\n\n updateJobState() {\n const job = _.find(this.props.jobs, j => j.id === this.props.job.id) || this.props.job;\n this.setState({ job });\n }\n\n onPressBack = () => {\n Services.navigation.goBack();\n };\n\n onOpenAttachment = a => {\n this.setState({\n selectedPDF: a,\n });\n };\n\n onCloseAttachment = () => {\n this.setState({\n selectedPDF: null,\n });\n };\n\n onPressDeleteNote = n => {\n this.setState({\n noteToDelete: n,\n });\n };\n\n onPressConfirmDelete = () => {\n maintenanceActions.deleteNote(this.props.job.id, this.state.noteToDelete.Id);\n const newNotes = _.filter(this.state.job.Notes, note => {\n return note.Id !== this.state.noteToDelete.Id;\n });\n const newJob = { ...this.props.job };\n newJob.Notes = newNotes;\n this.props.jobAdded(newJob);\n this.props.onChange && this.props.onChange();\n this.setState({\n job: newJob,\n noteToDelete: null,\n });\n };\n\n onPressCancelDelete = () => {\n this.setState({ noteToDelete: null });\n };\n\n isReadyToSaveNote = () => {\n const uploadingAttachments = _.some(this.state.noteAttachments, n => n.Uploading);\n const uploadingImages = _.some(this.state.noteImages, n => n.uploading);\n if (uploadingAttachments || uploadingImages) return false;\n return !_.isEmpty(this.state.noteInput) || !_.isEmpty(this.state.noteAttachments) || !_.isEmpty(this.state.noteImages.filter(img => !img.add));\n };\n\n openAddNote = () => {\n this.setState({\n addNoteOpen: true,\n editingNote: null,\n });\n };\n\n closeAddNote = () => {\n const newState = {\n addNoteOpen: false,\n editingNote: null,\n };\n if (!!this.state.editingNote) {\n newState.noteInput = '';\n newState.noteAttachments = [];\n newState.noteImages = [];\n }\n this.setState(newState);\n };\n\n openEditNote = n => {\n const noteImages = [...((n.Images || []).map(i => ({ url: i, thumbNailUrl: Helper.getThumb300(i) }))), { add: true }];\n this.setState({\n noteAttachments: n.Attachments || [],\n noteImages,\n noteInput: n.Note || '',\n addNoteOpen: true,\n editingNote: n.Id,\n noteMenuOpen: null,\n });\n };\n\n confirmAddNote = async () => {\n if (!this.isReadyToSaveNote()) {\n return;\n }\n\n try {\n this.setState({ submittingNote: true });\n const attachments = this.state.noteAttachments.filter(a => !a.add).map(a => {\n return {\n Title: a.Title,\n Source: a.Source,\n };\n });\n const images = this.state.noteImages.filter(img => !img.add).map(img => img.url);\n const res = await (this.state.editingNote\n ? maintenanceActions.editNote(\n this.props.job.id,\n this.state.editingNote,\n this.state.noteInput,\n attachments,\n images,\n )\n : maintenanceActions.addNote(\n this.props.job.id,\n this.state.noteInput,\n attachments,\n images,\n ));\n this.setState(\n {\n job: res.data.job,\n submittingNote: false,\n addNoteOpen: false,\n noteInput: '',\n noteAttachments: [],\n noteImages: [{ add: true }],\n uploadingImage: false,\n editingNote: null,\n },\n () => {\n this.props.jobAdded(res.data.job);\n this.props.onChange && this.props.onChange();\n },\n );\n } catch (err) {\n console.log('error');\n console.log(err);\n this.setState({\n submittingNote: false,\n uploadingImage: false,\n });\n }\n };\n\n setImages = (noteImages, uploadingImage = false, callback = null) => {\n this.setState({ noteImages, uploadingImage }, callback);\n };\n\n getImages = () => {\n const { noteImages } = this.state;\n const imagesList = _.cloneDeep(noteImages);\n if (!imagesList || !Array.isArray(imagesList) || imagesList.length === 0) {\n return [{ add: true }];\n }\n return imagesList;\n };\n\n getImageUrls = () => {\n const imagesList = this.getImages();\n return _.filter(imagesList, img => {\n return !img.uploading && !img.add;\n }).map(img => {\n return img.url;\n });\n };\n\n waitForThumbnails = () => {\n if (this.checkThumb) return;\n\n this.checkThumb = setInterval(async () => {\n const imagesList = this.getImages();\n const imagesUpdate = [];\n await Promise.all(\n imagesList.map(image => {\n return new Promise(async resolve => {\n const newImage = { ...image };\n imagesUpdate.push(newImage);\n if (newImage.url && !newImage.thumbNailExists) {\n newImage.uploading = false;\n newImage.allowRetry = false;\n newImage.thumbNailExists = await Helper.imageExists(newImage.thumbNailUrl);\n resolve(newImage.thumbNailExists);\n }\n resolve(true);\n });\n }),\n );\n const thumbnailsExist = imagesUpdate.every(image => !image.url || image.thumbNailExists);\n if (thumbnailsExist) {\n clearInterval(this.checkThumb);\n this.checkThumb = null;\n this.setImages(imagesUpdate);\n }\n }, 2000);\n };\n\n removeImage = (index) => {\n const imagesUpdate = this.getImages();\n imagesUpdate.splice(index, 1);\n\n this.setImages(imagesUpdate);\n };\n\n showUploadMenu = () => {\n Keyboard.dismiss();\n const { uploadingImage, submittingNote } = this.state;\n if (uploadingImage || submittingNote) return;\n this.imageUploader.showUploadMenu();\n };\n\n toggleFullscreenVideo = url => {\n if (typeof url !== 'string') url = '';\n this.setState({ showFullscreenVideo: url.length > 0, currentVideoUrl: url });\n };\n\n onUploadStarted = (uploadUri, imageUri) => {\n const imagesUpdate = this.getImages();\n imagesUpdate.splice(imagesUpdate.length - 1, 0, {\n uploading: true,\n uploadProgress: '0%',\n uploadUri,\n imageUri,\n allowRetry: true,\n });\n\n this.setImages(imagesUpdate, true);\n };\n\n onUploadProgress = progress => {\n const imagesUpdate = this.getImages();\n imagesUpdate.map(img => {\n if (img.uploadUri === progress.uri) {\n img.uploadProgress = progress.percentage;\n img.uploading = true;\n img.allowRetry = true;\n }\n });\n\n this.setImages(imagesUpdate, true);\n };\n\n onUploadSuccess = async (uri, uploadUri) => {\n const imagesUpdate = this.getImages();\n imagesUpdate.map(img => {\n if (img.uploadUri === uploadUri && img.uploading) {\n img.url = uri.replace('/general/', '/general1400/');\n img.thumbNailExists = false;\n img.thumbNailUrl = Helper.getThumb300(img.url);\n img.allowRetry = true;\n }\n });\n\n this.setImages(imagesUpdate, false, () => this.waitForThumbnails());\n };\n\n onUploadFailed = uploadUri => {\n const imagesUpdate = this.getImages();\n imagesUpdate.map(img => {\n if (img.uploadUri === uploadUri) {\n img.uploading = true; // Requried for retry\n img.uploadProgress = '';\n img.allowRetry = true;\n }\n });\n\n this.setImages(imagesUpdate);\n };\n\n onLibrarySelected = uri => {\n const imagesUpdate = this.getImages();\n imagesUpdate.splice(imagesUpdate.length - 1, 0, {\n uploading: false,\n allowRetry: false,\n url: Helper.get1400(uri),\n thumbNailExists: true,\n thumbNailUrl: Helper.getThumb300(uri),\n });\n\n this.setImages(imagesUpdate);\n };\n\n renderAttachment(a, i) {\n return (\n <Components.Attachment\n onPress={() => {\n this.onOpenAttachment(a);\n }}\n key={i}\n title={a.Title}\n />\n );\n }\n\n renderNote(n) {\n return (\n <View style={styles.noteContainer} key={n.Id}>\n <View style={styles.noteContainerTop}>\n <Components.ProfilePic Diameter={30} ProfilePic={n.User.profilePic} style={styles.profilePic} />\n <View style={styles.noteContainerTopRight}>\n {this.props.user.uid === n.User.id && (\n <TouchableOpacity\n onPress={() => {\n this.onPressDeleteNote(n);\n }}\n >\n <View style={[styles.noteContainerButtonContainer, { backgroundColor: this.props.colourBrandingMain }]}>\n <Icon name=\"trash\" type=\"font-awesome\" iconStyle={styles.noteContainerButtonIcon} />\n </View>\n </TouchableOpacity>\n )}\n {this.props.user.uid === n.User.id && (\n <TouchableOpacity\n onPress={() => {\n this.openEditNote(n);\n }}\n >\n <View style={[styles.noteContainerButtonContainer, { backgroundColor: this.props.colourBrandingMain }]}>\n <Icon name=\"pencil\" type=\"font-awesome\" iconStyle={styles.noteContainerButtonIcon} />\n </View>\n </TouchableOpacity>\n )}\n <View style={styles.noteContainerTopFill}>\n <Text style={styles.noteContainerName}>{n.User.displayName}</Text>\n </View>\n </View>\n </View>\n <Text style={styles.noteContainerText}>{n.Note}</Text>\n {(n.Attachments || []).map((a, i) => this.renderAttachment(a, i))}\n <Text style={styles.noteTimestamp}>\n {moment\n .utc(n.Timestamp)\n .local()\n .format(Helper.TIMESTAMP_FORMAT)}\n </Text>\n </View>\n );\n }\n\n renderNotes() {\n return (this.state.job.Notes || []).map((n, i) => {\n return this.renderNote(n, i);\n });\n }\n\n renderPDF() {\n if (_.isEmpty(this.state.selectedPDF)) {\n return null;\n }\n return (\n <Components.PDFPopup\n source={this.state.selectedPDF.Source}\n onClose={this.onCloseAttachment}\n title={this.state.selectedPDF.Title}\n pdfCount={1}\n />\n );\n }\n\n renderNoteDeleteConfirm() {\n return (\n <Components.ConfirmPopup\n visible={!!this.state.noteToDelete}\n onConfirm={this.onPressConfirmDelete}\n onCancel={this.onPressCancelDelete}\n onClose={this.onPressCancelDelete}\n text=\"Are you sure you want to delete this note?\"\n />\n );\n }\n\n renderFooterContent() {\n if (this.state.submittingNote) {\n return <Components.Spinner />;\n }\n return (\n <Components.InlineButton color={this.props.colourBrandingMain} onPress={this.confirmAddNote} fillTouchable large>\n Save\n </Components.InlineButton>\n );\n }\n\n renderUploadMenu() {\n return (\n <Components.ImageUploader\n ref={ref => (this.imageUploader = ref)}\n onUploadStarted={this.onUploadStarted}\n onUploadSuccess={this.onUploadSuccess}\n onUploadFailed={this.onUploadFailed}\n onUploadProgress={this.onUploadProgress}\n onLibrarySelected={this.onLibrarySelected}\n size={{ width: 1400 }}\n quality={0.8}\n fileName={'serviceNoteImage'}\n popupTitle={'Upload Image'}\n userId={this.props.user.uid}\n allowsEditing={false}\n multiple\n hideLibrary\n />\n );\n }\n\n renderImage(item, index) {\n const isVideoUrl = Helper.isVideo(item.url);\n const imagesList = this.getImages();\n\n if (item.add) {\n return (\n <TouchableOpacity activeOpacity={0.8} onPress={() => this.showUploadMenu()}>\n <View\n style={[\n styles.imageContainer,\n imagesList.length > 1 && styles.imageContainerNotEmpty,\n index % 3 === 0 && { marginLeft: 0 },\n index > 2 && { marginTop: 8 },\n ]}\n >\n <View style={styles.imageCircle}>\n <Icon name=\"camera\" type=\"font-awesome\" iconStyle={styles.addImageIcon} />\n </View>\n </View>\n </TouchableOpacity>\n );\n }\n return (\n <View\n style={[\n styles.imageContainer,\n imagesList.length > 1 && styles.imageContainerNotEmpty,\n index % 3 === 0 && { marginLeft: 0 },\n index > 2 && { marginTop: 8 },\n ]}\n >\n {item.uploading ? (\n <Components.ImageUploadProgress uploader={this.imageUploader} image={item} color={this.props.colourBrandingMain} />\n ) : (\n <ImageBackground\n style={styles.imageBackground}\n source={Helper.getImageSource(item.thumbNailExists ? item.thumbNailUrl : (item.url || item))}\n >\n {isVideoUrl && (\n <View style={styles.imagePlayContainer}>\n <TouchableOpacity onPress={this.toggleFullscreenVideo.bind(this, item.url)}>\n <Icon name=\"play\" type=\"font-awesome\" iconStyle={styles.imageControlIcon} />\n </TouchableOpacity>\n </View>\n )}\n <TouchableOpacity style={styles.removeImage} onPress={() => this.removeImage(index)}>\n <Icon name=\"remove\" type=\"font-awesome\" iconStyle={styles.imageControlIcon} style={styles.removeImage} />\n </TouchableOpacity>\n </ImageBackground>\n )}\n </View>\n );\n }\n\n renderImageList() {\n const imagesList = this.getImages();\n\n return (\n <View style={styles.imageListContainer}>\n <FlatList\n keyboardShouldPersistTaps=\"always\"\n enableEmptySections\n data={imagesList}\n renderItem={({ item, index }) => this.renderImage(item, index)}\n keyExtractor={(item, index) => index}\n numColumns={3}\n scrollEnabled={false}\n />\n </View>\n );\n }\n\n renderVideoPlayerPopup() {\n const { showFullscreenVideo, currentVideoUrl } = this.state;\n if (!currentVideoUrl) return;\n\n return (\n <Components.VideoPopup\n uri={currentVideoUrl}\n visible={showFullscreenVideo}\n showFullscreenButton={false}\n onClose={this.toggleFullscreenVideo}\n />\n );\n }\n\n renderAdd() {\n return (\n <Modal animationType=\"slide\" visible={this.state.addNoteOpen}>\n <KeyboardAvoidingView style={styles.container} behavior={Platform.OS === 'ios' && 'padding'}>\n {this.renderUploadMenu()}\n <Components.Header leftText=\"Cancel\" onPressLeft={this.closeAddNote} text=\"\" />\n <ScrollView style={styles.scrollContainer} contentContainerStyle={styles.innerContainer}>\n <Components.TextStyle type=\"pageHeading\">Add Staff Note</Components.TextStyle>\n <Components.GenericInputSection\n label=\"Content\"\n placeholder=\"Insert your notes here...\"\n value={this.state.noteInput}\n onChangeText={noteInput => this.setState({ noteInput })}\n isValid={() => {\n return !_.isEmpty(this.state.noteInput);\n }}\n autoCapitalize=\"sentences\"\n minHeight={135}\n autoCorrect\n multiline\n autoGrow\n required\n squaredCorners\n sectionStyle={styles.inputSection}\n />\n <Components.GenericInputSection label=\"Attachments\" sectionStyle={styles.inputSection}>\n {this.renderImageList()}\n {this.state.editingNote ? (\n (this.state.noteAttachments || []).map((a, i) => this.renderAttachment(a, i))\n ) : (\n <Components.TextStyle type=\"body\" style={styles.attachmentInfo}>\n PDFs can only be attached to notes from the Community Manager.\n </Components.TextStyle>\n )}\n </Components.GenericInputSection>\n </ScrollView>\n <View style={styles.popupFooter}>{this.renderFooterContent()}</View>\n {this.renderVideoPlayerPopup()}\n </KeyboardAvoidingView>\n </Modal>\n );\n }\n\n render() {\n return (\n <View style={styles.container}>\n {this.renderPDF()}\n {this.renderNoteDeleteConfirm()}\n {this.renderAdd()}\n <Components.Header leftIcon=\"angle-left\" onPressLeft={this.onPressBack} text=\"Staff Notes\" />\n <ScrollView style={styles.scrollContainer} contentContainerStyle={styles.innerContainer}>\n {this.renderNotes()}\n </ScrollView>\n <Components.AddButton onPress={this.openAddNote} />\n </View>\n );\n }\n}\n\nconst styles = {\n container: {\n flex: 1,\n position: 'relative',\n backgroundColor: '#fff',\n },\n scrollContainer: {\n flex: 1,\n },\n innerContainer: {\n padding: 16,\n },\n popupFooter: {\n paddingHorizontal: 16,\n paddingBottom: getBottomSpace() + 16,\n },\n noteContainer: {\n ...Helper.getShadowStyle(),\n padding: 8,\n marginBottom: 16,\n },\n noteContainerTop: {\n flexDirection: 'row',\n alignItems: 'center',\n },\n profilePic: {\n marginRight: 8,\n },\n noteContainerTopFill: {\n flex: 1,\n },\n noteContainerName: {\n fontFamily: 'sf-semibold',\n fontSize: 13,\n color: Colours.TEXT_DARKEST,\n },\n noteContainerText: {\n marginTop: 8,\n fontFamily: 'sf-regular',\n fontSize: 13,\n color: Colours.TEXT_DARKEST,\n },\n noteTimestamp: {\n marginTop: 8,\n fontFamily: 'sf-semibold',\n fontSize: 11,\n color: Colours.TEXT_LIGHT,\n },\n noteContainerTopRight: {\n flex: 1,\n flexDirection: 'row-reverse',\n alignItems: 'center',\n },\n noteContainerButtonContainer: {\n width: 24,\n height: 24,\n borderRadius: 12,\n alignItems: 'center',\n justifyContent: 'center',\n marginLeft: 8,\n },\n noteContainerButtonIcon: {\n fontSize: 13,\n color: '#fff',\n },\n inputSection: {\n marginTop: 24,\n },\n sectionHeading: {\n fontFamily: 'qs-bold',\n fontSize: 24,\n color: Colours.TEXT_DARKEST,\n },\n attachmentInfo: {\n marginTop: 8,\n },\n imageListContainer: {\n marginVertical: 8,\n },\n imageContainer: {\n width: PHOTO_SIZE,\n height: PHOTO_SIZE,\n borderStyle: 'dashed',\n justifyContent: 'center',\n alignItems: 'center',\n borderWidth: 1,\n borderColor: Colours.LINEGREY,\n backgroundColor: Colours.BOXGREY,\n borderRadius: 4,\n marginLeft: 8,\n },\n imageContainerNotEmpty: {\n borderWidth: 1,\n borderColor: Colours.LINEGREY,\n backgroundColor: '#fff',\n borderStyle: 'dashed',\n },\n imageBackground: {\n flex: 1,\n height: '100%',\n width: '100%',\n borderRadius: 4,\n },\n imageCircle: {\n width: 90,\n height: 90,\n borderRadius: 45,\n backgroundColor: Colours.PINKISH_GREY,\n justifyContent: 'center',\n },\n addImageIcon: {\n color: '#fff',\n fontSize: 32,\n },\n imagePlayContainer: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n alignItems: 'center',\n justifyContent: 'center',\n },\n imageControlIcon: {\n color: '#fff',\n fontSize: 20,\n textShadowColor: 'rgba(0,0,0,0.3)',\n textShadowOffset: { width: 2, height: 2 },\n },\n removeImage: {\n position: 'absolute',\n top: 0,\n right: 0,\n padding: 4,\n width: 40,\n height: 40,\n alignItems: 'center',\n justifyContent: 'center',\n },\n};\n\nconst mapStateToProps = state => {\n return {\n user: state.user,\n colourBrandingMain: Colours.getMainBrandingColourFromState(state),\n colourBrandingLight: Colours.getLightBrandingColourFromState(state),\n jobs: state[values.reducerKey].jobs,\n };\n};\n\nexport default connect(mapStateToProps, { jobAdded })(RequestNotes);\n"],"mappings":"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","ignoreList":[]}