UNPKG

stream-chat-react-native-core

Version:

The official React Native and Expo components for Stream Chat, a service for building chat applications

170 lines 7.96 kB
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.Chat = void 0; var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var _react = _interopRequireWildcard(require("react")); var _reactNative = require("react-native"); var _hooks = require("./hooks"); var _useAppSettings = require("./hooks/useAppSettings"); var _useCreateChatContext = require("./hooks/useCreateChatContext"); var _useInitializeOfflineDb = require("./hooks/useInitializeOfflineDb"); var _useIsOnline2 = require("./hooks/useIsOnline"); var _ChannelsStateContext = require("../../contexts/channelsStateContext/ChannelsStateContext"); var _ChatContext = require("../../contexts/chatContext/ChatContext"); var _ComponentsContext = require("../../contexts/componentsContext/ComponentsContext"); var _DebugContext = require("../../contexts/debugContext/DebugContext"); var _ThemeContext = require("../../contexts/themeContext/ThemeContext"); var _TranslationContext = require("../../contexts/translationContext/TranslationContext"); var _hooks2 = require("../../hooks"); var _useStreami18n = require("../../hooks/useStreami18n"); var _init = _interopRequireDefault(require("../../init")); var _native = require("../../native"); var _constants = require("../../store/constants"); var _installNativeMultipartAdapter = require("../../utils/installNativeMultipartAdapter"); var _version = require("../../version.json"); var _jsxRuntime = require("react/jsx-runtime"); var _jsxFileName = "/home/runner/work/stream-chat-react-native/stream-chat-react-native/package/src/components/Chat/Chat.tsx"; function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); } (0, _init.default)(); var selector = nextValue => ({ initialized: nextValue.initialized, userId: nextValue.userId }); var ChatWithContext = props => { var _client$user2, _useStateStore, _client$offlineDb; var children = props.children, client = props.client, _props$closeConnectio = props.closeConnectionOnBackground, closeConnectionOnBackground = _props$closeConnectio === void 0 ? true : _props$closeConnectio, _props$enableOfflineS = props.enableOfflineSupport, enableOfflineSupport = _props$enableOfflineS === void 0 ? false : _props$enableOfflineS, getOfflineDbEncryptionKey = props.getOfflineDbEncryptionKey, i18nInstance = props.i18nInstance, isMessageAIGenerated = props.isMessageAIGenerated, _props$maxSyncEventsL = props.maxSyncEventsLimit, maxSyncEventsLimit = _props$maxSyncEventsL === void 0 ? _constants.DEFAULT_MAX_SYNC_EVENTS_LIMIT : _props$maxSyncEventsL, style = props.style, _props$useNativeMulti = props.useNativeMultipartUpload, useNativeMultipartUpload = _props$useNativeMulti === void 0 ? false : _props$useNativeMulti; var _useComponentsContext = (0, _ComponentsContext.useComponentsContext)(), ChatLoadingIndicator = _useComponentsContext.ChatLoadingIndicator; var _useState = (0, _react.useState)(), _useState2 = (0, _slicedToArray2.default)(_useState, 2), channel = _useState2[0], setChannel = _useState2[1]; var translators = (0, _useStreami18n.useStreami18n)(i18nInstance); var translationContextValue = (0, _react.useMemo)(() => { var _client$user; return { ...translators, userLanguage: ((_client$user = client.user) == null ? void 0 : _client$user.language) || _TranslationContext.DEFAULT_USER_LANGUAGE }; }, [(_client$user2 = client.user) == null ? void 0 : _client$user2.language, translators]); var _useIsOnline = (0, _useIsOnline2.useIsOnline)(client, closeConnectionOnBackground), connectionRecovering = _useIsOnline.connectionRecovering, isOnline = _useIsOnline.isOnline; var _ref = (_useStateStore = (0, _hooks2.useStateStore)((_client$offlineDb = client.offlineDb) == null ? void 0 : _client$offlineDb.state, selector)) != null ? _useStateStore : {}, offlineDbInitialized = _ref.initialized, offlineDbUserId = _ref.userId; var mutedUsers = (0, _hooks.useClientMutedUsers)(client); var debugRef = (0, _DebugContext.useDebugContext)(); var isDebugModeEnabled = __DEV__ && debugRef && debugRef.current; var userID = client.userID; (0, _react.useEffect)(() => { if (client) { var sdkName = _native.NativeHandlers.SDK ? _native.NativeHandlers.SDK.replace('stream-chat-', '') : 'react-native'; client.sdkIdentifier = { name: sdkName, version: _version.version }; client.deviceIdentifier = { os: `${_reactNative.Platform.OS} ${_reactNative.Platform.Version}` }; client.recoverStateOnReconnect = false; client.preventThreadCleanup = true; client.persistUserOnConnectionFailure = enableOfflineSupport; } if (isDebugModeEnabled) { if (debugRef.current.setEventType) { debugRef.current.setEventType('send'); } if (debugRef.current.setSendEventParams) { debugRef.current.setSendEventParams({ action: 'Client', data: client.user }); } } }, [client, enableOfflineSupport]); var setActiveChannel = newChannel => setChannel(newChannel); (0, _useInitializeOfflineDb.useInitializeOfflineDb)({ client, enabled: enableOfflineSupport, options: { getEncryptionKey: getOfflineDbEncryptionKey, maxSyncEventsLimit }, userID }); (0, _react.useEffect)(() => { if (!client) { return; } client.threads.registerSubscriptions(); client.polls.registerSubscriptions(); client.reminders.registerSubscriptions(); client.reminders.initTimers(); return () => { client.threads.unregisterSubscriptions(); client.polls.unregisterSubscriptions(); client.reminders.unregisterSubscriptions(); client.reminders.clearTimers(); }; }, [client]); (0, _react.useEffect)(() => { if (!useNativeMultipartUpload) { return; } (0, _installNativeMultipartAdapter.installNativeMultipartAdapter)(client); }, [client, useNativeMultipartUpload]); var initialisedDatabase = !!offlineDbInitialized && userID === offlineDbUserId; var appSettings = (0, _useAppSettings.useAppSettings)(client, isOnline, enableOfflineSupport, initialisedDatabase); var chatContext = (0, _useCreateChatContext.useCreateChatContext)({ appSettings, channel, client, connectionRecovering, enableOfflineSupport, isMessageAIGenerated, isOnline, mutedUsers, setActiveChannel }); if (userID && enableOfflineSupport && !initialisedDatabase) { return ChatLoadingIndicator ? (0, _jsxRuntime.jsx)(ChatLoadingIndicator, {}) : null; } return (0, _jsxRuntime.jsx)(_ChatContext.ChatProvider, { value: chatContext, children: (0, _jsxRuntime.jsx)(_TranslationContext.TranslationProvider, { value: translationContextValue, children: (0, _jsxRuntime.jsx)(_ThemeContext.ThemeProvider, { style: style, children: (0, _jsxRuntime.jsx)(_ChannelsStateContext.ChannelsStateProvider, { children: children }) }) }) }); }; var Chat = props => { var _useTheme = (0, _ThemeContext.useTheme)(), theme = _useTheme.theme; return (0, _jsxRuntime.jsx)(ChatWithContext, { style: theme, ...props }); }; exports.Chat = Chat; //# sourceMappingURL=Chat.js.map