@plusscommunities/pluss-core-app 1.8.3 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/module/components/PlussChat.js +88 -12
- package/dist/module/components/PlussChat.js.map +1 -1
- package/dist/module/components/PlussChatMessage.js +84 -4
- package/dist/module/components/PlussChatMessage.js.map +1 -1
- package/dist/module/components/TextStyle.js +5 -0
- package/dist/module/components/TextStyle.js.map +1 -1
- package/package.json +18 -18
- package/src/components/PlussChat.js +109 -40
- package/src/components/PlussChatMessage.js +88 -4
- package/src/components/TextStyle.js +5 -0
|
@@ -16,6 +16,7 @@ import PlussChatTime from './PlussChatTime';
|
|
|
16
16
|
import { PDFPopup } from './PDFPopup';
|
|
17
17
|
import { Attachment } from './Attachment';
|
|
18
18
|
import PlussChatMessage from './PlussChatMessage';
|
|
19
|
+
import { TextStyle } from './TextStyle';
|
|
19
20
|
import { TEXT_DARK, LINEGREY, TEXT_DARKEST, getMainBrandingColourFromState, getLightBrandingColourFromState, BG_GREY, TEXT_BLUEGREY } from '../colours';
|
|
20
21
|
import { getEnabledTabsFromState, get1400, getThumb300, imageExists, isVideo, getImageSource, getFileName } from '../helper';
|
|
21
22
|
import Config, { Services } from '../config';
|
|
@@ -211,6 +212,12 @@ class PlussChat extends Component {
|
|
|
211
212
|
});
|
|
212
213
|
});
|
|
213
214
|
|
|
215
|
+
_defineProperty(this, "onReply", message => {
|
|
216
|
+
this.setState({
|
|
217
|
+
replyingTo: message
|
|
218
|
+
});
|
|
219
|
+
});
|
|
220
|
+
|
|
214
221
|
_defineProperty(this, "onRemoveImage", url => {
|
|
215
222
|
const imagesToUpload = this.state.imagesToUpload.filter(image => image.url !== url);
|
|
216
223
|
this.setState({
|
|
@@ -302,9 +309,15 @@ class PlussChat extends Component {
|
|
|
302
309
|
}
|
|
303
310
|
|
|
304
311
|
if (!messages[0].text && !messages[0].image) return;
|
|
312
|
+
|
|
313
|
+
if (this.state.replyingTo) {
|
|
314
|
+
messages[0].replyingTo = this.state.replyingTo;
|
|
315
|
+
}
|
|
316
|
+
|
|
305
317
|
this.props.onSend(messages);
|
|
306
318
|
this.setState({
|
|
307
|
-
imagesToUpload: []
|
|
319
|
+
imagesToUpload: [],
|
|
320
|
+
replyingTo: null
|
|
308
321
|
});
|
|
309
322
|
}
|
|
310
323
|
/**
|
|
@@ -364,7 +377,11 @@ class PlussChat extends Component {
|
|
|
364
377
|
|
|
365
378
|
renderMessage(props) {
|
|
366
379
|
return /*#__PURE__*/React.createElement(PlussChatMessage, _extends({
|
|
367
|
-
key: props.RowId
|
|
380
|
+
key: props.RowId,
|
|
381
|
+
colourBrandingMain: this.props.colourBrandingMain,
|
|
382
|
+
onPressReply: () => {
|
|
383
|
+
this.onReply(props.currentMessage);
|
|
384
|
+
}
|
|
368
385
|
}, props));
|
|
369
386
|
}
|
|
370
387
|
|
|
@@ -536,11 +553,13 @@ class PlussChat extends Component {
|
|
|
536
553
|
|
|
537
554
|
renderSend(props) {
|
|
538
555
|
return /*#__PURE__*/React.createElement(View, {
|
|
539
|
-
style: {
|
|
556
|
+
style: [{
|
|
540
557
|
position: 'absolute',
|
|
541
558
|
top: 0,
|
|
542
559
|
right: 0
|
|
543
|
-
}
|
|
560
|
+
}, !!this.state.replyingTo && {
|
|
561
|
+
marginTop: 38
|
|
562
|
+
}]
|
|
544
563
|
}, (!_.isEmpty(props.text) || this.hasImagesReady(props.imagesToUpload)) && /*#__PURE__*/React.createElement(Send, _extends({}, props, {
|
|
545
564
|
alwaysShowSend: true,
|
|
546
565
|
containerStyle: [styles.sendContainer, {
|
|
@@ -628,19 +647,23 @@ class PlussChat extends Component {
|
|
|
628
647
|
}
|
|
629
648
|
|
|
630
649
|
renderInputToolbar(props) {
|
|
650
|
+
let toolbar;
|
|
651
|
+
|
|
631
652
|
if (!this.hasImagesAttached(props.imagesToUpload)) {
|
|
632
|
-
|
|
653
|
+
toolbar = /*#__PURE__*/React.createElement(InputToolbar, _extends({}, props, {
|
|
633
654
|
containerStyle: styles.inputContainer,
|
|
634
655
|
renderComposer: this.renderComposer.bind(this)
|
|
635
656
|
}));
|
|
657
|
+
} else {
|
|
658
|
+
toolbar = /*#__PURE__*/React.createElement(InputToolbar, _extends({}, props, {
|
|
659
|
+
containerStyle: styles.inputContainer,
|
|
660
|
+
renderComposer: this.renderComposer.bind(this),
|
|
661
|
+
renderAccessory: this.renderAccessory.bind(this),
|
|
662
|
+
accessoryStyle: styles.accessory
|
|
663
|
+
}));
|
|
636
664
|
}
|
|
637
665
|
|
|
638
|
-
return
|
|
639
|
-
containerStyle: styles.inputContainer,
|
|
640
|
-
renderComposer: this.renderComposer.bind(this),
|
|
641
|
-
renderAccessory: this.renderAccessory.bind(this),
|
|
642
|
-
accessoryStyle: styles.accessory
|
|
643
|
-
}));
|
|
666
|
+
return toolbar;
|
|
644
667
|
}
|
|
645
668
|
|
|
646
669
|
renderFooter() {
|
|
@@ -680,8 +703,33 @@ class PlussChat extends Component {
|
|
|
680
703
|
}
|
|
681
704
|
|
|
682
705
|
renderComposer(props) {
|
|
706
|
+
var _this$state$replyingT, _this$state$replyingT2, _this$state$replyingT3, _this$state$replyingT4;
|
|
707
|
+
|
|
683
708
|
//console.log(props.composerHeight);
|
|
684
709
|
return /*#__PURE__*/React.createElement(View, {
|
|
710
|
+
style: styles.composerContainer
|
|
711
|
+
}, this.state.replyingTo && /*#__PURE__*/React.createElement(View, {
|
|
712
|
+
style: styles.replyingTo
|
|
713
|
+
}, /*#__PURE__*/React.createElement(TextStyle, {
|
|
714
|
+
type: "body"
|
|
715
|
+
}, "Replying to ", _.isEmpty((_this$state$replyingT = this.state.replyingTo) === null || _this$state$replyingT === void 0 ? void 0 : (_this$state$replyingT2 = _this$state$replyingT.user) === null || _this$state$replyingT2 === void 0 ? void 0 : _this$state$replyingT2.name) ? 'message' : (_this$state$replyingT3 = this.state.replyingTo) === null || _this$state$replyingT3 === void 0 ? void 0 : (_this$state$replyingT4 = _this$state$replyingT3.user) === null || _this$state$replyingT4 === void 0 ? void 0 : _this$state$replyingT4.name), /*#__PURE__*/React.createElement(TouchableOpacity, {
|
|
716
|
+
style: styles.replyingRemoveButton,
|
|
717
|
+
onPress: () => this.onReply(null),
|
|
718
|
+
hitSlop: {
|
|
719
|
+
top: 8,
|
|
720
|
+
right: 8,
|
|
721
|
+
bottom: 8,
|
|
722
|
+
left: 8
|
|
723
|
+
}
|
|
724
|
+
}, /*#__PURE__*/React.createElement(View, {
|
|
725
|
+
style: [styles.replyingRemoveContainer, {
|
|
726
|
+
backgroundColor: this.props.colourBrandingMain
|
|
727
|
+
}]
|
|
728
|
+
}, /*#__PURE__*/React.createElement(Icon, {
|
|
729
|
+
name: "times",
|
|
730
|
+
type: "font-awesome",
|
|
731
|
+
iconStyle: styles.replyingRemoveIcon
|
|
732
|
+
})))), /*#__PURE__*/React.createElement(View, {
|
|
685
733
|
style: [styles.input, {
|
|
686
734
|
//height: props.composerHeight + 10,
|
|
687
735
|
//borderRadius: (this.MIN_COMPOSER_HEIGHT + 10) / 2,
|
|
@@ -698,7 +746,7 @@ class PlussChat extends Component {
|
|
|
698
746
|
onFocus: this.onFocusInput.bind(this),
|
|
699
747
|
onBlur: this.onBlurInput.bind(this)
|
|
700
748
|
}
|
|
701
|
-
})));
|
|
749
|
+
}))));
|
|
702
750
|
}
|
|
703
751
|
/***
|
|
704
752
|
* Main Render
|
|
@@ -897,6 +945,34 @@ const styles = {
|
|
|
897
945
|
borderRadius: 5,
|
|
898
946
|
flex: 1
|
|
899
947
|
},
|
|
948
|
+
composerContainer: {
|
|
949
|
+
flex: 1
|
|
950
|
+
},
|
|
951
|
+
replyingTo: {
|
|
952
|
+
minHeight: 30,
|
|
953
|
+
flexDirection: 'row',
|
|
954
|
+
alignItems: 'center',
|
|
955
|
+
borderBottomWidth: 1,
|
|
956
|
+
borderBottomColor: LINEGREY,
|
|
957
|
+
marginBottom: 8
|
|
958
|
+
},
|
|
959
|
+
replyingRemoveButton: {
|
|
960
|
+
marginLeft: 10
|
|
961
|
+
},
|
|
962
|
+
replyingRemoveContainer: {
|
|
963
|
+
justifyContent: 'center',
|
|
964
|
+
alignItems: 'center',
|
|
965
|
+
borderRadius: 10,
|
|
966
|
+
width: 20,
|
|
967
|
+
height: 20,
|
|
968
|
+
borderWidth: 2,
|
|
969
|
+
borderColor: '#fff'
|
|
970
|
+
},
|
|
971
|
+
replyingRemoveIcon: {
|
|
972
|
+
fontSize: 10,
|
|
973
|
+
color: '#fff',
|
|
974
|
+
marginBottom: 1
|
|
975
|
+
},
|
|
900
976
|
sendContainer: {
|
|
901
977
|
position: 'absolute',
|
|
902
978
|
top: 0,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["PlussChat.js"],"names":["React","Component","View","Image","ImageBackground","TouchableOpacity","Text","KeyboardAvoidingView","Platform","ScrollView","GiftedChat","Bubble","MessageText","Send","InputToolbar","Composer","connect","_","moment","Icon","getBottomSpace","Spinner","ProfilePic","PlussChatTime","PDFPopup","Attachment","PlussChatMessage","TEXT_DARK","LINEGREY","TEXT_DARKEST","getMainBrandingColourFromState","getLightBrandingColourFromState","BG_GREY","TEXT_BLUEGREY","getEnabledTabsFromState","get1400","getThumb300","imageExists","isVideo","getImageSource","getFileName","Config","Services","ImageUploader","ImageUploadProgress","ImagePopup","VideoPopup","IMAGE_SIZE_SMALL","IMAGE_SIZE_LARGE","IMAGES_PER_ROW","IMAGE_MARGIN","IMAGE_PREVIEW_AREA_HEIGHT","IMAGE_PREVIEW_SIZE","PlussChat","constructor","props","event","navigation","navigate","attachment","Type","place","imagesToUpload","isEmpty","state","upload","hasImagesAttached","every","i","uploading","thumbNailExists","checkThumb","setInterval","Promise","all","map","image","resolve","newImage","push","url","allowRetry","thumbNailUrl","thumbnailsExist","clearInterval","setState","a","selectedPDF","keyboardOpen","uploadUri","imageUri","uploadProgress","progress","img","uri","percentage","replace","waitForThumbnails","images","selected","imagePopupSource","imagePopupIndex","indexOf","imagePopupOpen","filter","showFullscreenVideo","length","currentVideoUrl","isSingleTab","tabCount","MIN_COMPOSER_HEIGHT","select","ios","android","currentUser","_id","user","uid","name","displayName","avatar","isUndefined","profilePic","env","tinyChatDefault","messages","UNSAFE_componentWillMount","updateMessages","UNSAFE_componentWillReceiveProps","nextProps","newState","onSend","showUploadMenu","imageUploader","closeGallery","sendMessages","hasImagesReady","text","renderBubble","bubbleProps","wrapperStyle","currentMessage","paddingTop","paddingBottom","minWidth","attachments","paddingHorizontal","left","backgroundColor","borderRadius","right","colourBrandingLight","borderBottomLeftRadius","borderBottomRightRadius","borderTopLeftRadius","borderTopRightRadius","renderMessage","RowId","renderMessageText","messageTextProps","fontFamily","fontSize","color","marginTop","marginBottom","marginLeft","marginRight","colourBrandingMain","renderTime","renderDay","dayProps","renderCustomView","position","containerWidth","styles","imagesContainer","width","paddingVertical","thumb","toggleFullscreenVideo","bind","messageImageSmall","messageImageLarge","imagePlayContainer","imageControlIcon","onPressImage","console","log","onOpenAttachment","onPressEvent","eventContainer","eventImage","eventImageMargin","Thumbnail","eventInfo","eventTitle","eventInfoAlign","Title","eventDate","utc","StartTime","local","format","onPressAttachment","renderSend","top","sendContainer","height","send","renderAccessory","uploadImagesContainer","isVideoUrl","accessoryImageContainer","accessoryImage","accessoryImageBorder","previewItemRemoveButton","onRemoveImage","bottom","previewItemRemoveContainer","previewItemRemoveIcon","renderInputToolbar","inputContainer","renderComposer","accessory","renderFooter","renderLoading","justifyContent","alignContent","renderAvatar","input","OS","composerHeight","inputText","onFocus","onFocusInput","onBlur","onBlurInput","renderChat","noTab","iosBottomOffset","minInputToolbarHeight","renderImageUploader","ref","onUploadStarted","onUploadProgress","onUploadSuccess","onUploadFailed","onLibrarySelected","renderImagePopup","renderVideoPlayerPopup","renderPDF","onCloseAttachment","render","noAndroidAvoid","chatContainer","flex","paddingLeft","paddingRight","flexDirection","resizeMode","minHeight","textAlign","alignSelf","margin","alignItems","borderTopWidth","borderTopColor","settingDropDownOpen","flexWrap","overflow","borderWidth","borderColor","textShadowColor","textShadowOffset","mapStateToProps"],"mappings":"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","sourcesContent":["import React, { Component } from 'react';\nimport { View, Image, ImageBackground, TouchableOpacity, Text, KeyboardAvoidingView, Platform, ScrollView } from 'react-native';\nimport { GiftedChat, Bubble, MessageText, Send, InputToolbar, Composer } from 'react-native-gifted-chat';\nimport { connect } from 'react-redux';\nimport _ from 'lodash';\nimport moment from 'moment';\nimport { Icon } from 'react-native-elements';\nimport { getBottomSpace } from 'react-native-iphone-x-helper';\nimport { Spinner } from './Spinner';\nimport { ProfilePic } from './ProfilePic';\nimport PlussChatTime from './PlussChatTime';\nimport { PDFPopup } from './PDFPopup';\nimport { Attachment } from './Attachment';\nimport PlussChatMessage from './PlussChatMessage';\nimport {\n TEXT_DARK,\n LINEGREY,\n TEXT_DARKEST,\n getMainBrandingColourFromState,\n getLightBrandingColourFromState,\n BG_GREY,\n TEXT_BLUEGREY,\n} from '../colours';\nimport { getEnabledTabsFromState, get1400, getThumb300, imageExists, isVideo, getImageSource, getFileName } from '../helper';\nimport Config, { Services } from '../config';\nimport ImageUploader from './ImageUploader';\nimport ImageUploadProgress from './ImageUploadProgress';\nimport { ImagePopup } from './ImagePopup';\nimport { VideoPopup } from './VideoPopup';\n\nconst IMAGE_SIZE_SMALL = 55;\nconst IMAGE_SIZE_LARGE = 110;\nconst IMAGES_PER_ROW = 4;\nconst IMAGE_MARGIN = 2;\nconst IMAGE_PREVIEW_AREA_HEIGHT = 105;\nconst IMAGE_PREVIEW_SIZE = IMAGE_PREVIEW_AREA_HEIGHT - 25;\n\nclass PlussChat extends Component {\n constructor(props) {\n super(props);\n const isSingleTab = this.props.tabCount === 1 && getBottomSpace() > 0;\n this.MIN_COMPOSER_HEIGHT = Platform.select({\n ios: isSingleTab ? 42 : 33,\n android: 41,\n });\n\n this.state = {\n currentUser: {\n _id: this.props.user.uid,\n name: this.props.user.displayName,\n avatar:\n !_.isUndefined(this.props.user.profilePic) && !_.isEmpty(this.props.user.profilePic)\n ? this.props.user.profilePic\n : Config.env.tinyChatDefault,\n },\n\n messages: [],\n imagePopupSource: [],\n imagePopupIndex: 0,\n imagePopupOpen: false,\n imagesToUpload: [],\n showFullscreenVideo: false,\n currentVideoUrl: '',\n };\n this.checkThumb = null;\n }\n\n UNSAFE_componentWillMount() {\n this.updateMessages(this.props);\n }\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n this.updateMessages(nextProps);\n }\n\n updateMessages(props) {\n const newState = {};\n if (!_.isUndefined(props.messages)) {\n newState.messages = props.messages;\n }\n this.setState(newState);\n }\n\n /***\n *\n * Messaging functionality\n */\n onSend(messages = []) {\n // if (this.chatKey) {\n // this.sendMessage(messages[0]);\n // }\n }\n\n onPressEvent = event => {\n Services.navigation.navigate('eventDetail', { event });\n };\n onPressAttachment = attachment => {\n switch (attachment.Type) {\n case 'Event':\n Services.navigation.navigate('eventDetail', { event: attachment });\n break;\n case 'Place':\n Services.navigation.navigate('placeDetail', { place: attachment });\n break;\n default:\n return;\n }\n };\n\n hasImagesAttached = (imagesToUpload = null) => {\n return !_.isEmpty(imagesToUpload || this.state.imagesToUpload);\n };\n\n hasImagesReady = (imagesToUpload = null) => {\n const upload = imagesToUpload || this.state.imagesToUpload;\n return this.hasImagesAttached(upload) && upload.every(i => !i.uploading && i.thumbNailExists);\n };\n\n waitForThumbnails = () => {\n if (this.checkThumb) return;\n\n this.checkThumb = setInterval(async () => {\n const imagesToUpload = [];\n await Promise.all(\n this.state.imagesToUpload.map(image => {\n return new Promise(async resolve => {\n const newImage = { ...image };\n imagesToUpload.push(newImage);\n if (newImage.url && !newImage.thumbNailExists) {\n newImage.uploading = false;\n newImage.allowRetry = false;\n newImage.thumbNailExists = await imageExists(newImage.thumbNailUrl);\n resolve(newImage.thumbNailExists);\n }\n resolve(true);\n });\n }),\n );\n const thumbnailsExist = imagesToUpload.every(image => !image.url || image.thumbNailExists);\n if (thumbnailsExist) {\n clearInterval(this.checkThumb);\n this.checkThumb = null;\n this.setState({ imagesToUpload });\n }\n }, 2000);\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 showUploadMenu() {\n this.imageUploader.showUploadMenu();\n }\n\n onFocusInput = () => {\n this.setState({\n keyboardOpen: true,\n });\n if (this.props.keyboardOpen) {\n this.props.keyboardOpen();\n }\n };\n\n onBlurInput = () => {\n this.setState({\n keyboardOpen: false,\n });\n };\n\n onUploadStarted = (uploadUri, imageUri) => {\n const imagesToUpload = [\n ...this.state.imagesToUpload,\n {\n uploading: true,\n uploadProgress: '0%',\n uploadUri,\n imageUri,\n allowRetry: true,\n },\n ];\n this.setState({ imagesToUpload });\n };\n\n onUploadProgress = progress => {\n const imagesToUpload = [...this.state.imagesToUpload];\n imagesToUpload.map(img => {\n if (img.uploadUri === progress.uri) {\n img.uploadProgress = progress.percentage;\n img.uploading = true;\n img.allowRetry = true;\n }\n });\n this.setState({ imagesToUpload });\n };\n\n onUploadSuccess = async (uri, uploadUri) => {\n const imagesToUpload = [...this.state.imagesToUpload];\n imagesToUpload.map(img => {\n if (img.uploadUri === uploadUri && img.uploading) {\n img.url = uri.replace('/general/', '/general1400/');\n img.thumbNailExists = false;\n img.thumbNailUrl = getThumb300(img.url);\n img.allowRetry = true;\n }\n });\n this.setState({ imagesToUpload }, () => this.waitForThumbnails());\n };\n\n onUploadFailed = uploadUri => {\n const imagesToUpload = [...this.state.imagesToUpload];\n imagesToUpload.map(img => {\n if (img.uploadUri === uploadUri) {\n img.uploading = true; // Requried for retry\n img.uploadProgress = '';\n img.allowRetry = true;\n }\n });\n this.setState({ imagesToUpload });\n };\n\n onLibrarySelected = uri => {\n const imagesToUpload = [\n ...this.state.imagesToUpload,\n {\n uploading: false,\n allowRetry: false,\n url: get1400(uri),\n thumbNailExists: true,\n thumbNailUrl: getThumb300(uri),\n },\n ];\n this.setState({ imagesToUpload });\n };\n\n onPressImage = (images, selected) => {\n this.setState({\n imagePopupSource: images,\n imagePopupIndex: images.indexOf(selected),\n imagePopupOpen: true,\n });\n };\n\n closeGallery() {\n this.setState({\n imagePopupSource: [],\n imagePopupIndex: 0,\n imagePopupOpen: false,\n });\n }\n\n onRemoveImage = url => {\n const imagesToUpload = this.state.imagesToUpload.filter(image => image.url !== url);\n this.setState({ imagesToUpload });\n };\n\n toggleFullscreenVideo = url => {\n if (typeof url !== 'string') url = '';\n this.setState({ showFullscreenVideo: url.length > 0, currentVideoUrl: url });\n };\n\n sendMessages(messages) {\n if (this.hasImagesAttached()) {\n // Don't allow send if attached images aren't ready\n if (!this.hasImagesReady()) return;\n messages[0].image = this.state.imagesToUpload.map(image => image.url);\n }\n if (_.isEmpty(messages[0].text)) {\n messages[0].text = '';\n }\n if (!messages[0].text && !messages[0].image) return;\n\n this.props.onSend(messages);\n this.setState({ imagesToUpload: [] });\n }\n\n /**\n *\n * Render Functions\n */\n renderBubble(bubbleProps) {\n const wrapperStyle = {};\n if (!_.isEmpty(bubbleProps.currentMessage.text) && !_.isEmpty(bubbleProps.currentMessage.image)) {\n wrapperStyle.paddingTop = 8;\n wrapperStyle.paddingBottom = 16;\n wrapperStyle.minWidth = 142; // 110 image width + 16 padding either side\n }\n if (!_.isEmpty(bubbleProps.currentMessage.attachments)) {\n wrapperStyle.paddingTop = 8;\n wrapperStyle.paddingBottom = 16;\n wrapperStyle.paddingHorizontal = 16;\n }\n return (\n <Bubble\n {...bubbleProps}\n renderMessageImage={() => null}\n isCustomViewBottom={true}\n wrapperStyle={{\n left: {\n backgroundColor: LINEGREY,\n borderRadius: 25,\n ...wrapperStyle,\n },\n right: {\n backgroundColor: this.props.colourBrandingLight,\n borderRadius: 25,\n ...wrapperStyle,\n },\n }}\n containerToNextStyle={{\n left: {\n borderBottomLeftRadius: 5,\n },\n right: {\n borderBottomRightRadius: 5,\n },\n }}\n containerToPreviousStyle={{\n left: {\n borderTopLeftRadius: 5,\n },\n right: {\n borderTopRightRadius: 5,\n },\n }}\n />\n );\n }\n renderMessage(props) {\n return <PlussChatMessage key={props.RowId} {...props} />;\n }\n renderMessageText(messageTextProps) {\n return (\n <MessageText\n {...messageTextProps}\n textStyle={{\n left: {\n fontFamily: 'sf-regular',\n fontSize: 16,\n color: TEXT_DARKEST,\n marginTop: 10,\n marginBottom: 10,\n marginLeft: 15,\n marginRight: 15,\n },\n right: {\n fontFamily: 'sf-regular',\n fontSize: 16,\n color: this.props.colourBrandingMain,\n marginTop: 10,\n marginBottom: 10,\n marginLeft: 15,\n marginRight: 15,\n },\n }}\n linkStyle={{\n left: {\n color: TEXT_DARKEST,\n },\n right: {\n color: this.props.colourBrandingMain,\n },\n }}\n />\n );\n }\n renderTime() {\n return null;\n }\n renderDay(dayProps) {\n return (\n <PlussChatTime\n {...dayProps}\n textStyle={{\n fontFamily: 'sf-semibold',\n color: TEXT_DARK,\n fontSize: 12,\n }}\n />\n );\n }\n renderCustomView({ currentMessage, position }) {\n if (currentMessage.image) {\n const images = typeof currentMessage.image === 'string' ? [currentMessage.image] : currentMessage.image;\n const containerWidth = (() => {\n if (images.length === 0) return 0;\n if (images.length === 1) return IMAGE_SIZE_LARGE;\n if (images.length <= IMAGES_PER_ROW) return (IMAGE_SIZE_SMALL + IMAGE_MARGIN) * images.length;\n return (IMAGE_SIZE_SMALL + IMAGE_MARGIN) * IMAGES_PER_ROW;\n })();\n return (\n <View style={[styles.imagesContainer, { width: containerWidth, paddingVertical: currentMessage.text ? 0 : 20 }]}>\n {images.map(img => {\n const thumb = getThumb300(img);\n if (isVideo(img)) {\n return (\n <TouchableOpacity key={thumb} onPress={this.toggleFullscreenVideo.bind(this, img)}>\n <ImageBackground style={images.length > 1 ? styles.messageImageSmall : styles.messageImageLarge} source={{ uri: thumb }}>\n <View style={styles.imagePlayContainer}>\n <Icon name=\"play\" type=\"font-awesome\" iconStyle={styles.imageControlIcon} />\n </View>\n </ImageBackground>\n </TouchableOpacity>\n );\n }\n return (\n <TouchableOpacity key={thumb} onPress={() => this.onPressImage(images, img)}>\n <Image source={{ uri: thumb }} style={images.length > 1 ? styles.messageImageSmall : styles.messageImageLarge} />\n </TouchableOpacity>\n );\n })}\n </View>\n );\n }\n if (!_.isEmpty(currentMessage.attachments)) {\n console.log('rendering attachments');\n console.log(currentMessage.attachments);\n return (\n <View>\n {currentMessage.attachments.map((url, i) => {\n return (\n <Attachment\n onPress={() => {\n this.onOpenAttachment(url);\n }}\n key={i}\n title={getFileName(url)}\n />\n );\n })}\n </View>\n );\n }\n if (currentMessage.event) {\n return (\n <TouchableOpacity onPress={this.onPressEvent.bind(this, currentMessage.event)}>\n <View style={styles.eventContainer[position]}>\n <Image style={[styles.eventImage, styles.eventImageMargin[position]]} source={{ uri: currentMessage.event.Thumbnail }} />\n <View style={styles.eventInfo}>\n <Text\n numberOfLines={3}\n style={[styles.eventTitle, styles.eventInfoAlign[position], { color: this.props.colourBrandingMain }]}\n >\n {currentMessage.event.Title}\n </Text>\n <Text style={[styles.eventDate, styles.eventInfoAlign[position], { color: this.props.colourBrandingMain }]}>\n {moment\n .utc(currentMessage.event.StartTime)\n .local()\n .format('ddd D MMM')}\n </Text>\n </View>\n </View>\n </TouchableOpacity>\n );\n }\n if (currentMessage.attachment) {\n return (\n <TouchableOpacity onPress={this.onPressAttachment.bind(this, currentMessage.attachment)}>\n <View style={styles.eventContainer[position]}>\n <Image style={[styles.eventImage, styles.eventImageMargin[position]]} source={{ uri: currentMessage.attachment.Thumbnail }} />\n <View style={styles.eventInfo}>\n <Text\n numberOfLines={3}\n style={[styles.eventTitle, styles.eventInfoAlign[position], { color: this.props.colourBrandingMain }]}\n >\n {currentMessage.attachment.Title}\n </Text>\n {currentMessage.attachment.StartTime && (\n <Text style={[styles.eventDate, styles.eventInfoAlign[position], { color: this.props.colourBrandingMain }]}>\n {moment\n .utc(currentMessage.attachment.StartTime)\n .local()\n .format('ddd D MMM')}\n </Text>\n )}\n </View>\n </View>\n </TouchableOpacity>\n );\n }\n return null;\n }\n\n renderSend(props) {\n return (\n <View style={{ position: 'absolute', top: 0, right: 0 }}>\n {(!_.isEmpty(props.text) || this.hasImagesReady(props.imagesToUpload)) && (\n <Send\n {...props}\n alwaysShowSend={true}\n containerStyle={[\n styles.sendContainer,\n {\n width: this.MIN_COMPOSER_HEIGHT,\n height: this.MIN_COMPOSER_HEIGHT,\n },\n ]}\n >\n <Icon name={'paper-plane'} type=\"font-awesome\" iconStyle={[styles.send, { width: this.MIN_COMPOSER_HEIGHT }]} />\n </Send>\n )}\n <TouchableOpacity\n onPress={this.showUploadMenu.bind(this)}\n style={[\n styles.sendContainer,\n {\n right: _.isEmpty(props.text) && !this.hasImagesReady(props.imagesToUpload) ? 0 : 8 + this.MIN_COMPOSER_HEIGHT,\n width: this.MIN_COMPOSER_HEIGHT,\n height: this.MIN_COMPOSER_HEIGHT,\n },\n ]}\n >\n <Icon name={'picture-o'} type=\"font-awesome\" iconStyle={[styles.send, { width: this.MIN_COMPOSER_HEIGHT }]} />\n </TouchableOpacity>\n </View>\n );\n }\n\n renderAccessory(props) {\n return (\n <ScrollView horizontal style={styles.uploadImagesContainer}>\n {props.imagesToUpload.map(image => {\n if (image.uploading) {\n return (\n <ImageUploadProgress\n key={image.uploadUri}\n uploader={this.imageUploader}\n image={image}\n color={this.props.colourBrandingMain}\n style={{ width: IMAGE_PREVIEW_SIZE, marginRight: 10 }}\n progressTextStyle={{ fontSize: 10 }}\n />\n );\n }\n const isVideoUrl = isVideo(image.url);\n return (\n <View key={image.url} style={styles.accessoryImageContainer}>\n <ImageBackground\n style={styles.accessoryImage}\n imageStyle={styles.accessoryImageBorder}\n source={getImageSource(image.thumbNailExists ? image.thumbNailUrl : image.url)}\n >\n {isVideoUrl && (\n <View style={styles.imagePlayContainer}>\n <TouchableOpacity onPress={this.toggleFullscreenVideo.bind(this, image.url)}>\n <Icon name=\"play\" type=\"font-awesome\" iconStyle={styles.imageControlIcon} />\n </TouchableOpacity>\n </View>\n )}\n </ImageBackground>\n <TouchableOpacity\n style={styles.previewItemRemoveButton}\n onPress={() => this.onRemoveImage(image.url)}\n hitSlop={{ top: 8, right: 8, bottom: 8, left: 8 }}\n >\n <View style={[styles.previewItemRemoveContainer, { backgroundColor: this.props.colourBrandingMain }]}>\n <Icon name=\"times\" type=\"font-awesome\" iconStyle={styles.previewItemRemoveIcon} />\n </View>\n </TouchableOpacity>\n </View>\n );\n })}\n </ScrollView>\n );\n }\n\n renderInputToolbar(props) {\n if (!this.hasImagesAttached(props.imagesToUpload)) {\n return <InputToolbar {...props} containerStyle={styles.inputContainer} renderComposer={this.renderComposer.bind(this)} />;\n }\n return (\n <InputToolbar\n {...props}\n containerStyle={styles.inputContainer}\n renderComposer={this.renderComposer.bind(this)}\n renderAccessory={this.renderAccessory.bind(this)}\n accessoryStyle={styles.accessory}\n />\n );\n }\n renderFooter() {\n // if (this.state.keyboardOpen) {\n // return null;\n // }\n // fixes an issue where there's no gap between bottom message and reply container\n return <View style={{ height: 10 }} />;\n }\n renderLoading() {\n return (\n <View style={{ marginTop: 15, justifyContent: 'center', alignContent: 'center' }}>\n <Spinner size={'small'} color={this.props.colourBrandingMain} />\n </View>\n );\n }\n renderAvatar(props) {\n return (\n <View style={{ marginRight: 2 }}>\n <ProfilePic ProfilePic={props.currentMessage.user.avatar} Diameter={28} />\n </View>\n );\n }\n renderComposer(props) {\n //console.log(props.composerHeight);\n return (\n <View\n style={[\n styles.input,\n {\n //height: props.composerHeight + 10,\n //borderRadius: (this.MIN_COMPOSER_HEIGHT + 10) / 2,\n marginRight:\n _.isEmpty(props.text) && !this.hasImagesReady(props.imagesToUpload)\n ? 8 + this.MIN_COMPOSER_HEIGHT\n : 2 * (this.MIN_COMPOSER_HEIGHT + 8),\n justifyContent: 'center',\n },\n Platform.OS === 'ios' && {\n height: props.composerHeight + 10,\n },\n ]}\n >\n <Composer\n {...props}\n //composerHeight={props.composerHeight}\n placeholder=\"Type a message...\"\n textInputStyle={styles.inputText}\n textInputProps={{\n onFocus: this.onFocusInput.bind(this),\n onBlur: this.onBlurInput.bind(this),\n }}\n />\n </View>\n );\n }\n\n /***\n * Main Render\n */\n renderChat() {\n const { tabCount, noTab } = this.props;\n const iosBottomOffset = (tabCount === 1 || noTab ? -10 : 52) + getBottomSpace();\n const minInputToolbarHeight = this.MIN_COMPOSER_HEIGHT + 16 + (this.hasImagesAttached() ? IMAGE_PREVIEW_AREA_HEIGHT : 0);\n\n return (\n <GiftedChat\n alwaysShowSend={false}\n keyboardShouldPersistTaps={'never'}\n renderAvatarOnTop\n minInputToolbarHeight={minInputToolbarHeight}\n bottomOffset={Platform.OS === 'android' ? 0 : iosBottomOffset}\n onSend={this.sendMessages.bind(this)}\n messages={this.state.messages}\n user={this.state.currentUser}\n renderBubble={this.renderBubble.bind(this)}\n renderMessage={this.renderMessage.bind(this)}\n renderMessageText={this.renderMessageText.bind(this)}\n renderTime={this.renderTime.bind(this)}\n renderDay={this.renderDay.bind(this)}\n renderCustomView={this.renderCustomView.bind(this)}\n renderSend={this.renderSend.bind(this)}\n renderInputToolbar={this.renderInputToolbar.bind(this)}\n renderFooter={this.renderFooter.bind(this)}\n renderLoading={this.renderLoading.bind(this)}\n renderAvatar={this.renderAvatar.bind(this)}\n imagesToUpload={this.state.imagesToUpload}\n />\n );\n }\n\n renderImageUploader() {\n return (\n <ImageUploader\n ref={ref => (this.imageUploader = ref)}\n onUploadStarted={this.onUploadStarted}\n onUploadProgress={this.onUploadProgress}\n onUploadSuccess={this.onUploadSuccess}\n onUploadFailed={this.onUploadFailed}\n onLibrarySelected={this.onLibrarySelected}\n quality={0.8}\n allowsEditing={false}\n fileName={'imageInput'}\n popupTitle={'Add Image'}\n userId={this.props.user.uid}\n multiple\n allowVideo\n />\n );\n }\n\n renderImagePopup() {\n const { imagePopupOpen, imagePopupSource, imagePopupIndex } = this.state;\n return (\n <ImagePopup\n visible={imagePopupOpen}\n images={imagePopupSource}\n index={imagePopupIndex}\n onClose={this.closeGallery.bind(this)}\n ref=\"imagePopup\"\n />\n );\n }\n\n renderVideoPlayerPopup() {\n const { showFullscreenVideo, currentVideoUrl } = this.state;\n if (!currentVideoUrl) return;\n\n return <VideoPopup uri={currentVideoUrl} visible={showFullscreenVideo} onClose={this.toggleFullscreenVideo} />;\n }\n\n renderPDF() {\n if (_.isEmpty(this.state.selectedPDF)) {\n return null;\n }\n return (\n <PDFPopup source={this.state.selectedPDF} onClose={this.onCloseAttachment} title={getFileName(this.state.selectedPDF)} pdfCount={1} />\n );\n }\n\n render() {\n if (Platform.OS === 'android' && !this.props.noAndroidAvoid) {\n return (\n <KeyboardAvoidingView behavior={Platform.OS === 'ios' && 'padding'} style={styles.chatContainer}>\n {this.renderChat()}\n {this.renderImageUploader()}\n {this.renderImagePopup()}\n {this.renderVideoPlayerPopup()}\n {this.renderPDF()}\n </KeyboardAvoidingView>\n );\n }\n return (\n <View style={styles.chatContainer}>\n {this.renderChat()}\n {this.renderImageUploader()}\n {this.renderImagePopup()}\n {this.renderVideoPlayerPopup()}\n {this.renderPDF()}\n </View>\n );\n }\n}\n\nconst styles = {\n chatContainer: {\n flex: 1,\n justifyContent: 'center',\n },\n eventContainer: {\n left: {\n paddingTop: 5,\n paddingLeft: 15,\n paddingRight: 15,\n paddingBottom: 5,\n flexDirection: 'row',\n },\n right: {\n paddingTop: 5,\n paddingLeft: 15,\n paddingRight: 15,\n paddingBottom: 5,\n flexDirection: 'row-reverse',\n },\n },\n eventImage: {\n width: 80,\n height: 80,\n resizeMode: 'cover',\n borderRadius: 2,\n },\n eventImageMargin: {\n right: {\n marginLeft: 15,\n },\n left: {\n marginRight: 15,\n },\n },\n eventInfo: {\n minHeight: 80,\n width: 150,\n },\n eventTitle: {\n fontSize: 12,\n fontFamily: 'sf-bold',\n backgroundColor: 'rgba(255,255,255,0)',\n },\n eventInfoAlign: {\n left: {\n textAlign: 'left',\n },\n right: {\n textAlign: 'right',\n },\n },\n messageImageLarge: {\n width: IMAGE_SIZE_LARGE,\n height: IMAGE_SIZE_LARGE,\n borderRadius: 2,\n alignSelf: 'center',\n },\n messageImageSmall: {\n width: IMAGE_SIZE_SMALL,\n height: IMAGE_SIZE_SMALL,\n borderRadius: 2,\n alignSelf: 'center',\n marginRight: IMAGE_MARGIN,\n marginBottom: IMAGE_MARGIN,\n },\n eventDate: {\n fontSize: 12,\n fontFamily: 'sf-regular',\n backgroundColor: 'rgba(255,255,255,0)',\n },\n inputContainer: {\n backgroundColor: '#fff',\n paddingVertical: 8,\n paddingHorizontal: 8,\n },\n inputText: {\n color: TEXT_DARKEST,\n fontSize: 14,\n fontFamily: 'sf-medium',\n },\n input: {\n margin: 0,\n backgroundColor: BG_GREY,\n borderRadius: 5,\n flex: 1,\n },\n sendContainer: {\n position: 'absolute',\n top: 0,\n right: 0,\n height: 30,\n width: 30,\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: '#fff',\n },\n send: {\n fontSize: 15,\n color: TEXT_BLUEGREY,\n fontSize: 24,\n textAlign: 'center',\n },\n accessory: {\n height: IMAGE_PREVIEW_AREA_HEIGHT,\n borderTopWidth: 1,\n borderTopColor: LINEGREY,\n paddingTop: 8,\n marginTop: 8,\n },\n accessoryImageContainer: {\n paddingRight: 8,\n paddingTop: 8,\n marginRight: 5,\n },\n accessoryImage: {\n width: IMAGE_PREVIEW_SIZE,\n height: IMAGE_PREVIEW_SIZE,\n },\n accessoryImageBorder: {\n borderRadius: 2,\n },\n settingDropDownOpen: {\n height: 'auto',\n },\n imagesContainer: {\n marginLeft: 10,\n marginRight: 10,\n flexDirection: 'row',\n flexWrap: 'wrap',\n },\n uploadImagesContainer: {\n flexDirection: 'row',\n overflow: 'visible',\n },\n previewItemRemoveButton: {\n position: 'absolute',\n top: 0,\n right: 0,\n },\n previewItemRemoveContainer: {\n justifyContent: 'center',\n alignItems: 'center',\n borderRadius: 10,\n width: 20,\n height: 20,\n borderWidth: 2,\n borderColor: '#fff',\n },\n previewItemRemoveIcon: {\n fontSize: 10,\n color: '#fff',\n marginBottom: 1,\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};\n\nconst mapStateToProps = state => {\n return {\n user: state.user,\n colourBrandingMain: getMainBrandingColourFromState(state),\n colourBrandingLight: getLightBrandingColourFromState(state),\n tabCount: getEnabledTabsFromState(state).length,\n };\n};\n\nexport default connect(mapStateToProps, {})(PlussChat);\n"]}
|
|
1
|
+
{"version":3,"sources":["PlussChat.js"],"names":["React","Component","View","Image","ImageBackground","TouchableOpacity","Text","KeyboardAvoidingView","Platform","ScrollView","GiftedChat","Bubble","MessageText","Send","InputToolbar","Composer","connect","_","moment","Icon","getBottomSpace","Spinner","ProfilePic","PlussChatTime","PDFPopup","Attachment","PlussChatMessage","TextStyle","TEXT_DARK","LINEGREY","TEXT_DARKEST","getMainBrandingColourFromState","getLightBrandingColourFromState","BG_GREY","TEXT_BLUEGREY","getEnabledTabsFromState","get1400","getThumb300","imageExists","isVideo","getImageSource","getFileName","Config","Services","ImageUploader","ImageUploadProgress","ImagePopup","VideoPopup","IMAGE_SIZE_SMALL","IMAGE_SIZE_LARGE","IMAGES_PER_ROW","IMAGE_MARGIN","IMAGE_PREVIEW_AREA_HEIGHT","IMAGE_PREVIEW_SIZE","PlussChat","constructor","props","event","navigation","navigate","attachment","Type","place","imagesToUpload","isEmpty","state","upload","hasImagesAttached","every","i","uploading","thumbNailExists","checkThumb","setInterval","Promise","all","map","image","resolve","newImage","push","url","allowRetry","thumbNailUrl","thumbnailsExist","clearInterval","setState","a","selectedPDF","keyboardOpen","uploadUri","imageUri","uploadProgress","progress","img","uri","percentage","replace","waitForThumbnails","images","selected","imagePopupSource","imagePopupIndex","indexOf","imagePopupOpen","message","replyingTo","filter","showFullscreenVideo","length","currentVideoUrl","isSingleTab","tabCount","MIN_COMPOSER_HEIGHT","select","ios","android","currentUser","_id","user","uid","name","displayName","avatar","isUndefined","profilePic","env","tinyChatDefault","messages","UNSAFE_componentWillMount","updateMessages","UNSAFE_componentWillReceiveProps","nextProps","newState","onSend","showUploadMenu","imageUploader","closeGallery","sendMessages","hasImagesReady","text","renderBubble","bubbleProps","wrapperStyle","currentMessage","paddingTop","paddingBottom","minWidth","attachments","paddingHorizontal","left","backgroundColor","borderRadius","right","colourBrandingLight","borderBottomLeftRadius","borderBottomRightRadius","borderTopLeftRadius","borderTopRightRadius","renderMessage","RowId","colourBrandingMain","onReply","renderMessageText","messageTextProps","fontFamily","fontSize","color","marginTop","marginBottom","marginLeft","marginRight","renderTime","renderDay","dayProps","renderCustomView","position","containerWidth","styles","imagesContainer","width","paddingVertical","thumb","toggleFullscreenVideo","bind","messageImageSmall","messageImageLarge","imagePlayContainer","imageControlIcon","onPressImage","console","log","onOpenAttachment","onPressEvent","eventContainer","eventImage","eventImageMargin","Thumbnail","eventInfo","eventTitle","eventInfoAlign","Title","eventDate","utc","StartTime","local","format","onPressAttachment","renderSend","top","sendContainer","height","send","renderAccessory","uploadImagesContainer","isVideoUrl","accessoryImageContainer","accessoryImage","accessoryImageBorder","previewItemRemoveButton","onRemoveImage","bottom","previewItemRemoveContainer","previewItemRemoveIcon","renderInputToolbar","toolbar","inputContainer","renderComposer","accessory","renderFooter","renderLoading","justifyContent","alignContent","renderAvatar","composerContainer","replyingRemoveButton","replyingRemoveContainer","replyingRemoveIcon","input","OS","composerHeight","inputText","onFocus","onFocusInput","onBlur","onBlurInput","renderChat","noTab","iosBottomOffset","minInputToolbarHeight","renderImageUploader","ref","onUploadStarted","onUploadProgress","onUploadSuccess","onUploadFailed","onLibrarySelected","renderImagePopup","renderVideoPlayerPopup","renderPDF","onCloseAttachment","render","noAndroidAvoid","chatContainer","flex","paddingLeft","paddingRight","flexDirection","resizeMode","minHeight","textAlign","alignSelf","margin","alignItems","borderBottomWidth","borderBottomColor","borderWidth","borderColor","borderTopWidth","borderTopColor","settingDropDownOpen","flexWrap","overflow","textShadowColor","textShadowOffset","mapStateToProps"],"mappings":"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","sourcesContent":["import React, { Component } from 'react';\nimport { View, Image, ImageBackground, TouchableOpacity, Text, KeyboardAvoidingView, Platform, ScrollView } from 'react-native';\nimport { GiftedChat, Bubble, MessageText, Send, InputToolbar, Composer } from 'react-native-gifted-chat';\nimport { connect } from 'react-redux';\nimport _ from 'lodash';\nimport moment from 'moment';\nimport { Icon } from 'react-native-elements';\nimport { getBottomSpace } from 'react-native-iphone-x-helper';\nimport { Spinner } from './Spinner';\nimport { ProfilePic } from './ProfilePic';\nimport PlussChatTime from './PlussChatTime';\nimport { PDFPopup } from './PDFPopup';\nimport { Attachment } from './Attachment';\nimport PlussChatMessage from './PlussChatMessage';\nimport { TextStyle } from './TextStyle';\nimport {\n TEXT_DARK,\n LINEGREY,\n TEXT_DARKEST,\n getMainBrandingColourFromState,\n getLightBrandingColourFromState,\n BG_GREY,\n TEXT_BLUEGREY,\n} from '../colours';\nimport { getEnabledTabsFromState, get1400, getThumb300, imageExists, isVideo, getImageSource, getFileName } from '../helper';\nimport Config, { Services } from '../config';\nimport ImageUploader from './ImageUploader';\nimport ImageUploadProgress from './ImageUploadProgress';\nimport { ImagePopup } from './ImagePopup';\nimport { VideoPopup } from './VideoPopup';\n\nconst IMAGE_SIZE_SMALL = 55;\nconst IMAGE_SIZE_LARGE = 110;\nconst IMAGES_PER_ROW = 4;\nconst IMAGE_MARGIN = 2;\nconst IMAGE_PREVIEW_AREA_HEIGHT = 105;\nconst IMAGE_PREVIEW_SIZE = IMAGE_PREVIEW_AREA_HEIGHT - 25;\n\nclass PlussChat extends Component {\n constructor(props) {\n super(props);\n const isSingleTab = this.props.tabCount === 1 && getBottomSpace() > 0;\n this.MIN_COMPOSER_HEIGHT = Platform.select({\n ios: isSingleTab ? 42 : 33,\n android: 41,\n });\n\n this.state = {\n currentUser: {\n _id: this.props.user.uid,\n name: this.props.user.displayName,\n avatar:\n !_.isUndefined(this.props.user.profilePic) && !_.isEmpty(this.props.user.profilePic)\n ? this.props.user.profilePic\n : Config.env.tinyChatDefault,\n },\n\n messages: [],\n imagePopupSource: [],\n imagePopupIndex: 0,\n imagePopupOpen: false,\n imagesToUpload: [],\n showFullscreenVideo: false,\n currentVideoUrl: '',\n };\n this.checkThumb = null;\n }\n\n UNSAFE_componentWillMount() {\n this.updateMessages(this.props);\n }\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n this.updateMessages(nextProps);\n }\n\n updateMessages(props) {\n const newState = {};\n if (!_.isUndefined(props.messages)) {\n newState.messages = props.messages;\n }\n this.setState(newState);\n }\n\n /***\n *\n * Messaging functionality\n */\n onSend(messages = []) {\n // if (this.chatKey) {\n // this.sendMessage(messages[0]);\n // }\n }\n\n onPressEvent = event => {\n Services.navigation.navigate('eventDetail', { event });\n };\n onPressAttachment = attachment => {\n switch (attachment.Type) {\n case 'Event':\n Services.navigation.navigate('eventDetail', { event: attachment });\n break;\n case 'Place':\n Services.navigation.navigate('placeDetail', { place: attachment });\n break;\n default:\n return;\n }\n };\n\n hasImagesAttached = (imagesToUpload = null) => {\n return !_.isEmpty(imagesToUpload || this.state.imagesToUpload);\n };\n\n hasImagesReady = (imagesToUpload = null) => {\n const upload = imagesToUpload || this.state.imagesToUpload;\n return this.hasImagesAttached(upload) && upload.every(i => !i.uploading && i.thumbNailExists);\n };\n\n waitForThumbnails = () => {\n if (this.checkThumb) return;\n\n this.checkThumb = setInterval(async () => {\n const imagesToUpload = [];\n await Promise.all(\n this.state.imagesToUpload.map(image => {\n return new Promise(async resolve => {\n const newImage = { ...image };\n imagesToUpload.push(newImage);\n if (newImage.url && !newImage.thumbNailExists) {\n newImage.uploading = false;\n newImage.allowRetry = false;\n newImage.thumbNailExists = await imageExists(newImage.thumbNailUrl);\n resolve(newImage.thumbNailExists);\n }\n resolve(true);\n });\n }),\n );\n const thumbnailsExist = imagesToUpload.every(image => !image.url || image.thumbNailExists);\n if (thumbnailsExist) {\n clearInterval(this.checkThumb);\n this.checkThumb = null;\n this.setState({ imagesToUpload });\n }\n }, 2000);\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 showUploadMenu() {\n this.imageUploader.showUploadMenu();\n }\n\n onFocusInput = () => {\n this.setState({\n keyboardOpen: true,\n });\n if (this.props.keyboardOpen) {\n this.props.keyboardOpen();\n }\n };\n\n onBlurInput = () => {\n this.setState({\n keyboardOpen: false,\n });\n };\n\n onUploadStarted = (uploadUri, imageUri) => {\n const imagesToUpload = [\n ...this.state.imagesToUpload,\n {\n uploading: true,\n uploadProgress: '0%',\n uploadUri,\n imageUri,\n allowRetry: true,\n },\n ];\n this.setState({ imagesToUpload });\n };\n\n onUploadProgress = progress => {\n const imagesToUpload = [...this.state.imagesToUpload];\n imagesToUpload.map(img => {\n if (img.uploadUri === progress.uri) {\n img.uploadProgress = progress.percentage;\n img.uploading = true;\n img.allowRetry = true;\n }\n });\n this.setState({ imagesToUpload });\n };\n\n onUploadSuccess = async (uri, uploadUri) => {\n const imagesToUpload = [...this.state.imagesToUpload];\n imagesToUpload.map(img => {\n if (img.uploadUri === uploadUri && img.uploading) {\n img.url = uri.replace('/general/', '/general1400/');\n img.thumbNailExists = false;\n img.thumbNailUrl = getThumb300(img.url);\n img.allowRetry = true;\n }\n });\n this.setState({ imagesToUpload }, () => this.waitForThumbnails());\n };\n\n onUploadFailed = uploadUri => {\n const imagesToUpload = [...this.state.imagesToUpload];\n imagesToUpload.map(img => {\n if (img.uploadUri === uploadUri) {\n img.uploading = true; // Requried for retry\n img.uploadProgress = '';\n img.allowRetry = true;\n }\n });\n this.setState({ imagesToUpload });\n };\n\n onLibrarySelected = uri => {\n const imagesToUpload = [\n ...this.state.imagesToUpload,\n {\n uploading: false,\n allowRetry: false,\n url: get1400(uri),\n thumbNailExists: true,\n thumbNailUrl: getThumb300(uri),\n },\n ];\n this.setState({ imagesToUpload });\n };\n\n onPressImage = (images, selected) => {\n this.setState({\n imagePopupSource: images,\n imagePopupIndex: images.indexOf(selected),\n imagePopupOpen: true,\n });\n };\n\n onReply = message => {\n this.setState({\n replyingTo: message,\n });\n };\n\n closeGallery() {\n this.setState({\n imagePopupSource: [],\n imagePopupIndex: 0,\n imagePopupOpen: false,\n });\n }\n\n onRemoveImage = url => {\n const imagesToUpload = this.state.imagesToUpload.filter(image => image.url !== url);\n this.setState({ imagesToUpload });\n };\n\n toggleFullscreenVideo = url => {\n if (typeof url !== 'string') url = '';\n this.setState({ showFullscreenVideo: url.length > 0, currentVideoUrl: url });\n };\n\n sendMessages(messages) {\n if (this.hasImagesAttached()) {\n // Don't allow send if attached images aren't ready\n if (!this.hasImagesReady()) return;\n messages[0].image = this.state.imagesToUpload.map(image => image.url);\n }\n if (_.isEmpty(messages[0].text)) {\n messages[0].text = '';\n }\n if (!messages[0].text && !messages[0].image) return;\n\n if (this.state.replyingTo) {\n messages[0].replyingTo = this.state.replyingTo;\n }\n\n this.props.onSend(messages);\n this.setState({ imagesToUpload: [], replyingTo: null });\n }\n\n /**\n *\n * Render Functions\n */\n renderBubble(bubbleProps) {\n const wrapperStyle = {};\n if (!_.isEmpty(bubbleProps.currentMessage.text) && !_.isEmpty(bubbleProps.currentMessage.image)) {\n wrapperStyle.paddingTop = 8;\n wrapperStyle.paddingBottom = 16;\n wrapperStyle.minWidth = 142; // 110 image width + 16 padding either side\n }\n if (!_.isEmpty(bubbleProps.currentMessage.attachments)) {\n wrapperStyle.paddingTop = 8;\n wrapperStyle.paddingBottom = 16;\n wrapperStyle.paddingHorizontal = 16;\n }\n return (\n <Bubble\n {...bubbleProps}\n renderMessageImage={() => null}\n isCustomViewBottom={true}\n wrapperStyle={{\n left: {\n backgroundColor: LINEGREY,\n borderRadius: 25,\n ...wrapperStyle,\n },\n right: {\n backgroundColor: this.props.colourBrandingLight,\n borderRadius: 25,\n ...wrapperStyle,\n },\n }}\n containerToNextStyle={{\n left: {\n borderBottomLeftRadius: 5,\n },\n right: {\n borderBottomRightRadius: 5,\n },\n }}\n containerToPreviousStyle={{\n left: {\n borderTopLeftRadius: 5,\n },\n right: {\n borderTopRightRadius: 5,\n },\n }}\n />\n );\n }\n renderMessage(props) {\n return (\n <PlussChatMessage\n key={props.RowId}\n colourBrandingMain={this.props.colourBrandingMain}\n onPressReply={() => {\n this.onReply(props.currentMessage);\n }}\n {...props}\n />\n );\n }\n renderMessageText(messageTextProps) {\n return (\n <MessageText\n {...messageTextProps}\n textStyle={{\n left: {\n fontFamily: 'sf-regular',\n fontSize: 16,\n color: TEXT_DARKEST,\n marginTop: 10,\n marginBottom: 10,\n marginLeft: 15,\n marginRight: 15,\n },\n right: {\n fontFamily: 'sf-regular',\n fontSize: 16,\n color: this.props.colourBrandingMain,\n marginTop: 10,\n marginBottom: 10,\n marginLeft: 15,\n marginRight: 15,\n },\n }}\n linkStyle={{\n left: {\n color: TEXT_DARKEST,\n },\n right: {\n color: this.props.colourBrandingMain,\n },\n }}\n />\n );\n }\n renderTime() {\n return null;\n }\n renderDay(dayProps) {\n return (\n <PlussChatTime\n {...dayProps}\n textStyle={{\n fontFamily: 'sf-semibold',\n color: TEXT_DARK,\n fontSize: 12,\n }}\n />\n );\n }\n renderCustomView({ currentMessage, position }) {\n if (currentMessage.image) {\n const images = typeof currentMessage.image === 'string' ? [currentMessage.image] : currentMessage.image;\n const containerWidth = (() => {\n if (images.length === 0) return 0;\n if (images.length === 1) return IMAGE_SIZE_LARGE;\n if (images.length <= IMAGES_PER_ROW) return (IMAGE_SIZE_SMALL + IMAGE_MARGIN) * images.length;\n return (IMAGE_SIZE_SMALL + IMAGE_MARGIN) * IMAGES_PER_ROW;\n })();\n return (\n <View style={[styles.imagesContainer, { width: containerWidth, paddingVertical: currentMessage.text ? 0 : 20 }]}>\n {images.map(img => {\n const thumb = getThumb300(img);\n if (isVideo(img)) {\n return (\n <TouchableOpacity key={thumb} onPress={this.toggleFullscreenVideo.bind(this, img)}>\n <ImageBackground style={images.length > 1 ? styles.messageImageSmall : styles.messageImageLarge} source={{ uri: thumb }}>\n <View style={styles.imagePlayContainer}>\n <Icon name=\"play\" type=\"font-awesome\" iconStyle={styles.imageControlIcon} />\n </View>\n </ImageBackground>\n </TouchableOpacity>\n );\n }\n return (\n <TouchableOpacity key={thumb} onPress={() => this.onPressImage(images, img)}>\n <Image source={{ uri: thumb }} style={images.length > 1 ? styles.messageImageSmall : styles.messageImageLarge} />\n </TouchableOpacity>\n );\n })}\n </View>\n );\n }\n if (!_.isEmpty(currentMessage.attachments)) {\n console.log('rendering attachments');\n console.log(currentMessage.attachments);\n return (\n <View>\n {currentMessage.attachments.map((url, i) => {\n return (\n <Attachment\n onPress={() => {\n this.onOpenAttachment(url);\n }}\n key={i}\n title={getFileName(url)}\n />\n );\n })}\n </View>\n );\n }\n if (currentMessage.event) {\n return (\n <TouchableOpacity onPress={this.onPressEvent.bind(this, currentMessage.event)}>\n <View style={styles.eventContainer[position]}>\n <Image style={[styles.eventImage, styles.eventImageMargin[position]]} source={{ uri: currentMessage.event.Thumbnail }} />\n <View style={styles.eventInfo}>\n <Text\n numberOfLines={3}\n style={[styles.eventTitle, styles.eventInfoAlign[position], { color: this.props.colourBrandingMain }]}\n >\n {currentMessage.event.Title}\n </Text>\n <Text style={[styles.eventDate, styles.eventInfoAlign[position], { color: this.props.colourBrandingMain }]}>\n {moment\n .utc(currentMessage.event.StartTime)\n .local()\n .format('ddd D MMM')}\n </Text>\n </View>\n </View>\n </TouchableOpacity>\n );\n }\n if (currentMessage.attachment) {\n return (\n <TouchableOpacity onPress={this.onPressAttachment.bind(this, currentMessage.attachment)}>\n <View style={styles.eventContainer[position]}>\n <Image style={[styles.eventImage, styles.eventImageMargin[position]]} source={{ uri: currentMessage.attachment.Thumbnail }} />\n <View style={styles.eventInfo}>\n <Text\n numberOfLines={3}\n style={[styles.eventTitle, styles.eventInfoAlign[position], { color: this.props.colourBrandingMain }]}\n >\n {currentMessage.attachment.Title}\n </Text>\n {currentMessage.attachment.StartTime && (\n <Text style={[styles.eventDate, styles.eventInfoAlign[position], { color: this.props.colourBrandingMain }]}>\n {moment\n .utc(currentMessage.attachment.StartTime)\n .local()\n .format('ddd D MMM')}\n </Text>\n )}\n </View>\n </View>\n </TouchableOpacity>\n );\n }\n return null;\n }\n\n renderSend(props) {\n return (\n <View style={[{ position: 'absolute', top: 0, right: 0 }, !!this.state.replyingTo && { marginTop: 38 }]}>\n {(!_.isEmpty(props.text) || this.hasImagesReady(props.imagesToUpload)) && (\n <Send\n {...props}\n alwaysShowSend={true}\n containerStyle={[\n styles.sendContainer,\n {\n width: this.MIN_COMPOSER_HEIGHT,\n height: this.MIN_COMPOSER_HEIGHT,\n },\n ]}\n >\n <Icon name={'paper-plane'} type=\"font-awesome\" iconStyle={[styles.send, { width: this.MIN_COMPOSER_HEIGHT }]} />\n </Send>\n )}\n <TouchableOpacity\n onPress={this.showUploadMenu.bind(this)}\n style={[\n styles.sendContainer,\n {\n right: _.isEmpty(props.text) && !this.hasImagesReady(props.imagesToUpload) ? 0 : 8 + this.MIN_COMPOSER_HEIGHT,\n width: this.MIN_COMPOSER_HEIGHT,\n height: this.MIN_COMPOSER_HEIGHT,\n },\n ]}\n >\n <Icon name={'picture-o'} type=\"font-awesome\" iconStyle={[styles.send, { width: this.MIN_COMPOSER_HEIGHT }]} />\n </TouchableOpacity>\n </View>\n );\n }\n\n renderAccessory(props) {\n return (\n <ScrollView horizontal style={styles.uploadImagesContainer}>\n {props.imagesToUpload.map(image => {\n if (image.uploading) {\n return (\n <ImageUploadProgress\n key={image.uploadUri}\n uploader={this.imageUploader}\n image={image}\n color={this.props.colourBrandingMain}\n style={{ width: IMAGE_PREVIEW_SIZE, marginRight: 10 }}\n progressTextStyle={{ fontSize: 10 }}\n />\n );\n }\n const isVideoUrl = isVideo(image.url);\n return (\n <View key={image.url} style={styles.accessoryImageContainer}>\n <ImageBackground\n style={styles.accessoryImage}\n imageStyle={styles.accessoryImageBorder}\n source={getImageSource(image.thumbNailExists ? image.thumbNailUrl : image.url)}\n >\n {isVideoUrl && (\n <View style={styles.imagePlayContainer}>\n <TouchableOpacity onPress={this.toggleFullscreenVideo.bind(this, image.url)}>\n <Icon name=\"play\" type=\"font-awesome\" iconStyle={styles.imageControlIcon} />\n </TouchableOpacity>\n </View>\n )}\n </ImageBackground>\n <TouchableOpacity\n style={styles.previewItemRemoveButton}\n onPress={() => this.onRemoveImage(image.url)}\n hitSlop={{ top: 8, right: 8, bottom: 8, left: 8 }}\n >\n <View style={[styles.previewItemRemoveContainer, { backgroundColor: this.props.colourBrandingMain }]}>\n <Icon name=\"times\" type=\"font-awesome\" iconStyle={styles.previewItemRemoveIcon} />\n </View>\n </TouchableOpacity>\n </View>\n );\n })}\n </ScrollView>\n );\n }\n\n renderInputToolbar(props) {\n let toolbar;\n if (!this.hasImagesAttached(props.imagesToUpload)) {\n toolbar = <InputToolbar {...props} containerStyle={styles.inputContainer} renderComposer={this.renderComposer.bind(this)} />;\n } else {\n toolbar = (\n <InputToolbar\n {...props}\n containerStyle={styles.inputContainer}\n renderComposer={this.renderComposer.bind(this)}\n renderAccessory={this.renderAccessory.bind(this)}\n accessoryStyle={styles.accessory}\n />\n );\n }\n return toolbar;\n }\n renderFooter() {\n // if (this.state.keyboardOpen) {\n // return null;\n // }\n // fixes an issue where there's no gap between bottom message and reply container\n return <View style={{ height: 10 }} />;\n }\n renderLoading() {\n return (\n <View style={{ marginTop: 15, justifyContent: 'center', alignContent: 'center' }}>\n <Spinner size={'small'} color={this.props.colourBrandingMain} />\n </View>\n );\n }\n renderAvatar(props) {\n return (\n <View style={{ marginRight: 2 }}>\n <ProfilePic ProfilePic={props.currentMessage.user.avatar} Diameter={28} />\n </View>\n );\n }\n renderComposer(props) {\n //console.log(props.composerHeight);\n return (\n <View style={styles.composerContainer}>\n {this.state.replyingTo && (\n <View style={styles.replyingTo}>\n <TextStyle type=\"body\">\n Replying to {_.isEmpty(this.state.replyingTo?.user?.name) ? 'message' : this.state.replyingTo?.user?.name}\n </TextStyle>\n <TouchableOpacity\n style={styles.replyingRemoveButton}\n onPress={() => this.onReply(null)}\n hitSlop={{ top: 8, right: 8, bottom: 8, left: 8 }}\n >\n <View style={[styles.replyingRemoveContainer, { backgroundColor: this.props.colourBrandingMain }]}>\n <Icon name=\"times\" type=\"font-awesome\" iconStyle={styles.replyingRemoveIcon} />\n </View>\n </TouchableOpacity>\n </View>\n )}\n <View\n style={[\n styles.input,\n {\n //height: props.composerHeight + 10,\n //borderRadius: (this.MIN_COMPOSER_HEIGHT + 10) / 2,\n marginRight:\n _.isEmpty(props.text) && !this.hasImagesReady(props.imagesToUpload)\n ? 8 + this.MIN_COMPOSER_HEIGHT\n : 2 * (this.MIN_COMPOSER_HEIGHT + 8),\n justifyContent: 'center',\n },\n Platform.OS === 'ios' && {\n height: props.composerHeight + 10,\n },\n ]}\n >\n <Composer\n {...props}\n //composerHeight={props.composerHeight}\n placeholder=\"Type a message...\"\n textInputStyle={styles.inputText}\n textInputProps={{\n onFocus: this.onFocusInput.bind(this),\n onBlur: this.onBlurInput.bind(this),\n }}\n />\n </View>\n </View>\n );\n }\n\n /***\n * Main Render\n */\n renderChat() {\n const { tabCount, noTab } = this.props;\n const iosBottomOffset = (tabCount === 1 || noTab ? -10 : 52) + getBottomSpace();\n const minInputToolbarHeight = this.MIN_COMPOSER_HEIGHT + 16 + (this.hasImagesAttached() ? IMAGE_PREVIEW_AREA_HEIGHT : 0);\n\n return (\n <GiftedChat\n alwaysShowSend={false}\n keyboardShouldPersistTaps={'never'}\n renderAvatarOnTop\n minInputToolbarHeight={minInputToolbarHeight}\n bottomOffset={Platform.OS === 'android' ? 0 : iosBottomOffset}\n onSend={this.sendMessages.bind(this)}\n messages={this.state.messages}\n user={this.state.currentUser}\n renderBubble={this.renderBubble.bind(this)}\n renderMessage={this.renderMessage.bind(this)}\n renderMessageText={this.renderMessageText.bind(this)}\n renderTime={this.renderTime.bind(this)}\n renderDay={this.renderDay.bind(this)}\n renderCustomView={this.renderCustomView.bind(this)}\n renderSend={this.renderSend.bind(this)}\n renderInputToolbar={this.renderInputToolbar.bind(this)}\n renderFooter={this.renderFooter.bind(this)}\n renderLoading={this.renderLoading.bind(this)}\n renderAvatar={this.renderAvatar.bind(this)}\n imagesToUpload={this.state.imagesToUpload}\n />\n );\n }\n\n renderImageUploader() {\n return (\n <ImageUploader\n ref={ref => (this.imageUploader = ref)}\n onUploadStarted={this.onUploadStarted}\n onUploadProgress={this.onUploadProgress}\n onUploadSuccess={this.onUploadSuccess}\n onUploadFailed={this.onUploadFailed}\n onLibrarySelected={this.onLibrarySelected}\n quality={0.8}\n allowsEditing={false}\n fileName={'imageInput'}\n popupTitle={'Add Image'}\n userId={this.props.user.uid}\n multiple\n allowVideo\n />\n );\n }\n\n renderImagePopup() {\n const { imagePopupOpen, imagePopupSource, imagePopupIndex } = this.state;\n return (\n <ImagePopup\n visible={imagePopupOpen}\n images={imagePopupSource}\n index={imagePopupIndex}\n onClose={this.closeGallery.bind(this)}\n ref=\"imagePopup\"\n />\n );\n }\n\n renderVideoPlayerPopup() {\n const { showFullscreenVideo, currentVideoUrl } = this.state;\n if (!currentVideoUrl) return;\n\n return <VideoPopup uri={currentVideoUrl} visible={showFullscreenVideo} onClose={this.toggleFullscreenVideo} />;\n }\n\n renderPDF() {\n if (_.isEmpty(this.state.selectedPDF)) {\n return null;\n }\n return (\n <PDFPopup source={this.state.selectedPDF} onClose={this.onCloseAttachment} title={getFileName(this.state.selectedPDF)} pdfCount={1} />\n );\n }\n\n render() {\n if (Platform.OS === 'android' && !this.props.noAndroidAvoid) {\n return (\n <KeyboardAvoidingView behavior={Platform.OS === 'ios' && 'padding'} style={styles.chatContainer}>\n {this.renderChat()}\n {this.renderImageUploader()}\n {this.renderImagePopup()}\n {this.renderVideoPlayerPopup()}\n {this.renderPDF()}\n </KeyboardAvoidingView>\n );\n }\n return (\n <View style={styles.chatContainer}>\n {this.renderChat()}\n {this.renderImageUploader()}\n {this.renderImagePopup()}\n {this.renderVideoPlayerPopup()}\n {this.renderPDF()}\n </View>\n );\n }\n}\n\nconst styles = {\n chatContainer: {\n flex: 1,\n justifyContent: 'center',\n },\n eventContainer: {\n left: {\n paddingTop: 5,\n paddingLeft: 15,\n paddingRight: 15,\n paddingBottom: 5,\n flexDirection: 'row',\n },\n right: {\n paddingTop: 5,\n paddingLeft: 15,\n paddingRight: 15,\n paddingBottom: 5,\n flexDirection: 'row-reverse',\n },\n },\n eventImage: {\n width: 80,\n height: 80,\n resizeMode: 'cover',\n borderRadius: 2,\n },\n eventImageMargin: {\n right: {\n marginLeft: 15,\n },\n left: {\n marginRight: 15,\n },\n },\n eventInfo: {\n minHeight: 80,\n width: 150,\n },\n eventTitle: {\n fontSize: 12,\n fontFamily: 'sf-bold',\n backgroundColor: 'rgba(255,255,255,0)',\n },\n eventInfoAlign: {\n left: {\n textAlign: 'left',\n },\n right: {\n textAlign: 'right',\n },\n },\n messageImageLarge: {\n width: IMAGE_SIZE_LARGE,\n height: IMAGE_SIZE_LARGE,\n borderRadius: 2,\n alignSelf: 'center',\n },\n messageImageSmall: {\n width: IMAGE_SIZE_SMALL,\n height: IMAGE_SIZE_SMALL,\n borderRadius: 2,\n alignSelf: 'center',\n marginRight: IMAGE_MARGIN,\n marginBottom: IMAGE_MARGIN,\n },\n eventDate: {\n fontSize: 12,\n fontFamily: 'sf-regular',\n backgroundColor: 'rgba(255,255,255,0)',\n },\n inputContainer: {\n backgroundColor: '#fff',\n paddingVertical: 8,\n paddingHorizontal: 8,\n },\n inputText: {\n color: TEXT_DARKEST,\n fontSize: 14,\n fontFamily: 'sf-medium',\n },\n input: {\n margin: 0,\n backgroundColor: BG_GREY,\n borderRadius: 5,\n flex: 1,\n },\n composerContainer: {\n flex: 1,\n },\n replyingTo: {\n minHeight: 30,\n flexDirection: 'row',\n alignItems: 'center',\n borderBottomWidth: 1,\n borderBottomColor: LINEGREY,\n marginBottom: 8,\n },\n replyingRemoveButton: {\n marginLeft: 10,\n },\n replyingRemoveContainer: {\n justifyContent: 'center',\n alignItems: 'center',\n borderRadius: 10,\n width: 20,\n height: 20,\n borderWidth: 2,\n borderColor: '#fff',\n },\n replyingRemoveIcon: {\n fontSize: 10,\n color: '#fff',\n marginBottom: 1,\n },\n sendContainer: {\n position: 'absolute',\n top: 0,\n right: 0,\n height: 30,\n width: 30,\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: '#fff',\n },\n send: {\n fontSize: 15,\n color: TEXT_BLUEGREY,\n fontSize: 24,\n textAlign: 'center',\n },\n accessory: {\n height: IMAGE_PREVIEW_AREA_HEIGHT,\n borderTopWidth: 1,\n borderTopColor: LINEGREY,\n paddingTop: 8,\n marginTop: 8,\n },\n accessoryImageContainer: {\n paddingRight: 8,\n paddingTop: 8,\n marginRight: 5,\n },\n accessoryImage: {\n width: IMAGE_PREVIEW_SIZE,\n height: IMAGE_PREVIEW_SIZE,\n },\n accessoryImageBorder: {\n borderRadius: 2,\n },\n settingDropDownOpen: {\n height: 'auto',\n },\n imagesContainer: {\n marginLeft: 10,\n marginRight: 10,\n flexDirection: 'row',\n flexWrap: 'wrap',\n },\n uploadImagesContainer: {\n flexDirection: 'row',\n overflow: 'visible',\n },\n previewItemRemoveButton: {\n position: 'absolute',\n top: 0,\n right: 0,\n },\n previewItemRemoveContainer: {\n justifyContent: 'center',\n alignItems: 'center',\n borderRadius: 10,\n width: 20,\n height: 20,\n borderWidth: 2,\n borderColor: '#fff',\n },\n previewItemRemoveIcon: {\n fontSize: 10,\n color: '#fff',\n marginBottom: 1,\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};\n\nconst mapStateToProps = state => {\n return {\n user: state.user,\n colourBrandingMain: getMainBrandingColourFromState(state),\n colourBrandingLight: getLightBrandingColourFromState(state),\n tabCount: getEnabledTabsFromState(state).length,\n };\n};\n\nexport default connect(mapStateToProps, {})(PlussChat);\n"]}
|
|
@@ -7,11 +7,12 @@ function _extends() { _extends = Object.assign || function (target) { for (var i
|
|
|
7
7
|
// https://github.com/FaridSafi/react-native-gifted-chat/blob/master/src/Message.js
|
|
8
8
|
import PropTypes from 'prop-types';
|
|
9
9
|
import React from 'react';
|
|
10
|
-
import { View, ViewPropTypes, StyleSheet, Text } from 'react-native';
|
|
10
|
+
import { View, ViewPropTypes, StyleSheet, Text, TouchableOpacity } from 'react-native';
|
|
11
11
|
import _ from 'lodash';
|
|
12
12
|
import { Avatar, Bubble, SystemMessage, Day, utils } from 'react-native-gifted-chat';
|
|
13
|
-
import { TEXT_LIGHT } from '../colours';
|
|
13
|
+
import { TEXT_MID, TEXT_LIGHT } from '../colours';
|
|
14
14
|
import { getFirstName } from '../helper';
|
|
15
|
+
import { TextStyle } from './TextStyle';
|
|
15
16
|
const isSameUser = utils.isSameUser;
|
|
16
17
|
const isSameDay = utils.isSameDay;
|
|
17
18
|
export default class PlussChatMessage extends React.Component {
|
|
@@ -116,9 +117,43 @@ export default class PlussChatMessage extends React.Component {
|
|
|
116
117
|
return null;
|
|
117
118
|
}
|
|
118
119
|
|
|
120
|
+
let nameText = this.isCurrentUser() ? 'Me' : getFirstName(currentMessage.user.name);
|
|
121
|
+
|
|
122
|
+
if (this.props.currentMessage && this.props.currentMessage.replyingTo && this.props.currentMessage.replyingTo.user && !_.isEmpty(this.props.currentMessage.replyingTo.user.name)) {
|
|
123
|
+
nameText = `${nameText} replying to ${this.props.currentMessage.replyingTo.user.name}`;
|
|
124
|
+
}
|
|
125
|
+
|
|
119
126
|
return /*#__PURE__*/React.createElement(Text, {
|
|
120
127
|
style: [styles[this.props.position].name]
|
|
121
|
-
},
|
|
128
|
+
}, nameText);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
renderReply() {
|
|
132
|
+
if (!this.props.currentMessage || !this.props.currentMessage.replyingTo) {
|
|
133
|
+
return null;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
return /*#__PURE__*/React.createElement(View, {
|
|
137
|
+
style: styles[this.props.position].replyBubble
|
|
138
|
+
}, /*#__PURE__*/React.createElement(View, {
|
|
139
|
+
style: [styles[this.props.position].replyBubbleInner, {
|
|
140
|
+
backgroundColor: this.props.colourBrandingMain
|
|
141
|
+
}]
|
|
142
|
+
}, /*#__PURE__*/React.createElement(Text, {
|
|
143
|
+
style: styles[this.props.position].replyBubbleText
|
|
144
|
+
}, (this.props.currentMessage.replyingTo.text || '').substr(0, 100))));
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
renderReplyButton() {
|
|
148
|
+
return /*#__PURE__*/React.createElement(TouchableOpacity, {
|
|
149
|
+
style: styles[this.props.position].replyContainer,
|
|
150
|
+
onPress: this.props.onPressReply
|
|
151
|
+
}, /*#__PURE__*/React.createElement(TextStyle, {
|
|
152
|
+
type: "button",
|
|
153
|
+
style: {
|
|
154
|
+
color: this.props.colourBrandingMain
|
|
155
|
+
}
|
|
156
|
+
}, "Reply"));
|
|
122
157
|
}
|
|
123
158
|
|
|
124
159
|
render() {
|
|
@@ -130,7 +165,7 @@ export default class PlussChatMessage extends React.Component {
|
|
|
130
165
|
}, !this.props.inverted && {
|
|
131
166
|
marginBottom: 2
|
|
132
167
|
}, this.props.containerStyle[this.props.position]]
|
|
133
|
-
}, this.props.position === 'left' ? this.renderAvatar() : null, this.renderBubble(), this.props.position === 'right' ? this.renderAvatar() : null)));
|
|
168
|
+
}, this.props.position === 'left' ? this.renderAvatar() : null, /*#__PURE__*/React.createElement(View, null, this.renderReply(), this.renderBubble(), this.renderReplyButton()), this.props.position === 'right' ? this.renderAvatar() : null)));
|
|
134
169
|
}
|
|
135
170
|
|
|
136
171
|
}
|
|
@@ -150,6 +185,28 @@ const styles = {
|
|
|
150
185
|
textAlign: 'left',
|
|
151
186
|
marginLeft: 50,
|
|
152
187
|
marginBottom: 5
|
|
188
|
+
},
|
|
189
|
+
replyBubble: {
|
|
190
|
+
flexDirection: 'row',
|
|
191
|
+
alignItems: 'flex-end',
|
|
192
|
+
justifyContent: 'flex-start',
|
|
193
|
+
paddingLeft: 20
|
|
194
|
+
},
|
|
195
|
+
replyBubbleInner: {
|
|
196
|
+
padding: 4,
|
|
197
|
+
paddingBottom: 16,
|
|
198
|
+
marginBottom: -12,
|
|
199
|
+
borderRadius: 4,
|
|
200
|
+
opacity: 0.5
|
|
201
|
+
},
|
|
202
|
+
replyBubbleText: {
|
|
203
|
+
fontFamily: 'sf-regular',
|
|
204
|
+
color: TEXT_MID,
|
|
205
|
+
fontSize: 13,
|
|
206
|
+
textAlign: 'left'
|
|
207
|
+
},
|
|
208
|
+
replyContainer: {
|
|
209
|
+
paddingLeft: 20
|
|
153
210
|
}
|
|
154
211
|
}),
|
|
155
212
|
right: StyleSheet.create({
|
|
@@ -167,6 +224,29 @@ const styles = {
|
|
|
167
224
|
textAlign: 'right',
|
|
168
225
|
marginRight: 10,
|
|
169
226
|
marginBottom: 5
|
|
227
|
+
},
|
|
228
|
+
replyBubble: {
|
|
229
|
+
flexDirection: 'row',
|
|
230
|
+
alignItems: 'flex-end',
|
|
231
|
+
justifyContent: 'flex-end',
|
|
232
|
+
paddingRight: 10
|
|
233
|
+
},
|
|
234
|
+
replyBubbleInner: {
|
|
235
|
+
padding: 4,
|
|
236
|
+
paddingBottom: 16,
|
|
237
|
+
marginBottom: -12,
|
|
238
|
+
borderRadius: 4,
|
|
239
|
+
opacity: 0.5
|
|
240
|
+
},
|
|
241
|
+
replyBubbleText: {
|
|
242
|
+
fontFamily: 'sf-regular',
|
|
243
|
+
color: TEXT_MID,
|
|
244
|
+
fontSize: 13,
|
|
245
|
+
textAlign: 'right'
|
|
246
|
+
},
|
|
247
|
+
replyContainer: {
|
|
248
|
+
alignSelf: 'flex-end',
|
|
249
|
+
paddingRight: 10
|
|
170
250
|
}
|
|
171
251
|
})
|
|
172
252
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["PlussChatMessage.js"],"names":["PropTypes","React","View","ViewPropTypes","StyleSheet","Text","_","Avatar","Bubble","SystemMessage","Day","utils","TEXT_LIGHT","getFirstName","isSameUser","isSameDay","PlussChatMessage","Component","getInnerComponentProps","containerStyle","props","isCurrentUser","user","_id","currentMessage","renderDay","createdAt","dayProps","renderBubble","bubbleProps","renderSystemMessage","systemMessageProps","renderAvatar","showUserAvatar","avatarProps","avatar","isEmpty","left","width","height","borderRadius","right","marginRight","marginLeft","renderName","nameProps","name","styles","position","render","sameUserAsLast","previousMessage","sameUser","nextMessage","system","container","marginBottom","inverted","create","flexDirection","alignItems","justifyContent","fontFamily","color","fontSize","textAlign","defaultProps","undefined","propTypes","func","bool","oneOf","object","shape","style"],"mappings":"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","sourcesContent":["/* eslint no-use-before-define: [\"error\", { \"variables\": false }], react-native/no-inline-styles: 0 */\n\n// NOTE:\n// This is a modified version of react-native-gifted-chat Message component\n\n// Original source:\n// https://github.com/FaridSafi/react-native-gifted-chat/blob/master/src/Message.js\n\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport { View, ViewPropTypes, StyleSheet, Text } from 'react-native';\nimport _ from 'lodash';\n\nimport { Avatar, Bubble, SystemMessage, Day, utils } from 'react-native-gifted-chat';\nimport { TEXT_LIGHT } from '../colours';\nimport { getFirstName } from '../helper';\n\nconst isSameUser = utils.isSameUser;\nconst isSameDay = utils.isSameDay;\n\nexport default class PlussChatMessage extends React.Component {\n getInnerComponentProps() {\n const { containerStyle, ...props } = this.props;\n return {\n ...props,\n isSameUser,\n isSameDay,\n };\n }\n\n isCurrentUser() {\n if (this.props.user._id === this.props.currentMessage.user._id) {\n return true;\n }\n return false;\n }\n\n renderDay() {\n if (this.props.currentMessage.createdAt) {\n const dayProps = this.getInnerComponentProps();\n if (this.props.renderDay) {\n return this.props.renderDay(dayProps);\n }\n return <Day {...dayProps} />;\n }\n return null;\n }\n\n renderBubble() {\n const bubbleProps = this.getInnerComponentProps();\n if (this.props.renderBubble) {\n return this.props.renderBubble(bubbleProps);\n }\n return <Bubble {...bubbleProps} />;\n }\n\n renderSystemMessage() {\n const systemMessageProps = this.getInnerComponentProps();\n if (this.props.renderSystemMessage) {\n return this.props.renderSystemMessage(systemMessageProps);\n }\n return <SystemMessage {...systemMessageProps} />;\n }\n\n renderAvatar() {\n if (this.isCurrentUser() && !this.props.showUserAvatar) {\n return null;\n }\n const avatarProps = this.getInnerComponentProps();\n const { currentMessage } = avatarProps;\n if (currentMessage.user.avatar === null || _.isEmpty(currentMessage.user.avatar)) {\n return null;\n }\n return (\n <Avatar\n {...avatarProps}\n imageStyle={{\n left: {\n width: 30,\n height: 30,\n borderRadius: 15,\n },\n right: {\n width: 30,\n height: 30,\n borderRadius: 15,\n },\n }}\n containerStyle={{\n left: {\n marginRight: 10,\n },\n right: {\n marginLeft: 10,\n },\n }}\n />\n );\n }\n\n renderName() {\n const nameProps = this.getInnerComponentProps();\n const { currentMessage } = nameProps;\n if (currentMessage.user.name === null) {\n return null;\n }\n return <Text style={[styles[this.props.position].name]}>{this.isCurrentUser() ? 'Me' : getFirstName(currentMessage.user.name)}</Text>;\n }\n\n render() {\n const sameUserAsLast = isSameUser(this.props.currentMessage, this.props.previousMessage);\n const sameUser = isSameUser(this.props.currentMessage, this.props.nextMessage);\n return (\n <View>\n {this.renderDay()}\n {this.props.currentMessage.system ? (\n this.renderSystemMessage()\n ) : (\n <View>\n {sameUserAsLast ? null : this.renderName()}\n <View\n style={[\n styles[this.props.position].container,\n { marginBottom: sameUser ? 2 : 10 },\n !this.props.inverted && { marginBottom: 2 },\n this.props.containerStyle[this.props.position],\n ]}\n >\n {this.props.position === 'left' ? this.renderAvatar() : null}\n {this.renderBubble()}\n {this.props.position === 'right' ? this.renderAvatar() : null}\n </View>\n </View>\n )}\n </View>\n );\n }\n}\n\nconst styles = {\n left: StyleSheet.create({\n container: {\n flexDirection: 'row',\n alignItems: 'flex-end',\n justifyContent: 'flex-start',\n marginLeft: 10,\n marginRight: 0,\n },\n name: {\n fontFamily: 'sf-regular',\n color: TEXT_LIGHT,\n fontSize: 14,\n textAlign: 'left',\n marginLeft: 50,\n marginBottom: 5,\n },\n }),\n right: StyleSheet.create({\n container: {\n flexDirection: 'row',\n alignItems: 'flex-end',\n justifyContent: 'flex-end',\n marginLeft: 0,\n marginRight: 10,\n },\n name: {\n fontFamily: 'sf-regular',\n color: TEXT_LIGHT,\n fontSize: 14,\n textAlign: 'right',\n marginRight: 10,\n marginBottom: 5,\n },\n }),\n};\n\nPlussChatMessage.defaultProps = {\n renderAvatar: undefined,\n renderBubble: null,\n renderDay: null,\n renderSystemMessage: null,\n position: 'left',\n currentMessage: {},\n nextMessage: {},\n previousMessage: {},\n user: {},\n containerStyle: {},\n showUserAvatar: true,\n inverted: true,\n};\n\nPlussChatMessage.propTypes = {\n renderAvatar: PropTypes.func,\n showUserAvatar: PropTypes.bool,\n renderBubble: PropTypes.func,\n renderDay: PropTypes.func,\n renderSystemMessage: PropTypes.func,\n position: PropTypes.oneOf(['left', 'right']),\n currentMessage: PropTypes.object,\n nextMessage: PropTypes.object,\n previousMessage: PropTypes.object,\n user: PropTypes.object,\n inverted: PropTypes.bool,\n containerStyle: PropTypes.shape({\n left: ViewPropTypes.style,\n right: ViewPropTypes.style,\n }),\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["PlussChatMessage.js"],"names":["PropTypes","React","View","ViewPropTypes","StyleSheet","Text","TouchableOpacity","_","Avatar","Bubble","SystemMessage","Day","utils","TEXT_MID","TEXT_LIGHT","getFirstName","TextStyle","isSameUser","isSameDay","PlussChatMessage","Component","getInnerComponentProps","containerStyle","props","isCurrentUser","user","_id","currentMessage","renderDay","createdAt","dayProps","renderBubble","bubbleProps","renderSystemMessage","systemMessageProps","renderAvatar","showUserAvatar","avatarProps","avatar","isEmpty","left","width","height","borderRadius","right","marginRight","marginLeft","renderName","nameProps","name","nameText","replyingTo","styles","position","renderReply","replyBubble","replyBubbleInner","backgroundColor","colourBrandingMain","replyBubbleText","text","substr","renderReplyButton","replyContainer","onPressReply","color","render","sameUserAsLast","previousMessage","sameUser","nextMessage","system","container","marginBottom","inverted","create","flexDirection","alignItems","justifyContent","fontFamily","fontSize","textAlign","paddingLeft","padding","paddingBottom","opacity","paddingRight","alignSelf","defaultProps","undefined","propTypes","func","bool","oneOf","object","shape","style"],"mappings":"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","sourcesContent":["/* eslint no-use-before-define: [\"error\", { \"variables\": false }], react-native/no-inline-styles: 0 */\n\n// NOTE:\n// This is a modified version of react-native-gifted-chat Message component\n\n// Original source:\n// https://github.com/FaridSafi/react-native-gifted-chat/blob/master/src/Message.js\n\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport { View, ViewPropTypes, StyleSheet, Text, TouchableOpacity } from 'react-native';\nimport _ from 'lodash';\n\nimport { Avatar, Bubble, SystemMessage, Day, utils } from 'react-native-gifted-chat';\nimport { TEXT_MID, TEXT_LIGHT } from '../colours';\nimport { getFirstName } from '../helper';\nimport { TextStyle } from './TextStyle';\n\nconst isSameUser = utils.isSameUser;\nconst isSameDay = utils.isSameDay;\n\nexport default class PlussChatMessage extends React.Component {\n getInnerComponentProps() {\n const { containerStyle, ...props } = this.props;\n return {\n ...props,\n isSameUser,\n isSameDay,\n };\n }\n\n isCurrentUser() {\n if (this.props.user._id === this.props.currentMessage.user._id) {\n return true;\n }\n return false;\n }\n\n renderDay() {\n if (this.props.currentMessage.createdAt) {\n const dayProps = this.getInnerComponentProps();\n if (this.props.renderDay) {\n return this.props.renderDay(dayProps);\n }\n return <Day {...dayProps} />;\n }\n return null;\n }\n\n renderBubble() {\n const bubbleProps = this.getInnerComponentProps();\n if (this.props.renderBubble) {\n return this.props.renderBubble(bubbleProps);\n }\n return <Bubble {...bubbleProps} />;\n }\n\n renderSystemMessage() {\n const systemMessageProps = this.getInnerComponentProps();\n if (this.props.renderSystemMessage) {\n return this.props.renderSystemMessage(systemMessageProps);\n }\n return <SystemMessage {...systemMessageProps} />;\n }\n\n renderAvatar() {\n if (this.isCurrentUser() && !this.props.showUserAvatar) {\n return null;\n }\n const avatarProps = this.getInnerComponentProps();\n const { currentMessage } = avatarProps;\n if (currentMessage.user.avatar === null || _.isEmpty(currentMessage.user.avatar)) {\n return null;\n }\n return (\n <Avatar\n {...avatarProps}\n imageStyle={{\n left: {\n width: 30,\n height: 30,\n borderRadius: 15,\n },\n right: {\n width: 30,\n height: 30,\n borderRadius: 15,\n },\n }}\n containerStyle={{\n left: {\n marginRight: 10,\n },\n right: {\n marginLeft: 10,\n },\n }}\n />\n );\n }\n\n renderName() {\n const nameProps = this.getInnerComponentProps();\n const { currentMessage } = nameProps;\n if (currentMessage.user.name === null) {\n return null;\n }\n let nameText = this.isCurrentUser() ? 'Me' : getFirstName(currentMessage.user.name);\n if (\n this.props.currentMessage &&\n this.props.currentMessage.replyingTo &&\n this.props.currentMessage.replyingTo.user &&\n !_.isEmpty(this.props.currentMessage.replyingTo.user.name)\n ) {\n nameText = `${nameText} replying to ${this.props.currentMessage.replyingTo.user.name}`;\n }\n return <Text style={[styles[this.props.position].name]}>{nameText}</Text>;\n }\n\n renderReply() {\n if (!this.props.currentMessage || !this.props.currentMessage.replyingTo) {\n return null;\n }\n return (\n <View style={styles[this.props.position].replyBubble}>\n <View style={[styles[this.props.position].replyBubbleInner, { backgroundColor: this.props.colourBrandingMain }]}>\n <Text style={styles[this.props.position].replyBubbleText}>\n {(this.props.currentMessage.replyingTo.text || '').substr(0, 100)}\n </Text>\n </View>\n </View>\n );\n }\n\n renderReplyButton() {\n return (\n <TouchableOpacity style={styles[this.props.position].replyContainer} onPress={this.props.onPressReply}>\n <TextStyle type=\"button\" style={{ color: this.props.colourBrandingMain }}>\n Reply\n </TextStyle>\n </TouchableOpacity>\n );\n }\n\n render() {\n const sameUserAsLast = isSameUser(this.props.currentMessage, this.props.previousMessage);\n const sameUser = isSameUser(this.props.currentMessage, this.props.nextMessage);\n return (\n <View>\n {this.renderDay()}\n {this.props.currentMessage.system ? (\n this.renderSystemMessage()\n ) : (\n <View>\n {sameUserAsLast ? null : this.renderName()}\n <View\n style={[\n styles[this.props.position].container,\n { marginBottom: sameUser ? 2 : 10 },\n !this.props.inverted && { marginBottom: 2 },\n this.props.containerStyle[this.props.position],\n ]}\n >\n {this.props.position === 'left' ? this.renderAvatar() : null}\n <View>\n {this.renderReply()}\n {this.renderBubble()}\n {this.renderReplyButton()}\n </View>\n {this.props.position === 'right' ? this.renderAvatar() : null}\n </View>\n </View>\n )}\n </View>\n );\n }\n}\n\nconst styles = {\n left: StyleSheet.create({\n container: {\n flexDirection: 'row',\n alignItems: 'flex-end',\n justifyContent: 'flex-start',\n marginLeft: 10,\n marginRight: 0,\n },\n name: {\n fontFamily: 'sf-regular',\n color: TEXT_LIGHT,\n fontSize: 14,\n textAlign: 'left',\n marginLeft: 50,\n marginBottom: 5,\n },\n replyBubble: {\n flexDirection: 'row',\n alignItems: 'flex-end',\n justifyContent: 'flex-start',\n paddingLeft: 20,\n },\n replyBubbleInner: {\n padding: 4,\n paddingBottom: 16,\n marginBottom: -12,\n borderRadius: 4,\n opacity: 0.5,\n },\n replyBubbleText: {\n fontFamily: 'sf-regular',\n color: TEXT_MID,\n fontSize: 13,\n textAlign: 'left',\n },\n replyContainer: {\n paddingLeft: 20,\n },\n }),\n right: StyleSheet.create({\n container: {\n flexDirection: 'row',\n alignItems: 'flex-end',\n justifyContent: 'flex-end',\n marginLeft: 0,\n marginRight: 10,\n },\n name: {\n fontFamily: 'sf-regular',\n color: TEXT_LIGHT,\n fontSize: 14,\n textAlign: 'right',\n marginRight: 10,\n marginBottom: 5,\n },\n replyBubble: {\n flexDirection: 'row',\n alignItems: 'flex-end',\n justifyContent: 'flex-end',\n paddingRight: 10,\n },\n replyBubbleInner: {\n padding: 4,\n paddingBottom: 16,\n marginBottom: -12,\n borderRadius: 4,\n opacity: 0.5,\n },\n replyBubbleText: {\n fontFamily: 'sf-regular',\n color: TEXT_MID,\n fontSize: 13,\n textAlign: 'right',\n },\n replyContainer: {\n alignSelf: 'flex-end',\n paddingRight: 10,\n },\n }),\n};\n\nPlussChatMessage.defaultProps = {\n renderAvatar: undefined,\n renderBubble: null,\n renderDay: null,\n renderSystemMessage: null,\n position: 'left',\n currentMessage: {},\n nextMessage: {},\n previousMessage: {},\n user: {},\n containerStyle: {},\n showUserAvatar: true,\n inverted: true,\n};\n\nPlussChatMessage.propTypes = {\n renderAvatar: PropTypes.func,\n showUserAvatar: PropTypes.bool,\n renderBubble: PropTypes.func,\n renderDay: PropTypes.func,\n renderSystemMessage: PropTypes.func,\n position: PropTypes.oneOf(['left', 'right']),\n currentMessage: PropTypes.object,\n nextMessage: PropTypes.object,\n previousMessage: PropTypes.object,\n user: PropTypes.object,\n inverted: PropTypes.bool,\n containerStyle: PropTypes.shape({\n left: ViewPropTypes.style,\n right: ViewPropTypes.style,\n }),\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["TextStyle.js"],"names":["React","PureComponent","StyleSheet","Text","TEXT_DARKEST","TextStyle","render","props","styles","type","style","children","create","pageHeading","fontFamily","fontSize","color","body","detailLabel"],"mappings":";;AAAA,OAAOA,KAAP,IAAgBC,aAAhB,QAAqC,OAArC;AACA,SAASC,UAAT,EAAqBC,IAArB,QAAiC,cAAjC;AACA,SAASC,YAAT,QAA6B,YAA7B;;AAEA,MAAMC,SAAN,SAAwBJ,aAAxB,CAAsC;AACpCK,EAAAA,MAAM,GAAG;AACP,wBACE,oBAAC,IAAD,eAAU,KAAKC,KAAf;AAAsB,MAAA,KAAK,EAAE,CAACC,MAAM,CAAC,KAAKD,KAAL,CAAWE,IAAZ,CAAP,EAA0B,KAAKF,KAAL,CAAWG,KAArC;AAA7B,QACG,KAAKH,KAAL,CAAWI,QADd,CADF;AAKD;;AAPmC;;AAUtC,MAAMH,MAAM,GAAGN,UAAU,CAACU,MAAX,CAAkB;AAC/BC,EAAAA,WAAW,EAAE;AACXC,IAAAA,UAAU,EAAE,SADD;AAEXC,IAAAA,QAAQ,EAAE,EAFC;AAGXC,IAAAA,KAAK,EAAEZ;AAHI,GADkB;AAM/Ba,EAAAA,IAAI,EAAE;AACJH,IAAAA,UAAU,EAAE,YADR;AAEJC,IAAAA,QAAQ,EAAE,EAFN;AAGJC,IAAAA,KAAK,EAAEZ;AAHH,GANyB;AAW/Bc,EAAAA,WAAW,EAAE;AACXJ,IAAAA,UAAU,EAAE,SADD;AAEXE,IAAAA,KAAK,EAAEZ,YAFI;AAGXW,IAAAA,QAAQ,EAAE;AAHC;
|
|
1
|
+
{"version":3,"sources":["TextStyle.js"],"names":["React","PureComponent","StyleSheet","Text","TEXT_DARKEST","TextStyle","render","props","styles","type","style","children","create","pageHeading","fontFamily","fontSize","color","body","detailLabel","button"],"mappings":";;AAAA,OAAOA,KAAP,IAAgBC,aAAhB,QAAqC,OAArC;AACA,SAASC,UAAT,EAAqBC,IAArB,QAAiC,cAAjC;AACA,SAASC,YAAT,QAA6B,YAA7B;;AAEA,MAAMC,SAAN,SAAwBJ,aAAxB,CAAsC;AACpCK,EAAAA,MAAM,GAAG;AACP,wBACE,oBAAC,IAAD,eAAU,KAAKC,KAAf;AAAsB,MAAA,KAAK,EAAE,CAACC,MAAM,CAAC,KAAKD,KAAL,CAAWE,IAAZ,CAAP,EAA0B,KAAKF,KAAL,CAAWG,KAArC;AAA7B,QACG,KAAKH,KAAL,CAAWI,QADd,CADF;AAKD;;AAPmC;;AAUtC,MAAMH,MAAM,GAAGN,UAAU,CAACU,MAAX,CAAkB;AAC/BC,EAAAA,WAAW,EAAE;AACXC,IAAAA,UAAU,EAAE,SADD;AAEXC,IAAAA,QAAQ,EAAE,EAFC;AAGXC,IAAAA,KAAK,EAAEZ;AAHI,GADkB;AAM/Ba,EAAAA,IAAI,EAAE;AACJH,IAAAA,UAAU,EAAE,YADR;AAEJC,IAAAA,QAAQ,EAAE,EAFN;AAGJC,IAAAA,KAAK,EAAEZ;AAHH,GANyB;AAW/Bc,EAAAA,WAAW,EAAE;AACXJ,IAAAA,UAAU,EAAE,SADD;AAEXE,IAAAA,KAAK,EAAEZ,YAFI;AAGXW,IAAAA,QAAQ,EAAE;AAHC,GAXkB;AAgB/BI,EAAAA,MAAM,EAAE;AACNL,IAAAA,UAAU,EAAE,aADN;AAENE,IAAAA,KAAK,EAAEZ,YAFD;AAGNW,IAAAA,QAAQ,EAAE;AAHJ;AAhBuB,CAAlB,CAAf;AAuBA,SAASV,SAAT","sourcesContent":["import React, { PureComponent } from 'react';\nimport { StyleSheet, Text } from 'react-native';\nimport { TEXT_DARKEST } from '../colours';\n\nclass TextStyle extends PureComponent {\n render() {\n return (\n <Text {...this.props} style={[styles[this.props.type], this.props.style]}>\n {this.props.children}\n </Text>\n );\n }\n}\n\nconst styles = StyleSheet.create({\n pageHeading: {\n fontFamily: 'sf-bold',\n fontSize: 24,\n color: TEXT_DARKEST,\n },\n body: {\n fontFamily: 'sf-regular',\n fontSize: 14,\n color: TEXT_DARKEST,\n },\n detailLabel: {\n fontFamily: 'sf-bold',\n color: TEXT_DARKEST,\n fontSize: 16,\n },\n button: {\n fontFamily: 'sf-semibold',\n color: TEXT_DARKEST,\n fontSize: 15,\n },\n});\n\nexport { TextStyle };\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@plusscommunities/pluss-core-app",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.0.0",
|
|
4
4
|
"description": "Core extension package for Pluss Communities platform",
|
|
5
5
|
"main": "dist/module/index.js",
|
|
6
6
|
"module": "dist/module/index.js",
|
|
@@ -22,35 +22,35 @@
|
|
|
22
22
|
"license": "ISC",
|
|
23
23
|
"dependencies": {
|
|
24
24
|
"@expo/vector-icons": "^13.0.0",
|
|
25
|
-
"@react-native-async-storage/async-storage": "
|
|
26
|
-
"@react-native-community/netinfo": "
|
|
27
|
-
"@react-native-picker/picker": "2.4.
|
|
25
|
+
"@react-native-async-storage/async-storage": "1.17.11",
|
|
26
|
+
"@react-native-community/netinfo": "9.3.7",
|
|
27
|
+
"@react-native-picker/picker": "2.4.8",
|
|
28
28
|
"aws-amplify": "^4.3.11",
|
|
29
29
|
"aws-amplify-react-native": "^6.0.2",
|
|
30
|
-
"expo-av": "~
|
|
31
|
-
"expo-calendar": "~
|
|
32
|
-
"expo-constants": "~
|
|
33
|
-
"expo-face-detector": "~
|
|
34
|
-
"expo-file-system": "~
|
|
35
|
-
"expo-image-manipulator": "~
|
|
36
|
-
"expo-image-picker": "~
|
|
37
|
-
"expo-linear-gradient": "~
|
|
38
|
-
"expo-media-library": "~
|
|
39
|
-
"expo-screen-orientation": "~
|
|
40
|
-
"expo-sharing": "~
|
|
30
|
+
"expo-av": "~13.2.1",
|
|
31
|
+
"expo-calendar": "~11.1.1",
|
|
32
|
+
"expo-constants": "~14.2.1",
|
|
33
|
+
"expo-face-detector": "~12.1.1",
|
|
34
|
+
"expo-file-system": "~15.2.2",
|
|
35
|
+
"expo-image-manipulator": "~11.1.1",
|
|
36
|
+
"expo-image-picker": "~14.1.1",
|
|
37
|
+
"expo-linear-gradient": "~12.1.2",
|
|
38
|
+
"expo-media-library": "~15.2.3",
|
|
39
|
+
"expo-screen-orientation": "~5.1.1",
|
|
40
|
+
"expo-sharing": "~11.2.2",
|
|
41
41
|
"expo-video-player": "^1.6.0",
|
|
42
42
|
"js-cookie": "^2.2.1",
|
|
43
43
|
"lodash": "^4.17.4",
|
|
44
44
|
"mime-types": "^2.1.24",
|
|
45
45
|
"moment": "^2.18.1",
|
|
46
|
-
"react": "
|
|
47
|
-
"react-native": "0.
|
|
46
|
+
"react": "18.2.0",
|
|
47
|
+
"react-native": "0.71.6",
|
|
48
48
|
"react-native-auto-height-image": "3.1.3",
|
|
49
49
|
"react-native-elements": "^0.17.0",
|
|
50
50
|
"react-native-image-zoom-viewer": "^3.0.1",
|
|
51
51
|
"react-native-iphone-x-helper": "^1.3.1",
|
|
52
52
|
"react-native-vimeo-iframe": "^1.0.4",
|
|
53
|
-
"react-native-webview": "11.
|
|
53
|
+
"react-native-webview": "11.26.0",
|
|
54
54
|
"react-native-youtube-iframe": "^2.2.1",
|
|
55
55
|
"react-redux": "^7.2.6"
|
|
56
56
|
},
|
|
@@ -12,6 +12,7 @@ import PlussChatTime from './PlussChatTime';
|
|
|
12
12
|
import { PDFPopup } from './PDFPopup';
|
|
13
13
|
import { Attachment } from './Attachment';
|
|
14
14
|
import PlussChatMessage from './PlussChatMessage';
|
|
15
|
+
import { TextStyle } from './TextStyle';
|
|
15
16
|
import {
|
|
16
17
|
TEXT_DARK,
|
|
17
18
|
LINEGREY,
|
|
@@ -249,6 +250,12 @@ class PlussChat extends Component {
|
|
|
249
250
|
});
|
|
250
251
|
};
|
|
251
252
|
|
|
253
|
+
onReply = message => {
|
|
254
|
+
this.setState({
|
|
255
|
+
replyingTo: message,
|
|
256
|
+
});
|
|
257
|
+
};
|
|
258
|
+
|
|
252
259
|
closeGallery() {
|
|
253
260
|
this.setState({
|
|
254
261
|
imagePopupSource: [],
|
|
@@ -278,8 +285,12 @@ class PlussChat extends Component {
|
|
|
278
285
|
}
|
|
279
286
|
if (!messages[0].text && !messages[0].image) return;
|
|
280
287
|
|
|
288
|
+
if (this.state.replyingTo) {
|
|
289
|
+
messages[0].replyingTo = this.state.replyingTo;
|
|
290
|
+
}
|
|
291
|
+
|
|
281
292
|
this.props.onSend(messages);
|
|
282
|
-
this.setState({ imagesToUpload: [] });
|
|
293
|
+
this.setState({ imagesToUpload: [], replyingTo: null });
|
|
283
294
|
}
|
|
284
295
|
|
|
285
296
|
/**
|
|
@@ -335,7 +346,16 @@ class PlussChat extends Component {
|
|
|
335
346
|
);
|
|
336
347
|
}
|
|
337
348
|
renderMessage(props) {
|
|
338
|
-
return
|
|
349
|
+
return (
|
|
350
|
+
<PlussChatMessage
|
|
351
|
+
key={props.RowId}
|
|
352
|
+
colourBrandingMain={this.props.colourBrandingMain}
|
|
353
|
+
onPressReply={() => {
|
|
354
|
+
this.onReply(props.currentMessage);
|
|
355
|
+
}}
|
|
356
|
+
{...props}
|
|
357
|
+
/>
|
|
358
|
+
);
|
|
339
359
|
}
|
|
340
360
|
renderMessageText(messageTextProps) {
|
|
341
361
|
return (
|
|
@@ -492,7 +512,7 @@ class PlussChat extends Component {
|
|
|
492
512
|
|
|
493
513
|
renderSend(props) {
|
|
494
514
|
return (
|
|
495
|
-
<View style={{ position: 'absolute', top: 0, right: 0 }}>
|
|
515
|
+
<View style={[{ position: 'absolute', top: 0, right: 0 }, !!this.state.replyingTo && { marginTop: 38 }]}>
|
|
496
516
|
{(!_.isEmpty(props.text) || this.hasImagesReady(props.imagesToUpload)) && (
|
|
497
517
|
<Send
|
|
498
518
|
{...props}
|
|
@@ -574,18 +594,21 @@ class PlussChat extends Component {
|
|
|
574
594
|
}
|
|
575
595
|
|
|
576
596
|
renderInputToolbar(props) {
|
|
597
|
+
let toolbar;
|
|
577
598
|
if (!this.hasImagesAttached(props.imagesToUpload)) {
|
|
578
|
-
|
|
599
|
+
toolbar = <InputToolbar {...props} containerStyle={styles.inputContainer} renderComposer={this.renderComposer.bind(this)} />;
|
|
600
|
+
} else {
|
|
601
|
+
toolbar = (
|
|
602
|
+
<InputToolbar
|
|
603
|
+
{...props}
|
|
604
|
+
containerStyle={styles.inputContainer}
|
|
605
|
+
renderComposer={this.renderComposer.bind(this)}
|
|
606
|
+
renderAccessory={this.renderAccessory.bind(this)}
|
|
607
|
+
accessoryStyle={styles.accessory}
|
|
608
|
+
/>
|
|
609
|
+
);
|
|
579
610
|
}
|
|
580
|
-
return
|
|
581
|
-
<InputToolbar
|
|
582
|
-
{...props}
|
|
583
|
-
containerStyle={styles.inputContainer}
|
|
584
|
-
renderComposer={this.renderComposer.bind(this)}
|
|
585
|
-
renderAccessory={this.renderAccessory.bind(this)}
|
|
586
|
-
accessoryStyle={styles.accessory}
|
|
587
|
-
/>
|
|
588
|
-
);
|
|
611
|
+
return toolbar;
|
|
589
612
|
}
|
|
590
613
|
renderFooter() {
|
|
591
614
|
// if (this.state.keyboardOpen) {
|
|
@@ -611,33 +634,51 @@ class PlussChat extends Component {
|
|
|
611
634
|
renderComposer(props) {
|
|
612
635
|
//console.log(props.composerHeight);
|
|
613
636
|
return (
|
|
614
|
-
<View
|
|
615
|
-
|
|
616
|
-
styles.
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
<
|
|
632
|
-
{
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
637
|
+
<View style={styles.composerContainer}>
|
|
638
|
+
{this.state.replyingTo && (
|
|
639
|
+
<View style={styles.replyingTo}>
|
|
640
|
+
<TextStyle type="body">
|
|
641
|
+
Replying to {_.isEmpty(this.state.replyingTo?.user?.name) ? 'message' : this.state.replyingTo?.user?.name}
|
|
642
|
+
</TextStyle>
|
|
643
|
+
<TouchableOpacity
|
|
644
|
+
style={styles.replyingRemoveButton}
|
|
645
|
+
onPress={() => this.onReply(null)}
|
|
646
|
+
hitSlop={{ top: 8, right: 8, bottom: 8, left: 8 }}
|
|
647
|
+
>
|
|
648
|
+
<View style={[styles.replyingRemoveContainer, { backgroundColor: this.props.colourBrandingMain }]}>
|
|
649
|
+
<Icon name="times" type="font-awesome" iconStyle={styles.replyingRemoveIcon} />
|
|
650
|
+
</View>
|
|
651
|
+
</TouchableOpacity>
|
|
652
|
+
</View>
|
|
653
|
+
)}
|
|
654
|
+
<View
|
|
655
|
+
style={[
|
|
656
|
+
styles.input,
|
|
657
|
+
{
|
|
658
|
+
//height: props.composerHeight + 10,
|
|
659
|
+
//borderRadius: (this.MIN_COMPOSER_HEIGHT + 10) / 2,
|
|
660
|
+
marginRight:
|
|
661
|
+
_.isEmpty(props.text) && !this.hasImagesReady(props.imagesToUpload)
|
|
662
|
+
? 8 + this.MIN_COMPOSER_HEIGHT
|
|
663
|
+
: 2 * (this.MIN_COMPOSER_HEIGHT + 8),
|
|
664
|
+
justifyContent: 'center',
|
|
665
|
+
},
|
|
666
|
+
Platform.OS === 'ios' && {
|
|
667
|
+
height: props.composerHeight + 10,
|
|
668
|
+
},
|
|
669
|
+
]}
|
|
670
|
+
>
|
|
671
|
+
<Composer
|
|
672
|
+
{...props}
|
|
673
|
+
//composerHeight={props.composerHeight}
|
|
674
|
+
placeholder="Type a message..."
|
|
675
|
+
textInputStyle={styles.inputText}
|
|
676
|
+
textInputProps={{
|
|
677
|
+
onFocus: this.onFocusInput.bind(this),
|
|
678
|
+
onBlur: this.onBlurInput.bind(this),
|
|
679
|
+
}}
|
|
680
|
+
/>
|
|
681
|
+
</View>
|
|
641
682
|
</View>
|
|
642
683
|
);
|
|
643
684
|
}
|
|
@@ -836,6 +877,34 @@ const styles = {
|
|
|
836
877
|
borderRadius: 5,
|
|
837
878
|
flex: 1,
|
|
838
879
|
},
|
|
880
|
+
composerContainer: {
|
|
881
|
+
flex: 1,
|
|
882
|
+
},
|
|
883
|
+
replyingTo: {
|
|
884
|
+
minHeight: 30,
|
|
885
|
+
flexDirection: 'row',
|
|
886
|
+
alignItems: 'center',
|
|
887
|
+
borderBottomWidth: 1,
|
|
888
|
+
borderBottomColor: LINEGREY,
|
|
889
|
+
marginBottom: 8,
|
|
890
|
+
},
|
|
891
|
+
replyingRemoveButton: {
|
|
892
|
+
marginLeft: 10,
|
|
893
|
+
},
|
|
894
|
+
replyingRemoveContainer: {
|
|
895
|
+
justifyContent: 'center',
|
|
896
|
+
alignItems: 'center',
|
|
897
|
+
borderRadius: 10,
|
|
898
|
+
width: 20,
|
|
899
|
+
height: 20,
|
|
900
|
+
borderWidth: 2,
|
|
901
|
+
borderColor: '#fff',
|
|
902
|
+
},
|
|
903
|
+
replyingRemoveIcon: {
|
|
904
|
+
fontSize: 10,
|
|
905
|
+
color: '#fff',
|
|
906
|
+
marginBottom: 1,
|
|
907
|
+
},
|
|
839
908
|
sendContainer: {
|
|
840
909
|
position: 'absolute',
|
|
841
910
|
top: 0,
|
|
@@ -8,12 +8,13 @@
|
|
|
8
8
|
|
|
9
9
|
import PropTypes from 'prop-types';
|
|
10
10
|
import React from 'react';
|
|
11
|
-
import { View, ViewPropTypes, StyleSheet, Text } from 'react-native';
|
|
11
|
+
import { View, ViewPropTypes, StyleSheet, Text, TouchableOpacity } from 'react-native';
|
|
12
12
|
import _ from 'lodash';
|
|
13
13
|
|
|
14
14
|
import { Avatar, Bubble, SystemMessage, Day, utils } from 'react-native-gifted-chat';
|
|
15
|
-
import { TEXT_LIGHT } from '../colours';
|
|
15
|
+
import { TEXT_MID, TEXT_LIGHT } from '../colours';
|
|
16
16
|
import { getFirstName } from '../helper';
|
|
17
|
+
import { TextStyle } from './TextStyle';
|
|
17
18
|
|
|
18
19
|
const isSameUser = utils.isSameUser;
|
|
19
20
|
const isSameDay = utils.isSameDay;
|
|
@@ -104,7 +105,41 @@ export default class PlussChatMessage extends React.Component {
|
|
|
104
105
|
if (currentMessage.user.name === null) {
|
|
105
106
|
return null;
|
|
106
107
|
}
|
|
107
|
-
|
|
108
|
+
let nameText = this.isCurrentUser() ? 'Me' : getFirstName(currentMessage.user.name);
|
|
109
|
+
if (
|
|
110
|
+
this.props.currentMessage &&
|
|
111
|
+
this.props.currentMessage.replyingTo &&
|
|
112
|
+
this.props.currentMessage.replyingTo.user &&
|
|
113
|
+
!_.isEmpty(this.props.currentMessage.replyingTo.user.name)
|
|
114
|
+
) {
|
|
115
|
+
nameText = `${nameText} replying to ${this.props.currentMessage.replyingTo.user.name}`;
|
|
116
|
+
}
|
|
117
|
+
return <Text style={[styles[this.props.position].name]}>{nameText}</Text>;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
renderReply() {
|
|
121
|
+
if (!this.props.currentMessage || !this.props.currentMessage.replyingTo) {
|
|
122
|
+
return null;
|
|
123
|
+
}
|
|
124
|
+
return (
|
|
125
|
+
<View style={styles[this.props.position].replyBubble}>
|
|
126
|
+
<View style={[styles[this.props.position].replyBubbleInner, { backgroundColor: this.props.colourBrandingMain }]}>
|
|
127
|
+
<Text style={styles[this.props.position].replyBubbleText}>
|
|
128
|
+
{(this.props.currentMessage.replyingTo.text || '').substr(0, 100)}
|
|
129
|
+
</Text>
|
|
130
|
+
</View>
|
|
131
|
+
</View>
|
|
132
|
+
);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
renderReplyButton() {
|
|
136
|
+
return (
|
|
137
|
+
<TouchableOpacity style={styles[this.props.position].replyContainer} onPress={this.props.onPressReply}>
|
|
138
|
+
<TextStyle type="button" style={{ color: this.props.colourBrandingMain }}>
|
|
139
|
+
Reply
|
|
140
|
+
</TextStyle>
|
|
141
|
+
</TouchableOpacity>
|
|
142
|
+
);
|
|
108
143
|
}
|
|
109
144
|
|
|
110
145
|
render() {
|
|
@@ -127,7 +162,11 @@ export default class PlussChatMessage extends React.Component {
|
|
|
127
162
|
]}
|
|
128
163
|
>
|
|
129
164
|
{this.props.position === 'left' ? this.renderAvatar() : null}
|
|
130
|
-
|
|
165
|
+
<View>
|
|
166
|
+
{this.renderReply()}
|
|
167
|
+
{this.renderBubble()}
|
|
168
|
+
{this.renderReplyButton()}
|
|
169
|
+
</View>
|
|
131
170
|
{this.props.position === 'right' ? this.renderAvatar() : null}
|
|
132
171
|
</View>
|
|
133
172
|
</View>
|
|
@@ -154,6 +193,28 @@ const styles = {
|
|
|
154
193
|
marginLeft: 50,
|
|
155
194
|
marginBottom: 5,
|
|
156
195
|
},
|
|
196
|
+
replyBubble: {
|
|
197
|
+
flexDirection: 'row',
|
|
198
|
+
alignItems: 'flex-end',
|
|
199
|
+
justifyContent: 'flex-start',
|
|
200
|
+
paddingLeft: 20,
|
|
201
|
+
},
|
|
202
|
+
replyBubbleInner: {
|
|
203
|
+
padding: 4,
|
|
204
|
+
paddingBottom: 16,
|
|
205
|
+
marginBottom: -12,
|
|
206
|
+
borderRadius: 4,
|
|
207
|
+
opacity: 0.5,
|
|
208
|
+
},
|
|
209
|
+
replyBubbleText: {
|
|
210
|
+
fontFamily: 'sf-regular',
|
|
211
|
+
color: TEXT_MID,
|
|
212
|
+
fontSize: 13,
|
|
213
|
+
textAlign: 'left',
|
|
214
|
+
},
|
|
215
|
+
replyContainer: {
|
|
216
|
+
paddingLeft: 20,
|
|
217
|
+
},
|
|
157
218
|
}),
|
|
158
219
|
right: StyleSheet.create({
|
|
159
220
|
container: {
|
|
@@ -171,6 +232,29 @@ const styles = {
|
|
|
171
232
|
marginRight: 10,
|
|
172
233
|
marginBottom: 5,
|
|
173
234
|
},
|
|
235
|
+
replyBubble: {
|
|
236
|
+
flexDirection: 'row',
|
|
237
|
+
alignItems: 'flex-end',
|
|
238
|
+
justifyContent: 'flex-end',
|
|
239
|
+
paddingRight: 10,
|
|
240
|
+
},
|
|
241
|
+
replyBubbleInner: {
|
|
242
|
+
padding: 4,
|
|
243
|
+
paddingBottom: 16,
|
|
244
|
+
marginBottom: -12,
|
|
245
|
+
borderRadius: 4,
|
|
246
|
+
opacity: 0.5,
|
|
247
|
+
},
|
|
248
|
+
replyBubbleText: {
|
|
249
|
+
fontFamily: 'sf-regular',
|
|
250
|
+
color: TEXT_MID,
|
|
251
|
+
fontSize: 13,
|
|
252
|
+
textAlign: 'right',
|
|
253
|
+
},
|
|
254
|
+
replyContainer: {
|
|
255
|
+
alignSelf: 'flex-end',
|
|
256
|
+
paddingRight: 10,
|
|
257
|
+
},
|
|
174
258
|
}),
|
|
175
259
|
};
|
|
176
260
|
|