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,22 +1,26 @@
|
|
|
1
|
+
import { fromPartial } from '@total-typescript/shoehorn';
|
|
2
|
+
import type { UserResponse } from 'stream-chat';
|
|
1
3
|
import { v4 as uuidv4 } from 'uuid';
|
|
2
4
|
|
|
3
|
-
export const getUserDefaults = () =>
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
5
|
+
export const getUserDefaults = (): UserResponse =>
|
|
6
|
+
fromPartial<UserResponse>({
|
|
7
|
+
banned: false,
|
|
8
|
+
created_at: '2020-04-27T13:39:49.331742Z',
|
|
9
|
+
id: uuidv4(),
|
|
10
|
+
image: uuidv4(),
|
|
11
|
+
name: uuidv4(),
|
|
12
|
+
online: false,
|
|
13
|
+
role: 'user',
|
|
14
|
+
updated_at: '2020-04-27T13:39:49.332087Z',
|
|
15
|
+
});
|
|
13
16
|
|
|
14
|
-
export const generateUser = (options = {}) =>
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
17
|
+
export const generateUser = (options: Partial<UserResponse> = {}): UserResponse =>
|
|
18
|
+
fromPartial<UserResponse>({
|
|
19
|
+
...getUserDefaults(),
|
|
20
|
+
...options,
|
|
21
|
+
});
|
|
18
22
|
|
|
19
|
-
const staticUsers = [
|
|
23
|
+
const staticUsers: UserResponse[] = [
|
|
20
24
|
// By the order of...
|
|
21
25
|
generateUser({
|
|
22
26
|
id: 'tommy',
|
|
@@ -40,7 +44,7 @@ const staticUsers = [
|
|
|
40
44
|
}),
|
|
41
45
|
];
|
|
42
46
|
|
|
43
|
-
export const generateStaticUser = (userNumber) => {
|
|
47
|
+
export const generateStaticUser = (userNumber: number): UserResponse => {
|
|
44
48
|
if (userNumber - 1 > staticUsers.length) {
|
|
45
49
|
throw new Error(`Tried getting a static user that doesn't exist.
|
|
46
50
|
Index: ${userNumber} , number of users: ${staticUsers.length}`);
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/* eslint no-underscore-dangle: 0 */
|
|
2
|
+
/* eslint no-param-reassign: 0 */
|
|
3
|
+
|
|
4
|
+
import { StreamChat, type OwnUserResponse, type UserResponse } from 'stream-chat';
|
|
5
|
+
|
|
6
|
+
const apiKey = 'API_KEY';
|
|
7
|
+
const token = 'dummy_token';
|
|
8
|
+
|
|
9
|
+
type MockClientOptions = { disableAppSettings?: boolean };
|
|
10
|
+
|
|
11
|
+
// Tests reach into private/internal StreamChat fields to set up a mocked
|
|
12
|
+
// authenticated client without going through the real network handshake.
|
|
13
|
+
type MockableStreamChat = StreamChat & {
|
|
14
|
+
connectionId?: string;
|
|
15
|
+
user?: OwnUserResponse;
|
|
16
|
+
_user?: OwnUserResponse;
|
|
17
|
+
userToken?: string;
|
|
18
|
+
setUser?: (user: UserResponse) => Promise<void>;
|
|
19
|
+
wsPromise?: Promise<unknown>;
|
|
20
|
+
_setToken?: (...args: unknown[]) => unknown;
|
|
21
|
+
_setupConnection?: (...args: unknown[]) => unknown;
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
export const setUser = (client: StreamChat, user: UserResponse): Promise<void> =>
|
|
25
|
+
new Promise<void>((resolve) => {
|
|
26
|
+
const c = client as MockableStreamChat;
|
|
27
|
+
c.connectionId = 'dumm_connection_id';
|
|
28
|
+
c.user = { ...user, mutes: [] } as unknown as OwnUserResponse;
|
|
29
|
+
c._user = { ...c.user };
|
|
30
|
+
c.userID = user.id;
|
|
31
|
+
c.userToken = token;
|
|
32
|
+
resolve();
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
function mockClient(client: StreamChat, options: MockClientOptions = {}): StreamChat {
|
|
36
|
+
const { disableAppSettings = true } = options;
|
|
37
|
+
const c = client as MockableStreamChat;
|
|
38
|
+
|
|
39
|
+
type WithPrivates = { _setToken: () => void; _setupConnection: () => void };
|
|
40
|
+
const withPrivates = c as unknown as WithPrivates;
|
|
41
|
+
jest.spyOn(withPrivates, '_setToken').mockImplementation();
|
|
42
|
+
jest.spyOn(withPrivates, '_setupConnection').mockImplementation();
|
|
43
|
+
c.tokenManager = {
|
|
44
|
+
getToken: jest.fn(() => token),
|
|
45
|
+
tokenReady: jest.fn(() => true),
|
|
46
|
+
} as unknown as StreamChat['tokenManager'];
|
|
47
|
+
c.setUser = setUser.bind(null, client);
|
|
48
|
+
|
|
49
|
+
if (disableAppSettings) {
|
|
50
|
+
c.getAppSettings = jest.fn(() => ({})) as unknown as StreamChat['getAppSettings'];
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
return client;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export const getTestClient = (options: MockClientOptions = {}): StreamChat =>
|
|
57
|
+
mockClient(new StreamChat(apiKey), options);
|
|
58
|
+
|
|
59
|
+
export const getTestClientWithUser = async (
|
|
60
|
+
user: UserResponse,
|
|
61
|
+
options: MockClientOptions = {},
|
|
62
|
+
): Promise<StreamChat> => {
|
|
63
|
+
const { disableAppSettings = true } = options;
|
|
64
|
+
const client = mockClient(new StreamChat(apiKey));
|
|
65
|
+
await setUser(client, user);
|
|
66
|
+
(client as MockableStreamChat).wsPromise = Promise.resolve();
|
|
67
|
+
|
|
68
|
+
if (disableAppSettings) {
|
|
69
|
+
client.getAppSettings = jest.fn(() => ({})) as unknown as StreamChat['getAppSettings'];
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
return client;
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
export const getRandomInt = (min: number, max: number): number => {
|
|
76
|
+
min = Math.ceil(min);
|
|
77
|
+
max = Math.floor(max);
|
|
78
|
+
return Math.floor(Math.random() * (max - min)) + min; // The maximum is exclusive and the minimum is inclusive
|
|
79
|
+
};
|
|
@@ -190,7 +190,9 @@ describe('AudioPlayer', () => {
|
|
|
190
190
|
|
|
191
191
|
it('updates playback state from the native playback callback', async () => {
|
|
192
192
|
const playerRef = createMockNativePlayerRef();
|
|
193
|
-
let onPlaybackStatusUpdate
|
|
193
|
+
let onPlaybackStatusUpdate: (
|
|
194
|
+
status: ReturnType<typeof getLoadedPlaybackStatus>,
|
|
195
|
+
) => unknown = () => undefined;
|
|
194
196
|
(NativeHandlers as { Sound: unknown }).Sound = {
|
|
195
197
|
Player: null,
|
|
196
198
|
initializeSound: jest.fn().mockImplementation((_source, _initialStatus, callback) => {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Attachment,
|
|
1
|
+
import type { Attachment, UserResponse } from 'stream-chat';
|
|
2
2
|
|
|
3
3
|
import {
|
|
4
4
|
generateImageAttachment,
|
|
@@ -31,11 +31,11 @@ const { isVideoPlayerAvailable } = jest.requireMock('../../native') as {
|
|
|
31
31
|
const createGiphyAttachment = (overrides: Partial<Attachment> = {}): Attachment => ({
|
|
32
32
|
giphy: {
|
|
33
33
|
fixed_height: {
|
|
34
|
-
height: 200,
|
|
34
|
+
height: '200',
|
|
35
35
|
url: 'https://giphy.com/test.gif',
|
|
36
|
-
width: 200,
|
|
36
|
+
width: '200',
|
|
37
37
|
},
|
|
38
|
-
},
|
|
38
|
+
} as unknown as Attachment['giphy'],
|
|
39
39
|
thumb_url: 'https://giphy.com/thumb.gif',
|
|
40
40
|
type: 'giphy',
|
|
41
41
|
...overrides,
|
|
@@ -103,7 +103,7 @@ describe('ImageGalleryStateStore', () => {
|
|
|
103
103
|
describe('messages getter and setter', () => {
|
|
104
104
|
it('should get messages from state', () => {
|
|
105
105
|
const store = new ImageGalleryStateStore();
|
|
106
|
-
const messages = [generateMessage({ id: 1 }), generateMessage({ id: 2 })];
|
|
106
|
+
const messages = [generateMessage({ id: '1' }), generateMessage({ id: '2' })];
|
|
107
107
|
|
|
108
108
|
store.messages = messages;
|
|
109
109
|
|
|
@@ -112,7 +112,7 @@ describe('ImageGalleryStateStore', () => {
|
|
|
112
112
|
|
|
113
113
|
it('should update state when setting messages', () => {
|
|
114
114
|
const store = new ImageGalleryStateStore();
|
|
115
|
-
const messages = [generateMessage({ id: 1 })];
|
|
115
|
+
const messages = [generateMessage({ id: '1' })];
|
|
116
116
|
|
|
117
117
|
store.messages = messages;
|
|
118
118
|
|
|
@@ -192,7 +192,7 @@ describe('ImageGalleryStateStore', () => {
|
|
|
192
192
|
const imageAttachment = generateImageAttachment({
|
|
193
193
|
image_url: 'https://example.com/image.jpg',
|
|
194
194
|
});
|
|
195
|
-
const message = generateMessage({ attachments: [imageAttachment], id: 1 });
|
|
195
|
+
const message = generateMessage({ attachments: [imageAttachment], id: '1' });
|
|
196
196
|
|
|
197
197
|
store.messages = [message];
|
|
198
198
|
|
|
@@ -205,7 +205,7 @@ describe('ImageGalleryStateStore', () => {
|
|
|
205
205
|
const videoAttachment = generateVideoAttachment({
|
|
206
206
|
asset_url: 'https://example.com/video.mp4',
|
|
207
207
|
});
|
|
208
|
-
const message = generateMessage({ attachments: [videoAttachment], id: 1 });
|
|
208
|
+
const message = generateMessage({ attachments: [videoAttachment], id: '1' });
|
|
209
209
|
|
|
210
210
|
store.messages = [message];
|
|
211
211
|
|
|
@@ -216,7 +216,7 @@ describe('ImageGalleryStateStore', () => {
|
|
|
216
216
|
it('should filter messages with giphy attachments', () => {
|
|
217
217
|
const store = new ImageGalleryStateStore();
|
|
218
218
|
const giphyAttachment = createGiphyAttachment();
|
|
219
|
-
const message = generateMessage({ attachments: [giphyAttachment], id: 1 });
|
|
219
|
+
const message = generateMessage({ attachments: [giphyAttachment], id: '1' });
|
|
220
220
|
|
|
221
221
|
store.messages = [message];
|
|
222
222
|
|
|
@@ -230,7 +230,7 @@ describe('ImageGalleryStateStore', () => {
|
|
|
230
230
|
const videoAttachment = generateVideoAttachment({
|
|
231
231
|
asset_url: 'https://example.com/video.mp4',
|
|
232
232
|
});
|
|
233
|
-
const message = generateMessage({ attachments: [videoAttachment], id: 1 });
|
|
233
|
+
const message = generateMessage({ attachments: [videoAttachment], id: '1' });
|
|
234
234
|
|
|
235
235
|
store.messages = [message];
|
|
236
236
|
|
|
@@ -243,7 +243,7 @@ describe('ImageGalleryStateStore', () => {
|
|
|
243
243
|
image_url: 'https://example.com/image.jpg',
|
|
244
244
|
title_link: 'https://example.com',
|
|
245
245
|
});
|
|
246
|
-
const message = generateMessage({ attachments: [linkPreviewAttachment], id: 1 });
|
|
246
|
+
const message = generateMessage({ attachments: [linkPreviewAttachment], id: '1' });
|
|
247
247
|
|
|
248
248
|
store.messages = [message];
|
|
249
249
|
|
|
@@ -256,7 +256,7 @@ describe('ImageGalleryStateStore', () => {
|
|
|
256
256
|
image_url: 'https://example.com/image.jpg',
|
|
257
257
|
og_scrape_url: 'https://example.com',
|
|
258
258
|
});
|
|
259
|
-
const message = generateMessage({ attachments: [linkAttachment], id: 1 });
|
|
259
|
+
const message = generateMessage({ attachments: [linkAttachment], id: '1' });
|
|
260
260
|
|
|
261
261
|
store.messages = [message];
|
|
262
262
|
|
|
@@ -270,7 +270,7 @@ describe('ImageGalleryStateStore', () => {
|
|
|
270
270
|
image_url: 'https://example.com/preview.jpg',
|
|
271
271
|
title_link: 'https://example.com',
|
|
272
272
|
});
|
|
273
|
-
const message = generateMessage({ attachments: [viewableImage, linkPreview], id: 1 });
|
|
273
|
+
const message = generateMessage({ attachments: [viewableImage, linkPreview], id: '1' });
|
|
274
274
|
|
|
275
275
|
store.messages = [message];
|
|
276
276
|
|
|
@@ -283,7 +283,7 @@ describe('ImageGalleryStateStore', () => {
|
|
|
283
283
|
asset_url: 'https://example.com/file.pdf',
|
|
284
284
|
type: 'file',
|
|
285
285
|
};
|
|
286
|
-
const message = generateMessage({ attachments: [fileAttachment], id: 1 });
|
|
286
|
+
const message = generateMessage({ attachments: [fileAttachment], id: '1' });
|
|
287
287
|
|
|
288
288
|
store.messages = [message];
|
|
289
289
|
|
|
@@ -292,7 +292,7 @@ describe('ImageGalleryStateStore', () => {
|
|
|
292
292
|
|
|
293
293
|
it('should handle null attachments gracefully', () => {
|
|
294
294
|
const store = new ImageGalleryStateStore();
|
|
295
|
-
const message = generateMessage({ attachments: [null as unknown as Attachment], id: 1 });
|
|
295
|
+
const message = generateMessage({ attachments: [null as unknown as Attachment], id: '1' });
|
|
296
296
|
|
|
297
297
|
store.messages = [message];
|
|
298
298
|
|
|
@@ -301,7 +301,7 @@ describe('ImageGalleryStateStore', () => {
|
|
|
301
301
|
|
|
302
302
|
it('should handle messages without attachments array', () => {
|
|
303
303
|
const store = new ImageGalleryStateStore();
|
|
304
|
-
const message = generateMessage({ attachments: undefined, id: 1 });
|
|
304
|
+
const message = generateMessage({ attachments: undefined, id: '1' });
|
|
305
305
|
|
|
306
306
|
store.messages = [message];
|
|
307
307
|
|
|
@@ -340,7 +340,7 @@ describe('ImageGalleryStateStore', () => {
|
|
|
340
340
|
original_width: 800,
|
|
341
341
|
thumb_url: 'https://example.com/thumb.jpg',
|
|
342
342
|
});
|
|
343
|
-
const user:
|
|
343
|
+
const user: UserResponse = { id: 'user-1', name: 'Test User' } as UserResponse;
|
|
344
344
|
const message = generateMessage({
|
|
345
345
|
attachments: [imageAttachment],
|
|
346
346
|
cid: 'channel-msg-1',
|
|
@@ -372,7 +372,7 @@ describe('ImageGalleryStateStore', () => {
|
|
|
372
372
|
asset_url: 'https://example.com/video.mp4',
|
|
373
373
|
thumb_url: 'https://example.com/video-thumb.jpg',
|
|
374
374
|
});
|
|
375
|
-
const message = generateMessage({ attachments: [videoAttachment], id: 1 });
|
|
375
|
+
const message = generateMessage({ attachments: [videoAttachment], id: '1' });
|
|
376
376
|
|
|
377
377
|
store.messages = [message];
|
|
378
378
|
|
|
@@ -388,7 +388,7 @@ describe('ImageGalleryStateStore', () => {
|
|
|
388
388
|
it('should transform giphy attachments with correct mime type', () => {
|
|
389
389
|
const store = new ImageGalleryStateStore();
|
|
390
390
|
const giphyAttachment = createGiphyAttachment();
|
|
391
|
-
const message = generateMessage({ attachments: [giphyAttachment], id: 1 });
|
|
391
|
+
const message = generateMessage({ attachments: [giphyAttachment], id: '1' });
|
|
392
392
|
|
|
393
393
|
store.messages = [message];
|
|
394
394
|
|
|
@@ -405,7 +405,7 @@ describe('ImageGalleryStateStore', () => {
|
|
|
405
405
|
const store = new ImageGalleryStateStore();
|
|
406
406
|
const attachment1 = generateImageAttachment({ image_url: 'https://example.com/image1.jpg' });
|
|
407
407
|
const attachment2 = generateImageAttachment({ image_url: 'https://example.com/image2.jpg' });
|
|
408
|
-
const message = generateMessage({ attachments: [attachment1, attachment2], id: 1 });
|
|
408
|
+
const message = generateMessage({ attachments: [attachment1, attachment2], id: '1' });
|
|
409
409
|
|
|
410
410
|
store.messages = [message];
|
|
411
411
|
|
|
@@ -418,12 +418,12 @@ describe('ImageGalleryStateStore', () => {
|
|
|
418
418
|
const store = new ImageGalleryStateStore({ giphyVersion: 'original' });
|
|
419
419
|
const giphyAttachment: Attachment = {
|
|
420
420
|
giphy: {
|
|
421
|
-
fixed_height: { height: 200, url: 'https://giphy.com/fixed.gif', width: 200 },
|
|
422
|
-
original: { height: 400, url: 'https://giphy.com/original.gif', width: 400 },
|
|
423
|
-
},
|
|
421
|
+
fixed_height: { height: '200', url: 'https://giphy.com/fixed.gif', width: '200' },
|
|
422
|
+
original: { height: '400', url: 'https://giphy.com/original.gif', width: '400' },
|
|
423
|
+
} as unknown as Attachment['giphy'],
|
|
424
424
|
type: 'giphy',
|
|
425
425
|
};
|
|
426
|
-
const message = generateMessage({ attachments: [giphyAttachment], id: 1 });
|
|
426
|
+
const message = generateMessage({ attachments: [giphyAttachment], id: '1' });
|
|
427
427
|
|
|
428
428
|
store.messages = [message];
|
|
429
429
|
|
|
@@ -439,11 +439,11 @@ describe('ImageGalleryStateStore', () => {
|
|
|
439
439
|
generateImageAttachment({ image_url: 'https://example.com/image1.jpg' }),
|
|
440
440
|
generateImageAttachment({ image_url: 'https://example.com/image2.jpg' }),
|
|
441
441
|
],
|
|
442
|
-
id: 1,
|
|
442
|
+
id: '1',
|
|
443
443
|
});
|
|
444
444
|
const message2 = generateMessage({
|
|
445
445
|
attachments: [generateVideoAttachment({ asset_url: 'https://example.com/video.mp4' })],
|
|
446
|
-
id: 2,
|
|
446
|
+
id: '2',
|
|
447
447
|
});
|
|
448
448
|
|
|
449
449
|
store.messages = [message1, message2];
|
|
@@ -547,7 +547,10 @@ describe('ImageGalleryStateStore', () => {
|
|
|
547
547
|
];
|
|
548
548
|
const selectedUrl = 'https://example.com/1.jpg';
|
|
549
549
|
|
|
550
|
-
store.openImageGallery({
|
|
550
|
+
store.openImageGallery({
|
|
551
|
+
messages,
|
|
552
|
+
selectedAttachmentUrl: selectedUrl,
|
|
553
|
+
});
|
|
551
554
|
|
|
552
555
|
expect(store.messages).toEqual(messages);
|
|
553
556
|
expect(store.selectedAttachmentUrl).toBe(selectedUrl);
|
|
@@ -795,7 +798,7 @@ describe('ImageGalleryStateStore', () => {
|
|
|
795
798
|
id: 'msg-1',
|
|
796
799
|
}),
|
|
797
800
|
user: undefined,
|
|
798
|
-
}
|
|
801
|
+
};
|
|
799
802
|
|
|
800
803
|
store.messages = [message];
|
|
801
804
|
|
|
@@ -20,7 +20,7 @@ const createMockPlayer = (id: string, overrides: Partial<VideoPlayer> = {}): Vid
|
|
|
20
20
|
pause: jest.fn(),
|
|
21
21
|
play: jest.fn(),
|
|
22
22
|
...overrides,
|
|
23
|
-
}) as
|
|
23
|
+
}) as VideoPlayer;
|
|
24
24
|
|
|
25
25
|
describe('VideoPlayerPool', () => {
|
|
26
26
|
beforeEach(() => {
|
|
@@ -175,7 +175,7 @@ describe('VideoPlayerPool', () => {
|
|
|
175
175
|
const pool = new VideoPlayerPool();
|
|
176
176
|
const player = pool.getOrAddPlayer({ id: 'active-player' });
|
|
177
177
|
|
|
178
|
-
pool.setActivePlayer(player
|
|
178
|
+
pool.setActivePlayer(player);
|
|
179
179
|
expect(pool.getActivePlayer()).toBe(player);
|
|
180
180
|
|
|
181
181
|
pool.removePlayer('active-player');
|
|
@@ -188,7 +188,7 @@ describe('VideoPlayerPool', () => {
|
|
|
188
188
|
const activePlayer = pool.getOrAddPlayer({ id: 'active-player' });
|
|
189
189
|
pool.getOrAddPlayer({ id: 'other-player' });
|
|
190
190
|
|
|
191
|
-
pool.setActivePlayer(activePlayer
|
|
191
|
+
pool.setActivePlayer(activePlayer);
|
|
192
192
|
pool.removePlayer('other-player');
|
|
193
193
|
|
|
194
194
|
expect(pool.getActivePlayer()).toBe(activePlayer);
|
|
@@ -255,7 +255,7 @@ describe('VideoPlayerPool', () => {
|
|
|
255
255
|
const pool = new VideoPlayerPool();
|
|
256
256
|
const player = pool.getOrAddPlayer({ id: 'active-player' });
|
|
257
257
|
|
|
258
|
-
pool.setActivePlayer(player
|
|
258
|
+
pool.setActivePlayer(player);
|
|
259
259
|
expect(pool.getActivePlayer()).toBe(player);
|
|
260
260
|
|
|
261
261
|
pool.clear();
|
|
@@ -277,7 +277,7 @@ describe('VideoPlayerPool', () => {
|
|
|
277
277
|
it('should not change active player when player does not exist', () => {
|
|
278
278
|
const pool = new VideoPlayerPool();
|
|
279
279
|
const existingPlayer = pool.getOrAddPlayer({ id: 'existing-player' });
|
|
280
|
-
pool.setActivePlayer(existingPlayer
|
|
280
|
+
pool.setActivePlayer(existingPlayer);
|
|
281
281
|
|
|
282
282
|
pool.requestPlay('non-existent-player');
|
|
283
283
|
|
|
@@ -336,7 +336,7 @@ describe('VideoPlayerPool', () => {
|
|
|
336
336
|
const pool = new VideoPlayerPool();
|
|
337
337
|
const player = pool.getOrAddPlayer({ id: 'active-player' });
|
|
338
338
|
|
|
339
|
-
pool.setActivePlayer(player
|
|
339
|
+
pool.setActivePlayer(player);
|
|
340
340
|
expect(pool.getActivePlayer()).toBe(player);
|
|
341
341
|
|
|
342
342
|
pool.notifyPaused();
|
|
@@ -369,7 +369,7 @@ describe('VideoPlayerPool', () => {
|
|
|
369
369
|
({ activeVideoPlayer }) => callback(activeVideoPlayer),
|
|
370
370
|
);
|
|
371
371
|
|
|
372
|
-
pool.setActivePlayer(player
|
|
372
|
+
pool.setActivePlayer(player);
|
|
373
373
|
|
|
374
374
|
expect(callback).toHaveBeenCalledWith(player);
|
|
375
375
|
});
|
|
@@ -377,7 +377,7 @@ describe('VideoPlayerPool', () => {
|
|
|
377
377
|
it('should notify subscribers when active player is cleared', () => {
|
|
378
378
|
const pool = new VideoPlayerPool();
|
|
379
379
|
const player = pool.getOrAddPlayer({ id: 'player-1' });
|
|
380
|
-
pool.setActivePlayer(player
|
|
380
|
+
pool.setActivePlayer(player);
|
|
381
381
|
|
|
382
382
|
const callback = jest.fn();
|
|
383
383
|
pool.state.subscribeWithSelector(
|
|
@@ -420,7 +420,7 @@ describe('VideoPlayerPool', () => {
|
|
|
420
420
|
const player1 = pool.getOrAddPlayer({ id: 'player-1' });
|
|
421
421
|
pool.getOrAddPlayer({ id: 'player-2' });
|
|
422
422
|
|
|
423
|
-
pool.setActivePlayer(player1
|
|
423
|
+
pool.setActivePlayer(player1);
|
|
424
424
|
|
|
425
425
|
pool.removePlayer('player-1');
|
|
426
426
|
expect(pool.getActivePlayer()).toBeNull();
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { PendingTask } from 'stream-chat';
|
|
1
2
|
import { v4 as uuidv4 } from 'uuid';
|
|
2
3
|
|
|
3
4
|
import { addPendingTask, getPendingTasks, updatePendingTask } from '..';
|
|
@@ -31,9 +32,14 @@ describe('updatePendingTask', () => {
|
|
|
31
32
|
messageId: originalMessage.id,
|
|
32
33
|
payload: [originalMessage, {}],
|
|
33
34
|
type: 'send-message',
|
|
34
|
-
});
|
|
35
|
+
} as unknown as PendingTask);
|
|
35
36
|
|
|
36
|
-
const [originalRow] = await BetterSqlite.selectFromTable
|
|
37
|
+
const [originalRow] = await BetterSqlite.selectFromTable<{
|
|
38
|
+
id: number;
|
|
39
|
+
createdAt: string;
|
|
40
|
+
type: string;
|
|
41
|
+
payload: string;
|
|
42
|
+
}>('pendingTasks');
|
|
37
43
|
const [originalTask] = await getPendingTasks({ messageId: originalMessage.id });
|
|
38
44
|
|
|
39
45
|
const editedMessage = {
|
|
@@ -42,17 +48,22 @@ describe('updatePendingTask', () => {
|
|
|
42
48
|
};
|
|
43
49
|
|
|
44
50
|
await updatePendingTask({
|
|
45
|
-
id: originalTask.id,
|
|
51
|
+
id: originalTask.id as number,
|
|
46
52
|
task: {
|
|
47
53
|
channelId,
|
|
48
54
|
channelType: 'messaging',
|
|
49
55
|
messageId: originalMessage.id,
|
|
50
56
|
payload: [editedMessage, {}],
|
|
51
57
|
type: 'send-message',
|
|
52
|
-
},
|
|
58
|
+
} as unknown as PendingTask,
|
|
53
59
|
});
|
|
54
60
|
|
|
55
|
-
const [updatedRow] = await BetterSqlite.selectFromTable
|
|
61
|
+
const [updatedRow] = await BetterSqlite.selectFromTable<{
|
|
62
|
+
id: number;
|
|
63
|
+
createdAt: string;
|
|
64
|
+
type: string;
|
|
65
|
+
payload: string;
|
|
66
|
+
}>('pendingTasks');
|
|
56
67
|
const [updatedTask] = await getPendingTasks({ messageId: originalMessage.id });
|
|
57
68
|
|
|
58
69
|
expect(updatedRow.id).toBe(originalRow.id);
|
|
@@ -61,6 +72,6 @@ describe('updatePendingTask', () => {
|
|
|
61
72
|
expect(JSON.parse(updatedRow.payload)[0].text).toBe('edited text');
|
|
62
73
|
expect(updatedTask.id).toBe(originalTask.id);
|
|
63
74
|
expect(updatedTask.type).toBe('send-message');
|
|
64
|
-
expect(updatedTask.payload[0].text).toBe('edited text');
|
|
75
|
+
expect((updatedTask.payload as [{ text: string }, object])[0].text).toBe('edited text');
|
|
65
76
|
});
|
|
66
77
|
});
|
|
@@ -4,6 +4,7 @@ import { mapTaskToStorable } from '../mappers/mapTaskToStorable';
|
|
|
4
4
|
import { createDeleteQuery } from '../sqlite-utils/createDeleteQuery';
|
|
5
5
|
import { createUpsertQuery } from '../sqlite-utils/createUpsertQuery';
|
|
6
6
|
import { SqliteClient } from '../SqliteClient';
|
|
7
|
+
import type { PreparedQueries } from '../types';
|
|
7
8
|
|
|
8
9
|
/*
|
|
9
10
|
* addPendingTask - Adds a pending task to the database
|
|
@@ -15,7 +16,7 @@ import { SqliteClient } from '../SqliteClient';
|
|
|
15
16
|
export const addPendingTask = async (task: PendingTask) => {
|
|
16
17
|
const storable = mapTaskToStorable(task);
|
|
17
18
|
const { channelId, channelType, threadId, payload, type } = storable;
|
|
18
|
-
const queries = [];
|
|
19
|
+
const queries: PreparedQueries[] = [];
|
|
19
20
|
if (type === 'create-draft' || type === 'delete-draft') {
|
|
20
21
|
// Only one draft pending task is allowed per entity (i.e thread, channel etc).
|
|
21
22
|
// If multiple arrive, we'll simply take the last one (since deleteDraft does not
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { createDeleteQuery } from '../sqlite-utils/createDeleteQuery';
|
|
2
2
|
import { SqliteClient } from '../SqliteClient';
|
|
3
|
+
import type { PreparedQueries } from '../types';
|
|
3
4
|
|
|
4
5
|
export const deleteMessage = async ({ execute = true, id }: { id: string; execute?: boolean }) => {
|
|
5
|
-
const queries = [];
|
|
6
|
+
const queries: PreparedQueries[] = [];
|
|
6
7
|
|
|
7
8
|
queries.push(
|
|
8
9
|
createDeleteQuery('messages', {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DraftResponse } from 'stream-chat';
|
|
1
|
+
import type { DraftResponse, MessageResponseBase } from 'stream-chat';
|
|
2
2
|
|
|
3
3
|
import { upsertMessages } from './upsertMessages';
|
|
4
4
|
|
|
@@ -40,7 +40,7 @@ export const upsertDraft = async ({
|
|
|
40
40
|
draftMessage: storableDraftMessage,
|
|
41
41
|
});
|
|
42
42
|
|
|
43
|
-
const messagesToUpsert = [];
|
|
43
|
+
const messagesToUpsert: MessageResponseBase[] = [];
|
|
44
44
|
|
|
45
45
|
if (draft.quoted_message) {
|
|
46
46
|
messagesToUpsert.push(draft.quoted_message);
|
|
@@ -20,11 +20,13 @@ export const createCreateTableQuery = (tableName: Table): PreparedQueries[] => {
|
|
|
20
20
|
) || [];
|
|
21
21
|
|
|
22
22
|
const indexQueries: PreparedQueries[] =
|
|
23
|
-
tables[tableName].indexes?.map(
|
|
24
|
-
|
|
25
|
-
index.
|
|
26
|
-
|
|
27
|
-
|
|
23
|
+
tables[tableName].indexes?.map(
|
|
24
|
+
(index): PreparedQueries => [
|
|
25
|
+
`CREATE ${index.unique ? 'UNIQUE' : ''} INDEX IF NOT EXISTS ${
|
|
26
|
+
index.name
|
|
27
|
+
} ON ${tableName}(${index.columns.join(',')})`,
|
|
28
|
+
],
|
|
29
|
+
) || [];
|
|
28
30
|
|
|
29
31
|
return [
|
|
30
32
|
[
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import Database, { type Database as DatabaseType } from 'better-sqlite3';
|
|
2
|
+
|
|
3
|
+
import { tables } from '../store/schema';
|
|
4
|
+
|
|
5
|
+
export class BetterSqlite {
|
|
6
|
+
static db: DatabaseType | null = null;
|
|
7
|
+
|
|
8
|
+
static openDB = (): void => {
|
|
9
|
+
BetterSqlite.db = new Database('foobar.db');
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
static closeDB = (): void => {
|
|
13
|
+
BetterSqlite.db?.close();
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
static getTables = async (): Promise<unknown> => {
|
|
17
|
+
const tablesInDb = await BetterSqlite.db?.pragma('table_list;');
|
|
18
|
+
return tablesInDb;
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
static dropAllTables = (): void => {
|
|
22
|
+
const tableNames = Object.keys(tables);
|
|
23
|
+
|
|
24
|
+
tableNames.forEach((name) => {
|
|
25
|
+
const stmt = BetterSqlite.db?.prepare(`DROP TABLE IF EXISTS ${name}`);
|
|
26
|
+
stmt?.run();
|
|
27
|
+
});
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
static selectFromTable = async <TRow = Record<string, unknown>>(
|
|
31
|
+
table: string,
|
|
32
|
+
): Promise<TRow[]> => {
|
|
33
|
+
const stmt = await BetterSqlite.db?.prepare(`SELECT * FROM ${table}`);
|
|
34
|
+
const result = (stmt?.all() ?? []) as TRow[];
|
|
35
|
+
|
|
36
|
+
return result;
|
|
37
|
+
};
|
|
38
|
+
}
|