@ethora/chat-component-rn 26.5.7 → 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 +133 -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/ChatRoom.js +64 -38
- package/lib/commonjs/components/MainComponents/ChatRoom.js.map +1 -1
- package/lib/commonjs/components/MainComponents/ChatWrapper.js +57 -13
- package/lib/commonjs/components/MainComponents/ChatWrapper.js.map +1 -1
- package/lib/commonjs/components/MainComponents/MediaMessage.js +4 -2
- 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 +165 -28
- 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 +84 -39
- 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 +140 -24
- 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 +77 -47
- 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 +47 -28
- package/lib/commonjs/components/styled/MediaFilePreview.js.map +1 -1
- package/lib/commonjs/components/styled/MessageImage.js +49 -9
- 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 +49 -27
- 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 -14
- 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 +244 -32
- 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/normalizeRoomJid.js +20 -0
- package/lib/commonjs/helpers/normalizeRoomJid.js.map +1 -0
- package/lib/commonjs/hooks/useChatRoomFocus.js +87 -0
- package/lib/commonjs/hooks/useChatRoomFocus.js.map +1 -0
- 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/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 +201 -10
- 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 +67 -0
- 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 +294 -35
- 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/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/ChatRoom.js +65 -39
- package/lib/module/components/MainComponents/ChatRoom.js.map +1 -1
- package/lib/module/components/MainComponents/ChatWrapper.js +57 -13
- package/lib/module/components/MainComponents/ChatWrapper.js.map +1 -1
- package/lib/module/components/MainComponents/MediaMessage.js +4 -2
- 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 +166 -29
- 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 +85 -40
- 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 +143 -25
- 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 +79 -49
- 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 +47 -28
- package/lib/module/components/styled/MediaFilePreview.js.map +1 -1
- package/lib/module/components/styled/MessageImage.js +51 -11
- 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 +50 -28
- 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 -15
- 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 +246 -34
- 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/normalizeRoomJid.js +15 -0
- package/lib/module/helpers/normalizeRoomJid.js.map +1 -0
- package/lib/module/hooks/useChatRoomFocus.js +82 -0
- package/lib/module/hooks/useChatRoomFocus.js.map +1 -0
- 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/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 +203 -12
- 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 +67 -1
- 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 +294 -35
- 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/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/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.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/normalizeRoomJid.d.ts +2 -0
- package/lib/typescript/helpers/normalizeRoomJid.d.ts.map +1 -0
- package/lib/typescript/hooks/useChatRoomFocus.d.ts +42 -0
- package/lib/typescript/hooks/useChatRoomFocus.d.ts.map +1 -0
- package/lib/typescript/hooks/useHeapSender.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.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 +33 -4
- 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/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 +4 -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/ChatRoom.tsx +81 -66
- package/src/components/MainComponents/ChatWrapper.tsx +99 -21
- package/src/components/MainComponents/MediaMessage.tsx +3 -0
- package/src/components/MainComponents/MessageContainer.tsx +4 -2
- package/src/components/MainComponents/MessageList.tsx +175 -28
- package/src/components/MainComponents/ReduxWrapper.tsx +19 -9
- package/src/components/MainComponents/SystemMessage.tsx +38 -26
- package/src/components/MessageBubble/Message.tsx +91 -62
- 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 +152 -25
- 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 +70 -58
- package/src/components/Modals/UserProfileModal/UserProfileModal.tsx +19 -15
- package/src/components/Modals/styledModalComponents.tsx +4 -9
- package/src/components/styled/MediaFilePreview.tsx +46 -26
- package/src/components/styled/MessageImage.tsx +58 -13
- package/src/components/styled/NewMessageLabel.tsx +8 -5
- package/src/components/styled/SendInput.tsx +64 -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 -11
- package/src/context/MessageNotificationContext.tsx +8 -8
- package/src/context/xmppProvider.tsx +247 -30
- 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/normalizeRoomJid.ts +6 -0
- package/src/hooks/useChatRoomFocus.ts +95 -0
- package/src/hooks/useHeapSender.tsx +2 -1
- package/src/hooks/useLogout.tsx +3 -3
- package/src/hooks/usePushNotifications.ts +21 -8
- package/src/hooks/useRoomState.tsx +4 -0
- package/src/hooks/useSendMessage.tsx +258 -13
- package/src/hooks/useUnreadMessagesCounter.ts +13 -16
- package/src/main.ts +1 -0
- package/src/networking/api-requests/auth.api.ts +55 -1
- 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 +317 -43
- package/src/roomStore/Middleware/unreadMidlleware.tsx +23 -5
- 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 +15 -0
- package/src/utils/installPromiseRejectionTracker.ts +91 -0
- package/src/utils/resendMessage.ts +2 -1
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Outbound-send queue — buffers message stanzas that can't reach the wire
|
|
3
|
+
* because there is no live XMPP stream at send time, and replays them once
|
|
4
|
+
* a stream comes (back) online.
|
|
5
|
+
*
|
|
6
|
+
* Lives at MODULE scope on purpose, NOT on the XmppClient instance: the
|
|
7
|
+
* exact windows we need to cover are the ones where the instance itself is
|
|
8
|
+
* gone or being swapped —
|
|
9
|
+
* 1. start race — a send fires before the provider's bootstrap has run
|
|
10
|
+
* `setClient(created)`, so `useSendMessage` sees `client === null` and
|
|
11
|
+
* used to throw "No XMPP client".
|
|
12
|
+
* 2. full-reinit race — after 3 failed reconnects the provider does
|
|
13
|
+
* `setClient(null)` then re-`initializeClient`s; sends in that gap
|
|
14
|
+
* also saw `client === null`.
|
|
15
|
+
* 3. reconnect window — the instance survives but its underlying stream
|
|
16
|
+
* is `connecting`/`offline`; a fire-and-forget stanza is silently lost
|
|
17
|
+
* and only the 30s watchdog notices.
|
|
18
|
+
*
|
|
19
|
+
* Each queued item carries a `send(client)` closure that captures the
|
|
20
|
+
* original args (text or media), so flush is type-agnostic.
|
|
21
|
+
*
|
|
22
|
+
* TTL is deliberately aligned with the 30s pending-send watchdog in
|
|
23
|
+
* useSendMessage (PENDING_WATCHDOG_MS): a queued item older than that has
|
|
24
|
+
* already been — or is about to be — flipped to "Failed → tap to retry" by
|
|
25
|
+
* the watchdog, so replaying it on a late reconnect would duplicate the
|
|
26
|
+
* bubble. We drop those on flush and let the watchdog own the failure.
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
export interface OutboundQueueClient {
|
|
30
|
+
sendMessage: (...args: any[]) => any;
|
|
31
|
+
sendMediaMessageStanza: (...args: any[]) => any;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export interface QueuedSend {
|
|
35
|
+
/** Optimistic/stanza id — used to dedupe re-enqueues (e.g. media retry). */
|
|
36
|
+
optimisticId: string;
|
|
37
|
+
roomJID: string;
|
|
38
|
+
/** Wall-clock ms when first queued; drives the TTL drop on flush. */
|
|
39
|
+
enqueuedAt: number;
|
|
40
|
+
/** Replays the original send against a live, online client. */
|
|
41
|
+
send: (client: OutboundQueueClient) => void;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// Kept in lockstep with PENDING_WATCHDOG_MS in useSendMessage.
|
|
45
|
+
export const OUTBOUND_QUEUE_TTL_MS = 30_000;
|
|
46
|
+
|
|
47
|
+
let queue: QueuedSend[] = [];
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Append (or, if the id is already queued, replace in place) a pending
|
|
51
|
+
* send. Order is preserved for FIFO flush.
|
|
52
|
+
*/
|
|
53
|
+
export function enqueueOutboundSend(item: QueuedSend): void {
|
|
54
|
+
const idx = queue.findIndex((q) => q.optimisticId === item.optimisticId);
|
|
55
|
+
if (idx >= 0) {
|
|
56
|
+
// Re-enqueue of the same id (e.g. a media retry): refresh in place so
|
|
57
|
+
// we don't grow a duplicate, and keep its original position.
|
|
58
|
+
queue[idx] = item;
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
queue.push(item);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Replay every queued send (in order) against a now-online client. Items
|
|
66
|
+
* older than the TTL are dropped — the send watchdog has already failed
|
|
67
|
+
* them, so re-sending would duplicate. The queue is emptied either way.
|
|
68
|
+
*/
|
|
69
|
+
export function flushOutboundSends(
|
|
70
|
+
client: OutboundQueueClient,
|
|
71
|
+
now: number
|
|
72
|
+
): void {
|
|
73
|
+
if (queue.length === 0) {return;}
|
|
74
|
+
const pending = queue;
|
|
75
|
+
queue = [];
|
|
76
|
+
for (const item of pending) {
|
|
77
|
+
if (now - item.enqueuedAt > OUTBOUND_QUEUE_TTL_MS) {
|
|
78
|
+
// Stale — the 30s watchdog owns the failure; don't duplicate.
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
try {
|
|
82
|
+
item.send(client);
|
|
83
|
+
} catch (err) {
|
|
84
|
+
// A single bad replay must not strand the rest of the queue.
|
|
85
|
+
console.warn('flushOutboundSends: replay failed', item.optimisticId, err);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/** Drop everything — called on permanent teardown (logout / close). */
|
|
91
|
+
export function clearOutboundSends(): void {
|
|
92
|
+
queue = [];
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/** Current depth — for tests and diagnostics. */
|
|
96
|
+
export function outboundQueueLength(): number {
|
|
97
|
+
return queue.length;
|
|
98
|
+
}
|
|
@@ -2,14 +2,18 @@ export function createTimeoutPromise(
|
|
|
2
2
|
ms: number | undefined,
|
|
3
3
|
unsubscribe?: () => void
|
|
4
4
|
) {
|
|
5
|
-
|
|
5
|
+
const promise = new Promise((_, reject) => {
|
|
6
6
|
setTimeout(() => {
|
|
7
7
|
try {
|
|
8
8
|
if (unsubscribe) {
|
|
9
9
|
unsubscribe();
|
|
10
10
|
}
|
|
11
11
|
} catch (e) {}
|
|
12
|
+
// result and stay silent.
|
|
12
13
|
reject();
|
|
13
14
|
}, ms);
|
|
14
15
|
});
|
|
16
|
+
|
|
17
|
+
promise.catch(() => {});
|
|
18
|
+
return promise;
|
|
15
19
|
}
|
|
@@ -8,13 +8,12 @@ interface RoomLike {
|
|
|
8
8
|
}
|
|
9
9
|
|
|
10
10
|
interface FlushOpts {
|
|
11
|
-
// When
|
|
11
|
+
// When visibleRoomJID is set, treat it as "user just viewed everything
|
|
12
12
|
// up to now" and stamp it with Date.now() — even if its in-memory
|
|
13
|
-
// lastViewedTimestamp
|
|
14
|
-
|
|
15
|
-
activeRoomJID?: string | null;
|
|
13
|
+
// lastViewedTimestamp has not been updated yet.
|
|
14
|
+
visibleRoomJID?: string | null;
|
|
16
15
|
// If true, only write entries for rooms where unreadMessages === 0
|
|
17
|
-
// (or the
|
|
16
|
+
// (or the visible room). Used at logout time: rooms with outstanding
|
|
18
17
|
// unread keep their old marker so the next login still surfaces them.
|
|
19
18
|
onlyIfNoUnread?: boolean;
|
|
20
19
|
}
|
|
@@ -35,7 +34,7 @@ export async function flushLastViewedToPrivateStore(
|
|
|
35
34
|
opts: FlushOpts = {}
|
|
36
35
|
): Promise<boolean> {
|
|
37
36
|
if (!client?.client) {return false;}
|
|
38
|
-
const {
|
|
37
|
+
const { visibleRoomJID, onlyIfNoUnread } = opts;
|
|
39
38
|
const roomList = Object.values(rooms || {});
|
|
40
39
|
if (roomList.length === 0) {return false;}
|
|
41
40
|
|
|
@@ -52,21 +51,20 @@ export async function flushLastViewedToPrivateStore(
|
|
|
52
51
|
|
|
53
52
|
for (const room of roomList) {
|
|
54
53
|
if (!room?.jid) {continue;}
|
|
55
|
-
const
|
|
54
|
+
const isVisible = !!visibleRoomJID && room.jid === visibleRoomJID;
|
|
56
55
|
const hasUnread = Number(room.unreadMessages || 0) > 0;
|
|
57
56
|
|
|
58
|
-
// For the
|
|
59
|
-
//
|
|
60
|
-
// history unread on next login.
|
|
57
|
+
// For the visible room, persist "now" — read state is driven by
|
|
58
|
+
// room visibility, not by a sentinel timestamp.
|
|
61
59
|
let ts: number | undefined;
|
|
62
|
-
if (
|
|
60
|
+
if (isVisible) {
|
|
63
61
|
ts = nowMs;
|
|
64
|
-
} else if (room.lastViewedTimestamp) {
|
|
62
|
+
} else if (room.lastViewedTimestamp && room.lastViewedTimestamp > 0) {
|
|
65
63
|
ts = room.lastViewedTimestamp;
|
|
66
64
|
}
|
|
67
65
|
|
|
68
66
|
if (!ts) {continue;}
|
|
69
|
-
if (onlyIfNoUnread && hasUnread && !
|
|
67
|
+
if (onlyIfNoUnread && hasUnread && !isVisible) {continue;}
|
|
70
68
|
|
|
71
69
|
const prev = storeObj[room.jid];
|
|
72
70
|
const prevNum = prev != null ? Number(prev) : 0;
|
|
@@ -17,7 +17,12 @@ export const getRoomsPaged = async (
|
|
|
17
17
|
client.off('stanza', stanzaHdlrPointer);
|
|
18
18
|
};
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
// Avoid `new Promise(async (resolve, reject) => {...})` — an async
|
|
21
|
+
// executor swallows the promise it returns, so any rejection inside
|
|
22
|
+
// it that happens BEFORE the catch handler attaches becomes
|
|
23
|
+
// "Uncaught (in promise)" red-screen. Use an explicit deferred + a
|
|
24
|
+
// regular async body that handles its own errors.
|
|
25
|
+
return new Promise<any>((resolve, reject) => {
|
|
21
26
|
stanzaHdlrPointer = (stanza) => {
|
|
22
27
|
if (stanza.is('iq') && stanza.attrs.id === 'getUserRooms') {
|
|
23
28
|
unsubscribe();
|
|
@@ -46,14 +51,33 @@ export const getRoomsPaged = async (
|
|
|
46
51
|
query
|
|
47
52
|
);
|
|
48
53
|
|
|
54
|
+
// Capture potential rejections from client.send() — it returns a
|
|
55
|
+
// Promise on most @xmpp/client builds; the previous bare call left
|
|
56
|
+
// the rejection unhandled when the socket was closing.
|
|
57
|
+
let sendPromise: Promise<unknown> | undefined;
|
|
49
58
|
try {
|
|
50
|
-
client.send(message)
|
|
59
|
+
sendPromise = client.send(message) as unknown as Promise<unknown>;
|
|
51
60
|
} catch (err) {
|
|
52
61
|
console.error('Error sending getRooms request:', err);
|
|
53
62
|
unsubscribe();
|
|
54
63
|
reject(err);
|
|
64
|
+
return;
|
|
55
65
|
}
|
|
66
|
+
Promise.resolve(sendPromise)
|
|
67
|
+
.catch((err) => {
|
|
68
|
+
console.error('client.send rejected in getRoomsPaged', err);
|
|
69
|
+
unsubscribe();
|
|
70
|
+
reject(err);
|
|
71
|
+
});
|
|
56
72
|
|
|
57
|
-
|
|
73
|
+
// The timeout catch was racy — if createTimeoutPromise rejected
|
|
74
|
+
// before `.catch(reject)` attached, the rejection escaped. Use a
|
|
75
|
+
// .then/.catch pair attached synchronously to be safe.
|
|
76
|
+
createTimeoutPromise(2000, unsubscribe).then(
|
|
77
|
+
() => {
|
|
78
|
+
/* timeout completed cleanly */
|
|
79
|
+
},
|
|
80
|
+
(err) => reject(err)
|
|
81
|
+
);
|
|
58
82
|
});
|
|
59
83
|
};
|
|
@@ -15,7 +15,12 @@ export const presenceInRoom = async (
|
|
|
15
15
|
const unsubscribe = () => client.off('stanza', stanzaHandler);
|
|
16
16
|
const stanzaId = nextPresenceId();
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
// Avoid `new Promise(async (resolve, reject) => …)` — the async
|
|
19
|
+
// executor's own thrown errors / unhandled rejections inside it can
|
|
20
|
+
// escape the constructed promise depending on the order of catch
|
|
21
|
+
// attachment vs rejection. Use a regular Promise + a separate async
|
|
22
|
+
// wrapper that funnels every failure path through reject().
|
|
23
|
+
return new Promise<Element>((resolve, reject) => {
|
|
19
24
|
let settled = false;
|
|
20
25
|
|
|
21
26
|
const finish = (cb: (value?: any) => void, value?: any) => {
|
|
@@ -50,13 +55,23 @@ export const presenceInRoom = async (
|
|
|
50
55
|
xml('x', { xmlns: 'http://jabber.org/protocol/muc' })
|
|
51
56
|
);
|
|
52
57
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
58
|
+
// Side-effects sequence: send the presence (handles its own
|
|
59
|
+
// failure → reject), then wait the timeout (also handles its own
|
|
60
|
+
// failure → reject). Each chain attaches its rejection handler
|
|
61
|
+
// synchronously, so no race with the outer Promise's catch.
|
|
62
|
+
(async () => {
|
|
63
|
+
try {
|
|
64
|
+
await client.send(presence);
|
|
65
|
+
} catch (err) {
|
|
66
|
+
unsubscribe();
|
|
67
|
+
reject(err);
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
try {
|
|
71
|
+
await createTimeoutPromise(2000, unsubscribe);
|
|
72
|
+
} catch (err) {
|
|
73
|
+
reject(err);
|
|
74
|
+
}
|
|
75
|
+
})();
|
|
61
76
|
});
|
|
62
77
|
};
|
|
@@ -51,6 +51,7 @@ export const sendTextMessage = (
|
|
|
51
51
|
: `send-text-message-${Date.now()}-${(_sendTextSeq = (_sendTextSeq + 1) >>> 0)}`;
|
|
52
52
|
|
|
53
53
|
try {
|
|
54
|
+
const dataXmlns = toServiceXmlns(devServer, client);
|
|
54
55
|
const message = xml(
|
|
55
56
|
'message',
|
|
56
57
|
{
|
|
@@ -59,7 +60,7 @@ export const sendTextMessage = (
|
|
|
59
60
|
id: id,
|
|
60
61
|
},
|
|
61
62
|
xml('data', {
|
|
62
|
-
xmlns:
|
|
63
|
+
xmlns: dataXmlns,
|
|
63
64
|
senderFirstName: firstName,
|
|
64
65
|
senderLastName: lastName,
|
|
65
66
|
fullName: `${firstName} ${lastName}`,
|