stream-chat-react-native-core 9.0.1 → 9.0.2-beta.1
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/README.md +1 -1
- package/lib/commonjs/components/Message/MessageItemView/utils/renderText.test.js +1 -1
- package/lib/commonjs/components/Message/MessageItemView/utils/renderText.test.js.map +1 -1
- package/lib/commonjs/components/MessageList/hooks/useMessageList.js.map +1 -1
- package/lib/commonjs/mock-builders/DB/mock.js.map +1 -1
- package/lib/commonjs/mock-builders/api/channelMocks.js +38 -31
- package/lib/commonjs/mock-builders/api/channelMocks.js.map +1 -1
- package/lib/commonjs/mock-builders/api/deleteMessage.js.map +1 -1
- package/lib/commonjs/mock-builders/api/deleteReaction.js.map +1 -1
- package/lib/commonjs/mock-builders/api/error.js.map +1 -1
- package/lib/commonjs/mock-builders/api/getOrCreateChannel.js.map +1 -1
- package/lib/commonjs/mock-builders/api/initiateClientWithChannels.js +1 -1
- package/lib/commonjs/mock-builders/api/initiateClientWithChannels.js.map +1 -1
- package/lib/commonjs/mock-builders/api/queryChannels.js.map +1 -1
- package/lib/commonjs/mock-builders/api/queryMembers.js +12 -11
- package/lib/commonjs/mock-builders/api/queryMembers.js.map +1 -1
- package/lib/commonjs/mock-builders/api/sendMessage.js.map +1 -1
- package/lib/commonjs/mock-builders/api/sendReaction.js.map +1 -1
- package/lib/commonjs/mock-builders/api/threadReplies.js.map +1 -1
- package/lib/commonjs/mock-builders/api/useMockedApis.js.map +1 -1
- package/lib/commonjs/mock-builders/api/utils.js.map +1 -1
- package/lib/commonjs/mock-builders/attachments.js.map +1 -1
- package/lib/commonjs/mock-builders/event/channelDeleted.js +3 -2
- package/lib/commonjs/mock-builders/event/channelDeleted.js.map +1 -1
- package/lib/commonjs/mock-builders/event/channelHidden.js +3 -2
- package/lib/commonjs/mock-builders/event/channelHidden.js.map +1 -1
- package/lib/commonjs/mock-builders/event/channelTruncated.js +3 -2
- package/lib/commonjs/mock-builders/event/channelTruncated.js.map +1 -1
- package/lib/commonjs/mock-builders/event/channelUpdated.js +3 -2
- package/lib/commonjs/mock-builders/event/channelUpdated.js.map +1 -1
- package/lib/commonjs/mock-builders/event/channelVisible.js +3 -2
- package/lib/commonjs/mock-builders/event/channelVisible.js.map +1 -1
- package/lib/commonjs/mock-builders/event/connectionChanged.js +3 -2
- package/lib/commonjs/mock-builders/event/connectionChanged.js.map +1 -1
- package/lib/commonjs/mock-builders/event/connectionRecovered.js +3 -2
- package/lib/commonjs/mock-builders/event/connectionRecovered.js.map +1 -1
- package/lib/commonjs/mock-builders/event/memberAdded.js +3 -2
- package/lib/commonjs/mock-builders/event/memberAdded.js.map +1 -1
- package/lib/commonjs/mock-builders/event/memberRemoved.js +3 -2
- package/lib/commonjs/mock-builders/event/memberRemoved.js.map +1 -1
- package/lib/commonjs/mock-builders/event/memberUpdated.js +3 -2
- package/lib/commonjs/mock-builders/event/memberUpdated.js.map +1 -1
- package/lib/commonjs/mock-builders/event/messageDeleted.js +3 -2
- package/lib/commonjs/mock-builders/event/messageDeleted.js.map +1 -1
- package/lib/commonjs/mock-builders/event/messageNew.js +3 -2
- package/lib/commonjs/mock-builders/event/messageNew.js.map +1 -1
- package/lib/commonjs/mock-builders/event/messageRead.js +3 -2
- package/lib/commonjs/mock-builders/event/messageRead.js.map +1 -1
- package/lib/commonjs/mock-builders/event/messageUpdated.js +3 -2
- package/lib/commonjs/mock-builders/event/messageUpdated.js.map +1 -1
- package/lib/commonjs/mock-builders/event/notificationAddedToChannel.js +3 -2
- package/lib/commonjs/mock-builders/event/notificationAddedToChannel.js.map +1 -1
- package/lib/commonjs/mock-builders/event/notificationChannelMutesUpdated.js +3 -2
- package/lib/commonjs/mock-builders/event/notificationChannelMutesUpdated.js.map +1 -1
- package/lib/commonjs/mock-builders/event/notificationMarkRead.js +3 -2
- package/lib/commonjs/mock-builders/event/notificationMarkRead.js.map +1 -1
- package/lib/commonjs/mock-builders/event/notificationMarkUnread.js +3 -2
- package/lib/commonjs/mock-builders/event/notificationMarkUnread.js.map +1 -1
- package/lib/commonjs/mock-builders/event/notificationMessageNew.js +3 -2
- package/lib/commonjs/mock-builders/event/notificationMessageNew.js.map +1 -1
- package/lib/commonjs/mock-builders/event/notificationMutesUpdated.js +3 -2
- package/lib/commonjs/mock-builders/event/notificationMutesUpdated.js.map +1 -1
- package/lib/commonjs/mock-builders/event/notificationRemovedFromChannel.js +3 -2
- package/lib/commonjs/mock-builders/event/notificationRemovedFromChannel.js.map +1 -1
- package/lib/commonjs/mock-builders/event/reactionDeleted.js +3 -2
- package/lib/commonjs/mock-builders/event/reactionDeleted.js.map +1 -1
- package/lib/commonjs/mock-builders/event/reactionNew.js +3 -2
- package/lib/commonjs/mock-builders/event/reactionNew.js.map +1 -1
- package/lib/commonjs/mock-builders/event/reactionUpdated.js +3 -2
- package/lib/commonjs/mock-builders/event/reactionUpdated.js.map +1 -1
- package/lib/commonjs/mock-builders/event/typing.js +3 -2
- package/lib/commonjs/mock-builders/event/typing.js.map +1 -1
- package/lib/commonjs/mock-builders/event/userPresence.js +3 -2
- package/lib/commonjs/mock-builders/event/userPresence.js.map +1 -1
- package/lib/commonjs/mock-builders/event/userUpdated.js +3 -2
- package/lib/commonjs/mock-builders/event/userUpdated.js.map +1 -1
- package/lib/commonjs/mock-builders/generator/attachment.js +0 -3
- package/lib/commonjs/mock-builders/generator/attachment.js.map +1 -1
- package/lib/commonjs/mock-builders/generator/channel.js +10 -12
- package/lib/commonjs/mock-builders/generator/channel.js.map +1 -1
- package/lib/commonjs/mock-builders/generator/member.js +3 -2
- package/lib/commonjs/mock-builders/generator/member.js.map +1 -1
- package/lib/commonjs/mock-builders/generator/message.js +12 -7
- package/lib/commonjs/mock-builders/generator/message.js.map +1 -1
- package/lib/commonjs/mock-builders/generator/reaction.js +3 -2
- package/lib/commonjs/mock-builders/generator/reaction.js.map +1 -1
- package/lib/commonjs/mock-builders/generator/user.js +4 -3
- package/lib/commonjs/mock-builders/generator/user.js.map +1 -1
- package/lib/commonjs/mock-builders/mock.js +15 -11
- package/lib/commonjs/mock-builders/mock.js.map +1 -1
- package/lib/commonjs/store/apis/addPendingTask.js.map +1 -1
- package/lib/commonjs/store/apis/deleteMessage.js.map +1 -1
- package/lib/commonjs/store/apis/upsertDraft.js.map +1 -1
- package/lib/commonjs/store/sqlite-utils/appendOrderByClause.js.map +1 -1
- package/lib/commonjs/store/sqlite-utils/appendWhereCluase.js.map +1 -1
- package/lib/commonjs/store/sqlite-utils/createCreateTableQuery.js.map +1 -1
- package/lib/commonjs/test-utils/BetterSqlite.js +11 -7
- package/lib/commonjs/test-utils/BetterSqlite.js.map +1 -1
- package/lib/commonjs/version.json +1 -1
- package/lib/module/components/Message/MessageItemView/utils/renderText.test.js +1 -1
- package/lib/module/components/Message/MessageItemView/utils/renderText.test.js.map +1 -1
- package/lib/module/components/MessageList/hooks/useMessageList.js.map +1 -1
- package/lib/module/mock-builders/DB/mock.js.map +1 -1
- package/lib/module/mock-builders/api/channelMocks.js +38 -31
- package/lib/module/mock-builders/api/channelMocks.js.map +1 -1
- package/lib/module/mock-builders/api/deleteMessage.js.map +1 -1
- package/lib/module/mock-builders/api/deleteReaction.js.map +1 -1
- package/lib/module/mock-builders/api/error.js.map +1 -1
- package/lib/module/mock-builders/api/getOrCreateChannel.js.map +1 -1
- package/lib/module/mock-builders/api/initiateClientWithChannels.js +1 -1
- package/lib/module/mock-builders/api/initiateClientWithChannels.js.map +1 -1
- package/lib/module/mock-builders/api/queryChannels.js.map +1 -1
- package/lib/module/mock-builders/api/queryMembers.js +12 -11
- package/lib/module/mock-builders/api/queryMembers.js.map +1 -1
- package/lib/module/mock-builders/api/sendMessage.js.map +1 -1
- package/lib/module/mock-builders/api/sendReaction.js.map +1 -1
- package/lib/module/mock-builders/api/threadReplies.js.map +1 -1
- package/lib/module/mock-builders/api/useMockedApis.js.map +1 -1
- package/lib/module/mock-builders/api/utils.js.map +1 -1
- package/lib/module/mock-builders/attachments.js.map +1 -1
- package/lib/module/mock-builders/event/channelDeleted.js +3 -2
- package/lib/module/mock-builders/event/channelDeleted.js.map +1 -1
- package/lib/module/mock-builders/event/channelHidden.js +3 -2
- package/lib/module/mock-builders/event/channelHidden.js.map +1 -1
- package/lib/module/mock-builders/event/channelTruncated.js +3 -2
- package/lib/module/mock-builders/event/channelTruncated.js.map +1 -1
- package/lib/module/mock-builders/event/channelUpdated.js +3 -2
- package/lib/module/mock-builders/event/channelUpdated.js.map +1 -1
- package/lib/module/mock-builders/event/channelVisible.js +3 -2
- package/lib/module/mock-builders/event/channelVisible.js.map +1 -1
- package/lib/module/mock-builders/event/connectionChanged.js +3 -2
- package/lib/module/mock-builders/event/connectionChanged.js.map +1 -1
- package/lib/module/mock-builders/event/connectionRecovered.js +3 -2
- package/lib/module/mock-builders/event/connectionRecovered.js.map +1 -1
- package/lib/module/mock-builders/event/memberAdded.js +3 -2
- package/lib/module/mock-builders/event/memberAdded.js.map +1 -1
- package/lib/module/mock-builders/event/memberRemoved.js +3 -2
- package/lib/module/mock-builders/event/memberRemoved.js.map +1 -1
- package/lib/module/mock-builders/event/memberUpdated.js +3 -2
- package/lib/module/mock-builders/event/memberUpdated.js.map +1 -1
- package/lib/module/mock-builders/event/messageDeleted.js +3 -2
- package/lib/module/mock-builders/event/messageDeleted.js.map +1 -1
- package/lib/module/mock-builders/event/messageNew.js +3 -2
- package/lib/module/mock-builders/event/messageNew.js.map +1 -1
- package/lib/module/mock-builders/event/messageRead.js +3 -2
- package/lib/module/mock-builders/event/messageRead.js.map +1 -1
- package/lib/module/mock-builders/event/messageUpdated.js +3 -2
- package/lib/module/mock-builders/event/messageUpdated.js.map +1 -1
- package/lib/module/mock-builders/event/notificationAddedToChannel.js +3 -2
- package/lib/module/mock-builders/event/notificationAddedToChannel.js.map +1 -1
- package/lib/module/mock-builders/event/notificationChannelMutesUpdated.js +3 -2
- package/lib/module/mock-builders/event/notificationChannelMutesUpdated.js.map +1 -1
- package/lib/module/mock-builders/event/notificationMarkRead.js +3 -2
- package/lib/module/mock-builders/event/notificationMarkRead.js.map +1 -1
- package/lib/module/mock-builders/event/notificationMarkUnread.js +3 -2
- package/lib/module/mock-builders/event/notificationMarkUnread.js.map +1 -1
- package/lib/module/mock-builders/event/notificationMessageNew.js +3 -2
- package/lib/module/mock-builders/event/notificationMessageNew.js.map +1 -1
- package/lib/module/mock-builders/event/notificationMutesUpdated.js +3 -2
- package/lib/module/mock-builders/event/notificationMutesUpdated.js.map +1 -1
- package/lib/module/mock-builders/event/notificationRemovedFromChannel.js +3 -2
- package/lib/module/mock-builders/event/notificationRemovedFromChannel.js.map +1 -1
- package/lib/module/mock-builders/event/reactionDeleted.js +3 -2
- package/lib/module/mock-builders/event/reactionDeleted.js.map +1 -1
- package/lib/module/mock-builders/event/reactionNew.js +3 -2
- package/lib/module/mock-builders/event/reactionNew.js.map +1 -1
- package/lib/module/mock-builders/event/reactionUpdated.js +3 -2
- package/lib/module/mock-builders/event/reactionUpdated.js.map +1 -1
- package/lib/module/mock-builders/event/typing.js +3 -2
- package/lib/module/mock-builders/event/typing.js.map +1 -1
- package/lib/module/mock-builders/event/userPresence.js +3 -2
- package/lib/module/mock-builders/event/userPresence.js.map +1 -1
- package/lib/module/mock-builders/event/userUpdated.js +3 -2
- package/lib/module/mock-builders/event/userUpdated.js.map +1 -1
- package/lib/module/mock-builders/generator/attachment.js +0 -3
- package/lib/module/mock-builders/generator/attachment.js.map +1 -1
- package/lib/module/mock-builders/generator/channel.js +10 -12
- package/lib/module/mock-builders/generator/channel.js.map +1 -1
- package/lib/module/mock-builders/generator/member.js +3 -2
- package/lib/module/mock-builders/generator/member.js.map +1 -1
- package/lib/module/mock-builders/generator/message.js +12 -7
- package/lib/module/mock-builders/generator/message.js.map +1 -1
- package/lib/module/mock-builders/generator/reaction.js +3 -2
- package/lib/module/mock-builders/generator/reaction.js.map +1 -1
- package/lib/module/mock-builders/generator/user.js +4 -3
- package/lib/module/mock-builders/generator/user.js.map +1 -1
- package/lib/module/mock-builders/mock.js +15 -11
- package/lib/module/mock-builders/mock.js.map +1 -1
- package/lib/module/store/apis/addPendingTask.js.map +1 -1
- package/lib/module/store/apis/deleteMessage.js.map +1 -1
- package/lib/module/store/apis/upsertDraft.js.map +1 -1
- package/lib/module/store/sqlite-utils/appendOrderByClause.js.map +1 -1
- package/lib/module/store/sqlite-utils/appendWhereCluase.js.map +1 -1
- package/lib/module/store/sqlite-utils/createCreateTableQuery.js.map +1 -1
- package/lib/module/test-utils/BetterSqlite.js +11 -7
- package/lib/module/test-utils/BetterSqlite.js.map +1 -1
- package/lib/module/version.json +1 -1
- package/lib/typescript/components/UIComponents/SwipableWrapper.d.ts +1 -1
- package/lib/typescript/components/UIComponents/SwipableWrapper.d.ts.map +1 -1
- package/lib/typescript/store/OfflineDB.d.ts +1 -1
- package/lib/typescript/store/OfflineDB.d.ts.map +1 -1
- package/lib/typescript/store/apis/addPendingTask.d.ts.map +1 -1
- package/lib/typescript/store/apis/deleteMessage.d.ts +2 -1
- package/lib/typescript/store/apis/deleteMessage.d.ts.map +1 -1
- package/lib/typescript/store/apis/upsertDraft.d.ts +1 -1
- package/lib/typescript/store/apis/upsertDraft.d.ts.map +1 -1
- package/lib/typescript/store/sqlite-utils/createCreateTableQuery.d.ts.map +1 -1
- package/lib/typescript/test-utils/BetterSqlite.d.ts +4 -3
- package/lib/typescript/test-utils/BetterSqlite.d.ts.map +1 -1
- package/package.json +5 -3
- package/src/__tests__/offline-support/{offline-feature.js → offline-feature.tsx} +282 -139
- package/src/__tests__/offline-support/{optimistic-update.js → optimistic-update.tsx} +154 -84
- package/src/components/Attachment/__tests__/{Attachment.test.js → Attachment.test.tsx} +12 -8
- package/src/components/Attachment/__tests__/{Gallery.test.js → Gallery.test.tsx} +10 -3
- package/src/components/Attachment/__tests__/{Giphy.test.js → Giphy.test.tsx} +48 -19
- package/src/components/Attachment/__tests__/{buildGallery.test.js → buildGallery.test.ts} +4 -2
- package/src/components/AutoCompleteInput/__tests__/{AutoCompleteInput.test.js → AutoCompleteInput.test.tsx} +21 -11
- package/src/components/Channel/__tests__/{Channel.test.js → Channel.test.tsx} +129 -89
- package/src/components/Channel/__tests__/{isAttachmentEqualHandler.test.js → isAttachmentEqualHandler.test.tsx} +25 -8
- package/src/components/Channel/__tests__/{ownCapabilities.test.js → ownCapabilities.test.tsx} +16 -12
- package/src/components/Channel/__tests__/{useMessageListPagination.test.js → useMessageListPagination.test.tsx} +105 -63
- package/src/components/ChannelList/__tests__/{ChannelList.test.js → ChannelList.test.tsx} +63 -29
- package/src/components/ChannelList/__tests__/{ChannelListView.test.js → ChannelListView.test.tsx} +30 -20
- package/src/components/ChannelList/hooks/__tests__/useChannelActionItems.test.tsx +6 -6
- package/src/components/ChannelList/hooks/__tests__/useChannelActionItemsById.test.tsx +2 -2
- package/src/components/ChannelList/hooks/listeners/__tests__/useChannelUpdated.test.tsx +17 -14
- package/src/components/ChannelPreview/__tests__/ChannelDetailsBottomSheet.test.tsx +14 -4
- package/src/components/ChannelPreview/__tests__/ChannelPreview.test.tsx +23 -12
- package/src/components/ChannelPreview/__tests__/{ChannelPreviewView.test.js → ChannelPreviewView.test.tsx} +9 -34
- package/src/components/ChannelPreview/__tests__/ChannelSwipableWrapper.test.tsx +4 -2
- package/src/components/ChannelPreview/hooks/__tests__/useChannelPreviewDisplayPresence.test.tsx +1 -1
- package/src/components/Chat/__tests__/{Chat.test.js → Chat.test.tsx} +37 -30
- package/src/components/ImageGallery/__tests__/ImageGallery.test.tsx +10 -14
- package/src/components/ImageGallery/__tests__/ImageGalleryFooter.test.tsx +3 -3
- package/src/components/ImageGallery/__tests__/ImageGalleryGrid.test.tsx +5 -4
- package/src/components/ImageGallery/__tests__/ImageGalleryHeader.test.tsx +7 -6
- package/src/components/ImageGallery/components/__tests__/ImageGalleryHeader.test.tsx +9 -13
- package/src/components/Message/MessageItemView/__tests__/{Message.test.js → Message.test.tsx} +20 -11
- package/src/components/Message/MessageItemView/__tests__/{MessageAuthor.test.js → MessageAuthor.test.tsx} +10 -12
- package/src/components/Message/MessageItemView/__tests__/{MessageContent.test.js → MessageContent.test.tsx} +22 -12
- package/src/components/Message/MessageItemView/__tests__/{MessageItemView.test.js → MessageItemView.test.tsx} +11 -4
- package/src/components/Message/MessageItemView/__tests__/{MessagePinnedHeader.test.js → MessagePinnedHeader.test.tsx} +5 -3
- package/src/components/Message/MessageItemView/__tests__/{MessageReplies.test.js → MessageReplies.test.tsx} +15 -36
- package/src/components/Message/MessageItemView/__tests__/{MessageStatus.test.js → MessageStatus.test.tsx} +20 -10
- package/src/components/Message/MessageItemView/__tests__/MessageTextContainer.test.tsx +8 -8
- package/src/components/Message/MessageItemView/__tests__/{ReactionListBottom.test.js → ReactionListBottom.test.tsx} +19 -8
- package/src/components/Message/MessageItemView/__tests__/{ReactionListTop.test.js → ReactionListTop.test.tsx} +8 -4
- package/src/components/Message/MessageItemView/utils/renderText.test.tsx +2 -4
- package/src/components/Message/MessageItemView/utils/renderText.tsx +1 -1
- package/src/components/Message/hooks/__tests__/useShouldUseOverlayStyles.test.tsx +2 -2
- package/src/components/MessageInput/__tests__/{AttachButton.test.js → AttachButton.test.tsx} +14 -4
- package/src/components/MessageInput/__tests__/{AttachmentUploadPreviewList.test.js → AttachmentUploadPreviewList.test.tsx} +27 -8
- package/src/components/MessageInput/__tests__/{AudioAttachmentUploadPreview.test.js → AudioAttachmentUploadPreview.test.tsx} +18 -5
- package/src/components/MessageInput/__tests__/AudioAttachmentUploadPreviewExpo.test.tsx +47 -15
- package/src/components/MessageInput/__tests__/AudioAttachmentUploadPreviewNative.test.tsx +57 -17
- package/src/components/MessageInput/__tests__/{InputButtons.test.js → InputButtons.test.tsx} +14 -4
- package/src/components/MessageInput/__tests__/{MessageComposer.test.js → MessageComposer.test.tsx} +28 -20
- package/src/components/MessageInput/__tests__/{SendButton.test.js → SendButton.test.tsx} +13 -4
- package/src/components/MessageInput/__tests__/{SendMessageDisallowedIndicator.test.js → SendMessageDisallowedIndicator.test.tsx} +47 -31
- package/src/components/MessageList/__tests__/{MessageList.test.js → MessageList.test.tsx} +31 -34
- package/src/components/MessageList/__tests__/{MessageSystem.test.js → MessageSystem.test.tsx} +13 -5
- package/src/components/MessageList/__tests__/{ScrollToBottomButton.test.js → ScrollToBottomButton.test.tsx} +8 -12
- package/src/components/MessageList/__tests__/{TypingIndicator.test.js → TypingIndicator.test.tsx} +6 -4
- package/src/components/MessageList/__tests__/useMessageList.test.tsx +2 -2
- package/src/components/MessageList/hooks/useMessageList.ts +1 -1
- package/src/components/MessageMenu/__tests__/MessageActionList.test.tsx +4 -1
- package/src/components/MessageMenu/__tests__/MessageActionListItem.test.tsx +1 -0
- package/src/components/MessageMenu/__tests__/MessageReactionPicker.test.tsx +6 -2
- package/src/components/MessageMenu/__tests__/MessageUserReactions.test.tsx +3 -3
- package/src/components/MessageMenu/__tests__/MessageUserReactionsAvatar.test.tsx +7 -3
- package/src/components/MessageMenu/__tests__/MessageUserReactionsItem.test.tsx +2 -1
- package/src/components/Thread/__tests__/{Thread.test.js → Thread.test.tsx} +41 -13
- package/src/components/Thread/__tests__/__snapshots__/{Thread.test.js.snap → Thread.test.tsx.snap} +0 -21
- package/src/components/UIComponents/SwipableWrapper.tsx +1 -1
- package/src/components/UIComponents/__tests__/SwipableWrapper.test.tsx +1 -1
- package/src/contexts/messageInputContext/__tests__/filePickers.test.tsx +31 -10
- package/src/contexts/messageInputContext/__tests__/sendMessage.test.tsx +24 -12
- package/src/contexts/overlayContext/__tests__/MessageOverlayHostLayer.test.tsx +2 -2
- package/src/hooks/__tests__/useTranslatedMessage.test.tsx +4 -4
- package/src/mock-builders/DB/mock.ts +1 -1
- package/src/mock-builders/api/channelMocks.tsx +39 -29
- package/src/mock-builders/api/deleteMessage.ts +21 -0
- package/src/mock-builders/api/deleteReaction.ts +23 -0
- package/src/mock-builders/api/{error.js → error.ts} +13 -5
- package/src/mock-builders/api/getOrCreateChannel.ts +22 -11
- package/src/mock-builders/api/{initiateClientWithChannels.js → initiateClientWithChannels.ts} +21 -3
- package/src/mock-builders/api/{queryChannels.js → queryChannels.ts} +2 -4
- package/src/mock-builders/api/{queryMembers.js → queryMembers.ts} +29 -27
- package/src/mock-builders/api/sendMessage.ts +25 -0
- package/src/mock-builders/api/sendReaction.ts +9 -5
- package/src/mock-builders/api/threadReplies.ts +18 -0
- package/src/mock-builders/api/{useMockedApis.js → useMockedApis.ts} +5 -4
- package/src/mock-builders/api/utils.ts +16 -0
- package/src/mock-builders/{attachments.js → attachments.ts} +24 -8
- package/src/mock-builders/event/channelDeleted.ts +12 -0
- package/src/mock-builders/event/channelHidden.ts +12 -0
- package/src/mock-builders/event/channelTruncated.ts +12 -0
- package/src/mock-builders/event/channelUpdated.ts +12 -0
- package/src/mock-builders/event/channelVisible.ts +12 -0
- package/src/mock-builders/event/connectionChanged.ts +11 -0
- package/src/mock-builders/event/connectionRecovered.ts +10 -0
- package/src/mock-builders/event/memberAdded.ts +19 -0
- package/src/mock-builders/event/memberRemoved.ts +18 -0
- package/src/mock-builders/event/memberUpdated.ts +18 -0
- package/src/mock-builders/event/messageDeleted.ts +23 -0
- package/src/mock-builders/event/messageNew.ts +26 -0
- package/src/mock-builders/event/messageRead.ts +23 -0
- package/src/mock-builders/event/messageUpdated.ts +23 -0
- package/src/mock-builders/event/notificationAddedToChannel.ts +12 -0
- package/src/mock-builders/event/notificationChannelMutesUpdated.ts +12 -0
- package/src/mock-builders/event/notificationMarkRead.ts +12 -0
- package/src/mock-builders/event/notificationMarkUnread.ts +22 -0
- package/src/mock-builders/event/notificationMessageNew.ts +12 -0
- package/src/mock-builders/event/notificationMutesUpdated.ts +16 -0
- package/src/mock-builders/event/notificationRemovedFromChannel.ts +12 -0
- package/src/mock-builders/event/reactionDeleted.ts +26 -0
- package/src/mock-builders/event/reactionNew.ts +26 -0
- package/src/mock-builders/event/reactionUpdated.ts +26 -0
- package/src/mock-builders/event/typing.ts +18 -0
- package/src/mock-builders/event/userPresence.ts +13 -0
- package/src/mock-builders/event/userUpdated.ts +13 -0
- package/src/mock-builders/generator/{attachment.js → attachment.ts} +17 -13
- package/src/mock-builders/generator/channel.ts +70 -39
- package/src/mock-builders/generator/member.ts +18 -0
- package/src/mock-builders/generator/message.ts +50 -0
- package/src/mock-builders/generator/reaction.ts +15 -0
- package/src/mock-builders/generator/{user.js → user.ts} +20 -16
- package/src/mock-builders/mock.ts +79 -0
- package/src/state-store/__tests__/audio-player.test.ts +3 -1
- package/src/state-store/__tests__/image-gallery-state-store.test.ts +31 -28
- package/src/state-store/__tests__/video-player-pool.test.ts +9 -9
- package/src/store/apis/__tests__/updatePendingTask.test.ts +17 -6
- package/src/store/apis/addPendingTask.ts +2 -1
- package/src/store/apis/deleteMessage.ts +2 -1
- package/src/store/apis/upsertDraft.ts +2 -2
- package/src/store/sqlite-utils/appendOrderByClause.ts +1 -1
- package/src/store/sqlite-utils/appendWhereCluase.ts +1 -1
- package/src/store/sqlite-utils/createCreateTableQuery.ts +7 -5
- package/src/test-utils/BetterSqlite.ts +38 -0
- package/src/utils/__tests__/{Streami18n.test.js → Streami18n.test.ts} +66 -31
- package/src/utils/__tests__/getResizedImageUrl.test.ts +10 -8
- package/src/utils/__tests__/{utils.test.js → utils.test.ts} +1 -1
- package/src/version.json +1 -1
- package/src/mock-builders/api/deleteMessage.js +0 -18
- package/src/mock-builders/api/deleteReaction.js +0 -19
- package/src/mock-builders/api/sendMessage.js +0 -18
- package/src/mock-builders/api/threadReplies.js +0 -16
- package/src/mock-builders/api/utils.js +0 -7
- package/src/mock-builders/event/channelDeleted.js +0 -7
- package/src/mock-builders/event/channelHidden.js +0 -7
- package/src/mock-builders/event/channelTruncated.js +0 -7
- package/src/mock-builders/event/channelUpdated.js +0 -7
- package/src/mock-builders/event/channelVisible.js +0 -7
- package/src/mock-builders/event/connectionChanged.js +0 -6
- package/src/mock-builders/event/connectionRecovered.js +0 -5
- package/src/mock-builders/event/memberAdded.js +0 -10
- package/src/mock-builders/event/memberRemoved.js +0 -9
- package/src/mock-builders/event/memberUpdated.js +0 -9
- package/src/mock-builders/event/messageDeleted.js +0 -8
- package/src/mock-builders/event/messageNew.js +0 -11
- package/src/mock-builders/event/messageRead.js +0 -15
- package/src/mock-builders/event/messageUpdated.js +0 -8
- package/src/mock-builders/event/notificationAddedToChannel.js +0 -7
- package/src/mock-builders/event/notificationChannelMutesUpdated.js +0 -7
- package/src/mock-builders/event/notificationMarkRead.js +0 -7
- package/src/mock-builders/event/notificationMarkUnread.js +0 -12
- package/src/mock-builders/event/notificationMessageNew.js +0 -7
- package/src/mock-builders/event/notificationMutesUpdated.js +0 -11
- package/src/mock-builders/event/notificationRemovedFromChannel.js +0 -7
- package/src/mock-builders/event/reactionDeleted.js +0 -9
- package/src/mock-builders/event/reactionNew.js +0 -9
- package/src/mock-builders/event/reactionUpdated.js +0 -9
- package/src/mock-builders/event/typing.js +0 -9
- package/src/mock-builders/event/userPresence.js +0 -8
- package/src/mock-builders/event/userUpdated.js +0 -8
- package/src/mock-builders/generator/member.js +0 -13
- package/src/mock-builders/generator/message.js +0 -32
- package/src/mock-builders/generator/reaction.js +0 -12
- package/src/mock-builders/mock.js +0 -57
- package/src/test-utils/BetterSqlite.js +0 -36
- /package/src/components/Message/MessageItemView/__tests__/__snapshots__/{MessageAuthor.test.js.snap → MessageAuthor.test.tsx.snap} +0 -0
- /package/src/components/Message/MessageItemView/__tests__/__snapshots__/{MessagePinnedHeader.test.js.snap → MessagePinnedHeader.test.tsx.snap} +0 -0
- /package/src/components/MessageInput/__tests__/__snapshots__/{AttachButton.test.js.snap → AttachButton.test.tsx.snap} +0 -0
- /package/src/components/MessageInput/__tests__/__snapshots__/{SendButton.test.js.snap → SendButton.test.tsx.snap} +0 -0
- /package/src/components/MessageList/__tests__/__snapshots__/{MessageSystem.test.js.snap → MessageSystem.test.tsx.snap} +0 -0
- /package/src/components/MessageList/__tests__/__snapshots__/{ScrollToBottomButton.test.js.snap → ScrollToBottomButton.test.tsx.snap} +0 -0
- /package/src/components/MessageList/__tests__/__snapshots__/{TypingIndicator.test.js.snap → TypingIndicator.test.tsx.snap} +0 -0
|
@@ -10,6 +10,7 @@ import {
|
|
|
10
10
|
waitFor,
|
|
11
11
|
within,
|
|
12
12
|
} from '@testing-library/react-native';
|
|
13
|
+
import type { Channel as ChannelType, StreamChat } from 'stream-chat';
|
|
13
14
|
|
|
14
15
|
import { useChannelsContext } from '../../../contexts/channelsContext/ChannelsContext';
|
|
15
16
|
import {
|
|
@@ -37,21 +38,22 @@ import { getTestClientWithUser } from '../../../mock-builders/mock';
|
|
|
37
38
|
import { Chat } from '../../Chat/Chat';
|
|
38
39
|
import { ChannelList } from '../ChannelList';
|
|
39
40
|
|
|
40
|
-
const mockChannelSwipableWrapper = jest.fn(({ children }) => (
|
|
41
|
+
const mockChannelSwipableWrapper = jest.fn(({ children }: { children: React.ReactNode }) => (
|
|
41
42
|
<View testID='swipe-wrapper'>{children}</View>
|
|
42
43
|
));
|
|
43
44
|
|
|
44
45
|
jest.mock('../../ChannelPreview/ChannelSwipableWrapper', () => ({
|
|
45
|
-
ChannelSwipableWrapper: (...args
|
|
46
|
+
ChannelSwipableWrapper: (...args: Parameters<typeof mockChannelSwipableWrapper>) =>
|
|
47
|
+
mockChannelSwipableWrapper(...args),
|
|
46
48
|
}));
|
|
47
49
|
|
|
48
50
|
/**
|
|
49
51
|
* Custom ChannelPreview component used via WithComponents to verify channel rendering.
|
|
50
52
|
* Receives { channel, muted, unread, lastMessage } from ChannelPreview.
|
|
51
53
|
*/
|
|
52
|
-
const ChannelPreviewComponent = ({ channel }) => (
|
|
54
|
+
const ChannelPreviewComponent = ({ channel }: { channel: ChannelType }) => (
|
|
53
55
|
<View accessibilityLabel='list-item' testID={channel.id}>
|
|
54
|
-
<Text>{channel.data?.name}</Text>
|
|
56
|
+
<Text>{(channel.data as { name?: string } | undefined)?.name}</Text>
|
|
55
57
|
<Text>{channel.state.messages[0]?.text}</Text>
|
|
56
58
|
</View>
|
|
57
59
|
);
|
|
@@ -73,9 +75,11 @@ const RefreshingProbe = () => {
|
|
|
73
75
|
return <Text testID='refreshing'>{`${refreshing}`}</Text>;
|
|
74
76
|
};
|
|
75
77
|
|
|
76
|
-
const ChannelPreviewContent = ({ unread }) =>
|
|
78
|
+
const ChannelPreviewContent = ({ unread }: { unread?: number }) => (
|
|
79
|
+
<Text testID='preview-unread'>{`${unread}`}</Text>
|
|
80
|
+
);
|
|
77
81
|
|
|
78
|
-
let expectedChannelDetailsBottomSheetOverride;
|
|
82
|
+
let expectedChannelDetailsBottomSheetOverride: unknown;
|
|
79
83
|
const ChannelDetailsBottomSheetProbe = () => {
|
|
80
84
|
const { ChannelDetailsBottomSheet } = useComponentsContext();
|
|
81
85
|
return (
|
|
@@ -85,9 +89,13 @@ const ChannelDetailsBottomSheetProbe = () => {
|
|
|
85
89
|
);
|
|
86
90
|
};
|
|
87
91
|
|
|
88
|
-
class DeferredPromise {
|
|
92
|
+
class DeferredPromise<T = unknown> {
|
|
93
|
+
promise: Promise<T>;
|
|
94
|
+
resolve!: (value: T | PromiseLike<T>) => void;
|
|
95
|
+
reject!: (reason?: unknown) => void;
|
|
96
|
+
|
|
89
97
|
constructor() {
|
|
90
|
-
this.promise = new Promise((resolve, reject) => {
|
|
98
|
+
this.promise = new Promise<T>((resolve, reject) => {
|
|
91
99
|
this.resolve = resolve;
|
|
92
100
|
this.reject = reject;
|
|
93
101
|
});
|
|
@@ -95,11 +103,11 @@ class DeferredPromise {
|
|
|
95
103
|
}
|
|
96
104
|
|
|
97
105
|
describe('ChannelList', () => {
|
|
98
|
-
let chatClient;
|
|
99
|
-
let testChannel1
|
|
100
|
-
let testChannel2
|
|
101
|
-
let testChannel3
|
|
102
|
-
const props = {
|
|
106
|
+
let chatClient: StreamChat;
|
|
107
|
+
let testChannel1: ReturnType<typeof generateChannelResponse>;
|
|
108
|
+
let testChannel2: ReturnType<typeof generateChannelResponse>;
|
|
109
|
+
let testChannel3: ReturnType<typeof generateChannelResponse>;
|
|
110
|
+
const props: Partial<React.ComponentProps<typeof ChannelList>> = {
|
|
103
111
|
filters: {},
|
|
104
112
|
};
|
|
105
113
|
|
|
@@ -163,7 +171,10 @@ describe('ChannelList', () => {
|
|
|
163
171
|
screen.rerender(
|
|
164
172
|
<Chat client={chatClient}>
|
|
165
173
|
<WithComponents overrides={{ ChannelPreview: ChannelPreviewComponent }}>
|
|
166
|
-
<ChannelList
|
|
174
|
+
<ChannelList
|
|
175
|
+
{...props}
|
|
176
|
+
filters={{ dummyFilter: true } as React.ComponentProps<typeof ChannelList>['filters']}
|
|
177
|
+
/>
|
|
167
178
|
</WithComponents>
|
|
168
179
|
</Chat>,
|
|
169
180
|
);
|
|
@@ -178,12 +189,17 @@ describe('ChannelList', () => {
|
|
|
178
189
|
const deferredCallForFreshFilter = new DeferredPromise();
|
|
179
190
|
const staleFilter = { 'initial-filter': { a: { $gt: 'c' } } };
|
|
180
191
|
const freshFilter = { 'new-filter': { a: { $gt: 'c' } } };
|
|
181
|
-
const createMockChannel = (id) => {
|
|
192
|
+
const createMockChannel = (id: string) => {
|
|
182
193
|
const channel = generateChannel({
|
|
183
194
|
data: { name: id },
|
|
184
195
|
id,
|
|
185
196
|
state: { latestMessages: [], members: {}, messages: [], setIsUpToDate: jest.fn() },
|
|
186
|
-
})
|
|
197
|
+
} as unknown as Parameters<typeof generateChannel>[0]) as unknown as {
|
|
198
|
+
countUnread: () => number;
|
|
199
|
+
messageComposer: { registerDraftEventSubscriptions: () => () => void };
|
|
200
|
+
muteStatus: () => { muted: boolean };
|
|
201
|
+
on: jest.Mock;
|
|
202
|
+
};
|
|
187
203
|
channel.countUnread = () => 0;
|
|
188
204
|
channel.muteStatus = () => ({ muted: false });
|
|
189
205
|
channel.on = jest.fn(() => ({ unsubscribe: jest.fn() }));
|
|
@@ -195,17 +211,20 @@ describe('ChannelList', () => {
|
|
|
195
211
|
const staleChannel = [createMockChannel('stale-channel')];
|
|
196
212
|
const freshChannel = [createMockChannel('new-channel')];
|
|
197
213
|
const spy = jest.spyOn(chatClient, 'queryChannels');
|
|
198
|
-
spy.mockImplementation((filters = {}) => {
|
|
214
|
+
spy.mockImplementation(((filters: Parameters<typeof chatClient.queryChannels>[0] = {}) => {
|
|
199
215
|
if (Object.prototype.hasOwnProperty.call(filters, 'new-filter')) {
|
|
200
216
|
return deferredCallForFreshFilter.promise;
|
|
201
217
|
}
|
|
202
218
|
return deferredCallForStaleFilter.promise;
|
|
203
|
-
});
|
|
219
|
+
}) as typeof chatClient.queryChannels);
|
|
204
220
|
|
|
205
221
|
const { rerender, queryByTestId } = render(
|
|
206
222
|
<Chat client={chatClient}>
|
|
207
223
|
<WithComponents overrides={{ ChannelPreview: ChannelPreviewComponent }}>
|
|
208
|
-
<ChannelList
|
|
224
|
+
<ChannelList
|
|
225
|
+
{...props}
|
|
226
|
+
filters={staleFilter as React.ComponentProps<typeof ChannelList>['filters']}
|
|
227
|
+
/>
|
|
209
228
|
</WithComponents>
|
|
210
229
|
</Chat>,
|
|
211
230
|
);
|
|
@@ -225,7 +244,10 @@ describe('ChannelList', () => {
|
|
|
225
244
|
rerender(
|
|
226
245
|
<Chat client={chatClient}>
|
|
227
246
|
<WithComponents overrides={{ ChannelPreview: ChannelPreviewComponent }}>
|
|
228
|
-
<ChannelList
|
|
247
|
+
<ChannelList
|
|
248
|
+
{...props}
|
|
249
|
+
filters={freshFilter as React.ComponentProps<typeof ChannelList>['filters']}
|
|
250
|
+
/>
|
|
229
251
|
</WithComponents>
|
|
230
252
|
</Chat>,
|
|
231
253
|
);
|
|
@@ -406,13 +428,13 @@ describe('ChannelList', () => {
|
|
|
406
428
|
const newMessage = sendNewMessageOnChannel3();
|
|
407
429
|
|
|
408
430
|
await waitFor(() => {
|
|
409
|
-
expect(screen.getByText(newMessage.text)).toBeTruthy();
|
|
431
|
+
expect(screen.getByText(newMessage.text as string)).toBeTruthy();
|
|
410
432
|
});
|
|
411
433
|
|
|
412
434
|
const items = screen.getAllByLabelText('list-item');
|
|
413
435
|
|
|
414
436
|
await waitFor(() => {
|
|
415
|
-
expect(within(items[0]).getByText(newMessage.text)).toBeTruthy();
|
|
437
|
+
expect(within(items[0]).getByText(newMessage.text as string)).toBeTruthy();
|
|
416
438
|
});
|
|
417
439
|
});
|
|
418
440
|
|
|
@@ -436,13 +458,13 @@ describe('ChannelList', () => {
|
|
|
436
458
|
const newMessage = sendNewMessageOnChannel3();
|
|
437
459
|
|
|
438
460
|
await waitFor(() => {
|
|
439
|
-
expect(screen.getByText(newMessage.text)).toBeTruthy();
|
|
461
|
+
expect(screen.getByText(newMessage.text as string)).toBeTruthy();
|
|
440
462
|
});
|
|
441
463
|
|
|
442
464
|
const items = screen.getAllByLabelText('list-item');
|
|
443
465
|
|
|
444
466
|
await waitFor(() => {
|
|
445
|
-
expect(within(items[0]).getByText(newMessage.text)).toBeTruthy();
|
|
467
|
+
expect(within(items[0]).getByText(newMessage.text as string)).toBeTruthy();
|
|
446
468
|
});
|
|
447
469
|
});
|
|
448
470
|
|
|
@@ -462,13 +484,13 @@ describe('ChannelList', () => {
|
|
|
462
484
|
const newMessage = sendNewMessageOnChannel3();
|
|
463
485
|
|
|
464
486
|
await waitFor(() => {
|
|
465
|
-
expect(screen.getByText(newMessage.text)).toBeTruthy();
|
|
487
|
+
expect(screen.getByText(newMessage.text as string)).toBeTruthy();
|
|
466
488
|
});
|
|
467
489
|
|
|
468
490
|
const items = screen.getAllByLabelText('list-item');
|
|
469
491
|
|
|
470
492
|
await waitFor(() => {
|
|
471
|
-
expect(within(items[2]).getByText(newMessage.text)).toBeTruthy();
|
|
493
|
+
expect(within(items[2]).getByText(newMessage.text as string)).toBeTruthy();
|
|
472
494
|
});
|
|
473
495
|
});
|
|
474
496
|
it('should call the `onNewMessage` function prop, if provided', async () => {
|
|
@@ -485,7 +507,12 @@ describe('ChannelList', () => {
|
|
|
485
507
|
expect(screen.getByTestId('channel-list-view')).toBeTruthy();
|
|
486
508
|
});
|
|
487
509
|
|
|
488
|
-
act(() =>
|
|
510
|
+
act(() =>
|
|
511
|
+
dispatchMessageNewEvent(
|
|
512
|
+
chatClient,
|
|
513
|
+
testChannel2.channel as unknown as Parameters<typeof dispatchMessageNewEvent>[1],
|
|
514
|
+
),
|
|
515
|
+
);
|
|
489
516
|
|
|
490
517
|
await waitFor(() => {
|
|
491
518
|
expect(onNewMessage).toHaveBeenCalledTimes(1);
|
|
@@ -538,7 +565,12 @@ describe('ChannelList', () => {
|
|
|
538
565
|
expect(screen.getByTestId('channel-list-view')).toBeTruthy();
|
|
539
566
|
});
|
|
540
567
|
|
|
541
|
-
act(() =>
|
|
568
|
+
act(() =>
|
|
569
|
+
dispatchMessageNewEvent(
|
|
570
|
+
chatClient,
|
|
571
|
+
testChannel2.channel as unknown as Parameters<typeof dispatchMessageNewEvent>[1],
|
|
572
|
+
),
|
|
573
|
+
);
|
|
542
574
|
|
|
543
575
|
await waitFor(() => {
|
|
544
576
|
expect(onNewMessage).toHaveBeenCalledTimes(1);
|
|
@@ -884,7 +916,9 @@ describe('ChannelList', () => {
|
|
|
884
916
|
expect(screen.getByTestId('refreshing').children[0]).toBe('false');
|
|
885
917
|
});
|
|
886
918
|
|
|
887
|
-
chatClient.queryChannels = jest.fn(
|
|
919
|
+
chatClient.queryChannels = jest.fn(
|
|
920
|
+
() => deferredPromise.promise,
|
|
921
|
+
) as typeof chatClient.queryChannels;
|
|
888
922
|
|
|
889
923
|
act(() => dispatchConnectionChangedEvent(chatClient, false));
|
|
890
924
|
act(() => dispatchConnectionChangedEvent(chatClient, true));
|
package/src/components/ChannelList/__tests__/{ChannelListView.test.js → ChannelListView.test.tsx}
RENAMED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
|
|
3
3
|
import { cleanup, render, waitFor } from '@testing-library/react-native';
|
|
4
|
+
import type { StreamChat } from 'stream-chat';
|
|
4
5
|
|
|
6
|
+
import type { ChannelsContextValue } from '../../../contexts/channelsContext/ChannelsContext';
|
|
5
7
|
import { ChannelsProvider } from '../../../contexts/channelsContext/ChannelsContext';
|
|
6
8
|
import { ChatContext, ChatProvider } from '../../../contexts/chatContext/ChatContext';
|
|
7
9
|
import { getOrCreateChannelApi } from '../../../mock-builders/api/getOrCreateChannel';
|
|
@@ -13,7 +15,7 @@ import { Chat } from '../../Chat/Chat';
|
|
|
13
15
|
import { ChannelList } from '../ChannelList';
|
|
14
16
|
import { ChannelListView } from '../ChannelListView';
|
|
15
17
|
|
|
16
|
-
let chatClient;
|
|
18
|
+
let chatClient: StreamChat;
|
|
17
19
|
|
|
18
20
|
/**
|
|
19
21
|
* Renders the full ChannelList (which now always uses ChannelListView internally).
|
|
@@ -42,30 +44,38 @@ const noop = () => {};
|
|
|
42
44
|
* Renders ChannelListView directly with a mock ChannelsContext for testing
|
|
43
45
|
* error and loading states.
|
|
44
46
|
*/
|
|
45
|
-
const ComponentWithContextOverrides = ({
|
|
47
|
+
const ComponentWithContextOverrides = ({
|
|
48
|
+
error,
|
|
49
|
+
loadingChannels,
|
|
50
|
+
}: {
|
|
51
|
+
error: boolean;
|
|
52
|
+
loadingChannels: boolean;
|
|
53
|
+
}) => (
|
|
46
54
|
<Chat client={chatClient}>
|
|
47
55
|
<ChatContext.Consumer>
|
|
48
56
|
{(context) => (
|
|
49
57
|
<ChatProvider value={{ ...context, isOnline: true }}>
|
|
50
58
|
<ChannelsProvider
|
|
51
|
-
value={
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
59
|
+
value={
|
|
60
|
+
{
|
|
61
|
+
additionalFlatListProps: {},
|
|
62
|
+
channelListInitialized: !loadingChannels && !error,
|
|
63
|
+
channels: error ? null : [],
|
|
64
|
+
error: error ? new Error('test error') : undefined,
|
|
65
|
+
forceUpdate: 0,
|
|
66
|
+
hasNextPage: false,
|
|
67
|
+
loadingChannels,
|
|
68
|
+
loadingNextPage: false,
|
|
69
|
+
loadMoreThreshold: 0.1,
|
|
70
|
+
loadNextPage: noop,
|
|
71
|
+
maxUnreadCount: 255,
|
|
72
|
+
numberOfSkeletons: 8,
|
|
73
|
+
refreshing: false,
|
|
74
|
+
refreshList: noop,
|
|
75
|
+
reloadList: noop,
|
|
76
|
+
setFlatListRef: noop,
|
|
77
|
+
} as unknown as ChannelsContextValue
|
|
78
|
+
}
|
|
69
79
|
>
|
|
70
80
|
<ChannelListView />
|
|
71
81
|
</ChannelsProvider>
|
|
@@ -149,7 +149,7 @@ describe('getChannelActionItems', () => {
|
|
|
149
149
|
isDirectChat: false,
|
|
150
150
|
isPinned: false,
|
|
151
151
|
muteActive: false,
|
|
152
|
-
t: (value) => value,
|
|
152
|
+
t: ((value: string) => value) as TranslationContextValue['t'],
|
|
153
153
|
});
|
|
154
154
|
const actionItems = getChannelActionItems({
|
|
155
155
|
context: {
|
|
@@ -159,7 +159,7 @@ describe('getChannelActionItems', () => {
|
|
|
159
159
|
isDirectChat: false,
|
|
160
160
|
isPinned: false,
|
|
161
161
|
muteActive: false,
|
|
162
|
-
t: (value) => value,
|
|
162
|
+
t: ((value: string) => value) as TranslationContextValue['t'],
|
|
163
163
|
},
|
|
164
164
|
defaultItems,
|
|
165
165
|
});
|
|
@@ -186,7 +186,7 @@ describe('getChannelActionItems', () => {
|
|
|
186
186
|
isDirectChat: true,
|
|
187
187
|
isPinned: false,
|
|
188
188
|
muteActive: true,
|
|
189
|
-
t: (value) => value,
|
|
189
|
+
t: ((value: string) => value) as TranslationContextValue['t'],
|
|
190
190
|
});
|
|
191
191
|
|
|
192
192
|
expect(actionItems.map((item) => item.id)).toEqual(['mute', 'block', 'leave', 'deleteChannel']);
|
|
@@ -213,7 +213,7 @@ describe('getChannelActionItems', () => {
|
|
|
213
213
|
isDirectChat: false,
|
|
214
214
|
isPinned: false,
|
|
215
215
|
muteActive: false,
|
|
216
|
-
t: (value) => value,
|
|
216
|
+
t: ((value: string) => value) as TranslationContextValue['t'],
|
|
217
217
|
});
|
|
218
218
|
|
|
219
219
|
expect(actionItems.map((item) => item.id)).toEqual(['mute', 'leave']);
|
|
@@ -228,7 +228,7 @@ describe('getChannelActionItems', () => {
|
|
|
228
228
|
isDirectChat: false,
|
|
229
229
|
isPinned: false,
|
|
230
230
|
muteActive: true,
|
|
231
|
-
t: (value) => value,
|
|
231
|
+
t: ((value: string) => value) as TranslationContextValue['t'],
|
|
232
232
|
});
|
|
233
233
|
|
|
234
234
|
expect(actionItems[0].action).toBe(channelActions.unmuteChannel);
|
|
@@ -251,7 +251,7 @@ describe('getChannelActionItems', () => {
|
|
|
251
251
|
isDirectChat: false,
|
|
252
252
|
isPinned: false,
|
|
253
253
|
muteActive: false,
|
|
254
|
-
t: (value) => value,
|
|
254
|
+
t: ((value: string) => value) as TranslationContextValue['t'],
|
|
255
255
|
});
|
|
256
256
|
|
|
257
257
|
const deleteItem = actionItems.find((item) => item.id === 'deleteChannel');
|
|
@@ -21,7 +21,7 @@ describe('useChannelActionItemsById', () => {
|
|
|
21
21
|
const channelActionItems: useChannelActionItemsModule.ChannelActionItem[] = [
|
|
22
22
|
{
|
|
23
23
|
action: jest.fn(),
|
|
24
|
-
Icon: <></>,
|
|
24
|
+
Icon: () => <></>,
|
|
25
25
|
id: 'pin',
|
|
26
26
|
label: '',
|
|
27
27
|
placement: 'both',
|
|
@@ -29,7 +29,7 @@ describe('useChannelActionItemsById', () => {
|
|
|
29
29
|
},
|
|
30
30
|
{
|
|
31
31
|
action: jest.fn(),
|
|
32
|
-
Icon: <></>,
|
|
32
|
+
Icon: () => <></>,
|
|
33
33
|
id: 'deleteChannel',
|
|
34
34
|
label: '',
|
|
35
35
|
placement: 'both',
|
|
@@ -4,6 +4,7 @@ import { Image, Text } from 'react-native';
|
|
|
4
4
|
import { act, render, waitFor } from '@testing-library/react-native';
|
|
5
5
|
import type { Channel, ChannelResponse, Event, StreamChat } from 'stream-chat';
|
|
6
6
|
|
|
7
|
+
import type { ChatContextValue } from '../../../../../contexts/chatContext/ChatContext';
|
|
7
8
|
import { ChatContext, useChannelUpdated } from '../../../../../index';
|
|
8
9
|
|
|
9
10
|
describe('useChannelUpdated', () => {
|
|
@@ -33,16 +34,16 @@ describe('useChannelUpdated', () => {
|
|
|
33
34
|
} as unknown as StreamChat;
|
|
34
35
|
|
|
35
36
|
const TestComponent = () => {
|
|
36
|
-
const [channels, setChannels] = useState<Channel[]
|
|
37
|
+
const [channels, setChannels] = useState<Channel[]>([mockChannel]);
|
|
37
38
|
|
|
38
39
|
useChannelUpdated({ setChannels });
|
|
39
40
|
|
|
40
41
|
if (
|
|
41
42
|
channels &&
|
|
42
43
|
channels[0].data?.own_capabilities &&
|
|
43
|
-
Object.keys(
|
|
44
|
-
|
|
45
|
-
)
|
|
44
|
+
Object.keys(
|
|
45
|
+
channels[0].data?.own_capabilities as unknown as { [key: string]: boolean },
|
|
46
|
+
).includes('send_messages')
|
|
46
47
|
) {
|
|
47
48
|
return <Text>Send messages enabled</Text>;
|
|
48
49
|
}
|
|
@@ -53,16 +54,18 @@ describe('useChannelUpdated', () => {
|
|
|
53
54
|
const { getByText } = await waitFor(() =>
|
|
54
55
|
render(
|
|
55
56
|
<ChatContext.Provider
|
|
56
|
-
value={
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
57
|
+
value={
|
|
58
|
+
{
|
|
59
|
+
appSettings: null,
|
|
60
|
+
client: mockClient,
|
|
61
|
+
connectionRecovering: false,
|
|
62
|
+
enableOfflineSupport: false,
|
|
63
|
+
ImageComponent: Image,
|
|
64
|
+
isOnline: true,
|
|
65
|
+
mutedUsers: [],
|
|
66
|
+
setActiveChannel: () => null,
|
|
67
|
+
} as unknown as ChatContextValue
|
|
68
|
+
}
|
|
66
69
|
>
|
|
67
70
|
<TestComponent />
|
|
68
71
|
</ChatContext.Provider>,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React from 'react';
|
|
1
|
+
import React, { type ComponentProps } from 'react';
|
|
2
2
|
import { Text } from 'react-native';
|
|
3
3
|
|
|
4
4
|
import { render } from '@testing-library/react-native';
|
|
@@ -7,13 +7,19 @@ import type { Channel } from 'stream-chat';
|
|
|
7
7
|
import { ThemeProvider, defaultTheme } from '../../../contexts';
|
|
8
8
|
import { WithComponents } from '../../../contexts/componentsContext/ComponentsContext';
|
|
9
9
|
import type { ChannelActionItem } from '../../ChannelList/hooks/useChannelActionItems';
|
|
10
|
+
import { StreamBottomSheetModalFlatList } from '../../UIComponents/StreamBottomSheetModalFlatList';
|
|
10
11
|
import type { ChannelDetailsHeaderProps } from '../ChannelDetailsBottomSheet';
|
|
11
12
|
import { ChannelDetailsBottomSheet } from '../ChannelDetailsBottomSheet';
|
|
12
13
|
|
|
13
|
-
|
|
14
|
+
type StreamBottomSheetModalFlatListProps = ComponentProps<typeof StreamBottomSheetModalFlatList>;
|
|
15
|
+
|
|
16
|
+
const mockStreamBottomSheetModalFlatList = jest.fn(
|
|
17
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
18
|
+
(_props: StreamBottomSheetModalFlatListProps) => null,
|
|
19
|
+
);
|
|
14
20
|
|
|
15
21
|
jest.mock('../../UIComponents/StreamBottomSheetModalFlatList', () => ({
|
|
16
|
-
StreamBottomSheetModalFlatList: (...args:
|
|
22
|
+
StreamBottomSheetModalFlatList: (...args: [StreamBottomSheetModalFlatListProps]) =>
|
|
17
23
|
mockStreamBottomSheetModalFlatList(...args),
|
|
18
24
|
}));
|
|
19
25
|
|
|
@@ -73,7 +79,11 @@ describe('ChannelDetailsBottomSheet', () => {
|
|
|
73
79
|
);
|
|
74
80
|
|
|
75
81
|
expect(mockStreamBottomSheetModalFlatList).toHaveBeenCalled();
|
|
76
|
-
const flatListProps =
|
|
82
|
+
const flatListProps = (
|
|
83
|
+
mockStreamBottomSheetModalFlatList.mock.calls[0] as unknown as [
|
|
84
|
+
StreamBottomSheetModalFlatListProps,
|
|
85
|
+
]
|
|
86
|
+
)?.[0];
|
|
77
87
|
expect(flatListProps).toEqual(
|
|
78
88
|
expect.objectContaining({
|
|
79
89
|
onEndReached,
|
|
@@ -41,7 +41,8 @@ const mockChannelSwipableWrapper = jest.fn(({ children }: React.PropsWithChildre
|
|
|
41
41
|
));
|
|
42
42
|
|
|
43
43
|
jest.mock('../ChannelSwipableWrapper', () => ({
|
|
44
|
-
ChannelSwipableWrapper: (...args:
|
|
44
|
+
ChannelSwipableWrapper: (...args: [React.PropsWithChildren]) =>
|
|
45
|
+
mockChannelSwipableWrapper(...args),
|
|
45
46
|
}));
|
|
46
47
|
|
|
47
48
|
const ChannelPreviewUIComponent = (props: ChannelPreviewUIComponentProps) => {
|
|
@@ -56,7 +57,7 @@ const ChannelPreviewUIComponent = (props: ChannelPreviewUIComponentProps) => {
|
|
|
56
57
|
|
|
57
58
|
const initChannelFromData = async (
|
|
58
59
|
chatClient: StreamChat,
|
|
59
|
-
overrides:
|
|
60
|
+
overrides: Parameters<typeof generateChannelResponse>[0] = {},
|
|
60
61
|
) => {
|
|
61
62
|
const mockedChannel = generateChannelResponse(overrides);
|
|
62
63
|
useMockedApis(chatClient, [getOrCreateChannelApi(mockedChannel)]);
|
|
@@ -84,21 +85,27 @@ describe('ChannelPreview', () => {
|
|
|
84
85
|
|
|
85
86
|
return (
|
|
86
87
|
<Chat client={chatClient}>
|
|
87
|
-
<WithComponents
|
|
88
|
+
<WithComponents
|
|
89
|
+
overrides={{
|
|
90
|
+
ChannelPreview: ChannelPreviewUIComponent as unknown as React.ComponentType<
|
|
91
|
+
React.ComponentProps<typeof ChannelPreview>
|
|
92
|
+
>,
|
|
93
|
+
}}
|
|
94
|
+
>
|
|
88
95
|
<ChannelPreview {...props} channel={channel} client={chatClient} />
|
|
89
96
|
</WithComponents>
|
|
90
97
|
</Chat>
|
|
91
98
|
);
|
|
92
99
|
};
|
|
93
100
|
|
|
94
|
-
const generateChannelWrapper = (overrides:
|
|
101
|
+
const generateChannelWrapper = (overrides: Partial<Channel>) =>
|
|
95
102
|
generateChannel({
|
|
96
103
|
countUnread: jest.fn().mockReturnValue(0),
|
|
97
104
|
initialized: true,
|
|
98
105
|
lastMessage: jest.fn().mockReturnValue(generateMessage()),
|
|
99
106
|
muteStatus: jest.fn().mockReturnValue({ muted: false }),
|
|
100
107
|
...overrides,
|
|
101
|
-
});
|
|
108
|
+
} as unknown as Parameters<typeof generateChannel>[0]);
|
|
102
109
|
|
|
103
110
|
const useInitializeChannel = async (c: GetOrCreateChannelApiParams) => {
|
|
104
111
|
useMockedApis(chatClient, [getOrCreateChannelApi(c)]);
|
|
@@ -308,7 +315,7 @@ describe('ChannelPreview', () => {
|
|
|
308
315
|
const c = generateChannelResponse();
|
|
309
316
|
await useInitializeChannel(c);
|
|
310
317
|
|
|
311
|
-
channel.muteStatus = jest.fn().mockReturnValue({ muted: true });
|
|
318
|
+
if (channel) channel.muteStatus = jest.fn().mockReturnValue({ muted: true });
|
|
312
319
|
|
|
313
320
|
const { getByTestId } = render(<TestComponent />);
|
|
314
321
|
|
|
@@ -362,7 +369,7 @@ describe('ChannelPreview', () => {
|
|
|
362
369
|
});
|
|
363
370
|
|
|
364
371
|
await waitFor(() => {
|
|
365
|
-
expect(getByTestId('latest-message')).toHaveTextContent(message.text);
|
|
372
|
+
expect(getByTestId('latest-message')).toHaveTextContent(message.text as string);
|
|
366
373
|
});
|
|
367
374
|
});
|
|
368
375
|
|
|
@@ -400,7 +407,9 @@ describe('ChannelPreview', () => {
|
|
|
400
407
|
},
|
|
401
408
|
text: 'Hello world!',
|
|
402
409
|
};
|
|
403
|
-
const channel = generateChannelResponse({
|
|
410
|
+
const channel = generateChannelResponse({
|
|
411
|
+
messages: [message] as unknown as GetOrCreateChannelApiParams['messages'],
|
|
412
|
+
});
|
|
404
413
|
await useInitializeChannel(channel);
|
|
405
414
|
|
|
406
415
|
const { getByText } = render(<TestComponent />);
|
|
@@ -435,10 +444,12 @@ describe('ChannelPreview', () => {
|
|
|
435
444
|
return (
|
|
436
445
|
<Chat client={chatClient}>
|
|
437
446
|
<WithComponents
|
|
438
|
-
overrides={
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
447
|
+
overrides={
|
|
448
|
+
{
|
|
449
|
+
ChannelDetailsBottomSheet: channelDetailsBottomSheet,
|
|
450
|
+
ChannelPreview: SwipePreview,
|
|
451
|
+
} as unknown as React.ComponentProps<typeof WithComponents>['overrides']
|
|
452
|
+
}
|
|
442
453
|
>
|
|
443
454
|
<ChannelsProvider
|
|
444
455
|
value={
|
|
@@ -2,6 +2,7 @@ import React from 'react';
|
|
|
2
2
|
|
|
3
3
|
import { fireEvent, render, screen, waitFor } from '@testing-library/react-native';
|
|
4
4
|
import truncate from 'lodash/truncate';
|
|
5
|
+
import type { Channel as ChannelType, StreamChat } from 'stream-chat';
|
|
5
6
|
|
|
6
7
|
import { getOrCreateChannelApi } from '../../../mock-builders/api/getOrCreateChannel';
|
|
7
8
|
import { useMockedApis } from '../../../mock-builders/api/useMockedApis';
|
|
@@ -15,32 +16,16 @@ import { ChannelPreviewView } from '../ChannelPreviewView';
|
|
|
15
16
|
|
|
16
17
|
describe('ChannelPreviewView', () => {
|
|
17
18
|
const clientUser = generateUser();
|
|
18
|
-
let chatClient;
|
|
19
|
-
let channel;
|
|
19
|
+
let chatClient: StreamChat;
|
|
20
|
+
let channel: ChannelType | null;
|
|
20
21
|
|
|
21
|
-
const getComponent = (props = {}) => (
|
|
22
|
+
const getComponent = (props: Partial<React.ComponentProps<typeof ChannelPreviewView>> = {}) => (
|
|
22
23
|
<Chat client={chatClient}>
|
|
23
|
-
<ChannelPreviewView
|
|
24
|
-
channel={channel}
|
|
25
|
-
client={chatClient}
|
|
26
|
-
latestMessagePreview={{
|
|
27
|
-
created_at: '',
|
|
28
|
-
messageObject: generateMessage(),
|
|
29
|
-
previews: [
|
|
30
|
-
{
|
|
31
|
-
bold: true,
|
|
32
|
-
text: 'This is the message preview text',
|
|
33
|
-
},
|
|
34
|
-
],
|
|
35
|
-
status: 1, // read states of latest message.
|
|
36
|
-
}}
|
|
37
|
-
onSelect={jest.fn()}
|
|
38
|
-
{...props}
|
|
39
|
-
/>
|
|
24
|
+
<ChannelPreviewView channel={channel as ChannelType} onSelect={jest.fn()} {...props} />
|
|
40
25
|
</Chat>
|
|
41
26
|
);
|
|
42
27
|
|
|
43
|
-
const initializeChannel = async (c) => {
|
|
28
|
+
const initializeChannel = async (c: ReturnType<typeof generateChannelResponse>) => {
|
|
44
29
|
useMockedApis(chatClient, [getOrCreateChannelApi(c)]);
|
|
45
30
|
|
|
46
31
|
channel = chatClient.channel('messaging');
|
|
@@ -60,12 +45,7 @@ describe('ChannelPreviewView', () => {
|
|
|
60
45
|
const onSelect = jest.fn();
|
|
61
46
|
await initializeChannel(generateChannelResponse());
|
|
62
47
|
|
|
63
|
-
render(
|
|
64
|
-
getComponent({
|
|
65
|
-
onSelect,
|
|
66
|
-
watchers: {},
|
|
67
|
-
}),
|
|
68
|
-
);
|
|
48
|
+
render(getComponent({ onSelect }));
|
|
69
49
|
|
|
70
50
|
await waitFor(() => screen.getByTestId('channel-preview-button'));
|
|
71
51
|
|
|
@@ -101,7 +81,7 @@ describe('ChannelPreviewView', () => {
|
|
|
101
81
|
);
|
|
102
82
|
|
|
103
83
|
render(getComponent());
|
|
104
|
-
const expectedDisplayName = `${m1.user
|
|
84
|
+
const expectedDisplayName = `${m1.user!.name}, ${m2.user!.name}, ${m3.user!.name}`;
|
|
105
85
|
|
|
106
86
|
await waitFor(() => screen.queryByText(expectedDisplayName));
|
|
107
87
|
});
|
|
@@ -110,12 +90,7 @@ describe('ChannelPreviewView', () => {
|
|
|
110
90
|
const message = generateMessage();
|
|
111
91
|
await initializeChannel(generateChannelResponse());
|
|
112
92
|
|
|
113
|
-
render(
|
|
114
|
-
getComponent({
|
|
115
|
-
latestMessage: message,
|
|
116
|
-
latestMessageLength: 6,
|
|
117
|
-
}),
|
|
118
|
-
);
|
|
93
|
+
render(getComponent());
|
|
119
94
|
|
|
120
95
|
const expectedMessagePreview = truncate(message.text, { length: 6 });
|
|
121
96
|
await waitFor(() => screen.queryByText(expectedMessagePreview));
|