UNPKG

matrix-react-sdk

Version:
663 lines (552 loc) 85.2 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _react = _interopRequireWildcard(require("react")); var _classnames = _interopRequireDefault(require("classnames")); var _MatrixClientPeg = require("../../MatrixClientPeg"); var _dispatcher = _interopRequireDefault(require("../../dispatcher/dispatcher")); var _actions = require("../../dispatcher/actions"); var _languageHandler = require("../../languageHandler"); var _ContextMenu = require("./ContextMenu"); var _UserSettingsDialog = require("../views/dialogs/UserSettingsDialog"); var _FeedbackDialog = _interopRequireDefault(require("../views/dialogs/FeedbackDialog")); var _Modal = _interopRequireDefault(require("../../Modal")); var _LogoutDialog = _interopRequireDefault(require("../views/dialogs/LogoutDialog")); var _SettingsStore = _interopRequireDefault(require("../../settings/SettingsStore")); var _theme = require("../../theme"); var _AccessibleButton = _interopRequireDefault(require("../views/elements/AccessibleButton")); var _SdkConfig = _interopRequireDefault(require("../../SdkConfig")); var _pages = require("../../utils/pages"); var _OwnProfileStore = require("../../stores/OwnProfileStore"); var _AsyncStore = require("../../stores/AsyncStore"); var _BaseAvatar = _interopRequireDefault(require("../views/avatars/BaseAvatar")); var _AccessibleTooltipButton = _interopRequireDefault(require("../views/elements/AccessibleTooltipButton")); var _SettingLevel = require("../../settings/SettingLevel"); var _IconizedContextMenu = _interopRequireWildcard(require("../views/context_menus/IconizedContextMenu")); var _CommunityPrototypeStore = require("../../stores/CommunityPrototypeStore"); var _GroupFilterOrderStore = _interopRequireDefault(require("../../stores/GroupFilterOrderStore")); var _RoomInvite = require("../../RoomInvite"); var _RightPanelStorePhases = require("../../stores/RightPanelStorePhases"); var _ErrorDialog = _interopRequireDefault(require("../views/dialogs/ErrorDialog")); var _EditCommunityPrototypeDialog = _interopRequireDefault(require("../views/dialogs/EditCommunityPrototypeDialog")); var _UIFeature = require("../../settings/UIFeature"); var _HostSignupAction = _interopRequireDefault(require("./HostSignupAction")); var _SpaceStore = _interopRequireWildcard(require("../../stores/SpaceStore")); var _RoomName = _interopRequireDefault(require("../views/elements/RoomName")); var _replaceableComponent = require("../../utils/replaceableComponent"); var _dec, _class, _temp; let UserMenu = (_dec = (0, _replaceableComponent.replaceableComponent)("structures.UserMenu"), _dec(_class = (_temp = class UserMenu extends _react.default.Component /*:: <IProps, IState>*/ { constructor(props /*: IProps*/ ) { super(props); (0, _defineProperty2.default)(this, "dispatcherRef", void 0); (0, _defineProperty2.default)(this, "themeWatcherRef", void 0); (0, _defineProperty2.default)(this, "dndWatcherRef", void 0); (0, _defineProperty2.default)(this, "buttonRef", /*#__PURE__*/(0, _react.createRef)()); (0, _defineProperty2.default)(this, "tagStoreRef", void 0); (0, _defineProperty2.default)(this, "onTagStoreUpdate", () => { this.forceUpdate(); // we don't have anything useful in state to update }); (0, _defineProperty2.default)(this, "onProfileUpdate", async () => { // the store triggered an update, so force a layout update. We don't // have any state to store here for that to magically happen. this.forceUpdate(); }); (0, _defineProperty2.default)(this, "onSelectedSpaceUpdate", async (selectedSpace /*: Room*/ ) => { this.setState({ selectedSpace }); }); (0, _defineProperty2.default)(this, "onThemeChanged", () => { this.setState({ isDarkTheme: this.isUserOnDarkTheme() }); }); (0, _defineProperty2.default)(this, "onAction", (ev /*: ActionPayload*/ ) => { if (ev.action !== _actions.Action.ToggleUserMenu) return; // not interested if (this.state.contextMenuPosition) { this.setState({ contextMenuPosition: null }); } else { if (this.buttonRef.current) this.buttonRef.current.click(); } }); (0, _defineProperty2.default)(this, "onOpenMenuClick", (ev /*: React.MouseEvent*/ ) => { ev.preventDefault(); ev.stopPropagation(); const target = ev.target; this.setState({ contextMenuPosition: target.getBoundingClientRect() }); }); (0, _defineProperty2.default)(this, "onContextMenu", (ev /*: React.MouseEvent*/ ) => { ev.preventDefault(); ev.stopPropagation(); this.setState({ contextMenuPosition: { left: ev.clientX, top: ev.clientY, width: 20, height: 0 } }); }); (0, _defineProperty2.default)(this, "onCloseMenu", () => { this.setState({ contextMenuPosition: null }); }); (0, _defineProperty2.default)(this, "onSwitchThemeClick", (ev /*: React.MouseEvent*/ ) => { ev.preventDefault(); ev.stopPropagation(); // Disable system theme matching if the user hits this button _SettingsStore.default.setValue("use_system_theme", null, _SettingLevel.SettingLevel.DEVICE, false); const newTheme = this.state.isDarkTheme ? "light" : "dark"; _SettingsStore.default.setValue("theme", null, _SettingLevel.SettingLevel.DEVICE, newTheme); // set at same level as Appearance tab }); (0, _defineProperty2.default)(this, "onSettingsOpen", (ev /*: ButtonEvent*/ , tabId /*: string*/ ) => { ev.preventDefault(); ev.stopPropagation(); const payload /*: OpenToTabPayload*/ = { action: _actions.Action.ViewUserSettings, initialTabId: tabId }; _dispatcher.default.dispatch(payload); this.setState({ contextMenuPosition: null }); // also close the menu }); (0, _defineProperty2.default)(this, "onShowArchived", (ev /*: ButtonEvent*/ ) => { ev.preventDefault(); ev.stopPropagation(); // TODO: Archived room view: https://github.com/vector-im/element-web/issues/14038 // Note: You'll need to uncomment the button too. console.log("TODO: Show archived rooms"); }); (0, _defineProperty2.default)(this, "onProvideFeedback", (ev /*: ButtonEvent*/ ) => { ev.preventDefault(); ev.stopPropagation(); _Modal.default.createTrackedDialog('Feedback Dialog', '', _FeedbackDialog.default); this.setState({ contextMenuPosition: null }); // also close the menu }); (0, _defineProperty2.default)(this, "onSignOutClick", async (ev /*: ButtonEvent*/ ) => { ev.preventDefault(); ev.stopPropagation(); const cli = _MatrixClientPeg.MatrixClientPeg.get(); if (!cli || !cli.isCryptoEnabled() || !(await cli.exportRoomKeys())?.length) { // log out without user prompt if they have no local megolm sessions _dispatcher.default.dispatch({ action: 'logout' }); } else { _Modal.default.createTrackedDialog('Logout from LeftPanel', '', _LogoutDialog.default); } this.setState({ contextMenuPosition: null }); // also close the menu }); (0, _defineProperty2.default)(this, "onSignInClick", () => { _dispatcher.default.dispatch({ action: 'start_login' }); this.setState({ contextMenuPosition: null }); // also close the menu }); (0, _defineProperty2.default)(this, "onRegisterClick", () => { _dispatcher.default.dispatch({ action: 'start_registration' }); this.setState({ contextMenuPosition: null }); // also close the menu }); (0, _defineProperty2.default)(this, "onHomeClick", (ev /*: ButtonEvent*/ ) => { ev.preventDefault(); ev.stopPropagation(); _dispatcher.default.dispatch({ action: 'view_home_page' }); this.setState({ contextMenuPosition: null }); // also close the menu }); (0, _defineProperty2.default)(this, "onCommunitySettingsClick", (ev /*: ButtonEvent*/ ) => { ev.preventDefault(); ev.stopPropagation(); _Modal.default.createTrackedDialog('Edit Community', '', _EditCommunityPrototypeDialog.default, { communityId: _CommunityPrototypeStore.CommunityPrototypeStore.instance.getSelectedCommunityId() }); this.setState({ contextMenuPosition: null }); // also close the menu }); (0, _defineProperty2.default)(this, "onCommunityMembersClick", (ev /*: ButtonEvent*/ ) => { ev.preventDefault(); ev.stopPropagation(); // We'd ideally just pop open a right panel with the member list, but the current // way the right panel is structured makes this exceedingly difficult. Instead, we'll // switch to the general room and open the member list there as it should be in sync // anyways. const chat = _CommunityPrototypeStore.CommunityPrototypeStore.instance.getSelectedCommunityGeneralChat(); if (chat) { _dispatcher.default.dispatch({ action: 'view_room', room_id: chat.roomId }, true); _dispatcher.default.dispatch({ action: _actions.Action.SetRightPanelPhase, phase: _RightPanelStorePhases.RightPanelPhases.RoomMemberList }); } else { // "This should never happen" clauses go here for the prototype. _Modal.default.createTrackedDialog('Failed to find general chat', '', _ErrorDialog.default, { title: (0, _languageHandler._t)('Failed to find the general chat for this community'), description: (0, _languageHandler._t)("Failed to find the general chat for this community") }); } this.setState({ contextMenuPosition: null }); // also close the menu }); (0, _defineProperty2.default)(this, "onCommunityInviteClick", (ev /*: ButtonEvent*/ ) => { ev.preventDefault(); ev.stopPropagation(); (0, _RoomInvite.showCommunityInviteDialog)(_CommunityPrototypeStore.CommunityPrototypeStore.instance.getSelectedCommunityId()); this.setState({ contextMenuPosition: null }); // also close the menu }); (0, _defineProperty2.default)(this, "onDndToggle", ev => { ev.stopPropagation(); const current = _SettingsStore.default.getValue("doNotDisturb"); _SettingsStore.default.setValue("doNotDisturb", null, _SettingLevel.SettingLevel.DEVICE, !current); }); (0, _defineProperty2.default)(this, "renderContextMenu", () => /*: React.ReactNode*/ { if (!this.state.contextMenuPosition) return null; const prototypeCommunityName = _CommunityPrototypeStore.CommunityPrototypeStore.instance.getSelectedCommunityName(); let topSection; const hostSignupConfig /*: IHostSignupConfig*/ = _SdkConfig.default.get().hostSignup; if (_MatrixClientPeg.MatrixClientPeg.get().isGuest()) { topSection = /*#__PURE__*/_react.default.createElement("div", { className: "mx_UserMenu_contextMenu_header mx_UserMenu_contextMenu_guestPrompts" }, (0, _languageHandler._t)("Got an account? <a>Sign in</a>", {}, { a: sub => /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, { kind: "link", onClick: this.onSignInClick }, sub) }), (0, _languageHandler._t)("New here? <a>Create an account</a>", {}, { a: sub => /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, { kind: "link", onClick: this.onRegisterClick }, sub) })); } else if (hostSignupConfig) { if (hostSignupConfig && hostSignupConfig.url) { // If hostSignup.domains is set to a non-empty array, only show // dialog if the user is on the domain or a subdomain. const hostSignupDomains = hostSignupConfig.domains || []; const mxDomain = _MatrixClientPeg.MatrixClientPeg.get().getDomain(); const validDomains = hostSignupDomains.filter(d => d === mxDomain || mxDomain.endsWith(`.${d}`)); if (!hostSignupConfig.domains || validDomains.length > 0) { topSection = /*#__PURE__*/_react.default.createElement("div", { onClick: this.onCloseMenu }, /*#__PURE__*/_react.default.createElement(_HostSignupAction.default, null)); } } } let homeButton = null; if (this.hasHomePage) { homeButton = /*#__PURE__*/_react.default.createElement(_IconizedContextMenu.IconizedContextMenuOption, { iconClassName: "mx_UserMenu_iconHome", label: (0, _languageHandler._t)("Home"), onClick: this.onHomeClick }); } let feedbackButton; if (_SettingsStore.default.getValue(_UIFeature.UIFeature.Feedback)) { feedbackButton = /*#__PURE__*/_react.default.createElement(_IconizedContextMenu.IconizedContextMenuOption, { iconClassName: "mx_UserMenu_iconMessage", label: (0, _languageHandler._t)("Feedback"), onClick: this.onProvideFeedback }); } let primaryHeader = /*#__PURE__*/_react.default.createElement("div", { className: "mx_UserMenu_contextMenu_name" }, /*#__PURE__*/_react.default.createElement("span", { className: "mx_UserMenu_contextMenu_displayName" }, _OwnProfileStore.OwnProfileStore.instance.displayName), /*#__PURE__*/_react.default.createElement("span", { className: "mx_UserMenu_contextMenu_userId" }, _MatrixClientPeg.MatrixClientPeg.get().getUserId())); let primaryOptionList = /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_IconizedContextMenu.IconizedContextMenuOptionList, null, homeButton, /*#__PURE__*/_react.default.createElement(_IconizedContextMenu.IconizedContextMenuOption, { iconClassName: "mx_UserMenu_iconBell", label: (0, _languageHandler._t)("Notification settings"), onClick: e => this.onSettingsOpen(e, _UserSettingsDialog.USER_NOTIFICATIONS_TAB) }), /*#__PURE__*/_react.default.createElement(_IconizedContextMenu.IconizedContextMenuOption, { iconClassName: "mx_UserMenu_iconLock", label: (0, _languageHandler._t)("Security & privacy"), onClick: e => this.onSettingsOpen(e, _UserSettingsDialog.USER_SECURITY_TAB) }), /*#__PURE__*/_react.default.createElement(_IconizedContextMenu.IconizedContextMenuOption, { iconClassName: "mx_UserMenu_iconSettings", label: (0, _languageHandler._t)("All settings"), onClick: e => this.onSettingsOpen(e, null) }), feedbackButton), /*#__PURE__*/_react.default.createElement(_IconizedContextMenu.IconizedContextMenuOptionList, { red: true }, /*#__PURE__*/_react.default.createElement(_IconizedContextMenu.IconizedContextMenuOption, { iconClassName: "mx_UserMenu_iconSignOut", label: (0, _languageHandler._t)("Sign out"), onClick: this.onSignOutClick }))); let secondarySection = null; if (prototypeCommunityName) { const communityId = _CommunityPrototypeStore.CommunityPrototypeStore.instance.getSelectedCommunityId(); primaryHeader = /*#__PURE__*/_react.default.createElement("div", { className: "mx_UserMenu_contextMenu_name" }, /*#__PURE__*/_react.default.createElement("span", { className: "mx_UserMenu_contextMenu_displayName" }, prototypeCommunityName)); let settingsOption; let inviteOption; if (_CommunityPrototypeStore.CommunityPrototypeStore.instance.canInviteTo(communityId)) { inviteOption = /*#__PURE__*/_react.default.createElement(_IconizedContextMenu.IconizedContextMenuOption, { iconClassName: "mx_UserMenu_iconInvite", label: (0, _languageHandler._t)("Invite"), onClick: this.onCommunityInviteClick }); } if (_CommunityPrototypeStore.CommunityPrototypeStore.instance.isAdminOf(communityId)) { settingsOption = /*#__PURE__*/_react.default.createElement(_IconizedContextMenu.IconizedContextMenuOption, { iconClassName: "mx_UserMenu_iconSettings", label: (0, _languageHandler._t)("Settings"), "aria-label": (0, _languageHandler._t)("Community settings"), onClick: this.onCommunitySettingsClick }); } primaryOptionList = /*#__PURE__*/_react.default.createElement(_IconizedContextMenu.IconizedContextMenuOptionList, null, settingsOption, /*#__PURE__*/_react.default.createElement(_IconizedContextMenu.IconizedContextMenuOption, { iconClassName: "mx_UserMenu_iconMembers", label: (0, _languageHandler._t)("Members"), onClick: this.onCommunityMembersClick }), inviteOption); secondarySection = /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("hr", null), /*#__PURE__*/_react.default.createElement("div", { className: "mx_UserMenu_contextMenu_header" }, /*#__PURE__*/_react.default.createElement("div", { className: "mx_UserMenu_contextMenu_name" }, /*#__PURE__*/_react.default.createElement("span", { className: "mx_UserMenu_contextMenu_displayName" }, _OwnProfileStore.OwnProfileStore.instance.displayName), /*#__PURE__*/_react.default.createElement("span", { className: "mx_UserMenu_contextMenu_userId" }, _MatrixClientPeg.MatrixClientPeg.get().getUserId()))), /*#__PURE__*/_react.default.createElement(_IconizedContextMenu.IconizedContextMenuOptionList, null, /*#__PURE__*/_react.default.createElement(_IconizedContextMenu.IconizedContextMenuOption, { iconClassName: "mx_UserMenu_iconSettings", label: (0, _languageHandler._t)("Settings"), "aria-label": (0, _languageHandler._t)("User settings"), onClick: e => this.onSettingsOpen(e, null) }), feedbackButton), /*#__PURE__*/_react.default.createElement(_IconizedContextMenu.IconizedContextMenuOptionList, { red: true }, /*#__PURE__*/_react.default.createElement(_IconizedContextMenu.IconizedContextMenuOption, { iconClassName: "mx_UserMenu_iconSignOut", label: (0, _languageHandler._t)("Sign out"), onClick: this.onSignOutClick }))); } else if (_MatrixClientPeg.MatrixClientPeg.get().isGuest()) { primaryOptionList = /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_IconizedContextMenu.IconizedContextMenuOptionList, null, homeButton, /*#__PURE__*/_react.default.createElement(_IconizedContextMenu.IconizedContextMenuOption, { iconClassName: "mx_UserMenu_iconSettings", label: (0, _languageHandler._t)("Settings"), onClick: e => this.onSettingsOpen(e, null) }), feedbackButton)); } const classes = (0, _classnames.default)({ "mx_UserMenu_contextMenu": true, "mx_UserMenu_contextMenu_prototype": !!prototypeCommunityName }); return /*#__PURE__*/_react.default.createElement(_IconizedContextMenu.default // numerical adjustments to overlap the context menu by just over the width of the // menu icon and make it look connected , { left: this.state.contextMenuPosition.width + this.state.contextMenuPosition.left - 10, top: this.state.contextMenuPosition.top + this.state.contextMenuPosition.height + 8, onFinished: this.onCloseMenu, className: classes }, /*#__PURE__*/_react.default.createElement("div", { className: "mx_UserMenu_contextMenu_header" }, primaryHeader, /*#__PURE__*/_react.default.createElement(_AccessibleTooltipButton.default, { className: "mx_UserMenu_contextMenu_themeButton", onClick: this.onSwitchThemeClick, title: this.state.isDarkTheme ? (0, _languageHandler._t)("Switch to light mode") : (0, _languageHandler._t)("Switch to dark mode") }, /*#__PURE__*/_react.default.createElement("img", { src: require("../../../res/img/element-icons/roomlist/dark-light-mode.svg"), alt: (0, _languageHandler._t)("Switch theme"), width: 16 }))), topSection, primaryOptionList, secondarySection); }); this.state = { contextMenuPosition: null, isDarkTheme: this.isUserOnDarkTheme() }; _OwnProfileStore.OwnProfileStore.instance.on(_AsyncStore.UPDATE_EVENT, this.onProfileUpdate); if (_SettingsStore.default.getValue("feature_spaces")) { _SpaceStore.default.instance.on(_SpaceStore.UPDATE_SELECTED_SPACE, this.onSelectedSpaceUpdate); } // Force update is the easiest way to trigger the UI update (we don't store state for this) this.dndWatcherRef = _SettingsStore.default.watchSetting("doNotDisturb", null, () => this.forceUpdate()); } get hasHomePage() /*: boolean*/ { return !!(0, _pages.getHomePageUrl)(_SdkConfig.default.get()); } componentDidMount() { this.dispatcherRef = _dispatcher.default.register(this.onAction); this.themeWatcherRef = _SettingsStore.default.watchSetting("theme", null, this.onThemeChanged); this.tagStoreRef = _GroupFilterOrderStore.default.addListener(this.onTagStoreUpdate); } componentWillUnmount() { if (this.themeWatcherRef) _SettingsStore.default.unwatchSetting(this.themeWatcherRef); if (this.dndWatcherRef) _SettingsStore.default.unwatchSetting(this.dndWatcherRef); if (this.dispatcherRef) _dispatcher.default.unregister(this.dispatcherRef); _OwnProfileStore.OwnProfileStore.instance.off(_AsyncStore.UPDATE_EVENT, this.onProfileUpdate); this.tagStoreRef.remove(); if (_SettingsStore.default.getValue("feature_spaces")) { _SpaceStore.default.instance.off(_SpaceStore.UPDATE_SELECTED_SPACE, this.onSelectedSpaceUpdate); } } isUserOnDarkTheme() /*: boolean*/ { if (_SettingsStore.default.getValue("use_system_theme")) { return window.matchMedia("(prefers-color-scheme: dark)").matches; } else { const theme = _SettingsStore.default.getValue("theme"); if (theme.startsWith("custom-")) { return (0, _theme.getCustomTheme)(theme.substring("custom-".length)).is_dark; } return theme === "dark"; } } render() { const avatarSize = 32; // should match border-radius of the avatar const userId = _MatrixClientPeg.MatrixClientPeg.get().getUserId(); const displayName = _OwnProfileStore.OwnProfileStore.instance.displayName || userId; const avatarUrl = _OwnProfileStore.OwnProfileStore.instance.getHttpAvatarUrl(avatarSize); const prototypeCommunityName = _CommunityPrototypeStore.CommunityPrototypeStore.instance.getSelectedCommunityName(); let isPrototype = false; let menuName = (0, _languageHandler._t)("User menu"); let name = /*#__PURE__*/_react.default.createElement("span", { className: "mx_UserMenu_userName" }, displayName); let buttons = /*#__PURE__*/_react.default.createElement("span", { className: "mx_UserMenu_headerButtons" }); let dnd; if (this.state.selectedSpace) { name = /*#__PURE__*/_react.default.createElement("div", { className: "mx_UserMenu_doubleName" }, /*#__PURE__*/_react.default.createElement("span", { className: "mx_UserMenu_userName" }, displayName), /*#__PURE__*/_react.default.createElement(_RoomName.default, { room: this.state.selectedSpace }, roomName => /*#__PURE__*/_react.default.createElement("span", { className: "mx_UserMenu_subUserName" }, roomName))); } else if (prototypeCommunityName) { name = /*#__PURE__*/_react.default.createElement("div", { className: "mx_UserMenu_doubleName" }, /*#__PURE__*/_react.default.createElement("span", { className: "mx_UserMenu_userName" }, prototypeCommunityName), /*#__PURE__*/_react.default.createElement("span", { className: "mx_UserMenu_subUserName" }, displayName)); menuName = (0, _languageHandler._t)("Community and user menu"); isPrototype = true; } else if (_SettingsStore.default.getValue("feature_communities_v2_prototypes")) { name = /*#__PURE__*/_react.default.createElement("div", { className: "mx_UserMenu_doubleName" }, /*#__PURE__*/_react.default.createElement("span", { className: "mx_UserMenu_userName" }, (0, _languageHandler._t)("Home")), /*#__PURE__*/_react.default.createElement("span", { className: "mx_UserMenu_subUserName" }, displayName)); isPrototype = true; } else if (_SettingsStore.default.getValue("feature_dnd")) { const isDnd = _SettingsStore.default.getValue("doNotDisturb"); dnd = /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, { onClick: this.onDndToggle, className: (0, _classnames.default)({ "mx_UserMenu_dnd": true, "mx_UserMenu_dnd_noisy": !isDnd, "mx_UserMenu_dnd_muted": isDnd }) }); } if (this.props.isMinimized) { name = null; buttons = null; } const classes = (0, _classnames.default)({ 'mx_UserMenu': true, 'mx_UserMenu_minimized': this.props.isMinimized, 'mx_UserMenu_prototype': isPrototype }); return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_ContextMenu.ContextMenuButton, { className: classes, onClick: this.onOpenMenuClick, inputRef: this.buttonRef, label: menuName, isExpanded: !!this.state.contextMenuPosition, onContextMenu: this.onContextMenu }, /*#__PURE__*/_react.default.createElement("div", { className: "mx_UserMenu_row" }, /*#__PURE__*/_react.default.createElement("span", { className: "mx_UserMenu_userAvatarContainer" }, /*#__PURE__*/_react.default.createElement(_BaseAvatar.default, { idName: userId, name: displayName, url: avatarUrl, width: avatarSize, height: avatarSize, resizeMethod: "crop", className: "mx_UserMenu_userAvatar" })), name, dnd, buttons)), this.renderContextMenu()); } }, _temp)) || _class); exports.default = UserMenu; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3N0cnVjdHVyZXMvVXNlck1lbnUudHN4Il0sIm5hbWVzIjpbIlVzZXJNZW51IiwiUmVhY3QiLCJDb21wb25lbnQiLCJjb25zdHJ1Y3RvciIsInByb3BzIiwiZm9yY2VVcGRhdGUiLCJzZWxlY3RlZFNwYWNlIiwic2V0U3RhdGUiLCJpc0RhcmtUaGVtZSIsImlzVXNlck9uRGFya1RoZW1lIiwiZXYiLCJhY3Rpb24iLCJBY3Rpb24iLCJUb2dnbGVVc2VyTWVudSIsInN0YXRlIiwiY29udGV4dE1lbnVQb3NpdGlvbiIsImJ1dHRvblJlZiIsImN1cnJlbnQiLCJjbGljayIsInByZXZlbnREZWZhdWx0Iiwic3RvcFByb3BhZ2F0aW9uIiwidGFyZ2V0IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwibGVmdCIsImNsaWVudFgiLCJ0b3AiLCJjbGllbnRZIiwid2lkdGgiLCJoZWlnaHQiLCJTZXR0aW5nc1N0b3JlIiwic2V0VmFsdWUiLCJTZXR0aW5nTGV2ZWwiLCJERVZJQ0UiLCJuZXdUaGVtZSIsInRhYklkIiwicGF5bG9hZCIsIlZpZXdVc2VyU2V0dGluZ3MiLCJpbml0aWFsVGFiSWQiLCJkZWZhdWx0RGlzcGF0Y2hlciIsImRpc3BhdGNoIiwiY29uc29sZSIsImxvZyIsIk1vZGFsIiwiY3JlYXRlVHJhY2tlZERpYWxvZyIsIkZlZWRiYWNrRGlhbG9nIiwiY2xpIiwiTWF0cml4Q2xpZW50UGVnIiwiZ2V0IiwiaXNDcnlwdG9FbmFibGVkIiwiZXhwb3J0Um9vbUtleXMiLCJsZW5ndGgiLCJkaXMiLCJMb2dvdXREaWFsb2ciLCJFZGl0Q29tbXVuaXR5UHJvdG90eXBlRGlhbG9nIiwiY29tbXVuaXR5SWQiLCJDb21tdW5pdHlQcm90b3R5cGVTdG9yZSIsImluc3RhbmNlIiwiZ2V0U2VsZWN0ZWRDb21tdW5pdHlJZCIsImNoYXQiLCJnZXRTZWxlY3RlZENvbW11bml0eUdlbmVyYWxDaGF0Iiwicm9vbV9pZCIsInJvb21JZCIsIlNldFJpZ2h0UGFuZWxQaGFzZSIsInBoYXNlIiwiUmlnaHRQYW5lbFBoYXNlcyIsIlJvb21NZW1iZXJMaXN0IiwiRXJyb3JEaWFsb2ciLCJ0aXRsZSIsImRlc2NyaXB0aW9uIiwiZ2V0VmFsdWUiLCJwcm90b3R5cGVDb21tdW5pdHlOYW1lIiwiZ2V0U2VsZWN0ZWRDb21tdW5pdHlOYW1lIiwidG9wU2VjdGlvbiIsImhvc3RTaWdudXBDb25maWciLCJTZGtDb25maWciLCJob3N0U2lnbnVwIiwiaXNHdWVzdCIsImEiLCJzdWIiLCJvblNpZ25JbkNsaWNrIiwib25SZWdpc3RlckNsaWNrIiwidXJsIiwiaG9zdFNpZ251cERvbWFpbnMiLCJkb21haW5zIiwibXhEb21haW4iLCJnZXREb21haW4iLCJ2YWxpZERvbWFpbnMiLCJmaWx0ZXIiLCJkIiwiZW5kc1dpdGgiLCJvbkNsb3NlTWVudSIsImhvbWVCdXR0b24iLCJoYXNIb21lUGFnZSIsIm9uSG9tZUNsaWNrIiwiZmVlZGJhY2tCdXR0b24iLCJVSUZlYXR1cmUiLCJGZWVkYmFjayIsIm9uUHJvdmlkZUZlZWRiYWNrIiwicHJpbWFyeUhlYWRlciIsIk93blByb2ZpbGVTdG9yZSIsImRpc3BsYXlOYW1lIiwiZ2V0VXNlcklkIiwicHJpbWFyeU9wdGlvbkxpc3QiLCJlIiwib25TZXR0aW5nc09wZW4iLCJVU0VSX05PVElGSUNBVElPTlNfVEFCIiwiVVNFUl9TRUNVUklUWV9UQUIiLCJvblNpZ25PdXRDbGljayIsInNlY29uZGFyeVNlY3Rpb24iLCJzZXR0aW5nc09wdGlvbiIsImludml0ZU9wdGlvbiIsImNhbkludml0ZVRvIiwib25Db21tdW5pdHlJbnZpdGVDbGljayIsImlzQWRtaW5PZiIsIm9uQ29tbXVuaXR5U2V0dGluZ3NDbGljayIsIm9uQ29tbXVuaXR5TWVtYmVyc0NsaWNrIiwiY2xhc3NlcyIsIm9uU3dpdGNoVGhlbWVDbGljayIsInJlcXVpcmUiLCJvbiIsIlVQREFURV9FVkVOVCIsIm9uUHJvZmlsZVVwZGF0ZSIsIlNwYWNlU3RvcmUiLCJVUERBVEVfU0VMRUNURURfU1BBQ0UiLCJvblNlbGVjdGVkU3BhY2VVcGRhdGUiLCJkbmRXYXRjaGVyUmVmIiwid2F0Y2hTZXR0aW5nIiwiY29tcG9uZW50RGlkTW91bnQiLCJkaXNwYXRjaGVyUmVmIiwicmVnaXN0ZXIiLCJvbkFjdGlvbiIsInRoZW1lV2F0Y2hlclJlZiIsIm9uVGhlbWVDaGFuZ2VkIiwidGFnU3RvcmVSZWYiLCJHcm91cEZpbHRlck9yZGVyU3RvcmUiLCJhZGRMaXN0ZW5lciIsIm9uVGFnU3RvcmVVcGRhdGUiLCJjb21wb25lbnRXaWxsVW5tb3VudCIsInVud2F0Y2hTZXR0aW5nIiwidW5yZWdpc3RlciIsIm9mZiIsInJlbW92ZSIsIndpbmRvdyIsIm1hdGNoTWVkaWEiLCJtYXRjaGVzIiwidGhlbWUiLCJzdGFydHNXaXRoIiwic3Vic3RyaW5nIiwiaXNfZGFyayIsInJlbmRlciIsImF2YXRhclNpemUiLCJ1c2VySWQiLCJhdmF0YXJVcmwiLCJnZXRIdHRwQXZhdGFyVXJsIiwiaXNQcm90b3R5cGUiLCJtZW51TmFtZSIsIm5hbWUiLCJidXR0b25zIiwiZG5kIiwicm9vbU5hbWUiLCJpc0RuZCIsIm9uRG5kVG9nZ2xlIiwiaXNNaW5pbWl6ZWQiLCJvbk9wZW5NZW51Q2xpY2siLCJvbkNvbnRleHRNZW51IiwicmVuZGVyQ29udGV4dE1lbnUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFnQkE7O0FBRUE7O0FBR0E7O0FBQ0E7O0FBR0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBSUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7Ozs7SUFlcUJBLFEsV0FEcEIsZ0RBQXFCLHFCQUFyQixDLHlCQUFELE1BQ3FCQSxRQURyQixTQUNzQ0MsZUFBTUM7QUFENUM7QUFDc0U7QUFP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SUksTUFBQSxLQUFLLEVBQUUySSxRQUpYO0FBS0ksTUFBQSxVQUFVLEVBQUUsQ0FBQyxDQUFDLEtBQUs3SSxLQUFMLENBQVdDLG1CQUw3QjtBQU1JLE1BQUEsYUFBYSxFQUFFLEtBQUtxSjtBQU54QixvQkFRSTtBQUFLLE1BQUEsU0FBUyxFQUFDO0FBQWYsb0JBQ0k7QUFBTSxNQUFBLFNBQVMsRUFBQztBQUFoQixvQkFDSSw2QkFBQyxtQkFBRDtBQUNJLE1BQUEsTUFBTSxFQUFFYixNQURaO0FBRUksTUFBQSxJQUFJLEVBQUVuRCxXQUZWO0FBR0ksTUFBQSxHQUFHLEVBQUVvRCxTQUhUO0FBSUksTUFBQSxLQUFLLEVBQUVGLFVBSlg7QUFLSSxNQUFBLE1BQU0sRUFBRUEsVUFMWjtBQU1JLE1BQUEsWUFBWSxFQUFDLE1BTmpCO0FBT0ksTUFBQSxTQUFTLEVBQUM7QUFQZCxNQURKLENBREosRUFZS00sSUFaTCxFQWFLRSxHQWJMLEVBY0tELE9BZEwsQ0FSSixDQURKLEVBMEJLLEtBQUtRLGlCQUFMLEVBMUJMLENBREo7QUE4Qkg7O0FBemlCaUUsQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgMjAyMCwgMjAyMSBUaGUgTWF0cml4Lm9yZyBGb3VuZGF0aW9uIEMuSS5DLlxuXG5MaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xueW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG5TZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGV