UNPKG

@sendbird/uikit-react

Version:

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

132 lines (129 loc) 7.77 kB
import React__default, { useState, useEffect } from 'react'; import { OpenChannelHandler } from '@sendbird/chat/openChannel'; import { U as UserProfileProvider } from '../chunks/bundle-tDk7wyaM.js'; import { u as uuidv4 } from '../chunks/bundle-CSjCAZib.js'; import { u as useSendbird } from '../chunks/bundle-BnaoVUUl.js'; import '../chunks/bundle-DlZj_j5B.js'; import '../chunks/bundle-C1jTnXNH.js'; import '../chunks/bundle-C8kxBudB.js'; import '@sendbird/chat'; import '@sendbird/chat/groupChannel'; var OpenChannelSettingsContext = React__default.createContext(null); var OpenChannelSettingsProvider = function (props) { var _a, _b, _c, _d; var children = props.children, channelUrl = props.channelUrl, onCloseClick = props.onCloseClick, onChannelModified = props.onChannelModified, onBeforeUpdateChannel = props.onBeforeUpdateChannel, onDeleteChannel = props.onDeleteChannel; // fetch store from <SendbirdProvider /> var _e = useSendbird().state, stores = _e.stores, config = _e.config; var sdk = (_a = stores === null || stores === void 0 ? void 0 : stores.sdkStore) === null || _a === void 0 ? void 0 : _a.sdk; var isSDKInitialized = (_b = stores === null || stores === void 0 ? void 0 : stores.sdkStore) === null || _b === void 0 ? void 0 : _b.initialized; var logger = config === null || config === void 0 ? void 0 : config.logger; var currentUserId = (_c = sdk === null || sdk === void 0 ? void 0 : sdk.currentUser) === null || _c === void 0 ? void 0 : _c.userId; var _f = useState(null), currentChannel = _f[0], setChannel = _f[1]; var _g = useState(false), isChannelInitialized = _g[0], setChannelInitialized = _g[1]; useEffect(function () { if (!channelUrl || !sdk.openChannel) { setChannel(null); return; } sdk.openChannel.getChannel(channelUrl) .then(function (channel) { logger.info('open channel setting: fetched', channel); // TODO: Add pending status channel.enter() .then(function () { setChannel(channel); logger.info('OpenChannelSettings | Succeeded to enter channel', channel === null || channel === void 0 ? void 0 : channel.url); setChannelInitialized(true); }) .catch(function (error) { setChannel(null); logger.warning('OpenChannelSettings | Failed to enter channel', error); }); }) .catch(function (error) { logger.error('open channel setting: error fetching', error); setChannel(null); }); return function () { if (currentChannel && currentChannel.exit) { currentChannel.exit() .then(function () { logger.info('OpenChannelSettings | Succeeded to exit channel', currentChannel === null || currentChannel === void 0 ? void 0 : currentChannel.url); }) .catch(function (error) { logger.warning('OpenChannelSettings | Failed to exit channel', error); }); } }; }, [channelUrl, isSDKInitialized]); useEffect(function () { var _a; var channelHandlerId = uuidv4(); if (currentChannel !== null && ((_a = sdk === null || sdk === void 0 ? void 0 : sdk.openChannel) === null || _a === void 0 ? void 0 : _a.addOpenChannelHandler)) { var channelHandlerParams = new OpenChannelHandler({ onOperatorUpdated: function (channel) { if ((channel === null || channel === void 0 ? void 0 : channel.url) === (currentChannel === null || currentChannel === void 0 ? void 0 : currentChannel.url)) { setChannel(channel); } }, onUserMuted: function (channel, user) { if ((channel === null || channel === void 0 ? void 0 : channel.url) === (currentChannel === null || currentChannel === void 0 ? void 0 : currentChannel.url) && (user === null || user === void 0 ? void 0 : user.userId) === currentUserId) { setChannel(channel); } }, onUserUnmuted: function (channel, user) { if ((channel === null || channel === void 0 ? void 0 : channel.url) === (currentChannel === null || currentChannel === void 0 ? void 0 : currentChannel.url) && (user === null || user === void 0 ? void 0 : user.userId) === currentUserId) { setChannel(channel); } }, onUserBanned: function (channel, user) { if ((channel === null || channel === void 0 ? void 0 : channel.url) === (currentChannel === null || currentChannel === void 0 ? void 0 : currentChannel.url) && (user === null || user === void 0 ? void 0 : user.userId) === currentUserId) { setChannel(null); } }, onUserUnbanned: function (channel, user) { if ((user === null || user === void 0 ? void 0 : user.userId) === currentUserId) { setChannel(channel); } }, onChannelChanged: function (channel) { if ((channel === null || channel === void 0 ? void 0 : channel.url) === (currentChannel === null || currentChannel === void 0 ? void 0 : currentChannel.url)) { setChannel(channel); } }, onChannelDeleted: function (channelUrl) { if (channelUrl === (currentChannel === null || currentChannel === void 0 ? void 0 : currentChannel.url)) { setChannel(null); } }, }); sdk.openChannel.addOpenChannelHandler(channelHandlerId, channelHandlerParams); } return function () { var _a, _b, _c; if (((_a = sdk === null || sdk === void 0 ? void 0 : sdk.openChannel) === null || _a === void 0 ? void 0 : _a.removeOpenChannelHandler) && channelHandlerId) { logger.info('OpenChannelSettings | Removing channel handlers', channelHandlerId); (_c = (_b = sdk.openChannel).removeOpenChannelHandler) === null || _c === void 0 ? void 0 : _c.call(_b, channelHandlerId); } }; }, [channelUrl]); return (React__default.createElement(OpenChannelSettingsContext.Provider, { value: { channelUrl: channelUrl, channel: currentChannel, isChannelInitialized: isChannelInitialized, setChannel: setChannel, onCloseClick: onCloseClick, onChannelModified: onChannelModified, onBeforeUpdateChannel: onBeforeUpdateChannel, onDeleteChannel: onDeleteChannel, } }, React__default.createElement(UserProfileProvider, { isOpenChannel: true, renderUserProfile: props === null || props === void 0 ? void 0 : props.renderUserProfile, disableUserProfile: (_d = props === null || props === void 0 ? void 0 : props.disableUserProfile) !== null && _d !== void 0 ? _d : config === null || config === void 0 ? void 0 : config.disableUserProfile }, children))); }; var useOpenChannelSettingsContext = function () { var context = React__default.useContext(OpenChannelSettingsContext); if (!context) throw new Error('OpenChannelSettingsContext not found. Use within the OpenChannelSettings module.'); return context; }; export { OpenChannelSettingsProvider, useOpenChannelSettingsContext }; //# sourceMappingURL=context.js.map