@ethora/chat-component-rn 26.8.5 → 26.8.7
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/CHANGELOG.md +26 -0
- package/README.md +95 -0
- package/lib/commonjs/assets/emojiData.js +40 -0
- package/lib/commonjs/assets/emojiData.js.map +1 -0
- package/lib/commonjs/assets/icons.js +5 -3
- package/lib/commonjs/assets/icons.js.map +1 -1
- package/lib/commonjs/components/MainComponents/ChatHeader.js +35 -15
- package/lib/commonjs/components/MainComponents/ChatHeader.js.map +1 -1
- package/lib/commonjs/components/MainComponents/ChatRoom.js +33 -24
- package/lib/commonjs/components/MainComponents/ChatRoom.js.map +1 -1
- package/lib/commonjs/components/MainComponents/ChatWrapper.js +22 -16
- package/lib/commonjs/components/MainComponents/ChatWrapper.js.map +1 -1
- package/lib/commonjs/components/MainComponents/EncryptedSendNotice.js +47 -0
- package/lib/commonjs/components/MainComponents/EncryptedSendNotice.js.map +1 -0
- package/lib/commonjs/components/MainComponents/EncryptionCard.js +286 -0
- package/lib/commonjs/components/MainComponents/EncryptionCard.js.map +1 -0
- package/lib/commonjs/components/MainComponents/MediaMessage.js +7 -0
- package/lib/commonjs/components/MainComponents/MediaMessage.js.map +1 -1
- package/lib/commonjs/components/MainComponents/MessageContainer.js +4 -12
- package/lib/commonjs/components/MainComponents/MessageContainer.js.map +1 -1
- package/lib/commonjs/components/MainComponents/MessageList.js +110 -35
- package/lib/commonjs/components/MainComponents/MessageList.js.map +1 -1
- package/lib/commonjs/components/MainComponents/ReduxWrapper.js +5 -0
- package/lib/commonjs/components/MainComponents/ReduxWrapper.js.map +1 -1
- package/lib/commonjs/components/MainComponents/RoomList.js +32 -29
- package/lib/commonjs/components/MainComponents/RoomList.js.map +1 -1
- package/lib/commonjs/components/MainComponents/RoomStack.js +133 -65
- package/lib/commonjs/components/MainComponents/RoomStack.js.map +1 -1
- package/lib/commonjs/components/MainComponents/SealedAttachment.js +231 -0
- package/lib/commonjs/components/MainComponents/SealedAttachment.js.map +1 -0
- package/lib/commonjs/components/MainComponents/SystemMessage.js +6 -2
- package/lib/commonjs/components/MainComponents/SystemMessage.js.map +1 -1
- package/lib/commonjs/components/MessageBubble/Avatar.js +5 -1
- package/lib/commonjs/components/MessageBubble/Avatar.js.map +1 -1
- package/lib/commonjs/components/MessageBubble/BottomReplyContainer.js +18 -21
- package/lib/commonjs/components/MessageBubble/BottomReplyContainer.js.map +1 -1
- package/lib/commonjs/components/MessageBubble/EmojiPickerSheet.js +447 -0
- package/lib/commonjs/components/MessageBubble/EmojiPickerSheet.js.map +1 -0
- package/lib/commonjs/components/MessageBubble/Message.js +264 -136
- package/lib/commonjs/components/MessageBubble/Message.js.map +1 -1
- package/lib/commonjs/components/MessageBubble/MessageInteractions.js +215 -13
- package/lib/commonjs/components/MessageBubble/MessageInteractions.js.map +1 -1
- package/lib/commonjs/components/MessageBubble/MessageReaction.js +113 -94
- package/lib/commonjs/components/MessageBubble/MessageReaction.js.map +1 -1
- package/lib/commonjs/components/MessageBubble/MessageReply.js +66 -24
- package/lib/commonjs/components/MessageBubble/MessageReply.js.map +1 -1
- package/lib/commonjs/components/Modals/ChatProfileModal/ChatProfileModal.js +7 -4
- package/lib/commonjs/components/Modals/ChatProfileModal/ChatProfileModal.js.map +1 -1
- package/lib/commonjs/components/Modals/FilePreviewModal/FilePreviewModal.js +159 -16
- package/lib/commonjs/components/Modals/FilePreviewModal/FilePreviewModal.js.map +1 -1
- package/lib/commonjs/components/Modals/FilePreviewModal/PdfView.js +4 -0
- package/lib/commonjs/components/Modals/FilePreviewModal/PdfView.js.map +1 -1
- package/lib/commonjs/components/Modals/Modal/SwipeBackLayer.js +76 -44
- package/lib/commonjs/components/Modals/Modal/SwipeBackLayer.js.map +1 -1
- package/lib/commonjs/components/Modals/UserProfileModal/UserProfileModal.js +29 -6
- package/lib/commonjs/components/Modals/UserProfileModal/UserProfileModal.js.map +1 -1
- package/lib/commonjs/components/Modals/UserSettingsModal/UserSettingsModal.js +5 -1
- package/lib/commonjs/components/Modals/UserSettingsModal/UserSettingsModal.js.map +1 -1
- package/lib/commonjs/components/RoomComponents/ChatRoomItem.js +37 -13
- package/lib/commonjs/components/RoomComponents/ChatRoomItem.js.map +1 -1
- package/lib/commonjs/components/RoomComponents/LastMessageItem.js +6 -0
- package/lib/commonjs/components/RoomComponents/LastMessageItem.js.map +1 -1
- package/lib/commonjs/components/RoomComponents/styled/LastAudioMessage.js +2 -2
- package/lib/commonjs/components/RoomComponents/styled/LastAudioMessage.js.map +1 -1
- package/lib/commonjs/components/RoomComponents/styled/LastMessageEmoji.js +8 -9
- package/lib/commonjs/components/RoomComponents/styled/LastMessageEmoji.js.map +1 -1
- package/lib/commonjs/components/RoomComponents/styled/LastMessageFile.js +4 -6
- package/lib/commonjs/components/RoomComponents/styled/LastMessageFile.js.map +1 -1
- package/lib/commonjs/components/RoomComponents/styled/LastMessagePhoto.js +2 -2
- package/lib/commonjs/components/RoomComponents/styled/LastMessagePhoto.js.map +1 -1
- package/lib/commonjs/components/RoomComponents/styled/LastMessageSealed.js +41 -0
- package/lib/commonjs/components/RoomComponents/styled/LastMessageSealed.js.map +1 -0
- package/lib/commonjs/components/RoomComponents/styled/LastMessageVideo.js +2 -2
- package/lib/commonjs/components/RoomComponents/styled/LastMessageVideo.js.map +1 -1
- package/lib/commonjs/components/Thread/ThreadWrapper.js +273 -152
- package/lib/commonjs/components/Thread/ThreadWrapper.js.map +1 -1
- package/lib/commonjs/components/UsersList/UsersList.js +2 -1
- package/lib/commonjs/components/UsersList/UsersList.js.map +1 -1
- package/lib/commonjs/components/styled/DateLabel.js +6 -3
- package/lib/commonjs/components/styled/DateLabel.js.map +1 -1
- package/lib/commonjs/components/styled/SendInput.js +4 -2
- package/lib/commonjs/components/styled/SendInput.js.map +1 -1
- package/lib/commonjs/context/MessageNotificationContext.js +188 -9
- package/lib/commonjs/context/MessageNotificationContext.js.map +1 -1
- package/lib/commonjs/context/xmppProvider.js +22 -7
- package/lib/commonjs/context/xmppProvider.js.map +1 -1
- package/lib/commonjs/e2ee/crypto.js +207 -0
- package/lib/commonjs/e2ee/crypto.js.map +1 -0
- package/lib/commonjs/e2ee/deviceStore.js +84 -0
- package/lib/commonjs/e2ee/deviceStore.js.map +1 -0
- package/lib/commonjs/e2ee/fileCipher.js +95 -0
- package/lib/commonjs/e2ee/fileCipher.js.map +1 -0
- package/lib/commonjs/e2ee/fileEnvelope.js +79 -0
- package/lib/commonjs/e2ee/fileEnvelope.js.map +1 -0
- package/lib/commonjs/e2ee/index.js +210 -0
- package/lib/commonjs/e2ee/index.js.map +1 -0
- package/lib/commonjs/e2ee/limits.js +9 -0
- package/lib/commonjs/e2ee/limits.js.map +1 -0
- package/lib/commonjs/e2ee/ns.js +8 -0
- package/lib/commonjs/e2ee/ns.js.map +1 -0
- package/lib/commonjs/e2ee/omemo.js +622 -0
- package/lib/commonjs/e2ee/omemo.js.map +1 -0
- package/lib/commonjs/e2ee/protobuf.js +149 -0
- package/lib/commonjs/e2ee/protobuf.js.map +1 -0
- package/lib/commonjs/e2ee/ratchet.js +238 -0
- package/lib/commonjs/e2ee/ratchet.js.map +1 -0
- package/lib/commonjs/e2ee/sealedBody.js +23 -0
- package/lib/commonjs/e2ee/sealedBody.js.map +1 -0
- package/lib/commonjs/e2ee/sealedFiles.js +174 -0
- package/lib/commonjs/e2ee/sealedFiles.js.map +1 -0
- package/lib/commonjs/e2ee/send.js +54 -0
- package/lib/commonjs/e2ee/send.js.map +1 -0
- package/lib/commonjs/e2ee/stanza.js +114 -0
- package/lib/commonjs/e2ee/stanza.js.map +1 -0
- package/lib/commonjs/e2ee/store.js +43 -0
- package/lib/commonjs/e2ee/store.js.map +1 -0
- package/lib/commonjs/helpers/accountName.js +23 -0
- package/lib/commonjs/helpers/accountName.js.map +1 -0
- package/lib/commonjs/helpers/createMessageFromXml.js +19 -4
- package/lib/commonjs/helpers/createMessageFromXml.js.map +1 -1
- package/lib/commonjs/helpers/createRoomFromApi.js +36 -2
- package/lib/commonjs/helpers/createRoomFromApi.js.map +1 -1
- package/lib/commonjs/helpers/createUserNameFromSetUser.js +2 -1
- package/lib/commonjs/helpers/createUserNameFromSetUser.js.map +1 -1
- package/lib/commonjs/helpers/displayName.js +16 -0
- package/lib/commonjs/helpers/displayName.js.map +1 -0
- package/lib/commonjs/helpers/emoji.js +51 -0
- package/lib/commonjs/helpers/emoji.js.map +1 -0
- package/lib/commonjs/helpers/haptics.js +29 -0
- package/lib/commonjs/helpers/haptics.js.map +1 -0
- package/lib/commonjs/helpers/historyPreloadScheduler.js +32 -66
- package/lib/commonjs/helpers/historyPreloadScheduler.js.map +1 -1
- package/lib/commonjs/helpers/insertMessageWithDelimiter.js +21 -12
- package/lib/commonjs/helpers/insertMessageWithDelimiter.js.map +1 -1
- package/lib/commonjs/helpers/mamReactions.js +57 -0
- package/lib/commonjs/helpers/mamReactions.js.map +1 -0
- package/lib/commonjs/helpers/parseMessageReference.js +42 -0
- package/lib/commonjs/helpers/parseMessageReference.js.map +1 -0
- package/lib/commonjs/helpers/persistCrypto.js +5 -0
- package/lib/commonjs/helpers/persistCrypto.js.map +1 -1
- package/lib/commonjs/helpers/reactionsConfig.js +17 -0
- package/lib/commonjs/helpers/reactionsConfig.js.map +1 -0
- package/lib/commonjs/helpers/secureKeyValue.js +20 -0
- package/lib/commonjs/helpers/secureKeyValue.js.map +1 -1
- package/lib/commonjs/helpers/updateMessagesTillLast.js +17 -2
- package/lib/commonjs/helpers/updateMessagesTillLast.js.map +1 -1
- package/lib/commonjs/helpers/videoCache.js +136 -0
- package/lib/commonjs/helpers/videoCache.js.map +1 -0
- package/lib/commonjs/hooks/useHeapSender.js +3 -1
- package/lib/commonjs/hooks/useHeapSender.js.map +1 -1
- package/lib/commonjs/hooks/useLogout.js +8 -0
- package/lib/commonjs/hooks/useLogout.js.map +1 -1
- package/lib/commonjs/hooks/useMessageHeapState.js +3 -2
- package/lib/commonjs/hooks/useMessageHeapState.js.map +1 -1
- package/lib/commonjs/hooks/useRoomInitialization.js +16 -7
- package/lib/commonjs/hooks/useRoomInitialization.js.map +1 -1
- package/lib/commonjs/hooks/useSendMessage.js +85 -15
- package/lib/commonjs/hooks/useSendMessage.js.map +1 -1
- package/lib/commonjs/hooks/useUnreadMessagesCounter.js +1 -1
- package/lib/commonjs/hooks/useUnreadMessagesCounter.js.map +1 -1
- package/lib/commonjs/i18n/strings.js +180 -0
- package/lib/commonjs/i18n/strings.js.map +1 -1
- package/lib/commonjs/main.js +13 -0
- package/lib/commonjs/main.js.map +1 -1
- package/lib/commonjs/networking/api-requests/auth.api.js +4 -1
- package/lib/commonjs/networking/api-requests/auth.api.js.map +1 -1
- package/lib/commonjs/networking/api-requests/rooms.api.js +111 -17
- package/lib/commonjs/networking/api-requests/rooms.api.js.map +1 -1
- package/lib/commonjs/networking/stanzaHandlers.js +106 -50
- package/lib/commonjs/networking/stanzaHandlers.js.map +1 -1
- package/lib/commonjs/networking/xmpp/getHistory.xmpp.js +29 -74
- package/lib/commonjs/networking/xmpp/getHistory.xmpp.js.map +1 -1
- package/lib/commonjs/networking/xmpp/handleStanzas.xmpp.js +44 -0
- package/lib/commonjs/networking/xmpp/handleStanzas.xmpp.js.map +1 -1
- package/lib/commonjs/networking/xmpp/mamRouter.js +186 -0
- package/lib/commonjs/networking/xmpp/mamRouter.js.map +1 -0
- package/lib/commonjs/networking/xmpp/presenceInRoom.xmpp.js +41 -4
- package/lib/commonjs/networking/xmpp/presenceInRoom.xmpp.js.map +1 -1
- package/lib/commonjs/networking/xmpp/sendMediaMessage.xmpp.js +16 -3
- package/lib/commonjs/networking/xmpp/sendMediaMessage.xmpp.js.map +1 -1
- package/lib/commonjs/networking/xmpp/sendTextMessage.xmpp.js +13 -6
- package/lib/commonjs/networking/xmpp/sendTextMessage.xmpp.js.map +1 -1
- package/lib/commonjs/networking/xmpp/sendTextMessageWithTranslateTag.xmpp.js +14 -6
- package/lib/commonjs/networking/xmpp/sendTextMessageWithTranslateTag.xmpp.js.map +1 -1
- package/lib/commonjs/networking/xmppClient.js +104 -23
- package/lib/commonjs/networking/xmppClient.js.map +1 -1
- package/lib/commonjs/roomStore/Middleware/newMessageMidlleware.js +29 -34
- package/lib/commonjs/roomStore/Middleware/newMessageMidlleware.js.map +1 -1
- package/lib/commonjs/roomStore/Middleware/perfMiddleware.js +51 -0
- package/lib/commonjs/roomStore/Middleware/perfMiddleware.js.map +1 -0
- package/lib/commonjs/roomStore/Middleware/reactionsMiddleware.js +66 -43
- package/lib/commonjs/roomStore/Middleware/reactionsMiddleware.js.map +1 -1
- package/lib/commonjs/roomStore/Middleware/unreadMidlleware.js +88 -68
- package/lib/commonjs/roomStore/Middleware/unreadMidlleware.js.map +1 -1
- package/lib/commonjs/roomStore/index.js +18 -14
- package/lib/commonjs/roomStore/index.js.map +1 -1
- package/lib/commonjs/roomStore/persistBackend.js +93 -0
- package/lib/commonjs/roomStore/persistBackend.js.map +1 -0
- package/lib/commonjs/roomStore/persistence.js +253 -51
- package/lib/commonjs/roomStore/persistence.js.map +1 -1
- package/lib/commonjs/roomStore/roomsSlice.js +282 -136
- package/lib/commonjs/roomStore/roomsSlice.js.map +1 -1
- package/lib/commonjs/theme/theme.js +3 -0
- package/lib/commonjs/theme/theme.js.map +1 -1
- package/lib/commonjs/utils/devLogger.js +14 -0
- package/lib/commonjs/utils/devLogger.js.map +1 -1
- package/lib/commonjs/version.js +1 -1
- package/lib/module/assets/emojiData.js +36 -0
- package/lib/module/assets/emojiData.js.map +1 -0
- package/lib/module/assets/icons.js +4 -2
- package/lib/module/assets/icons.js.map +1 -1
- package/lib/module/components/MainComponents/ChatHeader.js +37 -17
- package/lib/module/components/MainComponents/ChatHeader.js.map +1 -1
- package/lib/module/components/MainComponents/ChatRoom.js +34 -25
- package/lib/module/components/MainComponents/ChatRoom.js.map +1 -1
- package/lib/module/components/MainComponents/ChatWrapper.js +23 -17
- package/lib/module/components/MainComponents/ChatWrapper.js.map +1 -1
- package/lib/module/components/MainComponents/EncryptedSendNotice.js +42 -0
- package/lib/module/components/MainComponents/EncryptedSendNotice.js.map +1 -0
- package/lib/module/components/MainComponents/EncryptionCard.js +281 -0
- package/lib/module/components/MainComponents/EncryptionCard.js.map +1 -0
- package/lib/module/components/MainComponents/MediaMessage.js +7 -0
- package/lib/module/components/MainComponents/MediaMessage.js.map +1 -1
- package/lib/module/components/MainComponents/MessageContainer.js +7 -14
- package/lib/module/components/MainComponents/MessageContainer.js.map +1 -1
- package/lib/module/components/MainComponents/MessageList.js +110 -35
- package/lib/module/components/MainComponents/MessageList.js.map +1 -1
- package/lib/module/components/MainComponents/ReduxWrapper.js +5 -0
- package/lib/module/components/MainComponents/ReduxWrapper.js.map +1 -1
- package/lib/module/components/MainComponents/RoomList.js +32 -29
- package/lib/module/components/MainComponents/RoomList.js.map +1 -1
- package/lib/module/components/MainComponents/RoomStack.js +131 -63
- package/lib/module/components/MainComponents/RoomStack.js.map +1 -1
- package/lib/module/components/MainComponents/SealedAttachment.js +224 -0
- package/lib/module/components/MainComponents/SealedAttachment.js.map +1 -0
- package/lib/module/components/MainComponents/SystemMessage.js +6 -2
- package/lib/module/components/MainComponents/SystemMessage.js.map +1 -1
- package/lib/module/components/MessageBubble/Avatar.js +5 -1
- package/lib/module/components/MessageBubble/Avatar.js.map +1 -1
- package/lib/module/components/MessageBubble/BottomReplyContainer.js +19 -22
- package/lib/module/components/MessageBubble/BottomReplyContainer.js.map +1 -1
- package/lib/module/components/MessageBubble/EmojiPickerSheet.js +438 -0
- package/lib/module/components/MessageBubble/EmojiPickerSheet.js.map +1 -0
- package/lib/module/components/MessageBubble/Message.js +269 -140
- package/lib/module/components/MessageBubble/Message.js.map +1 -1
- package/lib/module/components/MessageBubble/MessageInteractions.js +217 -15
- package/lib/module/components/MessageBubble/MessageInteractions.js.map +1 -1
- package/lib/module/components/MessageBubble/MessageReaction.js +115 -94
- package/lib/module/components/MessageBubble/MessageReaction.js.map +1 -1
- package/lib/module/components/MessageBubble/MessageReply.js +65 -24
- package/lib/module/components/MessageBubble/MessageReply.js.map +1 -1
- package/lib/module/components/Modals/ChatProfileModal/ChatProfileModal.js +7 -4
- package/lib/module/components/Modals/ChatProfileModal/ChatProfileModal.js.map +1 -1
- package/lib/module/components/Modals/FilePreviewModal/FilePreviewModal.js +161 -18
- package/lib/module/components/Modals/FilePreviewModal/FilePreviewModal.js.map +1 -1
- package/lib/module/components/Modals/FilePreviewModal/PdfView.js +4 -0
- package/lib/module/components/Modals/FilePreviewModal/PdfView.js.map +1 -1
- package/lib/module/components/Modals/Modal/SwipeBackLayer.js +76 -44
- package/lib/module/components/Modals/Modal/SwipeBackLayer.js.map +1 -1
- package/lib/module/components/Modals/UserProfileModal/UserProfileModal.js +32 -8
- package/lib/module/components/Modals/UserProfileModal/UserProfileModal.js.map +1 -1
- package/lib/module/components/Modals/UserSettingsModal/UserSettingsModal.js +4 -0
- package/lib/module/components/Modals/UserSettingsModal/UserSettingsModal.js.map +1 -1
- package/lib/module/components/RoomComponents/ChatRoomItem.js +37 -13
- package/lib/module/components/RoomComponents/ChatRoomItem.js.map +1 -1
- package/lib/module/components/RoomComponents/LastMessageItem.js +6 -0
- package/lib/module/components/RoomComponents/LastMessageItem.js.map +1 -1
- package/lib/module/components/RoomComponents/styled/LastAudioMessage.js +2 -2
- package/lib/module/components/RoomComponents/styled/LastAudioMessage.js.map +1 -1
- package/lib/module/components/RoomComponents/styled/LastMessageEmoji.js +8 -9
- package/lib/module/components/RoomComponents/styled/LastMessageEmoji.js.map +1 -1
- package/lib/module/components/RoomComponents/styled/LastMessageFile.js +4 -6
- package/lib/module/components/RoomComponents/styled/LastMessageFile.js.map +1 -1
- package/lib/module/components/RoomComponents/styled/LastMessagePhoto.js +2 -2
- package/lib/module/components/RoomComponents/styled/LastMessagePhoto.js.map +1 -1
- package/lib/module/components/RoomComponents/styled/LastMessageSealed.js +36 -0
- package/lib/module/components/RoomComponents/styled/LastMessageSealed.js.map +1 -0
- package/lib/module/components/RoomComponents/styled/LastMessageVideo.js +2 -2
- package/lib/module/components/RoomComponents/styled/LastMessageVideo.js.map +1 -1
- package/lib/module/components/Thread/ThreadWrapper.js +273 -153
- package/lib/module/components/Thread/ThreadWrapper.js.map +1 -1
- package/lib/module/components/UsersList/UsersList.js +2 -1
- package/lib/module/components/UsersList/UsersList.js.map +1 -1
- package/lib/module/components/styled/DateLabel.js +6 -3
- package/lib/module/components/styled/DateLabel.js.map +1 -1
- package/lib/module/components/styled/SendInput.js +4 -2
- package/lib/module/components/styled/SendInput.js.map +1 -1
- package/lib/module/context/MessageNotificationContext.js +190 -11
- package/lib/module/context/MessageNotificationContext.js.map +1 -1
- package/lib/module/context/xmppProvider.js +22 -7
- package/lib/module/context/xmppProvider.js.map +1 -1
- package/lib/module/e2ee/crypto.js +170 -0
- package/lib/module/e2ee/crypto.js.map +1 -0
- package/lib/module/e2ee/deviceStore.js +77 -0
- package/lib/module/e2ee/deviceStore.js.map +1 -0
- package/lib/module/e2ee/fileCipher.js +90 -0
- package/lib/module/e2ee/fileCipher.js.map +1 -0
- package/lib/module/e2ee/fileEnvelope.js +66 -0
- package/lib/module/e2ee/fileEnvelope.js.map +1 -0
- package/lib/module/e2ee/index.js +185 -0
- package/lib/module/e2ee/index.js.map +1 -0
- package/lib/module/e2ee/limits.js +5 -0
- package/lib/module/e2ee/limits.js.map +1 -0
- package/lib/module/e2ee/ns.js +4 -0
- package/lib/module/e2ee/ns.js.map +1 -0
- package/lib/module/e2ee/omemo.js +610 -0
- package/lib/module/e2ee/omemo.js.map +1 -0
- package/lib/module/e2ee/protobuf.js +140 -0
- package/lib/module/e2ee/protobuf.js.map +1 -0
- package/lib/module/e2ee/ratchet.js +228 -0
- package/lib/module/e2ee/ratchet.js.map +1 -0
- package/lib/module/e2ee/sealedBody.js +19 -0
- package/lib/module/e2ee/sealedBody.js.map +1 -0
- package/lib/module/e2ee/sealedFiles.js +154 -0
- package/lib/module/e2ee/sealedFiles.js.map +1 -0
- package/lib/module/e2ee/send.js +48 -0
- package/lib/module/e2ee/send.js.map +1 -0
- package/lib/module/e2ee/stanza.js +107 -0
- package/lib/module/e2ee/stanza.js.map +1 -0
- package/lib/module/e2ee/store.js +35 -0
- package/lib/module/e2ee/store.js.map +1 -0
- package/lib/module/helpers/accountName.js +18 -0
- package/lib/module/helpers/accountName.js.map +1 -0
- package/lib/module/helpers/createMessageFromXml.js +19 -4
- package/lib/module/helpers/createMessageFromXml.js.map +1 -1
- package/lib/module/helpers/createRoomFromApi.js +36 -2
- package/lib/module/helpers/createRoomFromApi.js.map +1 -1
- package/lib/module/helpers/createUserNameFromSetUser.js +3 -1
- package/lib/module/helpers/createUserNameFromSetUser.js.map +1 -1
- package/lib/module/helpers/displayName.js +11 -0
- package/lib/module/helpers/displayName.js.map +1 -0
- package/lib/module/helpers/emoji.js +44 -0
- package/lib/module/helpers/emoji.js.map +1 -0
- package/lib/module/helpers/haptics.js +24 -0
- package/lib/module/helpers/haptics.js.map +1 -0
- package/lib/module/helpers/historyPreloadScheduler.js +32 -66
- package/lib/module/helpers/historyPreloadScheduler.js.map +1 -1
- package/lib/module/helpers/insertMessageWithDelimiter.js +21 -12
- package/lib/module/helpers/insertMessageWithDelimiter.js.map +1 -1
- package/lib/module/helpers/mamReactions.js +51 -0
- package/lib/module/helpers/mamReactions.js.map +1 -0
- package/lib/module/helpers/parseMessageReference.js +37 -0
- package/lib/module/helpers/parseMessageReference.js.map +1 -0
- package/lib/module/helpers/persistCrypto.js +4 -0
- package/lib/module/helpers/persistCrypto.js.map +1 -1
- package/lib/module/helpers/reactionsConfig.js +10 -0
- package/lib/module/helpers/reactionsConfig.js.map +1 -0
- package/lib/module/helpers/secureKeyValue.js +19 -0
- package/lib/module/helpers/secureKeyValue.js.map +1 -1
- package/lib/module/helpers/updateMessagesTillLast.js +17 -2
- package/lib/module/helpers/updateMessagesTillLast.js.map +1 -1
- package/lib/module/helpers/videoCache.js +125 -0
- package/lib/module/helpers/videoCache.js.map +1 -0
- package/lib/module/hooks/useHeapSender.js +3 -1
- package/lib/module/hooks/useHeapSender.js.map +1 -1
- package/lib/module/hooks/useLogout.js +8 -0
- package/lib/module/hooks/useLogout.js.map +1 -1
- package/lib/module/hooks/useMessageHeapState.js +3 -2
- package/lib/module/hooks/useMessageHeapState.js.map +1 -1
- package/lib/module/hooks/useRoomInitialization.js +17 -8
- package/lib/module/hooks/useRoomInitialization.js.map +1 -1
- package/lib/module/hooks/useSendMessage.js +85 -15
- package/lib/module/hooks/useSendMessage.js.map +1 -1
- package/lib/module/hooks/useUnreadMessagesCounter.js +1 -1
- package/lib/module/hooks/useUnreadMessagesCounter.js.map +1 -1
- package/lib/module/i18n/strings.js +180 -0
- package/lib/module/i18n/strings.js.map +1 -1
- package/lib/module/main.js +1 -0
- package/lib/module/main.js.map +1 -1
- package/lib/module/networking/api-requests/auth.api.js +4 -1
- package/lib/module/networking/api-requests/auth.api.js.map +1 -1
- package/lib/module/networking/api-requests/rooms.api.js +109 -18
- package/lib/module/networking/api-requests/rooms.api.js.map +1 -1
- package/lib/module/networking/stanzaHandlers.js +107 -51
- package/lib/module/networking/stanzaHandlers.js.map +1 -1
- package/lib/module/networking/xmpp/getHistory.xmpp.js +29 -74
- package/lib/module/networking/xmpp/getHistory.xmpp.js.map +1 -1
- package/lib/module/networking/xmpp/handleStanzas.xmpp.js +42 -0
- package/lib/module/networking/xmpp/handleStanzas.xmpp.js.map +1 -1
- package/lib/module/networking/xmpp/mamRouter.js +175 -0
- package/lib/module/networking/xmpp/mamRouter.js.map +1 -0
- package/lib/module/networking/xmpp/presenceInRoom.xmpp.js +38 -2
- package/lib/module/networking/xmpp/presenceInRoom.xmpp.js.map +1 -1
- package/lib/module/networking/xmpp/sendMediaMessage.xmpp.js +16 -3
- package/lib/module/networking/xmpp/sendMediaMessage.xmpp.js.map +1 -1
- package/lib/module/networking/xmpp/sendTextMessage.xmpp.js +13 -6
- package/lib/module/networking/xmpp/sendTextMessage.xmpp.js.map +1 -1
- package/lib/module/networking/xmpp/sendTextMessageWithTranslateTag.xmpp.js +14 -6
- package/lib/module/networking/xmpp/sendTextMessageWithTranslateTag.xmpp.js.map +1 -1
- package/lib/module/networking/xmppClient.js +105 -24
- package/lib/module/networking/xmppClient.js.map +1 -1
- package/lib/module/roomStore/Middleware/newMessageMidlleware.js +29 -34
- package/lib/module/roomStore/Middleware/newMessageMidlleware.js.map +1 -1
- package/lib/module/roomStore/Middleware/perfMiddleware.js +45 -0
- package/lib/module/roomStore/Middleware/perfMiddleware.js.map +1 -0
- package/lib/module/roomStore/Middleware/reactionsMiddleware.js +66 -43
- package/lib/module/roomStore/Middleware/reactionsMiddleware.js.map +1 -1
- package/lib/module/roomStore/Middleware/unreadMidlleware.js +89 -69
- package/lib/module/roomStore/Middleware/unreadMidlleware.js.map +1 -1
- package/lib/module/roomStore/index.js +19 -15
- package/lib/module/roomStore/index.js.map +1 -1
- package/lib/module/roomStore/persistBackend.js +86 -0
- package/lib/module/roomStore/persistBackend.js.map +1 -0
- package/lib/module/roomStore/persistence.js +253 -49
- package/lib/module/roomStore/persistence.js.map +1 -1
- package/lib/module/roomStore/roomsSlice.js +275 -134
- package/lib/module/roomStore/roomsSlice.js.map +1 -1
- package/lib/module/theme/theme.js +3 -0
- package/lib/module/theme/theme.js.map +1 -1
- package/lib/module/utils/devLogger.js +13 -0
- package/lib/module/utils/devLogger.js.map +1 -1
- package/lib/module/version.js +1 -1
- package/lib/typescript/assets/emojiData.d.ts +8 -0
- package/lib/typescript/assets/emojiData.d.ts.map +1 -0
- package/lib/typescript/assets/icons.d.ts +8 -0
- package/lib/typescript/assets/icons.d.ts.map +1 -1
- package/lib/typescript/components/MainComponents/ChatHeader.d.ts.map +1 -1
- package/lib/typescript/components/MainComponents/ChatRoom.d.ts.map +1 -1
- package/lib/typescript/components/MainComponents/ChatWrapper.d.ts.map +1 -1
- package/lib/typescript/components/MainComponents/EncryptedSendNotice.d.ts +4 -0
- package/lib/typescript/components/MainComponents/EncryptedSendNotice.d.ts.map +1 -0
- package/lib/typescript/components/MainComponents/EncryptionCard.d.ts +10 -0
- package/lib/typescript/components/MainComponents/EncryptionCard.d.ts.map +1 -0
- package/lib/typescript/components/MainComponents/MediaMessage.d.ts.map +1 -1
- package/lib/typescript/components/MainComponents/MessageContainer.d.ts +2 -2
- package/lib/typescript/components/MainComponents/MessageContainer.d.ts.map +1 -1
- package/lib/typescript/components/MainComponents/MessageList.d.ts.map +1 -1
- package/lib/typescript/components/MainComponents/ReduxWrapper.d.ts.map +1 -1
- package/lib/typescript/components/MainComponents/RoomList.d.ts.map +1 -1
- package/lib/typescript/components/MainComponents/RoomStack.d.ts +7 -2
- package/lib/typescript/components/MainComponents/RoomStack.d.ts.map +1 -1
- package/lib/typescript/components/MainComponents/SealedAttachment.d.ts +13 -0
- package/lib/typescript/components/MainComponents/SealedAttachment.d.ts.map +1 -0
- package/lib/typescript/components/MainComponents/SystemMessage.d.ts.map +1 -1
- package/lib/typescript/components/MessageBubble/Avatar.d.ts +2 -0
- package/lib/typescript/components/MessageBubble/Avatar.d.ts.map +1 -1
- package/lib/typescript/components/MessageBubble/BottomReplyContainer.d.ts.map +1 -1
- package/lib/typescript/components/MessageBubble/EmojiPickerSheet.d.ts +11 -0
- package/lib/typescript/components/MessageBubble/EmojiPickerSheet.d.ts.map +1 -0
- package/lib/typescript/components/MessageBubble/Message.d.ts +2 -2
- package/lib/typescript/components/MessageBubble/Message.d.ts.map +1 -1
- package/lib/typescript/components/MessageBubble/MessageInteractions.d.ts +2 -0
- package/lib/typescript/components/MessageBubble/MessageInteractions.d.ts.map +1 -1
- package/lib/typescript/components/MessageBubble/MessageReaction.d.ts +1 -0
- package/lib/typescript/components/MessageBubble/MessageReaction.d.ts.map +1 -1
- package/lib/typescript/components/MessageBubble/MessageReply.d.ts +7 -7
- package/lib/typescript/components/MessageBubble/MessageReply.d.ts.map +1 -1
- package/lib/typescript/components/Modals/ChatProfileModal/ChatProfileModal.d.ts.map +1 -1
- package/lib/typescript/components/Modals/FilePreviewModal/FilePreviewModal.d.ts.map +1 -1
- package/lib/typescript/components/Modals/FilePreviewModal/PdfView.d.ts.map +1 -1
- package/lib/typescript/components/Modals/Modal/SwipeBackLayer.d.ts +2 -1
- package/lib/typescript/components/Modals/Modal/SwipeBackLayer.d.ts.map +1 -1
- package/lib/typescript/components/Modals/UserProfileModal/UserProfileModal.d.ts.map +1 -1
- package/lib/typescript/components/Modals/UserSettingsModal/UserSettingsModal.d.ts.map +1 -1
- package/lib/typescript/components/RoomComponents/ChatRoomItem.d.ts +2 -2
- package/lib/typescript/components/RoomComponents/ChatRoomItem.d.ts.map +1 -1
- package/lib/typescript/components/RoomComponents/LastMessageItem.d.ts.map +1 -1
- package/lib/typescript/components/RoomComponents/styled/LastAudioMessage.d.ts.map +1 -1
- package/lib/typescript/components/RoomComponents/styled/LastMessageEmoji.d.ts +3 -6
- package/lib/typescript/components/RoomComponents/styled/LastMessageEmoji.d.ts.map +1 -1
- package/lib/typescript/components/RoomComponents/styled/LastMessageSealed.d.ts +7 -0
- package/lib/typescript/components/RoomComponents/styled/LastMessageSealed.d.ts.map +1 -0
- package/lib/typescript/components/Thread/ThreadWrapper.d.ts +7 -1
- package/lib/typescript/components/Thread/ThreadWrapper.d.ts.map +1 -1
- package/lib/typescript/components/UsersList/UsersList.d.ts.map +1 -1
- package/lib/typescript/components/styled/DateLabel.d.ts +1 -0
- package/lib/typescript/components/styled/DateLabel.d.ts.map +1 -1
- package/lib/typescript/components/styled/SendInput.d.ts +1 -0
- package/lib/typescript/components/styled/SendInput.d.ts.map +1 -1
- package/lib/typescript/context/MessageNotificationContext.d.ts.map +1 -1
- package/lib/typescript/context/xmppProvider.d.ts.map +1 -1
- package/lib/typescript/e2ee/crypto.d.ts +28 -0
- package/lib/typescript/e2ee/crypto.d.ts.map +1 -0
- package/lib/typescript/e2ee/deviceStore.d.ts +4 -0
- package/lib/typescript/e2ee/deviceStore.d.ts.map +1 -0
- package/lib/typescript/e2ee/fileCipher.d.ts +7 -0
- package/lib/typescript/e2ee/fileCipher.d.ts.map +1 -0
- package/lib/typescript/e2ee/fileEnvelope.d.ts +27 -0
- package/lib/typescript/e2ee/fileEnvelope.d.ts.map +1 -0
- package/lib/typescript/e2ee/index.d.ts +23 -0
- package/lib/typescript/e2ee/index.d.ts.map +1 -0
- package/lib/typescript/e2ee/limits.d.ts +3 -0
- package/lib/typescript/e2ee/limits.d.ts.map +1 -0
- package/lib/typescript/e2ee/ns.d.ts +2 -0
- package/lib/typescript/e2ee/ns.d.ts.map +1 -0
- package/lib/typescript/e2ee/omemo.d.ts +64 -0
- package/lib/typescript/e2ee/omemo.d.ts.map +1 -0
- package/lib/typescript/e2ee/protobuf.d.ts +25 -0
- package/lib/typescript/e2ee/protobuf.d.ts.map +1 -0
- package/lib/typescript/e2ee/ratchet.d.ts +39 -0
- package/lib/typescript/e2ee/ratchet.d.ts.map +1 -0
- package/lib/typescript/e2ee/sealedBody.d.ts +2 -0
- package/lib/typescript/e2ee/sealedBody.d.ts.map +1 -0
- package/lib/typescript/e2ee/sealedFiles.d.ts +31 -0
- package/lib/typescript/e2ee/sealedFiles.d.ts.map +1 -0
- package/lib/typescript/e2ee/send.d.ts +6 -0
- package/lib/typescript/e2ee/send.d.ts.map +1 -0
- package/lib/typescript/e2ee/stanza.d.ts +8 -0
- package/lib/typescript/e2ee/stanza.d.ts.map +1 -0
- package/lib/typescript/e2ee/store.d.ts +16 -0
- package/lib/typescript/e2ee/store.d.ts.map +1 -0
- package/lib/typescript/helpers/accountName.d.ts +7 -0
- package/lib/typescript/helpers/accountName.d.ts.map +1 -0
- package/lib/typescript/helpers/createMessageFromXml.d.ts.map +1 -1
- package/lib/typescript/helpers/createRoomFromApi.d.ts.map +1 -1
- package/lib/typescript/helpers/createUserNameFromSetUser.d.ts.map +1 -1
- package/lib/typescript/helpers/displayName.d.ts +2 -0
- package/lib/typescript/helpers/displayName.d.ts.map +1 -0
- package/lib/typescript/helpers/emoji.d.ts +6 -0
- package/lib/typescript/helpers/emoji.d.ts.map +1 -0
- package/lib/typescript/helpers/haptics.d.ts +3 -0
- package/lib/typescript/helpers/haptics.d.ts.map +1 -0
- package/lib/typescript/helpers/historyPreloadScheduler.d.ts +1 -0
- package/lib/typescript/helpers/historyPreloadScheduler.d.ts.map +1 -1
- package/lib/typescript/helpers/insertMessageWithDelimiter.d.ts.map +1 -1
- package/lib/typescript/helpers/mamReactions.d.ts +13 -0
- package/lib/typescript/helpers/mamReactions.d.ts.map +1 -0
- package/lib/typescript/helpers/parseMessageReference.d.ts +16 -0
- package/lib/typescript/helpers/parseMessageReference.d.ts.map +1 -0
- package/lib/typescript/helpers/persistCrypto.d.ts +1 -0
- package/lib/typescript/helpers/persistCrypto.d.ts.map +1 -1
- package/lib/typescript/helpers/reactionsConfig.d.ts +5 -0
- package/lib/typescript/helpers/reactionsConfig.d.ts.map +1 -0
- package/lib/typescript/helpers/secureKeyValue.d.ts +4 -0
- package/lib/typescript/helpers/secureKeyValue.d.ts.map +1 -1
- package/lib/typescript/helpers/updateMessagesTillLast.d.ts.map +1 -1
- package/lib/typescript/helpers/videoCache.d.ts +19 -0
- package/lib/typescript/helpers/videoCache.d.ts.map +1 -0
- package/lib/typescript/hooks/useHeapSender.d.ts.map +1 -1
- package/lib/typescript/hooks/useLogout.d.ts.map +1 -1
- package/lib/typescript/hooks/useMessageHeapState.d.ts.map +1 -1
- package/lib/typescript/hooks/useRoomInitialization.d.ts +2 -2
- package/lib/typescript/hooks/useRoomInitialization.d.ts.map +1 -1
- package/lib/typescript/hooks/useSendMessage.d.ts.map +1 -1
- package/lib/typescript/i18n/strings.d.ts.map +1 -1
- package/lib/typescript/main.d.ts +2 -0
- package/lib/typescript/main.d.ts.map +1 -1
- package/lib/typescript/networking/api-requests/auth.api.d.ts +4 -1
- package/lib/typescript/networking/api-requests/auth.api.d.ts.map +1 -1
- package/lib/typescript/networking/api-requests/rooms.api.d.ts +22 -1
- package/lib/typescript/networking/api-requests/rooms.api.d.ts.map +1 -1
- package/lib/typescript/networking/stanzaHandlers.d.ts +4 -2
- package/lib/typescript/networking/stanzaHandlers.d.ts.map +1 -1
- package/lib/typescript/networking/xmpp/getHistory.xmpp.d.ts +3 -1
- package/lib/typescript/networking/xmpp/getHistory.xmpp.d.ts.map +1 -1
- package/lib/typescript/networking/xmpp/handleStanzas.xmpp.d.ts +1 -0
- package/lib/typescript/networking/xmpp/handleStanzas.xmpp.d.ts.map +1 -1
- package/lib/typescript/networking/xmpp/mamRouter.d.ts +23 -0
- package/lib/typescript/networking/xmpp/mamRouter.d.ts.map +1 -0
- package/lib/typescript/networking/xmpp/presenceInRoom.xmpp.d.ts +1 -0
- package/lib/typescript/networking/xmpp/presenceInRoom.xmpp.d.ts.map +1 -1
- package/lib/typescript/networking/xmpp/sendMediaMessage.xmpp.d.ts.map +1 -1
- package/lib/typescript/networking/xmpp/sendTextMessage.xmpp.d.ts.map +1 -1
- package/lib/typescript/networking/xmpp/sendTextMessageWithTranslateTag.xmpp.d.ts.map +1 -1
- package/lib/typescript/networking/xmppClient.d.ts +22 -1
- package/lib/typescript/networking/xmppClient.d.ts.map +1 -1
- package/lib/typescript/roomStore/Middleware/newMessageMidlleware.d.ts.map +1 -1
- package/lib/typescript/roomStore/Middleware/perfMiddleware.d.ts +4 -0
- package/lib/typescript/roomStore/Middleware/perfMiddleware.d.ts.map +1 -0
- package/lib/typescript/roomStore/Middleware/reactionsMiddleware.d.ts +9 -0
- package/lib/typescript/roomStore/Middleware/reactionsMiddleware.d.ts.map +1 -1
- package/lib/typescript/roomStore/Middleware/unreadMidlleware.d.ts.map +1 -1
- package/lib/typescript/roomStore/index.d.ts.map +1 -1
- package/lib/typescript/roomStore/persistBackend.d.ts +11 -0
- package/lib/typescript/roomStore/persistBackend.d.ts.map +1 -0
- package/lib/typescript/roomStore/persistence.d.ts +5 -6
- package/lib/typescript/roomStore/persistence.d.ts.map +1 -1
- package/lib/typescript/roomStore/roomsSlice.d.ts +41 -1
- package/lib/typescript/roomStore/roomsSlice.d.ts.map +1 -1
- package/lib/typescript/theme/theme.d.ts +4 -1
- package/lib/typescript/theme/theme.d.ts.map +1 -1
- package/lib/typescript/types/models/message.model.d.ts +9 -0
- package/lib/typescript/types/models/message.model.d.ts.map +1 -1
- package/lib/typescript/types/models/room.model.d.ts +21 -0
- package/lib/typescript/types/models/room.model.d.ts.map +1 -1
- package/lib/typescript/types/models/xmpp.model.d.ts +6 -1
- package/lib/typescript/types/models/xmpp.model.d.ts.map +1 -1
- package/lib/typescript/types/types.d.ts +19 -3
- package/lib/typescript/types/types.d.ts.map +1 -1
- package/lib/typescript/utils/devLogger.d.ts +8 -0
- package/lib/typescript/utils/devLogger.d.ts.map +1 -1
- package/lib/typescript/version.d.ts +1 -1
- package/package.json +14 -1
- package/src/assets/emojiData.ts +2146 -0
- package/src/assets/icons.tsx +32 -5
- package/src/components/MainComponents/ChatHeader.tsx +46 -16
- package/src/components/MainComponents/ChatRoom.tsx +46 -30
- package/src/components/MainComponents/ChatWrapper.tsx +28 -10
- package/src/components/MainComponents/EncryptedSendNotice.tsx +35 -0
- package/src/components/MainComponents/EncryptionCard.tsx +287 -0
- package/src/components/MainComponents/MediaMessage.tsx +5 -0
- package/src/components/MainComponents/MessageContainer.tsx +7 -15
- package/src/components/MainComponents/MessageList.tsx +96 -43
- package/src/components/MainComponents/ReduxWrapper.tsx +5 -0
- package/src/components/MainComponents/RoomList.tsx +28 -29
- package/src/components/MainComponents/RoomStack.tsx +156 -83
- package/src/components/MainComponents/SealedAttachment.tsx +251 -0
- package/src/components/MainComponents/SystemMessage.tsx +6 -2
- package/src/components/MessageBubble/Avatar.tsx +7 -1
- package/src/components/MessageBubble/BottomReplyContainer.tsx +20 -21
- package/src/components/MessageBubble/EmojiPickerSheet.tsx +468 -0
- package/src/components/MessageBubble/Message.tsx +242 -93
- package/src/components/MessageBubble/MessageInteractions.tsx +215 -15
- package/src/components/MessageBubble/MessageReaction.tsx +120 -96
- package/src/components/MessageBubble/MessageReply.tsx +65 -32
- package/src/components/Modals/ChatProfileModal/ChatProfileModal.tsx +7 -4
- package/src/components/Modals/FilePreviewModal/FilePreviewModal.tsx +181 -35
- package/src/components/Modals/FilePreviewModal/PdfView.tsx +4 -0
- package/src/components/Modals/Modal/SwipeBackLayer.tsx +114 -63
- package/src/components/Modals/UserProfileModal/UserProfileModal.tsx +53 -8
- package/src/components/Modals/UserSettingsModal/UserSettingsModal.tsx +5 -0
- package/src/components/RoomComponents/ChatRoomItem.tsx +34 -15
- package/src/components/RoomComponents/LastMessageItem.tsx +5 -0
- package/src/components/RoomComponents/styled/LastAudioMessage.tsx +3 -1
- package/src/components/RoomComponents/styled/LastMessageEmoji.tsx +7 -8
- package/src/components/RoomComponents/styled/LastMessageFile.tsx +2 -2
- package/src/components/RoomComponents/styled/LastMessagePhoto.tsx +1 -1
- package/src/components/RoomComponents/styled/LastMessageSealed.tsx +31 -0
- package/src/components/RoomComponents/styled/LastMessageVideo.tsx +1 -1
- package/src/components/Thread/ThreadWrapper.tsx +287 -198
- package/src/components/UsersList/UsersList.tsx +2 -1
- package/src/components/styled/DateLabel.tsx +7 -3
- package/src/components/styled/SendInput.tsx +5 -2
- package/src/context/MessageNotificationContext.tsx +205 -7
- package/src/context/xmppProvider.tsx +29 -9
- package/src/e2ee/crypto.ts +194 -0
- package/src/e2ee/deviceStore.ts +80 -0
- package/src/e2ee/fileCipher.ts +86 -0
- package/src/e2ee/fileEnvelope.ts +115 -0
- package/src/e2ee/index.ts +192 -0
- package/src/e2ee/limits.ts +2 -0
- package/src/e2ee/ns.ts +1 -0
- package/src/e2ee/omemo.ts +802 -0
- package/src/e2ee/protobuf.ts +188 -0
- package/src/e2ee/ratchet.ts +271 -0
- package/src/e2ee/sealedBody.ts +17 -0
- package/src/e2ee/sealedFiles.ts +181 -0
- package/src/e2ee/send.ts +70 -0
- package/src/e2ee/stanza.ts +133 -0
- package/src/e2ee/store.ts +54 -0
- package/src/helpers/accountName.ts +15 -0
- package/src/helpers/createMessageFromXml.ts +31 -6
- package/src/helpers/createRoomFromApi.tsx +37 -1
- package/src/helpers/createUserNameFromSetUser.ts +2 -1
- package/src/helpers/displayName.ts +9 -0
- package/src/helpers/emoji.ts +39 -0
- package/src/helpers/haptics.ts +19 -0
- package/src/helpers/historyPreloadScheduler.ts +37 -69
- package/src/helpers/insertMessageWithDelimiter.ts +23 -16
- package/src/helpers/mamReactions.ts +59 -0
- package/src/helpers/parseMessageReference.ts +38 -0
- package/src/helpers/persistCrypto.ts +5 -0
- package/src/helpers/reactionsConfig.ts +13 -0
- package/src/helpers/secureKeyValue.ts +15 -0
- package/src/helpers/updateMessagesTillLast.tsx +14 -2
- package/src/helpers/videoCache.ts +138 -0
- package/src/hooks/useHeapSender.tsx +3 -2
- package/src/hooks/useLogout.tsx +9 -0
- package/src/hooks/useMessageHeapState.tsx +6 -2
- package/src/hooks/useRoomInitialization.tsx +32 -15
- package/src/hooks/useSendMessage.tsx +89 -16
- package/src/hooks/useUnreadMessagesCounter.ts +1 -1
- package/src/i18n/strings.ts +180 -0
- package/src/main.ts +2 -0
- package/src/networking/api-requests/auth.api.ts +9 -1
- package/src/networking/api-requests/rooms.api.ts +121 -18
- package/src/networking/stanzaHandlers.ts +116 -60
- package/src/networking/xmpp/getHistory.xmpp.ts +44 -106
- package/src/networking/xmpp/handleStanzas.xmpp.ts +51 -0
- package/src/networking/xmpp/mamRouter.ts +176 -0
- package/src/networking/xmpp/presenceInRoom.xmpp.ts +46 -3
- package/src/networking/xmpp/sendMediaMessage.xmpp.ts +19 -1
- package/src/networking/xmpp/sendTextMessage.xmpp.ts +17 -10
- package/src/networking/xmpp/sendTextMessageWithTranslateTag.xmpp.ts +23 -10
- package/src/networking/xmppClient.ts +111 -20
- package/src/roomStore/Middleware/newMessageMidlleware.tsx +35 -38
- package/src/roomStore/Middleware/perfMiddleware.ts +50 -0
- package/src/roomStore/Middleware/reactionsMiddleware.tsx +53 -52
- package/src/roomStore/Middleware/unreadMidlleware.tsx +92 -80
- package/src/roomStore/index.ts +28 -27
- package/src/roomStore/persistBackend.ts +93 -0
- package/src/roomStore/persistence.ts +295 -73
- package/src/roomStore/roomsSlice.ts +304 -155
- package/src/theme/theme.ts +10 -1
- package/src/types/models/message.model.ts +9 -0
- package/src/types/models/room.model.ts +22 -0
- package/src/types/models/xmpp.model.ts +4 -2
- package/src/types/types.ts +19 -3
- package/src/utils/devLogger.ts +16 -0
- package/src/version.ts +1 -1
package/src/assets/icons.tsx
CHANGED
|
@@ -305,18 +305,18 @@ export const DeleteIcon = ({
|
|
|
305
305
|
</Svg>
|
|
306
306
|
);
|
|
307
307
|
|
|
308
|
-
export const CopyIcon = ({ color = '#
|
|
308
|
+
export const CopyIcon = ({ color = '#1F1F1F', ...props }) => (
|
|
309
309
|
<Svg width="24" height="24" viewBox="0 0 24 24" fill="none" {...props}>
|
|
310
310
|
<Path
|
|
311
311
|
d="M8 4V16C8 16.5304 8.21071 17.0391 8.58579 17.4142C8.96086 17.7893 9.46957 18 10 18H18C18.5304 18 19.0391 17.7893 19.4142 17.4142C19.7893 17.0391 20 16.5304 20 16V7.242C20 6.97556 19.9467 6.71181 19.8433 6.46624C19.7399 6.22068 19.5885 5.99824 19.398 5.812L16.083 2.57C15.7094 2.20466 15.2076 2.00007 14.685 2H10C9.46957 2 8.96086 2.21071 8.58579 2.58579C8.21071 2.96086 8 3.46957 8 4Z"
|
|
312
|
-
stroke=
|
|
312
|
+
stroke={color}
|
|
313
313
|
strokeWidth="2"
|
|
314
314
|
strokeLinecap="round"
|
|
315
315
|
strokeLinejoin="round"
|
|
316
316
|
/>
|
|
317
317
|
<Path
|
|
318
318
|
d="M16 18V20C16 20.5304 15.7893 21.0391 15.4142 21.4142C15.0391 21.7893 14.5304 22 14 22H6C5.46957 22 4.96086 21.7893 4.58579 21.4142C4.21071 21.0391 4 20.5304 4 20V9C4 8.46957 4.21071 7.96086 4.58579 7.58579C4.96086 7.21071 5.46957 7 6 7H8"
|
|
319
|
-
stroke=
|
|
319
|
+
stroke={color}
|
|
320
320
|
strokeWidth="2"
|
|
321
321
|
strokeLinecap="round"
|
|
322
322
|
strokeLinejoin="round"
|
|
@@ -324,11 +324,11 @@ export const CopyIcon = ({ color = '#8C8C8C', ...props }) => (
|
|
|
324
324
|
</Svg>
|
|
325
325
|
);
|
|
326
326
|
|
|
327
|
-
export const ReplyIcon = ({ color = '#
|
|
327
|
+
export const ReplyIcon = ({ color = '#1F1F1F', ...props }) => (
|
|
328
328
|
<Svg width="24" height="24" viewBox="0 0 24 24" fill="none" {...props}>
|
|
329
329
|
<Path
|
|
330
330
|
d="M9.89797 7.51968C9.9311 7.5051 9.96737 7.49907 10.0034 7.50217C10.0395 7.50526 10.0742 7.51737 10.1044 7.53738C10.1346 7.55739 10.1592 7.58467 10.1761 7.6167C10.193 7.64873 10.2015 7.68448 10.201 7.72068V9.45018C10.201 9.6491 10.28 9.83986 10.4206 9.98051C10.5613 10.1212 10.7521 10.2002 10.951 10.2002C11.9515 10.2002 13.9705 10.2077 15.901 11.4332C17.377 12.3692 18.886 14.0732 19.7935 17.2472C18.2635 15.7727 16.516 14.9732 14.986 14.5487C14.0456 14.2884 13.0791 14.1345 12.1045 14.0897C11.7056 14.0709 11.3059 14.0749 10.9075 14.1017H10.888L10.8805 14.1032L10.951 14.8502L10.876 14.1032C10.6908 14.1218 10.5192 14.2085 10.3945 14.3466C10.2698 14.4846 10.2008 14.6641 10.201 14.8502V16.5797C10.201 16.7417 10.036 16.8437 9.89797 16.7807L3.92197 12.3812L3.85897 12.3392C3.82635 12.3196 3.79936 12.2919 3.78063 12.2588C3.76189 12.2256 3.75204 12.1882 3.75204 12.1502C3.75204 12.1121 3.76189 12.0747 3.78063 12.0416C3.79936 12.0085 3.82635 11.9808 3.85897 11.9612L3.92197 11.9192L9.89797 7.51968ZM11.701 15.5792C11.804 15.5792 11.9155 15.5822 12.0355 15.5882C12.6865 15.6182 13.5865 15.7172 14.5855 15.9947C16.5745 16.5467 18.9295 17.7977 20.4955 20.6147C20.5802 20.7667 20.7151 20.8846 20.8771 20.9481C21.0392 21.0116 21.2183 21.0167 21.3837 20.9626C21.5492 20.9086 21.6907 20.7986 21.7839 20.6517C21.8772 20.5047 21.9165 20.3299 21.895 20.1572C21.199 14.5922 19.066 11.6642 16.705 10.1672C14.8375 8.98218 12.9145 8.75418 11.701 8.71068V7.72068C11.7011 7.41179 11.6179 7.10858 11.46 6.84305C11.3022 6.57753 11.0756 6.35953 10.8042 6.21207C10.5327 6.06461 10.2265 5.99314 9.91788 6.00522C9.60922 6.01729 9.30954 6.11246 9.05047 6.28068L3.05947 10.6907C2.81179 10.8453 2.60753 11.0604 2.46591 11.3157C2.3243 11.571 2.25 11.8582 2.25 12.1502C2.25 12.4422 2.3243 12.7293 2.46591 12.9847C2.60753 13.24 2.81179 13.4551 3.05947 13.6097L9.05047 18.0197C9.30954 18.1879 9.60922 18.2831 9.91788 18.2951C10.2265 18.3072 10.5327 18.2358 10.8042 18.0883C11.0756 17.9408 11.3022 17.7228 11.46 17.4573C11.6179 17.1918 11.7011 16.8886 11.701 16.5797V15.5792Z"
|
|
331
|
-
fill=
|
|
331
|
+
fill={color}
|
|
332
332
|
/>
|
|
333
333
|
</Svg>
|
|
334
334
|
);
|
|
@@ -743,3 +743,30 @@ export function IconDoc({ width = 16, height = 20 }) {
|
|
|
743
743
|
</Svg>
|
|
744
744
|
);
|
|
745
745
|
}
|
|
746
|
+
|
|
747
|
+
export const LockIcon = ({ color = '#8C8C8C', ...props }) => (
|
|
748
|
+
<Svg width="24" height="24" viewBox="0 0 24 24" fill="none" {...props}>
|
|
749
|
+
<Rect x="5" y="10.5" width="14" height="10" rx="2" stroke={color} strokeWidth="1.8" />
|
|
750
|
+
<Path
|
|
751
|
+
d="M8 10.5V7.5C8 5.29 9.79 3.5 12 3.5C14.21 3.5 16 5.29 16 7.5V10.5"
|
|
752
|
+
stroke={color}
|
|
753
|
+
strokeWidth="1.8"
|
|
754
|
+
strokeLinecap="round"
|
|
755
|
+
/>
|
|
756
|
+
</Svg>
|
|
757
|
+
);
|
|
758
|
+
|
|
759
|
+
// The same padlock struck through - a message that went out in clear in a
|
|
760
|
+
// room that is supposed to be encrypted.
|
|
761
|
+
export const LockOffIcon = ({ color = '#D92D20', ...props }) => (
|
|
762
|
+
<Svg width="24" height="24" viewBox="0 0 24 24" fill="none" {...props}>
|
|
763
|
+
<Rect x="5" y="10.5" width="14" height="10" rx="2" stroke={color} strokeWidth="1.8" />
|
|
764
|
+
<Path
|
|
765
|
+
d="M8 10.5V7.5C8 5.29 9.79 3.5 12 3.5C14.21 3.5 16 5.29 16 7.5V10.5"
|
|
766
|
+
stroke={color}
|
|
767
|
+
strokeWidth="1.8"
|
|
768
|
+
strokeLinecap="round"
|
|
769
|
+
/>
|
|
770
|
+
<Path d="M3 3L21 21" stroke={color} strokeWidth="1.8" strokeLinecap="round" />
|
|
771
|
+
</Svg>
|
|
772
|
+
);
|
|
@@ -13,10 +13,11 @@ import RoomList from './RoomList';
|
|
|
13
13
|
import { IRoom } from '../../types/types';
|
|
14
14
|
import { ProfileImagePlaceholder } from './ProfileImagePlaceholder';
|
|
15
15
|
import Button from '../styled/Button';
|
|
16
|
-
import { BackIcon, BurgerMenuIcon } from '../../assets/icons';
|
|
16
|
+
import { BackIcon, BurgerMenuIcon, LockIcon } from '../../assets/icons';
|
|
17
17
|
import { CallButtons } from '../VideoCalls/CallButtons';
|
|
18
18
|
import { LanguageSelectorButton } from './LanguageSelectorButton';
|
|
19
|
-
import { useDispatch } from 'react-redux';
|
|
19
|
+
import { useDispatch, useSelector, useStore } from 'react-redux';
|
|
20
|
+
import type { RootState } from '../../roomStore';
|
|
20
21
|
import Composing from '../styled/StyledInputComponents/Composing';
|
|
21
22
|
import {
|
|
22
23
|
deleteRoom,
|
|
@@ -27,7 +28,6 @@ import { useXmppClient } from '../../context/xmppProvider';
|
|
|
27
28
|
import { setActiveModal } from '../../roomStore/chatSettingsSlice';
|
|
28
29
|
import { MODAL_TYPES } from '../../helpers/constants/MODAL_TYPES';
|
|
29
30
|
import { RoomMenu } from '../MenuRoom/MenuRoom';
|
|
30
|
-
import { useRoomState } from '../../hooks/useRoomState';
|
|
31
31
|
import { useChatSettingState } from '../../hooks/useChatSettingState';
|
|
32
32
|
import { useFileToken } from '../../hooks/useFileToken';
|
|
33
33
|
import { appendFileToken } from '../../helpers/secureFileUrl';
|
|
@@ -51,10 +51,18 @@ const ChatHeader: React.FC<ChatHeaderProps> = ({
|
|
|
51
51
|
const dispatch = useDispatch();
|
|
52
52
|
const { client } = useXmppClient();
|
|
53
53
|
|
|
54
|
-
const
|
|
55
|
-
const
|
|
56
|
-
|
|
54
|
+
const reduxStore = useStore<RootState>();
|
|
55
|
+
const activeRoomJID = useSelector(
|
|
56
|
+
(state: RootState) => state.rooms.activeRoomJID
|
|
57
|
+
);
|
|
58
|
+
const roomState = useSelector((state: RootState) =>
|
|
59
|
+
currentRoom?.jid ? state.rooms.rooms?.[currentRoom.jid] : undefined
|
|
60
|
+
);
|
|
57
61
|
const { config } = useChatSettingState();
|
|
62
|
+
const roomsList = useSelector((state: RootState) =>
|
|
63
|
+
config?.chatHeaderBurgerMenu ? state.rooms.rooms : null
|
|
64
|
+
);
|
|
65
|
+
const composing = roomState?.composing;
|
|
58
66
|
const theme = useTheme();
|
|
59
67
|
const t = useT();
|
|
60
68
|
|
|
@@ -67,11 +75,12 @@ const ChatHeader: React.FC<ChatHeaderProps> = ({
|
|
|
67
75
|
client?.leaveTheRoomStanza(activeRoomJID!);
|
|
68
76
|
dispatch(deleteRoom({ jid: activeRoomJID! }));
|
|
69
77
|
|
|
70
|
-
const nextRoomJID =
|
|
78
|
+
const nextRoomJID =
|
|
79
|
+
Object.keys(reduxStore.getState().rooms.rooms || {})[0] || null;
|
|
71
80
|
if (nextRoomJID) {
|
|
72
81
|
dispatch(setCurrentRoom({ roomJID: nextRoomJID }));
|
|
73
82
|
}
|
|
74
|
-
}, [activeRoomJID,
|
|
83
|
+
}, [activeRoomJID, reduxStore, dispatch, client]);
|
|
75
84
|
|
|
76
85
|
const handleHeaderChatMenu = () => {
|
|
77
86
|
Keyboard.dismiss();
|
|
@@ -169,14 +178,27 @@ const ChatHeader: React.FC<ChatHeaderProps> = ({
|
|
|
169
178
|
}
|
|
170
179
|
/>
|
|
171
180
|
<ChatContainerHeaderInfo>
|
|
172
|
-
<
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
181
|
+
<View style={styles.titleRow}>
|
|
182
|
+
<ChatContainerHeaderLabel
|
|
183
|
+
numberOfLines={1}
|
|
184
|
+
ellipsizeMode="tail"
|
|
185
|
+
fontSize={config?.typography?.headerTitle?.fontSize}
|
|
186
|
+
fontWeight={config?.typography?.headerTitle?.fontWeight as any}
|
|
187
|
+
style={styles.title}
|
|
188
|
+
>
|
|
189
|
+
{currentRoom?.title || currentRoom?.name}
|
|
190
|
+
</ChatContainerHeaderLabel>
|
|
191
|
+
{currentRoom?.e2ee && (
|
|
192
|
+
<View
|
|
193
|
+
accessible
|
|
194
|
+
accessibilityRole="image"
|
|
195
|
+
accessibilityLabel={t('e2ee.roomEncrypted')}
|
|
196
|
+
testID="header-e2ee-lock"
|
|
197
|
+
>
|
|
198
|
+
<LockIcon width={15} height={15} color={theme.textSecondary} />
|
|
199
|
+
</View>
|
|
200
|
+
)}
|
|
201
|
+
</View>
|
|
180
202
|
<View>
|
|
181
203
|
{composing ? (
|
|
182
204
|
<Composing usersTyping={currentRoom?.composingList} />
|
|
@@ -224,6 +246,14 @@ const styles = StyleSheet.create({
|
|
|
224
246
|
color: '#8C8C8C',
|
|
225
247
|
fontSize: 14,
|
|
226
248
|
},
|
|
249
|
+
titleRow: {
|
|
250
|
+
flexDirection: 'row',
|
|
251
|
+
alignItems: 'center',
|
|
252
|
+
gap: 6,
|
|
253
|
+
},
|
|
254
|
+
title: {
|
|
255
|
+
flexShrink: 1,
|
|
256
|
+
},
|
|
227
257
|
menuButton: {
|
|
228
258
|
padding: 8,
|
|
229
259
|
borderRadius: 16,
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
import React, { useState, useEffect, useCallback, useRef } from 'react';
|
|
4
4
|
import { ChatContainer, NonRoomChat } from '../styled/StyledComponents';
|
|
5
|
-
import { useDispatch } from 'react-redux';
|
|
5
|
+
import { useDispatch, useSelector, useStore } from 'react-redux';
|
|
6
|
+
import type { RootState } from '../../roomStore';
|
|
6
7
|
import MessageList from './MessageList';
|
|
7
8
|
import SendInput from '../styled/SendInput';
|
|
8
9
|
import {
|
|
@@ -20,6 +21,9 @@ import ChatHeader from './ChatHeader';
|
|
|
20
21
|
import NoMessagesPlaceholder from './NoMessagesPlaceholder';
|
|
21
22
|
import NewChatModal from '../Modals/NewChatModal/NewChatModal';
|
|
22
23
|
import { EditWrapper } from './EditWrapper';
|
|
24
|
+
import EncryptedSendNotice from './EncryptedSendNotice';
|
|
25
|
+
import { MAX_SEAL_BYTES } from '../../e2ee/limits';
|
|
26
|
+
import { loadRoomMembers } from '../../networking/api-requests/rooms.api';
|
|
23
27
|
import { EmptyChatIllustration } from '../../assets/EmptyChatIllustration';
|
|
24
28
|
import { getIconColor } from '../../helpers/getIconColor';
|
|
25
29
|
import { getChatBackgroundColor } from '../../helpers/getChatBackground';
|
|
@@ -27,8 +31,8 @@ import { ChooseChatMessage } from './ChooseChatMessage';
|
|
|
27
31
|
import { useRoomUrl } from '../../hooks/useRoomUrl';
|
|
28
32
|
import { useSendMessage } from '../../hooks/useSendMessage';
|
|
29
33
|
import { IConfig } from '../../types/models/config.model';
|
|
34
|
+
import type { IMessage } from '../../types/types';
|
|
30
35
|
import { useRoomInitialization } from '../../hooks/useRoomInitialization';
|
|
31
|
-
import { useRoomState } from '../../hooks/useRoomState';
|
|
32
36
|
import { useChatSettingState } from '../../hooks/useChatSettingState';
|
|
33
37
|
import { useTheme } from '../../hooks/useTheme';
|
|
34
38
|
import { isOwnMessage } from '../../helpers/isOwnMessage';
|
|
@@ -73,6 +77,8 @@ interface ChatRoomProps {
|
|
|
73
77
|
eventHandlers?: IConfig['eventHandlers'];
|
|
74
78
|
}
|
|
75
79
|
|
|
80
|
+
const EMPTY_MESSAGES: IMessage[] = [];
|
|
81
|
+
|
|
76
82
|
const ChatRoom: React.FC<ChatRoomProps> = React.memo(
|
|
77
83
|
({
|
|
78
84
|
CustomMessageComponent,
|
|
@@ -104,14 +110,25 @@ const ChatRoom: React.FC<ChatRoomProps> = React.memo(
|
|
|
104
110
|
return storeConfig;
|
|
105
111
|
}, [storeConfig, propsEventHandlers]);
|
|
106
112
|
|
|
107
|
-
const
|
|
108
|
-
|
|
109
|
-
activeRoomJID,
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
113
|
+
const reduxStore = useStore<RootState>();
|
|
114
|
+
const activeRoomJID = useSelector(
|
|
115
|
+
(state: RootState) => state.rooms.activeRoomJID,
|
|
116
|
+
);
|
|
117
|
+
const activeRoom = useSelector((state: RootState) =>
|
|
118
|
+
activeRoomJID ? state.rooms.rooms?.[activeRoomJID] : undefined,
|
|
119
|
+
);
|
|
120
|
+
const hasRooms = useSelector(
|
|
121
|
+
(state: RootState) => Object.keys(state.rooms.rooms || {}).length > 0,
|
|
122
|
+
);
|
|
123
|
+
const editAction = useSelector((state: RootState) => state.rooms.editAction);
|
|
124
|
+
const globalLoading = useSelector(
|
|
125
|
+
(state: RootState) => state.rooms.isLoading,
|
|
126
|
+
);
|
|
127
|
+
const loading = !!activeRoom?.isLoading;
|
|
128
|
+
const e2eeRoom = !!activeRoom?.e2ee;
|
|
129
|
+
const e2eeOn = storeConfig?.e2ee?.enabled === true;
|
|
130
|
+
const maxMediaBytes = e2eeRoom && e2eeOn ? MAX_SEAL_BYTES : undefined;
|
|
131
|
+
const roomMessages = activeRoom?.messages || EMPTY_MESSAGES;
|
|
115
132
|
const {
|
|
116
133
|
sendMessage: sendMs,
|
|
117
134
|
sendMedia: sendMessageMedia,
|
|
@@ -183,15 +200,12 @@ const ChatRoom: React.FC<ChatRoomProps> = React.memo(
|
|
|
183
200
|
|
|
184
201
|
const loadMoreMessages = useCallback(
|
|
185
202
|
async (chatJID: string, max: number, idOfMessageBefore?: number) => {
|
|
186
|
-
|
|
203
|
+
const room = reduxStore.getState().rooms.rooms?.[chatJID];
|
|
204
|
+
if (isLoadingMore || room?.historyComplete) {return;}
|
|
187
205
|
const lastMsgId =
|
|
188
206
|
typeof idOfMessageBefore !== 'string'
|
|
189
207
|
? idOfMessageBefore
|
|
190
|
-
: Number(
|
|
191
|
-
roomsList[chatJID].messages[
|
|
192
|
-
roomsList[chatJID].messages.length - 2
|
|
193
|
-
]?.id,
|
|
194
|
-
);
|
|
208
|
+
: Number(room?.messages?.[(room?.messages?.length || 0) - 2]?.id);
|
|
195
209
|
setIsLoadingMore(true);
|
|
196
210
|
try {
|
|
197
211
|
// Return the promise so MessageList's `await loadMoreMessages`
|
|
@@ -205,7 +219,7 @@ const ChatRoom: React.FC<ChatRoomProps> = React.memo(
|
|
|
205
219
|
}
|
|
206
220
|
},
|
|
207
221
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
208
|
-
[client?.client?.jid, isLoadingMore,
|
|
222
|
+
[client?.client?.jid, isLoadingMore, reduxStore],
|
|
209
223
|
);
|
|
210
224
|
|
|
211
225
|
const onCloseEdit = () => {
|
|
@@ -268,6 +282,7 @@ const ChatRoom: React.FC<ChatRoomProps> = React.memo(
|
|
|
268
282
|
lastBoundarySentRef.current = null;
|
|
269
283
|
dispatch(setReadBoundary({ jid: activeRoomJID, ts: null }));
|
|
270
284
|
dispatch(setVisibleRoom({ roomJID: activeRoomJID }));
|
|
285
|
+
void loadRoomMembers(activeRoomJID);
|
|
271
286
|
setIsLoadingMore(false);
|
|
272
287
|
return () => {
|
|
273
288
|
const state = store.getState();
|
|
@@ -331,12 +346,10 @@ const ChatRoom: React.FC<ChatRoomProps> = React.memo(
|
|
|
331
346
|
|
|
332
347
|
useRoomInitialization(
|
|
333
348
|
activeRoomJID || '',
|
|
334
|
-
roomsList,
|
|
335
349
|
(configWithEventHandlers || storeConfig || {}) as IConfig,
|
|
336
|
-
roomMessages.length,
|
|
337
350
|
);
|
|
338
351
|
|
|
339
|
-
if (
|
|
352
|
+
if (!hasRooms && !loading && !globalLoading) {
|
|
340
353
|
return (
|
|
341
354
|
<NonRoomChat>
|
|
342
355
|
{/* <Text>No room. Let's create one!</Text> */}
|
|
@@ -345,7 +358,7 @@ const ChatRoom: React.FC<ChatRoomProps> = React.memo(
|
|
|
345
358
|
);
|
|
346
359
|
}
|
|
347
360
|
|
|
348
|
-
if (!activeRoomJID || !
|
|
361
|
+
if (!activeRoomJID || !activeRoom) {
|
|
349
362
|
return <ChooseChatMessage />;
|
|
350
363
|
}
|
|
351
364
|
|
|
@@ -465,7 +478,7 @@ const ChatRoom: React.FC<ChatRoomProps> = React.memo(
|
|
|
465
478
|
>
|
|
466
479
|
{!configWithEventHandlers?.disableHeader && (
|
|
467
480
|
<ChatHeader
|
|
468
|
-
currentRoom={
|
|
481
|
+
currentRoom={activeRoom}
|
|
469
482
|
handleBackClick={handleBackClick}
|
|
470
483
|
/>
|
|
471
484
|
)}
|
|
@@ -482,7 +495,7 @@ const ChatRoom: React.FC<ChatRoomProps> = React.memo(
|
|
|
482
495
|
>
|
|
483
496
|
<Loader color={configWithEventHandlers?.colors?.primary} />
|
|
484
497
|
</View>
|
|
485
|
-
) :
|
|
498
|
+
) : !hasRooms || !activeRoomJID ? (
|
|
486
499
|
<View
|
|
487
500
|
style={{
|
|
488
501
|
flex: 1,
|
|
@@ -544,18 +557,18 @@ const ChatRoom: React.FC<ChatRoomProps> = React.memo(
|
|
|
544
557
|
resetNewMessageCounter: () => {},
|
|
545
558
|
}}
|
|
546
559
|
typingIndicator={
|
|
547
|
-
|
|
560
|
+
activeRoom?.composing ? (
|
|
548
561
|
configWithEventHandlers?.customTypingIndicator
|
|
549
562
|
?.customComponent ? (
|
|
550
563
|
<configWithEventHandlers.customTypingIndicator.customComponent
|
|
551
564
|
usersTyping={
|
|
552
|
-
|
|
565
|
+
activeRoom?.composingList || []
|
|
553
566
|
}
|
|
554
567
|
text={
|
|
555
568
|
typeof configWithEventHandlers.customTypingIndicator
|
|
556
569
|
.text === 'function'
|
|
557
570
|
? configWithEventHandlers.customTypingIndicator.text(
|
|
558
|
-
|
|
571
|
+
activeRoom?.composingList || [],
|
|
559
572
|
)
|
|
560
573
|
: configWithEventHandlers.customTypingIndicator
|
|
561
574
|
.text || 'Typing...'
|
|
@@ -586,7 +599,9 @@ const ChatRoom: React.FC<ChatRoomProps> = React.memo(
|
|
|
586
599
|
<EditWrapper text={editAction.text || ''} onClose={onCloseEdit} />
|
|
587
600
|
)}
|
|
588
601
|
<InputDockTag {...inputDockProps}>
|
|
589
|
-
{
|
|
602
|
+
{e2eeRoom && !e2eeOn && !editAction?.isEdit ? (
|
|
603
|
+
<EncryptedSendNotice />
|
|
604
|
+
) : CustomInputComponent ? (
|
|
590
605
|
<CustomInputComponent
|
|
591
606
|
sendMessage={
|
|
592
607
|
editAction && editAction.isEdit ? sendEditMessage : sendMessage
|
|
@@ -609,6 +624,7 @@ const ChatRoom: React.FC<ChatRoomProps> = React.memo(
|
|
|
609
624
|
}
|
|
610
625
|
sendMedia={sendMedia}
|
|
611
626
|
config={configWithEventHandlers}
|
|
627
|
+
maxMediaBytes={maxMediaBytes}
|
|
612
628
|
isLoading={loading}
|
|
613
629
|
onFocus={sendStartComposing}
|
|
614
630
|
onBlur={sendEndComposing}
|
|
@@ -624,10 +640,10 @@ const ChatRoom: React.FC<ChatRoomProps> = React.memo(
|
|
|
624
640
|
'overlay' ||
|
|
625
641
|
configWithEventHandlers.customTypingIndicator.position ===
|
|
626
642
|
'floating') &&
|
|
627
|
-
|
|
643
|
+
activeRoom?.composing && (
|
|
628
644
|
<CustomTypingIndicator
|
|
629
645
|
usersTyping={
|
|
630
|
-
|
|
646
|
+
activeRoom?.composingList || ['User']
|
|
631
647
|
}
|
|
632
648
|
text={configWithEventHandlers.customTypingIndicator.text}
|
|
633
649
|
position={
|
|
@@ -637,7 +653,7 @@ const ChatRoom: React.FC<ChatRoomProps> = React.memo(
|
|
|
637
653
|
customComponent={
|
|
638
654
|
configWithEventHandlers.customTypingIndicator.customComponent
|
|
639
655
|
}
|
|
640
|
-
isVisible={
|
|
656
|
+
isVisible={activeRoom?.composing || false}
|
|
641
657
|
/>
|
|
642
658
|
)}
|
|
643
659
|
</ChatContainer>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React, {FC, useEffect, useMemo, useRef, useState} from 'react';
|
|
1
|
+
import React, {FC, useCallback, useEffect, useMemo, useRef, useState} from 'react';
|
|
2
2
|
import {useDispatch, useSelector} from 'react-redux';
|
|
3
3
|
import ChatRoom from './ChatRoom';
|
|
4
4
|
import {RoomStack, RoomStackHandle} from './RoomStack';
|
|
@@ -72,6 +72,9 @@ const ChatWrapper: FC<ChatWrapperProps> = ({
|
|
|
72
72
|
usePendingNotification();
|
|
73
73
|
const theme = useTheme();
|
|
74
74
|
const roomStackRef = useRef<RoomStackHandle>(null);
|
|
75
|
+
// Stable, so ChatRoom's React.memo holds across this root's re-renders.
|
|
76
|
+
// (A hook: must stay above the early LoginForm return.)
|
|
77
|
+
const popRoom = useCallback(() => roomStackRef.current?.pop(), []);
|
|
75
78
|
|
|
76
79
|
const [isInited, setInited] = useState(false);
|
|
77
80
|
const [showModal, setShowModal] = useState(false);
|
|
@@ -94,15 +97,18 @@ const ChatWrapper: FC<ChatWrapperProps> = ({
|
|
|
94
97
|
initMode,
|
|
95
98
|
} = useXmppClient();
|
|
96
99
|
|
|
97
|
-
const
|
|
100
|
+
const rooms = useSelector((state: RootState) => state.rooms.rooms);
|
|
101
|
+
const activeRoomJID = useSelector(
|
|
102
|
+
(state: RootState) => state.rooms.activeRoomJID,
|
|
103
|
+
);
|
|
104
|
+
const activeRoomMessages = useSelector((state: RootState) =>
|
|
105
|
+
activeRoomJID ? state.rooms.rooms[activeRoomJID]?.messages : undefined,
|
|
106
|
+
);
|
|
98
107
|
|
|
99
|
-
const activeMessage = useMemo(
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
);
|
|
104
|
-
}
|
|
105
|
-
}, [rooms, activeRoomJID]);
|
|
108
|
+
const activeMessage = useMemo(
|
|
109
|
+
() => activeRoomMessages?.find(message => message?.activeMessage),
|
|
110
|
+
[activeRoomMessages],
|
|
111
|
+
);
|
|
106
112
|
|
|
107
113
|
const handleChangeChat = (chat: IRoom) => {
|
|
108
114
|
dispatch(setCurrentRoom({roomJID: chat.jid}));
|
|
@@ -438,6 +444,16 @@ const ChatWrapper: FC<ChatWrapperProps> = ({
|
|
|
438
444
|
// List mode: the room is pushed over the list and can be swiped back
|
|
439
445
|
// (RoomStack). With `roomJID` / `disableRooms` there is no list to return to.
|
|
440
446
|
const listMode = !config?.disableRooms && !roomJID;
|
|
447
|
+
|
|
448
|
+
// The open thread, over the room (a message with `activeMessage` set).
|
|
449
|
+
const threadView = activeMessage ? (
|
|
450
|
+
<ThreadWrapper
|
|
451
|
+
key={activeMessage.id}
|
|
452
|
+
activeMessage={activeMessage}
|
|
453
|
+
user={user}
|
|
454
|
+
customMessageComponent={CustomMessageComponent || Message}
|
|
455
|
+
/>
|
|
456
|
+
) : null;
|
|
441
457
|
const backToList = () => {
|
|
442
458
|
dispatch(setCurrentRoom({ roomJID: '' }));
|
|
443
459
|
};
|
|
@@ -529,8 +545,9 @@ const ChatWrapper: FC<ChatWrapperProps> = ({
|
|
|
529
545
|
CustomMessageComponent={
|
|
530
546
|
CustomMessageComponent || Message
|
|
531
547
|
}
|
|
532
|
-
handleBackClick={
|
|
548
|
+
handleBackClick={popRoom}
|
|
533
549
|
/>
|
|
550
|
+
{threadView}
|
|
534
551
|
</ChatWrapperBox>
|
|
535
552
|
)
|
|
536
553
|
}
|
|
@@ -543,6 +560,7 @@ const ChatWrapper: FC<ChatWrapperProps> = ({
|
|
|
543
560
|
<ChatRoom
|
|
544
561
|
CustomMessageComponent={CustomMessageComponent || Message}
|
|
545
562
|
/>
|
|
563
|
+
{threadView}
|
|
546
564
|
</ChatWrapperBox>
|
|
547
565
|
)}
|
|
548
566
|
</InteractionsOverlayProvider>
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { StyleSheet, Text, View } from 'react-native';
|
|
3
|
+
import { LockIcon } from '../../assets/icons';
|
|
4
|
+
import { useTheme } from '../../hooks/useTheme';
|
|
5
|
+
import { useT } from '../../i18n/useT';
|
|
6
|
+
|
|
7
|
+
const EncryptedSendNotice: React.FC = () => {
|
|
8
|
+
const theme = useTheme();
|
|
9
|
+
const t = useT();
|
|
10
|
+
return (
|
|
11
|
+
<View style={styles.notice} testID="e2ee-send-notice">
|
|
12
|
+
<LockIcon width={18} height={18} color={theme.textSecondary} />
|
|
13
|
+
<Text style={[styles.text, { color: theme.textSecondary }]}>
|
|
14
|
+
{t('e2ee.sendUnavailable')}
|
|
15
|
+
</Text>
|
|
16
|
+
</View>
|
|
17
|
+
);
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export default EncryptedSendNotice;
|
|
21
|
+
|
|
22
|
+
const styles = StyleSheet.create({
|
|
23
|
+
notice: {
|
|
24
|
+
flexDirection: 'row',
|
|
25
|
+
alignItems: 'center',
|
|
26
|
+
gap: 10,
|
|
27
|
+
paddingHorizontal: 20,
|
|
28
|
+
paddingVertical: 16,
|
|
29
|
+
},
|
|
30
|
+
text: {
|
|
31
|
+
flex: 1,
|
|
32
|
+
fontSize: 14,
|
|
33
|
+
lineHeight: 19,
|
|
34
|
+
},
|
|
35
|
+
});
|