UNPKG

@sendbird/uikit-react-native

Version:

Sendbird UIKit for React Native: A feature-rich and customizable chat UI kit with messaging, channel management, and user authentication.

101 lines (100 loc) 4.87 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _react = require("react"); var _uikitTools = require("@sendbird/uikit-tools"); var _uikitUtils = require("@sendbird/uikit-utils"); var _useContext = require("./useContext"); var _usePushTokenRegistration = _interopRequireDefault(require("./usePushTokenRegistration")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } const cacheRestrictCodes = [400300, 400301, 400302, 400310]; function isCacheRestrictedError(error) { return cacheRestrictCodes.some(code => error.code === code); } async function initEmoji(sdk, emojiManager) { var _sdk$appInfo; await emojiManager.init(); if (((_sdk$appInfo = sdk.appInfo) === null || _sdk$appInfo === void 0 ? void 0 : _sdk$appInfo.emojiHash) !== emojiManager.emojiHash) { try { const container = await sdk.getAllEmoji(); await emojiManager.init(container); } catch {} } } const useConnection = () => { const { initDashboardConfigs } = (0, _uikitTools.useUIKitConfig)(); const { sdk, emojiManager, setCurrentUser, sbOptions } = (0, _useContext.useSendbirdChat)(); const { registerPushTokenForCurrentUser, unregisterPushTokenForCurrentUser } = (0, _usePushTokenRegistration.default)(); const connect = (0, _react.useCallback)(async (userId, opts) => { try { _uikitUtils.Logger.debug('[useConnection]', 'connect start:', userId); let user = await sdk.connect(userId, opts === null || opts === void 0 ? void 0 : opts.accessToken); if (opts !== null && opts !== void 0 && opts.nickname) { _uikitUtils.Logger.debug('[useConnection]', 'nickname-sync start:', opts.nickname); await sdk.updateCurrentUserInfo({ nickname: opts.nickname }).then(updatedUser => user = updatedUser).catch(e => _uikitUtils.Logger.warn('[useConnection]', 'nickname-sync failure', e)); } else if (sbOptions.chat.useUserIdForNicknameEnabled) { await sdk.updateCurrentUserInfo({ nickname: userId }).then(updatedUser => user = updatedUser); } if (sbOptions.chat.autoPushTokenRegistrationEnabled) { _uikitUtils.Logger.debug('[useConnection]', 'autoPushTokenRegistration enabled, register for current user'); await registerPushTokenForCurrentUser().catch(e => { _uikitUtils.Logger.warn('[useConnection]', 'autoPushToken Registration failure', e); }); } await Promise.all([initEmoji(sdk, emojiManager).catch(() => _uikitUtils.Logger.info('[useConnection]', 'initEmoji failure')), initDashboardConfigs(sdk).catch(() => _uikitUtils.Logger.info('[useConnection]', 'initDashboardConfigs failure'))]); _uikitUtils.Logger.debug('[useConnection]', 'connected! (online)'); setCurrentUser(user); return user; } catch (e) { const error = e; if (sdk.isCacheEnabled) { if (isCacheRestrictedError(error)) { _uikitUtils.Logger.warn('[useConnection]', 'offline connect restricted', error.message, error.code); _uikitUtils.Logger.warn('[useConnection]', 'clear cached-data'); await sdk.clearCachedData().catch(e => _uikitUtils.Logger.warn('[useConnection]', 'clear cached-data failure', e)); } else if (sdk.currentUser) { await Promise.all([initEmoji(sdk, emojiManager).catch(() => _uikitUtils.Logger.info('[useConnection]', 'initEmoji failure')), initDashboardConfigs(sdk).catch(() => _uikitUtils.Logger.info('[useConnection]', 'initDashboardConfigs failure'))]); _uikitUtils.Logger.debug('[useConnection]', 'connected! (offline)'); setCurrentUser(sdk.currentUser); return sdk.currentUser; } } _uikitUtils.Logger.warn('[useConnection]', 'connect failure', error.message, error.code); throw error; } }, [sdk, registerPushTokenForCurrentUser, sbOptions.chat.autoPushTokenRegistrationEnabled]); const disconnect = (0, _react.useCallback)(async () => { _uikitUtils.Logger.debug('[useConnection]', 'disconnect start'); if (sbOptions.chat.autoPushTokenRegistrationEnabled) { _uikitUtils.Logger.debug('[useConnection]', 'autoPushTokenRegistration enabled, unregister for current user'); await unregisterPushTokenForCurrentUser().catch(e => { _uikitUtils.Logger.warn('[useConnection]', 'autoPushToken unregister failure', e); }); } await sdk.disconnect().then(() => setCurrentUser(undefined)); _uikitUtils.Logger.debug('[useConnection]', 'disconnected!'); }, [sdk, unregisterPushTokenForCurrentUser, sbOptions.chat.autoPushTokenRegistrationEnabled]); return { connect, disconnect, reconnect: () => sdk.reconnect() }; }; var _default = exports.default = useConnection; //# sourceMappingURL=useConnection.js.map