UNPKG

@sendbird/uikit-react

Version:

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

273 lines (269 loc) 14.2 kB
import { _ as __assign, a as __awaiter, b as __generator } from './bundle-CzBQNSmE.js'; import { S as SendbirdContext, s as shimExports } from './bundle-BRRgVYI5.js'; import { useContext, useCallback, useMemo } from 'react'; import SendbirdChat, { SendbirdProduct, SendbirdPlatform, DeviceOsPlatform } from '@sendbird/chat'; import { GroupChannelModule } from '@sendbird/chat/groupChannel'; import { OpenChannelModule } from '@sendbird/chat/openChannel'; var updateAppInfoStore = function (state, payload) { return __assign(__assign({}, state), { stores: __assign(__assign({}, state.stores), { appInfoStore: __assign(__assign({}, state.stores.appInfoStore), payload) }) }); }; var updateSdkStore = function (state, payload) { return __assign(__assign({}, state), { stores: __assign(__assign({}, state.stores), { sdkStore: __assign(__assign({}, state.stores.sdkStore), payload) }) }); }; var updateUserStore = function (state, payload) { return __assign(__assign({}, state), { stores: __assign(__assign({}, state.stores), { userStore: __assign(__assign({}, state.stores.userStore), payload) }) }); }; function initSDK(_a) { var appId = _a.appId, customApiHost = _a.customApiHost, customWebSocketHost = _a.customWebSocketHost, _b = _a.sdkInitParams, sdkInitParams = _b === void 0 ? {} : _b; var params = Object.assign(sdkInitParams, { appId: appId, modules: [new GroupChannelModule(), new OpenChannelModule()], // newInstance: isNewApp, localCacheEnabled: typeof sdkInitParams.localCacheEnabled !== 'undefined' ? sdkInitParams.localCacheEnabled : true, }); if (customApiHost) params.customApiHost = customApiHost; if (customWebSocketHost) params.customWebSocketHost = customWebSocketHost; return SendbirdChat.init(params); } var APP_VERSION_STRING = '3.17.3'; /** * Sets up the Sendbird SDK after initialization. * Configures necessary settings, adds extensions, sets the platform, and configures the session handler if provided. */ function setupSDK(sdk, params) { var _a, _b; var logger = params.logger, sessionHandler = params.sessionHandler, isMobile = params.isMobile, customExtensionParams = params.customExtensionParams; (_a = logger.info) === null || _a === void 0 ? void 0 : _a.call(logger, 'SendbirdProvider | useConnect/setupConnection/setVersion', { version: APP_VERSION_STRING }); sdk.addExtension('sb_uikit', APP_VERSION_STRING); sdk.addSendbirdExtensions([{ product: SendbirdProduct.UIKIT_CHAT, version: APP_VERSION_STRING, platform: SendbirdPlatform === null || SendbirdPlatform === void 0 ? void 0 : SendbirdPlatform.JS }], { platform: isMobile ? DeviceOsPlatform.MOBILE_WEB : DeviceOsPlatform.WEB }, customExtensionParams); if (sessionHandler) { (_b = logger.info) === null || _b === void 0 ? void 0 : _b.call(logger, 'SendbirdProvider | useConnect/setupConnection/configureSession', sessionHandler); sdk.setSessionHandler(sessionHandler); } } var NO_CONTEXT_ERROR = 'No sendbird state value available. Make sure you are rendering `<SendbirdProvider>` at the top of your app.'; var useSendbird = function () { var _a; var store = useContext(SendbirdContext); if (!store) throw new Error(NO_CONTEXT_ERROR); var state = shimExports.useSyncExternalStore(store.subscribe, store.getState); /* AppInfo */ var appInfoActions = { initMessageTemplateInfo: useCallback(function (_a) { var payload = _a.payload; store.setState(function (state) { return (updateAppInfoStore(state, { messageTemplatesInfo: payload, waitingTemplateKeysMap: {}, })); }); }, [store]), upsertMessageTemplates: useCallback(function (_a) { var payload = _a.payload; var appInfoStore = state.stores.appInfoStore; var templatesInfo = appInfoStore.messageTemplatesInfo; if (!templatesInfo) return state; // Not initialized. Ignore. var waitingTemplateKeysMap = __assign({}, appInfoStore.waitingTemplateKeysMap); payload.forEach(function (templatesMapData) { var key = templatesMapData.key, template = templatesMapData.template; templatesInfo.templatesMap[key] = template; delete waitingTemplateKeysMap[key]; }); store.setState(function (state) { return (updateAppInfoStore(state, { waitingTemplateKeysMap: waitingTemplateKeysMap, messageTemplatesInfo: templatesInfo, })); }); }, [store, state.stores.appInfoStore]), upsertWaitingTemplateKeys: useCallback(function (_a) { var payload = _a.payload; var appInfoStore = state.stores.appInfoStore; var keys = payload.keys, requestedAt = payload.requestedAt; var waitingTemplateKeysMap = __assign({}, appInfoStore.waitingTemplateKeysMap); keys.forEach(function (key) { var _a, _b; waitingTemplateKeysMap[key] = { erroredMessageIds: (_b = (_a = waitingTemplateKeysMap[key]) === null || _a === void 0 ? void 0 : _a.erroredMessageIds) !== null && _b !== void 0 ? _b : [], requestedAt: requestedAt, }; }); store.setState(function (state) { return (updateAppInfoStore(state, { waitingTemplateKeysMap: waitingTemplateKeysMap, })); }); }, [store, state.stores.appInfoStore]), markErrorWaitingTemplateKeys: useCallback(function (_a) { var payload = _a.payload; var appInfoStore = state.stores.appInfoStore; var keys = payload.keys, messageId = payload.messageId; var waitingTemplateKeysMap = __assign({}, appInfoStore.waitingTemplateKeysMap); keys.forEach(function (key) { var waitingTemplateKeyData = waitingTemplateKeysMap[key]; if (waitingTemplateKeyData && waitingTemplateKeyData.erroredMessageIds.indexOf(messageId) === -1) { waitingTemplateKeyData.erroredMessageIds.push(messageId); } }); store.setState(function (state) { return (updateAppInfoStore(state, { waitingTemplateKeysMap: waitingTemplateKeysMap, })); }); }, [store, state.stores.appInfoStore]), }; /* SDK */ var sdkActions = { setSdkLoading: useCallback(function (payload) { store.setState(function (state) { return (updateSdkStore(state, { initialized: false, loading: payload, })); }); }, [store]), sdkError: useCallback(function () { store.setState(function (state) { return (updateSdkStore(state, { initialized: false, loading: false, error: true, })); }); }, [store]), initSdk: useCallback(function (payload) { store.setState(function (state) { return (updateSdkStore(state, { sdk: payload, initialized: true, loading: false, error: false, })); }); }, [store]), resetSdk: useCallback(function () { store.setState(function (state) { return (updateSdkStore(state, { sdk: {}, initialized: false, loading: false, error: false, })); }); }, [store]), }; /* User */ var userActions = { initUser: useCallback(function (payload) { store.setState(function (state) { return (updateUserStore(state, { initialized: true, loading: false, user: payload, })); }); }, [store]), resetUser: useCallback(function () { store.setState(function (state) { return (updateUserStore(state, { initialized: false, loading: false, user: {}, })); }); }, [store]), updateUserInfo: useCallback(function (payload) { store.setState(function (state) { return (updateUserStore(state, { user: payload, })); }); }, [store]), }; /* Connection */ var disconnect = useCallback(function (_a) { return __awaiter(void 0, [_a], void 0, function (_b) { var sdk; var _c; var logger = _b.logger; return __generator(this, function (_d) { switch (_d.label) { case 0: sdkActions.setSdkLoading(true); sdk = state.stores.sdkStore.sdk; if (!(sdk === null || sdk === void 0 ? void 0 : sdk.disconnectWebSocket)) return [3 /*break*/, 2]; return [4 /*yield*/, sdk.disconnectWebSocket()]; case 1: _d.sent(); _d.label = 2; case 2: sdkActions.resetSdk(); userActions.resetUser(); (_c = logger.info) === null || _c === void 0 ? void 0 : _c.call(logger, 'SendbirdProvider | useSendbird/disconnect completed'); return [2 /*return*/]; } }); }); }, [ store, (_a = state.stores.sdkStore) === null || _a === void 0 ? void 0 : _a.sdk, sdkActions, userActions, ]); var connect = useCallback(function (params) { return __awaiter(void 0, void 0, void 0, function () { var logger, userId, appId, accessToken, nickname, profileUrl, isMobile, sdkInitParams, customApiHost, customWebSocketHost, customExtensionParams, eventHandlers, initializeMessageTemplatesInfo, configureSession, initDashboardConfigs, sdk, user, error_1, sendbirdError; var _a, _b, _c, _d, _e; return __generator(this, function (_f) { switch (_f.label) { case 0: logger = params.logger, userId = params.userId, appId = params.appId, accessToken = params.accessToken, nickname = params.nickname, profileUrl = params.profileUrl, isMobile = params.isMobile, sdkInitParams = params.sdkInitParams, customApiHost = params.customApiHost, customWebSocketHost = params.customWebSocketHost, customExtensionParams = params.customExtensionParams, eventHandlers = params.eventHandlers, initializeMessageTemplatesInfo = params.initializeMessageTemplatesInfo, configureSession = params.configureSession, initDashboardConfigs = params.initDashboardConfigs; // clean up previous ws connection return [4 /*yield*/, disconnect({ logger: logger })]; case 1: // clean up previous ws connection _f.sent(); sdk = initSDK({ appId: appId, customApiHost: customApiHost, customWebSocketHost: customWebSocketHost, sdkInitParams: sdkInitParams, }); setupSDK(sdk, { logger: logger, isMobile: isMobile, customExtensionParams: customExtensionParams, sessionHandler: configureSession ? configureSession(sdk) : undefined, }); sdkActions.setSdkLoading(true); _f.label = 2; case 2: _f.trys.push([2, 8, , 9]); return [4 /*yield*/, sdk.connect(userId, accessToken)]; case 3: user = _f.sent(); userActions.initUser(user); if (!(nickname || profileUrl)) return [3 /*break*/, 5]; return [4 /*yield*/, sdk.updateCurrentUserInfo({ nickname: nickname || user.nickname || '', profileUrl: profileUrl || user.profileUrl, })]; case 4: _f.sent(); _f.label = 5; case 5: return [4 /*yield*/, (initializeMessageTemplatesInfo === null || initializeMessageTemplatesInfo === void 0 ? void 0 : initializeMessageTemplatesInfo(sdk))]; case 6: _f.sent(); return [4 /*yield*/, (initDashboardConfigs === null || initDashboardConfigs === void 0 ? void 0 : initDashboardConfigs(sdk))]; case 7: _f.sent(); sdkActions.initSdk(sdk); (_b = (_a = eventHandlers === null || eventHandlers === void 0 ? void 0 : eventHandlers.connection) === null || _a === void 0 ? void 0 : _a.onConnected) === null || _b === void 0 ? void 0 : _b.call(_a, user); return [3 /*break*/, 9]; case 8: error_1 = _f.sent(); sendbirdError = error_1; sdkActions.resetSdk(); userActions.resetUser(); (_c = logger.error) === null || _c === void 0 ? void 0 : _c.call(logger, 'SendbirdProvider | useSendbird/connect failed', sendbirdError); (_e = (_d = eventHandlers === null || eventHandlers === void 0 ? void 0 : eventHandlers.connection) === null || _d === void 0 ? void 0 : _d.onFailed) === null || _e === void 0 ? void 0 : _e.call(_d, sendbirdError); return [3 /*break*/, 9]; case 9: return [2 /*return*/]; } }); }); }, [ store, sdkActions, userActions, disconnect, ]); var actions = useMemo(function () { return (__assign(__assign(__assign(__assign({}, appInfoActions), sdkActions), userActions), { disconnect: disconnect, connect: connect })); }, [ appInfoActions, sdkActions, userActions, disconnect, connect, ]); return { state: state, actions: actions }; }; export { useSendbird as u }; //# sourceMappingURL=bundle-DMcf5OHL.js.map