stream-chat-react-native-core
Version:
The official React Native and Expo components for Stream Chat, a service for building chat applications
175 lines • 7.84 kB
JavaScript
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.Chat = void 0;
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
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 _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 _OfflineDB = require("../../store/OfflineDB");
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 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,
i18nInstance = props.i18nInstance,
isMessageAIGenerated = props.isMessageAIGenerated,
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)(() => ({
...translators,
userLanguage: client.user?.language || _TranslationContext.DEFAULT_USER_LANGUAGE
}), [client.user?.language, translators]);
var _useIsOnline = (0, _useIsOnline2.useIsOnline)(client, closeConnectionOnBackground),
connectionRecovering = _useIsOnline.connectionRecovering,
isOnline = _useIsOnline.isOnline;
var _ref = (0, _hooks2.useStateStore)(client.offlineDb?.state, selector) ?? {},
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, _react.useEffect)(() => {
if (!(userID && enableOfflineSupport)) {
return;
}
var initializeDatabase = function () {
var _ref2 = (0, _asyncToGenerator2.default)(function* () {
if (!client.offlineDb) {
client.setOfflineDBApi(new _OfflineDB.OfflineDB({
client
}));
}
if (client.offlineDb) {
yield client.offlineDb.init(userID);
}
});
return function initializeDatabase() {
return _ref2.apply(this, arguments);
};
}();
initializeDatabase();
}, [userID, enableOfflineSupport, client]);
(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