@sendbird/uikit-react
Version:
Sendbird UIKit for React: A feature-rich and customizable chat UI kit with messaging, channel management, and user authentication.
269 lines (265 loc) • 14.4 kB
JavaScript
import { _ as __assign, a as __awaiter, c as __generator } from './bundle-Bpofr334.js';
import { S as SendbirdContext, s as shimExports } from './bundle-B56O1y8C.js';
import { useContext, useCallback, useMemo } from 'react';
import SendbirdChat, { SendbirdPlatform, SendbirdProduct, 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, _b = _a.isNewApp, isNewApp = _b === void 0 ? false : _b, customApiHost = _a.customApiHost, customWebSocketHost = _a.customWebSocketHost, _c = _a.sdkInitParams, sdkInitParams = _c === void 0 ? {} : _c;
var params = __assign(__assign({}, sdkInitParams), { appId: appId, modules: [new GroupChannelModule(), new OpenChannelModule()], newInstance: typeof sdkInitParams.newInstance !== 'undefined' ? sdkInitParams.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.18.0';
/**
* 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, _a, isNewApp, accessToken, nickname, profileUrl, isMobile, sdkInitParams, customApiHost, customWebSocketHost, customExtensionParams, eventHandlers, initializeMessageTemplatesInfo, configureSession, initDashboardConfigs, sdk, user, error_1, sendbirdError;
var _b, _c, _d, _e, _f;
return __generator(this, function (_g) {
switch (_g.label) {
case 0:
logger = params.logger, userId = params.userId, appId = params.appId, _a = params.isNewApp, isNewApp = _a === void 0 ? false : _a, 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
_g.sent();
sdk = initSDK({
appId: appId,
isNewApp: isNewApp,
customApiHost: customApiHost,
customWebSocketHost: customWebSocketHost,
sdkInitParams: sdkInitParams,
});
setupSDK(sdk, {
logger: logger,
isMobile: isMobile,
customExtensionParams: customExtensionParams,
sessionHandler: configureSession ? configureSession(sdk) : undefined,
});
sdkActions.setSdkLoading(true);
_g.label = 2;
case 2:
_g.trys.push([2, 8, , 9]);
return [4 /*yield*/, sdk.connect(userId, accessToken)];
case 3:
user = _g.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:
_g.sent();
_g.label = 5;
case 5: return [4 /*yield*/, (initializeMessageTemplatesInfo === null || initializeMessageTemplatesInfo === void 0 ? void 0 : initializeMessageTemplatesInfo(sdk))];
case 6:
_g.sent();
return [4 /*yield*/, (initDashboardConfigs === null || initDashboardConfigs === void 0 ? void 0 : initDashboardConfigs(sdk))];
case 7:
_g.sent();
sdkActions.initSdk(sdk);
(_c = (_b = eventHandlers === null || eventHandlers === void 0 ? void 0 : eventHandlers.connection) === null || _b === void 0 ? void 0 : _b.onConnected) === null || _c === void 0 ? void 0 : _c.call(_b, user);
return [3 /*break*/, 9];
case 8:
error_1 = _g.sent();
sendbirdError = error_1;
sdkActions.resetSdk();
userActions.resetUser();
(_d = logger.error) === null || _d === void 0 ? void 0 : _d.call(logger, 'SendbirdProvider | useSendbird/connect failed', sendbirdError);
(_f = (_e = eventHandlers === null || eventHandlers === void 0 ? void 0 : eventHandlers.connection) === null || _e === void 0 ? void 0 : _e.onFailed) === null || _f === void 0 ? void 0 : _f.call(_e, 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-4clodtJA.js.map