@ethora/chat-component-rn 26.5.5 → 26.5.10
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 +177 -0
- package/README.md +67 -10
- package/index.js +24 -0
- package/lib/commonjs/assets/icons.js +5 -1
- package/lib/commonjs/assets/icons.js.map +1 -1
- package/lib/commonjs/components/ContextMenu/ContextMenuComponents.js +11 -5
- package/lib/commonjs/components/ContextMenu/ContextMenuComponents.js.map +1 -1
- package/lib/commonjs/components/MainComponents/ChatHeader.js +7 -1
- package/lib/commonjs/components/MainComponents/ChatHeader.js.map +1 -1
- package/lib/commonjs/components/MainComponents/ChatRoom.js +66 -34
- package/lib/commonjs/components/MainComponents/ChatRoom.js.map +1 -1
- package/lib/commonjs/components/MainComponents/ChatWrapper.js +59 -14
- package/lib/commonjs/components/MainComponents/ChatWrapper.js.map +1 -1
- package/lib/commonjs/components/MainComponents/MediaMessage.js +15 -7
- package/lib/commonjs/components/MainComponents/MediaMessage.js.map +1 -1
- package/lib/commonjs/components/MainComponents/MessageContainer.js +2 -2
- package/lib/commonjs/components/MainComponents/MessageContainer.js.map +1 -1
- package/lib/commonjs/components/MainComponents/MessageList.js +175 -30
- package/lib/commonjs/components/MainComponents/MessageList.js.map +1 -1
- package/lib/commonjs/components/MainComponents/ReduxWrapper.js +17 -8
- package/lib/commonjs/components/MainComponents/ReduxWrapper.js.map +1 -1
- package/lib/commonjs/components/MainComponents/SystemMessage.js +34 -22
- package/lib/commonjs/components/MainComponents/SystemMessage.js.map +1 -1
- package/lib/commonjs/components/MessageBubble/Message.js +117 -19
- package/lib/commonjs/components/MessageBubble/Message.js.map +1 -1
- package/lib/commonjs/components/MessageBubble/MessageInteractions.js +82 -22
- package/lib/commonjs/components/MessageBubble/MessageInteractions.js.map +1 -1
- package/lib/commonjs/components/Modals/AttachSheet/AttachSheet.js +16 -4
- package/lib/commonjs/components/Modals/AttachSheet/AttachSheet.js.map +1 -1
- package/lib/commonjs/components/Modals/FilePreviewModal/DocumentViewer.js +104 -0
- package/lib/commonjs/components/Modals/FilePreviewModal/DocumentViewer.js.map +1 -0
- package/lib/commonjs/components/Modals/FilePreviewModal/FilePreviewModal.js +175 -40
- package/lib/commonjs/components/Modals/FilePreviewModal/FilePreviewModal.js.map +1 -1
- package/lib/commonjs/components/Modals/FilePreviewModal/PdfView.js +29 -1
- package/lib/commonjs/components/Modals/FilePreviewModal/PdfView.js.map +1 -1
- package/lib/commonjs/components/Modals/Modal/Modal.js +5 -1
- package/lib/commonjs/components/Modals/Modal/Modal.js.map +1 -1
- package/lib/commonjs/components/Modals/ModalWrapper/ModalWrapper.js +78 -39
- package/lib/commonjs/components/Modals/ModalWrapper/ModalWrapper.js.map +1 -1
- package/lib/commonjs/components/Modals/UserProfileModal/UserProfileModal.js +3 -3
- package/lib/commonjs/components/Modals/UserProfileModal/UserProfileModal.js.map +1 -1
- package/lib/commonjs/components/Modals/styledModalComponents.js +4 -9
- package/lib/commonjs/components/Modals/styledModalComponents.js.map +1 -1
- package/lib/commonjs/components/styled/MediaFilePreview.js +115 -5
- package/lib/commonjs/components/styled/MediaFilePreview.js.map +1 -1
- package/lib/commonjs/components/styled/MessageImage.js +49 -10
- package/lib/commonjs/components/styled/MessageImage.js.map +1 -1
- package/lib/commonjs/components/styled/NewMessageLabel.js +8 -6
- package/lib/commonjs/components/styled/NewMessageLabel.js.map +1 -1
- package/lib/commonjs/components/styled/SendInput.js +53 -29
- package/lib/commonjs/components/styled/SendInput.js.map +1 -1
- package/lib/commonjs/components/styled/StyledInputComponents/MediaComponents.js +14 -4
- package/lib/commonjs/components/styled/StyledInputComponents/MediaComponents.js.map +1 -1
- package/lib/commonjs/components/styled/StyledInputComponents/StyledInputComponents.js +7 -2
- package/lib/commonjs/components/styled/StyledInputComponents/StyledInputComponents.js.map +1 -1
- package/lib/commonjs/components/styled/UnsupportedType.js +5 -1
- package/lib/commonjs/components/styled/UnsupportedType.js.map +1 -1
- package/lib/commonjs/components/styled/VideoMessage.js +60 -22
- package/lib/commonjs/components/styled/VideoMessage.js.map +1 -1
- package/lib/commonjs/context/MessageNotificationContext.js +7 -7
- package/lib/commonjs/context/MessageNotificationContext.js.map +1 -1
- package/lib/commonjs/context/xmppProvider.js +315 -34
- package/lib/commonjs/context/xmppProvider.js.map +1 -1
- package/lib/commonjs/helpers/chatAutoEnterer.js +2 -7
- package/lib/commonjs/helpers/chatAutoEnterer.js.map +1 -1
- package/lib/commonjs/helpers/historyPreloadScheduler.js +4 -1
- package/lib/commonjs/helpers/historyPreloadScheduler.js.map +1 -1
- package/lib/commonjs/helpers/insertMessageWithDelimiter.js +15 -5
- package/lib/commonjs/helpers/insertMessageWithDelimiter.js.map +1 -1
- package/lib/commonjs/helpers/keyboardLayout.js +18 -0
- package/lib/commonjs/helpers/keyboardLayout.js.map +1 -0
- package/lib/commonjs/helpers/mediaDimensions.js +51 -0
- package/lib/commonjs/helpers/mediaDimensions.js.map +1 -0
- package/lib/commonjs/helpers/mimeToExtension.js +131 -0
- package/lib/commonjs/helpers/mimeToExtension.js.map +1 -0
- package/lib/commonjs/helpers/normalizeRoomJid.js +20 -0
- package/lib/commonjs/helpers/normalizeRoomJid.js.map +1 -0
- package/lib/commonjs/helpers/resolveInitBeforeLoadUser.js +73 -1
- package/lib/commonjs/helpers/resolveInitBeforeLoadUser.js.map +1 -1
- package/lib/commonjs/hooks/useChatRoomFocus.js +87 -0
- package/lib/commonjs/hooks/useChatRoomFocus.js.map +1 -0
- package/lib/commonjs/hooks/useChatWrapperInit.js +22 -10
- package/lib/commonjs/hooks/useChatWrapperInit.js.map +1 -1
- package/lib/commonjs/hooks/useEventHandlers.js +9 -1
- package/lib/commonjs/hooks/useEventHandlers.js.map +1 -1
- package/lib/commonjs/hooks/useHeapSender.js +1 -1
- package/lib/commonjs/hooks/useHeapSender.js.map +1 -1
- package/lib/commonjs/hooks/useLogout.js +3 -3
- package/lib/commonjs/hooks/useLogout.js.map +1 -1
- package/lib/commonjs/hooks/useMessageHeapState.js +6 -2
- package/lib/commonjs/hooks/useMessageHeapState.js.map +1 -1
- package/lib/commonjs/hooks/usePushNotifications.js +6 -2
- package/lib/commonjs/hooks/usePushNotifications.js.map +1 -1
- package/lib/commonjs/hooks/useRoomState.js +2 -0
- package/lib/commonjs/hooks/useRoomState.js.map +1 -1
- package/lib/commonjs/hooks/useSendMessage.js +249 -14
- package/lib/commonjs/hooks/useSendMessage.js.map +1 -1
- package/lib/commonjs/hooks/useUnreadMessagesCounter.js +12 -14
- package/lib/commonjs/hooks/useUnreadMessagesCounter.js.map +1 -1
- package/lib/commonjs/main.js +7 -0
- package/lib/commonjs/main.js.map +1 -1
- package/lib/commonjs/networking/api-requests/auth.api.js +74 -1
- package/lib/commonjs/networking/api-requests/auth.api.js.map +1 -1
- package/lib/commonjs/networking/apiClient.js +2 -1
- package/lib/commonjs/networking/apiClient.js.map +1 -1
- package/lib/commonjs/networking/outboundQueue.js +92 -0
- package/lib/commonjs/networking/outboundQueue.js.map +1 -0
- package/lib/commonjs/networking/xmpp/createTimeoutPromise.xmpp.js +4 -1
- package/lib/commonjs/networking/xmpp/createTimeoutPromise.xmpp.js.map +1 -1
- package/lib/commonjs/networking/xmpp/flushLastViewedToPrivateStore.js +7 -8
- package/lib/commonjs/networking/xmpp/flushLastViewedToPrivateStore.js.map +1 -1
- package/lib/commonjs/networking/xmpp/getRoomsPaged.xmpp.js +26 -3
- package/lib/commonjs/networking/xmpp/getRoomsPaged.xmpp.js.map +1 -1
- package/lib/commonjs/networking/xmpp/presenceInRoom.xmpp.js +26 -8
- package/lib/commonjs/networking/xmpp/presenceInRoom.xmpp.js.map +1 -1
- package/lib/commonjs/networking/xmpp/sendTextMessage.xmpp.js +2 -1
- package/lib/commonjs/networking/xmpp/sendTextMessage.xmpp.js.map +1 -1
- package/lib/commonjs/networking/xmppClient.js +371 -26
- package/lib/commonjs/networking/xmppClient.js.map +1 -1
- package/lib/commonjs/roomStore/Middleware/unreadMidlleware.js +22 -6
- package/lib/commonjs/roomStore/Middleware/unreadMidlleware.js.map +1 -1
- package/lib/commonjs/roomStore/roomHeapSlice.js +26 -8
- package/lib/commonjs/roomStore/roomHeapSlice.js.map +1 -1
- package/lib/commonjs/roomStore/roomsSlice.js +157 -23
- package/lib/commonjs/roomStore/roomsSlice.js.map +1 -1
- package/lib/commonjs/utils/installPromiseRejectionTracker.js +83 -0
- package/lib/commonjs/utils/installPromiseRejectionTracker.js.map +1 -0
- package/lib/commonjs/utils/resendMessage.js +1 -1
- package/lib/commonjs/utils/resendMessage.js.map +1 -1
- package/lib/module/assets/icons.js +5 -1
- package/lib/module/assets/icons.js.map +1 -1
- package/lib/module/components/ContextMenu/ContextMenuComponents.js +11 -5
- package/lib/module/components/ContextMenu/ContextMenuComponents.js.map +1 -1
- package/lib/module/components/MainComponents/ChatHeader.js +7 -1
- package/lib/module/components/MainComponents/ChatHeader.js.map +1 -1
- package/lib/module/components/MainComponents/ChatRoom.js +67 -35
- package/lib/module/components/MainComponents/ChatRoom.js.map +1 -1
- package/lib/module/components/MainComponents/ChatWrapper.js +59 -14
- package/lib/module/components/MainComponents/ChatWrapper.js.map +1 -1
- package/lib/module/components/MainComponents/MediaMessage.js +15 -7
- package/lib/module/components/MainComponents/MediaMessage.js.map +1 -1
- package/lib/module/components/MainComponents/MessageContainer.js +2 -2
- package/lib/module/components/MainComponents/MessageContainer.js.map +1 -1
- package/lib/module/components/MainComponents/MessageList.js +176 -31
- package/lib/module/components/MainComponents/MessageList.js.map +1 -1
- package/lib/module/components/MainComponents/ReduxWrapper.js +18 -8
- package/lib/module/components/MainComponents/ReduxWrapper.js.map +1 -1
- package/lib/module/components/MainComponents/SystemMessage.js +33 -21
- package/lib/module/components/MainComponents/SystemMessage.js.map +1 -1
- package/lib/module/components/MessageBubble/Message.js +118 -20
- package/lib/module/components/MessageBubble/Message.js.map +1 -1
- package/lib/module/components/MessageBubble/MessageInteractions.js +84 -24
- package/lib/module/components/MessageBubble/MessageInteractions.js.map +1 -1
- package/lib/module/components/Modals/AttachSheet/AttachSheet.js +15 -3
- package/lib/module/components/Modals/AttachSheet/AttachSheet.js.map +1 -1
- package/lib/module/components/Modals/FilePreviewModal/DocumentViewer.js +99 -0
- package/lib/module/components/Modals/FilePreviewModal/DocumentViewer.js.map +1 -0
- package/lib/module/components/Modals/FilePreviewModal/FilePreviewModal.js +179 -42
- package/lib/module/components/Modals/FilePreviewModal/FilePreviewModal.js.map +1 -1
- package/lib/module/components/Modals/FilePreviewModal/PdfView.js +31 -3
- package/lib/module/components/Modals/FilePreviewModal/PdfView.js.map +1 -1
- package/lib/module/components/Modals/Modal/Modal.js +5 -1
- package/lib/module/components/Modals/Modal/Modal.js.map +1 -1
- package/lib/module/components/Modals/ModalWrapper/ModalWrapper.js +80 -41
- package/lib/module/components/Modals/ModalWrapper/ModalWrapper.js.map +1 -1
- package/lib/module/components/Modals/UserProfileModal/UserProfileModal.js +3 -3
- package/lib/module/components/Modals/UserProfileModal/UserProfileModal.js.map +1 -1
- package/lib/module/components/Modals/styledModalComponents.js +4 -9
- package/lib/module/components/Modals/styledModalComponents.js.map +1 -1
- package/lib/module/components/styled/MediaFilePreview.js +116 -6
- package/lib/module/components/styled/MediaFilePreview.js.map +1 -1
- package/lib/module/components/styled/MessageImage.js +51 -12
- package/lib/module/components/styled/MessageImage.js.map +1 -1
- package/lib/module/components/styled/NewMessageLabel.js +8 -6
- package/lib/module/components/styled/NewMessageLabel.js.map +1 -1
- package/lib/module/components/styled/SendInput.js +54 -30
- package/lib/module/components/styled/SendInput.js.map +1 -1
- package/lib/module/components/styled/StyledInputComponents/MediaComponents.js +14 -4
- package/lib/module/components/styled/StyledInputComponents/MediaComponents.js.map +1 -1
- package/lib/module/components/styled/StyledInputComponents/StyledInputComponents.js +7 -2
- package/lib/module/components/styled/StyledInputComponents/StyledInputComponents.js.map +1 -1
- package/lib/module/components/styled/UnsupportedType.js +5 -1
- package/lib/module/components/styled/UnsupportedType.js.map +1 -1
- package/lib/module/components/styled/VideoMessage.js +61 -23
- package/lib/module/components/styled/VideoMessage.js.map +1 -1
- package/lib/module/context/MessageNotificationContext.js +7 -7
- package/lib/module/context/MessageNotificationContext.js.map +1 -1
- package/lib/module/context/xmppProvider.js +319 -37
- package/lib/module/context/xmppProvider.js.map +1 -1
- package/lib/module/helpers/chatAutoEnterer.js +2 -7
- package/lib/module/helpers/chatAutoEnterer.js.map +1 -1
- package/lib/module/helpers/historyPreloadScheduler.js +4 -1
- package/lib/module/helpers/historyPreloadScheduler.js.map +1 -1
- package/lib/module/helpers/insertMessageWithDelimiter.js +15 -5
- package/lib/module/helpers/insertMessageWithDelimiter.js.map +1 -1
- package/lib/module/helpers/keyboardLayout.js +12 -0
- package/lib/module/helpers/keyboardLayout.js.map +1 -0
- package/lib/module/helpers/mediaDimensions.js +46 -0
- package/lib/module/helpers/mediaDimensions.js.map +1 -0
- package/lib/module/helpers/mimeToExtension.js +124 -0
- package/lib/module/helpers/mimeToExtension.js.map +1 -0
- package/lib/module/helpers/normalizeRoomJid.js +15 -0
- package/lib/module/helpers/normalizeRoomJid.js.map +1 -0
- package/lib/module/helpers/resolveInitBeforeLoadUser.js +71 -0
- package/lib/module/helpers/resolveInitBeforeLoadUser.js.map +1 -1
- package/lib/module/hooks/useChatRoomFocus.js +82 -0
- package/lib/module/hooks/useChatRoomFocus.js.map +1 -0
- package/lib/module/hooks/useChatWrapperInit.js +22 -10
- package/lib/module/hooks/useChatWrapperInit.js.map +1 -1
- package/lib/module/hooks/useEventHandlers.js +9 -1
- package/lib/module/hooks/useEventHandlers.js.map +1 -1
- package/lib/module/hooks/useHeapSender.js +1 -1
- package/lib/module/hooks/useHeapSender.js.map +1 -1
- package/lib/module/hooks/useLogout.js +3 -3
- package/lib/module/hooks/useLogout.js.map +1 -1
- package/lib/module/hooks/useMessageHeapState.js +6 -2
- package/lib/module/hooks/useMessageHeapState.js.map +1 -1
- package/lib/module/hooks/usePushNotifications.js +6 -2
- package/lib/module/hooks/usePushNotifications.js.map +1 -1
- package/lib/module/hooks/useRoomState.js +2 -0
- package/lib/module/hooks/useRoomState.js.map +1 -1
- package/lib/module/hooks/useSendMessage.js +252 -17
- package/lib/module/hooks/useSendMessage.js.map +1 -1
- package/lib/module/hooks/useUnreadMessagesCounter.js +12 -14
- package/lib/module/hooks/useUnreadMessagesCounter.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 +74 -2
- package/lib/module/networking/api-requests/auth.api.js.map +1 -1
- package/lib/module/networking/apiClient.js +2 -1
- package/lib/module/networking/apiClient.js.map +1 -1
- package/lib/module/networking/outboundQueue.js +84 -0
- package/lib/module/networking/outboundQueue.js.map +1 -0
- package/lib/module/networking/xmpp/createTimeoutPromise.xmpp.js +4 -1
- package/lib/module/networking/xmpp/createTimeoutPromise.xmpp.js.map +1 -1
- package/lib/module/networking/xmpp/flushLastViewedToPrivateStore.js +7 -8
- package/lib/module/networking/xmpp/flushLastViewedToPrivateStore.js.map +1 -1
- package/lib/module/networking/xmpp/getRoomsPaged.xmpp.js +26 -3
- package/lib/module/networking/xmpp/getRoomsPaged.xmpp.js.map +1 -1
- package/lib/module/networking/xmpp/presenceInRoom.xmpp.js +26 -8
- package/lib/module/networking/xmpp/presenceInRoom.xmpp.js.map +1 -1
- package/lib/module/networking/xmpp/sendTextMessage.xmpp.js +2 -1
- package/lib/module/networking/xmpp/sendTextMessage.xmpp.js.map +1 -1
- package/lib/module/networking/xmppClient.js +371 -26
- package/lib/module/networking/xmppClient.js.map +1 -1
- package/lib/module/roomStore/Middleware/unreadMidlleware.js +22 -6
- package/lib/module/roomStore/Middleware/unreadMidlleware.js.map +1 -1
- package/lib/module/roomStore/roomHeapSlice.js +24 -7
- package/lib/module/roomStore/roomHeapSlice.js.map +1 -1
- package/lib/module/roomStore/roomsSlice.js +154 -22
- package/lib/module/roomStore/roomsSlice.js.map +1 -1
- package/lib/module/utils/installPromiseRejectionTracker.js +78 -0
- package/lib/module/utils/installPromiseRejectionTracker.js.map +1 -0
- package/lib/module/utils/resendMessage.js +1 -1
- package/lib/module/utils/resendMessage.js.map +1 -1
- package/lib/typescript/assets/icons.d.ts +8 -4
- package/lib/typescript/assets/icons.d.ts.map +1 -1
- package/lib/typescript/components/ContextMenu/ContextMenuComponents.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/MediaMessage.d.ts +1 -0
- package/lib/typescript/components/MainComponents/MediaMessage.d.ts.map +1 -1
- 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 +1 -0
- package/lib/typescript/components/MainComponents/ReduxWrapper.d.ts.map +1 -1
- package/lib/typescript/components/MainComponents/SystemMessage.d.ts +0 -7
- package/lib/typescript/components/MainComponents/SystemMessage.d.ts.map +1 -1
- package/lib/typescript/components/MessageBubble/Message.d.ts.map +1 -1
- package/lib/typescript/components/MessageBubble/MessageInteractions.d.ts +4 -2
- package/lib/typescript/components/MessageBubble/MessageInteractions.d.ts.map +1 -1
- package/lib/typescript/components/Modals/AttachSheet/AttachSheet.d.ts.map +1 -1
- package/lib/typescript/components/Modals/FilePreviewModal/DocumentViewer.d.ts +29 -0
- package/lib/typescript/components/Modals/FilePreviewModal/DocumentViewer.d.ts.map +1 -0
- package/lib/typescript/components/Modals/FilePreviewModal/FilePreviewModal.d.ts +0 -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/Modal.d.ts.map +1 -1
- package/lib/typescript/components/Modals/ModalWrapper/ModalWrapper.d.ts +6 -0
- package/lib/typescript/components/Modals/ModalWrapper/ModalWrapper.d.ts.map +1 -1
- package/lib/typescript/components/Modals/UserProfileModal/UserProfileModal.d.ts.map +1 -1
- package/lib/typescript/components/Modals/styledModalComponents.d.ts.map +1 -1
- package/lib/typescript/components/styled/MediaFilePreview.d.ts.map +1 -1
- package/lib/typescript/components/styled/MessageImage.d.ts.map +1 -1
- package/lib/typescript/components/styled/NewMessageLabel.d.ts +1 -5
- package/lib/typescript/components/styled/NewMessageLabel.d.ts.map +1 -1
- package/lib/typescript/components/styled/SendInput.d.ts.map +1 -1
- package/lib/typescript/components/styled/StyledInputComponents/MediaComponents.d.ts +9 -1
- package/lib/typescript/components/styled/StyledInputComponents/MediaComponents.d.ts.map +1 -1
- package/lib/typescript/components/styled/StyledInputComponents/StyledInputComponents.d.ts.map +1 -1
- package/lib/typescript/components/styled/UnsupportedType.d.ts +1 -0
- package/lib/typescript/components/styled/UnsupportedType.d.ts.map +1 -1
- package/lib/typescript/components/styled/VideoMessage.d.ts.map +1 -1
- package/lib/typescript/context/xmppProvider.d.ts +1 -0
- package/lib/typescript/context/xmppProvider.d.ts.map +1 -1
- package/lib/typescript/helpers/chatAutoEnterer.d.ts.map +1 -1
- package/lib/typescript/helpers/historyPreloadScheduler.d.ts.map +1 -1
- package/lib/typescript/helpers/insertMessageWithDelimiter.d.ts.map +1 -1
- package/lib/typescript/helpers/keyboardLayout.d.ts +9 -0
- package/lib/typescript/helpers/keyboardLayout.d.ts.map +1 -0
- package/lib/typescript/helpers/mediaDimensions.d.ts +9 -0
- package/lib/typescript/helpers/mediaDimensions.d.ts.map +1 -0
- package/lib/typescript/helpers/mimeToExtension.d.ts +37 -0
- package/lib/typescript/helpers/mimeToExtension.d.ts.map +1 -0
- package/lib/typescript/helpers/normalizeRoomJid.d.ts +2 -0
- package/lib/typescript/helpers/normalizeRoomJid.d.ts.map +1 -0
- package/lib/typescript/helpers/resolveInitBeforeLoadUser.d.ts +18 -0
- package/lib/typescript/helpers/resolveInitBeforeLoadUser.d.ts.map +1 -1
- package/lib/typescript/hooks/useChatRoomFocus.d.ts +42 -0
- package/lib/typescript/hooks/useChatRoomFocus.d.ts.map +1 -0
- package/lib/typescript/hooks/useChatWrapperInit.d.ts.map +1 -1
- package/lib/typescript/hooks/useEventHandlers.d.ts +6 -0
- package/lib/typescript/hooks/useEventHandlers.d.ts.map +1 -1
- package/lib/typescript/hooks/useHeapSender.d.ts.map +1 -1
- package/lib/typescript/hooks/useMessageHeapState.d.ts +2 -0
- package/lib/typescript/hooks/useMessageHeapState.d.ts.map +1 -1
- package/lib/typescript/hooks/usePushNotifications.d.ts.map +1 -1
- package/lib/typescript/hooks/useRoomState.d.ts +1 -0
- package/lib/typescript/hooks/useRoomState.d.ts.map +1 -1
- package/lib/typescript/hooks/useSendMessage.d.ts +2 -1
- package/lib/typescript/hooks/useSendMessage.d.ts.map +1 -1
- package/lib/typescript/hooks/useUnreadMessagesCounter.d.ts.map +1 -1
- package/lib/typescript/main.d.ts +1 -0
- package/lib/typescript/main.d.ts.map +1 -1
- package/lib/typescript/networking/api-requests/auth.api.d.ts +3 -0
- package/lib/typescript/networking/api-requests/auth.api.d.ts.map +1 -1
- package/lib/typescript/networking/apiClient.d.ts.map +1 -1
- package/lib/typescript/networking/outboundQueue.d.ts +57 -0
- package/lib/typescript/networking/outboundQueue.d.ts.map +1 -0
- package/lib/typescript/networking/xmpp/createTimeoutPromise.xmpp.d.ts.map +1 -1
- package/lib/typescript/networking/xmpp/flushLastViewedToPrivateStore.d.ts +1 -1
- package/lib/typescript/networking/xmpp/flushLastViewedToPrivateStore.d.ts.map +1 -1
- package/lib/typescript/networking/xmpp/getRoomsPaged.xmpp.d.ts +1 -1
- package/lib/typescript/networking/xmpp/getRoomsPaged.xmpp.d.ts.map +1 -1
- package/lib/typescript/networking/xmpp/presenceInRoom.xmpp.d.ts.map +1 -1
- package/lib/typescript/networking/xmpp/sendTextMessage.xmpp.d.ts.map +1 -1
- package/lib/typescript/networking/xmppClient.d.ts +58 -5
- package/lib/typescript/networking/xmppClient.d.ts.map +1 -1
- package/lib/typescript/roomStore/Middleware/unreadMidlleware.d.ts.map +1 -1
- package/lib/typescript/roomStore/roomHeapSlice.d.ts +22 -1
- package/lib/typescript/roomStore/roomHeapSlice.d.ts.map +1 -1
- package/lib/typescript/roomStore/roomsSlice.d.ts +8 -1
- package/lib/typescript/roomStore/roomsSlice.d.ts.map +1 -1
- package/lib/typescript/types/models/media.model.d.ts +1 -0
- package/lib/typescript/types/models/media.model.d.ts.map +1 -1
- package/lib/typescript/types/models/xmpp.model.d.ts +1 -1
- package/lib/typescript/types/models/xmpp.model.d.ts.map +1 -1
- package/lib/typescript/types/types.d.ts +10 -0
- package/lib/typescript/types/types.d.ts.map +1 -1
- package/lib/typescript/utils/installPromiseRejectionTracker.d.ts +20 -0
- package/lib/typescript/utils/installPromiseRejectionTracker.d.ts.map +1 -0
- package/lib/typescript/utils/resendMessage.d.ts.map +1 -1
- package/package.json +18 -2
- package/src/assets/icons.tsx +23 -14
- package/src/components/ContextMenu/ContextMenuComponents.tsx +10 -5
- package/src/components/MainComponents/ChatHeader.tsx +5 -1
- package/src/components/MainComponents/ChatRoom.tsx +81 -61
- package/src/components/MainComponents/ChatWrapper.tsx +100 -21
- package/src/components/MainComponents/MediaMessage.tsx +18 -8
- package/src/components/MainComponents/MessageContainer.tsx +4 -2
- package/src/components/MainComponents/MessageList.tsx +185 -31
- package/src/components/MainComponents/ReduxWrapper.tsx +19 -9
- package/src/components/MainComponents/SystemMessage.tsx +38 -26
- package/src/components/MessageBubble/Message.tsx +110 -27
- package/src/components/MessageBubble/MessageInteractions.tsx +98 -29
- package/src/components/Modals/AttachSheet/AttachSheet.tsx +17 -3
- package/src/components/Modals/FilePreviewModal/DocumentViewer.tsx +93 -0
- package/src/components/Modals/FilePreviewModal/FilePreviewModal.tsx +182 -37
- package/src/components/Modals/FilePreviewModal/PdfView.tsx +32 -4
- package/src/components/Modals/Modal/Modal.tsx +4 -1
- package/src/components/Modals/ModalWrapper/ModalWrapper.tsx +77 -44
- package/src/components/Modals/UserProfileModal/UserProfileModal.tsx +19 -15
- package/src/components/Modals/styledModalComponents.tsx +4 -9
- package/src/components/styled/MediaFilePreview.tsx +111 -5
- package/src/components/styled/MessageImage.tsx +58 -14
- package/src/components/styled/NewMessageLabel.tsx +8 -5
- package/src/components/styled/SendInput.tsx +67 -29
- package/src/components/styled/StyledInputComponents/MediaComponents.tsx +15 -5
- package/src/components/styled/StyledInputComponents/StyledInputComponents.tsx +7 -2
- package/src/components/styled/UnsupportedType.tsx +7 -1
- package/src/components/styled/VideoMessage.tsx +59 -18
- package/src/context/MessageNotificationContext.tsx +8 -8
- package/src/context/xmppProvider.tsx +337 -32
- package/src/helpers/chatAutoEnterer.ts +2 -8
- package/src/helpers/historyPreloadScheduler.ts +4 -1
- package/src/helpers/insertMessageWithDelimiter.ts +22 -15
- package/src/helpers/keyboardLayout.ts +18 -0
- package/src/helpers/mediaDimensions.ts +47 -0
- package/src/helpers/mimeToExtension.ts +135 -0
- package/src/helpers/normalizeRoomJid.ts +6 -0
- package/src/helpers/resolveInitBeforeLoadUser.ts +79 -0
- package/src/hooks/useChatRoomFocus.ts +95 -0
- package/src/hooks/useChatWrapperInit.ts +51 -46
- package/src/hooks/useEventHandlers.tsx +24 -1
- package/src/hooks/useHeapSender.tsx +2 -1
- package/src/hooks/useLogout.tsx +3 -3
- package/src/hooks/useMessageHeapState.tsx +6 -2
- package/src/hooks/usePushNotifications.ts +21 -8
- package/src/hooks/useRoomState.tsx +4 -0
- package/src/hooks/useSendMessage.tsx +333 -17
- package/src/hooks/useUnreadMessagesCounter.ts +13 -16
- package/src/main.ts +1 -0
- package/src/networking/api-requests/auth.api.ts +60 -2
- package/src/networking/apiClient.ts +2 -1
- package/src/networking/outboundQueue.ts +98 -0
- package/src/networking/xmpp/createTimeoutPromise.xmpp.ts +5 -1
- package/src/networking/xmpp/flushLastViewedToPrivateStore.ts +11 -13
- package/src/networking/xmpp/getRoomsPaged.xmpp.ts +27 -3
- package/src/networking/xmpp/presenceInRoom.xmpp.ts +24 -9
- package/src/networking/xmpp/sendTextMessage.xmpp.ts +2 -1
- package/src/networking/xmppClient.ts +399 -31
- package/src/roomStore/Middleware/unreadMidlleware.tsx +23 -5
- package/src/roomStore/roomHeapSlice.ts +47 -4
- package/src/roomStore/roomsSlice.ts +177 -27
- package/src/types/models/media.model.ts +3 -0
- package/src/types/models/xmpp.model.ts +2 -1
- package/src/types/types.ts +25 -0
- package/src/utils/installPromiseRejectionTracker.ts +91 -0
- package/src/utils/resendMessage.ts +2 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useEffect","useRef","useState","useDispatch","useSelector","useXmppClient","chatAutoEnterer","initRoomsPresence","updatedChatLastTimestamps","updateMessagesTillLast","refresh","setLangSource","setConfig","setIsLoading","useRoomState","useChatSettingState","isChatIdPresentInArray","useGetNewArchRoom","getRoomsWithRetry","useChatWrapperInit","roomJID","wasAutoSelected","config","dispatch","inited","setInited","showModal","setShowModal","isConnectionLost","setConnectionLost","isRetrying","setIsRetrying","hasSyncedHistoryRef","client","initializeClient","setClient","syncRooms","rooms","state","roomsList","user","xmppPassword","console","log","close","getRoomsWithRertyRequest","retryRooms","loadRooms","disableLoad","loading","loadingText","undefined","retryTimeout","initXmmpClient","translates","enabled","translations","xmppUsername","error","newClient","defaultWallet","walletAddress","xmppSettings","
|
|
1
|
+
{"version":3,"names":["useEffect","useRef","useState","useDispatch","useSelector","useXmppClient","chatAutoEnterer","initRoomsPresence","updatedChatLastTimestamps","updateMessagesTillLast","refresh","setLangSource","setConfig","setIsLoading","useRoomState","useChatSettingState","isChatIdPresentInArray","useGetNewArchRoom","getRoomsWithRetry","useChatWrapperInit","roomJID","wasAutoSelected","config","dispatch","inited","setInited","showModal","setShowModal","isConnectionLost","setConnectionLost","isRetrying","setIsRetrying","hasSyncedHistoryRef","client","initializeClient","setClient","syncRooms","rooms","state","roomsList","user","xmppPassword","console","log","close","getRoomsWithRertyRequest","retryRooms","loadRooms","disableLoad","loading","loadingText","undefined","retryTimeout","initXmmpClient","translates","enabled","translations","xmppUsername","error","newClient","defaultWallet","walletAddress","xmppSettings","status","Object","keys","length","newArch","loadedRooms","enableRoomsRetry","isSelectedRoomPresent","getRoomsStanza","roomTimestampObject","getChatsPrivateStoreRequestStanza","current","err","warn","refreshTokens","setTimeout","clearTimeout"],"sourceRoot":"../../../src","sources":["hooks/useChatWrapperInit.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -37,10 +37,18 @@ export const useEventHandlers = config => {
|
|
|
37
37
|
console.error('Error in message edited handler:', error);
|
|
38
38
|
}
|
|
39
39
|
}, [config]);
|
|
40
|
+
const handleMessageRetry = useCallback(event => {
|
|
41
|
+
try {
|
|
42
|
+
config?.eventHandlers?.onMessageRetry?.(event);
|
|
43
|
+
} catch (error) {
|
|
44
|
+
console.error('Error in message retry handler:', error);
|
|
45
|
+
}
|
|
46
|
+
}, [config]);
|
|
40
47
|
return {
|
|
41
48
|
handleMessageSent,
|
|
42
49
|
handleMessageFailed,
|
|
43
|
-
handleMessageEdited
|
|
50
|
+
handleMessageEdited,
|
|
51
|
+
handleMessageRetry
|
|
44
52
|
};
|
|
45
53
|
};
|
|
46
54
|
//# sourceMappingURL=useEventHandlers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useCallback","useEventHandlers","config","handleMessageSent","event","eventHandlers","onMessageSent","error","console","handleMessageFailed","onMessageFailed","message","roomJID","messageType","timestamp","Date","toISOString","handlerError","handleMessageEdited","onMessageEdited"],"sourceRoot":"../../../src","sources":["hooks/useEventHandlers.tsx"],"mappings":";;AAAA,SAASA,WAAW,QAAQ,OAAO;
|
|
1
|
+
{"version":3,"names":["useCallback","useEventHandlers","config","handleMessageSent","event","eventHandlers","onMessageSent","error","console","handleMessageFailed","onMessageFailed","message","roomJID","messageType","timestamp","Date","toISOString","handlerError","handleMessageEdited","onMessageEdited","handleMessageRetry","onMessageRetry"],"sourceRoot":"../../../src","sources":["hooks/useEventHandlers.tsx"],"mappings":";;AAAA,SAASA,WAAW,QAAQ,OAAO;AAsCnC,OAAO,MAAMC,gBAAgB,GAAIC,MAAgB,IAAwB;EACvE,MAAMC,iBAAiB,GAAGH,WAAW,CACnC,MAAOI,KAAuB,IAAK;IACjC,IAAI;MACF,IAAIF,MAAM,EAAEG,aAAa,EAAEC,aAAa,EAAE;QACxC,MAAMJ,MAAM,CAACG,aAAa,CAACC,aAAa,CAACF,KAAK,CAAC;MACjD;IACF,CAAC,CAAC,OAAOG,KAAK,EAAE;MACdC,OAAO,CAACD,KAAK,CAAC,gCAAgC,EAAEA,KAAK,CAAC;MACtD,MAAMA,KAAK;IACb;EACF,CAAC,EACD,CAACL,MAAM,CACT,CAAC;EAED,MAAMO,mBAAmB,GAAGT,WAAW,CACpCI,KAAyB,IAAK;IAC7B,IAAI;MACF,IAAIF,MAAM,EAAEG,aAAa,EAAEK,eAAe,EAAE;QAC1CR,MAAM,CAACG,aAAa,CAACK,eAAe,CAACN,KAAK,CAAC;MAC7C;MACAI,OAAO,CAACD,KAAK,CAAC,yBAAyB,EAAE;QACvCI,OAAO,EAAEP,KAAK,CAACO,OAAO;QACtBC,OAAO,EAAER,KAAK,CAACQ,OAAO;QACtBC,WAAW,EAAET,KAAK,CAACS,WAAW;QAC9BN,KAAK,EAAEH,KAAK,CAACG,KAAK,EAAEI,OAAO;QAC3BG,SAAS,EAAE,IAAIC,IAAI,CAAC,CAAC,CAACC,WAAW,CAAC;MACpC,CAAC,CAAC;IACJ,CAAC,CAAC,OAAOC,YAAY,EAAE;MACrBT,OAAO,CAACD,KAAK,CAAC,kCAAkC,EAAEU,YAAY,CAAC;IACjE;EACF,CAAC,EACD,CAACf,MAAM,CACT,CAAC;EAED,MAAMgB,mBAAmB,GAAGlB,WAAW,CACpCI,KAAyB,IAAK;IAC7B,IAAI;MACF,IAAIF,MAAM,EAAEG,aAAa,EAAEc,eAAe,EAAE;QAC1CjB,MAAM,CAACG,aAAa,CAACc,eAAe,CAACf,KAAK,CAAC;MAC7C;IACF,CAAC,CAAC,OAAOG,KAAK,EAAE;MACdC,OAAO,CAACD,KAAK,CAAC,kCAAkC,EAAEA,KAAK,CAAC;IAC1D;EACF,CAAC,EACD,CAACL,MAAM,CACT,CAAC;EAED,MAAMkB,kBAAkB,GAAGpB,WAAW,CACnCI,KAAwB,IAAK;IAC5B,IAAI;MACFF,MAAM,EAAEG,aAAa,EAAEgB,cAAc,GAAGjB,KAAK,CAAC;IAChD,CAAC,CAAC,OAAOG,KAAK,EAAE;MACdC,OAAO,CAACD,KAAK,CAAC,iCAAiC,EAAEA,KAAK,CAAC;IACzD;EACF,CAAC,EACD,CAACL,MAAM,CACT,CAAC;EAED,OAAO;IACLC,iBAAiB;IACjBM,mBAAmB;IACnBS,mBAAmB;IACnBE;EACF,CAAC;AACH,CAAC","ignoreList":[]}
|
|
@@ -31,7 +31,7 @@ export const useHeapSender = client => {
|
|
|
31
31
|
inFlightRef.current.set(msg.id, Date.now());
|
|
32
32
|
try {
|
|
33
33
|
if (msg.langSource) {
|
|
34
|
-
await client.sendTextMessageWithTranslateTagStanza(msg.roomJid, msg.user.firstName || msg.user.name?.split(' ')[0] || '', msg.user.lastName || msg.user.name?.split(' ')[1] || '', '', msg.user.walletAddress || '', msg.body, '', !!msg.isReply, msg.showInChannel === 'true', msg.mainMessage || '', msg.langSource);
|
|
34
|
+
await client.sendTextMessageWithTranslateTagStanza(msg.roomJid, msg.user.firstName || msg.user.name?.split(' ')[0] || '', msg.user.lastName || msg.user.name?.split(' ')[1] || '', '', msg.user.walletAddress || '', msg.body, '', !!msg.isReply, msg.showInChannel === 'true', msg.mainMessage || '', msg.langSource, msg.id);
|
|
35
35
|
} else {
|
|
36
36
|
await client.sendMessage(msg.roomJid, msg.user.firstName || msg.user.name?.split(' ')[0] || '', msg.user.lastName || msg.user.name?.split(' ')[1] || '', '', msg.user.walletAddress || '', msg.body, '', !!msg.isReply, !!msg.showInChannel, msg.mainMessage, msg.id);
|
|
37
37
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useCallback","useEffect","useRef","useDispatch","useMessageHeapState","useHeapSender","client","dispatch","queue","sendingRef","inFlightRef","Map","sendHeapMessages","length","presencesReady","console","warn","current","msg","lastAttempt","get","id","Date","now","set","langSource","sendTextMessageWithTranslateTagStanza","roomJid","user","firstName","name","split","lastName","walletAddress","body","isReply","showInChannel","mainMessage","sendMessage","err","delete","prevReadyRef","nowReady","wasReady","currentIds","Set","map","m","Array","from","keys","has"],"sourceRoot":"../../../src","sources":["hooks/useHeapSender.tsx"],"mappings":";;AAAA,SAASA,WAAW,EAAEC,SAAS,EAAEC,MAAM,QAAQ,OAAO;AACtD,SAASC,WAAW,QAAQ,aAAa;AACzC,SAASC,mBAAmB,QAAQ,uBAAuB;AAI3D,OAAO,MAAMC,aAAa,GAAIC,MAAyB,IAAK;EAC1D,MAAMC,QAAQ,GAAGJ,WAAW,CAAC,CAAC;EAC9B,MAAM;IAAEK;EAAM,CAAC,GAAGJ,mBAAmB,CAAC,CAAC;EACvC,MAAMK,UAAU,GAAGP,MAAM,CAAC,KAAK,CAAC;EAChC,MAAMQ,WAAW,GAAGR,MAAM,CAAsB,IAAIS,GAAG,CAAC,CAAC,CAAC;EAE1D,MAAMC,gBAAgB,GAAGZ,WAAW,CAAC,YAAY;IAC/C,IAAI,CAACM,MAAM,IAAIE,KAAK,CAACK,MAAM,KAAK,CAAC,EAAE;MAAC;IAAO;IAC3C,IAAI,CAACP,MAAM,CAACQ,cAAc,EAAE;MAC1BC,OAAO,CAACC,IAAI,CAAC,yCAAyC,CAAC;MACvD;IACF;IACA,IAAIP,UAAU,CAACQ,OAAO,EAAE;MAAC;IAAO;IAChCR,UAAU,CAACQ,OAAO,GAAG,IAAI;IACzB,IAAI;MACF,KAAK,MAAMC,GAAG,IAAIV,KAAK,EAAE;QACvB,MAAMW,WAAW,GAAGT,WAAW,CAACO,OAAO,CAACG,GAAG,CAACF,GAAG,CAACG,EAAE,CAAC;QACnD,IAAIF,WAAW,IAAIG,IAAI,CAACC,GAAG,CAAC,CAAC,GAAGJ,WAAW,GAAG,KAAK,EAAE;UACnD;QACF;QACAT,WAAW,CAACO,OAAO,CAACO,GAAG,CAACN,GAAG,CAACG,EAAE,EAAEC,IAAI,CAACC,GAAG,CAAC,CAAC,CAAC;QAC3C,IAAI;UACF,IAAIL,GAAG,CAACO,UAAU,EAAE;YAClB,MAAMnB,MAAM,CAACoB,qCAAqC,CAChDR,GAAG,CAACS,OAAO,EACXT,GAAG,CAACU,IAAI,CAACC,SAAS,IAAIX,GAAG,CAACU,IAAI,CAACE,IAAI,EAAEC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EACxDb,GAAG,CAACU,IAAI,CAACI,QAAQ,IAAId,GAAG,CAACU,IAAI,CAACE,IAAI,EAAEC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EACvD,EAAE,EACFb,GAAG,CAACU,IAAI,CAACK,aAAa,IAAI,EAAE,EAC5Bf,GAAG,CAACgB,IAAI,EACR,EAAE,EACF,CAAC,CAAChB,GAAG,CAACiB,OAAO,EACbjB,GAAG,CAACkB,aAAa,KAAK,MAAM,EAC5BlB,GAAG,CAACmB,WAAW,IAAI,EAAE,EACrBnB,GAAG,CAACO,
|
|
1
|
+
{"version":3,"names":["useCallback","useEffect","useRef","useDispatch","useMessageHeapState","useHeapSender","client","dispatch","queue","sendingRef","inFlightRef","Map","sendHeapMessages","length","presencesReady","console","warn","current","msg","lastAttempt","get","id","Date","now","set","langSource","sendTextMessageWithTranslateTagStanza","roomJid","user","firstName","name","split","lastName","walletAddress","body","isReply","showInChannel","mainMessage","sendMessage","err","delete","prevReadyRef","nowReady","wasReady","currentIds","Set","map","m","Array","from","keys","has"],"sourceRoot":"../../../src","sources":["hooks/useHeapSender.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -49,7 +49,7 @@ const logoutService = {
|
|
|
49
49
|
performLogout: async () => {
|
|
50
50
|
// 0. Flush lastViewedTimestamp to the server's private store BEFORE
|
|
51
51
|
// we close XMPP. Only rooms with no outstanding unread (plus the
|
|
52
|
-
//
|
|
52
|
+
// visible room) get their entries updated — rooms with unread
|
|
53
53
|
// keep their old marker so the next login still surfaces those
|
|
54
54
|
// messages as unread. Without this, an active-room view at
|
|
55
55
|
// logout would still appear unread on next login because we
|
|
@@ -58,10 +58,10 @@ const logoutService = {
|
|
|
58
58
|
const state = store.getState();
|
|
59
59
|
const client = state.chatSettingStore?.client;
|
|
60
60
|
const rooms = state.rooms?.rooms;
|
|
61
|
-
const
|
|
61
|
+
const visibleRoomJID = state.rooms?.visibleRoomJID || null;
|
|
62
62
|
if (client?.flushLastViewedToPrivateStoreStanza) {
|
|
63
63
|
await Promise.race([client.flushLastViewedToPrivateStoreStanza(rooms, {
|
|
64
|
-
|
|
64
|
+
visibleRoomJID,
|
|
65
65
|
onlyIfNoUnread: true
|
|
66
66
|
}), new Promise(res => setTimeout(res, 2000))]);
|
|
67
67
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useDispatch","DeviceEventEmitter","AsyncStorage","store","logout","setLogoutState","useCallback","clearHeap","pushSubscriptionService","clearRoomsRestCache","clearPersistedState","localStorageConstants","LIBRARY_STRAY_KEYS","logoutService","performLogout","state","getState","client","chatSettingStore","rooms","
|
|
1
|
+
{"version":3,"names":["useDispatch","DeviceEventEmitter","AsyncStorage","store","logout","setLogoutState","useCallback","clearHeap","pushSubscriptionService","clearRoomsRestCache","clearPersistedState","localStorageConstants","LIBRARY_STRAY_KEYS","logoutService","performLogout","state","getState","client","chatSettingStore","rooms","visibleRoomJID","flushLastViewedToPrivateStoreStanza","Promise","race","onlyIfNoUnread","res","setTimeout","e","console","warn","emit","reset","dispatch","multiRemove","ETHORA_USER","useLogout","handleLogout","catch","err"],"sourceRoot":"../../../src","sources":["hooks/useLogout.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -2,11 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
import { useSelector } from 'react-redux';
|
|
4
4
|
export const useMessageHeapState = () => {
|
|
5
|
-
const queue = useSelector(state => state.roomHeapSlice
|
|
5
|
+
const queue = useSelector(state => state.roomHeapSlice?.messageHeap);
|
|
6
|
+
const failedMessages = useSelector(state => state.roomHeapSlice?.failedMessages);
|
|
6
7
|
const idSet = new Set(queue?.map(m => m.id) ?? []);
|
|
8
|
+
const failedIdSet = new Set(Object.keys(failedMessages || {}));
|
|
7
9
|
return {
|
|
8
10
|
queue,
|
|
9
|
-
idSet
|
|
11
|
+
idSet,
|
|
12
|
+
failedMessages,
|
|
13
|
+
failedIdSet
|
|
10
14
|
};
|
|
11
15
|
};
|
|
12
16
|
//# sourceMappingURL=useMessageHeapState.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useSelector","useMessageHeapState","queue","state","roomHeapSlice","messageHeap","idSet","Set","map","m","id"],"sourceRoot":"../../../src","sources":["hooks/useMessageHeapState.tsx"],"mappings":";;AAAA,SAASA,WAAW,QAAQ,aAAa;AAGzC,OAAO,MAAMC,mBAAmB,GAAGA,CAAA,KAAM;EACvC,MAAMC,KAAK,GAAGF,WAAW,CACtBG,KAAgB,IAAKA,KAAK,CAACC,aAAa,CAACC,
|
|
1
|
+
{"version":3,"names":["useSelector","useMessageHeapState","queue","state","roomHeapSlice","messageHeap","failedMessages","idSet","Set","map","m","id","failedIdSet","Object","keys"],"sourceRoot":"../../../src","sources":["hooks/useMessageHeapState.tsx"],"mappings":";;AAAA,SAASA,WAAW,QAAQ,aAAa;AAGzC,OAAO,MAAMC,mBAAmB,GAAGA,CAAA,KAAM;EACvC,MAAMC,KAAK,GAAGF,WAAW,CACtBG,KAAgB,IAAKA,KAAK,CAACC,aAAa,EAAEC,WAC7C,CAAC;EACD,MAAMC,cAAc,GAAGN,WAAW,CAC/BG,KAAgB,IAAKA,KAAK,CAACC,aAAa,EAAEE,cAC7C,CAAC;EACD,MAAMC,KAAK,GAAG,IAAIC,GAAG,CAACN,KAAK,EAAEO,GAAG,CAAEC,CAAC,IAAKA,CAAC,CAACC,EAAE,CAAC,IAAI,EAAE,CAAC;EACpD,MAAMC,WAAW,GAAG,IAAIJ,GAAG,CAACK,MAAM,CAACC,IAAI,CAACR,cAAc,IAAI,CAAC,CAAC,CAAC,CAAC;EAE9D,OAAO;IAAEJ,KAAK;IAAEK,KAAK;IAAED,cAAc;IAAEM;EAAY,CAAC;AACtD,CAAC","ignoreList":[]}
|
|
@@ -44,7 +44,11 @@ export function usePushNotifications() {
|
|
|
44
44
|
}
|
|
45
45
|
};
|
|
46
46
|
useEffect(() => {
|
|
47
|
-
initToken()
|
|
47
|
+
// initToken is async — `initToken()` without `.catch` leaves any
|
|
48
|
+
// rejection unhandled (showed as `Uncaught (in promise, id: X)` red
|
|
49
|
+
// screen in dev). The inner try/catch covers most paths but any
|
|
50
|
+
// synchronous throw before the try-block ran would still leak.
|
|
51
|
+
initToken().catch(err => console.warn('[usePushNotifications] initToken rejected', err));
|
|
48
52
|
const unsubscribeForeground = onForegroundMessage(message => {
|
|
49
53
|
setNotification(message);
|
|
50
54
|
const {
|
|
@@ -71,7 +75,7 @@ export function usePushNotifications() {
|
|
|
71
75
|
setNotification(message);
|
|
72
76
|
handleNotificationPress(message);
|
|
73
77
|
}
|
|
74
|
-
});
|
|
78
|
+
}).catch(err => console.warn('[usePushNotifications] getInitialNotification failed', err));
|
|
75
79
|
return () => {
|
|
76
80
|
unsubscribeForeground();
|
|
77
81
|
unsubscribeOpened();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useEffect","useState","Alert","initPushNotifications","onForegroundMessage","onNotificationOpenedApp","getInitialNotification","pushSubscriptionService","useSelector","useDispatch","useLocalStorage","setPendingNotificationJid","usePushNotifications","fcmToken","setFcmToken","notification","setNotification","user","config","state","chatSettingStore","rooms","dispatch","set","get","handleNotificationPress","remoteMessage","console","log","JSON","stringify","jid","data","chatJid","warn","initToken","token","newToken","error","unsubscribeForeground","message","notif","alert","title","body","text","onPress","unsubscribeOpened","then","xmppPassword","defaultWallet","walletAddress","subscribeToPush","projectName"
|
|
1
|
+
{"version":3,"names":["useEffect","useState","Alert","initPushNotifications","onForegroundMessage","onNotificationOpenedApp","getInitialNotification","pushSubscriptionService","useSelector","useDispatch","useLocalStorage","setPendingNotificationJid","usePushNotifications","fcmToken","setFcmToken","notification","setNotification","user","config","state","chatSettingStore","rooms","dispatch","set","get","handleNotificationPress","remoteMessage","console","log","JSON","stringify","jid","data","chatJid","warn","initToken","token","newToken","error","catch","err","unsubscribeForeground","message","notif","alert","title","body","text","onPress","unsubscribeOpened","then","xmppPassword","defaultWallet","walletAddress","subscribeToPush","projectName"],"sourceRoot":"../../../src","sources":["hooks/usePushNotifications.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -8,6 +8,7 @@ export const useRoomState = roomJID => {
|
|
|
8
8
|
const room = useSelector(state => roomJID ? state.rooms.rooms[roomJID] : undefined);
|
|
9
9
|
const roomsList = useSelector(state => state.rooms.rooms);
|
|
10
10
|
const activeRoomJID = useSelector(state => state.rooms.activeRoomJID);
|
|
11
|
+
const visibleRoomJID = useSelector(state => state.rooms.visibleRoomJID);
|
|
11
12
|
const editAction = useSelector(state => state.rooms.editAction);
|
|
12
13
|
const globalLoading = useSelector(state => state.rooms.isLoading);
|
|
13
14
|
const loading = useSelector(state => {
|
|
@@ -21,6 +22,7 @@ export const useRoomState = roomJID => {
|
|
|
21
22
|
room,
|
|
22
23
|
roomsList,
|
|
23
24
|
activeRoomJID,
|
|
25
|
+
visibleRoomJID,
|
|
24
26
|
editAction,
|
|
25
27
|
globalLoading,
|
|
26
28
|
loadingText,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useMemo","useSelector","useRoomState","roomJID","room","state","rooms","undefined","roomsList","activeRoomJID","editAction","globalLoading","isLoading","loading","activeJID","loadingText","usersSet","roomMessages","messages"],"sourceRoot":"../../../src","sources":["hooks/useRoomState.tsx"],"mappings":";;AAAA;;AAEA,SAASA,OAAO,QAAQ,OAAO;AAC/B,SAASC,WAAW,QAAQ,aAAa;AAGzC,OAAO,MAAMC,YAAY,GAAIC,OAAgB,IAAK;EAChD,MAAMC,IAAI,GAAGH,WAAW,CAAEI,KAAgB,IACxCF,OAAO,GAAGE,KAAK,CAACC,KAAK,CAACA,KAAK,CAACH,OAAO,CAAC,GAAGI,SACzC,CAAC;EACD,MAAMC,SAAS,GAAGP,WAAW,CAAEI,KAAgB,IAAKA,KAAK,CAACC,KAAK,CAACA,KAAK,CAAC;EACtE,MAAMG,aAAa,GAAGR,WAAW,CAC9BI,KAAgB,IAAKA,KAAK,CAACC,KAAK,CAACG,aACpC,CAAC;EACD,MAAMC,
|
|
1
|
+
{"version":3,"names":["useMemo","useSelector","useRoomState","roomJID","room","state","rooms","undefined","roomsList","activeRoomJID","visibleRoomJID","editAction","globalLoading","isLoading","loading","activeJID","loadingText","usersSet","roomMessages","messages"],"sourceRoot":"../../../src","sources":["hooks/useRoomState.tsx"],"mappings":";;AAAA;;AAEA,SAASA,OAAO,QAAQ,OAAO;AAC/B,SAASC,WAAW,QAAQ,aAAa;AAGzC,OAAO,MAAMC,YAAY,GAAIC,OAAgB,IAAK;EAChD,MAAMC,IAAI,GAAGH,WAAW,CAAEI,KAAgB,IACxCF,OAAO,GAAGE,KAAK,CAACC,KAAK,CAACA,KAAK,CAACH,OAAO,CAAC,GAAGI,SACzC,CAAC;EACD,MAAMC,SAAS,GAAGP,WAAW,CAAEI,KAAgB,IAAKA,KAAK,CAACC,KAAK,CAACA,KAAK,CAAC;EACtE,MAAMG,aAAa,GAAGR,WAAW,CAC9BI,KAAgB,IAAKA,KAAK,CAACC,KAAK,CAACG,aACpC,CAAC;EACD,MAAMC,cAAc,GAAGT,WAAW,CAC/BI,KAAgB,IAAKA,KAAK,CAACC,KAAK,CAACI,cACpC,CAAC;EACD,MAAMC,UAAU,GAAGV,WAAW,CAAEI,KAAgB,IAAKA,KAAK,CAACC,KAAK,CAACK,UAAU,CAAC;EAC5E,MAAMC,aAAa,GAAGX,WAAW,CAC9BI,KAAgB,IAAKA,KAAK,CAACC,KAAK,CAACO,SACpC,CAAC;EACD,MAAMC,OAAO,GAAGb,WAAW,CAAEI,KAAgB,IAAK;IAChD,MAAMU,SAAS,GAAGV,KAAK,CAACC,KAAK,CAACG,aAAa;IAC3C,OAAOM,SAAS,GAAGV,KAAK,CAACC,KAAK,CAACA,KAAK,CAACS,SAAS,CAAC,EAAEF,SAAS,IAAI,KAAK,GAAG,KAAK;EAC7E,CAAC,CAAC;EACF,MAAMG,WAAW,GAAGf,WAAW,CAC5BI,KAAgB,IAAKA,KAAK,CAACC,KAAK,CAACU,WACpC,CAAC;EACD,MAAMC,QAAQ,GAAGhB,WAAW,CAAEI,KAAgB,IAAKA,KAAK,CAACC,KAAK,CAACW,QAAQ,CAAC;EAExE,MAAMC,YAAY,GAAGlB,OAAO,CAC1B,MACES,aAAa,IAAID,SAAS,CAACC,aAAa,CAAC,GACrCD,SAAS,CAACC,aAAa,CAAC,CAACU,QAAQ,IAAI,EAAE,GACvC,EAAE,EACR,CAACX,SAAS,EAAEC,aAAa,CAC3B,CAAC;EAED,OAAO;IACLL,IAAI;IACJI,SAAS;IACTC,aAAa;IACbC,cAAc;IACdC,UAAU;IACVC,aAAa;IACbI,WAAW;IACXF,OAAO;IACPI,YAAY;IACZD;EACF,CAAC;AACH,CAAC","ignoreList":[]}
|
|
@@ -1,13 +1,26 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import { useCallback } from 'react';
|
|
4
|
+
import { Platform } from 'react-native';
|
|
4
5
|
import { v4 as uuidv4 } from 'uuid';
|
|
5
6
|
import { useXmppClient } from '../context/xmppProvider';
|
|
6
|
-
import { useDispatch, useSelector } from 'react-redux';
|
|
7
|
+
import { useDispatch, useSelector, useStore } from 'react-redux';
|
|
7
8
|
import { addRoomMessage, setEditAction } from '../roomStore/roomsSlice';
|
|
8
|
-
import { addMessageToHeap } from '../roomStore/roomHeapSlice';
|
|
9
|
-
import {
|
|
9
|
+
import { addMessageToHeap, clearMessageFailure, markMessageFailed } from '../roomStore/roomHeapSlice';
|
|
10
|
+
import { uploadFileViaFetch } from '../networking/api-requests/auth.api';
|
|
11
|
+
import { enqueueOutboundSend } from '../networking/outboundQueue';
|
|
12
|
+
import { store } from '../roomStore';
|
|
13
|
+
import { getGlobalXmppClient } from '../utils/clientRegistry';
|
|
10
14
|
import { useEventHandlers } from './useEventHandlers';
|
|
15
|
+
// Watchdog: if a message stays "pending" (no server echo) for this
|
|
16
|
+
// long after the optimistic dispatch, mark it failed so the bubble
|
|
17
|
+
// flips out of the "sending..." state. Covers the silent-failure
|
|
18
|
+
// case (e.g. device offline before the message ever made it to the
|
|
19
|
+
// XMPP socket) — bug #18. Tuned generously so a brief network blip
|
|
20
|
+
// followed by reconnect within 30s still resolves naturally via the
|
|
21
|
+
// server echo.
|
|
22
|
+
const PENDING_WATCHDOG_MS = 30_000;
|
|
23
|
+
|
|
11
24
|
// Monotonic counter for stanza ids. Bumped on each send within a single
|
|
12
25
|
// process. Two rapid sends in the same millisecond used to collide on
|
|
13
26
|
// `send-text-message-${Date.now()}`; that collision made
|
|
@@ -16,11 +29,20 @@ import { useEventHandlers } from './useEventHandlers';
|
|
|
16
29
|
// whose body was whatever the last dispatch wrote.
|
|
17
30
|
let __sendIdSeq = 0;
|
|
18
31
|
const nextStanzaId = prefix => `${prefix}-${Date.now()}-${__sendIdSeq = __sendIdSeq + 1 >>> 0}`;
|
|
32
|
+
|
|
33
|
+
// Hard client-side cap on a single upload. The backend rejects oversized
|
|
34
|
+
// bodies with HTTP 413; SendInput blocks oversized files at pick time,
|
|
35
|
+
// and this mirrors that limit on every send path (including retries).
|
|
36
|
+
const MAX_MEDIA_BYTES = 50 * 1024 * 1024;
|
|
19
37
|
export const useSendMessage = _configOverride => {
|
|
20
38
|
const {
|
|
21
39
|
client
|
|
22
40
|
} = useXmppClient();
|
|
23
41
|
const dispatch = useDispatch();
|
|
42
|
+
// useStore gives us imperative getState() access for the watchdog —
|
|
43
|
+
// peek at the message's current pending/failed state from inside a
|
|
44
|
+
// setTimeout callback without re-rendering on every redux change.
|
|
45
|
+
const reduxStore = useStore();
|
|
24
46
|
|
|
25
47
|
// Split selectors so each returns a primitive/stable reference — the
|
|
26
48
|
// single-object selector above caused a "returned a different result
|
|
@@ -33,8 +55,10 @@ export const useSendMessage = _configOverride => {
|
|
|
33
55
|
const {
|
|
34
56
|
handleMessageSent,
|
|
35
57
|
handleMessageFailed,
|
|
36
|
-
handleMessageEdited
|
|
58
|
+
handleMessageEdited,
|
|
59
|
+
handleMessageRetry
|
|
37
60
|
} = useEventHandlers(config);
|
|
61
|
+
const failedMessages = useSelector(state => state.roomHeapSlice?.failedMessages || {});
|
|
38
62
|
const sendMessage = useCallback(async (message, activeRoomJID, isReply, isChecked, mainMessage) => {
|
|
39
63
|
if (editAction?.isEdit) {
|
|
40
64
|
try {
|
|
@@ -96,16 +120,56 @@ export const useSendMessage = _configOverride => {
|
|
|
96
120
|
message: optimisticMessage
|
|
97
121
|
}));
|
|
98
122
|
}
|
|
123
|
+
|
|
124
|
+
// Silent-failure watchdog (bug #18). If no echo lands within
|
|
125
|
+
// PENDING_WATCHDOG_MS, flip the bubble to "failed → tap to
|
|
126
|
+
// retry". We check at fire-time whether the message is still
|
|
127
|
+
// pending and not already marked failed by the catch path.
|
|
128
|
+
const watchdogTimer = setTimeout(() => {
|
|
129
|
+
const state = reduxStore.getState();
|
|
130
|
+
const roomMsgs = state.rooms?.rooms?.[activeRoomJID]?.messages || [];
|
|
131
|
+
const stillPending = roomMsgs.find(m => m.id === optimisticId && m.pending);
|
|
132
|
+
const alreadyFailed = state.roomHeapSlice?.failedMessages?.[optimisticId];
|
|
133
|
+
if (stillPending && !alreadyFailed) {
|
|
134
|
+
console.warn(`Send watchdog fired — message ${optimisticId} stuck pending > ${PENDING_WATCHDOG_MS}ms; marking failed`);
|
|
135
|
+
dispatch(markMessageFailed({
|
|
136
|
+
kind: 'text',
|
|
137
|
+
id: optimisticId,
|
|
138
|
+
roomJID: activeRoomJID,
|
|
139
|
+
body: message,
|
|
140
|
+
isReply,
|
|
141
|
+
isChecked,
|
|
142
|
+
mainMessage
|
|
143
|
+
}));
|
|
144
|
+
handleMessageFailed({
|
|
145
|
+
message,
|
|
146
|
+
roomJID: activeRoomJID,
|
|
147
|
+
error: new Error('Send timed out (no server echo)'),
|
|
148
|
+
messageType: 'text'
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
}, PENDING_WATCHDOG_MS);
|
|
99
152
|
try {
|
|
100
|
-
|
|
101
|
-
|
|
153
|
+
const effectiveClient = client || [getGlobalXmppClient(), store.getState()?.chatSettingStore?.client].find(c => c && c.status === 'online');
|
|
154
|
+
if (!effectiveClient) {
|
|
155
|
+
const anyClient = client || getGlobalXmppClient() || store.getState()?.chatSettingStore?.client;
|
|
156
|
+
try {
|
|
157
|
+
anyClient?.forceReconnect?.();
|
|
158
|
+
} catch {}
|
|
159
|
+
enqueueOutboundSend({
|
|
160
|
+
optimisticId,
|
|
161
|
+
roomJID: activeRoomJID,
|
|
162
|
+
enqueuedAt: Date.now(),
|
|
163
|
+
send: c => c.sendMessage(activeRoomJID, user.firstName, user.lastName, '', user.walletAddress, message, '', isReply || false, isChecked || false, mainMessage || '', optimisticId)
|
|
164
|
+
});
|
|
165
|
+
return;
|
|
102
166
|
}
|
|
103
167
|
// Pass the optimistic id as the stanza id so the server echoes
|
|
104
168
|
// it back with the same value — the reducer's dedupe lookup
|
|
105
169
|
// matches and the bubble flips from pending → delivered in-place
|
|
106
170
|
// (instead of rendering two copies, which is what happens when
|
|
107
171
|
// ids don't match).
|
|
108
|
-
|
|
172
|
+
effectiveClient.sendMessage(activeRoomJID, user.firstName, user.lastName, '', user.walletAddress, message, '', isReply || false, isChecked || false, mainMessage || '', optimisticId);
|
|
109
173
|
await handleMessageSent({
|
|
110
174
|
message,
|
|
111
175
|
roomJID: activeRoomJID,
|
|
@@ -113,6 +177,16 @@ export const useSendMessage = _configOverride => {
|
|
|
113
177
|
messageType: 'text'
|
|
114
178
|
});
|
|
115
179
|
} catch (error) {
|
|
180
|
+
clearTimeout(watchdogTimer);
|
|
181
|
+
dispatch(markMessageFailed({
|
|
182
|
+
kind: 'text',
|
|
183
|
+
id: optimisticId,
|
|
184
|
+
roomJID: activeRoomJID,
|
|
185
|
+
body: message,
|
|
186
|
+
isReply,
|
|
187
|
+
isChecked,
|
|
188
|
+
mainMessage
|
|
189
|
+
}));
|
|
116
190
|
handleMessageFailed({
|
|
117
191
|
message,
|
|
118
192
|
roomJID: activeRoomJID,
|
|
@@ -120,16 +194,44 @@ export const useSendMessage = _configOverride => {
|
|
|
120
194
|
messageType: 'text'
|
|
121
195
|
});
|
|
122
196
|
}
|
|
123
|
-
}, [editAction, client, user, dispatch, handleMessageSent, handleMessageEdited, handleMessageFailed]);
|
|
124
|
-
const sendMedia = useCallback(async (data, type, activeRoomJID, isReply = false, isChecked = false, mainMessage = '') => {
|
|
197
|
+
}, [editAction, client, user, dispatch, handleMessageSent, handleMessageEdited, handleMessageFailed, reduxStore]);
|
|
198
|
+
const sendMedia = useCallback(async (data, type, activeRoomJID, isReply = false, isChecked = false, mainMessage = '', existingId) => {
|
|
125
199
|
client?.onCriticalSend?.(activeRoomJID);
|
|
126
|
-
|
|
200
|
+
|
|
201
|
+
// Defensive 50 MB guard on every send path (SendInput blocks it at
|
|
202
|
+
// pick time, but retries replay the saved payload straight here).
|
|
203
|
+
if (typeof data?.size === 'number' && data.size > MAX_MEDIA_BYTES) {
|
|
204
|
+
console.warn('media exceeds 50MB cap — not uploading', {
|
|
205
|
+
name: data?.name,
|
|
206
|
+
size: data?.size
|
|
207
|
+
});
|
|
208
|
+
if (existingId) {
|
|
209
|
+
dispatch(markMessageFailed({
|
|
210
|
+
kind: 'media',
|
|
211
|
+
id: existingId,
|
|
212
|
+
roomJID: activeRoomJID,
|
|
213
|
+
data,
|
|
214
|
+
type,
|
|
215
|
+
isReply,
|
|
216
|
+
isChecked,
|
|
217
|
+
mainMessage
|
|
218
|
+
}));
|
|
219
|
+
}
|
|
220
|
+
handleMessageFailed({
|
|
221
|
+
message: 'media',
|
|
222
|
+
roomJID: activeRoomJID,
|
|
223
|
+
error: new Error('File exceeds the 50 MB upload limit'),
|
|
224
|
+
messageType: 'media'
|
|
225
|
+
});
|
|
226
|
+
return;
|
|
227
|
+
}
|
|
228
|
+
const id = existingId || `send-media-message:${uuidv4()}`;
|
|
127
229
|
const optimisticTimestamp = Date.now();
|
|
128
230
|
const optimisticDate = new Date(optimisticTimestamp).toISOString();
|
|
129
231
|
const selfId = user?.xmppUsername || user?.walletAddress || '';
|
|
130
232
|
const displayName = `${user?.firstName || ''} ${user?.lastName || ''}`.trim() || selfId;
|
|
131
233
|
const fileSizeStr = data?.size != null ? String(data.size) : '';
|
|
132
|
-
if (!config?.disableSentLogic) {
|
|
234
|
+
if (!config?.disableSentLogic && !existingId) {
|
|
133
235
|
dispatch(addRoomMessage({
|
|
134
236
|
roomJID: activeRoomJID,
|
|
135
237
|
message: {
|
|
@@ -177,10 +279,82 @@ export const useSendMessage = _configOverride => {
|
|
|
177
279
|
mainMessage
|
|
178
280
|
}));
|
|
179
281
|
}
|
|
282
|
+
|
|
283
|
+
// Silent-failure watchdog for media-send (bug #18). Same shape
|
|
284
|
+
// as the text path: if the optimistic bubble never gets the echo
|
|
285
|
+
// (e.g. upload completed but XMPP send is buffered offline), flip
|
|
286
|
+
// to failed → tap to retry.
|
|
287
|
+
const mediaWatchdog = setTimeout(() => {
|
|
288
|
+
const state = reduxStore.getState();
|
|
289
|
+
const roomMsgs = state.rooms?.rooms?.[activeRoomJID]?.messages || [];
|
|
290
|
+
const stillPending = roomMsgs.find(m => m.id === id && m.pending);
|
|
291
|
+
const alreadyFailed = state.roomHeapSlice?.failedMessages?.[id];
|
|
292
|
+
if (stillPending && !alreadyFailed) {
|
|
293
|
+
console.warn(`Media-send watchdog fired — ${id} stuck pending > ${PENDING_WATCHDOG_MS}ms; marking failed`);
|
|
294
|
+
dispatch(markMessageFailed({
|
|
295
|
+
kind: 'media',
|
|
296
|
+
id,
|
|
297
|
+
roomJID: activeRoomJID,
|
|
298
|
+
data,
|
|
299
|
+
type,
|
|
300
|
+
isReply,
|
|
301
|
+
isChecked,
|
|
302
|
+
mainMessage
|
|
303
|
+
}));
|
|
304
|
+
handleMessageFailed({
|
|
305
|
+
message: 'media',
|
|
306
|
+
roomJID: activeRoomJID,
|
|
307
|
+
error: new Error('Media send timed out (no server echo)'),
|
|
308
|
+
messageType: 'media'
|
|
309
|
+
});
|
|
310
|
+
}
|
|
311
|
+
}, PENDING_WATCHDOG_MS);
|
|
312
|
+
|
|
313
|
+
// Help RN's FormData polyfill build a proper multipart/file part
|
|
314
|
+
// (instead of serialising the JS object as JSON). On iOS the
|
|
315
|
+
// picker can return ph:// or assets-library:// URIs for some
|
|
316
|
+
// legacy library items — those can't be read as files. Coerce
|
|
317
|
+
// to a file:// scheme when possible so the body is a real blob.
|
|
318
|
+
const fileBlob = {
|
|
319
|
+
uri: typeof data?.uri === 'string' ? data.uri.replace(/^assets-library:\/\//, 'file://') : data?.uri,
|
|
320
|
+
type: data?.type || data?.mimeType || type || 'application/octet-stream',
|
|
321
|
+
name: data?.name || data?.fileName || `media_${Date.now()}`
|
|
322
|
+
};
|
|
323
|
+
|
|
324
|
+
// Mirror the web client: a single multipart POST to /files/ with
|
|
325
|
+
// the file under the plural "files" field. We send it via fetch
|
|
326
|
+
// (not axios) because RN's fetch sets the multipart boundary on the
|
|
327
|
+
// Content-Type header correctly. The previous axios fallback omitted
|
|
328
|
+
// a valid boundary, so the server mis-parsed one file as many and
|
|
329
|
+
// rejected the request with HTTP 413 "TOO_MANY_FILES". The only
|
|
330
|
+
// retry is the documented singular-"file" fallback for deployments
|
|
331
|
+
// that 500 on the plural field (bug #10).
|
|
332
|
+
const tryUpload = async () => {
|
|
333
|
+
const fd = new FormData();
|
|
334
|
+
fd.append('files', fileBlob);
|
|
335
|
+
try {
|
|
336
|
+
return await uploadFileViaFetch(fd);
|
|
337
|
+
} catch (err) {
|
|
338
|
+
if (err?.response?.status === 500) {
|
|
339
|
+
console.warn('upload "files" field returned 500 — retrying with "file" (singular)', {
|
|
340
|
+
name: fileBlob.name,
|
|
341
|
+
type: fileBlob.type
|
|
342
|
+
});
|
|
343
|
+
const fd2 = new FormData();
|
|
344
|
+
fd2.append('file', fileBlob);
|
|
345
|
+
return await uploadFileViaFetch(fd2);
|
|
346
|
+
}
|
|
347
|
+
throw err;
|
|
348
|
+
}
|
|
349
|
+
};
|
|
180
350
|
try {
|
|
181
|
-
const
|
|
182
|
-
|
|
183
|
-
|
|
351
|
+
const response = await tryUpload();
|
|
352
|
+
// Upload succeeded — the stanza is now in flight. If the
|
|
353
|
+
// server echo arrives within the watchdog window the bubble
|
|
354
|
+
// flips normally; if not, the watchdog still fires and marks
|
|
355
|
+
// it failed. We don't clear the timer on upload success because
|
|
356
|
+
// the XMPP send could still fail silently.
|
|
357
|
+
|
|
184
358
|
for (const item of response.data.results) {
|
|
185
359
|
const messagePayload = {
|
|
186
360
|
firstName: user.firstName,
|
|
@@ -211,7 +385,21 @@ export const useSendMessage = _configOverride => {
|
|
|
211
385
|
// Stanza id == placeholder id so the MUC echo's outer
|
|
212
386
|
// <message id="..."> matches xmppId on the placeholder and
|
|
213
387
|
// insertMessageWithDelimiter merges in place + flips pending.
|
|
214
|
-
client
|
|
388
|
+
const effectiveMediaClient = client || [getGlobalXmppClient(), store.getState()?.chatSettingStore?.client].find(c => c && c.status === 'online');
|
|
389
|
+
if (effectiveMediaClient) {
|
|
390
|
+
effectiveMediaClient.sendMediaMessageStanza(activeRoomJID, messagePayload, id);
|
|
391
|
+
} else {
|
|
392
|
+
const anyMediaClient = client || getGlobalXmppClient() || store.getState()?.chatSettingStore?.client;
|
|
393
|
+
try {
|
|
394
|
+
anyMediaClient?.forceReconnect?.();
|
|
395
|
+
} catch {}
|
|
396
|
+
enqueueOutboundSend({
|
|
397
|
+
optimisticId: id,
|
|
398
|
+
roomJID: activeRoomJID,
|
|
399
|
+
enqueuedAt: Date.now(),
|
|
400
|
+
send: c => c.sendMediaMessageStanza(activeRoomJID, messagePayload, id)
|
|
401
|
+
});
|
|
402
|
+
}
|
|
215
403
|
}
|
|
216
404
|
await handleMessageSent({
|
|
217
405
|
message: 'media',
|
|
@@ -229,17 +417,41 @@ export const useSendMessage = _configOverride => {
|
|
|
229
417
|
}
|
|
230
418
|
});
|
|
231
419
|
} catch (error) {
|
|
420
|
+
// Upload (or stanza send) threw an explicit error. Clear the
|
|
421
|
+
// watchdog so it doesn't double-fire `markMessageFailed`.
|
|
422
|
+
clearTimeout(mediaWatchdog);
|
|
232
423
|
// Surface the real server payload so we can see why the upload
|
|
233
424
|
// was rejected (axios collapses the message to "Request failed
|
|
234
425
|
// with status code N"; the actual reason lives in
|
|
235
426
|
// `error.response.data`).
|
|
427
|
+
const uriStr = typeof data?.uri === 'string' ? data.uri : '';
|
|
428
|
+
const uriScheme = uriStr.match(/^([a-z]+):/i)?.[1] ?? 'unknown';
|
|
236
429
|
console.error('upload failed', {
|
|
237
430
|
status: error?.response?.status,
|
|
238
431
|
statusText: error?.response?.statusText,
|
|
239
432
|
serverBody: error?.response?.data,
|
|
240
433
|
requestUrl: error?.config?.url,
|
|
241
|
-
axiosMessage: error?.message
|
|
434
|
+
axiosMessage: error?.message,
|
|
435
|
+
axiosCode: error?.code,
|
|
436
|
+
axiosCauseMessage: error?.cause?.message,
|
|
437
|
+
uri: uriStr,
|
|
438
|
+
uriScheme,
|
|
439
|
+
mime: fileBlob.type,
|
|
440
|
+
fileSizeBytes: data?.size ?? null,
|
|
441
|
+
fileName: fileBlob.name,
|
|
442
|
+
platformOS: Platform.OS,
|
|
443
|
+
platformVersion: Platform.Version
|
|
242
444
|
});
|
|
445
|
+
dispatch(markMessageFailed({
|
|
446
|
+
kind: 'media',
|
|
447
|
+
id,
|
|
448
|
+
roomJID: activeRoomJID,
|
|
449
|
+
data,
|
|
450
|
+
type,
|
|
451
|
+
isReply,
|
|
452
|
+
isChecked,
|
|
453
|
+
mainMessage
|
|
454
|
+
}));
|
|
243
455
|
handleMessageFailed({
|
|
244
456
|
message: 'media',
|
|
245
457
|
roomJID: activeRoomJID,
|
|
@@ -247,7 +459,29 @@ export const useSendMessage = _configOverride => {
|
|
|
247
459
|
messageType: 'media'
|
|
248
460
|
});
|
|
249
461
|
}
|
|
250
|
-
}, [client, config, user, dispatch, handleMessageSent, handleMessageFailed]);
|
|
462
|
+
}, [client, config, user, dispatch, handleMessageSent, handleMessageFailed, reduxStore]);
|
|
463
|
+
|
|
464
|
+
// Retry a previously-failed send by replaying the saved payload from
|
|
465
|
+
// the heap. Clears the failure flag first so the bubble flips back to
|
|
466
|
+
// "sending..."; if the retry fails again `markMessageFailed` re-arms
|
|
467
|
+
// it. No-op when the id isn't in the failed map.
|
|
468
|
+
const retryMessage = useCallback(async failedId => {
|
|
469
|
+
const payload = failedMessages[failedId];
|
|
470
|
+
if (!payload) {
|
|
471
|
+
return;
|
|
472
|
+
}
|
|
473
|
+
dispatch(clearMessageFailure(failedId));
|
|
474
|
+
handleMessageRetry({
|
|
475
|
+
messageId: failedId,
|
|
476
|
+
roomJID: payload.roomJID,
|
|
477
|
+
messageType: payload.kind
|
|
478
|
+
});
|
|
479
|
+
if (payload.kind === 'text') {
|
|
480
|
+
await sendMessage(payload.body, payload.roomJID, payload.isReply, payload.isChecked, payload.mainMessage);
|
|
481
|
+
} else {
|
|
482
|
+
await sendMedia(payload.data, payload.type, payload.roomJID, payload.isReply, payload.isChecked, payload.mainMessage, failedId);
|
|
483
|
+
}
|
|
484
|
+
}, [failedMessages, dispatch, handleMessageRetry, sendMessage, sendMedia]);
|
|
251
485
|
|
|
252
486
|
// ChatRoom/ThreadWrapper consume this as the "edit branch" of send.
|
|
253
487
|
// It mirrors the edit path inside `sendMessage` so callers can wire it
|
|
@@ -302,6 +536,7 @@ export const useSendMessage = _configOverride => {
|
|
|
302
536
|
sendMessage,
|
|
303
537
|
sendMedia,
|
|
304
538
|
sendEditMessage,
|
|
539
|
+
retryMessage,
|
|
305
540
|
isLastMessageFromUserAndProcessing
|
|
306
541
|
};
|
|
307
542
|
};
|