stream-chat-react-native-core 5.6.0-beta.1 → 5.6.0-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/lib/commonjs/components/Channel/Channel.js +22 -16
- package/lib/commonjs/components/Channel/Channel.js.map +1 -1
- package/lib/commonjs/components/Chat/Chat.js +1 -1
- package/lib/commonjs/components/Chat/Chat.js.map +1 -1
- package/lib/commonjs/components/Chat/hooks/useAppSettings.js +51 -22
- package/lib/commonjs/components/Chat/hooks/useAppSettings.js.map +1 -1
- package/lib/commonjs/components/Chat/hooks/useIsOnline.js +1 -1
- package/lib/commonjs/components/Chat/hooks/useIsOnline.js.map +1 -1
- package/lib/commonjs/contexts/chatContext/ChatContext.js.map +1 -1
- package/lib/commonjs/store/QuickSqliteClient.js +46 -1
- package/lib/commonjs/store/QuickSqliteClient.js.map +1 -1
- package/lib/commonjs/store/QuickSqliteClient_v4.js +112 -0
- package/lib/commonjs/store/QuickSqliteClient_v4.js.map +1 -0
- package/lib/commonjs/store/apis/getAppSettings.js +23 -0
- package/lib/commonjs/store/apis/getAppSettings.js.map +1 -0
- package/lib/commonjs/store/apis/getPendingTasks.js.map +1 -1
- package/lib/commonjs/store/apis/index.js +26 -0
- package/lib/commonjs/store/apis/index.js.map +1 -1
- package/lib/commonjs/store/apis/queries/selectChannels.js.map +1 -1
- package/lib/commonjs/store/apis/queries/selectMembersForChannels.js.map +1 -1
- package/lib/commonjs/store/apis/queries/selectMessagesForChannels.js.map +1 -1
- package/lib/commonjs/store/apis/queries/selectReactionsForMessages.js.map +1 -1
- package/lib/commonjs/store/apis/queries/selectReadsForChannels.js.map +1 -1
- package/lib/commonjs/store/apis/upsertAppSettings.js +26 -0
- package/lib/commonjs/store/apis/upsertAppSettings.js.map +1 -0
- package/lib/commonjs/store/schema.js +1 -0
- package/lib/commonjs/store/schema.js.map +1 -1
- package/lib/commonjs/version.json +1 -1
- package/lib/module/components/Channel/Channel.js +22 -16
- package/lib/module/components/Channel/Channel.js.map +1 -1
- package/lib/module/components/Chat/Chat.js +1 -1
- package/lib/module/components/Chat/Chat.js.map +1 -1
- package/lib/module/components/Chat/hooks/useAppSettings.js +51 -22
- package/lib/module/components/Chat/hooks/useAppSettings.js.map +1 -1
- package/lib/module/components/Chat/hooks/useIsOnline.js +1 -1
- package/lib/module/components/Chat/hooks/useIsOnline.js.map +1 -1
- package/lib/module/contexts/chatContext/ChatContext.js.map +1 -1
- package/lib/module/store/QuickSqliteClient.js +46 -1
- package/lib/module/store/QuickSqliteClient.js.map +1 -1
- package/lib/module/store/QuickSqliteClient_v4.js +112 -0
- package/lib/module/store/QuickSqliteClient_v4.js.map +1 -0
- package/lib/module/store/apis/getAppSettings.js +23 -0
- package/lib/module/store/apis/getAppSettings.js.map +1 -0
- package/lib/module/store/apis/getPendingTasks.js.map +1 -1
- package/lib/module/store/apis/index.js +26 -0
- package/lib/module/store/apis/index.js.map +1 -1
- package/lib/module/store/apis/queries/selectChannels.js.map +1 -1
- package/lib/module/store/apis/queries/selectMembersForChannels.js.map +1 -1
- package/lib/module/store/apis/queries/selectMessagesForChannels.js.map +1 -1
- package/lib/module/store/apis/queries/selectReactionsForMessages.js.map +1 -1
- package/lib/module/store/apis/queries/selectReadsForChannels.js.map +1 -1
- package/lib/module/store/apis/upsertAppSettings.js +26 -0
- package/lib/module/store/apis/upsertAppSettings.js.map +1 -0
- package/lib/module/store/schema.js +1 -0
- package/lib/module/store/schema.js.map +1 -1
- package/lib/module/version.json +1 -1
- package/lib/typescript/components/Chat/hooks/useAppSettings.d.ts +2 -2
- package/lib/typescript/components/Chat/hooks/useIsOnline.d.ts +1 -1
- package/lib/typescript/contexts/chatContext/ChatContext.d.ts +1 -1
- package/lib/typescript/store/QuickSqliteClient.d.ts +4 -1
- package/lib/typescript/store/QuickSqliteClient_v4.d.ts +12 -0
- package/lib/typescript/store/apis/getAppSettings.d.ts +4 -0
- package/lib/typescript/store/apis/getPendingTasks.d.ts +1 -1
- package/lib/typescript/store/apis/index.d.ts +2 -0
- package/lib/typescript/store/apis/upsertAppSettings.d.ts +6 -0
- package/lib/typescript/store/schema.d.ts +1 -0
- package/package.json +1 -1
- package/src/components/Attachment/__tests__/Gallery.test.js +9 -2
- package/src/components/Attachment/__tests__/Giphy.test.js +9 -5
- package/src/components/Channel/Channel.tsx +8 -1
- package/src/components/Chat/Chat.tsx +1 -1
- package/src/components/Chat/hooks/__tests__/useAppSettings.test.tsx +1 -0
- package/src/components/Chat/hooks/useAppSettings.ts +19 -6
- package/src/components/Chat/hooks/useIsOnline.ts +1 -1
- package/src/components/ImageGallery/__tests__/ImageGallery.test.tsx +29 -15
- package/src/components/ImageGallery/__tests__/ImageGalleryFooter.test.tsx +12 -6
- package/src/components/ImageGallery/__tests__/ImageGalleryHeader.test.tsx +9 -4
- package/src/contexts/chatContext/ChatContext.tsx +1 -1
- package/src/contexts/messageInputContext/__tests__/MessageInputContext.test.tsx +8 -3
- package/src/contexts/messageInputContext/__tests__/uploadFile.test.tsx +16 -6
- package/src/store/QuickSqliteClient.ts +49 -5
- package/src/store/QuickSqliteClient_v4.ts +98 -0
- package/src/store/apis/getAppSettings.ts +19 -0
- package/src/store/apis/getPendingTasks.ts +2 -1
- package/src/store/apis/index.ts +2 -0
- package/src/store/apis/queries/selectChannels.ts +4 -1
- package/src/store/apis/queries/selectMembersForChannels.ts +1 -1
- package/src/store/apis/queries/selectMessagesForChannels.ts +1 -1
- package/src/store/apis/queries/selectReactionsForMessages.ts +1 -1
- package/src/store/apis/queries/selectReadsForChannels.ts +1 -1
- package/src/store/apis/upsertAppSettings.ts +23 -0
- package/src/store/schema.ts +2 -0
- package/src/version.json +1 -1
|
@@ -123,7 +123,7 @@ var ChatWithContext = function ChatWithContext(props) {
|
|
|
123
123
|
return setChannel(newChannel);
|
|
124
124
|
};
|
|
125
125
|
|
|
126
|
-
var appSettings = (0, _useAppSettings.useAppSettings)(client, isOnline);
|
|
126
|
+
var appSettings = (0, _useAppSettings.useAppSettings)(client, isOnline, enableOfflineSupport);
|
|
127
127
|
var chatContext = (0, _useCreateChatContext.useCreateChatContext)({
|
|
128
128
|
appSettings: appSettings,
|
|
129
129
|
channel: channel,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Chat.tsx"],"names":["ChatWithContext","props","children","client","closeConnectionOnBackground","enableOfflineSupport","i18nInstance","ImageComponent","Image","style","channel","setChannel","t","key","tDateTimeParser","input","translators","setTranslators","loadingTranslators","connectionRecovering","isOnline","mutedUsers","debugRef","isDebugModeEnabled","__DEV__","current","setUserAgent","SDK","Platform","OS","version","recoverStateOnReconnect","persistUserOnConnectionFailure","setEventType","setSendEventParams","action","data","user","setActiveChannel","newChannel","appSettings","chatContext","id","QuickSqliteClient","initializeDatabase","DBSyncManager","init","userLanguage","language","DEFAULT_USER_LANGUAGE","Chat"],"mappings":"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","sourcesContent":["import React, { PropsWithChildren, useEffect, useState } from 'react';\nimport { Image, Platform } from 'react-native';\n\nimport Dayjs from 'dayjs';\n\nimport type { Channel, StreamChat } from 'stream-chat';\n\nimport { useAppSettings } from './hooks/useAppSettings';\nimport { useCreateChatContext } from './hooks/useCreateChatContext';\nimport { useIsOnline } from './hooks/useIsOnline';\nimport { useMutedUsers } from './hooks/useMutedUsers';\n\nimport { useSyncDatabase } from './hooks/useSyncDatabase';\n\nimport { ChannelsStateProvider } from '../../contexts/channelsStateContext/ChannelsStateContext';\nimport { ChatContextValue, ChatProvider } from '../../contexts/chatContext/ChatContext';\nimport { useDebugContext } from '../../contexts/debugContext/DebugContext';\nimport { useOverlayContext } from '../../contexts/overlayContext/OverlayContext';\nimport { DeepPartial, ThemeProvider } from '../../contexts/themeContext/ThemeContext';\nimport type { Theme } from '../../contexts/themeContext/utils/theme';\nimport {\n DEFAULT_USER_LANGUAGE,\n TranslationProvider,\n TranslatorFunctions,\n} from '../../contexts/translationContext/TranslationContext';\nimport { useStreami18n } from '../../hooks/useStreami18n';\nimport init from '../../init';\n\nimport { SDK } from '../../native';\nimport { QuickSqliteClient } from '../../store/QuickSqliteClient';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\nimport { DBSyncManager } from '../../utils/DBSyncManager';\nimport type { Streami18n } from '../../utils/Streami18n';\nimport { version } from '../../version.json';\n\ninit();\n\nexport type ChatProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Pick<ChatContextValue<StreamChatGenerics>, 'client'> &\n Partial<Pick<ChatContextValue<StreamChatGenerics>, 'ImageComponent'>> & {\n /**\n * When false, ws connection won't be disconnection upon backgrounding the app.\n * To receive push notifications, its necessary that user doesn't have active\n * websocket connection. So by default, we disconnect websocket connection when\n * app goes to background, and reconnect when app comes to foreground.\n */\n closeConnectionOnBackground?: boolean;\n /**\n * Enables offline storage and loading for chat data.\n */\n enableOfflineSupport?: boolean;\n /**\n * Instance of Streami18n class should be provided to Chat component to enable internationalization.\n *\n * Stream provides following list of in-built translations:\n * 1. English (en)\n * 2. Dutch (nl)\n * 3. ...\n * 4. ...\n *\n * Simplest way to start using chat components in one of the in-built languages would be following:\n *\n * ```\n * const i18n = new Streami18n('nl');\n * <Chat client={chatClient} i18nInstance={i18n}>\n * ...\n * </Chat>\n * ```\n *\n * If you would like to override certain keys in in-built translation.\n * UI will be automatically updated in this case.\n *\n * ```\n * const i18n = new Streami18n('nl');\n *\n * i18n.registerTranslation('nl', {\n * 'Nothing yet...': 'Nog Niet ...',\n * '{{ firstUser }} and {{ secondUser }} are typing...': '{{ firstUser }} en {{ secondUser }} zijn aan het typen...',\n * });\n *\n * <Chat client={chatClient} i18nInstance={i18n}>\n * ...\n * </Chat>\n * ```\n *\n * You can use the same function to add whole new language.\n *\n * ```\n * const i18n = new Streami18n('it');\n *\n * i18n.registerTranslation('it', {\n * 'Nothing yet...': 'Non ancora ...',\n * '{{ firstUser }} and {{ secondUser }} are typing...': '{{ firstUser }} a {{ secondUser }} stanno scrivendo...',\n * });\n *\n * // Make sure to call setLanguage to reflect new language in UI.\n * i18n.setLanguage('it');\n * <Chat client={chatClient} i18nInstance={i18n}>\n * ...\n * </Chat>\n * ```\n */\n i18nInstance?: Streami18n;\n /**\n * You can pass the theme object to customize the styles of Chat components. You can check the default theme in [theme.ts](https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/contexts/themeContext/utils/theme.ts)\n *\n * Please check section about [themes in cookbook](https://github.com/GetStream/stream-chat-react-native/wiki/Cookbook-v3.0#theme) for details.\n *\n * ```\n * import type { DeepPartial, Theme } from 'stream-chat-react-native';\n *\n * const theme: DeepPartial<Theme> = {\n * messageSimple: {\n * file: {\n * container: {\n * backgroundColor: 'red',\n * },\n * icon: {\n * height: 16,\n * width: 16,\n * },\n * },\n * },\n * };\n *\n * <Chat style={theme}>\n * </Chat>\n * ```\n *\n * @overrideType object\n */\n style?: DeepPartial<Theme>;\n };\n\nconst ChatWithContext = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: PropsWithChildren<ChatProps<StreamChatGenerics>>,\n) => {\n const {\n children,\n client,\n closeConnectionOnBackground = true,\n enableOfflineSupport = false,\n i18nInstance,\n ImageComponent = Image,\n style,\n } = props;\n\n const [channel, setChannel] = useState<Channel<StreamChatGenerics>>();\n const [translators, setTranslators] = useState<TranslatorFunctions>({\n t: (key: string) => key,\n tDateTimeParser: (input?: string | number | Date) => Dayjs(input),\n });\n\n /**\n * Setup translators\n */\n const loadingTranslators = useStreami18n({ i18nInstance, setTranslators });\n\n /**\n * Setup connection event listeners\n */\n const { connectionRecovering, isOnline } = useIsOnline<StreamChatGenerics>(\n client,\n closeConnectionOnBackground,\n );\n\n /**\n * Setup muted user listener\n * TODO: reimplement\n */\n const mutedUsers = useMutedUsers<StreamChatGenerics>(client);\n\n const debugRef = useDebugContext();\n const isDebugModeEnabled = __DEV__ && debugRef && debugRef.current;\n\n useEffect(() => {\n if (client) {\n client.setUserAgent(`${SDK}-${Platform.OS}-${version}`);\n // This is to disable recovery related logic in js client, since we handle it in this SDK\n client.recoverStateOnReconnect = false;\n client.persistUserOnConnectionFailure = enableOfflineSupport;\n }\n\n if (isDebugModeEnabled) {\n if (debugRef.current.setEventType) debugRef.current.setEventType('send');\n if (debugRef.current.setSendEventParams)\n debugRef.current.setSendEventParams({\n action: 'Client',\n data: client.user,\n });\n }\n }, [client]);\n\n const setActiveChannel = (newChannel?: Channel<StreamChatGenerics>) => setChannel(newChannel);\n\n const appSettings = useAppSettings(client, isOnline);\n\n const chatContext = useCreateChatContext({\n appSettings,\n channel,\n client,\n connectionRecovering,\n enableOfflineSupport,\n ImageComponent,\n isOnline,\n mutedUsers,\n setActiveChannel,\n });\n\n useEffect(() => {\n if (client.user?.id && enableOfflineSupport) {\n QuickSqliteClient.initializeDatabase();\n DBSyncManager.init(client as unknown as StreamChat);\n }\n }, [client?.user?.id]);\n\n useSyncDatabase({\n client,\n enableOfflineSupport,\n });\n\n if (loadingTranslators) return null;\n\n return (\n <ChatProvider<StreamChatGenerics> value={chatContext}>\n <TranslationProvider\n value={{ ...translators, userLanguage: client.user?.language || DEFAULT_USER_LANGUAGE }}\n >\n <ThemeProvider style={style}>\n <ChannelsStateProvider<StreamChatGenerics>>{children}</ChannelsStateProvider>\n </ThemeProvider>\n </TranslationProvider>\n </ChatProvider>\n );\n};\n\n/**\n * Chat - Wrapper component for Chat. The needs to be placed around any other chat components.\n * This Chat component provides the ChatContext to all other components.\n *\n * The ChatContext provides the following props:\n *\n * - channel - currently active channel\n * - client - client connection\n * - connectionRecovering - whether or not websocket is reconnecting\n * - isOnline - whether or not set user is active\n * - setActiveChannel - function to set the currently active channel\n *\n * The Chat Component takes the following generics in order:\n * - At (AttachmentType) - custom Attachment object extension\n * - Ct (ChannelType) - custom Channel object extension\n * - Co (CommandType) - custom Command string union extension\n * - Ev (EventType) - custom Event object extension\n * - Me (MessageType) - custom Message object extension\n * - Re (ReactionType) - custom Reaction object extension\n * - Us (UserType) - custom User object extension\n */\nexport const Chat = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: PropsWithChildren<ChatProps<StreamChatGenerics>>,\n) => {\n const { style } = useOverlayContext();\n\n return <ChatWithContext {...{ style }} {...props} />;\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["Chat.tsx"],"names":["ChatWithContext","props","children","client","closeConnectionOnBackground","enableOfflineSupport","i18nInstance","ImageComponent","Image","style","channel","setChannel","t","key","tDateTimeParser","input","translators","setTranslators","loadingTranslators","connectionRecovering","isOnline","mutedUsers","debugRef","isDebugModeEnabled","__DEV__","current","setUserAgent","SDK","Platform","OS","version","recoverStateOnReconnect","persistUserOnConnectionFailure","setEventType","setSendEventParams","action","data","user","setActiveChannel","newChannel","appSettings","chatContext","id","QuickSqliteClient","initializeDatabase","DBSyncManager","init","userLanguage","language","DEFAULT_USER_LANGUAGE","Chat"],"mappings":"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","sourcesContent":["import React, { PropsWithChildren, useEffect, useState } from 'react';\nimport { Image, Platform } from 'react-native';\n\nimport Dayjs from 'dayjs';\n\nimport type { Channel, StreamChat } from 'stream-chat';\n\nimport { useAppSettings } from './hooks/useAppSettings';\nimport { useCreateChatContext } from './hooks/useCreateChatContext';\nimport { useIsOnline } from './hooks/useIsOnline';\nimport { useMutedUsers } from './hooks/useMutedUsers';\n\nimport { useSyncDatabase } from './hooks/useSyncDatabase';\n\nimport { ChannelsStateProvider } from '../../contexts/channelsStateContext/ChannelsStateContext';\nimport { ChatContextValue, ChatProvider } from '../../contexts/chatContext/ChatContext';\nimport { useDebugContext } from '../../contexts/debugContext/DebugContext';\nimport { useOverlayContext } from '../../contexts/overlayContext/OverlayContext';\nimport { DeepPartial, ThemeProvider } from '../../contexts/themeContext/ThemeContext';\nimport type { Theme } from '../../contexts/themeContext/utils/theme';\nimport {\n DEFAULT_USER_LANGUAGE,\n TranslationProvider,\n TranslatorFunctions,\n} from '../../contexts/translationContext/TranslationContext';\nimport { useStreami18n } from '../../hooks/useStreami18n';\nimport init from '../../init';\n\nimport { SDK } from '../../native';\nimport { QuickSqliteClient } from '../../store/QuickSqliteClient';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\nimport { DBSyncManager } from '../../utils/DBSyncManager';\nimport type { Streami18n } from '../../utils/Streami18n';\nimport { version } from '../../version.json';\n\ninit();\n\nexport type ChatProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Pick<ChatContextValue<StreamChatGenerics>, 'client'> &\n Partial<Pick<ChatContextValue<StreamChatGenerics>, 'ImageComponent'>> & {\n /**\n * When false, ws connection won't be disconnection upon backgrounding the app.\n * To receive push notifications, its necessary that user doesn't have active\n * websocket connection. So by default, we disconnect websocket connection when\n * app goes to background, and reconnect when app comes to foreground.\n */\n closeConnectionOnBackground?: boolean;\n /**\n * Enables offline storage and loading for chat data.\n */\n enableOfflineSupport?: boolean;\n /**\n * Instance of Streami18n class should be provided to Chat component to enable internationalization.\n *\n * Stream provides following list of in-built translations:\n * 1. English (en)\n * 2. Dutch (nl)\n * 3. ...\n * 4. ...\n *\n * Simplest way to start using chat components in one of the in-built languages would be following:\n *\n * ```\n * const i18n = new Streami18n('nl');\n * <Chat client={chatClient} i18nInstance={i18n}>\n * ...\n * </Chat>\n * ```\n *\n * If you would like to override certain keys in in-built translation.\n * UI will be automatically updated in this case.\n *\n * ```\n * const i18n = new Streami18n('nl');\n *\n * i18n.registerTranslation('nl', {\n * 'Nothing yet...': 'Nog Niet ...',\n * '{{ firstUser }} and {{ secondUser }} are typing...': '{{ firstUser }} en {{ secondUser }} zijn aan het typen...',\n * });\n *\n * <Chat client={chatClient} i18nInstance={i18n}>\n * ...\n * </Chat>\n * ```\n *\n * You can use the same function to add whole new language.\n *\n * ```\n * const i18n = new Streami18n('it');\n *\n * i18n.registerTranslation('it', {\n * 'Nothing yet...': 'Non ancora ...',\n * '{{ firstUser }} and {{ secondUser }} are typing...': '{{ firstUser }} a {{ secondUser }} stanno scrivendo...',\n * });\n *\n * // Make sure to call setLanguage to reflect new language in UI.\n * i18n.setLanguage('it');\n * <Chat client={chatClient} i18nInstance={i18n}>\n * ...\n * </Chat>\n * ```\n */\n i18nInstance?: Streami18n;\n /**\n * You can pass the theme object to customize the styles of Chat components. You can check the default theme in [theme.ts](https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/contexts/themeContext/utils/theme.ts)\n *\n * Please check section about [themes in cookbook](https://github.com/GetStream/stream-chat-react-native/wiki/Cookbook-v3.0#theme) for details.\n *\n * ```\n * import type { DeepPartial, Theme } from 'stream-chat-react-native';\n *\n * const theme: DeepPartial<Theme> = {\n * messageSimple: {\n * file: {\n * container: {\n * backgroundColor: 'red',\n * },\n * icon: {\n * height: 16,\n * width: 16,\n * },\n * },\n * },\n * };\n *\n * <Chat style={theme}>\n * </Chat>\n * ```\n *\n * @overrideType object\n */\n style?: DeepPartial<Theme>;\n };\n\nconst ChatWithContext = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: PropsWithChildren<ChatProps<StreamChatGenerics>>,\n) => {\n const {\n children,\n client,\n closeConnectionOnBackground = true,\n enableOfflineSupport = false,\n i18nInstance,\n ImageComponent = Image,\n style,\n } = props;\n\n const [channel, setChannel] = useState<Channel<StreamChatGenerics>>();\n const [translators, setTranslators] = useState<TranslatorFunctions>({\n t: (key: string) => key,\n tDateTimeParser: (input?: string | number | Date) => Dayjs(input),\n });\n\n /**\n * Setup translators\n */\n const loadingTranslators = useStreami18n({ i18nInstance, setTranslators });\n\n /**\n * Setup connection event listeners\n */\n const { connectionRecovering, isOnline } = useIsOnline<StreamChatGenerics>(\n client,\n closeConnectionOnBackground,\n );\n\n /**\n * Setup muted user listener\n * TODO: reimplement\n */\n const mutedUsers = useMutedUsers<StreamChatGenerics>(client);\n\n const debugRef = useDebugContext();\n const isDebugModeEnabled = __DEV__ && debugRef && debugRef.current;\n\n useEffect(() => {\n if (client) {\n client.setUserAgent(`${SDK}-${Platform.OS}-${version}`);\n // This is to disable recovery related logic in js client, since we handle it in this SDK\n client.recoverStateOnReconnect = false;\n client.persistUserOnConnectionFailure = enableOfflineSupport;\n }\n\n if (isDebugModeEnabled) {\n if (debugRef.current.setEventType) debugRef.current.setEventType('send');\n if (debugRef.current.setSendEventParams)\n debugRef.current.setSendEventParams({\n action: 'Client',\n data: client.user,\n });\n }\n }, [client]);\n\n const setActiveChannel = (newChannel?: Channel<StreamChatGenerics>) => setChannel(newChannel);\n\n const appSettings = useAppSettings(client, isOnline, enableOfflineSupport);\n\n const chatContext = useCreateChatContext({\n appSettings,\n channel,\n client,\n connectionRecovering,\n enableOfflineSupport,\n ImageComponent,\n isOnline,\n mutedUsers,\n setActiveChannel,\n });\n\n useEffect(() => {\n if (client.user?.id && enableOfflineSupport) {\n QuickSqliteClient.initializeDatabase();\n DBSyncManager.init(client as unknown as StreamChat);\n }\n }, [client?.user?.id]);\n\n useSyncDatabase({\n client,\n enableOfflineSupport,\n });\n\n if (loadingTranslators) return null;\n\n return (\n <ChatProvider<StreamChatGenerics> value={chatContext}>\n <TranslationProvider\n value={{ ...translators, userLanguage: client.user?.language || DEFAULT_USER_LANGUAGE }}\n >\n <ThemeProvider style={style}>\n <ChannelsStateProvider<StreamChatGenerics>>{children}</ChannelsStateProvider>\n </ThemeProvider>\n </TranslationProvider>\n </ChatProvider>\n );\n};\n\n/**\n * Chat - Wrapper component for Chat. The needs to be placed around any other chat components.\n * This Chat component provides the ChatContext to all other components.\n *\n * The ChatContext provides the following props:\n *\n * - channel - currently active channel\n * - client - client connection\n * - connectionRecovering - whether or not websocket is reconnecting\n * - isOnline - whether or not set user is active\n * - setActiveChannel - function to set the currently active channel\n *\n * The Chat Component takes the following generics in order:\n * - At (AttachmentType) - custom Attachment object extension\n * - Ct (ChannelType) - custom Channel object extension\n * - Co (CommandType) - custom Command string union extension\n * - Ev (EventType) - custom Event object extension\n * - Me (MessageType) - custom Message object extension\n * - Re (ReactionType) - custom Reaction object extension\n * - Us (UserType) - custom User object extension\n */\nexport const Chat = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: PropsWithChildren<ChatProps<StreamChatGenerics>>,\n) => {\n const { style } = useOverlayContext();\n\n return <ChatWithContext {...{ style }} {...props} />;\n};\n"]}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
2
2
|
|
|
3
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
4
|
+
|
|
3
5
|
Object.defineProperty(exports, "__esModule", {
|
|
4
6
|
value: true
|
|
5
7
|
});
|
|
@@ -13,7 +15,13 @@ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/sli
|
|
|
13
15
|
|
|
14
16
|
var _react = require("react");
|
|
15
17
|
|
|
16
|
-
var
|
|
18
|
+
var dbApi = _interopRequireWildcard(require("../../../store/apis"));
|
|
19
|
+
|
|
20
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
21
|
+
|
|
22
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
23
|
+
|
|
24
|
+
var useAppSettings = function useAppSettings(client, isOnline, enableOfflineSupport) {
|
|
17
25
|
var _useState = (0, _react.useState)(null),
|
|
18
26
|
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
|
|
19
27
|
appSettings = _useState2[0],
|
|
@@ -21,54 +29,75 @@ var useAppSettings = function useAppSettings(client, isOnline) {
|
|
|
21
29
|
|
|
22
30
|
var isMounted = (0, _react.useRef)(true);
|
|
23
31
|
(0, _react.useEffect)(function () {
|
|
24
|
-
function
|
|
25
|
-
return
|
|
32
|
+
function enforeAppSettings() {
|
|
33
|
+
return _enforeAppSettings.apply(this, arguments);
|
|
26
34
|
}
|
|
27
35
|
|
|
28
|
-
function
|
|
29
|
-
|
|
30
|
-
var _appSettings;
|
|
36
|
+
function _enforeAppSettings() {
|
|
37
|
+
_enforeAppSettings = (0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee() {
|
|
38
|
+
var _appSettings, _appSettings2;
|
|
31
39
|
|
|
32
40
|
return _regenerator["default"].wrap(function _callee$(_context) {
|
|
33
41
|
while (1) {
|
|
34
42
|
switch (_context.prev = _context.next) {
|
|
35
43
|
case 0:
|
|
36
|
-
|
|
37
|
-
|
|
44
|
+
if (client.userID) {
|
|
45
|
+
_context.next = 2;
|
|
46
|
+
break;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
return _context.abrupt("return");
|
|
50
|
+
|
|
51
|
+
case 2:
|
|
52
|
+
if (!(!isOnline && enableOfflineSupport)) {
|
|
53
|
+
_context.next = 6;
|
|
54
|
+
break;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
_appSettings = dbApi.getAppSettings({
|
|
58
|
+
currentUserId: client.userID
|
|
59
|
+
});
|
|
60
|
+
setAppSettings(_appSettings);
|
|
61
|
+
return _context.abrupt("return");
|
|
62
|
+
|
|
63
|
+
case 6:
|
|
64
|
+
_context.prev = 6;
|
|
65
|
+
_context.next = 9;
|
|
38
66
|
return client.getAppSettings();
|
|
39
67
|
|
|
40
|
-
case
|
|
41
|
-
|
|
68
|
+
case 9:
|
|
69
|
+
_appSettings2 = _context.sent;
|
|
42
70
|
|
|
43
71
|
if (isMounted.current) {
|
|
44
|
-
setAppSettings(
|
|
72
|
+
setAppSettings(_appSettings2);
|
|
73
|
+
enableOfflineSupport && dbApi.upsertAppSettings({
|
|
74
|
+
appSettings: _appSettings2,
|
|
75
|
+
currentUserId: client.userID
|
|
76
|
+
});
|
|
45
77
|
}
|
|
46
78
|
|
|
47
|
-
_context.next =
|
|
79
|
+
_context.next = 16;
|
|
48
80
|
break;
|
|
49
81
|
|
|
50
|
-
case
|
|
51
|
-
_context.prev =
|
|
52
|
-
_context.t0 = _context["catch"](
|
|
82
|
+
case 13:
|
|
83
|
+
_context.prev = 13;
|
|
84
|
+
_context.t0 = _context["catch"](6);
|
|
53
85
|
|
|
54
86
|
if (_context.t0 instanceof Error) {
|
|
55
87
|
console.error("An error occurred while getting app settings: " + _context.t0);
|
|
56
88
|
}
|
|
57
89
|
|
|
58
|
-
case
|
|
90
|
+
case 16:
|
|
59
91
|
case "end":
|
|
60
92
|
return _context.stop();
|
|
61
93
|
}
|
|
62
94
|
}
|
|
63
|
-
}, _callee, null, [[
|
|
95
|
+
}, _callee, null, [[6, 13]]);
|
|
64
96
|
}));
|
|
65
|
-
return
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
if (isOnline && client.userID) {
|
|
69
|
-
getAppSettings();
|
|
97
|
+
return _enforeAppSettings.apply(this, arguments);
|
|
70
98
|
}
|
|
71
99
|
|
|
100
|
+
enforeAppSettings();
|
|
72
101
|
return function () {
|
|
73
102
|
isMounted.current = false;
|
|
74
103
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["useAppSettings.ts"],"names":["useAppSettings","client","isOnline","appSettings","setAppSettings","isMounted","getAppSettings","current","Error","console","error"
|
|
1
|
+
{"version":3,"sources":["useAppSettings.ts"],"names":["useAppSettings","client","isOnline","enableOfflineSupport","appSettings","setAppSettings","isMounted","enforeAppSettings","userID","dbApi","getAppSettings","currentUserId","current","upsertAppSettings","Error","console","error"],"mappings":";;;;;;;;;;;;;;;AAAA;;AAIA;;;;;;AAEO,IAAMA,cAAc,GAAG,SAAjBA,cAAiB,CAG5BC,MAH4B,EAI5BC,QAJ4B,EAK5BC,oBAL4B,EAMM;AAClC,kBAAsC,qBAAwC,IAAxC,CAAtC;AAAA;AAAA,MAAOC,WAAP;AAAA,MAAoBC,cAApB;;AACA,MAAMC,SAAS,GAAG,mBAAO,IAAP,CAAlB;AAEA,wBAAU,YAAM;AAAA,aACCC,iBADD;AAAA;AAAA;;AAAA;AAAA,2FACd;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA,oBACON,MAAM,CAACO,MADd;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA,sBAGM,CAACN,QAAD,IAAaC,oBAHnB;AAAA;AAAA;AAAA;;AAIUC,gBAAAA,YAJV,GAIwBK,KAAK,CAACC,cAAN,CAAqB;AAAEC,kBAAAA,aAAa,EAAEV,MAAM,CAACO;AAAxB,iBAArB,CAJxB;AAKIH,gBAAAA,cAAc,CAACD,YAAD,CAAd;AALJ;;AAAA;AAAA;AAAA;AAAA,uBAU8BH,MAAM,CAACS,cAAP,EAV9B;;AAAA;AAUUN,gBAAAA,aAVV;;AAWI,oBAAIE,SAAS,CAACM,OAAd,EAAuB;AACrBP,kBAAAA,cAAc,CAACD,aAAD,CAAd;AACAD,kBAAAA,oBAAoB,IAClBM,KAAK,CAACI,iBAAN,CAAwB;AACtBT,oBAAAA,WAAW,EAAXA,aADsB;AAEtBO,oBAAAA,aAAa,EAAEV,MAAM,CAACO;AAFA,mBAAxB,CADF;AAKD;;AAlBL;AAAA;;AAAA;AAAA;AAAA;;AAoBI,oBAAI,uBAAiBM,KAArB,EAA4B;AAC1BC,kBAAAA,OAAO,CAACC,KAAR;AACD;;AAtBL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OADc;AAAA;AAAA;;AA2BdT,IAAAA,iBAAiB;AAEjB,WAAO,YAAM;AACXD,MAAAA,SAAS,CAACM,OAAV,GAAoB,KAApB;AACD,KAFD;AAGD,GAhCD,EAgCG,CAACX,MAAD,EAASC,QAAT,CAhCH;AAkCA,SAAOE,WAAP;AACD,CA7CM","sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\nimport type { AppSettingsAPIResponse, StreamChat } from 'stream-chat';\n\nimport * as dbApi from '../../../store/apis';\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\nexport const useAppSettings = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n client: StreamChat<StreamChatGenerics>,\n isOnline: boolean | null,\n enableOfflineSupport: boolean,\n): AppSettingsAPIResponse | null => {\n const [appSettings, setAppSettings] = useState<AppSettingsAPIResponse | null>(null);\n const isMounted = useRef(true);\n\n useEffect(() => {\n async function enforeAppSettings() {\n if (!client.userID) return;\n\n if (!isOnline && enableOfflineSupport) {\n const appSettings = dbApi.getAppSettings({ currentUserId: client.userID });\n setAppSettings(appSettings);\n return;\n }\n\n try {\n const appSettings = await client.getAppSettings();\n if (isMounted.current) {\n setAppSettings(appSettings);\n enableOfflineSupport &&\n dbApi.upsertAppSettings({\n appSettings,\n currentUserId: client.userID as string,\n });\n }\n } catch (error: unknown) {\n if (error instanceof Error) {\n console.error(`An error occurred while getting app settings: ${error}`);\n }\n }\n }\n\n enforeAppSettings();\n\n return () => {\n isMounted.current = false;\n };\n }, [client, isOnline]);\n\n return appSettings;\n};\n"]}
|
|
@@ -22,7 +22,7 @@ var _native = require("../../../native");
|
|
|
22
22
|
var useIsOnline = function useIsOnline(client) {
|
|
23
23
|
var closeConnectionOnBackground = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
24
24
|
|
|
25
|
-
var _useState = (0, _react.useState)(
|
|
25
|
+
var _useState = (0, _react.useState)(null),
|
|
26
26
|
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
|
|
27
27
|
isOnline = _useState2[0],
|
|
28
28
|
setIsOnline = _useState2[1];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["useIsOnline.ts"],"names":["useIsOnline","client","closeConnectionOnBackground","isOnline","setIsOnline","connectionRecovering","setConnectionRecovering","isMounted","clientExists","onBackground","cid","activeChannels","channel","state","setIsUpToDate","closeConnection","onForeground","openConnection","handleChangedEvent","event","online","handleRecoveredEvent","notifyChatClient","netInfoState","wsConnection","onlineStatusChanged","type","unsubscribeNetInfo","setNetInfoListener","NetInfo","addEventListener","isHealthy","setInitialOnlineState","fetch","status","current","chatListeners","push","on","forEach","listener","unsubscribe"],"mappings":";;;;;;;;;;;;;AAAA;;AAMA;;AACA;;AACA;;AAUO,IAAMA,WAAW,GAAG,SAAdA,WAAc,CAGzBC,MAHyB,EAKtB;AAAA,MADHC,2BACG,uEAD2B,IAC3B;;AACH,kBAAgC,
|
|
1
|
+
{"version":3,"sources":["useIsOnline.ts"],"names":["useIsOnline","client","closeConnectionOnBackground","isOnline","setIsOnline","connectionRecovering","setConnectionRecovering","isMounted","clientExists","onBackground","cid","activeChannels","channel","state","setIsUpToDate","closeConnection","onForeground","openConnection","handleChangedEvent","event","online","handleRecoveredEvent","notifyChatClient","netInfoState","wsConnection","onlineStatusChanged","type","unsubscribeNetInfo","setNetInfoListener","NetInfo","addEventListener","isHealthy","setInitialOnlineState","fetch","status","current","chatListeners","push","on","forEach","listener","unsubscribe"],"mappings":";;;;;;;;;;;;;AAAA;;AAMA;;AACA;;AACA;;AAUO,IAAMA,WAAW,GAAG,SAAdA,WAAc,CAGzBC,MAHyB,EAKtB;AAAA,MADHC,2BACG,uEAD2B,IAC3B;;AACH,kBAAgC,qBAAyB,IAAzB,CAAhC;AAAA;AAAA,MAAOC,QAAP;AAAA,MAAiBC,WAAjB;;AACA,mBAAwD,qBAAS,KAAT,CAAxD;AAAA;AAAA,MAAOC,oBAAP;AAAA,MAA6BC,uBAA7B;;AACA,MAAMC,SAAS,GAAG,uCAAlB;AACA,MAAMC,YAAY,GAAG,CAAC,CAACP,MAAvB;AAEA,MAAMQ,YAAY,GAAG,wBAAY,YAAM;AACrC,QAAI,CAACP,2BAAD,IAAgC,CAACM,YAArC,EAAmD;;AAEnD,SAAK,IAAME,GAAX,IAAkBT,MAAM,CAACU,cAAzB,EAAyC;AACvC,UAAMC,OAAO,GAAGX,MAAM,CAACU,cAAP,CAAsBD,GAAtB,CAAhB;AACAE,MAAAA,OAAO,QAAP,YAAAA,OAAO,CAAEC,KAAT,CAAeC,aAAf,CAA6B,KAA7B;AACD;;AAEDb,IAAAA,MAAM,CAACc,eAAP;AACAX,IAAAA,WAAW,CAAC,KAAD,CAAX;AACD,GAVoB,EAUlB,CAACF,2BAAD,EAA8BD,MAA9B,EAAsCO,YAAtC,CAVkB,CAArB;AAYA,MAAMQ,YAAY,GAAG,wBAAY,YAAM;AACrC,QAAI,CAACR,YAAL,EAAmB;AAEnBP,IAAAA,MAAM,CAACgB,cAAP;AACD,GAJoB,EAIlB,CAAChB,MAAD,EAASO,YAAT,CAJkB,CAArB;AAMA,gDAAoBQ,YAApB,EAAkCP,YAAlC;AAEA,wBAAU,YAAM;AACd,QAAMS,kBAAkB,GAAG,SAArBA,kBAAqB,CAACC,KAAD,EAA4C;AACrEb,MAAAA,uBAAuB,CAAC,CAACa,KAAK,CAACC,MAAR,CAAvB;AACAhB,MAAAA,WAAW,CAACe,KAAK,CAACC,MAAN,IAAgB,KAAjB,CAAX;AACD,KAHD;;AAKA,QAAMC,oBAAoB,GAAG,SAAvBA,oBAAuB;AAAA,aAAMf,uBAAuB,CAAC,KAAD,CAA7B;AAAA,KAA7B;;AAEA,QAAMgB,gBAAgB,GAAG,SAAnBA,gBAAmB,CAACC,YAAD,EAA2B;AAClD,UAAItB,MAAJ,YAAIA,MAAM,CAAEuB,YAAZ,EAA0B;AACxB,YAAID,YAAJ,EAAkB;AAChBtB,UAAAA,MAAM,CAACuB,YAAP,CAAoBC,mBAApB,CAAwC;AACtCC,YAAAA,IAAI,EAAE;AADgC,WAAxC;AAGD,SAJD,MAIO;AACLzB,UAAAA,MAAM,CAACuB,YAAP,CAAoBC,mBAApB,CAAwC;AACtCC,YAAAA,IAAI,EAAE;AADgC,WAAxC;AAGD;AACF;AACF,KAZD;;AAcA,QAAIC,kBAAJ;;AACA,QAAMC,kBAAkB,GAAG,SAArBA,kBAAqB,GAAM;AAC/BD,MAAAA,kBAAkB,GAAGE,gBAAQC,gBAAR,CAAyB,UAACP,YAAD,EAAkB;AAAA;;AAC9D,YAAIA,YAAY,KAAK,KAAjB,IAA0B,0BAACtB,MAAM,CAACuB,YAAR,aAAC,qBAAqBO,SAAtB,CAA9B,EAA+D;AAC7DzB,UAAAA,uBAAuB,CAAC,IAAD,CAAvB;AACAF,UAAAA,WAAW,CAAC,KAAD,CAAX;AACD;;AACDkB,QAAAA,gBAAgB,CAACC,YAAD,CAAhB;AACD,OANoB,CAArB;AAOD,KARD;;AAUA,QAAMS,qBAAqB;AAAA,iFAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBACPH,gBAAQI,KAAR,EADO;;AAAA;AACtBC,gBAAAA,MADsB;;AAE5B,oBAAI3B,SAAS,CAAC4B,OAAd,EAAuB;AACrB/B,kBAAAA,WAAW,CAAC8B,MAAD,CAAX;AACAZ,kBAAAA,gBAAgB,CAACY,MAAD,CAAhB;AACD;;AAL2B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAAH;;AAAA,sBAArBF,qBAAqB;AAAA;AAAA;AAAA,OAA3B;;AAQAA,IAAAA,qBAAqB;AACrB,QAAMI,aAAkD,GAAG,EAA3D;;AAEA,QAAInC,MAAJ,EAAY;AACVmC,MAAAA,aAAa,CAACC,IAAd,CAAmBpC,MAAM,CAACqC,EAAP,CAAU,oBAAV,EAAgCpB,kBAAhC,CAAnB;AACAkB,MAAAA,aAAa,CAACC,IAAd,CAAmBpC,MAAM,CAACqC,EAAP,CAAU,sBAAV,EAAkCjB,oBAAlC,CAAnB;AACAO,MAAAA,kBAAkB;AACnB;;AAED,WAAO,YAAM;AACXQ,MAAAA,aAAa,CAACG,OAAd,CAAsB,UAACC,QAAD;AAAA,eAAcA,QAAQ,CAACC,WAAvB,oBAAcD,QAAQ,CAACC,WAAT,EAAd;AAAA,OAAtB;AACAd,MAAAA,kBAAkB,QAAlB,YAAAA,kBAAkB;AACnB,KAHD;AAID,GAtDD,EAsDG,CAACnB,YAAD,CAtDH;AAwDA,SAAO;AAAEH,IAAAA,oBAAoB,EAApBA,oBAAF;AAAwBF,IAAAA,QAAQ,EAARA;AAAxB,GAAP;AACD,CAxFM","sourcesContent":["import { useCallback, useEffect, useState } from 'react';\n\nimport type { NetInfoSubscription } from '@react-native-community/netinfo';\n\nimport type { StreamChat, Event as StreamEvent } from 'stream-chat';\n\nimport { useAppStateListener } from '../../../hooks/useAppStateListener';\nimport { useIsMountedRef } from '../../../hooks/useIsMountedRef';\nimport { NetInfo } from '../../../native';\n\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\n\n/**\n * Disconnect the websocket connection when app goes to background,\n * and reconnect when app comes to foreground.\n * We do this to make sure the user receives push notifications when app is in the background.\n * You can't receive push notification until you have active websocket connection.\n */\nexport const useIsOnline = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n client: StreamChat<StreamChatGenerics>,\n closeConnectionOnBackground = true,\n) => {\n const [isOnline, setIsOnline] = useState<boolean | null>(null);\n const [connectionRecovering, setConnectionRecovering] = useState(false);\n const isMounted = useIsMountedRef();\n const clientExists = !!client;\n\n const onBackground = useCallback(() => {\n if (!closeConnectionOnBackground || !clientExists) return;\n\n for (const cid in client.activeChannels) {\n const channel = client.activeChannels[cid];\n channel?.state.setIsUpToDate(false);\n }\n\n client.closeConnection();\n setIsOnline(false);\n }, [closeConnectionOnBackground, client, clientExists]);\n\n const onForeground = useCallback(() => {\n if (!clientExists) return;\n\n client.openConnection();\n }, [client, clientExists]);\n\n useAppStateListener(onForeground, onBackground);\n\n useEffect(() => {\n const handleChangedEvent = (event: StreamEvent<StreamChatGenerics>) => {\n setConnectionRecovering(!event.online);\n setIsOnline(event.online || false);\n };\n\n const handleRecoveredEvent = () => setConnectionRecovering(false);\n\n const notifyChatClient = (netInfoState: boolean) => {\n if (client?.wsConnection) {\n if (netInfoState) {\n client.wsConnection.onlineStatusChanged({\n type: 'online',\n } as Event);\n } else {\n client.wsConnection.onlineStatusChanged({\n type: 'offline',\n } as Event);\n }\n }\n };\n\n let unsubscribeNetInfo: NetInfoSubscription;\n const setNetInfoListener = () => {\n unsubscribeNetInfo = NetInfo.addEventListener((netInfoState) => {\n if (netInfoState === false && !client.wsConnection?.isHealthy) {\n setConnectionRecovering(true);\n setIsOnline(false);\n }\n notifyChatClient(netInfoState);\n });\n };\n\n const setInitialOnlineState = async () => {\n const status = await NetInfo.fetch();\n if (isMounted.current) {\n setIsOnline(status);\n notifyChatClient(status);\n }\n };\n\n setInitialOnlineState();\n const chatListeners: Array<ReturnType<StreamChat['on']>> = [];\n\n if (client) {\n chatListeners.push(client.on('connection.changed', handleChangedEvent));\n chatListeners.push(client.on('connection.recovered', handleRecoveredEvent));\n setNetInfoListener();\n }\n\n return () => {\n chatListeners.forEach((listener) => listener.unsubscribe?.());\n unsubscribeNetInfo?.();\n };\n }, [clientExists]);\n\n return { connectionRecovering, isOnline };\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["ChatContext.tsx"],"names":["ChatContext","React","createContext","DEFAULT_BASE_CONTEXT_VALUE","ChatProvider","children","value","useChatContext","contextValue","Error","withChatContext","Component","WithChatContextComponent","props","chatContext","displayName"],"mappings":";;;;;;;;;;;AAAA;;AAMA;;AAEA;;AACA;;;;;;;;;AAyDO,IAAMA,WAAW,GAAGC,kBAAMC,aAAN,CAAoBC,mDAApB,CAApB;;;;AAEA,IAAMC,YAAY,GAAG,SAAfA,YAAe;AAAA,MAG1BC,QAH0B,QAG1BA,QAH0B;AAAA,MAI1BC,KAJ0B,QAI1BA,KAJ0B;AAAA,SAQ1B,gCAAC,WAAD,CAAa,QAAb;AAAsB,IAAA,KAAK,EAAEA,KAA7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KACGD,QADH,CAR0B;AAAA,CAArB;;;;AAaA,IAAME,cAAc,GAAG,SAAjBA,cAAiB,GAEvB;AACL,MAAMC,YAAY,GAAG,uBAAWR,WAAX,CAArB;;AAEA,MAAIQ,YAAY,KAAKL,mDAAjB,IAA+C,CAAC,2CAApD,EAAyE;AACvE,UAAM,IAAIM,KAAJ,+MAAN;AAGD;;AAED,SAAOD,YAAP;AACD,CAZM;;;;AAmBA,IAAME,eAAe,GAAG,SAAlBA,eAAkB,CAI7BC,SAJ6B,EAKqC;AAClE,MAAMC,wBAAwB,GAAG,SAA3BA,wBAA2B,CAACC,KAAD,EAAgE;AAC/F,QAAMC,WAAW,GAAGP,cAAc,EAAlC;AAEA,WAAO,gCAAC,SAAD,gCAAgBM,KAAhB,EAAiCC,WAAjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAAP;AACD,GAJD;;AAKAF,EAAAA,wBAAwB,CAACG,WAAzB,uBAAyD,oCAAeJ,SAAf,CAAzD;AACA,SAAOC,wBAAP;AACD,CAbM","sourcesContent":["import React, { PropsWithChildren, useContext } from 'react';\nimport type { ImageProps } from 'react-native';\n\nimport type { AppSettingsAPIResponse, Channel, Mute, StreamChat } from 'stream-chat';\n\nimport type { DefaultStreamChatGenerics, UnknownType } from '../../types/types';\nimport { DEFAULT_BASE_CONTEXT_VALUE } from '../utils/defaultBaseContextValue';\n\nimport { getDisplayName } from '../utils/getDisplayName';\nimport { isTestEnvironment } from '../utils/isTestEnvironment';\n\nexport type ChatContextValue<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n /**\n * Object of application settings returned from Stream.\n * */\n appSettings: AppSettingsAPIResponse<StreamChatGenerics> | null;\n /**\n * The StreamChat client object\n *\n * ```\n * import { StreamChat } from 'stream-chat';\n * import { Chat } from 'stream-chat-react-native';\n *\n * const client = StreamChat.getInstance('api_key);\n * await client.connectUser('user_id', 'userToken');\n *\n * <Chat client={client}>\n * </Chat>\n * ```\n *\n * @overrideType StreamChat\n * */\n client: StreamChat<StreamChatGenerics>;\n connectionRecovering: boolean;\n enableOfflineSupport: boolean;\n ImageComponent: React.ComponentType<ImageProps>;\n isOnline: boolean;\n mutedUsers: Mute<StreamChatGenerics>[];\n /**\n * @param newChannel Channel to set as active.\n *\n * @overrideType Function\n */\n setActiveChannel: (newChannel?: Channel<StreamChatGenerics>) => void;\n /**\n * Instance of channel object from stream-chat package.\n *\n * Please check the docs around how to create or query channel - https://getstream.io/chat/docs/javascript/creating_channels/?language=javascript\n *\n * ```\n * import { StreamChat, Channel } from 'stream-chat';\n * import { Chat, Channel} from 'stream-chat-react-native';\n *\n * const client = StreamChat.getInstance('api_key');\n * await client.connectUser('user_id', 'user_token');\n * const channel = client.channel('messaging', 'channel_id');\n * await channel.watch();\n * ```\n *\n * @overrideType Channel\n */\n channel?: Channel<StreamChatGenerics>;\n};\n\nexport const ChatContext = React.createContext(DEFAULT_BASE_CONTEXT_VALUE as ChatContextValue);\n\nexport const ChatProvider = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n children,\n value,\n}: PropsWithChildren<{\n value?: ChatContextValue<StreamChatGenerics>;\n}>) => (\n <ChatContext.Provider value={value as unknown as ChatContextValue}>\n {children}\n </ChatContext.Provider>\n);\n\nexport const useChatContext = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>() => {\n const contextValue = useContext(ChatContext) as unknown as ChatContextValue<StreamChatGenerics>;\n\n if (contextValue === DEFAULT_BASE_CONTEXT_VALUE && !isTestEnvironment()) {\n throw new Error(\n `The useChatContext hook was called outside the ChatContext Provider. Make sure you have configured Chat component correctly - https://getstream.io/chat/docs/sdk/reactnative/basics/hello_stream_chat/#chat`,\n );\n }\n\n return contextValue;\n};\n\n/**\n * Typescript currently does not support partial inference so if ChatContext\n * typing is desired while using the HOC withChatContext the Props for the\n * wrapped component must be provided as the first generic.\n */\nexport const withChatContext = <\n P extends UnknownType,\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n Component: React.ComponentType<P>,\n): React.FC<Omit<P, keyof ChatContextValue<StreamChatGenerics>>> => {\n const WithChatContextComponent = (props: Omit<P, keyof ChatContextValue<StreamChatGenerics>>) => {\n const chatContext = useChatContext<StreamChatGenerics>();\n\n return <Component {...(props as P)} {...chatContext} />;\n };\n WithChatContextComponent.displayName = `WithChatContext${getDisplayName(Component)}`;\n return WithChatContextComponent;\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["ChatContext.tsx"],"names":["ChatContext","React","createContext","DEFAULT_BASE_CONTEXT_VALUE","ChatProvider","children","value","useChatContext","contextValue","Error","withChatContext","Component","WithChatContextComponent","props","chatContext","displayName"],"mappings":";;;;;;;;;;;AAAA;;AAMA;;AAEA;;AACA;;;;;;;;;AAyDO,IAAMA,WAAW,GAAGC,kBAAMC,aAAN,CAAoBC,mDAApB,CAApB;;;;AAEA,IAAMC,YAAY,GAAG,SAAfA,YAAe;AAAA,MAG1BC,QAH0B,QAG1BA,QAH0B;AAAA,MAI1BC,KAJ0B,QAI1BA,KAJ0B;AAAA,SAQ1B,gCAAC,WAAD,CAAa,QAAb;AAAsB,IAAA,KAAK,EAAEA,KAA7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KACGD,QADH,CAR0B;AAAA,CAArB;;;;AAaA,IAAME,cAAc,GAAG,SAAjBA,cAAiB,GAEvB;AACL,MAAMC,YAAY,GAAG,uBAAWR,WAAX,CAArB;;AAEA,MAAIQ,YAAY,KAAKL,mDAAjB,IAA+C,CAAC,2CAApD,EAAyE;AACvE,UAAM,IAAIM,KAAJ,+MAAN;AAGD;;AAED,SAAOD,YAAP;AACD,CAZM;;;;AAmBA,IAAME,eAAe,GAAG,SAAlBA,eAAkB,CAI7BC,SAJ6B,EAKqC;AAClE,MAAMC,wBAAwB,GAAG,SAA3BA,wBAA2B,CAACC,KAAD,EAAgE;AAC/F,QAAMC,WAAW,GAAGP,cAAc,EAAlC;AAEA,WAAO,gCAAC,SAAD,gCAAgBM,KAAhB,EAAiCC,WAAjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAAP;AACD,GAJD;;AAKAF,EAAAA,wBAAwB,CAACG,WAAzB,uBAAyD,oCAAeJ,SAAf,CAAzD;AACA,SAAOC,wBAAP;AACD,CAbM","sourcesContent":["import React, { PropsWithChildren, useContext } from 'react';\nimport type { ImageProps } from 'react-native';\n\nimport type { AppSettingsAPIResponse, Channel, Mute, StreamChat } from 'stream-chat';\n\nimport type { DefaultStreamChatGenerics, UnknownType } from '../../types/types';\nimport { DEFAULT_BASE_CONTEXT_VALUE } from '../utils/defaultBaseContextValue';\n\nimport { getDisplayName } from '../utils/getDisplayName';\nimport { isTestEnvironment } from '../utils/isTestEnvironment';\n\nexport type ChatContextValue<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n /**\n * Object of application settings returned from Stream.\n * */\n appSettings: AppSettingsAPIResponse<StreamChatGenerics> | null;\n /**\n * The StreamChat client object\n *\n * ```\n * import { StreamChat } from 'stream-chat';\n * import { Chat } from 'stream-chat-react-native';\n *\n * const client = StreamChat.getInstance('api_key);\n * await client.connectUser('user_id', 'userToken');\n *\n * <Chat client={client}>\n * </Chat>\n * ```\n *\n * @overrideType StreamChat\n * */\n client: StreamChat<StreamChatGenerics>;\n connectionRecovering: boolean;\n enableOfflineSupport: boolean;\n ImageComponent: React.ComponentType<ImageProps>;\n isOnline: boolean | null;\n mutedUsers: Mute<StreamChatGenerics>[];\n /**\n * @param newChannel Channel to set as active.\n *\n * @overrideType Function\n */\n setActiveChannel: (newChannel?: Channel<StreamChatGenerics>) => void;\n /**\n * Instance of channel object from stream-chat package.\n *\n * Please check the docs around how to create or query channel - https://getstream.io/chat/docs/javascript/creating_channels/?language=javascript\n *\n * ```\n * import { StreamChat, Channel } from 'stream-chat';\n * import { Chat, Channel} from 'stream-chat-react-native';\n *\n * const client = StreamChat.getInstance('api_key');\n * await client.connectUser('user_id', 'user_token');\n * const channel = client.channel('messaging', 'channel_id');\n * await channel.watch();\n * ```\n *\n * @overrideType Channel\n */\n channel?: Channel<StreamChatGenerics>;\n};\n\nexport const ChatContext = React.createContext(DEFAULT_BASE_CONTEXT_VALUE as ChatContextValue);\n\nexport const ChatProvider = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n children,\n value,\n}: PropsWithChildren<{\n value?: ChatContextValue<StreamChatGenerics>;\n}>) => (\n <ChatContext.Provider value={value as unknown as ChatContextValue}>\n {children}\n </ChatContext.Provider>\n);\n\nexport const useChatContext = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>() => {\n const contextValue = useContext(ChatContext) as unknown as ChatContextValue<StreamChatGenerics>;\n\n if (contextValue === DEFAULT_BASE_CONTEXT_VALUE && !isTestEnvironment()) {\n throw new Error(\n `The useChatContext hook was called outside the ChatContext Provider. Make sure you have configured Chat component correctly - https://getstream.io/chat/docs/sdk/reactnative/basics/hello_stream_chat/#chat`,\n );\n }\n\n return contextValue;\n};\n\n/**\n * Typescript currently does not support partial inference so if ChatContext\n * typing is desired while using the HOC withChatContext the Props for the\n * wrapped component must be provided as the first generic.\n */\nexport const withChatContext = <\n P extends UnknownType,\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n Component: React.ComponentType<P>,\n): React.FC<Omit<P, keyof ChatContextValue<StreamChatGenerics>>> => {\n const WithChatContextComponent = (props: Omit<P, keyof ChatContextValue<StreamChatGenerics>>) => {\n const chatContext = useChatContext<StreamChatGenerics>();\n\n return <Component {...(props as P)} {...chatContext} />;\n };\n WithChatContextComponent.displayName = `WithChatContext${getDisplayName(Component)}`;\n return WithChatContextComponent;\n};\n"]}
|
|
@@ -13,6 +13,8 @@ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/cl
|
|
|
13
13
|
|
|
14
14
|
var _constants = require("./constants");
|
|
15
15
|
|
|
16
|
+
var _QuickSqliteClient_v = require("./QuickSqliteClient_v4");
|
|
17
|
+
|
|
16
18
|
var _schema = require("./schema");
|
|
17
19
|
|
|
18
20
|
var _createCreateTableQuery = require("./sqlite-utils/createCreateTableQuery");
|
|
@@ -39,7 +41,15 @@ QuickSqliteClient.setDbVersion = function (version) {
|
|
|
39
41
|
return QuickSqliteClient.dbVersion = version;
|
|
40
42
|
};
|
|
41
43
|
|
|
44
|
+
QuickSqliteClient.isQuickSqliteV4 = sqlite.executeSql ? true : false;
|
|
45
|
+
|
|
42
46
|
QuickSqliteClient.openDB = function () {
|
|
47
|
+
if (QuickSqliteClient.isQuickSqliteV4) {
|
|
48
|
+
_QuickSqliteClient_v.QuickSqliteClient_v4.openDB();
|
|
49
|
+
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
|
|
43
53
|
try {
|
|
44
54
|
sqlite.open(QuickSqliteClient.dbName, QuickSqliteClient.dbLocation);
|
|
45
55
|
sqlite.execute(QuickSqliteClient.dbName, "PRAGMA foreign_keys = ON", []);
|
|
@@ -49,6 +59,12 @@ QuickSqliteClient.openDB = function () {
|
|
|
49
59
|
};
|
|
50
60
|
|
|
51
61
|
QuickSqliteClient.closeDB = function () {
|
|
62
|
+
if (QuickSqliteClient.isQuickSqliteV4) {
|
|
63
|
+
_QuickSqliteClient_v.QuickSqliteClient_v4.closeDB();
|
|
64
|
+
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
|
|
52
68
|
try {
|
|
53
69
|
sqlite.close(QuickSqliteClient.dbName);
|
|
54
70
|
} catch (e) {
|
|
@@ -58,6 +74,13 @@ QuickSqliteClient.closeDB = function () {
|
|
|
58
74
|
|
|
59
75
|
QuickSqliteClient.executeSqlBatch = function (queries) {
|
|
60
76
|
if (!queries || !queries.length) return;
|
|
77
|
+
|
|
78
|
+
if (QuickSqliteClient.isQuickSqliteV4) {
|
|
79
|
+
_QuickSqliteClient_v.QuickSqliteClient_v4.executeSqlBatch(queries);
|
|
80
|
+
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
|
|
61
84
|
QuickSqliteClient.openDB();
|
|
62
85
|
|
|
63
86
|
try {
|
|
@@ -70,9 +93,13 @@ QuickSqliteClient.executeSqlBatch = function (queries) {
|
|
|
70
93
|
};
|
|
71
94
|
|
|
72
95
|
QuickSqliteClient.executeSql = function (query, params) {
|
|
73
|
-
QuickSqliteClient.
|
|
96
|
+
if (QuickSqliteClient.isQuickSqliteV4) {
|
|
97
|
+
return _QuickSqliteClient_v.QuickSqliteClient_v4.executeSql(query, params);
|
|
98
|
+
}
|
|
74
99
|
|
|
75
100
|
try {
|
|
101
|
+
QuickSqliteClient.openDB();
|
|
102
|
+
|
|
76
103
|
var _sqlite$execute = sqlite.execute(_constants.DB_NAME, query, params),
|
|
77
104
|
rows = _sqlite$execute.rows;
|
|
78
105
|
|
|
@@ -92,6 +119,10 @@ QuickSqliteClient.dropTables = function () {
|
|
|
92
119
|
};
|
|
93
120
|
|
|
94
121
|
QuickSqliteClient.deleteDatabase = function () {
|
|
122
|
+
if (QuickSqliteClient.isQuickSqliteV4) {
|
|
123
|
+
return _QuickSqliteClient_v.QuickSqliteClient_v4.deleteDatabase();
|
|
124
|
+
}
|
|
125
|
+
|
|
95
126
|
try {
|
|
96
127
|
sqlite["delete"](QuickSqliteClient.dbName, QuickSqliteClient.dbLocation);
|
|
97
128
|
} catch (e) {
|
|
@@ -106,6 +137,10 @@ QuickSqliteClient.initializeDatabase = function () {
|
|
|
106
137
|
throw new Error('Please install "react-native-quick-sqlite" package to enable offline support');
|
|
107
138
|
}
|
|
108
139
|
|
|
140
|
+
if (QuickSqliteClient.isQuickSqliteV4) {
|
|
141
|
+
console.warn('You seem to be using an older version of "react-native-quick-sqlite" dependency,', 'and we are going to drop support for it in the next major release.', 'Please upgrade to the version v5 of "react-native-quick-sqlite" to avoid any issues.');
|
|
142
|
+
}
|
|
143
|
+
|
|
109
144
|
var version = QuickSqliteClient.getUserPragmaVersion();
|
|
110
145
|
|
|
111
146
|
if (version !== QuickSqliteClient.dbVersion) {
|
|
@@ -121,12 +156,22 @@ QuickSqliteClient.initializeDatabase = function () {
|
|
|
121
156
|
};
|
|
122
157
|
|
|
123
158
|
QuickSqliteClient.updateUserPragmaVersion = function (version) {
|
|
159
|
+
if (QuickSqliteClient.isQuickSqliteV4) {
|
|
160
|
+
_QuickSqliteClient_v.QuickSqliteClient_v4.updateUserPragmaVersion(version);
|
|
161
|
+
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
|
|
124
165
|
QuickSqliteClient.openDB();
|
|
125
166
|
sqlite.execute(_constants.DB_NAME, "PRAGMA user_version = " + version, []);
|
|
126
167
|
QuickSqliteClient.closeDB();
|
|
127
168
|
};
|
|
128
169
|
|
|
129
170
|
QuickSqliteClient.getUserPragmaVersion = function () {
|
|
171
|
+
if (QuickSqliteClient.isQuickSqliteV4) {
|
|
172
|
+
return _QuickSqliteClient_v.QuickSqliteClient_v4.getUserPragmaVersion();
|
|
173
|
+
}
|
|
174
|
+
|
|
130
175
|
QuickSqliteClient.openDB();
|
|
131
176
|
|
|
132
177
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["QuickSqliteClient.ts"],"names":["sqlite","require","QuickSQLite","e","QuickSqliteClient","dbVersion","dbName","DB_NAME","dbLocation","DB_LOCATION","getDbVersion","setDbVersion","version","openDB","open","execute","console","error","closeDB","close","executeSqlBatch","queries","length","executeBatch","Error","executeSql","query","params","rows","_array","dropTables","Object","keys","tables","map","table","deleteDatabase","initializeDatabase","undefined","getUserPragmaVersion","updateUserPragmaVersion","q","reduce","queriesSoFar","tableName","push","result","user_version","resetDB"],"mappings":"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","sourcesContent":["/* eslint-disable no-underscore-dangle */\nimport type { QuickSQLite } from 'react-native-quick-sqlite';\nlet sqlite: typeof QuickSQLite;\n\ntry {\n sqlite = require('react-native-quick-sqlite').QuickSQLite;\n} catch (e) {\n // Failed for one of the reason\n // 1. Running on expo, where we don't support offline storage yet.\n // 2. Offline support is disabled, in which case this library is not installed.\n}\n\nimport { DB_LOCATION, DB_NAME } from './constants';\nimport { tables } from './schema';\nimport { createCreateTableQuery } from './sqlite-utils/createCreateTableQuery';\nimport type { PreparedQueries, Table } from './types';\n\n/**\n * QuickSqliteClient takes care of any direct interaction with sqlite.\n * This way usage react-native-quick-sqlite package is scoped to a single class/file.\n */\nexport class QuickSqliteClient {\n static dbVersion = 3;\n\n static dbName = DB_NAME;\n static dbLocation = DB_LOCATION;\n\n static getDbVersion = () => this.dbVersion;\n // Force a specific db version. This is mainly useful for testsuit.\n static setDbVersion = (version: number) => (this.dbVersion = version);\n\n static openDB = () => {\n try {\n sqlite.open(this.dbName, this.dbLocation);\n sqlite.execute(this.dbName, `PRAGMA foreign_keys = ON`, []);\n } catch (e) {\n console.error(`Error opening database ${this.dbName}: ${e}`);\n }\n };\n\n static closeDB = () => {\n try {\n sqlite.close(this.dbName);\n } catch (e) {\n console.error(`Error closing database ${this.dbName}: ${e}`);\n }\n };\n\n static executeSqlBatch = (queries: PreparedQueries[]) => {\n if (!queries || !queries.length) return;\n this.openDB();\n\n try {\n sqlite.executeBatch(DB_NAME, queries);\n this.closeDB();\n } catch (e) {\n this.closeDB();\n throw new Error(`Query/queries failed: ${e}`);\n }\n };\n\n static executeSql = (query: string, params?: string[]) => {\n this.openDB();\n\n try {\n const { rows } = sqlite.execute(DB_NAME, query, params);\n this.closeDB();\n\n return rows ? rows._array : [];\n } catch (e) {\n this.closeDB();\n throw new Error(`Query/queries failed: ${e}: `);\n }\n };\n\n static dropTables = () => {\n const queries: PreparedQueries[] = Object.keys(tables).map((table) => [\n `DROP TABLE IF EXISTS ${table}`,\n [],\n ]);\n\n this.executeSqlBatch(queries);\n };\n\n static deleteDatabase = () => {\n try {\n sqlite.delete(this.dbName, this.dbLocation);\n } catch (e) {\n throw new Error(`Error deleting DB: ${e}`);\n }\n\n return true;\n };\n\n static initializeDatabase = () => {\n // @ts-ignore\n if (sqlite === undefined) {\n throw new Error(\n 'Please install \"react-native-quick-sqlite\" package to enable offline support',\n );\n }\n\n const version = this.getUserPragmaVersion();\n\n if (version !== this.dbVersion) {\n this.dropTables();\n this.updateUserPragmaVersion(this.dbVersion);\n }\n const q = (Object.keys(tables) as Table[]).reduce<PreparedQueries[]>(\n (queriesSoFar, tableName) => {\n queriesSoFar.push(...createCreateTableQuery(tableName));\n return queriesSoFar;\n },\n [],\n );\n\n this.executeSqlBatch(q);\n };\n\n static updateUserPragmaVersion = (version: number) => {\n this.openDB();\n\n sqlite.execute(DB_NAME, `PRAGMA user_version = ${version}`, []);\n\n this.closeDB();\n };\n\n static getUserPragmaVersion = () => {\n this.openDB();\n\n try {\n const { rows } = sqlite.execute(DB_NAME, `PRAGMA user_version`, []);\n const result = rows ? rows._array : [];\n this.closeDB();\n return result[0].user_version as number;\n } catch (e) {\n this.closeDB();\n throw new Error(`Querying for user_version failed: ${e}`);\n }\n };\n\n static resetDB = () => {\n this.dropTables();\n this.initializeDatabase();\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["QuickSqliteClient.ts"],"names":["sqlite","require","QuickSQLite","e","QuickSqliteClient","dbVersion","dbName","DB_NAME","dbLocation","DB_LOCATION","getDbVersion","setDbVersion","version","isQuickSqliteV4","executeSql","openDB","QuickSqliteClient_v4","open","execute","console","error","closeDB","close","executeSqlBatch","queries","length","executeBatch","Error","query","params","rows","_array","dropTables","Object","keys","tables","map","table","deleteDatabase","initializeDatabase","undefined","warn","getUserPragmaVersion","updateUserPragmaVersion","q","reduce","queriesSoFar","tableName","push","result","user_version","resetDB"],"mappings":"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","sourcesContent":["/* eslint-disable no-underscore-dangle */\nimport type { QuickSQLite } from 'react-native-quick-sqlite';\nlet sqlite: typeof QuickSQLite;\n\ntry {\n sqlite = require('react-native-quick-sqlite').QuickSQLite;\n} catch (e) {\n // Failed for one of the reason\n // 1. Running on expo, where we don't support offline storage yet.\n // 2. Offline support is disabled, in which case this library is not installed.\n}\n\nimport { DB_LOCATION, DB_NAME } from './constants';\nimport { QuickSqliteClient_v4 } from './QuickSqliteClient_v4';\nimport { tables } from './schema';\nimport { createCreateTableQuery } from './sqlite-utils/createCreateTableQuery';\nimport type { PreparedQueries, Table } from './types';\n\n/**\n * QuickSqliteClient takes care of any direct interaction with sqlite.\n * This way usage react-native-quick-sqlite package is scoped to a single class/file.\n *\n * TODO: Drop the support for v4 of react-native-quick-sqlite in the next major release.\n */\nexport class QuickSqliteClient {\n static dbVersion = 3;\n\n static dbName = DB_NAME;\n static dbLocation = DB_LOCATION;\n\n static getDbVersion = () => this.dbVersion;\n // Force a specific db version. This is mainly useful for testsuit.\n static setDbVersion = (version: number) => (this.dbVersion = version);\n\n // @ts-ignore\n static isQuickSqliteV4 = sqlite.executeSql ? true : false;\n\n // print if legacy version\n static openDB = () => {\n if (this.isQuickSqliteV4) {\n QuickSqliteClient_v4.openDB();\n return;\n }\n\n try {\n sqlite.open(this.dbName, this.dbLocation);\n sqlite.execute(this.dbName, `PRAGMA foreign_keys = ON`, []);\n } catch (e) {\n console.error(`Error opening database ${this.dbName}: ${e}`);\n }\n };\n\n static closeDB = () => {\n if (this.isQuickSqliteV4) {\n QuickSqliteClient_v4.closeDB();\n return;\n }\n\n try {\n sqlite.close(this.dbName);\n } catch (e) {\n console.error(`Error closing database ${this.dbName}: ${e}`);\n }\n };\n\n static executeSqlBatch = (queries: PreparedQueries[]) => {\n if (!queries || !queries.length) return;\n\n if (this.isQuickSqliteV4) {\n QuickSqliteClient_v4.executeSqlBatch(queries);\n return;\n }\n\n this.openDB();\n try {\n sqlite.executeBatch(DB_NAME, queries);\n\n this.closeDB();\n } catch (e) {\n this.closeDB();\n throw new Error(`Query/queries failed: ${e}`);\n }\n };\n\n static executeSql = (query: string, params?: string[]) => {\n if (this.isQuickSqliteV4) {\n return QuickSqliteClient_v4.executeSql(query, params);\n }\n\n try {\n this.openDB();\n const { rows } = sqlite.execute(DB_NAME, query, params);\n this.closeDB();\n\n return rows ? rows._array : [];\n } catch (e) {\n this.closeDB();\n throw new Error(`Query/queries failed: ${e}: `);\n }\n };\n\n static dropTables = () => {\n const queries: PreparedQueries[] = Object.keys(tables).map((table) => [\n `DROP TABLE IF EXISTS ${table}`,\n [],\n ]);\n\n this.executeSqlBatch(queries);\n };\n\n static deleteDatabase = () => {\n if (this.isQuickSqliteV4) {\n return QuickSqliteClient_v4.deleteDatabase();\n }\n\n try {\n sqlite.delete(this.dbName, this.dbLocation);\n } catch (e) {\n throw new Error(`Error deleting DB: ${e}`);\n }\n\n return true;\n };\n\n static initializeDatabase = () => {\n // @ts-ignore\n if (sqlite === undefined) {\n throw new Error(\n 'Please install \"react-native-quick-sqlite\" package to enable offline support',\n );\n }\n\n if (this.isQuickSqliteV4) {\n console.warn(\n 'You seem to be using an older version of \"react-native-quick-sqlite\" dependency,',\n 'and we are going to drop support for it in the next major release.',\n 'Please upgrade to the version v5 of \"react-native-quick-sqlite\" to avoid any issues.',\n );\n }\n\n const version = this.getUserPragmaVersion();\n\n if (version !== this.dbVersion) {\n this.dropTables();\n this.updateUserPragmaVersion(this.dbVersion);\n }\n const q = (Object.keys(tables) as Table[]).reduce<PreparedQueries[]>(\n (queriesSoFar, tableName) => {\n queriesSoFar.push(...createCreateTableQuery(tableName));\n return queriesSoFar;\n },\n [],\n );\n\n this.executeSqlBatch(q);\n };\n\n static updateUserPragmaVersion = (version: number) => {\n if (this.isQuickSqliteV4) {\n QuickSqliteClient_v4.updateUserPragmaVersion(version);\n return;\n }\n\n this.openDB();\n sqlite.execute(DB_NAME, `PRAGMA user_version = ${version}`, []);\n this.closeDB();\n };\n\n static getUserPragmaVersion = () => {\n if (this.isQuickSqliteV4) {\n return QuickSqliteClient_v4.getUserPragmaVersion();\n }\n\n this.openDB();\n try {\n const { rows } = sqlite.execute(DB_NAME, `PRAGMA user_version`, []);\n const result = rows ? rows._array : [];\n this.closeDB();\n return result[0].user_version as number;\n } catch (e) {\n this.closeDB();\n throw new Error(`Querying for user_version failed: ${e}`);\n }\n };\n\n static resetDB = () => {\n this.dropTables();\n this.initializeDatabase();\n };\n}\n"]}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.QuickSqliteClient_v4 = void 0;
|
|
7
|
+
|
|
8
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
9
|
+
|
|
10
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
11
|
+
|
|
12
|
+
var _constants = require("./constants");
|
|
13
|
+
|
|
14
|
+
var sqlite;
|
|
15
|
+
|
|
16
|
+
try {
|
|
17
|
+
sqlite = require('react-native-quick-sqlite').QuickSQLite;
|
|
18
|
+
} catch (e) {}
|
|
19
|
+
|
|
20
|
+
var QuickSqliteClient_v4 = (0, _createClass2["default"])(function QuickSqliteClient_v4() {
|
|
21
|
+
(0, _classCallCheck2["default"])(this, QuickSqliteClient_v4);
|
|
22
|
+
});
|
|
23
|
+
exports.QuickSqliteClient_v4 = QuickSqliteClient_v4;
|
|
24
|
+
QuickSqliteClient_v4.dbName = _constants.DB_NAME;
|
|
25
|
+
QuickSqliteClient_v4.dbLocation = _constants.DB_LOCATION;
|
|
26
|
+
|
|
27
|
+
QuickSqliteClient_v4.openDB = function () {
|
|
28
|
+
var _sqlite$open = sqlite.open(QuickSqliteClient_v4.dbName, QuickSqliteClient_v4.dbLocation),
|
|
29
|
+
message = _sqlite$open.message,
|
|
30
|
+
status = _sqlite$open.status;
|
|
31
|
+
|
|
32
|
+
sqlite.executeSql(QuickSqliteClient_v4.dbName, "PRAGMA foreign_keys = ON", []);
|
|
33
|
+
|
|
34
|
+
if (status === _constants.DB_STATUS_ERROR) {
|
|
35
|
+
console.error("Error opening database " + QuickSqliteClient_v4.dbName + ": " + message);
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
QuickSqliteClient_v4.closeDB = function () {
|
|
40
|
+
var _sqlite$close = sqlite.close(QuickSqliteClient_v4.dbName),
|
|
41
|
+
message = _sqlite$close.message,
|
|
42
|
+
status = _sqlite$close.status;
|
|
43
|
+
|
|
44
|
+
if (status === _constants.DB_STATUS_ERROR) {
|
|
45
|
+
console.error("Error closing database " + QuickSqliteClient_v4.dbName + ": " + message);
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
QuickSqliteClient_v4.executeSqlBatch = function (queries) {
|
|
50
|
+
QuickSqliteClient_v4.openDB();
|
|
51
|
+
var res = sqlite.executeSqlBatch(_constants.DB_NAME, queries);
|
|
52
|
+
|
|
53
|
+
if (res.status === 1) {
|
|
54
|
+
console.error("Query/queries failed: " + res.message + " " + JSON.stringify(res));
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
QuickSqliteClient_v4.closeDB();
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
QuickSqliteClient_v4.executeSql = function (query, params) {
|
|
61
|
+
QuickSqliteClient_v4.openDB();
|
|
62
|
+
|
|
63
|
+
var _sqlite$executeSql = sqlite.executeSql(_constants.DB_NAME, query, params),
|
|
64
|
+
message = _sqlite$executeSql.message,
|
|
65
|
+
rows = _sqlite$executeSql.rows,
|
|
66
|
+
status = _sqlite$executeSql.status;
|
|
67
|
+
|
|
68
|
+
QuickSqliteClient_v4.closeDB();
|
|
69
|
+
|
|
70
|
+
if (status === 1) {
|
|
71
|
+
console.error("Query/queries failed: " + message + ": ", query);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
return rows ? rows._array : [];
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
QuickSqliteClient_v4.deleteDatabase = function () {
|
|
78
|
+
var _sqlite$delete = sqlite["delete"](QuickSqliteClient_v4.dbName, QuickSqliteClient_v4.dbLocation),
|
|
79
|
+
message = _sqlite$delete.message,
|
|
80
|
+
status = _sqlite$delete.status;
|
|
81
|
+
|
|
82
|
+
if (status === _constants.DB_STATUS_ERROR) {
|
|
83
|
+
throw new Error("Error deleting DB: " + message);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
return true;
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
QuickSqliteClient_v4.updateUserPragmaVersion = function (version) {
|
|
90
|
+
QuickSqliteClient_v4.openDB();
|
|
91
|
+
sqlite.executeSql(_constants.DB_NAME, "PRAGMA user_version = " + version, []);
|
|
92
|
+
QuickSqliteClient_v4.closeDB();
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
QuickSqliteClient_v4.getUserPragmaVersion = function () {
|
|
96
|
+
QuickSqliteClient_v4.openDB();
|
|
97
|
+
|
|
98
|
+
var _sqlite$executeSql2 = sqlite.executeSql(_constants.DB_NAME, "PRAGMA user_version", []),
|
|
99
|
+
message = _sqlite$executeSql2.message,
|
|
100
|
+
rows = _sqlite$executeSql2.rows,
|
|
101
|
+
status = _sqlite$executeSql2.status;
|
|
102
|
+
|
|
103
|
+
QuickSqliteClient_v4.closeDB();
|
|
104
|
+
|
|
105
|
+
if (status === 1) {
|
|
106
|
+
console.error("Querying for user_version failed: " + message);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
var result = rows ? rows._array : [];
|
|
110
|
+
return result[0].user_version;
|
|
111
|
+
};
|
|
112
|
+
//# sourceMappingURL=QuickSqliteClient_v4.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["QuickSqliteClient_v4.ts"],"names":["sqlite","require","QuickSQLite","e","QuickSqliteClient_v4","dbName","DB_NAME","dbLocation","DB_LOCATION","openDB","open","message","status","executeSql","DB_STATUS_ERROR","console","error","closeDB","close","executeSqlBatch","queries","res","JSON","stringify","query","params","rows","_array","deleteDatabase","Error","updateUserPragmaVersion","version","getUserPragmaVersion","result","user_version"],"mappings":"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","sourcesContent":["// We are going to disable type checks for this file, since this QuickSqliteClient is for legacy version of sqlite but\n// dev-dependency \"react-native-quick-sqlite\" is not available for legacy version of sqlite.\n/* eslint-disable no-underscore-dangle */\n// @ts-nocheck\n\nimport type { QuickSQLite } from 'react-native-quick-sqlite';\nlet sqlite: typeof QuickSQLite;\n\ntry {\n sqlite = require('react-native-quick-sqlite').QuickSQLite;\n} catch (e) {\n // Failed for one of the reason\n // 1. Running on expo, where we don't support offline storage yet.\n // 2. Offline support is disabled, in which case this library is not installed.\n}\nimport { DB_LOCATION, DB_NAME, DB_STATUS_ERROR } from './constants';\nimport type { PreparedQueries } from './types';\n\n// QuickSqliteClient takes care of any direct interaction with sqlite for v4 of react-native-quick-sqlite.\n// This is to avoid any breaking changes for users using v4 of react-native-quick-sqlite.\nexport class QuickSqliteClient_v4 {\n static dbName = DB_NAME;\n static dbLocation = DB_LOCATION;\n\n static openDB = () => {\n const { message, status } = sqlite.open(this.dbName, this.dbLocation);\n sqlite.executeSql(this.dbName, `PRAGMA foreign_keys = ON`, []);\n\n if (status === DB_STATUS_ERROR) {\n console.error(`Error opening database ${this.dbName}: ${message}`);\n }\n };\n\n static closeDB = () => {\n const { message, status } = sqlite.close(this.dbName);\n\n if (status === DB_STATUS_ERROR) {\n console.error(`Error closing database ${this.dbName}: ${message}`);\n }\n };\n\n static executeSqlBatch = (queries: PreparedQueries[]) => {\n this.openDB();\n\n const res = sqlite.executeSqlBatch(DB_NAME, queries);\n\n if (res.status === 1) {\n console.error(`Query/queries failed: ${res.message} ${JSON.stringify(res)}`);\n }\n\n this.closeDB();\n };\n\n static executeSql = (query: string, params?: string[]) => {\n this.openDB();\n\n const { message, rows, status } = sqlite.executeSql(DB_NAME, query, params);\n\n this.closeDB();\n\n if (status === 1) {\n console.error(`Query/queries failed: ${message}: `, query);\n }\n\n return rows ? rows._array : [];\n };\n\n static deleteDatabase = () => {\n const { message, status } = sqlite.delete(this.dbName, this.dbLocation);\n if (status === DB_STATUS_ERROR) {\n throw new Error(`Error deleting DB: ${message}`);\n }\n\n return true;\n };\n\n static updateUserPragmaVersion = (version: number) => {\n this.openDB();\n\n sqlite.executeSql(DB_NAME, `PRAGMA user_version = ${version}`, []);\n\n this.closeDB();\n };\n\n static getUserPragmaVersion = () => {\n this.openDB();\n\n const { message, rows, status } = sqlite.executeSql(DB_NAME, `PRAGMA user_version`, []);\n\n this.closeDB();\n if (status === 1) {\n console.error(`Querying for user_version failed: ${message}`);\n }\n\n const result = rows ? rows._array : [];\n return result[0].user_version as number;\n };\n}\n"]}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
Object.defineProperty(exports, "__esModule", {
|
|
2
|
+
value: true
|
|
3
|
+
});
|
|
4
|
+
exports.getAppSettings = void 0;
|
|
5
|
+
|
|
6
|
+
var _QuickSqliteClient = require("../QuickSqliteClient");
|
|
7
|
+
|
|
8
|
+
var _createSelectQuery = require("../sqlite-utils/createSelectQuery");
|
|
9
|
+
|
|
10
|
+
var getAppSettings = function getAppSettings(_ref) {
|
|
11
|
+
var _result$;
|
|
12
|
+
|
|
13
|
+
var currentUserId = _ref.currentUserId;
|
|
14
|
+
|
|
15
|
+
var result = _QuickSqliteClient.QuickSqliteClient.executeSql.apply(null, (0, _createSelectQuery.createSelectQuery)('userSyncStatus', ['*'], {
|
|
16
|
+
userId: currentUserId
|
|
17
|
+
}));
|
|
18
|
+
|
|
19
|
+
return (_result$ = result[0]) != null && _result$.appSettings ? JSON.parse(result[0].appSettings) : null;
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
exports.getAppSettings = getAppSettings;
|
|
23
|
+
//# sourceMappingURL=getAppSettings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["getAppSettings.ts"],"names":["getAppSettings","currentUserId","result","QuickSqliteClient","executeSql","apply","userId","appSettings","JSON","parse"],"mappings":";;;;;AAEA;;AACA;;AAEO,IAAMA,cAAc,GAAG,SAAjBA,cAAiB,OAIA;AAAA;;AAAA,MAH5BC,aAG4B,QAH5BA,aAG4B;;AAC5B,MAAMC,MAAM,GAAGC,qCAAkBC,UAAlB,CAA6BC,KAA7B,CACb,IADa,EAEb,0CAAkB,gBAAlB,EAAoC,CAAC,GAAD,CAApC,EAA2C;AACzCC,IAAAA,MAAM,EAAEL;AADiC,GAA3C,CAFa,CAAf;;AAOA,SAAO,YAAAC,MAAM,CAAC,CAAD,CAAN,sBAAWK,WAAX,GAAyBC,IAAI,CAACC,KAAL,CAAWP,MAAM,CAAC,CAAD,CAAN,CAAUK,WAArB,CAAzB,GAA6D,IAApE;AACD,CAbM","sourcesContent":["import type { AppSettingsAPIResponse } from 'stream-chat';\n\nimport { QuickSqliteClient } from '../QuickSqliteClient';\nimport { createSelectQuery } from '../sqlite-utils/createSelectQuery';\n\nexport const getAppSettings = ({\n currentUserId,\n}: {\n currentUserId: string;\n}): AppSettingsAPIResponse => {\n const result = QuickSqliteClient.executeSql.apply(\n null,\n createSelectQuery('userSyncStatus', ['*'], {\n userId: currentUserId,\n }),\n );\n\n return result[0]?.appSettings ? JSON.parse(result[0].appSettings) : null;\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["getPendingTasks.ts"],"names":["getPendingTasks","conditions","query","createdAt","result","QuickSqliteClient","executeSql","apply","map","r"],"mappings":";;;;;AAAA;;AACA;;AACA;;
|
|
1
|
+
{"version":3,"sources":["getPendingTasks.ts"],"names":["getPendingTasks","conditions","query","createdAt","result","QuickSqliteClient","executeSql","apply","map","r"],"mappings":";;;;;AAAA;;AACA;;AACA;;AAGO,IAAMA,eAAe,GAAG,SAAlBA,eAAkB,GAA6C;AAAA,MAA5CC,UAA4C,uEAAP,EAAO;AAC1E,MAAMC,KAAK,GAAG,0CAAkB,cAAlB,EAAkC,CAAC,GAAD,CAAlC,EAAyCD,UAAzC,EAAqD;AACjEE,IAAAA,SAAS,EAAE;AADsD,GAArD,CAAd;;AAIA,MAAMC,MAAM,GAAGC,qCAAkBC,UAAlB,CAA6BC,KAA7B,CAAmC,IAAnC,EAAyCL,KAAzC,CAAf;;AAEA,SAAOE,MAAM,CAACI,GAAP,CAAW,UAACC,CAAD;AAAA,WAA2C,0CAAkBA,CAAlB,CAA3C;AAAA,GAAX,CAAP;AACD,CARM","sourcesContent":["import { mapStorableToTask } from '../mappers/mapStorableToTask';\nimport { QuickSqliteClient } from '../QuickSqliteClient';\nimport { createSelectQuery } from '../sqlite-utils/createSelectQuery';\nimport type { TableRowJoinedUser } from '../types';\n\nexport const getPendingTasks = (conditions: { messageId?: string } = {}) => {\n const query = createSelectQuery('pendingTasks', ['*'], conditions, {\n createdAt: 1,\n });\n\n const result = QuickSqliteClient.executeSql.apply(null, query);\n\n return result.map((r: TableRowJoinedUser<'pendingTasks'>) => mapStorableToTask(r));\n};\n"]}
|