@plusscommunities/pluss-circles-app 8.0.3 → 8.0.4

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.
@@ -262,6 +262,7 @@ class Chat extends Component {
262
262
  }
263
263
  prepareNewProps(nextProps) {
264
264
  const newStates = {};
265
+ let hasChanges = false;
265
266
  if (!this.chatKey && nextProps.chatKey) {
266
267
  this.chatKey = nextProps.chatKey;
267
268
 
@@ -273,42 +274,59 @@ class Chat extends Component {
273
274
  }
274
275
  this.connect();
275
276
  }
276
- _.forEach(nextProps.chats, chat => {
277
- if (chat.key === this.chatKey) {
278
- newStates.chat = {
279
- ...chat
280
- };
281
- }
282
- });
277
+
278
+ // Only update chat if it actually changed
279
+ if (nextProps.chats !== this.props.chats) {
280
+ _.forEach(nextProps.chats, chat => {
281
+ if (chat.key === this.chatKey) {
282
+ newStates.chat = {
283
+ ...chat
284
+ };
285
+ hasChanges = true;
286
+ }
287
+ });
288
+ }
283
289
 
284
290
  // If the other user blocked current user, exit
285
291
  if (this.chatUserKey && this.props.blockedUserKeys && !_.includes(this.props.blockedUserKeys, this.chatUserKey) && nextProps.blockedUserKeys && _.includes(nextProps.blockedUserKeys, this.chatUserKey)) {
286
292
  this.onPressBack();
287
293
  }
288
- if (!nextProps.new) {
294
+
295
+ // Only update newLoading if it changed
296
+ if (this.props.new && !nextProps.new && this.state.newLoading) {
289
297
  newStates.newLoading = false;
290
- this.setState({
291
- newLoading: false
292
- });
298
+ hasChanges = true;
293
299
  }
294
- let newGrop2 = this.state.group;
295
- _.forEach(nextProps.groups, group => {
296
- if (group.Id === this.chatKey) {
297
- newGrop2 = {
298
- ...group
299
- };
300
- }
301
- });
302
- newStates.muteChat = false;
303
- if (!_.isUndefined(newGrop2.Muted)) {
304
- newGrop2.Muted.forEach(user => {
305
- if (user === this.props.user.uid) {
306
- newStates.muteChat = true;
300
+
301
+ // Only update group if groups array changed
302
+ if (nextProps.groups !== this.props.groups) {
303
+ let newGrop2 = this.state.group;
304
+ _.forEach(nextProps.groups, group => {
305
+ if (group.Id === this.chatKey) {
306
+ newGrop2 = {
307
+ ...group
308
+ };
307
309
  }
308
310
  });
311
+ let muteChat = false;
312
+ if (!_.isUndefined(newGrop2.Muted)) {
313
+ newGrop2.Muted.forEach(user => {
314
+ if (user === this.props.user.uid) {
315
+ muteChat = true;
316
+ }
317
+ });
318
+ }
319
+
320
+ // Only set state if group or mute status actually changed
321
+ if (!_.isEqual(newGrop2, this.state.group) || muteChat !== this.state.muteChat) {
322
+ newStates.group = newGrop2;
323
+ newStates.muteChat = muteChat;
324
+ hasChanges = true;
325
+ }
309
326
  }
310
- newStates.group = newGrop2;
311
- if (this._isMounted) {
327
+
328
+ // Only call setState if something actually changed
329
+ if (this._isMounted && hasChanges && Object.keys(newStates).length > 0) {
312
330
  this.setState(newStates);
313
331
  }
314
332
  }
@@ -1 +1 @@
1
- {"version":3,"names":["React","Component","View","Platform","Alert","TouchableWithoutFeedback","connect","_","moment","PlussChat","Header","ConfirmPopup","DropDownMenu","DropDownItem","getGroupInvites","updateUnreadCounter","handleGroupInvite","softLeaveGroup","deleteGroup","createChat","disconnectChat","blockUser","deleteChat","updateGroups","clearGroupCounter","updateChatMessages","TEXT_DARK","TEXT_LIGHTER","StatusBarHeight","getMainBrandingColourFromState","getLightBrandingColourFromState","NavigationService","getTinyChatDefault","messageActions","circleActions","values","Chat","constructor","props","_defineProperty","state","group","isEmpty","Title","IsPrivate","otherUser","find","Audience","u","userId","user","Id","displayName","event","navigate","attachment","Type","place","back","goBack","isAdmin","creatorId","Creator","CreatorId","hasOtherAdmin","some","isGroupOwner","setState","settingsOpen","alert","text","onPress","closeSettings","style","cancelable","currentUser","_id","chatUserKey","chatKey","onPressBack","message","originalMessages","messages","updatedMessages","map","msg","deleted","image","undefined","attachments","replyingTo","deleteMessage","error","_error$response","console","log","errorMessage","response","data","_isMounted","MIN_COMPOSER_HEIGHT","select","ios","android","interval","uid","name","avatar","isUndefined","profilePic","chat","keyboardOpen","newLoading","showDeleteConfirm","popUpType","muteChat","muteSubmitting","hasInvite","inviteActioned","inviteActionPopup","invitePending","componentDidMount","new","prepareChatPage","UNSAFE_componentWillReceiveProps","nextProps","prepareNewProps","componentWillUnmount","clearInterval","key","chatName","title","newGroup","forEach","groups","Muted","statee","reducerMessages","newStates","firstMessages","sendMessage","chats","blockedUserKeys","includes","newGrop2","muteTest","muteGroup","then","res","catch","err","onSend","groupLast","lastMessage","cloneDeep","GroupId","RowId","createdAt","utc","valueOf","mergeMessages","getChatName","userNames","without","join","getMaxTime","maxMessage","maxBy","m","fetchMessages","iteration","getMessages","setTimeout","fetchSingleMessage","timestamp","receivedMessages","newMessages","sortBy","concat","uniqBy","reverse","setInterval","regularFetch","bind","goToGroupInfo","screenCircleDetails","startEdit","screenEditCircle","onOpenDeletePrompt","type","onCancelDelete","onConfirmDelete","renderConfirmPopup","isOnlyAdmin","createElement","visible","onConfirm","yesText","hideNo","entityName","onCancel","render","flex","disabled","styles","container","top","right","width","zIndex","elevation","isPrivateChat","textStyle","color","last","leftIcon","onPressLeft","rightIconType","rightIcon","onPressRight","toggleSettings","getTitle","onTextPress","onDeleteMessage","handleDeleteMessage","backgroundColor","send","fontSize","textAlign","setting","settingContainer","marginLeft","settingDropDown","height","position","paddingTop","overflow","settingDropDownOpen","dropDownOuterContainer","margin","dropDownInnerContainer","flexDirection","borderRadius","paddingBottom","paddingHorizontal","shadowColor","shadowOffset","shadowOpacity","borderWidth","borderColor","dropDownItem","alignItems","marginTop","dropDownItem_Text","fontFamily","lineHeight","mapStateToProps","reducerKeyChats","list","selectedChatKey","blockedUsers","reducerKey","colourBrandingMain","colourBrandingLight"],"sources":["Chat.js"],"sourcesContent":["import React, { Component } from 'react';\nimport { View, Platform, Alert, TouchableWithoutFeedback } from 'react-native';\nimport { connect } from 'react-redux';\nimport _ from 'lodash';\nimport moment from 'moment';\nimport { PlussChat, Header, ConfirmPopup, DropDownMenu, DropDownItem } from '../common';\nimport {\n getGroupInvites,\n updateUnreadCounter,\n handleGroupInvite,\n softLeaveGroup,\n deleteGroup,\n createChat,\n disconnectChat,\n blockUser,\n deleteChat,\n updateGroups,\n clearGroupCounter,\n updateChatMessages,\n} from '../../actions';\nimport { TEXT_DARK, TEXT_LIGHTER, StatusBarHeight, getMainBrandingColourFromState, getLightBrandingColourFromState } from '../../js';\nimport NavigationService from '../../js/NavigationService';\nimport { getTinyChatDefault } from '../../config';\nimport { messageActions, circleActions } from '../../webapi';\nimport { values } from '../../values.config';\n\nclass Chat extends Component {\n constructor(props) {\n super(props);\n this._isMounted = false;\n\n // used to match the constant used by gifted chat\n this.MIN_COMPOSER_HEIGHT = Platform.select({\n ios: 33,\n android: 41,\n });\n\n this.interval = null;\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 : getTinyChatDefault(),\n },\n chat: {},\n group: { Title: '' },\n messages: [],\n settingsOpen: false,\n keyboardOpen: false,\n\n newLoading: false,\n showDeleteConfirm: false,\n\n popUpType: 'leave',\n\n muteChat: false,\n muteSubmitting: false,\n\n hasInvite: false,\n inviteActioned: false,\n inviteActionPopup: false,\n invitePending: false,\n };\n }\n\n componentDidMount() {\n this._isMounted = true;\n this.chatUserKey = null;\n if (this.props.new) {\n this.setState({ newLoading: true });\n }\n this.prepareChatPage();\n }\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n // if (this.state.hasInvite && !this.state.inviteActioned) {\n // return;\n // }\n this.prepareNewProps(nextProps);\n }\n\n componentWillUnmount() {\n this._isMounted = false;\n this.setState({ inviteActionPopup: false });\n this.props.disconnectChat(this.chatKey);\n clearInterval(this.interval);\n }\n\n prepareChatPage() {\n if (this.props.chat) {\n // if (this.props.isInvite && !this.state.inviteActioned) {\n // this.setState({hasInvite:true, inviteActionPopup: true });\n // }\n // Opening existing chat\n const { chat } = this.props;\n if (!_.isUndefined(this.props.chat.key)) {\n this.chatKey = this.props.chat.key;\n } else {\n this.chatKey = this.props.chat.Id;\n }\n\n this.chatName = !_.isUndefined(chat.title) ? chat.title : chat.Title;\n let newGroup = chat;\n\n newGroup.Title = !_.isUndefined(chat.title) ? chat.title : chat.Title;\n _.forEach(this.props.groups, group => {\n if (group.Id === this.props.chat.key || group.Id === this.props.chat.Id) {\n newGroup = { ...group };\n }\n });\n let muteChat = false;\n if (!_.isUndefined(newGroup.Muted)) {\n newGroup.Muted.forEach(user => {\n if (user === this.props.user.uid) {\n muteChat = true;\n }\n });\n }\n\n const statee = { chat, group: newGroup, muteChat };\n if (this.chatKey && !_.isUndefined(this.props.reducerMessages[this.chatKey])) {\n statee.messages = this.props.reducerMessages[this.chatKey];\n }\n\n this.setState(statee);\n this.connect();\n }\n }\n\n prepareNewProps(nextProps) {\n const newStates = {};\n if (!this.chatKey && nextProps.chatKey) {\n this.chatKey = nextProps.chatKey;\n\n // If first message is provided, send message automatically\n if (this.firstMessages) {\n _.forEach(this.firstMessages, message => {\n this.sendMessage(this.props.user.uid, this.chatKey, message);\n });\n }\n this.connect();\n }\n\n _.forEach(nextProps.chats, chat => {\n if (chat.key === this.chatKey) {\n newStates.chat = { ...chat };\n }\n });\n\n // If the other user blocked current user, exit\n if (\n this.chatUserKey &&\n this.props.blockedUserKeys &&\n !_.includes(this.props.blockedUserKeys, this.chatUserKey) &&\n nextProps.blockedUserKeys &&\n _.includes(nextProps.blockedUserKeys, this.chatUserKey)\n ) {\n this.onPressBack();\n }\n if (!nextProps.new) {\n newStates.newLoading = false;\n this.setState({ newLoading: false });\n }\n let newGrop2 = this.state.group;\n _.forEach(nextProps.groups, group => {\n if (group.Id === this.chatKey) {\n newGrop2 = { ...group };\n }\n });\n newStates.muteChat = false;\n if (!_.isUndefined(newGrop2.Muted)) {\n newGrop2.Muted.forEach(user => {\n if (user === this.props.user.uid) {\n newStates.muteChat = true;\n }\n });\n }\n newStates.group = newGrop2;\n if (this._isMounted) {\n this.setState(newStates);\n }\n }\n\n getTitle = () => {\n if (!this.state.group) {\n return '';\n }\n if (_.isEmpty(this.state.group.Title) && this.state.group.IsPrivate) {\n const otherUser = _.find(this.state.group.Audience || [], u => {\n return !!u && u.userId !== this.props.user.Id;\n });\n if (otherUser) {\n return otherUser.displayName;\n }\n }\n return this.state.group.Title;\n };\n\n onPressEvent = event => {\n NavigationService.navigate('eventDetail', { event });\n };\n\n muteTest() {\n if (this.state.muteSubmitting) {\n return;\n }\n this.setState({ muteSubmitting: true });\n\n circleActions\n .muteGroup(this.state.group.Id, this.props.user.uid)\n .then(res => {\n this.setState({ muteSubmitting: false });\n this.props.updateGroups([res.data.group]);\n })\n .catch(err => {\n this.setState({ muteSubmitting: false });\n });\n }\n\n onPressAttachment = attachment => {\n switch (attachment.Type) {\n case 'Event':\n // TODO: No need to handle?\n NavigationService.navigate('eventDetail', { event: attachment });\n break;\n case 'Place':\n // TODO: No need to handle?\n NavigationService.navigate('placeDetail', { place: attachment });\n break;\n default:\n return;\n }\n };\n\n onPressBack = () => {\n if (this.props.back) {\n NavigationService.goBack(this.props.back);\n } else {\n NavigationService.goBack();\n }\n };\n\n onSend(messages = []) {\n if (this.chatKey) {\n this.sendMessage(messages[0]);\n }\n }\n\n sendMessage(message) {\n const groupLast = {\n lastMessage: _.cloneDeep(message),\n };\n\n message.GroupId = this.chatKey;\n message.RowId = `${this.chatKey}_${message._id}`;\n message.createdAt = moment.utc().valueOf();\n\n this.mergeMessages([message]);\n\n messageActions\n .sendMessage(this.props.user.uid, this.chatKey, groupLast, message)\n .then(res => {})\n .catch(err => {});\n }\n\n isPrivateChat = () => {\n return this.state.group.IsPrivate;\n };\n\n isGroupOwner(userId) {\n if (!_.isUndefined(this.state.group.CreatorId) && userId === this.state.group.CreatorId) {\n return true;\n }\n if (\n !_.isUndefined(this.state.group.Creator) &&\n (userId === this.state.group.Creator.uid || userId === this.state.group.Creator.userId)\n ) {\n return true;\n }\n return false;\n }\n\n isOnlyAdmin = userId => {\n if (!this.isAdmin(userId)) {\n return false;\n }\n const { group } = this.state;\n const creatorId = group.Creator ? group.Creator.userId : group.CreatorId;\n const hasOtherAdmin = group.Audience.some(user => {\n if (!user) {\n return false;\n }\n return user.userId !== userId && (user.isAdmin || user.userId === creatorId);\n });\n\n return !hasOtherAdmin;\n };\n\n isAdmin = userId => {\n if (this.isGroupOwner(userId)) {\n return true;\n }\n const user = _.find(this.state.group.Audience || [], u => {\n return !!u && u.userId === userId;\n });\n return user && user.isAdmin;\n };\n\n getChatName(title, userNames) {\n if (!_.isEmpty(title)) {\n return title;\n }\n return _.without(userNames, this.state.currentUser.name).join(', ');\n }\n\n getMaxTime() {\n const maxMessage = _.maxBy(this.state.messages, m => {\n return m.createdAt;\n });\n if (maxMessage) {\n return maxMessage.createdAt;\n }\n return 0;\n }\n\n fetchMessages(iteration) {\n if (!iteration) {\n iteration = 1;\n }\n messageActions\n .getMessages(this.chatKey, 50, this.getMaxTime())\n .then(res => {\n this.mergeMessages(res.data);\n })\n .catch(err => {\n if (iteration < 20) {\n setTimeout(() => {\n this.fetchMessages(iteration + 1);\n }, 250);\n }\n });\n }\n\n fetchSingleMessage(timestamp) {\n this.props.clearGroupCounter(this.chatKey, this.props.user.uid);\n messageActions.getMessages(this.chatKey, 1, timestamp, timestamp).then(res => {\n this.mergeMessages(res.data);\n });\n }\n\n mergeMessages(receivedMessages) {\n const newMessages = _.sortBy(_.concat(this.state.messages, receivedMessages), 'createdAt');\n if (this._isMounted) {\n this.setState({\n messages: _.uniqBy(newMessages, m => {\n return m._id;\n }).reverse(),\n });\n }\n if (!_.isEmpty(receivedMessages)) {\n this.props.clearGroupCounter(this.chatKey, this.props.user.uid);\n }\n this.props.updateChatMessages(\n this.chatKey,\n _.uniqBy(newMessages, m => {\n return m._id;\n }).reverse(),\n );\n }\n\n connect() {\n if (this.chatKey) {\n this.fetchMessages();\n\n this.interval = setInterval(this.regularFetch.bind(this), 2000);\n }\n }\n\n regularFetch() {\n messageActions\n .getMessages(this.chatKey, 50, this.getMaxTime() + 1)\n .then(res => {\n if (!_.isEmpty(res.data)) {\n this.mergeMessages(res.data);\n }\n })\n .catch(err => {});\n }\n\n toggleSettings = () => {\n this.setState({ settingsOpen: !this.state.settingsOpen });\n };\n\n closeSettings = () => {\n this.setState({ settingsOpen: false });\n };\n\n confirmBlockUser = () => {\n Alert.alert(\n 'Block user',\n 'Are you sure you want to block this user? Existing chat with this user will be deleted.',\n [\n { text: 'Cancel', onPress: () => this.closeSettings(), style: 'cancel' },\n { text: 'Ok', onPress: () => this.blockUser() },\n ],\n { cancelable: false },\n );\n };\n\n blockUser = () => {\n this.closeSettings();\n // Block the user\n this.props.blockUser(this.state.currentUser._id, this.chatUserKey, this.chatKey);\n // Delete this chat\n this.props.deleteChat(this.chatKey);\n\n this.onPressBack();\n };\n\n goToGroupInfo() {\n this.setState({ settingsOpen: false });\n NavigationService.navigate(values.screenCircleDetails, {\n group: this.state.group,\n });\n }\n\n startEdit() {\n this.setState({ settingsOpen: false });\n NavigationService.navigate(values.screenEditCircle, {\n chat: this.state.chat,\n });\n }\n\n onOpenDeletePrompt(type) {\n this.setState({ showDeleteConfirm: true, settingsOpen: false, popUpType: type });\n }\n\n onCancelDelete() {\n this.setState({ showDeleteConfirm: false });\n }\n\n onConfirmDelete() {\n if (this.state.popUpType === 'leave') {\n this.props.softLeaveGroup(this.state.group);\n }\n if (this.state.popUpType === 'delete') {\n this.props.deleteGroup(this.state.group);\n }\n\n this.onPressBack();\n }\n\n renderConfirmPopup() {\n if (this.state.popUpType === 'leave' && this.isOnlyAdmin(this.props.user.uid)) {\n return (\n <ConfirmPopup\n visible={this.state.showDeleteConfirm}\n onConfirm={this.onCancelDelete.bind(this)}\n yesText=\"Okay\"\n hideNo\n text={`You can't leave this ${values.entityName} as the only admin. Please make someone else an admin first.`}\n />\n );\n }\n return (\n <ConfirmPopup\n visible={this.state.showDeleteConfirm}\n onConfirm={this.onConfirmDelete.bind(this)}\n onCancel={this.onCancelDelete.bind(this)}\n text={`Are you sure you want to ${this.state.popUpType} this ${values.entityName}?`}\n />\n );\n }\n\n handleDeleteMessage = async message => {\n // Store original message for rollback\n const originalMessages = [...this.state.messages];\n \n // Optimistic update - show deleted immediately\n const updatedMessages = this.state.messages.map(msg => {\n if (msg._id === message._id) {\n return {\n ...msg,\n text: '[Message deleted]',\n deleted: true,\n image: undefined,\n attachments: undefined,\n replyingTo: undefined, // Remove reply quote\n };\n }\n return msg;\n });\n\n this.setState({\n messages: updatedMessages,\n });\n\n // Update Redux store optimistically\n this.props.updateChatMessages(this.chatKey, updatedMessages);\n\n try {\n // Call the delete message API\n await messageActions.deleteMessage(message._id, this.chatKey);\n // Success - update is already applied\n } catch (error) {\n // Rollback on failure\n console.log('handleDeleteMessage error', error);\n \n this.setState({\n messages: originalMessages,\n });\n this.props.updateChatMessages(this.chatKey, originalMessages);\n \n const errorMessage = error.response?.data?.message || 'Failed to delete message. Please try again.';\n Alert.alert('Delete Failed', errorMessage, [{ text: 'OK' }]);\n }\n };\n\n render() {\n return (\n <TouchableWithoutFeedback onPress={this.closeSettings} style={{ flex: 1 }} disabled={!this.state.settingsOpen}>\n <View style={styles.container}>\n <DropDownMenu\n visible={this.state.settingsOpen}\n style={{ top: StatusBarHeight(50), right: 16, width: 150, zIndex: 300, elevation: 15 }}\n >\n <DropDownItem text={`View ${values.entityName}`} onPress={this.goToGroupInfo.bind(this)} />\n {(this.isGroupOwner(this.props.user.uid) || this.isAdmin(this.props.user.uid)) && !this.isPrivateChat() && (\n <DropDownItem text={'Manage'} onPress={this.startEdit.bind(this)} />\n )}\n <DropDownItem\n text={this.state.muteSubmitting ? 'Updating...' : this.state.muteChat ? 'Unmute' : 'Mute'}\n onPress={this.muteTest.bind(this)}\n textStyle={this.state.muteSubmitting ? { color: TEXT_LIGHTER } : {}}\n />\n {this.isAdmin(this.props.user.uid) && !this.isPrivateChat() && (\n <DropDownItem text={'Delete'} onPress={this.onOpenDeletePrompt.bind(this, 'delete')} />\n )}\n {!this.isPrivateChat() && <DropDownItem last text={'Leave'} onPress={this.onOpenDeletePrompt.bind(this, 'leave')} />}\n </DropDownMenu>\n <Header\n leftIcon=\"angle-left\"\n onPressLeft={this.onPressBack.bind(this)}\n rightIconType=\"pluss\"\n rightIcon=\"more_options\"\n onPressRight={this.toggleSettings.bind(this)}\n text={this.getTitle()}\n onTextPress={this.goToGroupInfo.bind(this)}\n />\n\n <PlussChat\n messages={this.chatKey ? this.state.messages : []}\n onSend={this.onSend.bind(this)}\n onDeleteMessage={this.handleDeleteMessage}\n />\n {this.renderConfirmPopup()}\n </View>\n </TouchableWithoutFeedback>\n );\n }\n}\n\nconst styles = {\n container: {\n flex: 1,\n backgroundColor: '#fff',\n },\n send: {\n color: '#fff',\n fontSize: 15,\n width: 30,\n textAlign: 'center',\n },\n setting: {\n fontSize: 18,\n },\n settingContainer: {\n marginLeft: 20,\n },\n settingDropDown: {\n height: 0,\n width: 'auto',\n position: 'absolute',\n right: 2,\n top: 62,\n zIndex: 2,\n elevation: 2,\n paddingTop: 0,\n overflow: 'hidden',\n },\n settingDropDownOpen: {\n height: 'auto',\n },\n dropDownOuterContainer: {\n paddingTop: 9,\n overflow: 'visible',\n backgroundColor: 'transparent',\n margin: 5,\n },\n dropDownInnerContainer: {\n flexDirection: 'column',\n backgroundColor: '#fcfcfc',\n borderRadius: 3,\n paddingBottom: 10,\n paddingHorizontal: 15,\n overflow: 'visible',\n shadowColor: '#000',\n shadowOffset: { width: 1, height: 1 },\n shadowOpacity: 0.3,\n ...Platform.select({\n android: {\n borderWidth: 1,\n borderColor: 'rgba(230, 230, 230, .4)',\n },\n }),\n },\n dropDownItem: {\n flexDirection: 'row',\n alignItems: 'center',\n marginTop: 10,\n },\n dropDownItem_Text: {\n fontFamily: 'sf-regular',\n fontSize: 15,\n lineHeight: 22,\n color: TEXT_DARK,\n },\n};\n\nconst mapStateToProps = state => {\n return {\n reducerMessages: state[values.reducerKeyChats].messages,\n chats: state[values.reducerKeyChats].list,\n chatKey: state[values.reducerKeyChats].selectedChatKey,\n blockedUserKeys: state[values.reducerKeyChats].blockedUsers,\n user: state.user,\n groups: state[values.reducerKey].list,\n colourBrandingMain: getMainBrandingColourFromState(state),\n colourBrandingLight: getLightBrandingColourFromState(state),\n };\n};\n\nexport default connect(mapStateToProps, {\n updateUnreadCounter,\n getGroupInvites,\n handleGroupInvite,\n updateGroups,\n softLeaveGroup,\n deleteGroup,\n createChat,\n disconnectChat,\n blockUser,\n deleteChat,\n clearGroupCounter,\n updateChatMessages,\n})(Chat);\n"],"mappings":";;;AAAA,OAAOA,KAAK,IAAIC,SAAS,QAAQ,OAAO;AACxC,SAASC,IAAI,EAAEC,QAAQ,EAAEC,KAAK,EAAEC,wBAAwB,QAAQ,cAAc;AAC9E,SAASC,OAAO,QAAQ,aAAa;AACrC,OAAOC,CAAC,MAAM,QAAQ;AACtB,OAAOC,MAAM,MAAM,QAAQ;AAC3B,SAASC,SAAS,EAAEC,MAAM,EAAEC,YAAY,EAAEC,YAAY,EAAEC,YAAY,QAAQ,WAAW;AACvF,SACEC,eAAe,EACfC,mBAAmB,EACnBC,iBAAiB,EACjBC,cAAc,EACdC,WAAW,EACXC,UAAU,EACVC,cAAc,EACdC,SAAS,EACTC,UAAU,EACVC,YAAY,EACZC,iBAAiB,EACjBC,kBAAkB,QACb,eAAe;AACtB,SAASC,SAAS,EAAEC,YAAY,EAAEC,eAAe,EAAEC,8BAA8B,EAAEC,+BAA+B,QAAQ,UAAU;AACpI,OAAOC,iBAAiB,MAAM,4BAA4B;AAC1D,SAASC,kBAAkB,QAAQ,cAAc;AACjD,SAASC,cAAc,EAAEC,aAAa,QAAQ,cAAc;AAC5D,SAASC,MAAM,QAAQ,qBAAqB;AAE5C,MAAMC,IAAI,SAASnC,SAAS,CAAC;EAC3BoC,WAAWA,CAACC,KAAK,EAAE;IACjB,KAAK,CAACA,KAAK,CAAC;IAACC,eAAA,mBA+JJ,MAAM;MACf,IAAI,CAAC,IAAI,CAACC,KAAK,CAACC,KAAK,EAAE;QACrB,OAAO,EAAE;MACX;MACA,IAAIlC,CAAC,CAACmC,OAAO,CAAC,IAAI,CAACF,KAAK,CAACC,KAAK,CAACE,KAAK,CAAC,IAAI,IAAI,CAACH,KAAK,CAACC,KAAK,CAACG,SAAS,EAAE;QACnE,MAAMC,SAAS,GAAGtC,CAAC,CAACuC,IAAI,CAAC,IAAI,CAACN,KAAK,CAACC,KAAK,CAACM,QAAQ,IAAI,EAAE,EAAEC,CAAC,IAAI;UAC7D,OAAO,CAAC,CAACA,CAAC,IAAIA,CAAC,CAACC,MAAM,KAAK,IAAI,CAACX,KAAK,CAACY,IAAI,CAACC,EAAE;QAC/C,CAAC,CAAC;QACF,IAAIN,SAAS,EAAE;UACb,OAAOA,SAAS,CAACO,WAAW;QAC9B;MACF;MACA,OAAO,IAAI,CAACZ,KAAK,CAACC,KAAK,CAACE,KAAK;IAC/B,CAAC;IAAAJ,eAAA,uBAEcc,KAAK,IAAI;MACtBtB,iBAAiB,CAACuB,QAAQ,CAAC,aAAa,EAAE;QAAED;MAAM,CAAC,CAAC;IACtD,CAAC;IAAAd,eAAA,4BAmBmBgB,UAAU,IAAI;MAChC,QAAQA,UAAU,CAACC,IAAI;QACrB,KAAK,OAAO;UACV;UACAzB,iBAAiB,CAACuB,QAAQ,CAAC,aAAa,EAAE;YAAED,KAAK,EAAEE;UAAW,CAAC,CAAC;UAChE;QACF,KAAK,OAAO;UACV;UACAxB,iBAAiB,CAACuB,QAAQ,CAAC,aAAa,EAAE;YAAEG,KAAK,EAAEF;UAAW,CAAC,CAAC;UAChE;QACF;UACE;MACJ;IACF,CAAC;IAAAhB,eAAA,sBAEa,MAAM;MAClB,IAAI,IAAI,CAACD,KAAK,CAACoB,IAAI,EAAE;QACnB3B,iBAAiB,CAAC4B,MAAM,CAAC,IAAI,CAACrB,KAAK,CAACoB,IAAI,CAAC;MAC3C,CAAC,MAAM;QACL3B,iBAAiB,CAAC4B,MAAM,CAAC,CAAC;MAC5B;IACF,CAAC;IAAApB,eAAA,wBAyBe,MAAM;MACpB,OAAO,IAAI,CAACC,KAAK,CAACC,KAAK,CAACG,SAAS;IACnC,CAAC;IAAAL,eAAA,sBAeaU,MAAM,IAAI;MACtB,IAAI,CAAC,IAAI,CAACW,OAAO,CAACX,MAAM,CAAC,EAAE;QACzB,OAAO,KAAK;MACd;MACA,MAAM;QAAER;MAAM,CAAC,GAAG,IAAI,CAACD,KAAK;MAC5B,MAAMqB,SAAS,GAAGpB,KAAK,CAACqB,OAAO,GAAGrB,KAAK,CAACqB,OAAO,CAACb,MAAM,GAAGR,KAAK,CAACsB,SAAS;MACxE,MAAMC,aAAa,GAAGvB,KAAK,CAACM,QAAQ,CAACkB,IAAI,CAACf,IAAI,IAAI;QAChD,IAAI,CAACA,IAAI,EAAE;UACT,OAAO,KAAK;QACd;QACA,OAAOA,IAAI,CAACD,MAAM,KAAKA,MAAM,KAAKC,IAAI,CAACU,OAAO,IAAIV,IAAI,CAACD,MAAM,KAAKY,SAAS,CAAC;MAC9E,CAAC,CAAC;MAEF,OAAO,CAACG,aAAa;IACvB,CAAC;IAAAzB,eAAA,kBAESU,MAAM,IAAI;MAClB,IAAI,IAAI,CAACiB,YAAY,CAACjB,MAAM,CAAC,EAAE;QAC7B,OAAO,IAAI;MACb;MACA,MAAMC,IAAI,GAAG3C,CAAC,CAACuC,IAAI,CAAC,IAAI,CAACN,KAAK,CAACC,KAAK,CAACM,QAAQ,IAAI,EAAE,EAAEC,CAAC,IAAI;QACxD,OAAO,CAAC,CAACA,CAAC,IAAIA,CAAC,CAACC,MAAM,KAAKA,MAAM;MACnC,CAAC,CAAC;MACF,OAAOC,IAAI,IAAIA,IAAI,CAACU,OAAO;IAC7B,CAAC;IAAArB,eAAA,yBAmFgB,MAAM;MACrB,IAAI,CAAC4B,QAAQ,CAAC;QAAEC,YAAY,EAAE,CAAC,IAAI,CAAC5B,KAAK,CAAC4B;MAAa,CAAC,CAAC;IAC3D,CAAC;IAAA7B,eAAA,wBAEe,MAAM;MACpB,IAAI,CAAC4B,QAAQ,CAAC;QAAEC,YAAY,EAAE;MAAM,CAAC,CAAC;IACxC,CAAC;IAAA7B,eAAA,2BAEkB,MAAM;MACvBnC,KAAK,CAACiE,KAAK,CACT,YAAY,EACZ,yFAAyF,EACzF,CACE;QAAEC,IAAI,EAAE,QAAQ;QAAEC,OAAO,EAAEA,CAAA,KAAM,IAAI,CAACC,aAAa,CAAC,CAAC;QAAEC,KAAK,EAAE;MAAS,CAAC,EACxE;QAAEH,IAAI,EAAE,IAAI;QAAEC,OAAO,EAAEA,CAAA,KAAM,IAAI,CAAClD,SAAS,CAAC;MAAE,CAAC,CAChD,EACD;QAAEqD,UAAU,EAAE;MAAM,CACtB,CAAC;IACH,CAAC;IAAAnC,eAAA,oBAEW,MAAM;MAChB,IAAI,CAACiC,aAAa,CAAC,CAAC;MACpB;MACA,IAAI,CAAClC,KAAK,CAACjB,SAAS,CAAC,IAAI,CAACmB,KAAK,CAACmC,WAAW,CAACC,GAAG,EAAE,IAAI,CAACC,WAAW,EAAE,IAAI,CAACC,OAAO,CAAC;MAChF;MACA,IAAI,CAACxC,KAAK,CAAChB,UAAU,CAAC,IAAI,CAACwD,OAAO,CAAC;MAEnC,IAAI,CAACC,WAAW,CAAC,CAAC;IACpB,CAAC;IAAAxC,eAAA,8BAyDqB,MAAMyC,OAAO,IAAI;MACrC;MACA,MAAMC,gBAAgB,GAAG,CAAC,GAAG,IAAI,CAACzC,KAAK,CAAC0C,QAAQ,CAAC;;MAEjD;MACA,MAAMC,eAAe,GAAG,IAAI,CAAC3C,KAAK,CAAC0C,QAAQ,CAACE,GAAG,CAACC,GAAG,IAAI;QACrD,IAAIA,GAAG,CAACT,GAAG,KAAKI,OAAO,CAACJ,GAAG,EAAE;UAC3B,OAAO;YACL,GAAGS,GAAG;YACNf,IAAI,EAAE,mBAAmB;YACzBgB,OAAO,EAAE,IAAI;YACbC,KAAK,EAAEC,SAAS;YAChBC,WAAW,EAAED,SAAS;YACtBE,UAAU,EAAEF,SAAS,CAAE;UACzB,CAAC;QACH;QACA,OAAOH,GAAG;MACZ,CAAC,CAAC;MAEF,IAAI,CAAClB,QAAQ,CAAC;QACZe,QAAQ,EAAEC;MACZ,CAAC,CAAC;;MAEF;MACA,IAAI,CAAC7C,KAAK,CAACb,kBAAkB,CAAC,IAAI,CAACqD,OAAO,EAAEK,eAAe,CAAC;MAE5D,IAAI;QACF;QACA,MAAMlD,cAAc,CAAC0D,aAAa,CAACX,OAAO,CAACJ,GAAG,EAAE,IAAI,CAACE,OAAO,CAAC;QAC7D;MACF,CAAC,CAAC,OAAOc,KAAK,EAAE;QAAA,IAAAC,eAAA;QACd;QACAC,OAAO,CAACC,GAAG,CAAC,2BAA2B,EAAEH,KAAK,CAAC;QAE/C,IAAI,CAACzB,QAAQ,CAAC;UACZe,QAAQ,EAAED;QACZ,CAAC,CAAC;QACF,IAAI,CAAC3C,KAAK,CAACb,kBAAkB,CAAC,IAAI,CAACqD,OAAO,EAAEG,gBAAgB,CAAC;QAE7D,MAAMe,YAAY,GAAG,EAAAH,eAAA,GAAAD,KAAK,CAACK,QAAQ,cAAAJ,eAAA,gBAAAA,eAAA,GAAdA,eAAA,CAAgBK,IAAI,cAAAL,eAAA,uBAApBA,eAAA,CAAsBb,OAAO,KAAI,6CAA6C;QACnG5E,KAAK,CAACiE,KAAK,CAAC,eAAe,EAAE2B,YAAY,EAAE,CAAC;UAAE1B,IAAI,EAAE;QAAK,CAAC,CAAC,CAAC;MAC9D;IACF,CAAC;IA3eC,IAAI,CAAC6B,UAAU,GAAG,KAAK;;IAEvB;IACA,IAAI,CAACC,mBAAmB,GAAGjG,QAAQ,CAACkG,MAAM,CAAC;MACzCC,GAAG,EAAE,EAAE;MACPC,OAAO,EAAE;IACX,CAAC,CAAC;IAEF,IAAI,CAACC,QAAQ,GAAG,IAAI;IAEpB,IAAI,CAAChE,KAAK,GAAG;MACXmC,WAAW,EAAE;QACXC,GAAG,EAAE,IAAI,CAACtC,KAAK,CAACY,IAAI,CAACuD,GAAG;QACxBC,IAAI,EAAE,IAAI,CAACpE,KAAK,CAACY,IAAI,CAACE,WAAW;QACjCuD,MAAM,EACJ,CAACpG,CAAC,CAACqG,WAAW,CAAC,IAAI,CAACtE,KAAK,CAACY,IAAI,CAAC2D,UAAU,CAAC,IAAI,CAACtG,CAAC,CAACmC,OAAO,CAAC,IAAI,CAACJ,KAAK,CAACY,IAAI,CAAC2D,UAAU,CAAC,GAChF,IAAI,CAACvE,KAAK,CAACY,IAAI,CAAC2D,UAAU,GAC1B7E,kBAAkB,CAAC;MAC3B,CAAC;MACD8E,IAAI,EAAE,CAAC,CAAC;MACRrE,KAAK,EAAE;QAAEE,KAAK,EAAE;MAAG,CAAC;MACpBuC,QAAQ,EAAE,EAAE;MACZd,YAAY,EAAE,KAAK;MACnB2C,YAAY,EAAE,KAAK;MAEnBC,UAAU,EAAE,KAAK;MACjBC,iBAAiB,EAAE,KAAK;MAExBC,SAAS,EAAE,OAAO;MAElBC,QAAQ,EAAE,KAAK;MACfC,cAAc,EAAE,KAAK;MAErBC,SAAS,EAAE,KAAK;MAChBC,cAAc,EAAE,KAAK;MACrBC,iBAAiB,EAAE,KAAK;MACxBC,aAAa,EAAE;IACjB,CAAC;EACH;EAEAC,iBAAiBA,CAAA,EAAG;IAClB,IAAI,CAACtB,UAAU,GAAG,IAAI;IACtB,IAAI,CAACtB,WAAW,GAAG,IAAI;IACvB,IAAI,IAAI,CAACvC,KAAK,CAACoF,GAAG,EAAE;MAClB,IAAI,CAACvD,QAAQ,CAAC;QAAE6C,UAAU,EAAE;MAAK,CAAC,CAAC;IACrC;IACA,IAAI,CAACW,eAAe,CAAC,CAAC;EACxB;EAEAC,gCAAgCA,CAACC,SAAS,EAAE;IAC1C;IACA;IACA;IACA,IAAI,CAACC,eAAe,CAACD,SAAS,CAAC;EACjC;EAEAE,oBAAoBA,CAAA,EAAG;IACrB,IAAI,CAAC5B,UAAU,GAAG,KAAK;IACvB,IAAI,CAAChC,QAAQ,CAAC;MAAEoD,iBAAiB,EAAE;IAAM,CAAC,CAAC;IAC3C,IAAI,CAACjF,KAAK,CAAClB,cAAc,CAAC,IAAI,CAAC0D,OAAO,CAAC;IACvCkD,aAAa,CAAC,IAAI,CAACxB,QAAQ,CAAC;EAC9B;EAEAmB,eAAeA,CAAA,EAAG;IAChB,IAAI,IAAI,CAACrF,KAAK,CAACwE,IAAI,EAAE;MACnB;MACA;MACA;MACA;MACA,MAAM;QAAEA;MAAK,CAAC,GAAG,IAAI,CAACxE,KAAK;MAC3B,IAAI,CAAC/B,CAAC,CAACqG,WAAW,CAAC,IAAI,CAACtE,KAAK,CAACwE,IAAI,CAACmB,GAAG,CAAC,EAAE;QACvC,IAAI,CAACnD,OAAO,GAAG,IAAI,CAACxC,KAAK,CAACwE,IAAI,CAACmB,GAAG;MACpC,CAAC,MAAM;QACL,IAAI,CAACnD,OAAO,GAAG,IAAI,CAACxC,KAAK,CAACwE,IAAI,CAAC3D,EAAE;MACnC;MAEA,IAAI,CAAC+E,QAAQ,GAAG,CAAC3H,CAAC,CAACqG,WAAW,CAACE,IAAI,CAACqB,KAAK,CAAC,GAAGrB,IAAI,CAACqB,KAAK,GAAGrB,IAAI,CAACnE,KAAK;MACpE,IAAIyF,QAAQ,GAAGtB,IAAI;MAEnBsB,QAAQ,CAACzF,KAAK,GAAG,CAACpC,CAAC,CAACqG,WAAW,CAACE,IAAI,CAACqB,KAAK,CAAC,GAAGrB,IAAI,CAACqB,KAAK,GAAGrB,IAAI,CAACnE,KAAK;MACrEpC,CAAC,CAAC8H,OAAO,CAAC,IAAI,CAAC/F,KAAK,CAACgG,MAAM,EAAE7F,KAAK,IAAI;QACpC,IAAIA,KAAK,CAACU,EAAE,KAAK,IAAI,CAACb,KAAK,CAACwE,IAAI,CAACmB,GAAG,IAAIxF,KAAK,CAACU,EAAE,KAAK,IAAI,CAACb,KAAK,CAACwE,IAAI,CAAC3D,EAAE,EAAE;UACvEiF,QAAQ,GAAG;YAAE,GAAG3F;UAAM,CAAC;QACzB;MACF,CAAC,CAAC;MACF,IAAI0E,QAAQ,GAAG,KAAK;MACpB,IAAI,CAAC5G,CAAC,CAACqG,WAAW,CAACwB,QAAQ,CAACG,KAAK,CAAC,EAAE;QAClCH,QAAQ,CAACG,KAAK,CAACF,OAAO,CAACnF,IAAI,IAAI;UAC7B,IAAIA,IAAI,KAAK,IAAI,CAACZ,KAAK,CAACY,IAAI,CAACuD,GAAG,EAAE;YAChCU,QAAQ,GAAG,IAAI;UACjB;QACF,CAAC,CAAC;MACJ;MAEA,MAAMqB,MAAM,GAAG;QAAE1B,IAAI;QAAErE,KAAK,EAAE2F,QAAQ;QAAEjB;MAAS,CAAC;MAClD,IAAI,IAAI,CAACrC,OAAO,IAAI,CAACvE,CAAC,CAACqG,WAAW,CAAC,IAAI,CAACtE,KAAK,CAACmG,eAAe,CAAC,IAAI,CAAC3D,OAAO,CAAC,CAAC,EAAE;QAC5E0D,MAAM,CAACtD,QAAQ,GAAG,IAAI,CAAC5C,KAAK,CAACmG,eAAe,CAAC,IAAI,CAAC3D,OAAO,CAAC;MAC5D;MAEA,IAAI,CAACX,QAAQ,CAACqE,MAAM,CAAC;MACrB,IAAI,CAAClI,OAAO,CAAC,CAAC;IAChB;EACF;EAEAwH,eAAeA,CAACD,SAAS,EAAE;IACzB,MAAMa,SAAS,GAAG,CAAC,CAAC;IACpB,IAAI,CAAC,IAAI,CAAC5D,OAAO,IAAI+C,SAAS,CAAC/C,OAAO,EAAE;MACtC,IAAI,CAACA,OAAO,GAAG+C,SAAS,CAAC/C,OAAO;;MAEhC;MACA,IAAI,IAAI,CAAC6D,aAAa,EAAE;QACtBpI,CAAC,CAAC8H,OAAO,CAAC,IAAI,CAACM,aAAa,EAAE3D,OAAO,IAAI;UACvC,IAAI,CAAC4D,WAAW,CAAC,IAAI,CAACtG,KAAK,CAACY,IAAI,CAACuD,GAAG,EAAE,IAAI,CAAC3B,OAAO,EAAEE,OAAO,CAAC;QAC9D,CAAC,CAAC;MACJ;MACA,IAAI,CAAC1E,OAAO,CAAC,CAAC;IAChB;IAEAC,CAAC,CAAC8H,OAAO,CAACR,SAAS,CAACgB,KAAK,EAAE/B,IAAI,IAAI;MACjC,IAAIA,IAAI,CAACmB,GAAG,KAAK,IAAI,CAACnD,OAAO,EAAE;QAC7B4D,SAAS,CAAC5B,IAAI,GAAG;UAAE,GAAGA;QAAK,CAAC;MAC9B;IACF,CAAC,CAAC;;IAEF;IACA,IACE,IAAI,CAACjC,WAAW,IAChB,IAAI,CAACvC,KAAK,CAACwG,eAAe,IAC1B,CAACvI,CAAC,CAACwI,QAAQ,CAAC,IAAI,CAACzG,KAAK,CAACwG,eAAe,EAAE,IAAI,CAACjE,WAAW,CAAC,IACzDgD,SAAS,CAACiB,eAAe,IACzBvI,CAAC,CAACwI,QAAQ,CAAClB,SAAS,CAACiB,eAAe,EAAE,IAAI,CAACjE,WAAW,CAAC,EACvD;MACA,IAAI,CAACE,WAAW,CAAC,CAAC;IACpB;IACA,IAAI,CAAC8C,SAAS,CAACH,GAAG,EAAE;MAClBgB,SAAS,CAAC1B,UAAU,GAAG,KAAK;MAC5B,IAAI,CAAC7C,QAAQ,CAAC;QAAE6C,UAAU,EAAE;MAAM,CAAC,CAAC;IACtC;IACA,IAAIgC,QAAQ,GAAG,IAAI,CAACxG,KAAK,CAACC,KAAK;IAC/BlC,CAAC,CAAC8H,OAAO,CAACR,SAAS,CAACS,MAAM,EAAE7F,KAAK,IAAI;MACnC,IAAIA,KAAK,CAACU,EAAE,KAAK,IAAI,CAAC2B,OAAO,EAAE;QAC7BkE,QAAQ,GAAG;UAAE,GAAGvG;QAAM,CAAC;MACzB;IACF,CAAC,CAAC;IACFiG,SAAS,CAACvB,QAAQ,GAAG,KAAK;IAC1B,IAAI,CAAC5G,CAAC,CAACqG,WAAW,CAACoC,QAAQ,CAACT,KAAK,CAAC,EAAE;MAClCS,QAAQ,CAACT,KAAK,CAACF,OAAO,CAACnF,IAAI,IAAI;QAC7B,IAAIA,IAAI,KAAK,IAAI,CAACZ,KAAK,CAACY,IAAI,CAACuD,GAAG,EAAE;UAChCiC,SAAS,CAACvB,QAAQ,GAAG,IAAI;QAC3B;MACF,CAAC,CAAC;IACJ;IACAuB,SAAS,CAACjG,KAAK,GAAGuG,QAAQ;IAC1B,IAAI,IAAI,CAAC7C,UAAU,EAAE;MACnB,IAAI,CAAChC,QAAQ,CAACuE,SAAS,CAAC;IAC1B;EACF;EAqBAO,QAAQA,CAAA,EAAG;IACT,IAAI,IAAI,CAACzG,KAAK,CAAC4E,cAAc,EAAE;MAC7B;IACF;IACA,IAAI,CAACjD,QAAQ,CAAC;MAAEiD,cAAc,EAAE;IAAK,CAAC,CAAC;IAEvClF,aAAa,CACVgH,SAAS,CAAC,IAAI,CAAC1G,KAAK,CAACC,KAAK,CAACU,EAAE,EAAE,IAAI,CAACb,KAAK,CAACY,IAAI,CAACuD,GAAG,CAAC,CACnD0C,IAAI,CAACC,GAAG,IAAI;MACX,IAAI,CAACjF,QAAQ,CAAC;QAAEiD,cAAc,EAAE;MAAM,CAAC,CAAC;MACxC,IAAI,CAAC9E,KAAK,CAACf,YAAY,CAAC,CAAC6H,GAAG,CAAClD,IAAI,CAACzD,KAAK,CAAC,CAAC;IAC3C,CAAC,CAAC,CACD4G,KAAK,CAACC,GAAG,IAAI;MACZ,IAAI,CAACnF,QAAQ,CAAC;QAAEiD,cAAc,EAAE;MAAM,CAAC,CAAC;IAC1C,CAAC,CAAC;EACN;EAyBAmC,MAAMA,CAACrE,QAAQ,GAAG,EAAE,EAAE;IACpB,IAAI,IAAI,CAACJ,OAAO,EAAE;MAChB,IAAI,CAAC8D,WAAW,CAAC1D,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC/B;EACF;EAEA0D,WAAWA,CAAC5D,OAAO,EAAE;IACnB,MAAMwE,SAAS,GAAG;MAChBC,WAAW,EAAElJ,CAAC,CAACmJ,SAAS,CAAC1E,OAAO;IAClC,CAAC;IAEDA,OAAO,CAAC2E,OAAO,GAAG,IAAI,CAAC7E,OAAO;IAC9BE,OAAO,CAAC4E,KAAK,GAAI,GAAE,IAAI,CAAC9E,OAAQ,IAAGE,OAAO,CAACJ,GAAI,EAAC;IAChDI,OAAO,CAAC6E,SAAS,GAAGrJ,MAAM,CAACsJ,GAAG,CAAC,CAAC,CAACC,OAAO,CAAC,CAAC;IAE1C,IAAI,CAACC,aAAa,CAAC,CAAChF,OAAO,CAAC,CAAC;IAE7B/C,cAAc,CACX2G,WAAW,CAAC,IAAI,CAACtG,KAAK,CAACY,IAAI,CAACuD,GAAG,EAAE,IAAI,CAAC3B,OAAO,EAAE0E,SAAS,EAAExE,OAAO,CAAC,CAClEmE,IAAI,CAACC,GAAG,IAAI,CAAC,CAAC,CAAC,CACfC,KAAK,CAACC,GAAG,IAAI,CAAC,CAAC,CAAC;EACrB;EAMApF,YAAYA,CAACjB,MAAM,EAAE;IACnB,IAAI,CAAC1C,CAAC,CAACqG,WAAW,CAAC,IAAI,CAACpE,KAAK,CAACC,KAAK,CAACsB,SAAS,CAAC,IAAId,MAAM,KAAK,IAAI,CAACT,KAAK,CAACC,KAAK,CAACsB,SAAS,EAAE;MACvF,OAAO,IAAI;IACb;IACA,IACE,CAACxD,CAAC,CAACqG,WAAW,CAAC,IAAI,CAACpE,KAAK,CAACC,KAAK,CAACqB,OAAO,CAAC,KACvCb,MAAM,KAAK,IAAI,CAACT,KAAK,CAACC,KAAK,CAACqB,OAAO,CAAC2C,GAAG,IAAIxD,MAAM,KAAK,IAAI,CAACT,KAAK,CAACC,KAAK,CAACqB,OAAO,CAACb,MAAM,CAAC,EACvF;MACA,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd;EA4BAgH,WAAWA,CAAC9B,KAAK,EAAE+B,SAAS,EAAE;IAC5B,IAAI,CAAC3J,CAAC,CAACmC,OAAO,CAACyF,KAAK,CAAC,EAAE;MACrB,OAAOA,KAAK;IACd;IACA,OAAO5H,CAAC,CAAC4J,OAAO,CAACD,SAAS,EAAE,IAAI,CAAC1H,KAAK,CAACmC,WAAW,CAAC+B,IAAI,CAAC,CAAC0D,IAAI,CAAC,IAAI,CAAC;EACrE;EAEAC,UAAUA,CAAA,EAAG;IACX,MAAMC,UAAU,GAAG/J,CAAC,CAACgK,KAAK,CAAC,IAAI,CAAC/H,KAAK,CAAC0C,QAAQ,EAAEsF,CAAC,IAAI;MACnD,OAAOA,CAAC,CAACX,SAAS;IACpB,CAAC,CAAC;IACF,IAAIS,UAAU,EAAE;MACd,OAAOA,UAAU,CAACT,SAAS;IAC7B;IACA,OAAO,CAAC;EACV;EAEAY,aAAaA,CAACC,SAAS,EAAE;IACvB,IAAI,CAACA,SAAS,EAAE;MACdA,SAAS,GAAG,CAAC;IACf;IACAzI,cAAc,CACX0I,WAAW,CAAC,IAAI,CAAC7F,OAAO,EAAE,EAAE,EAAE,IAAI,CAACuF,UAAU,CAAC,CAAC,CAAC,CAChDlB,IAAI,CAACC,GAAG,IAAI;MACX,IAAI,CAACY,aAAa,CAACZ,GAAG,CAAClD,IAAI,CAAC;IAC9B,CAAC,CAAC,CACDmD,KAAK,CAACC,GAAG,IAAI;MACZ,IAAIoB,SAAS,GAAG,EAAE,EAAE;QAClBE,UAAU,CAAC,MAAM;UACf,IAAI,CAACH,aAAa,CAACC,SAAS,GAAG,CAAC,CAAC;QACnC,CAAC,EAAE,GAAG,CAAC;MACT;IACF,CAAC,CAAC;EACN;EAEAG,kBAAkBA,CAACC,SAAS,EAAE;IAC5B,IAAI,CAACxI,KAAK,CAACd,iBAAiB,CAAC,IAAI,CAACsD,OAAO,EAAE,IAAI,CAACxC,KAAK,CAACY,IAAI,CAACuD,GAAG,CAAC;IAC/DxE,cAAc,CAAC0I,WAAW,CAAC,IAAI,CAAC7F,OAAO,EAAE,CAAC,EAAEgG,SAAS,EAAEA,SAAS,CAAC,CAAC3B,IAAI,CAACC,GAAG,IAAI;MAC5E,IAAI,CAACY,aAAa,CAACZ,GAAG,CAAClD,IAAI,CAAC;IAC9B,CAAC,CAAC;EACJ;EAEA8D,aAAaA,CAACe,gBAAgB,EAAE;IAC9B,MAAMC,WAAW,GAAGzK,CAAC,CAAC0K,MAAM,CAAC1K,CAAC,CAAC2K,MAAM,CAAC,IAAI,CAAC1I,KAAK,CAAC0C,QAAQ,EAAE6F,gBAAgB,CAAC,EAAE,WAAW,CAAC;IAC1F,IAAI,IAAI,CAAC5E,UAAU,EAAE;MACnB,IAAI,CAAChC,QAAQ,CAAC;QACZe,QAAQ,EAAE3E,CAAC,CAAC4K,MAAM,CAACH,WAAW,EAAER,CAAC,IAAI;UACnC,OAAOA,CAAC,CAAC5F,GAAG;QACd,CAAC,CAAC,CAACwG,OAAO,CAAC;MACb,CAAC,CAAC;IACJ;IACA,IAAI,CAAC7K,CAAC,CAACmC,OAAO,CAACqI,gBAAgB,CAAC,EAAE;MAChC,IAAI,CAACzI,KAAK,CAACd,iBAAiB,CAAC,IAAI,CAACsD,OAAO,EAAE,IAAI,CAACxC,KAAK,CAACY,IAAI,CAACuD,GAAG,CAAC;IACjE;IACA,IAAI,CAACnE,KAAK,CAACb,kBAAkB,CAC3B,IAAI,CAACqD,OAAO,EACZvE,CAAC,CAAC4K,MAAM,CAACH,WAAW,EAAER,CAAC,IAAI;MACzB,OAAOA,CAAC,CAAC5F,GAAG;IACd,CAAC,CAAC,CAACwG,OAAO,CAAC,CACb,CAAC;EACH;EAEA9K,OAAOA,CAAA,EAAG;IACR,IAAI,IAAI,CAACwE,OAAO,EAAE;MAChB,IAAI,CAAC2F,aAAa,CAAC,CAAC;MAEpB,IAAI,CAACjE,QAAQ,GAAG6E,WAAW,CAAC,IAAI,CAACC,YAAY,CAACC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC;IACjE;EACF;EAEAD,YAAYA,CAAA,EAAG;IACbrJ,cAAc,CACX0I,WAAW,CAAC,IAAI,CAAC7F,OAAO,EAAE,EAAE,EAAE,IAAI,CAACuF,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CACpDlB,IAAI,CAACC,GAAG,IAAI;MACX,IAAI,CAAC7I,CAAC,CAACmC,OAAO,CAAC0G,GAAG,CAAClD,IAAI,CAAC,EAAE;QACxB,IAAI,CAAC8D,aAAa,CAACZ,GAAG,CAAClD,IAAI,CAAC;MAC9B;IACF,CAAC,CAAC,CACDmD,KAAK,CAACC,GAAG,IAAI,CAAC,CAAC,CAAC;EACrB;EAgCAkC,aAAaA,CAAA,EAAG;IACd,IAAI,CAACrH,QAAQ,CAAC;MAAEC,YAAY,EAAE;IAAM,CAAC,CAAC;IACtCrC,iBAAiB,CAACuB,QAAQ,CAACnB,MAAM,CAACsJ,mBAAmB,EAAE;MACrDhJ,KAAK,EAAE,IAAI,CAACD,KAAK,CAACC;IACpB,CAAC,CAAC;EACJ;EAEAiJ,SAASA,CAAA,EAAG;IACV,IAAI,CAACvH,QAAQ,CAAC;MAAEC,YAAY,EAAE;IAAM,CAAC,CAAC;IACtCrC,iBAAiB,CAACuB,QAAQ,CAACnB,MAAM,CAACwJ,gBAAgB,EAAE;MAClD7E,IAAI,EAAE,IAAI,CAACtE,KAAK,CAACsE;IACnB,CAAC,CAAC;EACJ;EAEA8E,kBAAkBA,CAACC,IAAI,EAAE;IACvB,IAAI,CAAC1H,QAAQ,CAAC;MAAE8C,iBAAiB,EAAE,IAAI;MAAE7C,YAAY,EAAE,KAAK;MAAE8C,SAAS,EAAE2E;IAAK,CAAC,CAAC;EAClF;EAEAC,cAAcA,CAAA,EAAG;IACf,IAAI,CAAC3H,QAAQ,CAAC;MAAE8C,iBAAiB,EAAE;IAAM,CAAC,CAAC;EAC7C;EAEA8E,eAAeA,CAAA,EAAG;IAChB,IAAI,IAAI,CAACvJ,KAAK,CAAC0E,SAAS,KAAK,OAAO,EAAE;MACpC,IAAI,CAAC5E,KAAK,CAACrB,cAAc,CAAC,IAAI,CAACuB,KAAK,CAACC,KAAK,CAAC;IAC7C;IACA,IAAI,IAAI,CAACD,KAAK,CAAC0E,SAAS,KAAK,QAAQ,EAAE;MACrC,IAAI,CAAC5E,KAAK,CAACpB,WAAW,CAAC,IAAI,CAACsB,KAAK,CAACC,KAAK,CAAC;IAC1C;IAEA,IAAI,CAACsC,WAAW,CAAC,CAAC;EACpB;EAEAiH,kBAAkBA,CAAA,EAAG;IACnB,IAAI,IAAI,CAACxJ,KAAK,CAAC0E,SAAS,KAAK,OAAO,IAAI,IAAI,CAAC+E,WAAW,CAAC,IAAI,CAAC3J,KAAK,CAACY,IAAI,CAACuD,GAAG,CAAC,EAAE;MAC7E,oBACEzG,KAAA,CAAAkM,aAAA,CAACvL,YAAY;QACXwL,OAAO,EAAE,IAAI,CAAC3J,KAAK,CAACyE,iBAAkB;QACtCmF,SAAS,EAAE,IAAI,CAACN,cAAc,CAACP,IAAI,CAAC,IAAI,CAAE;QAC1Cc,OAAO,EAAC,MAAM;QACdC,MAAM;QACNhI,IAAI,EAAG,wBAAuBnC,MAAM,CAACoK,UAAW;MAA8D,CAC/G,CAAC;IAEN;IACA,oBACEvM,KAAA,CAAAkM,aAAA,CAACvL,YAAY;MACXwL,OAAO,EAAE,IAAI,CAAC3J,KAAK,CAACyE,iBAAkB;MACtCmF,SAAS,EAAE,IAAI,CAACL,eAAe,CAACR,IAAI,CAAC,IAAI,CAAE;MAC3CiB,QAAQ,EAAE,IAAI,CAACV,cAAc,CAACP,IAAI,CAAC,IAAI,CAAE;MACzCjH,IAAI,EAAG,4BAA2B,IAAI,CAAC9B,KAAK,CAAC0E,SAAU,SAAQ/E,MAAM,CAACoK,UAAW;IAAG,CACrF,CAAC;EAEN;EA8CAE,MAAMA,CAAA,EAAG;IACP,oBACEzM,KAAA,CAAAkM,aAAA,CAAC7L,wBAAwB;MAACkE,OAAO,EAAE,IAAI,CAACC,aAAc;MAACC,KAAK,EAAE;QAAEiI,IAAI,EAAE;MAAE,CAAE;MAACC,QAAQ,EAAE,CAAC,IAAI,CAACnK,KAAK,CAAC4B;IAAa,gBAC5GpE,KAAA,CAAAkM,aAAA,CAAChM,IAAI;MAACuE,KAAK,EAAEmI,MAAM,CAACC;IAAU,gBAC5B7M,KAAA,CAAAkM,aAAA,CAACtL,YAAY;MACXuL,OAAO,EAAE,IAAI,CAAC3J,KAAK,CAAC4B,YAAa;MACjCK,KAAK,EAAE;QAAEqI,GAAG,EAAElL,eAAe,CAAC,EAAE,CAAC;QAAEmL,KAAK,EAAE,EAAE;QAAEC,KAAK,EAAE,GAAG;QAAEC,MAAM,EAAE,GAAG;QAAEC,SAAS,EAAE;MAAG;IAAE,gBAEvFlN,KAAA,CAAAkM,aAAA,CAACrL,YAAY;MAACyD,IAAI,EAAG,QAAOnC,MAAM,CAACoK,UAAW,EAAE;MAAChI,OAAO,EAAE,IAAI,CAACiH,aAAa,CAACD,IAAI,CAAC,IAAI;IAAE,CAAE,CAAC,EAC1F,CAAC,IAAI,CAACrH,YAAY,CAAC,IAAI,CAAC5B,KAAK,CAACY,IAAI,CAACuD,GAAG,CAAC,IAAI,IAAI,CAAC7C,OAAO,CAAC,IAAI,CAACtB,KAAK,CAACY,IAAI,CAACuD,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC0G,aAAa,CAAC,CAAC,iBACrGnN,KAAA,CAAAkM,aAAA,CAACrL,YAAY;MAACyD,IAAI,EAAE,QAAS;MAACC,OAAO,EAAE,IAAI,CAACmH,SAAS,CAACH,IAAI,CAAC,IAAI;IAAE,CAAE,CACpE,eACDvL,KAAA,CAAAkM,aAAA,CAACrL,YAAY;MACXyD,IAAI,EAAE,IAAI,CAAC9B,KAAK,CAAC4E,cAAc,GAAG,aAAa,GAAG,IAAI,CAAC5E,KAAK,CAAC2E,QAAQ,GAAG,QAAQ,GAAG,MAAO;MAC1F5C,OAAO,EAAE,IAAI,CAAC0E,QAAQ,CAACsC,IAAI,CAAC,IAAI,CAAE;MAClC6B,SAAS,EAAE,IAAI,CAAC5K,KAAK,CAAC4E,cAAc,GAAG;QAAEiG,KAAK,EAAE1L;MAAa,CAAC,GAAG,CAAC;IAAE,CACrE,CAAC,EACD,IAAI,CAACiC,OAAO,CAAC,IAAI,CAACtB,KAAK,CAACY,IAAI,CAACuD,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC0G,aAAa,CAAC,CAAC,iBACzDnN,KAAA,CAAAkM,aAAA,CAACrL,YAAY;MAACyD,IAAI,EAAE,QAAS;MAACC,OAAO,EAAE,IAAI,CAACqH,kBAAkB,CAACL,IAAI,CAAC,IAAI,EAAE,QAAQ;IAAE,CAAE,CACvF,EACA,CAAC,IAAI,CAAC4B,aAAa,CAAC,CAAC,iBAAInN,KAAA,CAAAkM,aAAA,CAACrL,YAAY;MAACyM,IAAI;MAAChJ,IAAI,EAAE,OAAQ;MAACC,OAAO,EAAE,IAAI,CAACqH,kBAAkB,CAACL,IAAI,CAAC,IAAI,EAAE,OAAO;IAAE,CAAE,CACvG,CAAC,eACfvL,KAAA,CAAAkM,aAAA,CAACxL,MAAM;MACL6M,QAAQ,EAAC,YAAY;MACrBC,WAAW,EAAE,IAAI,CAACzI,WAAW,CAACwG,IAAI,CAAC,IAAI,CAAE;MACzCkC,aAAa,EAAC,OAAO;MACrBC,SAAS,EAAC,cAAc;MACxBC,YAAY,EAAE,IAAI,CAACC,cAAc,CAACrC,IAAI,CAAC,IAAI,CAAE;MAC7CjH,IAAI,EAAE,IAAI,CAACuJ,QAAQ,CAAC,CAAE;MACtBC,WAAW,EAAE,IAAI,CAACtC,aAAa,CAACD,IAAI,CAAC,IAAI;IAAE,CAC5C,CAAC,eAEFvL,KAAA,CAAAkM,aAAA,CAACzL,SAAS;MACRyE,QAAQ,EAAE,IAAI,CAACJ,OAAO,GAAG,IAAI,CAACtC,KAAK,CAAC0C,QAAQ,GAAG,EAAG;MAClDqE,MAAM,EAAE,IAAI,CAACA,MAAM,CAACgC,IAAI,CAAC,IAAI,CAAE;MAC/BwC,eAAe,EAAE,IAAI,CAACC;IAAoB,CAC3C,CAAC,EACD,IAAI,CAAChC,kBAAkB,CAAC,CACrB,CACkB,CAAC;EAE/B;AACF;AAEA,MAAMY,MAAM,GAAG;EACbC,SAAS,EAAE;IACTH,IAAI,EAAE,CAAC;IACPuB,eAAe,EAAE;EACnB,CAAC;EACDC,IAAI,EAAE;IACJb,KAAK,EAAE,MAAM;IACbc,QAAQ,EAAE,EAAE;IACZnB,KAAK,EAAE,EAAE;IACToB,SAAS,EAAE;EACb,CAAC;EACDC,OAAO,EAAE;IACPF,QAAQ,EAAE;EACZ,CAAC;EACDG,gBAAgB,EAAE;IAChBC,UAAU,EAAE;EACd,CAAC;EACDC,eAAe,EAAE;IACfC,MAAM,EAAE,CAAC;IACTzB,KAAK,EAAE,MAAM;IACb0B,QAAQ,EAAE,UAAU;IACpB3B,KAAK,EAAE,CAAC;IACRD,GAAG,EAAE,EAAE;IACPG,MAAM,EAAE,CAAC;IACTC,SAAS,EAAE,CAAC;IACZyB,UAAU,EAAE,CAAC;IACbC,QAAQ,EAAE;EACZ,CAAC;EACDC,mBAAmB,EAAE;IACnBJ,MAAM,EAAE;EACV,CAAC;EACDK,sBAAsB,EAAE;IACtBH,UAAU,EAAE,CAAC;IACbC,QAAQ,EAAE,SAAS;IACnBX,eAAe,EAAE,aAAa;IAC9Bc,MAAM,EAAE;EACV,CAAC;EACDC,sBAAsB,EAAE;IACtBC,aAAa,EAAE,QAAQ;IACvBhB,eAAe,EAAE,SAAS;IAC1BiB,YAAY,EAAE,CAAC;IACfC,aAAa,EAAE,EAAE;IACjBC,iBAAiB,EAAE,EAAE;IACrBR,QAAQ,EAAE,SAAS;IACnBS,WAAW,EAAE,MAAM;IACnBC,YAAY,EAAE;MAAEtC,KAAK,EAAE,CAAC;MAAEyB,MAAM,EAAE;IAAE,CAAC;IACrCc,aAAa,EAAE,GAAG;IAClB,GAAGpP,QAAQ,CAACkG,MAAM,CAAC;MACjBE,OAAO,EAAE;QACPiJ,WAAW,EAAE,CAAC;QACdC,WAAW,EAAE;MACf;IACF,CAAC;EACH,CAAC;EACDC,YAAY,EAAE;IACZT,aAAa,EAAE,KAAK;IACpBU,UAAU,EAAE,QAAQ;IACpBC,SAAS,EAAE;EACb,CAAC;EACDC,iBAAiB,EAAE;IACjBC,UAAU,EAAE,YAAY;IACxB3B,QAAQ,EAAE,EAAE;IACZ4B,UAAU,EAAE,EAAE;IACd1C,KAAK,EAAE3L;EACT;AACF,CAAC;AAED,MAAMsO,eAAe,GAAGxN,KAAK,IAAI;EAC/B,OAAO;IACLiG,eAAe,EAAEjG,KAAK,CAACL,MAAM,CAAC8N,eAAe,CAAC,CAAC/K,QAAQ;IACvD2D,KAAK,EAAErG,KAAK,CAACL,MAAM,CAAC8N,eAAe,CAAC,CAACC,IAAI;IACzCpL,OAAO,EAAEtC,KAAK,CAACL,MAAM,CAAC8N,eAAe,CAAC,CAACE,eAAe;IACtDrH,eAAe,EAAEtG,KAAK,CAACL,MAAM,CAAC8N,eAAe,CAAC,CAACG,YAAY;IAC3DlN,IAAI,EAAEV,KAAK,CAACU,IAAI;IAChBoF,MAAM,EAAE9F,KAAK,CAACL,MAAM,CAACkO,UAAU,CAAC,CAACH,IAAI;IACrCI,kBAAkB,EAAEzO,8BAA8B,CAACW,KAAK,CAAC;IACzD+N,mBAAmB,EAAEzO,+BAA+B,CAACU,KAAK;EAC5D,CAAC;AACH,CAAC;AAED,eAAelC,OAAO,CAAC0P,eAAe,EAAE;EACtCjP,mBAAmB;EACnBD,eAAe;EACfE,iBAAiB;EACjBO,YAAY;EACZN,cAAc;EACdC,WAAW;EACXC,UAAU;EACVC,cAAc;EACdC,SAAS;EACTC,UAAU;EACVE,iBAAiB;EACjBC;AACF,CAAC,CAAC,CAACW,IAAI,CAAC"}
1
+ {"version":3,"names":["React","Component","View","Platform","Alert","TouchableWithoutFeedback","connect","_","moment","PlussChat","Header","ConfirmPopup","DropDownMenu","DropDownItem","getGroupInvites","updateUnreadCounter","handleGroupInvite","softLeaveGroup","deleteGroup","createChat","disconnectChat","blockUser","deleteChat","updateGroups","clearGroupCounter","updateChatMessages","TEXT_DARK","TEXT_LIGHTER","StatusBarHeight","getMainBrandingColourFromState","getLightBrandingColourFromState","NavigationService","getTinyChatDefault","messageActions","circleActions","values","Chat","constructor","props","_defineProperty","state","group","isEmpty","Title","IsPrivate","otherUser","find","Audience","u","userId","user","Id","displayName","event","navigate","attachment","Type","place","back","goBack","isAdmin","creatorId","Creator","CreatorId","hasOtherAdmin","some","isGroupOwner","setState","settingsOpen","alert","text","onPress","closeSettings","style","cancelable","currentUser","_id","chatUserKey","chatKey","onPressBack","message","originalMessages","messages","updatedMessages","map","msg","deleted","image","undefined","attachments","replyingTo","deleteMessage","error","_error$response","console","log","errorMessage","response","data","_isMounted","MIN_COMPOSER_HEIGHT","select","ios","android","interval","uid","name","avatar","isUndefined","profilePic","chat","keyboardOpen","newLoading","showDeleteConfirm","popUpType","muteChat","muteSubmitting","hasInvite","inviteActioned","inviteActionPopup","invitePending","componentDidMount","new","prepareChatPage","UNSAFE_componentWillReceiveProps","nextProps","prepareNewProps","componentWillUnmount","clearInterval","key","chatName","title","newGroup","forEach","groups","Muted","statee","reducerMessages","newStates","hasChanges","firstMessages","sendMessage","chats","blockedUserKeys","includes","newGrop2","isEqual","Object","keys","length","muteTest","muteGroup","then","res","catch","err","onSend","groupLast","lastMessage","cloneDeep","GroupId","RowId","createdAt","utc","valueOf","mergeMessages","getChatName","userNames","without","join","getMaxTime","maxMessage","maxBy","m","fetchMessages","iteration","getMessages","setTimeout","fetchSingleMessage","timestamp","receivedMessages","newMessages","sortBy","concat","uniqBy","reverse","setInterval","regularFetch","bind","goToGroupInfo","screenCircleDetails","startEdit","screenEditCircle","onOpenDeletePrompt","type","onCancelDelete","onConfirmDelete","renderConfirmPopup","isOnlyAdmin","createElement","visible","onConfirm","yesText","hideNo","entityName","onCancel","render","flex","disabled","styles","container","top","right","width","zIndex","elevation","isPrivateChat","textStyle","color","last","leftIcon","onPressLeft","rightIconType","rightIcon","onPressRight","toggleSettings","getTitle","onTextPress","onDeleteMessage","handleDeleteMessage","backgroundColor","send","fontSize","textAlign","setting","settingContainer","marginLeft","settingDropDown","height","position","paddingTop","overflow","settingDropDownOpen","dropDownOuterContainer","margin","dropDownInnerContainer","flexDirection","borderRadius","paddingBottom","paddingHorizontal","shadowColor","shadowOffset","shadowOpacity","borderWidth","borderColor","dropDownItem","alignItems","marginTop","dropDownItem_Text","fontFamily","lineHeight","mapStateToProps","reducerKeyChats","list","selectedChatKey","blockedUsers","reducerKey","colourBrandingMain","colourBrandingLight"],"sources":["Chat.js"],"sourcesContent":["import React, { Component } from 'react';\nimport { View, Platform, Alert, TouchableWithoutFeedback } from 'react-native';\nimport { connect } from 'react-redux';\nimport _ from 'lodash';\nimport moment from 'moment';\nimport { PlussChat, Header, ConfirmPopup, DropDownMenu, DropDownItem } from '../common';\nimport {\n getGroupInvites,\n updateUnreadCounter,\n handleGroupInvite,\n softLeaveGroup,\n deleteGroup,\n createChat,\n disconnectChat,\n blockUser,\n deleteChat,\n updateGroups,\n clearGroupCounter,\n updateChatMessages,\n} from '../../actions';\nimport { TEXT_DARK, TEXT_LIGHTER, StatusBarHeight, getMainBrandingColourFromState, getLightBrandingColourFromState } from '../../js';\nimport NavigationService from '../../js/NavigationService';\nimport { getTinyChatDefault } from '../../config';\nimport { messageActions, circleActions } from '../../webapi';\nimport { values } from '../../values.config';\n\nclass Chat extends Component {\n constructor(props) {\n super(props);\n this._isMounted = false;\n\n // used to match the constant used by gifted chat\n this.MIN_COMPOSER_HEIGHT = Platform.select({\n ios: 33,\n android: 41,\n });\n\n this.interval = null;\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 : getTinyChatDefault(),\n },\n chat: {},\n group: { Title: '' },\n messages: [],\n settingsOpen: false,\n keyboardOpen: false,\n\n newLoading: false,\n showDeleteConfirm: false,\n\n popUpType: 'leave',\n\n muteChat: false,\n muteSubmitting: false,\n\n hasInvite: false,\n inviteActioned: false,\n inviteActionPopup: false,\n invitePending: false,\n };\n }\n\n componentDidMount() {\n this._isMounted = true;\n this.chatUserKey = null;\n if (this.props.new) {\n this.setState({ newLoading: true });\n }\n this.prepareChatPage();\n }\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n // if (this.state.hasInvite && !this.state.inviteActioned) {\n // return;\n // }\n this.prepareNewProps(nextProps);\n }\n\n componentWillUnmount() {\n this._isMounted = false;\n this.setState({ inviteActionPopup: false });\n this.props.disconnectChat(this.chatKey);\n clearInterval(this.interval);\n }\n\n prepareChatPage() {\n if (this.props.chat) {\n // if (this.props.isInvite && !this.state.inviteActioned) {\n // this.setState({hasInvite:true, inviteActionPopup: true });\n // }\n // Opening existing chat\n const { chat } = this.props;\n if (!_.isUndefined(this.props.chat.key)) {\n this.chatKey = this.props.chat.key;\n } else {\n this.chatKey = this.props.chat.Id;\n }\n\n this.chatName = !_.isUndefined(chat.title) ? chat.title : chat.Title;\n let newGroup = chat;\n\n newGroup.Title = !_.isUndefined(chat.title) ? chat.title : chat.Title;\n _.forEach(this.props.groups, group => {\n if (group.Id === this.props.chat.key || group.Id === this.props.chat.Id) {\n newGroup = { ...group };\n }\n });\n let muteChat = false;\n if (!_.isUndefined(newGroup.Muted)) {\n newGroup.Muted.forEach(user => {\n if (user === this.props.user.uid) {\n muteChat = true;\n }\n });\n }\n\n const statee = { chat, group: newGroup, muteChat };\n if (this.chatKey && !_.isUndefined(this.props.reducerMessages[this.chatKey])) {\n statee.messages = this.props.reducerMessages[this.chatKey];\n }\n\n this.setState(statee);\n this.connect();\n }\n }\n\n prepareNewProps(nextProps) {\n const newStates = {};\n let hasChanges = false;\n\n if (!this.chatKey && nextProps.chatKey) {\n this.chatKey = nextProps.chatKey;\n\n // If first message is provided, send message automatically\n if (this.firstMessages) {\n _.forEach(this.firstMessages, message => {\n this.sendMessage(this.props.user.uid, this.chatKey, message);\n });\n }\n this.connect();\n }\n\n // Only update chat if it actually changed\n if (nextProps.chats !== this.props.chats) {\n _.forEach(nextProps.chats, chat => {\n if (chat.key === this.chatKey) {\n newStates.chat = { ...chat };\n hasChanges = true;\n }\n });\n }\n\n // If the other user blocked current user, exit\n if (\n this.chatUserKey &&\n this.props.blockedUserKeys &&\n !_.includes(this.props.blockedUserKeys, this.chatUserKey) &&\n nextProps.blockedUserKeys &&\n _.includes(nextProps.blockedUserKeys, this.chatUserKey)\n ) {\n this.onPressBack();\n }\n\n // Only update newLoading if it changed\n if (this.props.new && !nextProps.new && this.state.newLoading) {\n newStates.newLoading = false;\n hasChanges = true;\n }\n\n // Only update group if groups array changed\n if (nextProps.groups !== this.props.groups) {\n let newGrop2 = this.state.group;\n _.forEach(nextProps.groups, group => {\n if (group.Id === this.chatKey) {\n newGrop2 = { ...group };\n }\n });\n\n let muteChat = false;\n if (!_.isUndefined(newGrop2.Muted)) {\n newGrop2.Muted.forEach(user => {\n if (user === this.props.user.uid) {\n muteChat = true;\n }\n });\n }\n\n // Only set state if group or mute status actually changed\n if (!_.isEqual(newGrop2, this.state.group) || muteChat !== this.state.muteChat) {\n newStates.group = newGrop2;\n newStates.muteChat = muteChat;\n hasChanges = true;\n }\n }\n\n // Only call setState if something actually changed\n if (this._isMounted && hasChanges && Object.keys(newStates).length > 0) {\n this.setState(newStates);\n }\n }\n\n getTitle = () => {\n if (!this.state.group) {\n return '';\n }\n if (_.isEmpty(this.state.group.Title) && this.state.group.IsPrivate) {\n const otherUser = _.find(this.state.group.Audience || [], u => {\n return !!u && u.userId !== this.props.user.Id;\n });\n if (otherUser) {\n return otherUser.displayName;\n }\n }\n return this.state.group.Title;\n };\n\n onPressEvent = event => {\n NavigationService.navigate('eventDetail', { event });\n };\n\n muteTest() {\n if (this.state.muteSubmitting) {\n return;\n }\n this.setState({ muteSubmitting: true });\n\n circleActions\n .muteGroup(this.state.group.Id, this.props.user.uid)\n .then(res => {\n this.setState({ muteSubmitting: false });\n this.props.updateGroups([res.data.group]);\n })\n .catch(err => {\n this.setState({ muteSubmitting: false });\n });\n }\n\n onPressAttachment = attachment => {\n switch (attachment.Type) {\n case 'Event':\n // TODO: No need to handle?\n NavigationService.navigate('eventDetail', { event: attachment });\n break;\n case 'Place':\n // TODO: No need to handle?\n NavigationService.navigate('placeDetail', { place: attachment });\n break;\n default:\n return;\n }\n };\n\n onPressBack = () => {\n if (this.props.back) {\n NavigationService.goBack(this.props.back);\n } else {\n NavigationService.goBack();\n }\n };\n\n onSend(messages = []) {\n if (this.chatKey) {\n this.sendMessage(messages[0]);\n }\n }\n\n sendMessage(message) {\n const groupLast = {\n lastMessage: _.cloneDeep(message),\n };\n\n message.GroupId = this.chatKey;\n message.RowId = `${this.chatKey}_${message._id}`;\n message.createdAt = moment.utc().valueOf();\n\n this.mergeMessages([message]);\n\n messageActions\n .sendMessage(this.props.user.uid, this.chatKey, groupLast, message)\n .then(res => {})\n .catch(err => {});\n }\n\n isPrivateChat = () => {\n return this.state.group.IsPrivate;\n };\n\n isGroupOwner(userId) {\n if (!_.isUndefined(this.state.group.CreatorId) && userId === this.state.group.CreatorId) {\n return true;\n }\n if (\n !_.isUndefined(this.state.group.Creator) &&\n (userId === this.state.group.Creator.uid || userId === this.state.group.Creator.userId)\n ) {\n return true;\n }\n return false;\n }\n\n isOnlyAdmin = userId => {\n if (!this.isAdmin(userId)) {\n return false;\n }\n const { group } = this.state;\n const creatorId = group.Creator ? group.Creator.userId : group.CreatorId;\n const hasOtherAdmin = group.Audience.some(user => {\n if (!user) {\n return false;\n }\n return user.userId !== userId && (user.isAdmin || user.userId === creatorId);\n });\n\n return !hasOtherAdmin;\n };\n\n isAdmin = userId => {\n if (this.isGroupOwner(userId)) {\n return true;\n }\n const user = _.find(this.state.group.Audience || [], u => {\n return !!u && u.userId === userId;\n });\n return user && user.isAdmin;\n };\n\n getChatName(title, userNames) {\n if (!_.isEmpty(title)) {\n return title;\n }\n return _.without(userNames, this.state.currentUser.name).join(', ');\n }\n\n getMaxTime() {\n const maxMessage = _.maxBy(this.state.messages, m => {\n return m.createdAt;\n });\n if (maxMessage) {\n return maxMessage.createdAt;\n }\n return 0;\n }\n\n fetchMessages(iteration) {\n if (!iteration) {\n iteration = 1;\n }\n messageActions\n .getMessages(this.chatKey, 50, this.getMaxTime())\n .then(res => {\n this.mergeMessages(res.data);\n })\n .catch(err => {\n if (iteration < 20) {\n setTimeout(() => {\n this.fetchMessages(iteration + 1);\n }, 250);\n }\n });\n }\n\n fetchSingleMessage(timestamp) {\n this.props.clearGroupCounter(this.chatKey, this.props.user.uid);\n messageActions.getMessages(this.chatKey, 1, timestamp, timestamp).then(res => {\n this.mergeMessages(res.data);\n });\n }\n\n mergeMessages(receivedMessages) {\n const newMessages = _.sortBy(_.concat(this.state.messages, receivedMessages), 'createdAt');\n if (this._isMounted) {\n this.setState({\n messages: _.uniqBy(newMessages, m => {\n return m._id;\n }).reverse(),\n });\n }\n if (!_.isEmpty(receivedMessages)) {\n this.props.clearGroupCounter(this.chatKey, this.props.user.uid);\n }\n this.props.updateChatMessages(\n this.chatKey,\n _.uniqBy(newMessages, m => {\n return m._id;\n }).reverse(),\n );\n }\n\n connect() {\n if (this.chatKey) {\n this.fetchMessages();\n\n this.interval = setInterval(this.regularFetch.bind(this), 2000);\n }\n }\n\n regularFetch() {\n messageActions\n .getMessages(this.chatKey, 50, this.getMaxTime() + 1)\n .then(res => {\n if (!_.isEmpty(res.data)) {\n this.mergeMessages(res.data);\n }\n })\n .catch(err => {});\n }\n\n toggleSettings = () => {\n this.setState({ settingsOpen: !this.state.settingsOpen });\n };\n\n closeSettings = () => {\n this.setState({ settingsOpen: false });\n };\n\n confirmBlockUser = () => {\n Alert.alert(\n 'Block user',\n 'Are you sure you want to block this user? Existing chat with this user will be deleted.',\n [\n { text: 'Cancel', onPress: () => this.closeSettings(), style: 'cancel' },\n { text: 'Ok', onPress: () => this.blockUser() },\n ],\n { cancelable: false },\n );\n };\n\n blockUser = () => {\n this.closeSettings();\n // Block the user\n this.props.blockUser(this.state.currentUser._id, this.chatUserKey, this.chatKey);\n // Delete this chat\n this.props.deleteChat(this.chatKey);\n\n this.onPressBack();\n };\n\n goToGroupInfo() {\n this.setState({ settingsOpen: false });\n NavigationService.navigate(values.screenCircleDetails, {\n group: this.state.group,\n });\n }\n\n startEdit() {\n this.setState({ settingsOpen: false });\n NavigationService.navigate(values.screenEditCircle, {\n chat: this.state.chat,\n });\n }\n\n onOpenDeletePrompt(type) {\n this.setState({ showDeleteConfirm: true, settingsOpen: false, popUpType: type });\n }\n\n onCancelDelete() {\n this.setState({ showDeleteConfirm: false });\n }\n\n onConfirmDelete() {\n if (this.state.popUpType === 'leave') {\n this.props.softLeaveGroup(this.state.group);\n }\n if (this.state.popUpType === 'delete') {\n this.props.deleteGroup(this.state.group);\n }\n\n this.onPressBack();\n }\n\n renderConfirmPopup() {\n if (this.state.popUpType === 'leave' && this.isOnlyAdmin(this.props.user.uid)) {\n return (\n <ConfirmPopup\n visible={this.state.showDeleteConfirm}\n onConfirm={this.onCancelDelete.bind(this)}\n yesText=\"Okay\"\n hideNo\n text={`You can't leave this ${values.entityName} as the only admin. Please make someone else an admin first.`}\n />\n );\n }\n return (\n <ConfirmPopup\n visible={this.state.showDeleteConfirm}\n onConfirm={this.onConfirmDelete.bind(this)}\n onCancel={this.onCancelDelete.bind(this)}\n text={`Are you sure you want to ${this.state.popUpType} this ${values.entityName}?`}\n />\n );\n }\n\n handleDeleteMessage = async message => {\n // Store original message for rollback\n const originalMessages = [...this.state.messages];\n\n // Optimistic update - show deleted immediately\n const updatedMessages = this.state.messages.map(msg => {\n if (msg._id === message._id) {\n return {\n ...msg,\n text: '[Message deleted]',\n deleted: true,\n image: undefined,\n attachments: undefined,\n replyingTo: undefined, // Remove reply quote\n };\n }\n return msg;\n });\n\n this.setState({\n messages: updatedMessages,\n });\n\n // Update Redux store optimistically\n this.props.updateChatMessages(this.chatKey, updatedMessages);\n\n try {\n // Call the delete message API\n await messageActions.deleteMessage(message._id, this.chatKey);\n // Success - update is already applied\n } catch (error) {\n // Rollback on failure\n console.log('handleDeleteMessage error', error);\n\n this.setState({\n messages: originalMessages,\n });\n this.props.updateChatMessages(this.chatKey, originalMessages);\n\n const errorMessage = error.response?.data?.message || 'Failed to delete message. Please try again.';\n Alert.alert('Delete Failed', errorMessage, [{ text: 'OK' }]);\n }\n };\n\n render() {\n return (\n <TouchableWithoutFeedback onPress={this.closeSettings} style={{ flex: 1 }} disabled={!this.state.settingsOpen}>\n <View style={styles.container}>\n <DropDownMenu\n visible={this.state.settingsOpen}\n style={{ top: StatusBarHeight(50), right: 16, width: 150, zIndex: 300, elevation: 15 }}\n >\n <DropDownItem text={`View ${values.entityName}`} onPress={this.goToGroupInfo.bind(this)} />\n {(this.isGroupOwner(this.props.user.uid) || this.isAdmin(this.props.user.uid)) && !this.isPrivateChat() && (\n <DropDownItem text={'Manage'} onPress={this.startEdit.bind(this)} />\n )}\n <DropDownItem\n text={this.state.muteSubmitting ? 'Updating...' : this.state.muteChat ? 'Unmute' : 'Mute'}\n onPress={this.muteTest.bind(this)}\n textStyle={this.state.muteSubmitting ? { color: TEXT_LIGHTER } : {}}\n />\n {this.isAdmin(this.props.user.uid) && !this.isPrivateChat() && (\n <DropDownItem text={'Delete'} onPress={this.onOpenDeletePrompt.bind(this, 'delete')} />\n )}\n {!this.isPrivateChat() && <DropDownItem last text={'Leave'} onPress={this.onOpenDeletePrompt.bind(this, 'leave')} />}\n </DropDownMenu>\n <Header\n leftIcon=\"angle-left\"\n onPressLeft={this.onPressBack.bind(this)}\n rightIconType=\"pluss\"\n rightIcon=\"more_options\"\n onPressRight={this.toggleSettings.bind(this)}\n text={this.getTitle()}\n onTextPress={this.goToGroupInfo.bind(this)}\n />\n\n <PlussChat\n messages={this.chatKey ? this.state.messages : []}\n onSend={this.onSend.bind(this)}\n onDeleteMessage={this.handleDeleteMessage}\n />\n {this.renderConfirmPopup()}\n </View>\n </TouchableWithoutFeedback>\n );\n }\n}\n\nconst styles = {\n container: {\n flex: 1,\n backgroundColor: '#fff',\n },\n send: {\n color: '#fff',\n fontSize: 15,\n width: 30,\n textAlign: 'center',\n },\n setting: {\n fontSize: 18,\n },\n settingContainer: {\n marginLeft: 20,\n },\n settingDropDown: {\n height: 0,\n width: 'auto',\n position: 'absolute',\n right: 2,\n top: 62,\n zIndex: 2,\n elevation: 2,\n paddingTop: 0,\n overflow: 'hidden',\n },\n settingDropDownOpen: {\n height: 'auto',\n },\n dropDownOuterContainer: {\n paddingTop: 9,\n overflow: 'visible',\n backgroundColor: 'transparent',\n margin: 5,\n },\n dropDownInnerContainer: {\n flexDirection: 'column',\n backgroundColor: '#fcfcfc',\n borderRadius: 3,\n paddingBottom: 10,\n paddingHorizontal: 15,\n overflow: 'visible',\n shadowColor: '#000',\n shadowOffset: { width: 1, height: 1 },\n shadowOpacity: 0.3,\n ...Platform.select({\n android: {\n borderWidth: 1,\n borderColor: 'rgba(230, 230, 230, .4)',\n },\n }),\n },\n dropDownItem: {\n flexDirection: 'row',\n alignItems: 'center',\n marginTop: 10,\n },\n dropDownItem_Text: {\n fontFamily: 'sf-regular',\n fontSize: 15,\n lineHeight: 22,\n color: TEXT_DARK,\n },\n};\n\nconst mapStateToProps = state => {\n return {\n reducerMessages: state[values.reducerKeyChats].messages,\n chats: state[values.reducerKeyChats].list,\n chatKey: state[values.reducerKeyChats].selectedChatKey,\n blockedUserKeys: state[values.reducerKeyChats].blockedUsers,\n user: state.user,\n groups: state[values.reducerKey].list,\n colourBrandingMain: getMainBrandingColourFromState(state),\n colourBrandingLight: getLightBrandingColourFromState(state),\n };\n};\n\nexport default connect(mapStateToProps, {\n updateUnreadCounter,\n getGroupInvites,\n handleGroupInvite,\n updateGroups,\n softLeaveGroup,\n deleteGroup,\n createChat,\n disconnectChat,\n blockUser,\n deleteChat,\n clearGroupCounter,\n updateChatMessages,\n})(Chat);\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@plusscommunities/pluss-circles-app",
3
- "version": "8.0.3",
3
+ "version": "8.0.4",
4
4
  "description": "Extension package to enable circles on Pluss Communities Platform",
5
5
  "main": "dist/module/index.js",
6
6
  "module": "dist/module/index.js",
@@ -133,6 +133,8 @@ class Chat extends Component {
133
133
 
134
134
  prepareNewProps(nextProps) {
135
135
  const newStates = {};
136
+ let hasChanges = false;
137
+
136
138
  if (!this.chatKey && nextProps.chatKey) {
137
139
  this.chatKey = nextProps.chatKey;
138
140
 
@@ -145,11 +147,15 @@ class Chat extends Component {
145
147
  this.connect();
146
148
  }
147
149
 
148
- _.forEach(nextProps.chats, chat => {
149
- if (chat.key === this.chatKey) {
150
- newStates.chat = { ...chat };
151
- }
152
- });
150
+ // Only update chat if it actually changed
151
+ if (nextProps.chats !== this.props.chats) {
152
+ _.forEach(nextProps.chats, chat => {
153
+ if (chat.key === this.chatKey) {
154
+ newStates.chat = { ...chat };
155
+ hasChanges = true;
156
+ }
157
+ });
158
+ }
153
159
 
154
160
  // If the other user blocked current user, exit
155
161
  if (
@@ -161,26 +167,41 @@ class Chat extends Component {
161
167
  ) {
162
168
  this.onPressBack();
163
169
  }
164
- if (!nextProps.new) {
170
+
171
+ // Only update newLoading if it changed
172
+ if (this.props.new && !nextProps.new && this.state.newLoading) {
165
173
  newStates.newLoading = false;
166
- this.setState({ newLoading: false });
174
+ hasChanges = true;
167
175
  }
168
- let newGrop2 = this.state.group;
169
- _.forEach(nextProps.groups, group => {
170
- if (group.Id === this.chatKey) {
171
- newGrop2 = { ...group };
172
- }
173
- });
174
- newStates.muteChat = false;
175
- if (!_.isUndefined(newGrop2.Muted)) {
176
- newGrop2.Muted.forEach(user => {
177
- if (user === this.props.user.uid) {
178
- newStates.muteChat = true;
176
+
177
+ // Only update group if groups array changed
178
+ if (nextProps.groups !== this.props.groups) {
179
+ let newGrop2 = this.state.group;
180
+ _.forEach(nextProps.groups, group => {
181
+ if (group.Id === this.chatKey) {
182
+ newGrop2 = { ...group };
179
183
  }
180
184
  });
185
+
186
+ let muteChat = false;
187
+ if (!_.isUndefined(newGrop2.Muted)) {
188
+ newGrop2.Muted.forEach(user => {
189
+ if (user === this.props.user.uid) {
190
+ muteChat = true;
191
+ }
192
+ });
193
+ }
194
+
195
+ // Only set state if group or mute status actually changed
196
+ if (!_.isEqual(newGrop2, this.state.group) || muteChat !== this.state.muteChat) {
197
+ newStates.group = newGrop2;
198
+ newStates.muteChat = muteChat;
199
+ hasChanges = true;
200
+ }
181
201
  }
182
- newStates.group = newGrop2;
183
- if (this._isMounted) {
202
+
203
+ // Only call setState if something actually changed
204
+ if (this._isMounted && hasChanges && Object.keys(newStates).length > 0) {
184
205
  this.setState(newStates);
185
206
  }
186
207
  }
@@ -479,7 +500,7 @@ class Chat extends Component {
479
500
  handleDeleteMessage = async message => {
480
501
  // Store original message for rollback
481
502
  const originalMessages = [...this.state.messages];
482
-
503
+
483
504
  // Optimistic update - show deleted immediately
484
505
  const updatedMessages = this.state.messages.map(msg => {
485
506
  if (msg._id === message._id) {
@@ -509,12 +530,12 @@ class Chat extends Component {
509
530
  } catch (error) {
510
531
  // Rollback on failure
511
532
  console.log('handleDeleteMessage error', error);
512
-
533
+
513
534
  this.setState({
514
535
  messages: originalMessages,
515
536
  });
516
537
  this.props.updateChatMessages(this.chatKey, originalMessages);
517
-
538
+
518
539
  const errorMessage = error.response?.data?.message || 'Failed to delete message. Please try again.';
519
540
  Alert.alert('Delete Failed', errorMessage, [{ text: 'OK' }]);
520
541
  }