UNPKG

@sendbird/uikit-react

Version:

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

503 lines (492 loc) 38.7 kB
import React__default, { useState, useContext, useEffect, useCallback } from 'react'; import { L as LocalizationContext } from '../../chunks/bundle-Del33VzI.js'; import { L as Label, a as LabelTypography, b as LabelColors } from '../../chunks/bundle-viBng0Kh.js'; import Icon, { IconTypes, IconColors } from '../../ui/Icon.js'; import { useOpenChannelSettingsContext } from '../context.js'; import ChannelProfile from './OpenChannelProfile.js'; import { M as Modal } from '../../chunks/bundle-CtQtfJlT.js'; import { u as useSendbird } from '../../chunks/bundle-i_3w58Zd.js'; import { U as UserListItem$1, P as ParticipantList } from '../../chunks/bundle-Du8ejYW1.js'; import Accordion, { AccordionGroup } from '../../ui/Accordion.js'; import Button, { ButtonTypes, ButtonSizes } from '../../ui/Button.js'; import { C as ContextMenu, b as MenuItems, c as MenuItem, h as MuteMenuItem } from '../../chunks/bundle-Bch_Ry4S.js'; import IconButton from '../../ui/IconButton.js'; import { c as __spreadArray, _ as __assign } from '../../chunks/bundle-yl5d1NoZ.js'; import { UserListItem } from '../../ui/UserListItem.js'; import { n as noop } from '../../chunks/bundle-MlG9piGf.js'; import '../../chunks/bundle-C1dqPUnT.js'; import '../../chunks/bundle-BZGITC2g.js'; import '@sendbird/chat/openChannel'; import '../../chunks/bundle-B0s_McF0.js'; import '../../chunks/bundle-DGh2T5IL.js'; import '../../chunks/bundle-BUYU9H94.js'; import '../../chunks/bundle-CqLLOVG5.js'; import '@sendbird/chat'; import '@sendbird/chat/groupChannel'; import '../../ui/TextButton.js'; import '../../chunks/bundle-Bokm7tQ9.js'; import '../../ui/OpenChannelAvatar.js'; import '../../chunks/bundle-CAEBoiEz.js'; import '../../ui/ImageRenderer.js'; import '../../chunks/bundle-Dl_v8XoN.js'; import '../../chunks/bundle-B2BBbSEN.js'; import './EditDetailsModal.js'; import '../../chunks/bundle-BOykFtQ3.js'; import '../../ui/Input.js'; import 'react-dom'; import '../../chunks/bundle-DBhJIxHw.js'; import '../../ui/AccordionGroup.js'; import '../../ui/MutedAvatarOverlay.js'; import '../../ui/UserProfile.js'; import '../../sendbirdSelectors.js'; import '../../ui/SortByRow.js'; import '../../chunks/bundle-vmZ9LoYK.js'; import '../../utils/message/getOutgoingMessageState.js'; import '../../chunks/bundle-DgosLQK9.js'; import '../../chunks/bundle-DEuCwnTn.js'; import '../../chunks/bundle-fdEQfX2s.js'; import '../../ui/Checkbox.js'; function DeleteChannel() { var _a = useState(false), showDeleteChannelModal = _a[0], setShowDeleteChannelModal = _a[1]; var stringSet = useContext(LocalizationContext).stringSet; var _b = useSendbird().state.config, isOnline = _b.isOnline, logger = _b.logger; var _c = useOpenChannelSettingsContext(), channel = _c.channel, onDeleteChannel = _c.onDeleteChannel; var deleteChannel = function () { channel === null || channel === void 0 ? void 0 : channel.delete().then(function (response) { logger.info('OpenChannelSettings: Delete channel success', response); if (onDeleteChannel) { onDeleteChannel(channel); } }).catch(function (error) { logger.warning('OpenChannelSettings: Delete channel failed', error); }); }; return (React__default.createElement(React__default.Fragment, null, React__default.createElement("div", { className: "sendbird-openchannel-settings__panel-item\n sendbird-openchannel-settings__delete-channel\n ".concat(!isOnline ? 'sendbird-openchannel-settings__panel-item__disabled' : ''), role: "button", tabIndex: 0, onKeyDown: function () { if (!isOnline) { return; } setShowDeleteChannelModal(true); }, onClick: function () { if (!isOnline) { return; } setShowDeleteChannelModal(true); } }, React__default.createElement(Icon, { type: IconTypes.DELETE, fillColor: IconColors.ERROR, className: [ 'sendbird-openchannel-settings__panel-icon-left', 'sendbird-openchannel-settings__panel-icon__delete', ].join(' '), height: "24px", width: "24px" }), React__default.createElement(Label, { type: LabelTypography.SUBTITLE_1, color: LabelColors.ONBACKGROUND_1 }, stringSet.OPEN_CHANNEL_SETTINGS__DELETE_CHANNEL_PANEL)), showDeleteChannelModal && (React__default.createElement(Modal, { isFullScreenOnMobile: true, onCancel: function () { setShowDeleteChannelModal(false); }, onSubmit: function () { deleteChannel(); }, titleText: stringSet.OPEN_CHANNEL_SETTINGS__DELETE_CHANNEL_TITLE, submitText: stringSet.OPEN_CHANNEL_SETTINGS__DELETE_CHANNEL_SUBMIT }, stringSet.OPEN_CHANNEL_SETTINGS__DELETE_CHANNEL_CONTEXT)))); } function OperatorListModal(_a) { var _b; var onCancel = _a.onCancel; var _c = useState([]), users = _c[0], setUsers = _c[1]; var _d = useState(null), operatorQuery = _d[0], setOperatorQuery = _d[1]; var channel = useOpenChannelSettingsContext().channel; var state = useSendbird().state; var currentUserId = (_b = state === null || state === void 0 ? void 0 : state.config) === null || _b === void 0 ? void 0 : _b.userId; var stringSet = useContext(LocalizationContext).stringSet; useEffect(function () { var operatorListQuery = channel === null || channel === void 0 ? void 0 : channel.createOperatorListQuery({ limit: 20, }); if (operatorListQuery) { operatorListQuery.next().then(function (participants) { setUsers(participants); }); setOperatorQuery(operatorListQuery); } }, []); return (React__default.createElement("div", null, React__default.createElement(Modal, { hideFooter: true, isFullScreenOnMobile: true, titleText: stringSet.OPEN_CHANNEL_SETTINGS__OPERATORS__TITLE_ALL, onCancel: onCancel }, React__default.createElement("div", { className: "sendbird-more-users__popup-scroll", onScroll: function (e) { var hasNext = operatorQuery === null || operatorQuery === void 0 ? void 0 : operatorQuery.hasNext; var target = e.target; var fetchMore = (target.clientHeight + target.scrollTop === target.scrollHeight); if (hasNext && fetchMore) { operatorQuery.next().then(function (o) { setUsers(__spreadArray(__spreadArray([], users, true), o, true)); }); } } }, users.map(function (operator) { return (React__default.createElement(UserListItem, { currentUser: currentUserId, user: operator, key: operator.userId, action: function (_a) { var parentRef = _a.parentRef, actionRef = _a.actionRef; return (currentUserId !== (operator === null || operator === void 0 ? void 0 : operator.userId) ? (React__default.createElement(ContextMenu, { menuTrigger: function (toggleDropdown) { return (React__default.createElement(IconButton, { className: "sendbird-user-message__more__menu", width: "32px", height: "32px", onClick: toggleDropdown }, React__default.createElement(Icon, { width: "24px", height: "24px", type: IconTypes.MORE, fillColor: IconColors.CONTENT_INVERSE }))); }, menuItems: function (closeDropdown) { return (React__default.createElement(MenuItems, { parentContainRef: parentRef, parentRef: actionRef, closeDropdown: closeDropdown, openLeft: true }, React__default.createElement(MenuItem, { onClick: function () { channel === null || channel === void 0 ? void 0 : channel.removeOperators([operator.userId]).then(function () { setUsers(users.filter(function (_a) { var userId = _a.userId; return userId !== operator.userId; })); }); closeDropdown(); }, testID: "open_channel_setting_operator_context_menu_unregister_operator" }, stringSet.OPEN_CHANNEL_SETTING__MODERATION__UNREGISTER_OPERATOR))); } })) : React__default.createElement(React__default.Fragment, null)); } })); }))))); } function AddOperatorsModal(_a) { var onCancel = _a.onCancel, onSubmit = _a.onSubmit; var _b = useState([]), participants = _b[0], setParticipants = _b[1]; var _c = useState({}), selectedUsers = _c[0], setSelectedUsers = _c[1]; var _d = useState(null), participantQuery = _d[0], setParticipantQuery = _d[1]; var stringSet = useContext(LocalizationContext).stringSet; var channel = useOpenChannelSettingsContext().channel; useEffect(function () { var participantListQuery = channel === null || channel === void 0 ? void 0 : channel.createParticipantListQuery({ limit: 20, }); if (participantListQuery) { participantListQuery.next().then(function (users) { setParticipants(users); }); setParticipantQuery(participantListQuery); } }, []); var selectedCount = Object.keys(selectedUsers).filter(function (m) { return selectedUsers[m]; }).length; return (React__default.createElement(React__default.Fragment, null, React__default.createElement(Modal, { isFullScreenOnMobile: true, type: ButtonTypes.PRIMARY, submitText: stringSet.CHANNEL_SETTING__OPERATORS__ADD_BUTTON, onCancel: onCancel, onSubmit: function () { var users = Object.keys(selectedUsers).filter(function (m) { return selectedUsers[m]; }); channel === null || channel === void 0 ? void 0 : channel.addOperators(users).then(function () { onSubmit(users); }); }, titleText: stringSet.OPEN_CHANNEL_CONVERSATION__SELECT_PARTICIPANTS }, React__default.createElement(Label, { color: (selectedCount > 0) ? LabelColors.PRIMARY : LabelColors.ONBACKGROUND_3, type: LabelTypography.CAPTION_1 }, "".concat(selectedCount, " ").concat(stringSet.MODAL__INVITE_MEMBER__SELECTED)), React__default.createElement("div", { className: "sendbird-more-users__popup-scroll", onScroll: function (e) { var hasNext = participantQuery ? participantQuery.hasNext : false; var target = e.target; var fetchMore = (target.clientHeight + target.scrollTop === target.scrollHeight); if (hasNext && fetchMore && participantQuery) { participantQuery.next().then(function (o) { setParticipants(__spreadArray(__spreadArray([], participants, true), o, true)); }); } } }, participants.map(function (participant) { var isOperator = (channel === null || channel === void 0 ? void 0 : channel.operators.find(function (operator) { return (operator === null || operator === void 0 ? void 0 : operator.userId) === (participant === null || participant === void 0 ? void 0 : participant.userId); })) ? true : false; return (React__default.createElement(UserListItem, { user: participant, key: participant.userId, checkBox: true, checked: selectedUsers[participant.userId] || isOperator, disabled: isOperator, isOperator: isOperator, onChange: function (event) { var _a; var modifiedSelectedUsers = __assign(__assign({}, selectedUsers), (_a = {}, _a[event.target.id] = event.target.checked, _a)); if (!event.target.checked) { delete modifiedSelectedUsers[event.target.id]; } setSelectedUsers(modifiedSelectedUsers); } })); }))))); } var OperatorList = function () { var _a, _b; var _c = useState(false), showAdd = _c[0], setShowAdd = _c[1]; var _d = useState(false), showMore = _d[0], setShowMore = _d[1]; var state = useSendbird().state; var currentUserId = (_a = state === null || state === void 0 ? void 0 : state.config) === null || _a === void 0 ? void 0 : _a.userId; var stringSet = useContext(LocalizationContext).stringSet; var channel = useOpenChannelSettingsContext().channel; return (React__default.createElement("div", null, (_b = channel === null || channel === void 0 ? void 0 : channel.operators) === null || _b === void 0 ? void 0 : _b.slice(0, 10).map(function (operator) { return (React__default.createElement(UserListItem$1, { key: operator.userId, user: operator, currentUser: currentUserId, action: function (_a) { var actionRef = _a.actionRef; return (currentUserId !== (operator === null || operator === void 0 ? void 0 : operator.userId) ? (React__default.createElement(ContextMenu, { menuTrigger: function (toggleDropdown) { return (React__default.createElement(IconButton, { className: "sendbird-openchannel-operator-list__menu", width: "32px", height: "32px", onClick: toggleDropdown }, React__default.createElement(Icon, { width: "24px", height: "24px", type: IconTypes.MORE, fillColor: IconColors.CONTENT_INVERSE }))); }, menuItems: function (closeDropdown) { return (React__default.createElement(MenuItems, { parentRef: actionRef, closeDropdown: closeDropdown, openLeft: true }, React__default.createElement(MenuItem, { onClick: function () { channel === null || channel === void 0 ? void 0 : channel.removeOperators([operator.userId]).then(function () { closeDropdown(); }); }, testID: "open_channel_setting_operator_context_menu_unregister_operator" }, stringSet.OPEN_CHANNEL_SETTING__MODERATION__UNREGISTER_OPERATOR), React__default.createElement(MuteMenuItem, { channel: channel, user: operator, onChange: function () { return closeDropdown(); }, onError: function () { // FIXME: handle error later closeDropdown(); }, testID: "open_channel_setting_operator_context_menu_".concat(operator.isMuted ? 'unmute' : 'mute') }, operator.isMuted ? stringSet.OPEN_CHANNEL_SETTING__MODERATION__UNMUTE : stringSet.OPEN_CHANNEL_SETTING__MODERATION__MUTE), React__default.createElement(MenuItem, { onClick: function () { channel === null || channel === void 0 ? void 0 : channel.banUser(operator).then(function () { closeDropdown(); }); }, testID: "open_channel_setting_operator_context_menu_ban" }, stringSet.OPEN_CHANNEL_SETTING__MODERATION__BAN))); } })) : React__default.createElement(React__default.Fragment, null)); } })); }), React__default.createElement("div", { className: "sendbird-openchannel-operator-list__footer" }, React__default.createElement(Button, { type: ButtonTypes.SECONDARY, size: ButtonSizes.SMALL, onClick: function () { setShowAdd(true); } }, stringSet.OPEN_CHANNEL_SETTINGS__OPERATORS__TITLE_ADD), (channel === null || channel === void 0 ? void 0 : channel.operators) && channel.operators.length > 10 && (React__default.createElement(Button, { type: ButtonTypes.SECONDARY, size: ButtonSizes.SMALL, onClick: function () { setShowMore(true); } }, stringSet.OPEN_CHANNEL_SETTINGS__OPERATORS__TITLE_ALL))), showMore && (React__default.createElement(React__default.Fragment, null, React__default.createElement(OperatorListModal, { onCancel: function () { setShowMore(false); } }))), showAdd && (React__default.createElement(React__default.Fragment, null, React__default.createElement(AddOperatorsModal, { onCancel: function () { return setShowAdd(false); }, onSubmit: function () { setShowAdd(false); } }))))); }; function MutedParticipantsModal(_a) { var _b; var onCancel = _a.onCancel; var _c = useState([]), mutedUsers = _c[0], setMutedUsers = _c[1]; var _d = useState(null), userListQuery = _d[0], setUserListQuery = _d[1]; var channel = useOpenChannelSettingsContext().channel; var state = useSendbird().state; var currentUserId = (_b = state === null || state === void 0 ? void 0 : state.config) === null || _b === void 0 ? void 0 : _b.userId; var stringSet = useContext(LocalizationContext).stringSet; useEffect(function () { var mutedUserListQuery = channel === null || channel === void 0 ? void 0 : channel.createMutedUserListQuery({ limit: 10, }); mutedUserListQuery === null || mutedUserListQuery === void 0 ? void 0 : mutedUserListQuery.next().then(function (users) { setMutedUsers(users); }); if (mutedUserListQuery) { setUserListQuery(mutedUserListQuery); } }, []); return (React__default.createElement("div", null, React__default.createElement(Modal, { isFullScreenOnMobile: true, hideFooter: true, onCancel: function () { return onCancel(); }, onSubmit: noop, titleText: stringSet.OPEN_CHANNEL_SETTINGS__MUTED_MEMBERS__TITLE }, React__default.createElement("div", { className: "sendbird-more-members__popup-scroll", onScroll: function (e) { var hasNext = userListQuery === null || userListQuery === void 0 ? void 0 : userListQuery.hasNext; var target = e.target; var fetchMore = (target.clientHeight + target.scrollTop === target.scrollHeight); if (hasNext && fetchMore) { userListQuery.next().then(function (o) { setMutedUsers(__spreadArray(__spreadArray([], mutedUsers, true), o, true)); }); } } }, mutedUsers.map(function (mutedUser) { return (React__default.createElement(UserListItem, { currentUser: currentUserId, user: mutedUser, key: mutedUser.userId, action: function (_a) { var actionRef = _a.actionRef; return ((mutedUser === null || mutedUser === void 0 ? void 0 : mutedUser.userId) !== currentUserId ? (React__default.createElement(ContextMenu, { menuTrigger: function (toggleDropdown) { return (React__default.createElement(IconButton, { className: "sendbird-user-message__more__menu", width: "32px", height: "32px", onClick: toggleDropdown }, React__default.createElement(Icon, { width: "24px", height: "24px", type: IconTypes.MORE, fillColor: IconColors.CONTENT_INVERSE }))); }, menuItems: function (closeDropdown) { return (React__default.createElement(MenuItems, { parentRef: actionRef, closeDropdown: closeDropdown, openLeft: true }, React__default.createElement(MenuItem, { onClick: function () { channel === null || channel === void 0 ? void 0 : channel.unmuteUser(mutedUser).then(function () { closeDropdown(); setMutedUsers(mutedUsers.filter(function (u) { return (u.userId !== mutedUser.userId); })); }); }, testID: "open_channel_setting_muted_member_context_menu_unmute" }, stringSet.OPEN_CHANNEL_SETTING__MODERATION__UNMUTE))); } })) : React__default.createElement(React__default.Fragment, null)); } })); }))))); } var MutedParticipantList = function () { var _a; var _b = useState([]), mutedUsers = _b[0], setMutedUsers = _b[1]; var _c = useState(false), hasNext = _c[0], setHasNext = _c[1]; var _d = useState(false), showModal = _d[0], setShowModal = _d[1]; var channel = useOpenChannelSettingsContext().channel; var state = useSendbird().state; var currentUserId = (_a = state === null || state === void 0 ? void 0 : state.config) === null || _a === void 0 ? void 0 : _a.userId; var stringSet = useContext(LocalizationContext).stringSet; useEffect(function () { if (!channel) { setMutedUsers([]); return; } var mutedUserListQuery = channel === null || channel === void 0 ? void 0 : channel.createMutedUserListQuery({ limit: 10, }); mutedUserListQuery.next().then(function (members) { setMutedUsers(members); setHasNext(mutedUserListQuery.hasNext); }); }, [channel]); var refreshList = useCallback(function () { if (!channel) { setMutedUsers([]); return; } var mutedUserListQuery = channel === null || channel === void 0 ? void 0 : channel.createMutedUserListQuery({ limit: 10, }); mutedUserListQuery.next().then(function (members) { setMutedUsers(members); setHasNext(mutedUserListQuery.hasNext); }); }, [channel]); return (React__default.createElement(React__default.Fragment, null, mutedUsers.map(function (mutedUser) { return (React__default.createElement(UserListItem$1, { key: mutedUser.userId, user: mutedUser, currentUser: currentUserId, isOperator: channel === null || channel === void 0 ? void 0 : channel.isOperator(mutedUser.userId), action: function (_a) { var actionRef = _a.actionRef; return ((mutedUser === null || mutedUser === void 0 ? void 0 : mutedUser.userId) !== currentUserId ? (React__default.createElement(ContextMenu, { menuTrigger: function (toggleDropdown) { return (React__default.createElement(IconButton, { className: "sendbird-user-message__more__menu", width: "32px", height: "32px", onClick: toggleDropdown }, React__default.createElement(Icon, { width: "24px", height: "24px", type: IconTypes.MORE, fillColor: IconColors.CONTENT_INVERSE }))); }, menuItems: function (closeDropdown) { return (React__default.createElement(MenuItems, { closeDropdown: closeDropdown, openLeft: true, parentRef: actionRef }, React__default.createElement(MenuItem, { onClick: function () { channel === null || channel === void 0 ? void 0 : channel.unmuteUser(mutedUser).then(function () { refreshList(); closeDropdown(); }); }, testID: "open_channel_setting_muted_member_context_menu_unmute" }, stringSet.OPEN_CHANNEL_SETTING__MODERATION__UNMUTE))); } })) : React__default.createElement(React__default.Fragment, null)); } })); }), mutedUsers && mutedUsers.length === 0 && (React__default.createElement(Label, { className: "sendbird-channel-settings__empty-list", type: LabelTypography.SUBTITLE_2, color: LabelColors.ONBACKGROUND_3 }, stringSet.OPEN_CHANNEL_SETTINGS__MUTED_MEMBERS__NO_ONE)), hasNext && (React__default.createElement("div", { className: "sendbird-channel-settings-muted-participant-list__footer" }, React__default.createElement(Button, { type: ButtonTypes.SECONDARY, size: ButtonSizes.SMALL, onClick: function () { setShowModal(true); } }, stringSet.OPEN_CHANNEL_SETTINGS__MUTED_MEMBERS__TITLE_ALL))), showModal && (React__default.createElement(MutedParticipantsModal, { onCancel: function () { setShowModal(false); refreshList(); } })))); }; function BannedUsersModal(_a) { var _b; var onCancel = _a.onCancel; var _c = useState([]), bannedUsers = _c[0], setBannedUsers = _c[1]; var _d = useState(null), userListQuery = _d[0], setUserListQuery = _d[1]; var channel = useOpenChannelSettingsContext().channel; var state = useSendbird().state; var stringSet = useContext(LocalizationContext).stringSet; var currentUserId = (_b = state === null || state === void 0 ? void 0 : state.config) === null || _b === void 0 ? void 0 : _b.userId; useEffect(function () { var bannedUserListQuery = channel === null || channel === void 0 ? void 0 : channel.createBannedUserListQuery(); bannedUserListQuery === null || bannedUserListQuery === void 0 ? void 0 : bannedUserListQuery.next().then(function (users) { setBannedUsers(users); }); setUserListQuery(bannedUserListQuery !== null && bannedUserListQuery !== void 0 ? bannedUserListQuery : null); }, []); return (React__default.createElement("div", null, React__default.createElement(Modal, { hideFooter: true, isFullScreenOnMobile: true, onCancel: function () { return onCancel(); }, onSubmit: noop, titleText: stringSet.OPEN_CHANNEL_SETTINGS__MUTED_MEMBERS__TITLE }, React__default.createElement("div", { className: "sendbird-more-members__popup-scroll", onScroll: function (e) { var hasNext = userListQuery === null || userListQuery === void 0 ? void 0 : userListQuery.hasNext; var target = e.target; var fetchMore = (target.clientHeight + target.scrollTop === target.scrollHeight); if (hasNext && fetchMore) { userListQuery.next().then(function (o) { setBannedUsers(__spreadArray(__spreadArray([], bannedUsers, true), o, true)); }); } } }, bannedUsers.map(function (bannedUser) { return (React__default.createElement(UserListItem, { user: bannedUser, key: bannedUser.userId, action: function (_a) { var actionRef = _a.actionRef; return ((bannedUser === null || bannedUser === void 0 ? void 0 : bannedUser.userId) !== currentUserId ? (React__default.createElement(ContextMenu, { menuTrigger: function (toggleDropdown) { return (React__default.createElement(IconButton, { className: "sendbird-user-message__more__menu", width: "32px", height: "32px", onClick: toggleDropdown }, React__default.createElement(Icon, { width: "24px", height: "24px", type: IconTypes.MORE, fillColor: IconColors.CONTENT_INVERSE }))); }, menuItems: function (closeDropdown) { return (React__default.createElement(MenuItems, { parentRef: actionRef, closeDropdown: closeDropdown, openLeft: true }, React__default.createElement(MenuItem, { onClick: function () { channel === null || channel === void 0 ? void 0 : channel.unbanUser(bannedUser).then(function () { closeDropdown(); setBannedUsers(bannedUsers.filter(function (u) { return (u.userId !== bannedUser.userId); })); }); }, testID: "open_channel_setting_banned_user_context_menu_unban" }, stringSet.OPEN_CHANNEL_SETTING__MODERATION__UNBAN))); } })) : React__default.createElement(React__default.Fragment, null)); } })); }))))); } var BannedUserList = function () { var _a; var _b = useState([]), bannedUsers = _b[0], setBannedUsers = _b[1]; var _c = useState(false), hasNext = _c[0], setHasNext = _c[1]; var _d = useState(false), showModal = _d[0], setShowModal = _d[1]; var channel = useOpenChannelSettingsContext().channel; var state = useSendbird().state; var stringSet = useContext(LocalizationContext).stringSet; var currentUserId = (_a = state === null || state === void 0 ? void 0 : state.config) === null || _a === void 0 ? void 0 : _a.userId; useEffect(function () { if (!channel) { setBannedUsers([]); return; } var bannedUserListQuery = channel === null || channel === void 0 ? void 0 : channel.createBannedUserListQuery(); bannedUserListQuery.next().then(function (users) { setBannedUsers(users); setHasNext(bannedUserListQuery.hasNext); }); }, [channel]); var refreshList = useCallback(function () { if (!channel) { setBannedUsers([]); return; } var bannedUserListQuery = channel === null || channel === void 0 ? void 0 : channel.createBannedUserListQuery(); bannedUserListQuery.next().then(function (users) { setBannedUsers(users); setHasNext(bannedUserListQuery.hasNext); }); }, [channel]); return (React__default.createElement(React__default.Fragment, null, bannedUsers.map(function (bannedUser) { return (React__default.createElement(UserListItem$1, { key: bannedUser.userId, user: bannedUser, isOperator: channel === null || channel === void 0 ? void 0 : channel.isOperator(bannedUser.userId), action: function (_a) { var actionRef = _a.actionRef; return ((bannedUser === null || bannedUser === void 0 ? void 0 : bannedUser.userId) !== currentUserId ? (React__default.createElement(ContextMenu, { menuTrigger: function (toggleDropdown) { return (React__default.createElement(IconButton, { className: "sendbird-user-message__more__menu", width: "32px", height: "32px", onClick: toggleDropdown }, React__default.createElement(Icon, { width: "24px", height: "24px", type: IconTypes.MORE, fillColor: IconColors.CONTENT_INVERSE }))); }, menuItems: function (closeDropdown) { return (React__default.createElement(MenuItems, { parentRef: actionRef, closeDropdown: closeDropdown, openLeft: true }, React__default.createElement(MenuItem, { onClick: function () { channel === null || channel === void 0 ? void 0 : channel.unbanUser(bannedUser).then(function () { closeDropdown(); refreshList(); }); }, testID: "open_channel_setting_banned_user_context_menu_unban" }, stringSet.OPEN_CHANNEL_SETTING__MODERATION__UNBAN))); } })) : React__default.createElement(React__default.Fragment, null)); } })); }), bannedUsers && bannedUsers.length === 0 && (React__default.createElement(Label, { className: "sendbird-channel-settings__empty-list", type: LabelTypography.SUBTITLE_2, color: LabelColors.ONBACKGROUND_3 }, stringSet.OPEN_CHANNEL_SETTINGS__BANNED_MEMBERS__NO_ONE)), hasNext && (React__default.createElement("div", { className: "sendbird-channel-settings-banned-user-list__footer" }, React__default.createElement(Button, { type: ButtonTypes.SECONDARY, size: ButtonSizes.SMALL, onClick: function () { setShowModal(true); } }, stringSet.OPEN_CHANNEL_SETTINGS__BANNED_MEMBERS__TITLE_ALL))), showModal && (React__default.createElement(BannedUsersModal, { onCancel: function () { setShowModal(false); refreshList(); } })))); }; var copyToClipboard = function (text) { // @ts-ignore: Unreachable code error if (window.clipboardData && window.clipboardData.setData) { // Internet Explorer-specific code path to prevent textarea being shown while dialog is visible. // @ts-ignore: Unreachable code error return window.clipboardData.setData('Text', text); } if (document.queryCommandSupported && document.queryCommandSupported('copy')) { var textarea = document.createElement('textarea'); textarea.textContent = text; textarea.style.position = 'fixed'; // Prevent scrolling to bottom of page in Microsoft Edge. document.body.appendChild(textarea); textarea.select(); try { return document.execCommand('copy'); // Security exception may be thrown by some browsers. } catch (ex) { return false; } finally { document.body.removeChild(textarea); } } return false; }; var OperatorUI = function (_a) { var renderChannelProfile = _a.renderChannelProfile; var stringSet = useContext(LocalizationContext).stringSet; var _b = useOpenChannelSettingsContext(), onCloseClick = _b.onCloseClick, channel = _b.channel; return (React__default.createElement(React__default.Fragment, null, React__default.createElement("div", { className: "sendbird-openchannel-settings__header" }, React__default.createElement(Label, { type: LabelTypography.H_2, color: LabelColors.ONBACKGROUND_1 }, stringSet.CHANNEL_SETTING__HEADER__TITLE), React__default.createElement(Icon, { className: "sendbird-openchannel-settings__close-icon", type: IconTypes.CLOSE, height: "24px", width: "24px", onClick: function () { onCloseClick === null || onCloseClick === void 0 ? void 0 : onCloseClick(); } })), React__default.createElement("div", { className: "sendbird-openchannel-settings__profile" }, (renderChannelProfile === null || renderChannelProfile === void 0 ? void 0 : renderChannelProfile()) || (React__default.createElement(ChannelProfile, null))), React__default.createElement("div", { className: "sendbird-openchannel-settings__url" }, React__default.createElement(Icon, { className: "sendbird-openchannel-settings__copy-icon", type: IconTypes.COPY, height: "22px", width: "22px", onClick: function () { var _a; copyToClipboard((_a = channel === null || channel === void 0 ? void 0 : channel.url) !== null && _a !== void 0 ? _a : ''); } }), React__default.createElement(Label, { className: "sendbird-openchannel-settings__url-label", type: LabelTypography.CAPTION_2, color: LabelColors.ONBACKGROUND_2 }, stringSet.OPEN_CHANNEL_SETTINGS__OPERATOR_URL), React__default.createElement(Label, { className: "sendbird-openchannel-settings__url-value", type: LabelTypography.SUBTITLE_2 }, channel === null || channel === void 0 ? void 0 : channel.url)), React__default.createElement(AccordionGroup, null, React__default.createElement(Accordion, { className: "sendbird-openchannel-settings__operators-list", id: "operators", renderTitle: function () { return (React__default.createElement(React__default.Fragment, null, React__default.createElement(Icon, { className: "sendbird-openchannel-settings__operator-accordion-icon", type: IconTypes.OPERATOR, fillColor: IconColors.PRIMARY, width: "24px", height: "24px" }), React__default.createElement(Label, { type: LabelTypography.SUBTITLE_1, color: LabelColors.ONBACKGROUND_1 }, stringSet.OPEN_CHANNEL_SETTINGS__OPERATORS_TITLE))); }, renderContent: function () { return (React__default.createElement(React__default.Fragment, null, React__default.createElement(OperatorList, null))); } }), React__default.createElement(Accordion, { className: "sendbird-channel-settings__operators-list", id: "participants", renderTitle: function () { return (React__default.createElement(React__default.Fragment, null, React__default.createElement(Icon, { type: IconTypes.MEMBERS, fillColor: IconColors.PRIMARY, width: 24, height: 24, className: "sendbird-openchannel-settings__operator-accordion-icon" }), React__default.createElement(Label, { type: LabelTypography.SUBTITLE_1, color: LabelColors.ONBACKGROUND_1 }, stringSet.OPEN_CHANNEL_SETTINGS__PARTICIPANTS_ACCORDION_TITLE))); }, renderContent: function () { return (React__default.createElement(React__default.Fragment, null, React__default.createElement(ParticipantList, { isOperatorView: true }))); } }), React__default.createElement(Accordion, { className: "sendbird-channel-settings__operators-list", id: "mutedMembers", renderTitle: function () { return (React__default.createElement(React__default.Fragment, null, React__default.createElement(Icon, { className: "sendbird-openchannel-settings__operator-accordion-icon", type: IconTypes.MUTE, fillColor: IconColors.PRIMARY, width: "24px", height: "24px" }), React__default.createElement(Label, { type: LabelTypography.SUBTITLE_1, color: LabelColors.ONBACKGROUND_1 }, stringSet.OPEN_CHANNEL_SETTINGS__MUTED_MEMBERS__TITLE))); }, renderContent: function () { return (React__default.createElement(React__default.Fragment, null, React__default.createElement(MutedParticipantList, null))); } }), React__default.createElement(Accordion, { className: "sendbird-channel-settings__operators-list", id: "bannedUsers", renderTitle: function () { return (React__default.createElement(React__default.Fragment, null, React__default.createElement(Icon, { className: "sendbird-openchannel-settings__operator-accordion-icon", type: IconTypes.BAN, fillColor: IconColors.PRIMARY, width: "24px", height: "24px" }), React__default.createElement(Label, { type: LabelTypography.SUBTITLE_1, color: LabelColors.ONBACKGROUND_1 }, stringSet.OPEN_CHANNEL_SETTINGS__BANNED_MEMBERS__TITLE))); }, renderContent: function () { return (React__default.createElement(React__default.Fragment, null, React__default.createElement(BannedUserList, null))); } })), React__default.createElement(DeleteChannel, null))); }; export { OperatorUI, copyToClipboard, OperatorUI as default }; //# sourceMappingURL=OperatorUI.js.map