@plusscommunities/pluss-core-app 7.0.2 → 7.0.3
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/DocumentUploader.js +1 -1
- package/dist/module/components/DocumentUploader.js.map +1 -1
- package/dist/module/components/PlussChat.js +80 -6
- package/dist/module/components/PlussChat.js.map +1 -1
- package/dist/module/components/PlussChatMessage.js +41 -4
- package/dist/module/components/PlussChatMessage.js.map +1 -1
- package/package.json +1 -1
- package/src/components/DocumentUploader.js +1 -1
- package/src/components/PlussChat.js +88 -2
- package/src/components/PlussChatMessage.js +40 -3
|
@@ -3,7 +3,7 @@ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol"
|
|
|
3
3
|
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
4
4
|
import React, { Component } from 'react';
|
|
5
5
|
import { View, TouchableOpacity, Text, StyleSheet, ActivityIndicator } from 'react-native';
|
|
6
|
-
import { Icon } from '
|
|
6
|
+
import { Icon } from '@rneui/themed';
|
|
7
7
|
import * as DocumentPicker from 'expo-document-picker';
|
|
8
8
|
import { connect } from 'react-redux';
|
|
9
9
|
import Config from '../config';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","Component","View","TouchableOpacity","Text","StyleSheet","ActivityIndicator","Icon","DocumentPicker","connect","Config","fileActions","getValueOrDefault","TEXT_DARK","getMainBrandingColourFromState","DEFAULT_DOCUMENT_NAME","DocumentUploader","constructor","args","_defineProperty","isUploading","uploadProgress","allowedTypes","multiple","props","result","getDocumentAsync","type","copyToCacheDirectory","canceled","handleDocumentPicked","error","console","log","onUploadFailed","message","documentResult","assets","userId","setState","uploadPromises","map","asset","name","uri","file","fileExt","split","fileName","Date","now","uploadUri","getUploadUrl","onUploadStarted","toUpperCase","res","uploadUserMediaWithProgress","progress","onUploadProgress","fileUrl","env","baseUploadsUrl","key","onUploadSuccess","success","url","results","Promise","all","buttonTitle","buttonStyle","buttonTextStyle","disabled","state","mainColor","createElement","style","styles","uploadButton","borderColor","onPress","pickDocument","activeOpacity","buttonContent","color","size","icon","buttonText","progressContainer","progressBar","progressFill","width","progressText","Math","round","render","container","renderUploadButton","renderProgress","create","marginVertical","flexDirection","alignItems","justifyContent","paddingVertical","paddingHorizontal","borderRadius","backgroundColor","borderWidth","fontSize","fontWeight","marginLeft","marginRight","marginTop","height","overflow","mapStateToProps","user","colourBrandingMain"],"sources":["DocumentUploader.js"],"sourcesContent":["import React, { Component } from 'react';\nimport { View, TouchableOpacity, Text, StyleSheet, ActivityIndicator } from 'react-native';\nimport { Icon } from 'react-native-elements';\nimport * as DocumentPicker from 'expo-document-picker';\nimport { connect } from 'react-redux';\nimport Config from '../config';\nimport { fileActions } from '../apis';\nimport { getValueOrDefault } from '../helper';\nimport { TEXT_DARK, getMainBrandingColourFromState } from '../colours';\n\nconst DEFAULT_DOCUMENT_NAME = 'document';\n\nclass DocumentUploader extends Component {\n static defaultProps = {\n allowedTypes: ['application/pdf'],\n buttonTitle: 'Upload Document',\n buttonStyle: {},\n buttonTextStyle: {},\n onUploadStarted: () => {},\n onUploadSuccess: () => {},\n onUploadFailed: () => {},\n onUploadProgress: null,\n userId: null,\n fileName: null,\n disabled: false,\n };\n\n state = {\n isUploading: false,\n uploadProgress: 0,\n };\n\n pickDocument = async () => {\n const { allowedTypes, multiple } = this.props;\n\n try {\n const result = await DocumentPicker.getDocumentAsync({\n type: allowedTypes,\n copyToCacheDirectory: true,\n multiple: multiple || false,\n });\n // console.log('pickDocument', JSON.stringify(result, null, 2));\n\n if (!result.canceled) {\n await this.handleDocumentPicked(result);\n }\n } catch (error) {\n console.log('Document picker error:', error);\n this.props.onUploadFailed(null, error.message);\n }\n };\n\n handleDocumentPicked = async documentResult => {\n const { assets } = documentResult;\n const { userId } = this.props;\n\n try {\n this.setState({ isUploading: true, uploadProgress: 0 });\n\n // Process each asset in parallel\n const uploadPromises = assets.map(async asset => {\n const { name, uri } = asset;\n\n // Generate a unique filename if not provided\n const [file, fileExt] = name.split('.');\n const fileName = `${getValueOrDefault(this.props.fileName, DEFAULT_DOCUMENT_NAME)}_${Date.now()}.${fileExt}`;\n const uploadUri = fileActions.getUploadUrl(userId, fileName);\n // console.log('handleDocumentPicked', JSON.stringify({ uploadUri, uri, name, fileName }, null, 2));\n\n try {\n // Notify parent component that upload has started for this file\n this.props.onUploadStarted(uploadUri, uri, file, fileExt.toUpperCase());\n\n const res = await fileActions.uploadUserMediaWithProgress(uri, uploadUri, progress => {\n if (this.props.onUploadProgress) this.props.onUploadProgress(progress);\n });\n\n const fileUrl = Config.env.baseUploadsUrl + res.key;\n this.props.onUploadSuccess(fileUrl, uploadUri);\n console.log('Upload success', fileUrl);\n return { success: true, url: fileUrl, uploadUri };\n } catch (error) {\n console.error(`Upload failed for ${name}:`, error);\n this.props.onUploadFailed(uploadUri, error.message);\n return { success: false, error, uploadUri };\n }\n });\n\n // Wait for all uploads to complete\n const results = await Promise.all(uploadPromises);\n return results;\n } catch (error) {\n console.error('Document upload error:', error);\n return [];\n } finally {\n this.setState({ isUploading: false, uploadProgress: 0 });\n }\n };\n\n renderUploadButton = () => {\n const { buttonTitle, buttonStyle, buttonTextStyle, disabled } = this.props;\n const { isUploading } = this.state;\n const mainColor = getMainBrandingColourFromState(this.props);\n\n return (\n <TouchableOpacity\n style={[styles.uploadButton, { borderColor: mainColor }, buttonStyle]}\n onPress={this.pickDocument}\n disabled={isUploading || disabled}\n activeOpacity={0.7}\n >\n <View style={styles.buttonContent}>\n {isUploading ? (\n <ActivityIndicator color={mainColor} />\n ) : (\n <Icon name=\"attachment\" type=\"entypo\" color={mainColor} size={18} style={styles.icon} />\n )}\n <Text style={[styles.buttonText, { color: mainColor }, buttonTextStyle]}>{buttonTitle}</Text>\n </View>\n </TouchableOpacity>\n );\n };\n\n renderProgress = () => {\n const { uploadProgress } = this.state;\n if (uploadProgress <= 0 || uploadProgress >= 1) return null;\n\n return (\n <View style={styles.progressContainer}>\n <View style={styles.progressBar}>\n <View style={[styles.progressFill, { width: `${uploadProgress * 100}%` }]} />\n </View>\n <Text style={styles.progressText}>{Math.round(uploadProgress * 100)}%</Text>\n </View>\n );\n };\n\n render() {\n return (\n <View style={styles.container}>\n {this.renderUploadButton()}\n {this.renderProgress()}\n </View>\n );\n }\n}\n\nconst styles = StyleSheet.create({\n container: {\n marginVertical: 10,\n },\n uploadButton: {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n paddingVertical: 8,\n paddingHorizontal: 16,\n borderRadius: 6,\n backgroundColor: '#fff',\n borderWidth: 1,\n borderColor: '#007AFF',\n },\n buttonContent: {\n flexDirection: 'row',\n alignItems: 'center',\n },\n buttonText: {\n color: '#fff',\n fontSize: 16,\n fontWeight: '500',\n marginLeft: 8,\n },\n icon: {\n marginRight: 8,\n },\n progressContainer: {\n marginTop: 8,\n alignItems: 'center',\n },\n progressBar: {\n height: 4,\n width: '100%',\n backgroundColor: '#E0E0E0',\n borderRadius: 2,\n overflow: 'hidden',\n },\n progressFill: {\n height: '100%',\n backgroundColor: '#4CAF50',\n },\n progressText: {\n marginTop: 4,\n fontSize: 12,\n color: TEXT_DARK,\n },\n});\n\nconst mapStateToProps = state => {\n const { user } = state;\n return {\n user,\n colourBrandingMain: getMainBrandingColourFromState(state),\n };\n};\n\nexport default connect(mapStateToProps)(DocumentUploader);\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["React","Component","View","TouchableOpacity","Text","StyleSheet","ActivityIndicator","Icon","DocumentPicker","connect","Config","fileActions","getValueOrDefault","TEXT_DARK","getMainBrandingColourFromState","DEFAULT_DOCUMENT_NAME","DocumentUploader","constructor","args","_defineProperty","isUploading","uploadProgress","allowedTypes","multiple","props","result","getDocumentAsync","type","copyToCacheDirectory","canceled","handleDocumentPicked","error","console","log","onUploadFailed","message","documentResult","assets","userId","setState","uploadPromises","map","asset","name","uri","file","fileExt","split","fileName","Date","now","uploadUri","getUploadUrl","onUploadStarted","toUpperCase","res","uploadUserMediaWithProgress","progress","onUploadProgress","fileUrl","env","baseUploadsUrl","key","onUploadSuccess","success","url","results","Promise","all","buttonTitle","buttonStyle","buttonTextStyle","disabled","state","mainColor","createElement","style","styles","uploadButton","borderColor","onPress","pickDocument","activeOpacity","buttonContent","color","size","icon","buttonText","progressContainer","progressBar","progressFill","width","progressText","Math","round","render","container","renderUploadButton","renderProgress","create","marginVertical","flexDirection","alignItems","justifyContent","paddingVertical","paddingHorizontal","borderRadius","backgroundColor","borderWidth","fontSize","fontWeight","marginLeft","marginRight","marginTop","height","overflow","mapStateToProps","user","colourBrandingMain"],"sources":["DocumentUploader.js"],"sourcesContent":["import React, { Component } from 'react';\nimport { View, TouchableOpacity, Text, StyleSheet, ActivityIndicator } from 'react-native';\nimport { Icon } from '@rneui/themed';\nimport * as DocumentPicker from 'expo-document-picker';\nimport { connect } from 'react-redux';\nimport Config from '../config';\nimport { fileActions } from '../apis';\nimport { getValueOrDefault } from '../helper';\nimport { TEXT_DARK, getMainBrandingColourFromState } from '../colours';\n\nconst DEFAULT_DOCUMENT_NAME = 'document';\n\nclass DocumentUploader extends Component {\n static defaultProps = {\n allowedTypes: ['application/pdf'],\n buttonTitle: 'Upload Document',\n buttonStyle: {},\n buttonTextStyle: {},\n onUploadStarted: () => {},\n onUploadSuccess: () => {},\n onUploadFailed: () => {},\n onUploadProgress: null,\n userId: null,\n fileName: null,\n disabled: false,\n };\n\n state = {\n isUploading: false,\n uploadProgress: 0,\n };\n\n pickDocument = async () => {\n const { allowedTypes, multiple } = this.props;\n\n try {\n const result = await DocumentPicker.getDocumentAsync({\n type: allowedTypes,\n copyToCacheDirectory: true,\n multiple: multiple || false,\n });\n // console.log('pickDocument', JSON.stringify(result, null, 2));\n\n if (!result.canceled) {\n await this.handleDocumentPicked(result);\n }\n } catch (error) {\n console.log('Document picker error:', error);\n this.props.onUploadFailed(null, error.message);\n }\n };\n\n handleDocumentPicked = async documentResult => {\n const { assets } = documentResult;\n const { userId } = this.props;\n\n try {\n this.setState({ isUploading: true, uploadProgress: 0 });\n\n // Process each asset in parallel\n const uploadPromises = assets.map(async asset => {\n const { name, uri } = asset;\n\n // Generate a unique filename if not provided\n const [file, fileExt] = name.split('.');\n const fileName = `${getValueOrDefault(this.props.fileName, DEFAULT_DOCUMENT_NAME)}_${Date.now()}.${fileExt}`;\n const uploadUri = fileActions.getUploadUrl(userId, fileName);\n // console.log('handleDocumentPicked', JSON.stringify({ uploadUri, uri, name, fileName }, null, 2));\n\n try {\n // Notify parent component that upload has started for this file\n this.props.onUploadStarted(uploadUri, uri, file, fileExt.toUpperCase());\n\n const res = await fileActions.uploadUserMediaWithProgress(uri, uploadUri, progress => {\n if (this.props.onUploadProgress) this.props.onUploadProgress(progress);\n });\n\n const fileUrl = Config.env.baseUploadsUrl + res.key;\n this.props.onUploadSuccess(fileUrl, uploadUri);\n console.log('Upload success', fileUrl);\n return { success: true, url: fileUrl, uploadUri };\n } catch (error) {\n console.error(`Upload failed for ${name}:`, error);\n this.props.onUploadFailed(uploadUri, error.message);\n return { success: false, error, uploadUri };\n }\n });\n\n // Wait for all uploads to complete\n const results = await Promise.all(uploadPromises);\n return results;\n } catch (error) {\n console.error('Document upload error:', error);\n return [];\n } finally {\n this.setState({ isUploading: false, uploadProgress: 0 });\n }\n };\n\n renderUploadButton = () => {\n const { buttonTitle, buttonStyle, buttonTextStyle, disabled } = this.props;\n const { isUploading } = this.state;\n const mainColor = getMainBrandingColourFromState(this.props);\n\n return (\n <TouchableOpacity\n style={[styles.uploadButton, { borderColor: mainColor }, buttonStyle]}\n onPress={this.pickDocument}\n disabled={isUploading || disabled}\n activeOpacity={0.7}\n >\n <View style={styles.buttonContent}>\n {isUploading ? (\n <ActivityIndicator color={mainColor} />\n ) : (\n <Icon name=\"attachment\" type=\"entypo\" color={mainColor} size={18} style={styles.icon} />\n )}\n <Text style={[styles.buttonText, { color: mainColor }, buttonTextStyle]}>{buttonTitle}</Text>\n </View>\n </TouchableOpacity>\n );\n };\n\n renderProgress = () => {\n const { uploadProgress } = this.state;\n if (uploadProgress <= 0 || uploadProgress >= 1) return null;\n\n return (\n <View style={styles.progressContainer}>\n <View style={styles.progressBar}>\n <View style={[styles.progressFill, { width: `${uploadProgress * 100}%` }]} />\n </View>\n <Text style={styles.progressText}>{Math.round(uploadProgress * 100)}%</Text>\n </View>\n );\n };\n\n render() {\n return (\n <View style={styles.container}>\n {this.renderUploadButton()}\n {this.renderProgress()}\n </View>\n );\n }\n}\n\nconst styles = StyleSheet.create({\n container: {\n marginVertical: 10,\n },\n uploadButton: {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n paddingVertical: 8,\n paddingHorizontal: 16,\n borderRadius: 6,\n backgroundColor: '#fff',\n borderWidth: 1,\n borderColor: '#007AFF',\n },\n buttonContent: {\n flexDirection: 'row',\n alignItems: 'center',\n },\n buttonText: {\n color: '#fff',\n fontSize: 16,\n fontWeight: '500',\n marginLeft: 8,\n },\n icon: {\n marginRight: 8,\n },\n progressContainer: {\n marginTop: 8,\n alignItems: 'center',\n },\n progressBar: {\n height: 4,\n width: '100%',\n backgroundColor: '#E0E0E0',\n borderRadius: 2,\n overflow: 'hidden',\n },\n progressFill: {\n height: '100%',\n backgroundColor: '#4CAF50',\n },\n progressText: {\n marginTop: 4,\n fontSize: 12,\n color: TEXT_DARK,\n },\n});\n\nconst mapStateToProps = state => {\n const { user } = state;\n return {\n user,\n colourBrandingMain: getMainBrandingColourFromState(state),\n };\n};\n\nexport default connect(mapStateToProps)(DocumentUploader);\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -3,7 +3,7 @@ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object
|
|
|
3
3
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
4
4
|
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
5
5
|
import React, { Component } from 'react';
|
|
6
|
-
import { View, Image, ImageBackground, TouchableOpacity, Text, KeyboardAvoidingView, Platform, ScrollView } from 'react-native';
|
|
6
|
+
import { View, Image, ImageBackground, TouchableOpacity, Text, KeyboardAvoidingView, Platform, ScrollView, Alert } from 'react-native';
|
|
7
7
|
import { GiftedChat, Bubble, MessageText, Send, InputToolbar, Composer } from 'react-native-gifted-chat';
|
|
8
8
|
import { connect } from 'react-redux';
|
|
9
9
|
import _ from 'lodash';
|
|
@@ -17,6 +17,7 @@ import { PDFPopup } from './PDFPopup';
|
|
|
17
17
|
import { Attachment } from './Attachment';
|
|
18
18
|
import PlussChatMessage from './PlussChatMessage';
|
|
19
19
|
import { TextStyle } from './TextStyle';
|
|
20
|
+
import { ConfirmPopup } from './ConfirmPopup';
|
|
20
21
|
import { TEXT_DARK, LINEGREY, TEXT_DARKEST, getMainBrandingColourFromState, getLightBrandingColourFromState, BG_GREY, TEXT_BLUEGREY } from '../colours';
|
|
21
22
|
import { getEnabledTabsFromState, get1400, getThumb300, imageExists, isVideo, getImageSource, getFileName } from '../helper';
|
|
22
23
|
import Config, { Services } from '../config';
|
|
@@ -189,6 +190,52 @@ class PlussChat extends Component {
|
|
|
189
190
|
replyingTo: message
|
|
190
191
|
});
|
|
191
192
|
});
|
|
193
|
+
_defineProperty(this, "onDelete", message => {
|
|
194
|
+
// Only proceed if delete handler is provided
|
|
195
|
+
if (!this.props.onDeleteMessage) {
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
// Only allow deletion of own messages
|
|
200
|
+
if (message.user._id !== this.props.user.uid) {
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
this.setState({
|
|
204
|
+
showDeleteMessageConfirm: true,
|
|
205
|
+
messageToDelete: message
|
|
206
|
+
});
|
|
207
|
+
});
|
|
208
|
+
_defineProperty(this, "onCancelDeleteMessage", () => {
|
|
209
|
+
this.setState({
|
|
210
|
+
showDeleteMessageConfirm: false,
|
|
211
|
+
messageToDelete: null
|
|
212
|
+
});
|
|
213
|
+
});
|
|
214
|
+
_defineProperty(this, "onConfirmDeleteMessage", async () => {
|
|
215
|
+
const {
|
|
216
|
+
messageToDelete
|
|
217
|
+
} = this.state;
|
|
218
|
+
if (!messageToDelete) return;
|
|
219
|
+
this.setState({
|
|
220
|
+
showDeleteMessageConfirm: false
|
|
221
|
+
});
|
|
222
|
+
try {
|
|
223
|
+
// Call the parent's delete handler if provided
|
|
224
|
+
if (this.props.onDeleteMessage) {
|
|
225
|
+
await this.props.onDeleteMessage(messageToDelete);
|
|
226
|
+
}
|
|
227
|
+
this.setState({
|
|
228
|
+
messageToDelete: null
|
|
229
|
+
});
|
|
230
|
+
} catch (error) {
|
|
231
|
+
// Handle error gracefully if parent handler fails
|
|
232
|
+
console.log('onConfirmDeleteMessage error', error);
|
|
233
|
+
// Error is already handled by parent component
|
|
234
|
+
this.setState({
|
|
235
|
+
messageToDelete: null
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
});
|
|
192
239
|
_defineProperty(this, "onRemoveImage", url => {
|
|
193
240
|
const imagesToUpload = this.state.imagesToUpload.filter(image => image.url !== url);
|
|
194
241
|
this.setState({
|
|
@@ -219,7 +266,9 @@ class PlussChat extends Component {
|
|
|
219
266
|
imagePopupOpen: false,
|
|
220
267
|
imagesToUpload: [],
|
|
221
268
|
showFullscreenVideo: false,
|
|
222
|
-
currentVideoUrl: ''
|
|
269
|
+
currentVideoUrl: '',
|
|
270
|
+
showDeleteMessageConfirm: false,
|
|
271
|
+
messageToDelete: null
|
|
223
272
|
};
|
|
224
273
|
this.checkThumb = null;
|
|
225
274
|
}
|
|
@@ -331,11 +380,22 @@ class PlussChat extends Component {
|
|
|
331
380
|
colourBrandingMain: this.props.colourBrandingMain,
|
|
332
381
|
onPressReply: () => {
|
|
333
382
|
this.onReply(props.currentMessage);
|
|
334
|
-
}
|
|
383
|
+
},
|
|
384
|
+
onPressDelete: this.props.onDeleteMessage ? () => {
|
|
385
|
+
this.onDelete(props.currentMessage);
|
|
386
|
+
} : null
|
|
335
387
|
}, props));
|
|
336
388
|
}
|
|
337
389
|
renderMessageText(messageTextProps) {
|
|
338
|
-
|
|
390
|
+
// If message is deleted, show placeholder text
|
|
391
|
+
const props = messageTextProps.currentMessage.deleted ? {
|
|
392
|
+
...messageTextProps,
|
|
393
|
+
currentMessage: {
|
|
394
|
+
...messageTextProps.currentMessage,
|
|
395
|
+
text: '[Message deleted]'
|
|
396
|
+
}
|
|
397
|
+
} : messageTextProps;
|
|
398
|
+
return /*#__PURE__*/React.createElement(MessageText, _extends({}, props, {
|
|
339
399
|
textStyle: {
|
|
340
400
|
left: {
|
|
341
401
|
fontFamily: 'sf-regular',
|
|
@@ -382,6 +442,10 @@ class PlussChat extends Component {
|
|
|
382
442
|
currentMessage,
|
|
383
443
|
position
|
|
384
444
|
}) {
|
|
445
|
+
// Don't show images or attachments for deleted messages
|
|
446
|
+
if (currentMessage.deleted) {
|
|
447
|
+
return null;
|
|
448
|
+
}
|
|
385
449
|
if (currentMessage.image) {
|
|
386
450
|
const images = typeof currentMessage.image === 'string' ? [currentMessage.image] : currentMessage.image;
|
|
387
451
|
const containerWidth = (() => {
|
|
@@ -756,16 +820,26 @@ class PlussChat extends Component {
|
|
|
756
820
|
pdfCount: 1
|
|
757
821
|
});
|
|
758
822
|
}
|
|
823
|
+
renderDeleteConfirmPopup() {
|
|
824
|
+
return /*#__PURE__*/React.createElement(ConfirmPopup, {
|
|
825
|
+
visible: this.state.showDeleteMessageConfirm,
|
|
826
|
+
onConfirm: this.onConfirmDeleteMessage,
|
|
827
|
+
onCancel: this.onCancelDeleteMessage,
|
|
828
|
+
text: "Are you sure you want to delete this message?",
|
|
829
|
+
yesText: "Delete",
|
|
830
|
+
noText: "Cancel"
|
|
831
|
+
});
|
|
832
|
+
}
|
|
759
833
|
render() {
|
|
760
834
|
if (Platform.OS === 'android' && !this.props.noAndroidAvoid) {
|
|
761
835
|
return /*#__PURE__*/React.createElement(KeyboardAvoidingView, {
|
|
762
836
|
behavior: Platform.OS === 'ios' && 'padding',
|
|
763
837
|
style: styles.chatContainer
|
|
764
|
-
}, this.renderChat(), this.renderImageUploader(), this.renderImagePopup(), this.renderVideoPlayerPopup(), this.renderPDF());
|
|
838
|
+
}, this.renderChat(), this.renderImageUploader(), this.renderImagePopup(), this.renderVideoPlayerPopup(), this.renderPDF(), this.renderDeleteConfirmPopup());
|
|
765
839
|
}
|
|
766
840
|
return /*#__PURE__*/React.createElement(View, {
|
|
767
841
|
style: styles.chatContainer
|
|
768
|
-
}, this.renderChat(), this.renderImageUploader(), this.renderImagePopup(), this.renderVideoPlayerPopup(), this.renderPDF());
|
|
842
|
+
}, this.renderChat(), this.renderImageUploader(), this.renderImagePopup(), this.renderVideoPlayerPopup(), this.renderPDF(), this.renderDeleteConfirmPopup());
|
|
769
843
|
}
|
|
770
844
|
}
|
|
771
845
|
const styles = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"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","_defineProperty","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","createElement","_extends","renderMessageImage","isCustomViewBottom","left","backgroundColor","borderRadius","right","colourBrandingLight","containerToNextStyle","borderBottomLeftRadius","borderBottomRightRadius","containerToPreviousStyle","borderTopLeftRadius","borderTopRightRadius","renderMessage","key","RowId","colourBrandingMain","onPressReply","onReply","renderMessageText","messageTextProps","textStyle","fontFamily","fontSize","color","marginTop","marginBottom","marginLeft","marginRight","linkStyle","renderTime","renderDay","dayProps","renderCustomView","position","containerWidth","style","styles","imagesContainer","width","paddingVertical","thumb","onPress","toggleFullscreenVideo","bind","messageImageSmall","messageImageLarge","source","imagePlayContainer","type","iconStyle","imageControlIcon","onPressImage","onOpenAttachment","title","onPressEvent","eventContainer","eventImage","eventImageMargin","Thumbnail","eventInfo","numberOfLines","eventTitle","eventInfoAlign","Title","eventDate","utc","StartTime","local","format","onPressAttachment","renderSend","top","alwaysShowSend","containerStyle","sendContainer","height","send","renderAccessory","hasAttachment","horizontal","uploadImagesContainer","uploader","progressTextStyle","isVideoUrl","accessoryImageContainer","accessoryImage","imageStyle","accessoryImageBorder","previewItemRemoveButton","onRemoveImage","hitSlop","bottom","previewItemRemoveContainer","previewItemRemoveIcon","renderInputToolbar","inputContainer","renderComposer","accessoryStyle","accessory","renderFooter","renderLoading","justifyContent","alignContent","size","renderAvatar","Diameter","_this$state$replyingT","_this$state$replyingT2","composerContainer","replyingRemoveButton","replyingRemoveContainer","replyingRemoveIcon","composerInputWrapper","input","OS","composerHeight","placeholder","textInputStyle","inputText","textInputProps","onFocus","onFocusInput","onBlur","onBlurInput","renderChat","noTab","iosBottomOffset","minInputToolbarHeight","keyboardShouldPersistTaps","renderAvatarOnTop","bottomOffset","renderImageUploader","ref","onUploadStarted","onUploadProgress","onUploadSuccess","onUploadFailed","onLibrarySelected","quality","allowsEditing","fileName","popupTitle","userId","multiple","allowVideo","renderImagePopup","visible","index","onClose","renderVideoPlayerPopup","renderPDF","onCloseAttachment","pdfCount","render","noAndroidAvoid","behavior","chatContainer","flex","paddingLeft","paddingRight","flexDirection","resizeMode","minHeight","textAlign","alignSelf","margin","alignItems","borderBottomWidth","borderBottomColor","borderWidth","borderColor","borderTopWidth","borderTopColor","settingDropDownOpen","flexWrap","overflow","textShadowColor","textShadowOffset","mapStateToProps"],"sources":["PlussChat.js"],"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 '@rneui/themed';\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 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 const hasAttachment = this.hasImagesAttached(props.imagesToUpload);\n if (!hasAttachment) {\n return null;\n }\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 const hasAttachment = this.hasImagesAttached(props.imagesToUpload);\n return (\n <InputToolbar\n {...props}\n containerStyle={styles.inputContainer}\n renderComposer={this.renderComposer.bind(this)}\n renderAccessory={hasAttachment ? this.renderAccessory.bind(this) : null}\n accessoryStyle={hasAttachment && 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 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 style={styles.composerInputWrapper}>\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 </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 =\n this.MIN_COMPOSER_HEIGHT + 16 + (this.state.replyingTo ? 30 : 0) + (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 composerInputWrapper: {\n flex: 1,\n flexDirection: 'row',\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"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["React","Component","View","Image","ImageBackground","TouchableOpacity","Text","KeyboardAvoidingView","Platform","ScrollView","Alert","GiftedChat","Bubble","MessageText","Send","InputToolbar","Composer","connect","_","moment","Icon","getBottomSpace","Spinner","ProfilePic","PlussChatTime","PDFPopup","Attachment","PlussChatMessage","TextStyle","ConfirmPopup","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","_defineProperty","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","onDeleteMessage","user","_id","uid","showDeleteMessageConfirm","messageToDelete","error","console","log","filter","showFullscreenVideo","length","currentVideoUrl","isSingleTab","tabCount","MIN_COMPOSER_HEIGHT","select","ios","android","currentUser","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","createElement","_extends","renderMessageImage","isCustomViewBottom","left","backgroundColor","borderRadius","right","colourBrandingLight","containerToNextStyle","borderBottomLeftRadius","borderBottomRightRadius","containerToPreviousStyle","borderTopLeftRadius","borderTopRightRadius","renderMessage","key","RowId","colourBrandingMain","onPressReply","onReply","onPressDelete","onDelete","renderMessageText","messageTextProps","deleted","textStyle","fontFamily","fontSize","color","marginTop","marginBottom","marginLeft","marginRight","linkStyle","renderTime","renderDay","dayProps","renderCustomView","position","containerWidth","style","styles","imagesContainer","width","paddingVertical","thumb","onPress","toggleFullscreenVideo","bind","messageImageSmall","messageImageLarge","source","imagePlayContainer","type","iconStyle","imageControlIcon","onPressImage","onOpenAttachment","title","onPressEvent","eventContainer","eventImage","eventImageMargin","Thumbnail","eventInfo","numberOfLines","eventTitle","eventInfoAlign","Title","eventDate","utc","StartTime","local","format","onPressAttachment","renderSend","top","alwaysShowSend","containerStyle","sendContainer","height","send","renderAccessory","hasAttachment","horizontal","uploadImagesContainer","uploader","progressTextStyle","isVideoUrl","accessoryImageContainer","accessoryImage","imageStyle","accessoryImageBorder","previewItemRemoveButton","onRemoveImage","hitSlop","bottom","previewItemRemoveContainer","previewItemRemoveIcon","renderInputToolbar","inputContainer","renderComposer","accessoryStyle","accessory","renderFooter","renderLoading","justifyContent","alignContent","size","renderAvatar","Diameter","_this$state$replyingT","_this$state$replyingT2","composerContainer","replyingRemoveButton","replyingRemoveContainer","replyingRemoveIcon","composerInputWrapper","input","OS","composerHeight","placeholder","textInputStyle","inputText","textInputProps","onFocus","onFocusInput","onBlur","onBlurInput","renderChat","noTab","iosBottomOffset","minInputToolbarHeight","keyboardShouldPersistTaps","renderAvatarOnTop","bottomOffset","renderImageUploader","ref","onUploadStarted","onUploadProgress","onUploadSuccess","onUploadFailed","onLibrarySelected","quality","allowsEditing","fileName","popupTitle","userId","multiple","allowVideo","renderImagePopup","visible","index","onClose","renderVideoPlayerPopup","renderPDF","onCloseAttachment","pdfCount","renderDeleteConfirmPopup","onConfirm","onConfirmDeleteMessage","onCancel","onCancelDeleteMessage","yesText","noText","render","noAndroidAvoid","behavior","chatContainer","flex","paddingLeft","paddingRight","flexDirection","resizeMode","minHeight","textAlign","alignSelf","margin","alignItems","borderBottomWidth","borderBottomColor","borderWidth","borderColor","borderTopWidth","borderTopColor","settingDropDownOpen","flexWrap","overflow","textShadowColor","textShadowOffset","mapStateToProps"],"sources":["PlussChat.js"],"sourcesContent":["import React, { Component } from 'react';\nimport { View, Image, ImageBackground, TouchableOpacity, Text, KeyboardAvoidingView, Platform, ScrollView, Alert } 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 '@rneui/themed';\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 { ConfirmPopup } from './ConfirmPopup';\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 showDeleteMessageConfirm: false,\n messageToDelete: null,\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 onDelete = message => {\n // Only proceed if delete handler is provided\n if (!this.props.onDeleteMessage) {\n return;\n }\n \n // Only allow deletion of own messages\n if (message.user._id !== this.props.user.uid) {\n return;\n }\n \n this.setState({\n showDeleteMessageConfirm: true,\n messageToDelete: message,\n });\n };\n\n onCancelDeleteMessage = () => {\n this.setState({\n showDeleteMessageConfirm: false,\n messageToDelete: null,\n });\n };\n\n onConfirmDeleteMessage = async () => {\n const { messageToDelete } = this.state;\n if (!messageToDelete) return;\n\n this.setState({\n showDeleteMessageConfirm: false,\n });\n\n try {\n // Call the parent's delete handler if provided\n if (this.props.onDeleteMessage) {\n await this.props.onDeleteMessage(messageToDelete);\n }\n \n this.setState({\n messageToDelete: null,\n });\n } catch (error) {\n // Handle error gracefully if parent handler fails\n console.log('onConfirmDeleteMessage error', error);\n // Error is already handled by parent component\n this.setState({ messageToDelete: null });\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 onPressDelete={this.props.onDeleteMessage ? () => {\n this.onDelete(props.currentMessage);\n } : null}\n {...props}\n />\n );\n }\n renderMessageText(messageTextProps) {\n // If message is deleted, show placeholder text\n const props = messageTextProps.currentMessage.deleted \n ? {\n ...messageTextProps,\n currentMessage: {\n ...messageTextProps.currentMessage,\n text: '[Message deleted]',\n },\n }\n : messageTextProps;\n \n return (\n <MessageText\n {...props}\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 // Don't show images or attachments for deleted messages\n if (currentMessage.deleted) {\n return null;\n }\n \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 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 const hasAttachment = this.hasImagesAttached(props.imagesToUpload);\n if (!hasAttachment) {\n return null;\n }\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 const hasAttachment = this.hasImagesAttached(props.imagesToUpload);\n return (\n <InputToolbar\n {...props}\n containerStyle={styles.inputContainer}\n renderComposer={this.renderComposer.bind(this)}\n renderAccessory={hasAttachment ? this.renderAccessory.bind(this) : null}\n accessoryStyle={hasAttachment && 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 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 style={styles.composerInputWrapper}>\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 </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 =\n this.MIN_COMPOSER_HEIGHT + 16 + (this.state.replyingTo ? 30 : 0) + (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 renderDeleteConfirmPopup() {\n return (\n <ConfirmPopup\n visible={this.state.showDeleteMessageConfirm}\n onConfirm={this.onConfirmDeleteMessage}\n onCancel={this.onCancelDeleteMessage}\n text=\"Are you sure you want to delete this message?\"\n yesText=\"Delete\"\n noText=\"Cancel\"\n />\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 {this.renderDeleteConfirmPopup()}\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 {this.renderDeleteConfirmPopup()}\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 composerInputWrapper: {\n flex: 1,\n flexDirection: 'row',\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"],"mappings":"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","ignoreList":[]}
|
|
@@ -111,7 +111,8 @@ export default class PlussChatMessage extends React.Component {
|
|
|
111
111
|
}, nameText);
|
|
112
112
|
}
|
|
113
113
|
renderReply() {
|
|
114
|
-
|
|
114
|
+
// Don't show reply quote for deleted messages
|
|
115
|
+
if (!this.props.currentMessage || !this.props.currentMessage.replyingTo || this.props.currentMessage.deleted) {
|
|
115
116
|
return null;
|
|
116
117
|
}
|
|
117
118
|
return /*#__PURE__*/React.createElement(View, {
|
|
@@ -123,6 +124,10 @@ export default class PlussChatMessage extends React.Component {
|
|
|
123
124
|
}, (this.props.currentMessage.replyingTo.text || '').substr(0, 100))));
|
|
124
125
|
}
|
|
125
126
|
renderReplyButton() {
|
|
127
|
+
// Don't show reply button for deleted messages
|
|
128
|
+
if (this.props.currentMessage.deleted) {
|
|
129
|
+
return null;
|
|
130
|
+
}
|
|
126
131
|
return /*#__PURE__*/React.createElement(TouchableOpacity, {
|
|
127
132
|
style: styles[this.props.position].replyContainer,
|
|
128
133
|
onPress: this.props.onPressReply
|
|
@@ -133,6 +138,21 @@ export default class PlussChatMessage extends React.Component {
|
|
|
133
138
|
}
|
|
134
139
|
}, "Reply"));
|
|
135
140
|
}
|
|
141
|
+
renderDeleteButton() {
|
|
142
|
+
// Only show delete button if handler is provided and for current user's messages that aren't already deleted
|
|
143
|
+
if (!this.props.onPressDelete || !this.isCurrentUser() || this.props.currentMessage.deleted) {
|
|
144
|
+
return null;
|
|
145
|
+
}
|
|
146
|
+
return /*#__PURE__*/React.createElement(TouchableOpacity, {
|
|
147
|
+
style: styles[this.props.position].deleteContainer,
|
|
148
|
+
onPress: this.props.onPressDelete
|
|
149
|
+
}, /*#__PURE__*/React.createElement(TextStyle, {
|
|
150
|
+
type: "button",
|
|
151
|
+
style: {
|
|
152
|
+
color: this.props.colourBrandingMain
|
|
153
|
+
}
|
|
154
|
+
}, "Delete"));
|
|
155
|
+
}
|
|
136
156
|
render() {
|
|
137
157
|
const sameUserAsLast = isSameUser(this.props.currentMessage, this.props.previousMessage);
|
|
138
158
|
const sameUser = isSameUser(this.props.currentMessage, this.props.nextMessage);
|
|
@@ -142,7 +162,9 @@ export default class PlussChatMessage extends React.Component {
|
|
|
142
162
|
}, !this.props.inverted && {
|
|
143
163
|
marginBottom: 2
|
|
144
164
|
}, this.props.containerStyle[this.props.position]]
|
|
145
|
-
}, this.props.position === 'left' ? this.renderAvatar() : null, /*#__PURE__*/React.createElement(View, null, this.renderReply(), this.renderBubble(),
|
|
165
|
+
}, this.props.position === 'left' ? this.renderAvatar() : null, /*#__PURE__*/React.createElement(View, null, this.renderReply(), this.renderBubble(), /*#__PURE__*/React.createElement(View, {
|
|
166
|
+
style: styles[this.props.position].actionButtons
|
|
167
|
+
}, this.renderReplyButton(), this.renderDeleteButton())), this.props.position === 'right' ? this.renderAvatar() : null)));
|
|
146
168
|
}
|
|
147
169
|
}
|
|
148
170
|
const styles = {
|
|
@@ -183,7 +205,15 @@ const styles = {
|
|
|
183
205
|
textAlign: 'left'
|
|
184
206
|
},
|
|
185
207
|
replyContainer: {
|
|
186
|
-
paddingLeft: 20
|
|
208
|
+
paddingLeft: 20,
|
|
209
|
+
paddingRight: 10
|
|
210
|
+
},
|
|
211
|
+
deleteContainer: {
|
|
212
|
+
paddingLeft: 10
|
|
213
|
+
},
|
|
214
|
+
actionButtons: {
|
|
215
|
+
flexDirection: 'row',
|
|
216
|
+
alignItems: 'center'
|
|
187
217
|
}
|
|
188
218
|
}),
|
|
189
219
|
right: StyleSheet.create({
|
|
@@ -223,8 +253,15 @@ const styles = {
|
|
|
223
253
|
textAlign: 'right'
|
|
224
254
|
},
|
|
225
255
|
replyContainer: {
|
|
226
|
-
alignSelf: 'flex-end',
|
|
227
256
|
paddingRight: 10
|
|
257
|
+
},
|
|
258
|
+
deleteContainer: {
|
|
259
|
+
paddingRight: 10
|
|
260
|
+
},
|
|
261
|
+
actionButtons: {
|
|
262
|
+
flexDirection: 'row',
|
|
263
|
+
alignItems: 'center',
|
|
264
|
+
alignSelf: 'flex-end'
|
|
228
265
|
}
|
|
229
266
|
})
|
|
230
267
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["PropTypes","React","View","StyleSheet","Text","TouchableOpacity","ViewPropTypes","_","Avatar","Bubble","SystemMessage","Day","utils","TEXT_MID","TEXT_LIGHT","TEXT_DARK","TEXT_SUPER_LIGHT","getFirstName","TextStyle","isSameUser","isSameDay","PlussChatMessage","Component","getInnerComponentProps","containerStyle","props","isCurrentUser","user","_id","currentMessage","renderDay","createdAt","dayProps","createElement","renderBubble","bubbleProps","renderSystemMessage","systemMessageProps","renderAvatar","showUserAvatar","avatarProps","avatar","isEmpty","_extends","imageStyle","left","width","height","borderRadius","right","marginRight","marginLeft","renderName","nameProps","name","nameText","replyingTo","style","styles","position","renderReply","replyBubble","replyBubbleInner","replyBubbleText","text","substr","renderReplyButton","replyContainer","onPress","onPressReply","type","color","colourBrandingMain","render","sameUserAsLast","previousMessage","sameUser","nextMessage","system","container","marginBottom","inverted","create","flexDirection","alignItems","justifyContent","fontFamily","fontSize","textAlign","paddingLeft","padding","paddingBottom","opacity","backgroundColor","paddingRight","alignSelf","defaultProps","undefined","propTypes","func","bool","oneOf","object","shape"],"sources":["PlussChatMessage.js"],"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, StyleSheet, Text, TouchableOpacity } from 'react-native';\nimport { ViewPropTypes } from 'deprecated-react-native-prop-types';\nimport _ from 'lodash';\n\nimport { Avatar, Bubble, SystemMessage, Day, utils } from 'react-native-gifted-chat';\nimport { TEXT_MID, TEXT_LIGHT, TEXT_DARK, TEXT_SUPER_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}>\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.7,\n backgroundColor: TEXT_SUPER_LIGHT,\n },\n replyBubbleText: {\n fontFamily: 'sf-regular',\n color: TEXT_DARK,\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.7,\n backgroundColor: TEXT_SUPER_LIGHT,\n },\n replyBubbleText: {\n fontFamily: 'sf-regular',\n color: TEXT_DARK,\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"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["PropTypes","React","View","StyleSheet","Text","TouchableOpacity","ViewPropTypes","_","Avatar","Bubble","SystemMessage","Day","utils","TEXT_MID","TEXT_LIGHT","TEXT_DARK","TEXT_SUPER_LIGHT","getFirstName","TextStyle","isSameUser","isSameDay","PlussChatMessage","Component","getInnerComponentProps","containerStyle","props","isCurrentUser","user","_id","currentMessage","renderDay","createdAt","dayProps","createElement","renderBubble","bubbleProps","renderSystemMessage","systemMessageProps","renderAvatar","showUserAvatar","avatarProps","avatar","isEmpty","_extends","imageStyle","left","width","height","borderRadius","right","marginRight","marginLeft","renderName","nameProps","name","nameText","replyingTo","style","styles","position","renderReply","deleted","replyBubble","replyBubbleInner","replyBubbleText","text","substr","renderReplyButton","replyContainer","onPress","onPressReply","type","color","colourBrandingMain","renderDeleteButton","onPressDelete","deleteContainer","render","sameUserAsLast","previousMessage","sameUser","nextMessage","system","container","marginBottom","inverted","actionButtons","create","flexDirection","alignItems","justifyContent","fontFamily","fontSize","textAlign","paddingLeft","padding","paddingBottom","opacity","backgroundColor","paddingRight","alignSelf","defaultProps","undefined","propTypes","func","bool","oneOf","object","shape"],"sources":["PlussChatMessage.js"],"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, StyleSheet, Text, TouchableOpacity } from 'react-native';\nimport { ViewPropTypes } from 'deprecated-react-native-prop-types';\nimport _ from 'lodash';\n\nimport { Avatar, Bubble, SystemMessage, Day, utils } from 'react-native-gifted-chat';\nimport { TEXT_MID, TEXT_LIGHT, TEXT_DARK, TEXT_SUPER_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 // Don't show reply quote for deleted messages\n if (!this.props.currentMessage || !this.props.currentMessage.replyingTo || this.props.currentMessage.deleted) {\n return null;\n }\n return (\n <View style={styles[this.props.position].replyBubble}>\n <View style={styles[this.props.position].replyBubbleInner}>\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 // Don't show reply button for deleted messages\n if (this.props.currentMessage.deleted) {\n return null;\n }\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 renderDeleteButton() {\n // Only show delete button if handler is provided and for current user's messages that aren't already deleted\n if (!this.props.onPressDelete || !this.isCurrentUser() || this.props.currentMessage.deleted) {\n return null;\n }\n return (\n <TouchableOpacity style={styles[this.props.position].deleteContainer} onPress={this.props.onPressDelete}>\n <TextStyle type=\"button\" style={{ color: this.props.colourBrandingMain }}>\n Delete\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 <View style={styles[this.props.position].actionButtons}>\n {this.renderReplyButton()}\n {this.renderDeleteButton()}\n </View>\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.7,\n backgroundColor: TEXT_SUPER_LIGHT,\n },\n replyBubbleText: {\n fontFamily: 'sf-regular',\n color: TEXT_DARK,\n fontSize: 13,\n textAlign: 'left',\n },\n replyContainer: {\n paddingLeft: 20,\n paddingRight: 10,\n },\n deleteContainer: {\n paddingLeft: 10,\n },\n actionButtons: {\n flexDirection: 'row',\n alignItems: 'center',\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.7,\n backgroundColor: TEXT_SUPER_LIGHT,\n },\n replyBubbleText: {\n fontFamily: 'sf-regular',\n color: TEXT_DARK,\n fontSize: 13,\n textAlign: 'right',\n },\n replyContainer: {\n paddingRight: 10,\n },\n deleteContainer: {\n paddingRight: 10,\n },\n actionButtons: {\n flexDirection: 'row',\n alignItems: 'center',\n alignSelf: 'flex-end',\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"],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React, { Component } from 'react';
|
|
2
2
|
import { View, TouchableOpacity, Text, StyleSheet, ActivityIndicator } from 'react-native';
|
|
3
|
-
import { Icon } from '
|
|
3
|
+
import { Icon } from '@rneui/themed';
|
|
4
4
|
import * as DocumentPicker from 'expo-document-picker';
|
|
5
5
|
import { connect } from 'react-redux';
|
|
6
6
|
import Config from '../config';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React, { Component } from 'react';
|
|
2
|
-
import { View, Image, ImageBackground, TouchableOpacity, Text, KeyboardAvoidingView, Platform, ScrollView } from 'react-native';
|
|
2
|
+
import { View, Image, ImageBackground, TouchableOpacity, Text, KeyboardAvoidingView, Platform, ScrollView, Alert } from 'react-native';
|
|
3
3
|
import { GiftedChat, Bubble, MessageText, Send, InputToolbar, Composer } from 'react-native-gifted-chat';
|
|
4
4
|
import { connect } from 'react-redux';
|
|
5
5
|
import _ from 'lodash';
|
|
@@ -13,6 +13,7 @@ import { PDFPopup } from './PDFPopup';
|
|
|
13
13
|
import { Attachment } from './Attachment';
|
|
14
14
|
import PlussChatMessage from './PlussChatMessage';
|
|
15
15
|
import { TextStyle } from './TextStyle';
|
|
16
|
+
import { ConfirmPopup } from './ConfirmPopup';
|
|
16
17
|
import {
|
|
17
18
|
TEXT_DARK,
|
|
18
19
|
LINEGREY,
|
|
@@ -62,6 +63,8 @@ class PlussChat extends Component {
|
|
|
62
63
|
imagesToUpload: [],
|
|
63
64
|
showFullscreenVideo: false,
|
|
64
65
|
currentVideoUrl: '',
|
|
66
|
+
showDeleteMessageConfirm: false,
|
|
67
|
+
messageToDelete: null,
|
|
65
68
|
};
|
|
66
69
|
this.checkThumb = null;
|
|
67
70
|
}
|
|
@@ -256,6 +259,55 @@ class PlussChat extends Component {
|
|
|
256
259
|
});
|
|
257
260
|
};
|
|
258
261
|
|
|
262
|
+
onDelete = message => {
|
|
263
|
+
// Only proceed if delete handler is provided
|
|
264
|
+
if (!this.props.onDeleteMessage) {
|
|
265
|
+
return;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
// Only allow deletion of own messages
|
|
269
|
+
if (message.user._id !== this.props.user.uid) {
|
|
270
|
+
return;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
this.setState({
|
|
274
|
+
showDeleteMessageConfirm: true,
|
|
275
|
+
messageToDelete: message,
|
|
276
|
+
});
|
|
277
|
+
};
|
|
278
|
+
|
|
279
|
+
onCancelDeleteMessage = () => {
|
|
280
|
+
this.setState({
|
|
281
|
+
showDeleteMessageConfirm: false,
|
|
282
|
+
messageToDelete: null,
|
|
283
|
+
});
|
|
284
|
+
};
|
|
285
|
+
|
|
286
|
+
onConfirmDeleteMessage = async () => {
|
|
287
|
+
const { messageToDelete } = this.state;
|
|
288
|
+
if (!messageToDelete) return;
|
|
289
|
+
|
|
290
|
+
this.setState({
|
|
291
|
+
showDeleteMessageConfirm: false,
|
|
292
|
+
});
|
|
293
|
+
|
|
294
|
+
try {
|
|
295
|
+
// Call the parent's delete handler if provided
|
|
296
|
+
if (this.props.onDeleteMessage) {
|
|
297
|
+
await this.props.onDeleteMessage(messageToDelete);
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
this.setState({
|
|
301
|
+
messageToDelete: null,
|
|
302
|
+
});
|
|
303
|
+
} catch (error) {
|
|
304
|
+
// Handle error gracefully if parent handler fails
|
|
305
|
+
console.log('onConfirmDeleteMessage error', error);
|
|
306
|
+
// Error is already handled by parent component
|
|
307
|
+
this.setState({ messageToDelete: null });
|
|
308
|
+
}
|
|
309
|
+
};
|
|
310
|
+
|
|
259
311
|
closeGallery() {
|
|
260
312
|
this.setState({
|
|
261
313
|
imagePopupSource: [],
|
|
@@ -353,14 +405,28 @@ class PlussChat extends Component {
|
|
|
353
405
|
onPressReply={() => {
|
|
354
406
|
this.onReply(props.currentMessage);
|
|
355
407
|
}}
|
|
408
|
+
onPressDelete={this.props.onDeleteMessage ? () => {
|
|
409
|
+
this.onDelete(props.currentMessage);
|
|
410
|
+
} : null}
|
|
356
411
|
{...props}
|
|
357
412
|
/>
|
|
358
413
|
);
|
|
359
414
|
}
|
|
360
415
|
renderMessageText(messageTextProps) {
|
|
416
|
+
// If message is deleted, show placeholder text
|
|
417
|
+
const props = messageTextProps.currentMessage.deleted
|
|
418
|
+
? {
|
|
419
|
+
...messageTextProps,
|
|
420
|
+
currentMessage: {
|
|
421
|
+
...messageTextProps.currentMessage,
|
|
422
|
+
text: '[Message deleted]',
|
|
423
|
+
},
|
|
424
|
+
}
|
|
425
|
+
: messageTextProps;
|
|
426
|
+
|
|
361
427
|
return (
|
|
362
428
|
<MessageText
|
|
363
|
-
{...
|
|
429
|
+
{...props}
|
|
364
430
|
textStyle={{
|
|
365
431
|
left: {
|
|
366
432
|
fontFamily: 'sf-regular',
|
|
@@ -408,6 +474,11 @@ class PlussChat extends Component {
|
|
|
408
474
|
);
|
|
409
475
|
}
|
|
410
476
|
renderCustomView({ currentMessage, position }) {
|
|
477
|
+
// Don't show images or attachments for deleted messages
|
|
478
|
+
if (currentMessage.deleted) {
|
|
479
|
+
return null;
|
|
480
|
+
}
|
|
481
|
+
|
|
411
482
|
if (currentMessage.image) {
|
|
412
483
|
const images = typeof currentMessage.image === 'string' ? [currentMessage.image] : currentMessage.image;
|
|
413
484
|
const containerWidth = (() => {
|
|
@@ -765,6 +836,19 @@ class PlussChat extends Component {
|
|
|
765
836
|
);
|
|
766
837
|
}
|
|
767
838
|
|
|
839
|
+
renderDeleteConfirmPopup() {
|
|
840
|
+
return (
|
|
841
|
+
<ConfirmPopup
|
|
842
|
+
visible={this.state.showDeleteMessageConfirm}
|
|
843
|
+
onConfirm={this.onConfirmDeleteMessage}
|
|
844
|
+
onCancel={this.onCancelDeleteMessage}
|
|
845
|
+
text="Are you sure you want to delete this message?"
|
|
846
|
+
yesText="Delete"
|
|
847
|
+
noText="Cancel"
|
|
848
|
+
/>
|
|
849
|
+
);
|
|
850
|
+
}
|
|
851
|
+
|
|
768
852
|
render() {
|
|
769
853
|
if (Platform.OS === 'android' && !this.props.noAndroidAvoid) {
|
|
770
854
|
return (
|
|
@@ -774,6 +858,7 @@ class PlussChat extends Component {
|
|
|
774
858
|
{this.renderImagePopup()}
|
|
775
859
|
{this.renderVideoPlayerPopup()}
|
|
776
860
|
{this.renderPDF()}
|
|
861
|
+
{this.renderDeleteConfirmPopup()}
|
|
777
862
|
</KeyboardAvoidingView>
|
|
778
863
|
);
|
|
779
864
|
}
|
|
@@ -784,6 +869,7 @@ class PlussChat extends Component {
|
|
|
784
869
|
{this.renderImagePopup()}
|
|
785
870
|
{this.renderVideoPlayerPopup()}
|
|
786
871
|
{this.renderPDF()}
|
|
872
|
+
{this.renderDeleteConfirmPopup()}
|
|
787
873
|
</View>
|
|
788
874
|
);
|
|
789
875
|
}
|
|
@@ -119,7 +119,8 @@ export default class PlussChatMessage extends React.Component {
|
|
|
119
119
|
}
|
|
120
120
|
|
|
121
121
|
renderReply() {
|
|
122
|
-
|
|
122
|
+
// Don't show reply quote for deleted messages
|
|
123
|
+
if (!this.props.currentMessage || !this.props.currentMessage.replyingTo || this.props.currentMessage.deleted) {
|
|
123
124
|
return null;
|
|
124
125
|
}
|
|
125
126
|
return (
|
|
@@ -134,6 +135,10 @@ export default class PlussChatMessage extends React.Component {
|
|
|
134
135
|
}
|
|
135
136
|
|
|
136
137
|
renderReplyButton() {
|
|
138
|
+
// Don't show reply button for deleted messages
|
|
139
|
+
if (this.props.currentMessage.deleted) {
|
|
140
|
+
return null;
|
|
141
|
+
}
|
|
137
142
|
return (
|
|
138
143
|
<TouchableOpacity style={styles[this.props.position].replyContainer} onPress={this.props.onPressReply}>
|
|
139
144
|
<TextStyle type="button" style={{ color: this.props.colourBrandingMain }}>
|
|
@@ -143,6 +148,20 @@ export default class PlussChatMessage extends React.Component {
|
|
|
143
148
|
);
|
|
144
149
|
}
|
|
145
150
|
|
|
151
|
+
renderDeleteButton() {
|
|
152
|
+
// Only show delete button if handler is provided and for current user's messages that aren't already deleted
|
|
153
|
+
if (!this.props.onPressDelete || !this.isCurrentUser() || this.props.currentMessage.deleted) {
|
|
154
|
+
return null;
|
|
155
|
+
}
|
|
156
|
+
return (
|
|
157
|
+
<TouchableOpacity style={styles[this.props.position].deleteContainer} onPress={this.props.onPressDelete}>
|
|
158
|
+
<TextStyle type="button" style={{ color: this.props.colourBrandingMain }}>
|
|
159
|
+
Delete
|
|
160
|
+
</TextStyle>
|
|
161
|
+
</TouchableOpacity>
|
|
162
|
+
);
|
|
163
|
+
}
|
|
164
|
+
|
|
146
165
|
render() {
|
|
147
166
|
const sameUserAsLast = isSameUser(this.props.currentMessage, this.props.previousMessage);
|
|
148
167
|
const sameUser = isSameUser(this.props.currentMessage, this.props.nextMessage);
|
|
@@ -166,7 +185,10 @@ export default class PlussChatMessage extends React.Component {
|
|
|
166
185
|
<View>
|
|
167
186
|
{this.renderReply()}
|
|
168
187
|
{this.renderBubble()}
|
|
169
|
-
{this.
|
|
188
|
+
<View style={styles[this.props.position].actionButtons}>
|
|
189
|
+
{this.renderReplyButton()}
|
|
190
|
+
{this.renderDeleteButton()}
|
|
191
|
+
</View>
|
|
170
192
|
</View>
|
|
171
193
|
{this.props.position === 'right' ? this.renderAvatar() : null}
|
|
172
194
|
</View>
|
|
@@ -216,6 +238,14 @@ const styles = {
|
|
|
216
238
|
},
|
|
217
239
|
replyContainer: {
|
|
218
240
|
paddingLeft: 20,
|
|
241
|
+
paddingRight: 10,
|
|
242
|
+
},
|
|
243
|
+
deleteContainer: {
|
|
244
|
+
paddingLeft: 10,
|
|
245
|
+
},
|
|
246
|
+
actionButtons: {
|
|
247
|
+
flexDirection: 'row',
|
|
248
|
+
alignItems: 'center',
|
|
219
249
|
},
|
|
220
250
|
}),
|
|
221
251
|
right: StyleSheet.create({
|
|
@@ -255,9 +285,16 @@ const styles = {
|
|
|
255
285
|
textAlign: 'right',
|
|
256
286
|
},
|
|
257
287
|
replyContainer: {
|
|
258
|
-
alignSelf: 'flex-end',
|
|
259
288
|
paddingRight: 10,
|
|
260
289
|
},
|
|
290
|
+
deleteContainer: {
|
|
291
|
+
paddingRight: 10,
|
|
292
|
+
},
|
|
293
|
+
actionButtons: {
|
|
294
|
+
flexDirection: 'row',
|
|
295
|
+
alignItems: 'center',
|
|
296
|
+
alignSelf: 'flex-end',
|
|
297
|
+
},
|
|
261
298
|
}),
|
|
262
299
|
};
|
|
263
300
|
|