stream-chat-react-native-core 5.5.1 → 5.6.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/commonjs/components/Attachment/Gallery.js +21 -16
- package/lib/commonjs/components/Attachment/Gallery.js.map +1 -1
- package/lib/commonjs/components/Attachment/GalleryImage.js +19 -3
- package/lib/commonjs/components/Attachment/GalleryImage.js.map +1 -1
- package/lib/commonjs/components/Channel/Channel.js +535 -149
- package/lib/commonjs/components/Channel/Channel.js.map +1 -1
- package/lib/commonjs/components/Channel/hooks/useCreateMessagesContext.js +6 -0
- package/lib/commonjs/components/Channel/hooks/useCreateMessagesContext.js.map +1 -1
- package/lib/commonjs/components/ChannelList/ChannelList.js +4 -15
- package/lib/commonjs/components/ChannelList/ChannelList.js.map +1 -1
- package/lib/commonjs/components/ChannelList/hooks/usePaginatedChannels.js +112 -38
- package/lib/commonjs/components/ChannelList/hooks/usePaginatedChannels.js.map +1 -1
- package/lib/commonjs/components/Chat/Chat.js +16 -20
- package/lib/commonjs/components/Chat/Chat.js.map +1 -1
- package/lib/commonjs/components/Chat/hooks/useCreateChatContext.js +2 -4
- package/lib/commonjs/components/Chat/hooks/useCreateChatContext.js.map +1 -1
- package/lib/commonjs/components/Message/Message.js +21 -10
- package/lib/commonjs/components/Message/Message.js.map +1 -1
- package/lib/commonjs/components/Message/MessageSimple/MessageFooter.js +14 -12
- package/lib/commonjs/components/Message/MessageSimple/MessageFooter.js.map +1 -1
- package/lib/commonjs/components/Message/hooks/useMessageActionHandlers.js +9 -30
- package/lib/commonjs/components/Message/hooks/useMessageActionHandlers.js.map +1 -1
- package/lib/commonjs/components/Message/hooks/useMessageActions.js +21 -19
- package/lib/commonjs/components/Message/hooks/useMessageActions.js.map +1 -1
- package/lib/commonjs/components/MessageInput/FileUploadPreview.js +28 -21
- package/lib/commonjs/components/MessageInput/FileUploadPreview.js.map +1 -1
- package/lib/commonjs/components/MessageInput/ImageUploadPreview.js +23 -16
- package/lib/commonjs/components/MessageInput/ImageUploadPreview.js.map +1 -1
- package/lib/commonjs/components/MessageInput/MessageInput.js +39 -27
- package/lib/commonjs/components/MessageInput/MessageInput.js.map +1 -1
- package/lib/commonjs/components/MessageInput/SendButton.js +1 -1
- package/lib/commonjs/components/MessageInput/SendButton.js.map +1 -1
- package/lib/commonjs/components/index.js +1 -14
- package/lib/commonjs/components/index.js.map +1 -1
- package/lib/commonjs/contexts/chatContext/ChatContext.js +2 -2
- package/lib/commonjs/contexts/chatContext/ChatContext.js.map +1 -1
- package/lib/commonjs/contexts/messageInputContext/MessageInputContext.js +134 -86
- package/lib/commonjs/contexts/messageInputContext/MessageInputContext.js.map +1 -1
- package/lib/commonjs/contexts/messageInputContext/hooks/useMessageDetailsForState.js +1 -0
- package/lib/commonjs/contexts/messageInputContext/hooks/useMessageDetailsForState.js.map +1 -1
- package/lib/commonjs/contexts/messagesContext/MessagesContext.js +2 -2
- package/lib/commonjs/contexts/messagesContext/MessagesContext.js.map +1 -1
- package/lib/commonjs/hooks/useTranslatedMessage.js +1 -1
- package/lib/commonjs/hooks/useTranslatedMessage.js.map +1 -1
- package/lib/commonjs/mock-builders/DB/mock.js +2 -2
- package/lib/commonjs/mock-builders/DB/mock.js.map +1 -1
- package/lib/commonjs/mock-builders/api/deleteMessage.js +20 -0
- package/lib/commonjs/mock-builders/api/deleteMessage.js.map +1 -0
- package/lib/commonjs/mock-builders/api/deleteReaction.js +21 -0
- package/lib/commonjs/mock-builders/api/deleteReaction.js.map +1 -0
- package/lib/commonjs/mock-builders/api/sendReaction.js +21 -0
- package/lib/commonjs/mock-builders/api/sendReaction.js.map +1 -0
- package/lib/commonjs/mock-builders/event/connectionChanged.js +2 -0
- package/lib/commonjs/mock-builders/event/connectionChanged.js.map +1 -1
- package/lib/commonjs/store/QuickSqliteClient.js +40 -51
- package/lib/commonjs/store/QuickSqliteClient.js.map +1 -1
- package/lib/commonjs/store/apis/addPendingTask.js +37 -0
- package/lib/commonjs/store/apis/addPendingTask.js.map +1 -0
- package/lib/commonjs/store/apis/deleteMessage.js +26 -0
- package/lib/commonjs/store/apis/deleteMessage.js.map +1 -0
- package/lib/commonjs/store/apis/deletePendingTask.js +22 -0
- package/lib/commonjs/store/apis/deletePendingTask.js.map +1 -0
- package/lib/commonjs/store/apis/deleteReaction.js +30 -0
- package/lib/commonjs/store/apis/deleteReaction.js.map +1 -0
- package/lib/commonjs/store/apis/getChannelMessages.js +3 -3
- package/lib/commonjs/store/apis/getChannelMessages.js.map +1 -1
- package/lib/commonjs/store/apis/getChannels.js +1 -1
- package/lib/commonjs/store/apis/getChannels.js.map +1 -1
- package/lib/commonjs/store/apis/getPendingTasks.js +26 -0
- package/lib/commonjs/store/apis/getPendingTasks.js.map +1 -0
- package/lib/commonjs/store/apis/index.js +13 -0
- package/lib/commonjs/store/apis/index.js.map +1 -1
- package/lib/commonjs/store/apis/insertReaction.js +28 -0
- package/lib/commonjs/store/apis/insertReaction.js.map +1 -0
- package/lib/commonjs/store/apis/updateMessage.js.map +1 -1
- package/lib/commonjs/store/apis/updateReaction.js.map +1 -1
- package/lib/commonjs/store/mappers/mapDateTimeToStorable.js.map +1 -1
- package/lib/commonjs/store/mappers/mapMessageToStorable.js +3 -1
- package/lib/commonjs/store/mappers/mapMessageToStorable.js.map +1 -1
- package/lib/commonjs/store/mappers/mapStorableToTask.js +23 -0
- package/lib/commonjs/store/mappers/mapStorableToTask.js.map +1 -0
- package/lib/commonjs/store/mappers/mapTaskToStorable.js +18 -0
- package/lib/commonjs/store/mappers/mapTaskToStorable.js.map +1 -0
- package/lib/commonjs/store/schema.js +11 -0
- package/lib/commonjs/store/schema.js.map +1 -1
- package/lib/commonjs/store/sqlite-utils/appendOrderByClause.js +24 -0
- package/lib/commonjs/store/sqlite-utils/appendOrderByClause.js.map +1 -0
- package/lib/commonjs/store/sqlite-utils/createCreateTableQuery.js +1 -1
- package/lib/commonjs/store/sqlite-utils/createCreateTableQuery.js.map +1 -1
- package/lib/commonjs/store/sqlite-utils/createSelectQuery.js +8 -1
- package/lib/commonjs/store/sqlite-utils/createSelectQuery.js.map +1 -1
- package/lib/commonjs/store/sqlite-utils/createUpdateQuery.js +2 -2
- package/lib/commonjs/store/sqlite-utils/createUpdateQuery.js.map +1 -1
- package/lib/commonjs/store/sqlite-utils/createUpsertQuery.js +1 -1
- package/lib/commonjs/store/sqlite-utils/createUpsertQuery.js.map +1 -1
- package/lib/commonjs/utils/DBSyncManager.js +436 -0
- package/lib/commonjs/utils/DBSyncManager.js.map +1 -0
- package/lib/commonjs/utils/addReactionToLocalState.js +92 -0
- package/lib/commonjs/utils/addReactionToLocalState.js.map +1 -0
- package/lib/commonjs/utils/removeReactionFromLocalState.js +39 -0
- package/lib/commonjs/utils/removeReactionFromLocalState.js.map +1 -0
- package/lib/{module/components/Message → commonjs}/utils/removeReservedFields.js +1 -1
- package/lib/commonjs/utils/removeReservedFields.js.map +1 -0
- package/lib/commonjs/utils/utils.js +9 -3
- package/lib/commonjs/utils/utils.js.map +1 -1
- package/lib/commonjs/version.json +1 -1
- package/lib/module/components/Attachment/Gallery.js +21 -16
- package/lib/module/components/Attachment/Gallery.js.map +1 -1
- package/lib/module/components/Attachment/GalleryImage.js +19 -3
- package/lib/module/components/Attachment/GalleryImage.js.map +1 -1
- package/lib/module/components/Channel/Channel.js +535 -149
- package/lib/module/components/Channel/Channel.js.map +1 -1
- package/lib/module/components/Channel/hooks/useCreateMessagesContext.js +6 -0
- package/lib/module/components/Channel/hooks/useCreateMessagesContext.js.map +1 -1
- package/lib/module/components/ChannelList/ChannelList.js +4 -15
- package/lib/module/components/ChannelList/ChannelList.js.map +1 -1
- package/lib/module/components/ChannelList/hooks/usePaginatedChannels.js +112 -38
- package/lib/module/components/ChannelList/hooks/usePaginatedChannels.js.map +1 -1
- package/lib/module/components/Chat/Chat.js +16 -20
- package/lib/module/components/Chat/Chat.js.map +1 -1
- package/lib/module/components/Chat/hooks/useCreateChatContext.js +2 -4
- package/lib/module/components/Chat/hooks/useCreateChatContext.js.map +1 -1
- package/lib/module/components/Message/Message.js +21 -10
- package/lib/module/components/Message/Message.js.map +1 -1
- package/lib/module/components/Message/MessageSimple/MessageFooter.js +14 -12
- package/lib/module/components/Message/MessageSimple/MessageFooter.js.map +1 -1
- package/lib/module/components/Message/hooks/useMessageActionHandlers.js +9 -30
- package/lib/module/components/Message/hooks/useMessageActionHandlers.js.map +1 -1
- package/lib/module/components/Message/hooks/useMessageActions.js +21 -19
- package/lib/module/components/Message/hooks/useMessageActions.js.map +1 -1
- package/lib/module/components/MessageInput/FileUploadPreview.js +28 -21
- package/lib/module/components/MessageInput/FileUploadPreview.js.map +1 -1
- package/lib/module/components/MessageInput/ImageUploadPreview.js +23 -16
- package/lib/module/components/MessageInput/ImageUploadPreview.js.map +1 -1
- package/lib/module/components/MessageInput/MessageInput.js +39 -27
- package/lib/module/components/MessageInput/MessageInput.js.map +1 -1
- package/lib/module/components/MessageInput/SendButton.js +1 -1
- package/lib/module/components/MessageInput/SendButton.js.map +1 -1
- package/lib/module/components/index.js +1 -14
- package/lib/module/components/index.js.map +1 -1
- package/lib/module/contexts/chatContext/ChatContext.js +2 -2
- package/lib/module/contexts/chatContext/ChatContext.js.map +1 -1
- package/lib/module/contexts/messageInputContext/MessageInputContext.js +134 -86
- package/lib/module/contexts/messageInputContext/MessageInputContext.js.map +1 -1
- package/lib/module/contexts/messageInputContext/hooks/useMessageDetailsForState.js +1 -0
- package/lib/module/contexts/messageInputContext/hooks/useMessageDetailsForState.js.map +1 -1
- package/lib/module/contexts/messagesContext/MessagesContext.js +2 -2
- package/lib/module/contexts/messagesContext/MessagesContext.js.map +1 -1
- package/lib/module/hooks/useTranslatedMessage.js +1 -1
- package/lib/module/hooks/useTranslatedMessage.js.map +1 -1
- package/lib/module/mock-builders/DB/mock.js +2 -2
- package/lib/module/mock-builders/DB/mock.js.map +1 -1
- package/lib/module/mock-builders/api/deleteMessage.js +20 -0
- package/lib/module/mock-builders/api/deleteMessage.js.map +1 -0
- package/lib/module/mock-builders/api/deleteReaction.js +21 -0
- package/lib/module/mock-builders/api/deleteReaction.js.map +1 -0
- package/lib/module/mock-builders/api/sendReaction.js +21 -0
- package/lib/module/mock-builders/api/sendReaction.js.map +1 -0
- package/lib/module/mock-builders/event/connectionChanged.js +2 -0
- package/lib/module/mock-builders/event/connectionChanged.js.map +1 -1
- package/lib/module/store/QuickSqliteClient.js +40 -51
- package/lib/module/store/QuickSqliteClient.js.map +1 -1
- package/lib/module/store/apis/addPendingTask.js +37 -0
- package/lib/module/store/apis/addPendingTask.js.map +1 -0
- package/lib/module/store/apis/deleteMessage.js +26 -0
- package/lib/module/store/apis/deleteMessage.js.map +1 -0
- package/lib/module/store/apis/deletePendingTask.js +22 -0
- package/lib/module/store/apis/deletePendingTask.js.map +1 -0
- package/lib/module/store/apis/deleteReaction.js +30 -0
- package/lib/module/store/apis/deleteReaction.js.map +1 -0
- package/lib/module/store/apis/getChannelMessages.js +3 -3
- package/lib/module/store/apis/getChannelMessages.js.map +1 -1
- package/lib/module/store/apis/getChannels.js +1 -1
- package/lib/module/store/apis/getChannels.js.map +1 -1
- package/lib/module/store/apis/getPendingTasks.js +26 -0
- package/lib/module/store/apis/getPendingTasks.js.map +1 -0
- package/lib/module/store/apis/index.js +13 -0
- package/lib/module/store/apis/index.js.map +1 -1
- package/lib/module/store/apis/insertReaction.js +28 -0
- package/lib/module/store/apis/insertReaction.js.map +1 -0
- package/lib/module/store/apis/updateMessage.js.map +1 -1
- package/lib/module/store/apis/updateReaction.js.map +1 -1
- package/lib/module/store/mappers/mapDateTimeToStorable.js.map +1 -1
- package/lib/module/store/mappers/mapMessageToStorable.js +3 -1
- package/lib/module/store/mappers/mapMessageToStorable.js.map +1 -1
- package/lib/module/store/mappers/mapStorableToTask.js +23 -0
- package/lib/module/store/mappers/mapStorableToTask.js.map +1 -0
- package/lib/module/store/mappers/mapTaskToStorable.js +18 -0
- package/lib/module/store/mappers/mapTaskToStorable.js.map +1 -0
- package/lib/module/store/schema.js +11 -0
- package/lib/module/store/schema.js.map +1 -1
- package/lib/module/store/sqlite-utils/appendOrderByClause.js +24 -0
- package/lib/module/store/sqlite-utils/appendOrderByClause.js.map +1 -0
- package/lib/module/store/sqlite-utils/createCreateTableQuery.js +1 -1
- package/lib/module/store/sqlite-utils/createCreateTableQuery.js.map +1 -1
- package/lib/module/store/sqlite-utils/createSelectQuery.js +8 -1
- package/lib/module/store/sqlite-utils/createSelectQuery.js.map +1 -1
- package/lib/module/store/sqlite-utils/createUpdateQuery.js +2 -2
- package/lib/module/store/sqlite-utils/createUpdateQuery.js.map +1 -1
- package/lib/module/store/sqlite-utils/createUpsertQuery.js +1 -1
- package/lib/module/store/sqlite-utils/createUpsertQuery.js.map +1 -1
- package/lib/module/utils/DBSyncManager.js +436 -0
- package/lib/module/utils/DBSyncManager.js.map +1 -0
- package/lib/module/utils/addReactionToLocalState.js +92 -0
- package/lib/module/utils/addReactionToLocalState.js.map +1 -0
- package/lib/module/utils/removeReactionFromLocalState.js +39 -0
- package/lib/module/utils/removeReactionFromLocalState.js.map +1 -0
- package/lib/{commonjs/components/Message → module}/utils/removeReservedFields.js +1 -1
- package/lib/module/utils/removeReservedFields.js.map +1 -0
- package/lib/module/utils/utils.js +9 -3
- package/lib/module/utils/utils.js.map +1 -1
- package/lib/module/version.json +1 -1
- package/lib/typescript/components/Channel/Channel.d.ts +1 -1
- package/lib/typescript/components/Channel/hooks/useCreateMessagesContext.d.ts +1 -1
- package/lib/typescript/components/ChannelList/hooks/usePaginatedChannels.d.ts +2 -1
- package/lib/typescript/components/Chat/hooks/useCreateChatContext.d.ts +1 -1
- package/lib/typescript/components/Message/Message.d.ts +1 -1
- package/lib/typescript/components/Message/hooks/useMessageActionHandlers.d.ts +1 -1
- package/lib/typescript/components/Message/hooks/useMessageActions.d.ts +1 -1
- package/lib/typescript/components/MessageInput/FileUploadPreview.d.ts +2 -1
- package/lib/typescript/components/MessageInput/ImageUploadPreview.d.ts +2 -1
- package/lib/typescript/components/MessageInput/MessageInput.d.ts +2 -1
- package/lib/typescript/components/index.d.ts +1 -2
- package/lib/typescript/contexts/chatContext/ChatContext.d.ts +1 -2
- package/lib/typescript/contexts/messageContext/MessageContext.d.ts +1 -1
- package/lib/typescript/contexts/messagesContext/MessagesContext.d.ts +3 -0
- package/lib/typescript/store/apis/addPendingTask.d.ts +2 -0
- package/lib/typescript/store/apis/deleteMessage.d.ts +4 -0
- package/lib/typescript/store/apis/deletePendingTask.d.ts +3 -0
- package/lib/typescript/store/apis/deleteReaction.d.ts +6 -0
- package/lib/typescript/store/apis/getChannelMessages.d.ts +1 -1
- package/lib/typescript/store/apis/getPendingTasks.d.ts +3 -0
- package/lib/typescript/store/apis/index.d.ts +1 -0
- package/lib/typescript/store/apis/insertReaction.d.ts +6 -0
- package/lib/typescript/store/apis/updateMessage.d.ts +2 -2
- package/lib/typescript/store/apis/updateReaction.d.ts +2 -2
- package/lib/typescript/store/mappers/mapDateTimeToStorable.d.ts +1 -1
- package/lib/typescript/store/mappers/mapMessageToStorable.d.ts +2 -2
- package/lib/typescript/store/mappers/mapStorableToTask.d.ts +2 -0
- package/lib/typescript/store/mappers/mapTaskToStorable.d.ts +26 -0
- package/lib/typescript/store/schema.d.ts +12 -1
- package/lib/typescript/store/sqlite-utils/appendOrderByClause.d.ts +3 -0
- package/lib/typescript/store/sqlite-utils/createSelectQuery.d.ts +1 -1
- package/lib/typescript/store/types.d.ts +21 -0
- package/lib/typescript/types/types.d.ts +3 -1
- package/lib/typescript/utils/DBSyncManager.d.ts +47 -0
- package/lib/typescript/utils/addReactionToLocalState.d.ts +9 -0
- package/lib/typescript/utils/removeReactionFromLocalState.d.ts +8 -0
- package/lib/typescript/{components/Message/utils → utils}/removeReservedFields.d.ts +2 -2
- package/lib/typescript/utils/utils.d.ts +3 -3
- package/package.json +4 -3
- package/src/__tests__/offline-feature.test.js +19 -2
- package/src/__tests__/optimistic-update.test.js +368 -0
- package/src/components/Attachment/Gallery.tsx +5 -1
- package/src/components/Attachment/GalleryImage.tsx +16 -2
- package/src/components/Channel/Channel.tsx +266 -57
- package/src/components/Channel/hooks/useCreateMessagesContext.ts +6 -0
- package/src/components/ChannelList/ChannelList.tsx +2 -10
- package/src/components/ChannelList/hooks/listeners/__tests__/useChannelUpdated.test.tsx +0 -1
- package/src/components/ChannelList/hooks/usePaginatedChannels.ts +76 -26
- package/src/components/Chat/Chat.tsx +5 -9
- package/src/components/Chat/__tests__/Chat.test.js +1 -1
- package/src/components/Chat/hooks/useCreateChatContext.ts +0 -2
- package/src/components/Message/Message.tsx +18 -2
- package/src/components/Message/MessageSimple/MessageFooter.tsx +2 -1
- package/src/components/Message/hooks/useMessageActionHandlers.ts +10 -21
- package/src/components/Message/hooks/useMessageActions.tsx +10 -5
- package/src/components/MessageInput/FileUploadPreview.tsx +7 -2
- package/src/components/MessageInput/ImageUploadPreview.tsx +7 -3
- package/src/components/MessageInput/MessageInput.tsx +17 -3
- package/src/components/MessageInput/SendButton.tsx +1 -1
- package/src/components/index.ts +1 -2
- package/src/contexts/chatContext/ChatContext.tsx +1 -2
- package/src/contexts/messageInputContext/MessageInputContext.tsx +95 -57
- package/src/contexts/messageInputContext/__tests__/__snapshots__/sendMessage.test.tsx.snap +29 -3
- package/src/contexts/messageInputContext/hooks/useMessageDetailsForState.ts +1 -0
- package/src/contexts/messagesContext/MessagesContext.tsx +4 -1
- package/src/hooks/useTranslatedMessage.ts +1 -1
- package/src/mock-builders/DB/mock.ts +2 -2
- package/src/mock-builders/api/deleteMessage.js +18 -0
- package/src/mock-builders/api/deleteReaction.js +19 -0
- package/src/mock-builders/api/sendReaction.tsx +19 -0
- package/src/mock-builders/event/connectionChanged.js +2 -1
- package/src/store/QuickSqliteClient.ts +39 -37
- package/src/store/apis/addPendingTask.ts +24 -0
- package/src/store/apis/deleteMessage.ts +13 -0
- package/src/store/apis/deletePendingTask.ts +12 -0
- package/src/store/apis/deleteReaction.ts +26 -0
- package/src/store/apis/getChannelMessages.ts +1 -1
- package/src/store/apis/getChannels.ts +2 -2
- package/src/store/apis/getPendingTasks.ts +13 -0
- package/src/store/apis/index.ts +1 -0
- package/src/store/apis/insertReaction.ts +29 -0
- package/src/store/apis/updateMessage.ts +2 -2
- package/src/store/apis/updateReaction.ts +2 -2
- package/src/store/mappers/mapDateTimeToStorable.ts +1 -1
- package/src/store/mappers/mapMessageToStorable.ts +8 -2
- package/src/store/mappers/mapStorableToTask.ts +13 -0
- package/src/store/mappers/mapTaskToStorable.ts +7 -0
- package/src/store/schema.ts +25 -1
- package/src/store/sqlite-utils/appendOrderByClause.ts +24 -0
- package/src/store/sqlite-utils/createCreateTableQuery.ts +2 -2
- package/src/store/sqlite-utils/createSelectQuery.ts +4 -1
- package/src/store/sqlite-utils/createUpdateQuery.ts +3 -2
- package/src/store/sqlite-utils/createUpsertQuery.ts +1 -1
- package/src/store/types.ts +28 -0
- package/src/types/types.ts +4 -1
- package/src/utils/DBSyncManager.ts +222 -0
- package/src/utils/addReactionToLocalState.ts +87 -0
- package/src/utils/removeReactionFromLocalState.ts +39 -0
- package/src/{components/Message/utils → utils}/removeReservedFields.ts +7 -3
- package/src/utils/utils.ts +14 -5
- package/src/version.json +1 -1
- package/lib/commonjs/components/Chat/hooks/useConnectionRecovered.js +0 -171
- package/lib/commonjs/components/Chat/hooks/useConnectionRecovered.js.map +0 -1
- package/lib/commonjs/components/Message/utils/removeReservedFields.js.map +0 -1
- package/lib/module/components/Chat/hooks/useConnectionRecovered.js +0 -171
- package/lib/module/components/Chat/hooks/useConnectionRecovered.js.map +0 -1
- package/lib/module/components/Message/utils/removeReservedFields.js.map +0 -1
- package/lib/typescript/components/Chat/hooks/useConnectionRecovered.d.ts +0 -10
- package/src/components/Chat/hooks/useConnectionRecovered.ts +0 -92
|
@@ -38,6 +38,7 @@ import type { UploadProgressIndicatorProps } from '../../components/MessageInput
|
|
|
38
38
|
import type { MessageType } from '../../components/MessageList/hooks/useMessageList';
|
|
39
39
|
import { compressImage, getLocalAssetUri, pickDocument } from '../../native';
|
|
40
40
|
import type { Asset, DefaultStreamChatGenerics, File, UnknownType } from '../../types/types';
|
|
41
|
+
import { removeReservedFields } from '../../utils/removeReservedFields';
|
|
41
42
|
import {
|
|
42
43
|
ACITriggerSettings,
|
|
43
44
|
ACITriggerSettingsParams,
|
|
@@ -416,7 +417,7 @@ export const MessageInputProvider = <
|
|
|
416
417
|
}>) => {
|
|
417
418
|
const { closePicker, openPicker, selectedPicker, setSelectedPicker } =
|
|
418
419
|
useAttachmentPickerContext();
|
|
419
|
-
const { appSettings, client } = useChatContext<StreamChatGenerics>();
|
|
420
|
+
const { appSettings, client, enableOfflineSupport } = useChatContext<StreamChatGenerics>();
|
|
420
421
|
|
|
421
422
|
const getFileUploadConfig = () => {
|
|
422
423
|
const fileConfig = appSettings?.app?.file_upload_config;
|
|
@@ -490,19 +491,19 @@ export const MessageInputProvider = <
|
|
|
490
491
|
return true;
|
|
491
492
|
}
|
|
492
493
|
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
494
|
+
const imagesAndFiles = [...imageUploads, ...fileUploads];
|
|
495
|
+
if (enableOfflineSupport) {
|
|
496
|
+
// Allow only if none of the attachments have unsupported status
|
|
497
|
+
for (const file of imagesAndFiles) {
|
|
498
|
+
if (file.state === FileState.NOT_SUPPORTED) {
|
|
499
|
+
return false;
|
|
500
|
+
}
|
|
500
501
|
}
|
|
501
502
|
|
|
502
503
|
return true;
|
|
503
504
|
}
|
|
504
505
|
|
|
505
|
-
for (const file of
|
|
506
|
+
for (const file of imagesAndFiles) {
|
|
506
507
|
if (!file || file.state === FileState.UPLOAD_FAILED) {
|
|
507
508
|
continue;
|
|
508
509
|
}
|
|
@@ -622,6 +623,62 @@ export const MessageInputProvider = <
|
|
|
622
623
|
setText('');
|
|
623
624
|
};
|
|
624
625
|
|
|
626
|
+
const mapImageUploadToAttachment = (image: ImageUpload) => {
|
|
627
|
+
const mime_type: string | boolean = lookup(image.file.filename as string);
|
|
628
|
+
return {
|
|
629
|
+
fallback: image.file.name,
|
|
630
|
+
image_url: image.url,
|
|
631
|
+
mime_type: mime_type ? mime_type : undefined,
|
|
632
|
+
original_height: image.height,
|
|
633
|
+
original_width: image.width,
|
|
634
|
+
originalFile: image.file,
|
|
635
|
+
type: 'image',
|
|
636
|
+
} as Attachment;
|
|
637
|
+
};
|
|
638
|
+
|
|
639
|
+
const mapFileUploadToAttachment = (file: FileUpload) => {
|
|
640
|
+
const mime_type: string | boolean = lookup(file.file.name as string);
|
|
641
|
+
if (file.file.type?.startsWith('image/')) {
|
|
642
|
+
return {
|
|
643
|
+
fallback: file.file.name,
|
|
644
|
+
image_url: file.url,
|
|
645
|
+
mime_type: mime_type ? mime_type : undefined,
|
|
646
|
+
originalFile: file.file,
|
|
647
|
+
type: 'image',
|
|
648
|
+
};
|
|
649
|
+
} else if (file.file.type?.startsWith('audio/')) {
|
|
650
|
+
return {
|
|
651
|
+
asset_url: file.url || file.file.uri,
|
|
652
|
+
duration: file.file.duration,
|
|
653
|
+
file_size: file.file.size,
|
|
654
|
+
mime_type: file.file.type,
|
|
655
|
+
originalFile: file.file,
|
|
656
|
+
title: file.file.name,
|
|
657
|
+
type: 'audio',
|
|
658
|
+
};
|
|
659
|
+
} else if (file.file.type?.startsWith('video/')) {
|
|
660
|
+
return {
|
|
661
|
+
asset_url: file.url || file.file.uri,
|
|
662
|
+
duration: file.file.duration,
|
|
663
|
+
file_size: file.file.size,
|
|
664
|
+
mime_type: file.file.type,
|
|
665
|
+
originalFile: file.file,
|
|
666
|
+
thumb_url: file.thumb_url,
|
|
667
|
+
title: file.file.name,
|
|
668
|
+
type: 'video',
|
|
669
|
+
};
|
|
670
|
+
} else {
|
|
671
|
+
return {
|
|
672
|
+
asset_url: file.url || file.file.uri,
|
|
673
|
+
file_size: file.file.size,
|
|
674
|
+
mime_type: file.file.type,
|
|
675
|
+
originalFile: file.file,
|
|
676
|
+
title: file.file.name,
|
|
677
|
+
type: 'file',
|
|
678
|
+
};
|
|
679
|
+
}
|
|
680
|
+
};
|
|
681
|
+
|
|
625
682
|
// TODO: Figure out why this is async, as it doesn't await any promise.
|
|
626
683
|
// eslint-disable-next-line require-await
|
|
627
684
|
const sendMessage = async () => {
|
|
@@ -647,7 +704,15 @@ export const MessageInputProvider = <
|
|
|
647
704
|
|
|
648
705
|
const attachments = [] as Attachment<StreamChatGenerics>[];
|
|
649
706
|
for (const image of imageUploads) {
|
|
650
|
-
if (
|
|
707
|
+
if (enableOfflineSupport) {
|
|
708
|
+
if (image.state === FileState.NOT_SUPPORTED) {
|
|
709
|
+
return;
|
|
710
|
+
}
|
|
711
|
+
attachments.push(mapImageUploadToAttachment(image));
|
|
712
|
+
continue;
|
|
713
|
+
}
|
|
714
|
+
|
|
715
|
+
if ((!image || image.state === FileState.UPLOAD_FAILED) && !enableOfflineSupport) {
|
|
651
716
|
continue;
|
|
652
717
|
}
|
|
653
718
|
|
|
@@ -666,67 +731,32 @@ export const MessageInputProvider = <
|
|
|
666
731
|
}
|
|
667
732
|
|
|
668
733
|
// To get the mime type of the image from the file name and send it as an response for an image
|
|
669
|
-
const mime_type: string | boolean = lookup(image.file.filename as string);
|
|
670
|
-
|
|
671
734
|
if (image.state === FileState.UPLOADED || image.state === FileState.FINISHED) {
|
|
672
|
-
attachments.push(
|
|
673
|
-
fallback: image.file.name,
|
|
674
|
-
image_url: image.url,
|
|
675
|
-
mime_type: mime_type ? mime_type : undefined,
|
|
676
|
-
original_height: image.height,
|
|
677
|
-
original_width: image.width,
|
|
678
|
-
type: 'image',
|
|
679
|
-
});
|
|
735
|
+
attachments.push(mapImageUploadToAttachment(image));
|
|
680
736
|
}
|
|
681
737
|
}
|
|
682
738
|
|
|
683
739
|
for (const file of fileUploads) {
|
|
740
|
+
if (enableOfflineSupport) {
|
|
741
|
+
if (file.state === FileState.NOT_SUPPORTED) {
|
|
742
|
+
return;
|
|
743
|
+
}
|
|
744
|
+
attachments.push(mapFileUploadToAttachment(file));
|
|
745
|
+
continue;
|
|
746
|
+
}
|
|
747
|
+
|
|
684
748
|
if (!file || file.state === FileState.UPLOAD_FAILED) {
|
|
685
749
|
continue;
|
|
686
750
|
}
|
|
751
|
+
|
|
687
752
|
if (file.state === FileState.UPLOADING) {
|
|
688
753
|
// TODO: show error to user that they should wait until image is uploaded
|
|
689
754
|
sending.current = false;
|
|
690
755
|
return;
|
|
691
756
|
}
|
|
692
|
-
const mime_type: string | boolean = lookup(file.file.name as string);
|
|
693
757
|
|
|
694
758
|
if (file.state === FileState.UPLOADED || file.state === FileState.FINISHED) {
|
|
695
|
-
|
|
696
|
-
attachments.push({
|
|
697
|
-
fallback: file.file.name,
|
|
698
|
-
image_url: file.url,
|
|
699
|
-
mime_type: mime_type ? mime_type : undefined,
|
|
700
|
-
type: 'image',
|
|
701
|
-
});
|
|
702
|
-
} else if (file.file.type?.startsWith('audio/')) {
|
|
703
|
-
attachments.push({
|
|
704
|
-
asset_url: file.url,
|
|
705
|
-
duration: file.file.duration,
|
|
706
|
-
file_size: file.file.size,
|
|
707
|
-
mime_type: file.file.type,
|
|
708
|
-
title: file.file.name,
|
|
709
|
-
type: 'audio',
|
|
710
|
-
});
|
|
711
|
-
} else if (file.file.type?.startsWith('video/')) {
|
|
712
|
-
attachments.push({
|
|
713
|
-
asset_url: file.url,
|
|
714
|
-
duration: file.file.duration,
|
|
715
|
-
file_size: file.file.size,
|
|
716
|
-
mime_type: file.file.type,
|
|
717
|
-
thumb_url: file.thumb_url,
|
|
718
|
-
title: file.file.name,
|
|
719
|
-
type: 'video',
|
|
720
|
-
});
|
|
721
|
-
} else {
|
|
722
|
-
attachments.push({
|
|
723
|
-
asset_url: file.url,
|
|
724
|
-
file_size: file.file.size,
|
|
725
|
-
mime_type: file.file.type,
|
|
726
|
-
title: file.file.name,
|
|
727
|
-
type: 'file',
|
|
728
|
-
});
|
|
729
|
-
}
|
|
759
|
+
attachments.push(mapFileUploadToAttachment(file));
|
|
730
760
|
}
|
|
731
761
|
}
|
|
732
762
|
|
|
@@ -748,7 +778,12 @@ export const MessageInputProvider = <
|
|
|
748
778
|
// TODO: Remove this line and show an error when submit fails
|
|
749
779
|
value.clearEditingState();
|
|
750
780
|
|
|
751
|
-
const updateMessagePromise = value
|
|
781
|
+
const updateMessagePromise = value
|
|
782
|
+
.editMessage(
|
|
783
|
+
// @ts-ignore
|
|
784
|
+
removeReservedFields(updatedMessage),
|
|
785
|
+
)
|
|
786
|
+
.then(value.clearEditingState);
|
|
752
787
|
resetInput(attachments);
|
|
753
788
|
logChatPromiseExecution(updateMessagePromise, 'update message');
|
|
754
789
|
|
|
@@ -1073,8 +1108,11 @@ export const MessageInputProvider = <
|
|
|
1073
1108
|
|
|
1074
1109
|
const newImage: ImageUpload = {
|
|
1075
1110
|
file: image,
|
|
1111
|
+
height: image.height,
|
|
1076
1112
|
id,
|
|
1077
1113
|
state: imageState,
|
|
1114
|
+
url: image.uri,
|
|
1115
|
+
width: image.width,
|
|
1078
1116
|
};
|
|
1079
1117
|
|
|
1080
1118
|
await Promise.all([
|
|
@@ -7,12 +7,14 @@ Object {
|
|
|
7
7
|
"fallback": undefined,
|
|
8
8
|
"image_url": undefined,
|
|
9
9
|
"mime_type": undefined,
|
|
10
|
+
"originalFile": Object {
|
|
11
|
+
"uri": "http://www.jackblack.com/tenac_iousd.bmp",
|
|
12
|
+
},
|
|
10
13
|
"original_height": undefined,
|
|
11
14
|
"original_width": undefined,
|
|
12
15
|
"type": "image",
|
|
13
16
|
},
|
|
14
17
|
],
|
|
15
|
-
"created_at": "Sat Jul 02 2022 23:55:13 GMT+0530 (India Standard Time)",
|
|
16
18
|
"html": "<p>regular</p>",
|
|
17
19
|
"id": "7a85f744-cc89-4f82-a1d4-5456432cc8bf",
|
|
18
20
|
"mentioned_users": Array [
|
|
@@ -21,8 +23,6 @@ Object {
|
|
|
21
23
|
],
|
|
22
24
|
"quoted_message": undefined,
|
|
23
25
|
"text": "",
|
|
24
|
-
"type": "regular",
|
|
25
|
-
"updated_at": "Sat Jul 02 2022 23:55:13 GMT+0530 (India Standard Time)",
|
|
26
26
|
"user": Object {
|
|
27
27
|
"banned": false,
|
|
28
28
|
"created_at": "2020-04-27T13:39:49.331742Z",
|
|
@@ -43,6 +43,11 @@ Object {
|
|
|
43
43
|
"asset_url": undefined,
|
|
44
44
|
"file_size": undefined,
|
|
45
45
|
"mime_type": "file",
|
|
46
|
+
"originalFile": Object {
|
|
47
|
+
"name": "dummy.pdf",
|
|
48
|
+
"state": "uploaded",
|
|
49
|
+
"type": "file",
|
|
50
|
+
},
|
|
46
51
|
"title": "dummy.pdf",
|
|
47
52
|
"type": "file",
|
|
48
53
|
},
|
|
@@ -51,6 +56,11 @@ Object {
|
|
|
51
56
|
"duration": undefined,
|
|
52
57
|
"file_size": undefined,
|
|
53
58
|
"mime_type": "video/mp4",
|
|
59
|
+
"originalFile": Object {
|
|
60
|
+
"name": "dummy.pdf",
|
|
61
|
+
"state": "finished",
|
|
62
|
+
"type": "video/mp4",
|
|
63
|
+
},
|
|
54
64
|
"thumb_url": undefined,
|
|
55
65
|
"title": "dummy.pdf",
|
|
56
66
|
"type": "video",
|
|
@@ -60,6 +70,11 @@ Object {
|
|
|
60
70
|
"duration": undefined,
|
|
61
71
|
"file_size": undefined,
|
|
62
72
|
"mime_type": "audio/mp3",
|
|
73
|
+
"originalFile": Object {
|
|
74
|
+
"name": "dummy.pdf",
|
|
75
|
+
"state": "uploaded",
|
|
76
|
+
"type": "audio/mp3",
|
|
77
|
+
},
|
|
63
78
|
"title": "dummy.pdf",
|
|
64
79
|
"type": "audio",
|
|
65
80
|
},
|
|
@@ -67,6 +82,11 @@ Object {
|
|
|
67
82
|
"fallback": "dummy.pdf",
|
|
68
83
|
"image_url": undefined,
|
|
69
84
|
"mime_type": "application/pdf",
|
|
85
|
+
"originalFile": Object {
|
|
86
|
+
"name": "dummy.pdf",
|
|
87
|
+
"state": "finished",
|
|
88
|
+
"type": "image/jpeg",
|
|
89
|
+
},
|
|
70
90
|
"type": "image",
|
|
71
91
|
},
|
|
72
92
|
],
|
|
@@ -88,6 +108,9 @@ Object {
|
|
|
88
108
|
"fallback": undefined,
|
|
89
109
|
"image_url": undefined,
|
|
90
110
|
"mime_type": undefined,
|
|
111
|
+
"originalFile": Object {
|
|
112
|
+
"uri": "http://www.jackblack.com/tenac_iousd.bmp",
|
|
113
|
+
},
|
|
91
114
|
"original_height": undefined,
|
|
92
115
|
"original_width": undefined,
|
|
93
116
|
"type": "image",
|
|
@@ -96,6 +119,9 @@ Object {
|
|
|
96
119
|
"fallback": undefined,
|
|
97
120
|
"image_url": undefined,
|
|
98
121
|
"mime_type": undefined,
|
|
122
|
+
"originalFile": Object {
|
|
123
|
+
"uri": "http://www.jackblack.com/tenac_iousd.bmp",
|
|
124
|
+
},
|
|
99
125
|
"original_height": undefined,
|
|
100
126
|
"original_width": undefined,
|
|
101
127
|
"type": "image",
|
|
@@ -87,6 +87,8 @@ export type MessagesContextValue<
|
|
|
87
87
|
* Defaults to: [DateHeader](https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/components/MessageList/DateHeader.tsx)
|
|
88
88
|
**/
|
|
89
89
|
DateHeader: React.ComponentType<DateHeaderProps>;
|
|
90
|
+
deleteMessage: (message: MessageResponse<StreamChatGenerics>) => Promise<void>;
|
|
91
|
+
deleteReaction: (type: string, messageId: string) => Promise<void>;
|
|
90
92
|
|
|
91
93
|
/** Should keyboard be dismissed when messaged is touched */
|
|
92
94
|
dismissKeyboardOnMessageTouch: boolean;
|
|
@@ -176,11 +178,11 @@ export type MessagesContextValue<
|
|
|
176
178
|
* Custom message pinned component
|
|
177
179
|
*/
|
|
178
180
|
MessagePinnedHeader: React.ComponentType<MessagePinnedHeaderProps<StreamChatGenerics>>;
|
|
181
|
+
|
|
179
182
|
/**
|
|
180
183
|
* UI component for MessageReplies
|
|
181
184
|
* Defaults to: [MessageReplies](https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/components/MessageSimple/MessageReplies.tsx)
|
|
182
185
|
*/
|
|
183
|
-
|
|
184
186
|
MessageReplies: React.ComponentType<MessageRepliesProps<StreamChatGenerics>>;
|
|
185
187
|
/**
|
|
186
188
|
* UI Component for MessageRepliesAvatars
|
|
@@ -226,6 +228,7 @@ export type MessagesContextValue<
|
|
|
226
228
|
* Defaults to: [ScrollToBottomButton](https://getstream.io/chat/docs/sdk/reactnative/ui-components/scroll-to-bottom-button/)
|
|
227
229
|
*/
|
|
228
230
|
ScrollToBottomButton: React.ComponentType<ScrollToBottomButtonProps>;
|
|
231
|
+
sendReaction: (type: string, messageId: string) => Promise<void>;
|
|
229
232
|
setEditingState: (message: MessageType<StreamChatGenerics>) => void;
|
|
230
233
|
setQuotedMessageState: (message: MessageType<StreamChatGenerics>) => void;
|
|
231
234
|
supportedReactions: ReactionData[];
|
|
@@ -19,7 +19,7 @@ export const useTranslatedMessage = <
|
|
|
19
19
|
|
|
20
20
|
const translationKey: TranslationKey = `${userLanguage}_text`;
|
|
21
21
|
|
|
22
|
-
if (message.i18n && translationKey in message.i18n) {
|
|
22
|
+
if (message.i18n && translationKey in message.i18n && message.type !== 'deleted') {
|
|
23
23
|
return {
|
|
24
24
|
...message,
|
|
25
25
|
text: message.i18n[translationKey],
|
|
@@ -12,7 +12,7 @@ export const sqliteMock = {
|
|
|
12
12
|
status: 0,
|
|
13
13
|
};
|
|
14
14
|
},
|
|
15
|
-
|
|
15
|
+
execute: (dbName: string, queryInput: string, params: unknown[]) => {
|
|
16
16
|
const query = queryInput.trim().toLowerCase();
|
|
17
17
|
const stmt = db.prepare(query);
|
|
18
18
|
let result: unknown[] = [];
|
|
@@ -72,7 +72,7 @@ export const sqliteMock = {
|
|
|
72
72
|
status: 0,
|
|
73
73
|
};
|
|
74
74
|
},
|
|
75
|
-
|
|
75
|
+
executeBatch: (dbName: string, queriesArr: PreparedQueries[]) => {
|
|
76
76
|
queriesArr.forEach((queryAndParams) => {
|
|
77
77
|
const query = queryAndParams[0];
|
|
78
78
|
const params = queryAndParams[1];
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { mockedApiResponse } from './utils';
|
|
2
|
+
|
|
3
|
+
import { generateMessage } from '../generator/message';
|
|
4
|
+
/**
|
|
5
|
+
* Returns the api response for sendMessage api.
|
|
6
|
+
*
|
|
7
|
+
* api - /channels/{type}/{id}/message
|
|
8
|
+
*
|
|
9
|
+
* @param {*} message
|
|
10
|
+
*/
|
|
11
|
+
export const deleteMessageApi = (message = generateMessage()) => {
|
|
12
|
+
const result = {
|
|
13
|
+
duration: 0.01,
|
|
14
|
+
message,
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
return mockedApiResponse(result, 'delete');
|
|
18
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { mockedApiResponse } from './utils';
|
|
2
|
+
|
|
3
|
+
import { generateReaction } from '../generator/reaction';
|
|
4
|
+
/**
|
|
5
|
+
* Returns the api response for sendMessage api.
|
|
6
|
+
*
|
|
7
|
+
* api - /messages/{id}/reaction
|
|
8
|
+
*
|
|
9
|
+
* @param {*} message
|
|
10
|
+
*/
|
|
11
|
+
export const deleteReactionApi = (message, reaction = generateReaction()) => {
|
|
12
|
+
const result = {
|
|
13
|
+
duration: 0.01,
|
|
14
|
+
message,
|
|
15
|
+
reaction,
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
return mockedApiResponse(result, 'delete');
|
|
19
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { mockedApiResponse } from './utils';
|
|
2
|
+
|
|
3
|
+
import { generateReaction } from '../generator/reaction';
|
|
4
|
+
/**
|
|
5
|
+
* Returns the api response for sendMessage api.
|
|
6
|
+
*
|
|
7
|
+
* api - /messages/{id}/reaction
|
|
8
|
+
*
|
|
9
|
+
* @param {*} message
|
|
10
|
+
*/
|
|
11
|
+
export const sendReactionApi = (message, reaction = generateReaction()) => {
|
|
12
|
+
const result = {
|
|
13
|
+
duration: 0.01,
|
|
14
|
+
message,
|
|
15
|
+
reaction,
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
return mockedApiResponse(result, 'post');
|
|
19
|
+
};
|
|
@@ -3,14 +3,14 @@ import type { QuickSQLite } from 'react-native-quick-sqlite';
|
|
|
3
3
|
let sqlite: typeof QuickSQLite;
|
|
4
4
|
|
|
5
5
|
try {
|
|
6
|
-
sqlite = require('react-native-quick-sqlite')
|
|
6
|
+
sqlite = require('react-native-quick-sqlite').QuickSQLite;
|
|
7
7
|
} catch (e) {
|
|
8
8
|
// Failed for one of the reason
|
|
9
9
|
// 1. Running on expo, where we don't support offline storage yet.
|
|
10
10
|
// 2. Offline support is disabled, in which case this library is not installed.
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
-
import { DB_LOCATION, DB_NAME
|
|
13
|
+
import { DB_LOCATION, DB_NAME } from './constants';
|
|
14
14
|
import { tables } from './schema';
|
|
15
15
|
import { createCreateTableQuery } from './sqlite-utils/createCreateTableQuery';
|
|
16
16
|
import type { PreparedQueries, Table } from './types';
|
|
@@ -20,7 +20,7 @@ import type { PreparedQueries, Table } from './types';
|
|
|
20
20
|
* This way usage react-native-quick-sqlite package is scoped to a single class/file.
|
|
21
21
|
*/
|
|
22
22
|
export class QuickSqliteClient {
|
|
23
|
-
static dbVersion =
|
|
23
|
+
static dbVersion = 3;
|
|
24
24
|
|
|
25
25
|
static dbName = DB_NAME;
|
|
26
26
|
static dbLocation = DB_LOCATION;
|
|
@@ -30,46 +30,47 @@ export class QuickSqliteClient {
|
|
|
30
30
|
static setDbVersion = (version: number) => (this.dbVersion = version);
|
|
31
31
|
|
|
32
32
|
static openDB = () => {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
console.error(`Error opening database ${this.dbName}: ${
|
|
33
|
+
try {
|
|
34
|
+
sqlite.open(this.dbName, this.dbLocation);
|
|
35
|
+
sqlite.execute(this.dbName, `PRAGMA foreign_keys = ON`, []);
|
|
36
|
+
} catch (e) {
|
|
37
|
+
console.error(`Error opening database ${this.dbName}: ${e}`);
|
|
38
38
|
}
|
|
39
39
|
};
|
|
40
40
|
|
|
41
41
|
static closeDB = () => {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
console.error(`Error closing database ${this.dbName}: ${
|
|
42
|
+
try {
|
|
43
|
+
sqlite.close(this.dbName);
|
|
44
|
+
} catch (e) {
|
|
45
|
+
console.error(`Error closing database ${this.dbName}: ${e}`);
|
|
46
46
|
}
|
|
47
47
|
};
|
|
48
48
|
|
|
49
49
|
static executeSqlBatch = (queries: PreparedQueries[]) => {
|
|
50
|
+
if (!queries || !queries.length) return;
|
|
50
51
|
this.openDB();
|
|
51
52
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
53
|
+
try {
|
|
54
|
+
sqlite.executeBatch(DB_NAME, queries);
|
|
55
|
+
this.closeDB();
|
|
56
|
+
} catch (e) {
|
|
57
|
+
this.closeDB();
|
|
58
|
+
throw new Error(`Query/queries failed: ${e}`);
|
|
56
59
|
}
|
|
57
|
-
|
|
58
|
-
this.closeDB();
|
|
59
60
|
};
|
|
60
61
|
|
|
61
62
|
static executeSql = (query: string, params?: string[]) => {
|
|
62
63
|
this.openDB();
|
|
63
64
|
|
|
64
|
-
|
|
65
|
+
try {
|
|
66
|
+
const { rows } = sqlite.execute(DB_NAME, query, params);
|
|
67
|
+
this.closeDB();
|
|
65
68
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
69
|
+
return rows ? rows._array : [];
|
|
70
|
+
} catch (e) {
|
|
71
|
+
this.closeDB();
|
|
72
|
+
throw new Error(`Query/queries failed: ${e}: `);
|
|
70
73
|
}
|
|
71
|
-
|
|
72
|
-
return rows ? rows._array : [];
|
|
73
74
|
};
|
|
74
75
|
|
|
75
76
|
static dropTables = () => {
|
|
@@ -82,9 +83,10 @@ export class QuickSqliteClient {
|
|
|
82
83
|
};
|
|
83
84
|
|
|
84
85
|
static deleteDatabase = () => {
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
86
|
+
try {
|
|
87
|
+
sqlite.delete(this.dbName, this.dbLocation);
|
|
88
|
+
} catch (e) {
|
|
89
|
+
throw new Error(`Error deleting DB: ${e}`);
|
|
88
90
|
}
|
|
89
91
|
|
|
90
92
|
return true;
|
|
@@ -118,7 +120,7 @@ export class QuickSqliteClient {
|
|
|
118
120
|
static updateUserPragmaVersion = (version: number) => {
|
|
119
121
|
this.openDB();
|
|
120
122
|
|
|
121
|
-
sqlite.
|
|
123
|
+
sqlite.execute(DB_NAME, `PRAGMA user_version = ${version}`, []);
|
|
122
124
|
|
|
123
125
|
this.closeDB();
|
|
124
126
|
};
|
|
@@ -126,15 +128,15 @@ export class QuickSqliteClient {
|
|
|
126
128
|
static getUserPragmaVersion = () => {
|
|
127
129
|
this.openDB();
|
|
128
130
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
131
|
+
try {
|
|
132
|
+
const { rows } = sqlite.execute(DB_NAME, `PRAGMA user_version`, []);
|
|
133
|
+
const result = rows ? rows._array : [];
|
|
134
|
+
this.closeDB();
|
|
135
|
+
return result[0].user_version as number;
|
|
136
|
+
} catch (e) {
|
|
137
|
+
this.closeDB();
|
|
138
|
+
throw new Error(`Querying for user_version failed: ${e}`);
|
|
134
139
|
}
|
|
135
|
-
|
|
136
|
-
const result = rows ? rows._array : [];
|
|
137
|
-
return result[0].user_version as number;
|
|
138
140
|
};
|
|
139
141
|
|
|
140
142
|
static resetDB = () => {
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { mapTaskToStorable } from '../mappers/mapTaskToStorable';
|
|
2
|
+
import { QuickSqliteClient } from '../QuickSqliteClient';
|
|
3
|
+
import { createDeleteQuery } from '../sqlite-utils/createDeleteQuery';
|
|
4
|
+
import { createUpsertQuery } from '../sqlite-utils/createUpsertQuery';
|
|
5
|
+
import type { PendingTask } from '../types';
|
|
6
|
+
|
|
7
|
+
export const addPendingTask = (task: PendingTask) => {
|
|
8
|
+
const storable = mapTaskToStorable(task);
|
|
9
|
+
const query = createUpsertQuery('pendingTasks', storable);
|
|
10
|
+
|
|
11
|
+
QuickSqliteClient.executeSql.apply(null, query);
|
|
12
|
+
|
|
13
|
+
return () => {
|
|
14
|
+
const { channelId, channelType, payload, type } = storable;
|
|
15
|
+
const query = createDeleteQuery('pendingTasks', {
|
|
16
|
+
channelId,
|
|
17
|
+
channelType,
|
|
18
|
+
payload,
|
|
19
|
+
type,
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
QuickSqliteClient.executeSql.apply(null, query);
|
|
23
|
+
};
|
|
24
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { QuickSqliteClient } from '../QuickSqliteClient';
|
|
2
|
+
import { createDeleteQuery } from '../sqlite-utils/createDeleteQuery';
|
|
3
|
+
|
|
4
|
+
export const deleteMessage = ({ flush = true, id }: { id: string; flush?: boolean }) => {
|
|
5
|
+
const query = createDeleteQuery('messages', {
|
|
6
|
+
id,
|
|
7
|
+
});
|
|
8
|
+
if (flush) {
|
|
9
|
+
QuickSqliteClient.executeSql.apply(null, query);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
return [query];
|
|
13
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { QuickSqliteClient } from '../QuickSqliteClient';
|
|
2
|
+
import { createDeleteQuery } from '../sqlite-utils/createDeleteQuery';
|
|
3
|
+
|
|
4
|
+
export const deletePendingTask = ({ id }: { id: number }) => {
|
|
5
|
+
const query = createDeleteQuery('pendingTasks', {
|
|
6
|
+
id,
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
QuickSqliteClient.executeSql.apply(null, query);
|
|
10
|
+
|
|
11
|
+
return [query];
|
|
12
|
+
};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { QuickSqliteClient } from '../QuickSqliteClient';
|
|
2
|
+
import { createDeleteQuery } from '../sqlite-utils/createDeleteQuery';
|
|
3
|
+
|
|
4
|
+
export const deleteReaction = ({
|
|
5
|
+
flush = true,
|
|
6
|
+
messageId,
|
|
7
|
+
reactionType,
|
|
8
|
+
userId,
|
|
9
|
+
}: {
|
|
10
|
+
messageId: string;
|
|
11
|
+
reactionType: string;
|
|
12
|
+
userId: string;
|
|
13
|
+
flush?: boolean;
|
|
14
|
+
}) => {
|
|
15
|
+
const query = createDeleteQuery('reactions', {
|
|
16
|
+
messageId,
|
|
17
|
+
type: reactionType,
|
|
18
|
+
userId,
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
if (flush) {
|
|
22
|
+
QuickSqliteClient.executeSql.apply(null, query);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
return [query];
|
|
26
|
+
};
|