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
JavaScript
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