stream-chat-react-native-core 9.0.1 → 9.0.2-beta.2
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/AttachmentPicker/components/AttachmentMediaPicker/AttachmentPickerItem.js +6 -2
- package/lib/commonjs/components/AttachmentPicker/components/AttachmentMediaPicker/AttachmentPickerItem.js.map +1 -1
- package/lib/commonjs/components/Indicators/EmptyStateIndicator.js +1 -1
- package/lib/commonjs/components/Indicators/EmptyStateIndicator.js.map +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/MessageInput/components/AttachmentPreview/AttachmentUploadProgressIndicator.js +8 -3
- package/lib/commonjs/components/MessageInput/components/AttachmentPreview/AttachmentUploadProgressIndicator.js.map +1 -1
- package/lib/commonjs/components/MessageList/hooks/useMessageList.js.map +1 -1
- package/lib/commonjs/components/Poll/CreatePollContent.js +3 -3
- package/lib/commonjs/components/Poll/CreatePollContent.js.map +1 -1
- package/lib/commonjs/i18n/en.json +8 -0
- package/lib/commonjs/i18n/es.json +8 -0
- package/lib/commonjs/i18n/fr.json +8 -0
- package/lib/commonjs/i18n/he.json +8 -0
- package/lib/commonjs/i18n/hi.json +8 -0
- package/lib/commonjs/i18n/it.json +8 -0
- package/lib/commonjs/i18n/ja.json +8 -0
- package/lib/commonjs/i18n/ko.json +8 -0
- package/lib/commonjs/i18n/nl.json +8 -0
- package/lib/commonjs/i18n/pt-br.json +8 -0
- package/lib/commonjs/i18n/ru.json +8 -0
- package/lib/commonjs/i18n/tr.json +8 -0
- 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/AttachmentPicker/components/AttachmentMediaPicker/AttachmentPickerItem.js +6 -2
- package/lib/module/components/AttachmentPicker/components/AttachmentMediaPicker/AttachmentPickerItem.js.map +1 -1
- package/lib/module/components/Indicators/EmptyStateIndicator.js +1 -1
- package/lib/module/components/Indicators/EmptyStateIndicator.js.map +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/MessageInput/components/AttachmentPreview/AttachmentUploadProgressIndicator.js +8 -3
- package/lib/module/components/MessageInput/components/AttachmentPreview/AttachmentUploadProgressIndicator.js.map +1 -1
- package/lib/module/components/MessageList/hooks/useMessageList.js.map +1 -1
- package/lib/module/components/Poll/CreatePollContent.js +3 -3
- package/lib/module/components/Poll/CreatePollContent.js.map +1 -1
- package/lib/module/i18n/en.json +8 -0
- package/lib/module/i18n/es.json +8 -0
- package/lib/module/i18n/fr.json +8 -0
- package/lib/module/i18n/he.json +8 -0
- package/lib/module/i18n/hi.json +8 -0
- package/lib/module/i18n/it.json +8 -0
- package/lib/module/i18n/ja.json +8 -0
- package/lib/module/i18n/ko.json +8 -0
- package/lib/module/i18n/nl.json +8 -0
- package/lib/module/i18n/pt-br.json +8 -0
- package/lib/module/i18n/ru.json +8 -0
- package/lib/module/i18n/tr.json +8 -0
- 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/AttachmentPicker/components/AttachmentMediaPicker/AttachmentPickerItem.d.ts.map +1 -1
- package/lib/typescript/components/Indicators/EmptyStateIndicator.d.ts.map +1 -1
- package/lib/typescript/components/MessageInput/components/AttachmentPreview/AttachmentUploadProgressIndicator.d.ts.map +1 -1
- package/lib/typescript/components/Poll/CreatePollContent.d.ts.map +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/i18n/en.json +8 -0
- package/lib/typescript/i18n/es.json +8 -0
- package/lib/typescript/i18n/fr.json +8 -0
- package/lib/typescript/i18n/he.json +8 -0
- package/lib/typescript/i18n/hi.json +8 -0
- package/lib/typescript/i18n/it.json +8 -0
- package/lib/typescript/i18n/ja.json +8 -0
- package/lib/typescript/i18n/ko.json +8 -0
- package/lib/typescript/i18n/nl.json +8 -0
- package/lib/typescript/i18n/pt-br.json +8 -0
- package/lib/typescript/i18n/ru.json +8 -0
- package/lib/typescript/i18n/tr.json +8 -0
- 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/lib/typescript/utils/i18n/Streami18n.d.ts +8 -0
- package/lib/typescript/utils/i18n/Streami18n.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/AttachmentPicker/components/AttachmentMediaPicker/AttachmentPickerItem.tsx +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/Indicators/EmptyStateIndicator.tsx +3 -1
- 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/MessageInput/components/AttachmentPreview/AttachmentUploadProgressIndicator.tsx +8 -3
- 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/Poll/CreatePollContent.tsx +5 -3
- 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/i18n/en.json +8 -0
- package/src/i18n/es.json +8 -0
- package/src/i18n/fr.json +8 -0
- package/src/i18n/he.json +8 -0
- package/src/i18n/hi.json +8 -0
- package/src/i18n/it.json +8 -0
- package/src/i18n/ja.json +8 -0
- package/src/i18n/ko.json +8 -0
- package/src/i18n/nl.json +8 -0
- package/src/i18n/pt-br.json +8 -0
- package/src/i18n/ru.json +8 -0
- package/src/i18n/tr.json +8 -0
- 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
|
@@ -1,16 +1,20 @@
|
|
|
1
|
-
import React, { useContext, useEffect } from 'react';
|
|
1
|
+
import React, { type ComponentProps, useContext, useEffect } from 'react';
|
|
2
2
|
import { View } from 'react-native';
|
|
3
3
|
|
|
4
4
|
import { act, cleanup, render, renderHook, waitFor } from '@testing-library/react-native';
|
|
5
|
+
import type { Channel as ChannelType, StreamChat as StreamChatType } from 'stream-chat';
|
|
5
6
|
import { StreamChat } from 'stream-chat';
|
|
6
7
|
|
|
8
|
+
import type { ChannelContextValue } from '../../../contexts/channelContext/ChannelContext';
|
|
7
9
|
import { ChannelContext, ChannelProvider } from '../../../contexts/channelContext/ChannelContext';
|
|
8
10
|
import { ChannelsStateProvider } from '../../../contexts/channelsStateContext/ChannelsStateContext';
|
|
11
|
+
import type { MessagesContextValue } from '../../../contexts/messagesContext/MessagesContext';
|
|
9
12
|
import {
|
|
10
13
|
MessagesContext,
|
|
11
14
|
MessagesProvider,
|
|
12
15
|
} from '../../../contexts/messagesContext/MessagesContext';
|
|
13
16
|
|
|
17
|
+
import type { ThreadContextValue } from '../../../contexts/threadContext/ThreadContext';
|
|
14
18
|
import { ThreadContext, ThreadProvider } from '../../../contexts/threadContext/ThreadContext';
|
|
15
19
|
|
|
16
20
|
import { getOrCreateChannelApi } from '../../../mock-builders/api/getOrCreateChannel';
|
|
@@ -34,7 +38,13 @@ import * as MessageListPaginationHooks from '../hooks/useMessageListPagination';
|
|
|
34
38
|
// This component is used for performing effects in a component that consumes ChannelContext,
|
|
35
39
|
// i.e. making use of the callbacks & values provided by the Channel component.
|
|
36
40
|
// the effect is called every time channelContext changes
|
|
37
|
-
const CallbackEffectWithContext = ({
|
|
41
|
+
const CallbackEffectWithContext = ({
|
|
42
|
+
callback,
|
|
43
|
+
context,
|
|
44
|
+
}: {
|
|
45
|
+
callback: (ctx: unknown) => void;
|
|
46
|
+
context: React.Context<unknown>;
|
|
47
|
+
}) => {
|
|
38
48
|
const ctx = useContext(context);
|
|
39
49
|
useEffect(() => {
|
|
40
50
|
callback(ctx);
|
|
@@ -43,7 +53,13 @@ const CallbackEffectWithContext = ({ callback, context }) => {
|
|
|
43
53
|
return <View />;
|
|
44
54
|
};
|
|
45
55
|
|
|
46
|
-
const ContextConsumer = ({
|
|
56
|
+
const ContextConsumer = ({
|
|
57
|
+
context,
|
|
58
|
+
fn,
|
|
59
|
+
}: {
|
|
60
|
+
context: React.Context<unknown>;
|
|
61
|
+
fn: (ctx: unknown) => void;
|
|
62
|
+
}) => {
|
|
47
63
|
fn(useContext(context));
|
|
48
64
|
return <View testID='children' />;
|
|
49
65
|
};
|
|
@@ -51,17 +67,26 @@ const ContextConsumer = ({ context, fn }) => {
|
|
|
51
67
|
const channelType = 'messaging';
|
|
52
68
|
const channelId = 'test-channel';
|
|
53
69
|
const channelCid = `${channelType}:${channelId}`;
|
|
54
|
-
let chatClient;
|
|
55
|
-
let channel;
|
|
70
|
+
let chatClient: StreamChatType;
|
|
71
|
+
let channel: ChannelType;
|
|
56
72
|
|
|
57
73
|
const user = generateUser({ id: 'id', name: 'name' });
|
|
58
74
|
const messages = [generateMessage({ cid: channelCid, user })];
|
|
59
75
|
|
|
60
|
-
|
|
76
|
+
type RenderComponentProps = Partial<Omit<ComponentProps<typeof Channel>, 'channel'>> & {
|
|
77
|
+
channel?: unknown;
|
|
78
|
+
children?: React.ReactNode;
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
const renderComponent = (
|
|
82
|
+
props: RenderComponentProps = {},
|
|
83
|
+
callback: (ctx: unknown) => void = () => {},
|
|
84
|
+
context: React.Context<unknown> = ChannelContext as React.Context<unknown>,
|
|
85
|
+
) =>
|
|
61
86
|
render(
|
|
62
87
|
<ChannelsStateProvider>
|
|
63
88
|
<Chat client={chatClient}>
|
|
64
|
-
<Channel {...props}>
|
|
89
|
+
<Channel {...(props as React.ComponentProps<typeof Channel>)}>
|
|
65
90
|
{props.children}
|
|
66
91
|
<CallbackEffectWithContext {...{ callback, context }} />
|
|
67
92
|
</Channel>
|
|
@@ -73,7 +98,7 @@ describe('Channel', () => {
|
|
|
73
98
|
beforeEach(async () => {
|
|
74
99
|
const members = [generateMember({ user })];
|
|
75
100
|
const mockedChannel = generateChannelResponse({
|
|
76
|
-
cid: channelCid,
|
|
101
|
+
channel: { cid: channelCid },
|
|
77
102
|
id: channelId,
|
|
78
103
|
members,
|
|
79
104
|
messages,
|
|
@@ -81,8 +106,8 @@ describe('Channel', () => {
|
|
|
81
106
|
});
|
|
82
107
|
chatClient = await getTestClientWithUser(user);
|
|
83
108
|
useMockedApis(chatClient, [getOrCreateChannelApi(mockedChannel)]);
|
|
84
|
-
channel = chatClient.channel('messaging', mockedChannel.id);
|
|
85
|
-
channel.cid = mockedChannel.channel.cid;
|
|
109
|
+
channel = chatClient.channel('messaging', mockedChannel.channel.id);
|
|
110
|
+
channel.cid = mockedChannel.channel.cid as string;
|
|
86
111
|
const getConfigSpy = jest.fn();
|
|
87
112
|
channel.getConfig = getConfigSpy;
|
|
88
113
|
});
|
|
@@ -158,14 +183,18 @@ describe('Channel', () => {
|
|
|
158
183
|
// and then calls hasThread with the thread id if it was set.
|
|
159
184
|
const { rerender } = renderComponent(
|
|
160
185
|
{ channel },
|
|
161
|
-
(
|
|
186
|
+
(ctx) => {
|
|
187
|
+
const { openThread, thread } = ctx as {
|
|
188
|
+
openThread: (m: unknown) => void;
|
|
189
|
+
thread: { id: string } | null;
|
|
190
|
+
};
|
|
162
191
|
if (!thread) {
|
|
163
192
|
openThread(threadMessage);
|
|
164
193
|
} else {
|
|
165
194
|
hasThread(thread.id);
|
|
166
195
|
}
|
|
167
196
|
},
|
|
168
|
-
ThreadContext
|
|
197
|
+
ThreadContext as React.Context<unknown>,
|
|
169
198
|
);
|
|
170
199
|
|
|
171
200
|
rerender(
|
|
@@ -173,14 +202,18 @@ describe('Channel', () => {
|
|
|
173
202
|
<Chat client={chatClient}>
|
|
174
203
|
<Channel channel={channel}>
|
|
175
204
|
<CallbackEffectWithContext
|
|
176
|
-
callback={(
|
|
205
|
+
callback={(ctx) => {
|
|
206
|
+
const { openThread, thread } = ctx as {
|
|
207
|
+
openThread: (m: unknown) => void;
|
|
208
|
+
thread: { id: string } | null;
|
|
209
|
+
};
|
|
177
210
|
if (!thread) {
|
|
178
211
|
openThread(threadMessage);
|
|
179
212
|
} else {
|
|
180
213
|
hasThread(thread.id);
|
|
181
214
|
}
|
|
182
215
|
}}
|
|
183
|
-
context={ThreadContext}
|
|
216
|
+
context={ThreadContext as React.Context<unknown>}
|
|
184
217
|
/>
|
|
185
218
|
</Channel>
|
|
186
219
|
</Chat>
|
|
@@ -189,7 +222,7 @@ describe('Channel', () => {
|
|
|
189
222
|
await waitFor(() => expect(hasThread).toHaveBeenCalledWith(threadMessage.id));
|
|
190
223
|
});
|
|
191
224
|
|
|
192
|
-
const queryChannelWithNewMessages = (newMessages) =>
|
|
225
|
+
const queryChannelWithNewMessages = (newMessages: ReturnType<typeof generateMessage>[]) =>
|
|
193
226
|
// generate new channel mock from existing channel with new messages added
|
|
194
227
|
getOrCreateChannelApi(
|
|
195
228
|
generateChannelResponse({
|
|
@@ -212,7 +245,7 @@ describe('Channel', () => {
|
|
|
212
245
|
() => {
|
|
213
246
|
useMockedApis(chatClient, [queryChannelWithNewMessages(newMessages)]);
|
|
214
247
|
},
|
|
215
|
-
MessagesContext
|
|
248
|
+
MessagesContext as React.Context<unknown>,
|
|
216
249
|
);
|
|
217
250
|
|
|
218
251
|
await waitFor(() => expect(channelQuerySpy).toHaveBeenCalled());
|
|
@@ -221,7 +254,7 @@ describe('Channel', () => {
|
|
|
221
254
|
describe('ChannelContext', () => {
|
|
222
255
|
it('renders children without crashing', async () => {
|
|
223
256
|
const { getByTestId } = render(
|
|
224
|
-
<ChannelProvider>
|
|
257
|
+
<ChannelProvider value={{} as ChannelContextValue}>
|
|
225
258
|
<View testID='children' />
|
|
226
259
|
</ChannelProvider>,
|
|
227
260
|
);
|
|
@@ -230,7 +263,7 @@ describe('Channel', () => {
|
|
|
230
263
|
});
|
|
231
264
|
|
|
232
265
|
it('exposes the channel context', async () => {
|
|
233
|
-
let context;
|
|
266
|
+
let context: ChannelContextValue | undefined;
|
|
234
267
|
|
|
235
268
|
const mockContext = {
|
|
236
269
|
channel,
|
|
@@ -240,11 +273,11 @@ describe('Channel', () => {
|
|
|
240
273
|
};
|
|
241
274
|
|
|
242
275
|
render(
|
|
243
|
-
<ChannelProvider value={mockContext}>
|
|
276
|
+
<ChannelProvider value={mockContext as unknown as ChannelContextValue}>
|
|
244
277
|
<ContextConsumer
|
|
245
|
-
context={ChannelContext}
|
|
278
|
+
context={ChannelContext as React.Context<unknown>}
|
|
246
279
|
fn={(ctx) => {
|
|
247
|
-
context = ctx;
|
|
280
|
+
context = ctx as ChannelContextValue;
|
|
248
281
|
}}
|
|
249
282
|
/>
|
|
250
283
|
</ChannelProvider>,
|
|
@@ -252,10 +285,11 @@ describe('Channel', () => {
|
|
|
252
285
|
|
|
253
286
|
await waitFor(() => {
|
|
254
287
|
expect(context).toBeInstanceOf(Object);
|
|
255
|
-
|
|
256
|
-
expect(
|
|
257
|
-
expect(
|
|
258
|
-
expect(
|
|
288
|
+
const ctx = context as unknown as typeof mockContext;
|
|
289
|
+
expect(ctx.channel).toBeInstanceOf(Object);
|
|
290
|
+
expect(ctx.client).toBeInstanceOf(StreamChat);
|
|
291
|
+
expect(ctx.markRead).toBeInstanceOf(Function);
|
|
292
|
+
expect(ctx.watcherCount).toBe(5);
|
|
259
293
|
});
|
|
260
294
|
});
|
|
261
295
|
});
|
|
@@ -263,7 +297,7 @@ describe('Channel', () => {
|
|
|
263
297
|
describe('MessagesContext', () => {
|
|
264
298
|
it('renders children without crashing', async () => {
|
|
265
299
|
const { getByTestId } = render(
|
|
266
|
-
<MessagesProvider>
|
|
300
|
+
<MessagesProvider value={{} as MessagesContextValue}>
|
|
267
301
|
<View testID='children' />
|
|
268
302
|
</MessagesProvider>,
|
|
269
303
|
);
|
|
@@ -272,7 +306,7 @@ describe('Channel', () => {
|
|
|
272
306
|
});
|
|
273
307
|
|
|
274
308
|
it('exposes the messages context', async () => {
|
|
275
|
-
let context;
|
|
309
|
+
let context: MessagesContextValue | undefined;
|
|
276
310
|
|
|
277
311
|
const mockContext = {
|
|
278
312
|
Attachment,
|
|
@@ -282,11 +316,11 @@ describe('Channel', () => {
|
|
|
282
316
|
};
|
|
283
317
|
|
|
284
318
|
render(
|
|
285
|
-
<MessagesProvider value={mockContext}>
|
|
319
|
+
<MessagesProvider value={mockContext as unknown as MessagesContextValue}>
|
|
286
320
|
<ContextConsumer
|
|
287
|
-
context={MessagesContext}
|
|
321
|
+
context={MessagesContext as React.Context<unknown>}
|
|
288
322
|
fn={(ctx) => {
|
|
289
|
-
context = ctx;
|
|
323
|
+
context = ctx as MessagesContextValue;
|
|
290
324
|
}}
|
|
291
325
|
/>
|
|
292
326
|
</MessagesProvider>,
|
|
@@ -294,10 +328,11 @@ describe('Channel', () => {
|
|
|
294
328
|
|
|
295
329
|
await waitFor(() => {
|
|
296
330
|
expect(context).toBeInstanceOf(Object);
|
|
297
|
-
|
|
298
|
-
expect(
|
|
299
|
-
expect(
|
|
300
|
-
expect(
|
|
331
|
+
const ctx = context as unknown as typeof mockContext;
|
|
332
|
+
expect(ctx.Attachment).toBeInstanceOf(Function);
|
|
333
|
+
expect(ctx.editing).toBe(false);
|
|
334
|
+
expect(ctx.messages).toBeInstanceOf(Array);
|
|
335
|
+
expect(ctx.sendMessage).toBeInstanceOf(Function);
|
|
301
336
|
});
|
|
302
337
|
});
|
|
303
338
|
});
|
|
@@ -305,7 +340,7 @@ describe('Channel', () => {
|
|
|
305
340
|
describe('ThreadContext', () => {
|
|
306
341
|
it('renders children without crashing', async () => {
|
|
307
342
|
const { getByTestId } = render(
|
|
308
|
-
<ThreadProvider>
|
|
343
|
+
<ThreadProvider value={{} as ThreadContextValue}>
|
|
309
344
|
<View testID='children' />
|
|
310
345
|
</ThreadProvider>,
|
|
311
346
|
);
|
|
@@ -314,7 +349,7 @@ describe('Channel', () => {
|
|
|
314
349
|
});
|
|
315
350
|
|
|
316
351
|
it('exposes the thread context', async () => {
|
|
317
|
-
let context;
|
|
352
|
+
let context: ThreadContextValue | undefined;
|
|
318
353
|
|
|
319
354
|
const mockContext = {
|
|
320
355
|
openThread: () => {},
|
|
@@ -324,11 +359,11 @@ describe('Channel', () => {
|
|
|
324
359
|
};
|
|
325
360
|
|
|
326
361
|
render(
|
|
327
|
-
<ThreadProvider value={mockContext}>
|
|
362
|
+
<ThreadProvider value={mockContext as unknown as ThreadContextValue}>
|
|
328
363
|
<ContextConsumer
|
|
329
|
-
context={ThreadContext}
|
|
364
|
+
context={ThreadContext as React.Context<unknown>}
|
|
330
365
|
fn={(ctx) => {
|
|
331
|
-
context = ctx;
|
|
366
|
+
context = ctx as ThreadContextValue;
|
|
332
367
|
}}
|
|
333
368
|
/>
|
|
334
369
|
</ThreadProvider>,
|
|
@@ -336,22 +371,22 @@ describe('Channel', () => {
|
|
|
336
371
|
|
|
337
372
|
await waitFor(() => {
|
|
338
373
|
expect(context).toBeInstanceOf(Object);
|
|
339
|
-
expect(context
|
|
340
|
-
expect(context
|
|
341
|
-
expect(context
|
|
342
|
-
expect(context
|
|
374
|
+
expect(context!.openThread).toBeInstanceOf(Function);
|
|
375
|
+
expect(context!.thread).toBeInstanceOf(Object);
|
|
376
|
+
expect(context!.threadHasMore).toBe(true);
|
|
377
|
+
expect(context!.threadLoadingMore).toBe(false);
|
|
343
378
|
});
|
|
344
379
|
});
|
|
345
380
|
});
|
|
346
381
|
});
|
|
347
382
|
|
|
348
383
|
describe('Channel initial load useEffect', () => {
|
|
349
|
-
let chatClient;
|
|
384
|
+
let chatClient: StreamChatType;
|
|
350
385
|
|
|
351
|
-
const renderComponent = (props = {}) =>
|
|
386
|
+
const renderComponent = (props: RenderComponentProps = {}) =>
|
|
352
387
|
render(
|
|
353
388
|
<Chat client={chatClient}>
|
|
354
|
-
<Channel {...props}>{props.children}</Channel>
|
|
389
|
+
<Channel {...(props as React.ComponentProps<typeof Channel>)}>{props.children}</Channel>
|
|
355
390
|
</Chat>,
|
|
356
391
|
);
|
|
357
392
|
|
|
@@ -365,13 +400,13 @@ describe('Channel initial load useEffect', () => {
|
|
|
365
400
|
});
|
|
366
401
|
|
|
367
402
|
it('should still call channel.watch if we are online and DB channels are loaded', async () => {
|
|
368
|
-
const messages = Array.from({ length: 10 }, (_, i) => generateMessage({ id: i }));
|
|
403
|
+
const messages = Array.from({ length: 10 }, (_, i) => generateMessage({ id: String(i) }));
|
|
369
404
|
const mockedChannel = generateChannelResponse({
|
|
370
405
|
messages,
|
|
371
406
|
});
|
|
372
407
|
|
|
373
408
|
useMockedApis(chatClient, [getOrCreateChannelApi(mockedChannel)]);
|
|
374
|
-
const channel = chatClient.channel('messaging', mockedChannel.id);
|
|
409
|
+
const channel = chatClient.channel('messaging', mockedChannel.channel.id);
|
|
375
410
|
await channel.watch();
|
|
376
411
|
channel.offlineMode = true;
|
|
377
412
|
channel.state = {
|
|
@@ -379,7 +414,7 @@ describe('Channel initial load useEffect', () => {
|
|
|
379
414
|
messagePagination: {
|
|
380
415
|
hasPrev: true,
|
|
381
416
|
},
|
|
382
|
-
};
|
|
417
|
+
} as unknown as typeof channel.state;
|
|
383
418
|
const watchSpy = jest.fn();
|
|
384
419
|
channel.watch = watchSpy;
|
|
385
420
|
|
|
@@ -389,29 +424,29 @@ describe('Channel initial load useEffect', () => {
|
|
|
389
424
|
});
|
|
390
425
|
|
|
391
426
|
it("should call channel.watch if channel is initialized and it's not in offline mode", async () => {
|
|
392
|
-
const messages = Array.from({ length: 10 }, (_, i) => generateMessage({ id: i }));
|
|
427
|
+
const messages = Array.from({ length: 10 }, (_, i) => generateMessage({ id: String(i) }));
|
|
393
428
|
const mockedChannel = generateChannelResponse({
|
|
394
429
|
messages,
|
|
395
430
|
});
|
|
396
431
|
|
|
397
432
|
useMockedApis(chatClient, [getOrCreateChannelApi(mockedChannel)]);
|
|
398
|
-
const channel = chatClient.channel('messaging', mockedChannel.id);
|
|
433
|
+
const channel = chatClient.channel('messaging', mockedChannel.channel.id);
|
|
399
434
|
await channel.watch();
|
|
400
435
|
|
|
401
436
|
channel.state = {
|
|
402
437
|
...channelInitialState,
|
|
403
438
|
members: Object.fromEntries(
|
|
404
|
-
Array.from({ length: 10 }, (_, i) => [i, generateMember({
|
|
439
|
+
Array.from({ length: 10 }, (_, i) => [i, generateMember({ user_id: String(i) })]),
|
|
405
440
|
),
|
|
406
441
|
messagePagination: {
|
|
407
442
|
hasPrev: true,
|
|
408
443
|
},
|
|
409
|
-
messages: Array.from({ length: 10 }, (_, i) => generateMessage({ id: i })),
|
|
410
|
-
};
|
|
444
|
+
messages: Array.from({ length: 10 }, (_, i) => generateMessage({ id: String(i) })),
|
|
445
|
+
} as unknown as typeof channel.state;
|
|
411
446
|
const watchSpy = jest.fn();
|
|
412
447
|
|
|
413
448
|
channel.offlineMode = false;
|
|
414
|
-
channel.initialied = false;
|
|
449
|
+
(channel as unknown as { initialied: boolean }).initialied = false;
|
|
415
450
|
channel.watch = watchSpy;
|
|
416
451
|
|
|
417
452
|
renderComponent({ channel });
|
|
@@ -420,11 +455,11 @@ describe('Channel initial load useEffect', () => {
|
|
|
420
455
|
const { result: channelState } = renderHook(() => useChannelDataState(channel));
|
|
421
456
|
|
|
422
457
|
await waitFor(() => expect(watchSpy).toHaveBeenCalled());
|
|
423
|
-
await waitFor(() => expect(channelMessageState.current.state.messages).toHaveLength(10));
|
|
424
|
-
await waitFor(() => expect(Object.keys(channelState.current.state.members)).toHaveLength(10));
|
|
458
|
+
await waitFor(() => expect(channelMessageState.current.state.messages!).toHaveLength(10));
|
|
459
|
+
await waitFor(() => expect(Object.keys(channelState.current.state.members!)).toHaveLength(10));
|
|
425
460
|
});
|
|
426
461
|
|
|
427
|
-
function getElementsAround(array, key, id) {
|
|
462
|
+
function getElementsAround<T extends object>(array: T[], key: keyof T, id: unknown) {
|
|
428
463
|
const index = array.findIndex((obj) => obj[key] === id);
|
|
429
464
|
|
|
430
465
|
if (index === -1) {
|
|
@@ -437,14 +472,14 @@ describe('Channel initial load useEffect', () => {
|
|
|
437
472
|
}
|
|
438
473
|
|
|
439
474
|
it('should call the loadChannelAroundMessage when messageId is passed to a channel', async () => {
|
|
440
|
-
const messages = Array.from({ length: 105 }, (_, i) => generateMessage({ id: i }));
|
|
475
|
+
const messages = Array.from({ length: 105 }, (_, i) => generateMessage({ id: String(i) }));
|
|
441
476
|
const messageToSearch = messages[50];
|
|
442
477
|
const mockedChannel = generateChannelResponse({
|
|
443
478
|
messages,
|
|
444
479
|
});
|
|
445
480
|
|
|
446
481
|
useMockedApis(chatClient, [getOrCreateChannelApi(mockedChannel)]);
|
|
447
|
-
const channel = chatClient.channel('messaging', mockedChannel.id);
|
|
482
|
+
const channel = chatClient.channel('messaging', mockedChannel.channel.id);
|
|
448
483
|
await channel.watch();
|
|
449
484
|
|
|
450
485
|
const loadMessageIntoState = jest.fn(() => {
|
|
@@ -460,7 +495,7 @@ describe('Channel initial load useEffect', () => {
|
|
|
460
495
|
hasPrev: true,
|
|
461
496
|
},
|
|
462
497
|
messages,
|
|
463
|
-
};
|
|
498
|
+
} as unknown as typeof channel.state;
|
|
464
499
|
|
|
465
500
|
renderComponent({ channel, messageId: messageToSearch.id });
|
|
466
501
|
|
|
@@ -469,10 +504,10 @@ describe('Channel initial load useEffect', () => {
|
|
|
469
504
|
});
|
|
470
505
|
|
|
471
506
|
const { result: channelMessageState } = renderHook(() => useChannelMessageDataState(channel));
|
|
472
|
-
await waitFor(() => expect(channelMessageState.current.state.messages).toHaveLength(25));
|
|
507
|
+
await waitFor(() => expect(channelMessageState.current.state.messages!).toHaveLength(25));
|
|
473
508
|
await waitFor(() =>
|
|
474
509
|
expect(
|
|
475
|
-
channelMessageState.current.state.messages
|
|
510
|
+
channelMessageState.current.state.messages!.find(
|
|
476
511
|
(message) => message.id === messageToSearch.id,
|
|
477
512
|
),
|
|
478
513
|
).toBeTruthy(),
|
|
@@ -487,38 +522,43 @@ describe('Channel initial load useEffect', () => {
|
|
|
487
522
|
jest.restoreAllMocks();
|
|
488
523
|
cleanup();
|
|
489
524
|
});
|
|
490
|
-
const mockedHook = (
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
525
|
+
const mockedHook = (
|
|
526
|
+
values: Partial<ReturnType<typeof MessageListPaginationHooks.useMessageListPagination>>,
|
|
527
|
+
) =>
|
|
528
|
+
jest.spyOn(MessageListPaginationHooks, 'useMessageListPagination').mockImplementation(
|
|
529
|
+
() =>
|
|
530
|
+
({
|
|
531
|
+
copyMessagesStateFromChannel: jest.fn(),
|
|
532
|
+
loadChannelAroundMessage: jest.fn(),
|
|
533
|
+
loadChannelAtFirstUnreadMessage: jest.fn(),
|
|
534
|
+
loadInitialMessagesStateFromChannel: jest.fn(),
|
|
535
|
+
loadLatestMessages: jest.fn(),
|
|
536
|
+
loadMore: jest.fn(),
|
|
537
|
+
loadMoreRecent: jest.fn(),
|
|
538
|
+
state: { ...channelInitialState },
|
|
539
|
+
...values,
|
|
540
|
+
}) as unknown as ReturnType<typeof MessageListPaginationHooks.useMessageListPagination>,
|
|
541
|
+
);
|
|
502
542
|
it("should not call loadChannelAtFirstUnreadMessage if channel's unread count is 0", async () => {
|
|
503
543
|
const mockedChannel = generateChannelResponse({
|
|
504
544
|
messages: Array.from({ length: 10 }, (_, i) => generateMessage({ text: `message-${i}` })),
|
|
505
545
|
});
|
|
506
546
|
|
|
507
547
|
useMockedApis(chatClient, [getOrCreateChannelApi(mockedChannel)]);
|
|
508
|
-
const channel = chatClient.channel('messaging', mockedChannel.id);
|
|
548
|
+
const channel = chatClient.channel('messaging', mockedChannel.channel.id);
|
|
509
549
|
await channel.watch();
|
|
510
550
|
const user = generateUser();
|
|
511
|
-
const read_data = {};
|
|
551
|
+
const read_data: typeof channel.state.read = {};
|
|
512
552
|
|
|
513
|
-
read_data[chatClient.user
|
|
553
|
+
read_data[chatClient.user!.id] = {
|
|
514
554
|
last_read: new Date(),
|
|
515
555
|
user,
|
|
516
|
-
};
|
|
556
|
+
} as unknown as (typeof channel.state.read)[string];
|
|
517
557
|
|
|
518
558
|
channel.state = {
|
|
519
559
|
...channelInitialState,
|
|
520
560
|
read: read_data,
|
|
521
|
-
};
|
|
561
|
+
} as unknown as typeof channel.state;
|
|
522
562
|
jest.spyOn(channel, 'countUnread').mockImplementation(() => 0);
|
|
523
563
|
|
|
524
564
|
const loadChannelAtFirstUnreadMessageFn = jest.fn();
|
|
@@ -538,14 +578,14 @@ describe('Channel initial load useEffect', () => {
|
|
|
538
578
|
});
|
|
539
579
|
|
|
540
580
|
useMockedApis(chatClient, [getOrCreateChannelApi(mockedChannel)]);
|
|
541
|
-
const channel = chatClient.channel('messaging', mockedChannel.id);
|
|
581
|
+
const channel = chatClient.channel('messaging', mockedChannel.channel.id);
|
|
542
582
|
await channel.watch();
|
|
543
583
|
|
|
544
584
|
const user = generateUser();
|
|
545
585
|
const numberOfUnreadMessages = 15;
|
|
546
|
-
const read_data = {};
|
|
586
|
+
const read_data: typeof channel.state.read = {};
|
|
547
587
|
|
|
548
|
-
read_data[chatClient.user
|
|
588
|
+
read_data[chatClient.user!.id] = {
|
|
549
589
|
last_read: new Date(),
|
|
550
590
|
unread_messages: numberOfUnreadMessages,
|
|
551
591
|
user,
|
|
@@ -553,7 +593,7 @@ describe('Channel initial load useEffect', () => {
|
|
|
553
593
|
channel.state = {
|
|
554
594
|
...channelInitialState,
|
|
555
595
|
read: read_data,
|
|
556
|
-
};
|
|
596
|
+
} as unknown as typeof channel.state;
|
|
557
597
|
|
|
558
598
|
jest.spyOn(channel, 'countUnread').mockImplementation(() => numberOfUnreadMessages);
|
|
559
599
|
const loadChannelAtFirstUnreadMessageFn = jest.fn();
|
|
@@ -573,14 +613,14 @@ describe('Channel initial load useEffect', () => {
|
|
|
573
613
|
});
|
|
574
614
|
|
|
575
615
|
useMockedApis(chatClient, [getOrCreateChannelApi(mockedChannel)]);
|
|
576
|
-
const channel = chatClient.channel('messaging', mockedChannel.id);
|
|
616
|
+
const channel = chatClient.channel('messaging', mockedChannel.channel.id);
|
|
577
617
|
await channel.watch();
|
|
578
618
|
|
|
579
619
|
const user = generateUser();
|
|
580
620
|
const numberOfUnreadMessages = 2;
|
|
581
|
-
const read_data = {};
|
|
621
|
+
const read_data: typeof channel.state.read = {};
|
|
582
622
|
|
|
583
|
-
read_data[chatClient.user
|
|
623
|
+
read_data[chatClient.user!.id] = {
|
|
584
624
|
last_read: new Date(),
|
|
585
625
|
unread_messages: numberOfUnreadMessages,
|
|
586
626
|
user,
|
|
@@ -588,7 +628,7 @@ describe('Channel initial load useEffect', () => {
|
|
|
588
628
|
channel.state = {
|
|
589
629
|
...channelInitialState,
|
|
590
630
|
read: read_data,
|
|
591
|
-
};
|
|
631
|
+
} as unknown as typeof channel.state;
|
|
592
632
|
|
|
593
633
|
jest.spyOn(channel, 'countUnread').mockImplementation(() => numberOfUnreadMessages);
|
|
594
634
|
const loadChannelAtFirstUnreadMessageFn = jest.fn();
|
|
@@ -609,7 +649,7 @@ describe('Channel initial load useEffect', () => {
|
|
|
609
649
|
});
|
|
610
650
|
|
|
611
651
|
useMockedApis(chatClient, [getOrCreateChannelApi(mockedChannel)]);
|
|
612
|
-
const channel = chatClient.channel('messaging', mockedChannel.id);
|
|
652
|
+
const channel = chatClient.channel('messaging', mockedChannel.channel.id);
|
|
613
653
|
await channel.watch();
|
|
614
654
|
|
|
615
655
|
renderComponent({ channel });
|
|
@@ -3,6 +3,7 @@ import React from 'react';
|
|
|
3
3
|
import { Text } from 'react-native';
|
|
4
4
|
|
|
5
5
|
import { act, cleanup, render, waitFor } from '@testing-library/react-native';
|
|
6
|
+
import type { Attachment, Channel as ChannelType, StreamChat } from 'stream-chat';
|
|
6
7
|
|
|
7
8
|
import { WithComponents } from '../../../contexts/componentsContext/ComponentsContext';
|
|
8
9
|
import { OverlayProvider } from '../../../contexts/overlayContext/OverlayProvider';
|
|
@@ -19,14 +20,16 @@ import { Channel } from '../../Channel/Channel';
|
|
|
19
20
|
import { Chat } from '../../Chat/Chat';
|
|
20
21
|
import { MessageList } from '../../MessageList/MessageList';
|
|
21
22
|
|
|
23
|
+
type AttachmentWithCustomField = Attachment & { customField?: string };
|
|
24
|
+
|
|
22
25
|
describe('isAttachmentEqualHandler', () => {
|
|
23
|
-
let channel;
|
|
24
|
-
let chatClient;
|
|
26
|
+
let channel: ChannelType;
|
|
27
|
+
let chatClient: StreamChat;
|
|
25
28
|
|
|
26
29
|
const user = generateUser({ id: 'id', name: 'name' });
|
|
27
30
|
const messages = [
|
|
28
31
|
generateMessage({
|
|
29
|
-
attachments: [{ customField: 'custom-field', type: 'test' }],
|
|
32
|
+
attachments: [{ customField: 'custom-field', type: 'test' } as AttachmentWithCustomField],
|
|
30
33
|
user,
|
|
31
34
|
}),
|
|
32
35
|
];
|
|
@@ -40,7 +43,7 @@ describe('isAttachmentEqualHandler', () => {
|
|
|
40
43
|
|
|
41
44
|
chatClient = await getTestClientWithUser(user);
|
|
42
45
|
useMockedApis(chatClient, [getOrCreateChannelApi(mockedChannel)]);
|
|
43
|
-
channel = chatClient.channel('messaging', mockedChannel.id);
|
|
46
|
+
channel = chatClient.channel('messaging', mockedChannel.channel.id);
|
|
44
47
|
await channel.watch();
|
|
45
48
|
});
|
|
46
49
|
|
|
@@ -50,7 +53,10 @@ describe('isAttachmentEqualHandler', () => {
|
|
|
50
53
|
});
|
|
51
54
|
|
|
52
55
|
const getMessageWithCustomFields = () => {
|
|
53
|
-
const isAttachmentEqualHandler = (
|
|
56
|
+
const isAttachmentEqualHandler = (
|
|
57
|
+
prevProps: AttachmentWithCustomField,
|
|
58
|
+
nextProps: AttachmentWithCustomField,
|
|
59
|
+
) => {
|
|
54
60
|
const propsEqual =
|
|
55
61
|
prevProps.customField === nextProps.customField && prevProps.type === nextProps.type;
|
|
56
62
|
if (!propsEqual) {
|
|
@@ -64,14 +70,23 @@ describe('isAttachmentEqualHandler', () => {
|
|
|
64
70
|
<Chat client={chatClient}>
|
|
65
71
|
<WithComponents
|
|
66
72
|
overrides={{
|
|
67
|
-
UnsupportedAttachment: ({ attachment
|
|
73
|
+
UnsupportedAttachment: ({ attachment }) => {
|
|
74
|
+
const { customField, type } = attachment as AttachmentWithCustomField;
|
|
68
75
|
if (type === 'test') {
|
|
69
76
|
return <Text testID='attachment-custom-field'>{customField}</Text>;
|
|
70
77
|
}
|
|
78
|
+
return null;
|
|
71
79
|
},
|
|
72
80
|
}}
|
|
73
81
|
>
|
|
74
|
-
<Channel
|
|
82
|
+
<Channel
|
|
83
|
+
channel={channel}
|
|
84
|
+
isAttachmentEqual={
|
|
85
|
+
isAttachmentEqualHandler as unknown as React.ComponentProps<
|
|
86
|
+
typeof Channel
|
|
87
|
+
>['isAttachmentEqual']
|
|
88
|
+
}
|
|
89
|
+
>
|
|
75
90
|
<MessageList />
|
|
76
91
|
</Channel>
|
|
77
92
|
</WithComponents>
|
|
@@ -92,7 +107,9 @@ describe('isAttachmentEqualHandler', () => {
|
|
|
92
107
|
chatClient,
|
|
93
108
|
{
|
|
94
109
|
...messages[0],
|
|
95
|
-
attachments: [
|
|
110
|
+
attachments: [
|
|
111
|
+
{ customField: 'custom-field-2', type: 'test' } as AttachmentWithCustomField,
|
|
112
|
+
],
|
|
96
113
|
updated_at: new Date(),
|
|
97
114
|
},
|
|
98
115
|
channel,
|