@plusscommunities/pluss-maintenance-app 6.0.12-beta.0 → 6.0.12-beta.1

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.
@@ -13,7 +13,8 @@ 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
+ const SCREEN_WIDTH = Dimensions.get('window').width;
17
+ const PHOTO_SIZE = (SCREEN_WIDTH - 64) / 3;
17
18
  class RequestNotes extends Component {
18
19
  constructor(props) {
19
20
  super(props);
@@ -276,7 +277,10 @@ class RequestNotes extends Component {
276
277
  noteImages: [{
277
278
  add: true
278
279
  }],
279
- uploadingImage: false
280
+ uploadingImage: false,
281
+ galleryOpen: false,
282
+ galleryImages: [],
283
+ galleryIndex: 0
280
284
  };
281
285
  this.checkThumb = null;
282
286
  }
@@ -297,6 +301,20 @@ class RequestNotes extends Component {
297
301
  job
298
302
  });
299
303
  }
304
+ openGallery(images, index) {
305
+ this.setState({
306
+ galleryOpen: true,
307
+ galleryImages: images,
308
+ galleryIndex: index
309
+ });
310
+ }
311
+ closeGallery() {
312
+ this.setState({
313
+ galleryOpen: false,
314
+ galleryImages: [],
315
+ galleryIndex: 0
316
+ });
317
+ }
300
318
  renderAttachment(a, i) {
301
319
  return /*#__PURE__*/React.createElement(Components.Attachment, {
302
320
  onPress: () => {
@@ -306,6 +324,67 @@ class RequestNotes extends Component {
306
324
  title: a.Title
307
325
  });
308
326
  }
327
+ renderPlayableImageUrl(images, index, containerStyle) {
328
+ const url = images[index];
329
+ const thumbUrl = Helper.getThumb300(url);
330
+ if (Helper.isVideo(url)) {
331
+ return /*#__PURE__*/React.createElement(ImageBackground, {
332
+ style: [{
333
+ flex: 1
334
+ }, containerStyle],
335
+ source: {
336
+ uri: thumbUrl
337
+ }
338
+ }, /*#__PURE__*/React.createElement(View, {
339
+ style: styles.imagePlayContainer
340
+ }, /*#__PURE__*/React.createElement(TouchableOpacity, {
341
+ onPress: this.toggleFullscreenVideo.bind(this, url)
342
+ }, /*#__PURE__*/React.createElement(Icon, {
343
+ name: "play",
344
+ type: "font-awesome",
345
+ iconStyle: styles.imageControlIcon
346
+ }))));
347
+ }
348
+ const imageUrl = Helper.get1400(url);
349
+ return /*#__PURE__*/React.createElement(TouchableOpacity, {
350
+ style: containerStyle,
351
+ onPress: this.openGallery.bind(this, images, index || 0)
352
+ }, /*#__PURE__*/React.createElement(ImageBackground, {
353
+ resizeMode: "cover",
354
+ style: styles.imageContainer,
355
+ source: {
356
+ uri: imageUrl
357
+ }
358
+ }));
359
+ }
360
+ renderImages(note) {
361
+ if (!note) return null;
362
+ if (!_.isNil(note.Images) && !_.isEmpty(note.Images)) {
363
+ return /*#__PURE__*/React.createElement(ScrollView, {
364
+ horizontal: true,
365
+ style: styles.sideBySideImages
366
+ }, note.Images.map((_p, index) => this.renderPlayableImageUrl(note.Images, index, styles.sideBySideImageContainer)));
367
+ }
368
+ return null;
369
+ }
370
+ renderImagePopup() {
371
+ const {
372
+ galleryOpen,
373
+ galleryImages,
374
+ galleryIndex
375
+ } = this.state;
376
+ console.log('renderimagepopup', {
377
+ galleryOpen,
378
+ galleryImages,
379
+ galleryIndex
380
+ });
381
+ return /*#__PURE__*/React.createElement(Components.ImagePopup, {
382
+ visible: galleryOpen,
383
+ images: galleryImages,
384
+ index: galleryIndex,
385
+ onClose: this.closeGallery.bind(this)
386
+ });
387
+ }
309
388
  renderNote(n) {
310
389
  return /*#__PURE__*/React.createElement(View, {
311
390
  style: styles.noteContainer,
@@ -348,7 +427,7 @@ class RequestNotes extends Component {
348
427
  style: styles.noteContainerName
349
428
  }, n.User.displayName)))), /*#__PURE__*/React.createElement(Text, {
350
429
  style: styles.noteContainerText
351
- }, n.Note), (n.Attachments || []).map((a, i) => this.renderAttachment(a, i)), /*#__PURE__*/React.createElement(Text, {
430
+ }, n.Note), (n.Attachments || []).map((a, i) => this.renderAttachment(a, i)), this.renderImages(n), /*#__PURE__*/React.createElement(Text, {
352
431
  style: styles.noteTimestamp
353
432
  }, moment.utc(n.Timestamp).local().format(Helper.TIMESTAMP_FORMAT)));
354
433
  }
@@ -546,7 +625,7 @@ class RequestNotes extends Component {
546
625
  contentContainerStyle: styles.innerContainer
547
626
  }, this.renderNotes()), /*#__PURE__*/React.createElement(Components.AddButton, {
548
627
  onPress: this.openAddNote
549
- }));
628
+ }), this.renderImagePopup());
550
629
  }
551
630
  }
552
631
  const styles = {
@@ -690,6 +769,20 @@ const styles = {
690
769
  height: 40,
691
770
  alignItems: 'center',
692
771
  justifyContent: 'center'
772
+ },
773
+ sideBySideImages: {
774
+ flex: 1,
775
+ flexDirection: 'row',
776
+ marginTop: 12,
777
+ marginHorizontal: -8
778
+ },
779
+ sideBySideImageContainer: {
780
+ backgroundColor: '#fff',
781
+ width: 60,
782
+ height: 50,
783
+ borderRadius: 2,
784
+ overflow: 'hidden',
785
+ marginRight: 2
693
786
  }
694
787
  };
695
788
  const mapStateToProps = state => {
@@ -1 +1 @@
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":[]}
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","SCREEN_WIDTH","get","width","PHOTO_SIZE","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","galleryOpen","galleryImages","galleryIndex","componentDidMount","updateJobState","componentDidUpdate","prevProps","jobs","componentWillUnmount","find","j","openGallery","closeGallery","renderAttachment","createElement","Attachment","onPress","onOpenAttachment","key","title","renderPlayableImageUrl","containerStyle","thumbUrl","isVideo","style","flex","source","styles","imagePlayContainer","toggleFullscreenVideo","bind","name","type","iconStyle","imageControlIcon","imageUrl","resizeMode","imageContainer","renderImages","isNil","horizontal","sideBySideImages","_p","sideBySideImageContainer","renderImagePopup","ImagePopup","visible","onClose","renderNote","noteContainer","noteContainerTop","ProfilePic","Diameter","User","profilePic","noteContainerTopRight","user","uid","onPressDeleteNote","noteContainerButtonContainer","backgroundColor","colourBrandingMain","noteContainerButtonIcon","openEditNote","noteContainerTopFill","noteContainerName","displayName","noteContainerText","noteTimestamp","utc","Timestamp","local","format","TIMESTAMP_FORMAT","renderNotes","renderPDF","PDFPopup","onCloseAttachment","pdfCount","renderNoteDeleteConfirm","ConfirmPopup","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","activeOpacity","imageContainerNotEmpty","marginLeft","marginTop","imageCircle","addImageIcon","ImageUploadProgress","uploader","imageBackground","getImageSource","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","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","marginHorizontal","overflow","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 SCREEN_WIDTH = Dimensions.get('window').width;\nconst PHOTO_SIZE = (SCREEN_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 galleryOpen: false,\n galleryImages: [],\n galleryIndex: 0\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 openGallery(images, index) {\n this.setState({ galleryOpen: true, galleryImages: images, galleryIndex: index });\n }\n\n closeGallery() {\n this.setState({ galleryOpen: false, galleryImages: [], galleryIndex: 0 });\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 renderPlayableImageUrl(images, index, containerStyle) {\n const url = images[index];\n const thumbUrl = Helper.getThumb300(url);\n\n if (Helper.isVideo(url)) {\n return (\n <ImageBackground style={[{ flex: 1 }, containerStyle]} source={{ uri: thumbUrl }}>\n <View style={styles.imagePlayContainer}>\n <TouchableOpacity onPress={this.toggleFullscreenVideo.bind(this, url)}>\n <Icon name=\"play\" type=\"font-awesome\" iconStyle={styles.imageControlIcon} />\n </TouchableOpacity>\n </View>\n </ImageBackground>\n );\n }\n\n const imageUrl = Helper.get1400(url);\n return (\n <TouchableOpacity style={containerStyle} onPress={this.openGallery.bind(this, images, index || 0)}>\n <ImageBackground resizeMode='cover' style={styles.imageContainer} source={{ uri: imageUrl }} />\n </TouchableOpacity>\n );\n }\n\n renderImages(note) {\n if (!note) return null\n if (!_.isNil(note.Images) && !_.isEmpty(note.Images)) {\n return (\n <ScrollView horizontal style={styles.sideBySideImages}>\n {note.Images.map((_p, index) =>\n this.renderPlayableImageUrl(note.Images, index, styles.sideBySideImageContainer),\n )}\n </ScrollView>\n );\n }\n return null;\n }\n\n renderImagePopup() {\n const { galleryOpen, galleryImages, galleryIndex } = this.state;\n console.log('renderimagepopup', { galleryOpen, galleryImages, galleryIndex });\n return (\n <Components.ImagePopup\n visible={galleryOpen}\n images={galleryImages}\n index={galleryIndex}\n onClose={this.closeGallery.bind(this)}\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 {this.renderImages(n)}\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 {this.renderImagePopup()}\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 sideBySideImages: {\n flex: 1,\n flexDirection: 'row',\n marginTop: 12,\n marginHorizontal: -8,\n },\n sideBySideImageContainer: {\n backgroundColor: '#fff',\n width: 60,\n height: 50,\n borderRadius: 2,\n overflow: 'hidden',\n marginRight: 2,\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":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@plusscommunities/pluss-maintenance-app",
3
- "version": "6.0.12-beta.0",
3
+ "version": "6.0.12-beta.1",
4
4
  "description": "Extension package to enable maintenance on Pluss Communities Platform",
5
5
  "main": "dist/module/index.js",
6
6
  "module": "dist/module/index.js",
@@ -50,4 +50,4 @@
50
50
  "module"
51
51
  ]
52
52
  }
53
- }
53
+ }
@@ -11,7 +11,8 @@ import { Services } from '../feature.config';
11
11
  import { Components, Colours, Helper } from '../core.config';
12
12
  import { values } from '../values.config';
13
13
 
14
- const PHOTO_SIZE = (Dimensions.get('window').width - 64) / 3;
14
+ const SCREEN_WIDTH = Dimensions.get('window').width;
15
+ const PHOTO_SIZE = (SCREEN_WIDTH - 64) / 3;
15
16
 
16
17
  class RequestNotes extends Component {
17
18
  constructor(props) {
@@ -25,6 +26,9 @@ class RequestNotes extends Component {
25
26
  addNoteOpen: false,
26
27
  noteImages: [{ add: true }],
27
28
  uploadingImage: false,
29
+ galleryOpen: false,
30
+ galleryImages: [],
31
+ galleryIndex: 0
28
32
  };
29
33
  this.checkThumb = null;
30
34
  }
@@ -253,6 +257,14 @@ class RequestNotes extends Component {
253
257
  this.setState({ showFullscreenVideo: url.length > 0, currentVideoUrl: url });
254
258
  };
255
259
 
260
+ openGallery(images, index) {
261
+ this.setState({ galleryOpen: true, galleryImages: images, galleryIndex: index });
262
+ }
263
+
264
+ closeGallery() {
265
+ this.setState({ galleryOpen: false, galleryImages: [], galleryIndex: 0 });
266
+ }
267
+
256
268
  onUploadStarted = (uploadUri, imageUri) => {
257
269
  const imagesUpdate = this.getImages();
258
270
  imagesUpdate.splice(imagesUpdate.length - 1, 0, {
@@ -331,6 +343,57 @@ class RequestNotes extends Component {
331
343
  );
332
344
  }
333
345
 
346
+ renderPlayableImageUrl(images, index, containerStyle) {
347
+ const url = images[index];
348
+ const thumbUrl = Helper.getThumb300(url);
349
+
350
+ if (Helper.isVideo(url)) {
351
+ return (
352
+ <ImageBackground style={[{ flex: 1 }, containerStyle]} source={{ uri: thumbUrl }}>
353
+ <View style={styles.imagePlayContainer}>
354
+ <TouchableOpacity onPress={this.toggleFullscreenVideo.bind(this, url)}>
355
+ <Icon name="play" type="font-awesome" iconStyle={styles.imageControlIcon} />
356
+ </TouchableOpacity>
357
+ </View>
358
+ </ImageBackground>
359
+ );
360
+ }
361
+
362
+ const imageUrl = Helper.get1400(url);
363
+ return (
364
+ <TouchableOpacity style={containerStyle} onPress={this.openGallery.bind(this, images, index || 0)}>
365
+ <ImageBackground resizeMode='cover' style={styles.imageContainer} source={{ uri: imageUrl }} />
366
+ </TouchableOpacity>
367
+ );
368
+ }
369
+
370
+ renderImages(note) {
371
+ if (!note) return null
372
+ if (!_.isNil(note.Images) && !_.isEmpty(note.Images)) {
373
+ return (
374
+ <ScrollView horizontal style={styles.sideBySideImages}>
375
+ {note.Images.map((_p, index) =>
376
+ this.renderPlayableImageUrl(note.Images, index, styles.sideBySideImageContainer),
377
+ )}
378
+ </ScrollView>
379
+ );
380
+ }
381
+ return null;
382
+ }
383
+
384
+ renderImagePopup() {
385
+ const { galleryOpen, galleryImages, galleryIndex } = this.state;
386
+ console.log('renderimagepopup', { galleryOpen, galleryImages, galleryIndex });
387
+ return (
388
+ <Components.ImagePopup
389
+ visible={galleryOpen}
390
+ images={galleryImages}
391
+ index={galleryIndex}
392
+ onClose={this.closeGallery.bind(this)}
393
+ />
394
+ );
395
+ }
396
+
334
397
  renderNote(n) {
335
398
  return (
336
399
  <View style={styles.noteContainer} key={n.Id}>
@@ -366,6 +429,7 @@ class RequestNotes extends Component {
366
429
  </View>
367
430
  <Text style={styles.noteContainerText}>{n.Note}</Text>
368
431
  {(n.Attachments || []).map((a, i) => this.renderAttachment(a, i))}
432
+ {this.renderImages(n)}
369
433
  <Text style={styles.noteTimestamp}>
370
434
  {moment
371
435
  .utc(n.Timestamp)
@@ -580,6 +644,7 @@ class RequestNotes extends Component {
580
644
  {this.renderNotes()}
581
645
  </ScrollView>
582
646
  <Components.AddButton onPress={this.openAddNote} />
647
+ {this.renderImagePopup()}
583
648
  </View>
584
649
  );
585
650
  }
@@ -724,6 +789,20 @@ const styles = {
724
789
  alignItems: 'center',
725
790
  justifyContent: 'center',
726
791
  },
792
+ sideBySideImages: {
793
+ flex: 1,
794
+ flexDirection: 'row',
795
+ marginTop: 12,
796
+ marginHorizontal: -8,
797
+ },
798
+ sideBySideImageContainer: {
799
+ backgroundColor: '#fff',
800
+ width: 60,
801
+ height: 50,
802
+ borderRadius: 2,
803
+ overflow: 'hidden',
804
+ marginRight: 2,
805
+ },
727
806
  };
728
807
 
729
808
  const mapStateToProps = state => {